diff --git a/.env.example b/.env.example index 6f475a1..7684966 100644 --- a/.env.example +++ b/.env.example @@ -7,7 +7,7 @@ # 本地代理调试(推荐):BASE 留空 + 设置代理目标 NEXT_PUBLIC_API_BASE_URL= -API_PROXY_TARGET=https://sgdj-h5.80sygtm.com +API_PROXY_TARGET=https://webhgbapi.mfcg.me # HTTPS_PROXY=http://127.0.0.1:7890 # HTTP_PROXY=http://127.0.0.1:7890 @@ -15,6 +15,6 @@ API_PROXY_TARGET=https://sgdj-h5.80sygtm.com NEXT_PUBLIC_TRACKER_APP_ID=JHA-1049 NEXT_PUBLIC_GTAG_ID= # 站点正式域名(sitemap / OG / canonical 强制用此值,勿填反代内部域) -# NEXT_PUBLIC_SITE_URL=https://shuguodj.com +# NEXT_PUBLIC_SITE_URL=https://huangguoduanju.im # NEXT_PUBLIC_TRACKER_ENCRYPTED_CONFIG= # NEXT_PUBLIC_YANDEX_METRIKA_ID= diff --git a/.next-dev/dev/build-manifest.json b/.next-dev/dev/build-manifest.json index d0e198a..302bbd2 100644 --- a/.next-dev/dev/build-manifest.json +++ b/.next-dev/dev/build-manifest.json @@ -41,6 +41,21 @@ "static/chunks/turbopack-_1aaoqtn6vriom._.js", "static/chunks/_219uq1sj0q91c._.js" ], + "/drama/[id]/page": [ + "static/chunks/[turbopack]_browser_dev_hmr-client_hmr-client_ts_13pqcwtuzrbk0._.js", + "static/chunks/node_modules_next_dist_compiled_next-devtools_index_090k2jmam7qwg.js", + "static/chunks/1daa_next_dist_compiled_react-dom_cjs_react-dom-client_development_0mp0cp_t-ezj9.js", + "static/chunks/1q96_modules_next_dist_compiled_react-dom_cjs_react-dom_development_1sqry0_53krp4.js", + "static/chunks/node_modules_next_dist_compiled_react-dom_0grqycjrj6mju._.js", + "static/chunks/node_modules_next_dist_compiled_react-server-dom-turbopack_164kp-67asdr9._.js", + "static/chunks/node_modules_next_dist_compiled_1amofcmz--cdp._.js", + "static/chunks/node_modules_next_dist_client_14zvornz047l2._.js", + "static/chunks/node_modules_next_dist_1bjkg68unqmjx._.js", + "static/chunks/node_modules_@swc_helpers_cjs_0oghen6kqggry._.js", + "static/chunks/_1anvha4rlo79g._.js", + "static/chunks/turbopack-_1aaoqtn6vriom._.js", + "static/chunks/_0pmqou_4mtbjb._.js" + ], "/play/[id]/[episode]/page": [ "static/chunks/[turbopack]_browser_dev_hmr-client_hmr-client_ts_13pqcwtuzrbk0._.js", "static/chunks/node_modules_next_dist_compiled_next-devtools_index_090k2jmam7qwg.js", @@ -56,7 +71,7 @@ "static/chunks/turbopack-_1aaoqtn6vriom._.js", "static/chunks/_0slr_qtlqsjni._.js" ], - "/nav/page": [ + "/search/[[...parts]]/page": [ "static/chunks/[turbopack]_browser_dev_hmr-client_hmr-client_ts_13pqcwtuzrbk0._.js", "static/chunks/node_modules_next_dist_compiled_next-devtools_index_090k2jmam7qwg.js", "static/chunks/1daa_next_dist_compiled_react-dom_cjs_react-dom-client_development_0mp0cp_t-ezj9.js", @@ -69,9 +84,9 @@ "static/chunks/node_modules_@swc_helpers_cjs_0oghen6kqggry._.js", "static/chunks/_1anvha4rlo79g._.js", "static/chunks/turbopack-_1aaoqtn6vriom._.js", - "static/chunks/_0w2jlohhfhuy8._.js" + "static/chunks/_0byvfhmmc25t4._.js" ], - "/_not-found/page": [ + "/home-road/page": [ "static/chunks/[turbopack]_browser_dev_hmr-client_hmr-client_ts_13pqcwtuzrbk0._.js", "static/chunks/node_modules_next_dist_compiled_next-devtools_index_090k2jmam7qwg.js", "static/chunks/1daa_next_dist_compiled_react-dom_cjs_react-dom-client_development_0mp0cp_t-ezj9.js", @@ -84,7 +99,7 @@ "static/chunks/node_modules_@swc_helpers_cjs_0oghen6kqggry._.js", "static/chunks/_1anvha4rlo79g._.js", "static/chunks/turbopack-_1aaoqtn6vriom._.js", - "static/chunks/_18x7jxupx5rou._.js" + "static/chunks/_0sf-lmfgdqib-._.js" ] }, "pagesChunkGroupBootstrapParams": {}, diff --git a/.next-dev/dev/cache/fetch-cache/33b034d877957ef32f8e3a176a7fd7c3370eb5ab93f1ab71a9f856aa60eea5b0 b/.next-dev/dev/cache/fetch-cache/33b034d877957ef32f8e3a176a7fd7c3370eb5ab93f1ab71a9f856aa60eea5b0 new file mode 100644 index 0000000..2cc7658 --- /dev/null +++ b/.next-dev/dev/cache/fetch-cache/33b034d877957ef32f8e3a176a7fd7c3370eb5ab93f1ab71a9f856aa60eea5b0 @@ -0,0 +1 @@ +{"kind":"FETCH","data":{"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"Content-Disposition,Refresh-Authorization","connection":"keep-alive","content-encoding":"gzip","content-type":"application/json; charset=utf-8","date":"Sat, 07 Nov 2026 04:13:32 GMT","server":"nginx/1.24.0 (Ubuntu)","transfer-encoding":"chunked"},"body":"eyJjb2RlIjoyMDAsImRhdGEiOnsiY2F0ZWdvcnlMaXN0IjpbeyJpZCI6MTI3MDEsIm5hbWUiOiLpppbpobUiLCJpY29uIjoiIiwidHJhbnNsYXRpb25MaXN0IjpbXSwidXJsVmFsdWUiOiIvIiwiY2F0ZWdvcnlUeXBlIjoxLCJzZW9JbmZvIjp7InRpdGxlIjoi54af5p6c55+t5Ymn5a6Y572RIC0g54Ot6ZeoQUnmiJDkurrnn63liafkuI7nsr7lk4Hnn63liaflnKjnur/op4LnnIsiLCJrZXl3b3JsZCI6WyLnhp/mnpznn63liaciLCLnhp/mnpznn63liaflrpjnvZEiLCJBSeaIkOS6uuefreWJpyIsIuefreWJp+aOqOiNkCIsIumjjuWNjuelnuWls+W9lSIsIueQvOaYjuelnuWls+W9lSIsIuavjeS4iuaUu+eVpSIsIuaegeWTgeWutuS4gSIsIuWcqOe6v+eci+efreWJpyIsIuemj+WIqeefreWJp0FQUCJdLCJkZXNjcmlwdGlvbiI6IuWFqOe9keWOn+WIm0FJ5oiQ5Lq655+t5Ymn5LiO54Ot6Zeo55+t5Ymn6ZuG5pWj5Zyw77yM5LiT5Li65oeC5L2g55qE5oSf5a6Y5L2T6aqM6ICM55Sf44CC5LiN5LuF6L+e6L2944CK6aOO5Y2O56We5aWz5b2V44CL44CK55C85piO56We5aWz5b2V44CL44CK5q+N5LiK5pS755Wl44CL44CK5p6B5ZOB5a625LiB44CL562J5aS06YOo54Ot6ZeoSVDvvIzmm7Tlm4rmi6zpg73luILjgIHku5nkvqDnqb/otorkuI7npoHlv4zmi4nmia/nrYnlhajpopjmnZDniL3liafjgILnlLvotKjmi4nmu6HjgIHmr4/ml6Xmm7TmlrDvvIzml6DorrrmmK/nvZHpobXpmo/lvIDpmo/nnIvov5jmmK/mkK3phY3lrpjmlrlBUFDmjozkuIrov73liafvvIzpg73og73nlYXkuqvml6DliKDlh4/nmoTmnoHpgJ/op4blkKzkvZPpqozjgIIifX0seyJpZCI6MTI3MDIsIm5hbWUiOiJBSeaIkOS6uuefreWJpyIsImljb24iOiIiLCJ0cmFuc2xhdGlvbkxpc3QiOltdLCJ1cmxWYWx1ZSI6Ii9zaG9ydHMiLCJjYXRlZ29yeVR5cGUiOjEsInNlb0luZm8iOnsidGl0bGUiOiJBSeaIkOS6uuefreWJp+Wkp+WFqCAtIOa1t+mHj+eDremXqEFJ5oiQ5Lq655+t5Ymn5Zyo57q/6KeC55yLIHwg54af5p6c55+t5YmnIiwia2V5d29ybGQiOlsiQUnmiJDkurrnn63liaciLCLnn63liaflpKflhagiLCLng63pl6jnn63liafmjqjojZAiLCLpo47ljY7npZ7lpbPlvZUiLCLnkLzmmI7npZ7lpbPlvZUiLCLmr43kuIrmlLvnlaUiLCLpobbnuqfnp4HljqgiLCLni6zlrrbnn63liaciLCLlnKjnur/nnIvnn63liaciLCLnhp/mnpznn63liaciXSwiZGVzY3JpcHRpb24iOiLnhp/mnpznn63liaflhajnq5nnn63liafotYTmupDlpKfmsYfmgLvvvIHkuIDnq5nlvI/nvZHnvZfku5nkvqDlpYflubvjgIHpg73luILnpoHlv4zjgIHlj43ovazpgIbooq3nrYnlhajlk4HnsbvpopjmnZDvvIzngavng63mlLblvZXjgIrpo47ljY7npZ7lpbPlvZXjgIvjgIrnkLzmmI7npZ7lpbPlvZXjgIvjgIrmr43kuIrmlLvnlaXjgIvjgIrpobbnuqfnp4HljqjjgIvnrYnlhajnvZHpq5jliIblipvkvZzjgILmr4/ml6Xpq5jpgJ/mm7TmlrDvvIznlLvotKjpq5jmuIXml6DliKDlh4/vvIzmg7PnnIvnmoTov5nph4zlhajpg73mnInjgIIifX0seyJpZCI6MTI3MDMsIm5hbWUiOiLnn63liafkuJPpopgiLCJpY29uIjoiIiwidHJhbnNsYXRpb25MaXN0IjpbXSwidXJsVmFsdWUiOiIvdG9waWNzIiwiY2F0ZWdvcnlUeXBlIjoxLCJzZW9JbmZvIjp7InRpdGxlIjoi55+t5Ymn5LiT6aKY5aSn5YWoIC0g54Ot6Zeo6aKY5p2Q5ZCI6ZuG5LiO57K+5ZOB55+t5Ymn5Zyo57q/6KeC55yLIHwg54af5p6c55+t5YmnIiwia2V5d29ybGQiOlsi55+t5Ymn5LiT6aKYIiwi55+t5Ymn5ZCI6ZuGIiwi5Y6f5Yib55+t5YmnIiwi6YO95biC55+t5YmnIiwi6a2U5pS555+t5YmnIiwi5LuZ5L6g55+t5YmnIiwi56m/6LaK55+t5YmnIiwi57K+6YCJ6aKY5p2QIiwi5Zyo57q/55yL55+t5YmnIiwi54af5p6c55+t5YmnIl0sImRlc2NyaXB0aW9uIjoi5Zu057uV5qC45b+D5Li76aKY77yM5LiA5Y+j5rCU6L+95a6M5ZCM5qy+5aW95pWF5LqL77yB54af5p6c55+t5Ymn57K+6YCJ6YO95biC54i95paH44CB6a2U5pS55Y+N6L2s44CB54us5a625Y6f5Yib44CB56m/6LaK5LuZ5L6g562J6auY5Lq65rCU55+t5Ymn5LiT6aKY44CC5oyJ6aKY5p2Q6IGa5ZCI5rex5bqm5aW95Ymn77yM5LiN55So5Yiw5aSE57+75om+77yM54K55Ye75b+D5Luq5LiT6aKY5Y2z5Yi755WF55yL5pW057uE57K+5b2p5Ymn6ZuG44CCIn19LHsiaWQiOjEyNzA0LCJuYW1lIjoi55+t5Ymn54Ot5qacIiwiaWNvbiI6IiIsInRyYW5zbGF0aW9uTGlzdCI6W10sInVybFZhbHVlIjoiL3JhbmsiLCJjYXRlZ29yeVR5cGUiOjEsInNlb0luZm8iOnsidGl0bGUiOiLnn63liafmjpLooYzmppwgLSDng63mkq0g5paw5Ymn5qac6auY5Lq65rCU5Y6f5Yib55+t5Ymn5o6S6KGM5qac5Y2VIHwg54af5p6c55+t5YmnIiwia2V5d29ybGQiOlsi55+t5Ymn5o6S6KGM5qacIiwi55+t5Ymn54Ot5qacIiwi54Ot5pKt55+t5YmnIiwi5paw5Ymn5o6o6I2QIiwi5Y6f5Yib55+t5Ymn5o6S6KGM5qacIiwi5a2Y5Zyo5oSf6Zu2Iiwi5pyA5by65pi+56S65ZmoIiwi6Zeq5ama5aSn5L2s5o6J6ams5ZCOIiwi5Zyo57q/55yL55+t5YmnIiwi54af5p6c55+t5YmnIl0sImRlc2NyaXB0aW9uIjoi5YWo56uZ54Ot5bqm5LiO5Y+j56KR6aOO5ZCR5qCH77yB54af5p6c55+t5Ymn5o6S6KGM5qac5a6e5pe25ZCM5q2l54Ot5pKt5qac44CB5paw5Ymn5qac5LiO6L+95Ymn5qac77yM5aSa57u05bqm5p2D5aiB55uY54K544CK5a2Y5Zyo5oSf77ya6Zu244CL44CK5pyA5by65pi+56S65Zmo44CL44CK6Zeq5ama5aSn5L2s5o6J6ams5ZCO44CL562J6Zy45qac5L2z5L2c44CC6Lef5qac6L+95Ymn5LiN6Lip6Zu377yM57K+5b2p6auY5YiG54i954mH5LiA572R5omT5bC944CCIn19LHsiaWQiOjEyNzA1LCJuYW1lIjoi5Zue5a6255qE6LevIiwiaWNvbiI6IiIsInRyYW5zbGF0aW9uTGlzdCI6W10sInVybFZhbHVlIjoiL2hvbWUtcm9hZCIsImNhdGVnb3J5VHlwZSI6MSwic2VvSW5mbyI6eyJ0aXRsZSI6IuWbnuWutueahOi3ryAtIOeGn+aenOefreWJp+acgOaWsOWkh+eUqOWcsOWdgOWPkeW4g+S4juawuOS5heiuv+mXruWFpeWPoyB8IOeGn+aenOefreWJpyIsImtleXdvcmxkIjpbIueGn+aenOefreWJp+Wkh+eUqOWcsOWdgCIsIueGn+aenOefreWJp+acgOaWsOWfn+WQjSIsIuWbnuWutueahOi3ryIsIueGn+aenOefreWJp+WPkeW4g+mhtSIsIuawuOS5heiuv+mXruWFpeWPoyIsIueGn+aenOefreWJp0FQUOS4i+i9vSIsIuWumOaWueS6pOa1gee+pCIsIumYsuWkseiBlOWvvOiIqiJdLCJkZXNjcmlwdGlvbiI6IuaKiuWbnuWutueahOi3r+eVmeWcqOi6q+i+ue+8geeGn+aenOefreWJp+WumOaWueWPkeW4g+mhteWunuaXtuWQjOatpeacgOaWsOWkh+eUqOiuv+mXruWcsOWdgOOAgeawuOS5heWumOe9keWFpeWPo+S4jkFQUOS4i+i9vemTvuaOpeOAguaPkOS+m+WkmuiuvuWkh+S4gOmUruaUtuiXj+aMh+WNl+S4juWumOaWueS6pOa1geekvuWMuu+8jOWRiuWIq+i/t+i3r+WkseiBlO+8jOmaj+aXtueos+WumumhuueVheiuv+mXruOAgiJ9fSx7ImlkIjoxMjcwNiwibmFtZSI6Iuemj+WIqeW6lOeUqCIsImljb24iOiIiLCJ0cmFuc2xhdGlvbkxpc3QiOltdLCJ1cmxWYWx1ZSI6Ii9hcHBzIiwiY2F0ZWdvcnlUeXBlIjoxLCJzZW9JbmZvIjp7InRpdGxlIjoi56aP5Yip5bqU55So5a+86IiqIC0g57K+6YCJ54Ot6Zeo5oiQ5Lq6QVBQ5LiO5LyY6LSo5aW956uZ5o6o6I2QIHwg54af5p6c55+t5YmnIiwia2V5d29ybGQiOlsi5oiQ5Lq6QVBQ5o6o6I2QIiwiOTHnn63liaciLCLnpoHmnpznn63liaciLCLpu4Tmnpznn63liaciLCLmtbfop5LnpL7ljLoiLCLmiJDkurrnn63liadBUFAiLCLnsr7lk4Hlpb3nq5nlr7zoiKoiLCLlhY3otLnnpo/liKlBUFAiLCLnhp/mnpznn63liaciXSwiZGVzY3JpcHRpb24iOiLotoXkurrmsJTnpo/liKnlupTnlKjkuI7nsr7lk4Hlpb3nq5npm4bkuK3okKXvvIHnhp/mnpznn63liafkuLrkvaDnsr7pgInjgIo5MeefreWJp+OAi+OAiuemgeaenOefreWJp+OAi+OAium7hOaenOefreWJp+OAi+OAiua1t+inkuekvuWMuuOAi+etiemrmOWPo+eikeW6lOeUqO+8jOa2teebluWFjei0uei/veWJp+OAgea2qea8q+eyvumAieS4juWQg+eTnOm7keaWmeOAguWuieijheWNs+eUqOOAgeeCueWHu+WNs+eci++8jOW4puS9oOW8gOWQr+WFqOaWueS9jeeahOinhuWQrOWoseS5kOaWsOS9k+mqjOOAgiJ9fV19LCJoYXNoIjpmYWxzZSwibXNnIjoic3VjY2VzcyIsInRpbWUiOiIyMDI2LTExLTA3VDA0OjEzOjMyLjg4N1oiLCJ0aXAiOiLmiJDlip8ifQ==","status":200,"url":"https://webhgbapi.mfcg.me/api/app/translation/category/list"},"revalidate":60,"tags":["translation-category"]} \ No newline at end of file diff --git a/.next-dev/dev/cache/fetch-cache/47d5e73011a3c3119d784a2c4f67223cb8532e2d7ca54b4394d1af6db08c3a9a b/.next-dev/dev/cache/fetch-cache/47d5e73011a3c3119d784a2c4f67223cb8532e2d7ca54b4394d1af6db08c3a9a new file mode 100644 index 0000000..b5db582 --- /dev/null +++ b/.next-dev/dev/cache/fetch-cache/47d5e73011a3c3119d784a2c4f67223cb8532e2d7ca54b4394d1af6db08c3a9a @@ -0,0 +1 @@ +{"kind":"FETCH","data":{"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"Content-Disposition,Refresh-Authorization","connection":"keep-alive","content-encoding":"gzip","content-type":"application/json; charset=utf-8","date":"Sat, 07 Nov 2026 04:13:46 GMT","server":"nginx/1.24.0 (Ubuntu)","transfer-encoding":"chunked"},"body":"eyJjb2RlIjoyMDAsImRhdGEiOnsiaWQiOjE0ODA5LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wMlQyMzo1ODozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTEwLTEyVDA3OjIzOjE0WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wMlQxMDowMzo1MVoiLCJ0aGVtZUlkcyI6WzEyNjg4XSwidGhlbWVOYW1lcyI6WyLmvKvliaciXSwidGhlbWVTbHVncyI6WyJtYW5qdSJdLCJjYXRlZ29yeUlkcyI6WzExMTA1LDExMTAxXSwidGl0bGUiOiLnnJ/kurrlpbTlj6/moqborq3nu4PlpKfluIjvvIjlhagxM+mbhu+8iSIsInBsYXlOYW1lIjoi55yf5Lq65aW05Y+v5qKm6K6t57uD5aSn5biIIiwiZGVzY3JpcHRpb24iOiLljYHlhavlsoHov5jopoHln4vlpLToi6bor7vogIPlpKflrabvvJ/kuI3vvIzlhYjlpZHnuqbkurLlpojlvZPigJzlpbTlj6/moqbigJ3lvIDlsYDni4Lnu4PvvIHlsJHlubTmsojkuojlronppbHlj5flmLLnrJHvvIzkuIDmgJLkuYvkuIvmgo3nhLblsIbkurLlpojmsojlqYnmmbTlvLrooYzlpZHnuqbjgILnq5nkuIrnq57mioDmk4Llj7DvvIzmr43kurLnnqzpl7TljJbouqvmgKfmhJ/nl7TlpbPnibnlt6XvvIzlvZPkvJflnKjkvJfkurrpnaLliY3oh6rmiaPmmKXmva7ms5vmu6XjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrnnJ/kurrlpbTlj6/moqborq3nu4PlpKfluIjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJ6aGVucmVuIiwiZGVzYyI6IuWNgeWFq+Wygei/mOimgeWfi+WktOiLpuivu+iAg+Wkp+Wtpu+8n+S4je+8jOWFiOWlkee6puS6suWmiOW9k+KAnOWltOWPr+aipuKAneW8gOWxgOeLgue7g++8geWwkeW5tOayiOS6iOWuiemlseWPl+WYsueske+8jOS4gOaAkuS5i+S4i+aCjeeEtuWwhuS6suWmiOayiOWpieaZtOW8uuihjOWlkee6puOAguermeS4iuernuaKgOaTguWPsO+8jOavjeS6sueerOmXtOWMlui6q+aAp+aEn+eXtOWls+eJueW3pe+8jOW9k+S8l+WcqOS8l+S6uumdouWJjeiHquaJo+aYpea9ruazm+a7peOAgiIsImFuY2hvciI6IlN5YmlsIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2o3L3RuLzEwNDkvcGxheWxldF9jb3Zlcl82YmQwMmRlM2E0YjUyYTliLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvbjQveXUvMTA0OS9wbGF5bGV0X2NvdmVyXzZiZDAyZGUzYTRiNTJhOWIuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODYxLDEyODY2LDEyODYyXSwidGFnTmFtZXMiOlsi5q+N5a2QIiwi6YeN5Y+jIiwi5aSn5a2mIl0sInRhZ1NsdWdzIjpbIm11emkiLCJ6aG9uZ2tvdSIsImRheHVlIl0sInRvdGFsRXBpc29kZSI6MTMsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE4OCwiaGVhdFZhbHVlIjoyMTY5OCwiY291bnRDb2xsZWN0IjoxLCJjb3VudExpa2UiOjE5LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ5OjMxLjM4NFoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjA0Ljg0M1oiLCJpc0xpa2UiOjIsImlzQ29sbGVjdCI6MiwicGxheWxldENoYXB0ZXJJbmZvIjpbeyJpZCI6MzMwODAsInBsYXlsZXRJZCI6MTQ4MDksImN1cnJlbnRFcGlzb2RlIjoxLCJ0aXRsZSI6IjEiLCJtZDUiOiIiLCJoYXNoIjoiNjc1MmQ5YWM1NTBkZDM4ZjU4N2EwNTNmMDJiMTI0MDU2YTc0MTgyMCIsImhlaWdodCI6MTI1NCwid2lkdGgiOjcyMCwicmF0aW8iOjAuNTc0MTYyNjc5NDI1ODM3MywidmlkZW9VcmwiOiJ2My9rMTIvYzkyYS9kM2Q5L2MyMGEvYzkyZGI5ZWE5MWIxOWJmOTAxYTA3ZDEyMGVjZGZiMTcxMDQ5MjAyNjExMDYwNTE2MTQubTN1OCIsIm1lZGlhU2l6ZSI6MTA5MjkwOTc2LCJtZWRpYVRpbWUiOjU5NSwicGF5VHlwZSI6MCwic2luZ2xlQ29pbnMiOjAsImNhbldhdGNoIjp0cnVlLCJuZWVkVW5sb2NrIjpmYWxzZSwibmVlZFZpcCI6ZmFsc2UsImNvc3RDb2lucyI6MCwiYmFsYW5jZSI6MCwidmlwVmFsaWQiOmZhbHNlLCJpc1VubG9ja2VkIjpmYWxzZX0seyJpZCI6MzMwODEsInBsYXlsZXRJZCI6MTQ4MDksImN1cnJlbnRFcGlzb2RlIjoyLCJ0aXRsZSI6IjIiLCJtZDUiOiIiLCJoYXNoIjoiY2Y1NzE4YmNhNWIzYzg2OTczZDY0ZmNmMjE0MWM5NWEyOTQzMTJiMyIsImhlaWdodCI6NzIwLCJ3aWR0aCI6MTI4MCwicmF0aW8iOjEuNzc3Nzc3Nzc3Nzc3Nzc3NywidmlkZW9VcmwiOiJ2My9rMTIvYzkyYS9kM2Q5L2MyMGEvYWE2MzE5ZjdmZWQ1NDUyNzk1MThmZWVjMzJkZDJjNjAxMDQ5MjAyNjExMDYwNTE2NDUubTN1OCIsIm1lZGlhU2l6ZSI6Mzk2MTU5MjAsIm1lZGlhVGltZSI6MjE1LCJwYXlUeXBlIjowLCJzaW5nbGVDb2lucyI6MCwiY2FuV2F0Y2giOnRydWUsIm5lZWRVbmxvY2siOmZhbHNlLCJuZWVkVmlwIjpmYWxzZSwiY29zdENvaW5zIjowLCJiYWxhbmNlIjowLCJ2aXBWYWxpZCI6ZmFsc2UsImlzVW5sb2NrZWQiOmZhbHNlfSx7ImlkIjozMzA4MiwicGxheWxldElkIjoxNDgwOSwiY3VycmVudEVwaXNvZGUiOjMsInRpdGxlIjoiMyIsIm1kNSI6IiIsImhhc2giOiIwNDY1YmY0NWExODM0OThlYzhmYzc4YTQ5OTAxZTRkYzkwOWQ2ZGJjIiwiaGVpZ2h0Ijo3MjAsIndpZHRoIjoxMjU0LCJyYXRpbyI6MS43NDE2NjY2NjY2NjY2NjY3LCJ2aWRlb1VybCI6IiIsIm1lZGlhU2l6ZSI6NDgxMTk5MjAsIm1lZGlhVGltZSI6MjYwLCJwYXlUeXBlIjoxLCJzaW5nbGVDb2lucyI6MjAsImNhbldhdGNoIjpmYWxzZSwibmVlZFVubG9jayI6dHJ1ZSwibmVlZFZpcCI6ZmFsc2UsImNvc3RDb2lucyI6MjAsImJhbGFuY2UiOjAsInZpcFZhbGlkIjpmYWxzZSwiaXNVbmxvY2tlZCI6ZmFsc2V9LHsiaWQiOjMzMDgzLCJwbGF5bGV0SWQiOjE0ODA5LCJjdXJyZW50RXBpc29kZSI6NCwidGl0bGUiOiI0IiwibWQ1IjoiIiwiaGFzaCI6IjUzZjdjMTYxYjJmMDZjMDc2MjMxODM1MDFjM2ZlNTRkMzgxYmRiY2MiLCJoZWlnaHQiOjcyMCwid2lkdGgiOjEyNTQsInJhdGlvIjoxLjc0MTY2NjY2NjY2NjY2NjcsInZpZGVvVXJsIjoiIiwibWVkaWFTaXplIjo2MTU3OTc3NiwibWVkaWFUaW1lIjozMzAsInBheVR5cGUiOjEsInNpbmdsZUNvaW5zIjoyMCwiY2FuV2F0Y2giOmZhbHNlLCJuZWVkVW5sb2NrIjp0cnVlLCJuZWVkVmlwIjpmYWxzZSwiY29zdENvaW5zIjoyMCwiYmFsYW5jZSI6MCwidmlwVmFsaWQiOmZhbHNlLCJpc1VubG9ja2VkIjpmYWxzZX0seyJpZCI6MzMwODQsInBsYXlsZXRJZCI6MTQ4MDksImN1cnJlbnRFcGlzb2RlIjo1LCJ0aXRsZSI6IjUiLCJtZDUiOiIiLCJoYXNoIjoiYmM4Y2Q5YzEyYjE3OWQ3ZjQyZjc2OGEyY2U3YzAyMzFlNGMwZjc4NSIsImhlaWdodCI6NzIwLCJ3aWR0aCI6MTI4MCwicmF0aW8iOjEuNzc3Nzc3Nzc3Nzc3Nzc3NywidmlkZW9VcmwiOiIiLCJtZWRpYVNpemUiOjc3NjkxMjMyLCJtZWRpYVRpbWUiOjQyNSwicGF5VHlwZSI6MSwic2luZ2xlQ29pbnMiOjIwLCJjYW5XYXRjaCI6ZmFsc2UsIm5lZWRVbmxvY2siOnRydWUsIm5lZWRWaXAiOmZhbHNlLCJjb3N0Q29pbnMiOjIwLCJiYWxhbmNlIjowLCJ2aXBWYWxpZCI6ZmFsc2UsImlzVW5sb2NrZWQiOmZhbHNlfSx7ImlkIjozMzA4NSwicGxheWxldElkIjoxNDgwOSwiY3VycmVudEVwaXNvZGUiOjYsInRpdGxlIjoiNiIsIm1kNSI6IiIsImhhc2giOiJjZWI0NzdiNDc1MmVkOTM2MTdhY2YxMTNhYTkyM2Y1NmY3MDg0MzBmIiwiaGVpZ2h0Ijo3MjAsIndpZHRoIjoxMjgwLCJyYXRpbyI6MS43Nzc3Nzc3Nzc3Nzc3Nzc3LCJ2aWRlb1VybCI6IiIsIm1lZGlhU2l6ZSI6MzU4Mzc3NDQsIm1lZGlhVGltZSI6MTkzLCJwYXlUeXBlIjoxLCJzaW5nbGVDb2lucyI6MjAsImNhbldhdGNoIjpmYWxzZSwibmVlZFVubG9jayI6dHJ1ZSwibmVlZFZpcCI6ZmFsc2UsImNvc3RDb2lucyI6MjAsImJhbGFuY2UiOjAsInZpcFZhbGlkIjpmYWxzZSwiaXNVbmxvY2tlZCI6ZmFsc2V9LHsiaWQiOjMzMDg2LCJwbGF5bGV0SWQiOjE0ODA5LCJjdXJyZW50RXBpc29kZSI6NywidGl0bGUiOiI3IiwibWQ1IjoiIiwiaGFzaCI6IjU4NzhiNmRiMDU1M2M4NjM5MTQxZjM3NDdhYTE2YjgxZjQ1N2I5MGUiLCJoZWlnaHQiOjcyMCwid2lkdGgiOjEyODAsInJhdGlvIjoxLjc3Nzc3Nzc3Nzc3Nzc3NzcsInZpZGVvVXJsIjoiIiwibWVkaWFTaXplIjo0NDkyMTI2NCwibWVkaWFUaW1lIjoyNDgsInBheVR5cGUiOjEsInNpbmdsZUNvaW5zIjoyMCwiY2FuV2F0Y2giOmZhbHNlLCJuZWVkVW5sb2NrIjp0cnVlLCJuZWVkVmlwIjpmYWxzZSwiY29zdENvaW5zIjoyMCwiYmFsYW5jZSI6MCwidmlwVmFsaWQiOmZhbHNlLCJpc1VubG9ja2VkIjpmYWxzZX0seyJpZCI6MzMwODcsInBsYXlsZXRJZCI6MTQ4MDksImN1cnJlbnRFcGlzb2RlIjo4LCJ0aXRsZSI6IjgiLCJtZDUiOiIiLCJoYXNoIjoiZjM0M2U2MWZkYjg4NzhkYjJkODIwYzczM2YyMGZiMWUwZWU0MTI5MyIsImhlaWdodCI6NzIwLCJ3aWR0aCI6MTI4MCwicmF0aW8iOjEuNzc3Nzc3Nzc3Nzc3Nzc3NywidmlkZW9VcmwiOiIiLCJtZWRpYVNpemUiOjc5MzM5Mjk2LCJtZWRpYVRpbWUiOjQzMywicGF5VHlwZSI6MSwic2luZ2xlQ29pbnMiOjIwLCJjYW5XYXRjaCI6ZmFsc2UsIm5lZWRVbmxvY2siOnRydWUsIm5lZWRWaXAiOmZhbHNlLCJjb3N0Q29pbnMiOjIwLCJiYWxhbmNlIjowLCJ2aXBWYWxpZCI6ZmFsc2UsImlzVW5sb2NrZWQiOmZhbHNlfSx7ImlkIjozMzA4OCwicGxheWxldElkIjoxNDgwOSwiY3VycmVudEVwaXNvZGUiOjksInRpdGxlIjoiOSIsIm1kNSI6IiIsImhhc2giOiJjZjVlNDg4YTlkMjFmNWNhNGI0YmYzMmJjNjhjZDIzNDJmYmFjM2IxIiwiaGVpZ2h0Ijo3MjAsIndpZHRoIjoxMjgyLCJyYXRpbyI6MS43ODA1NTU1NTU1NTU1NTU0LCJ2aWRlb1VybCI6IiIsIm1lZGlhU2l6ZSI6NjMzNTMyODAsIm1lZGlhVGltZSI6MzQ4LCJwYXlUeXBlIjoxLCJzaW5nbGVDb2lucyI6MjAsImNhbldhdGNoIjpmYWxzZSwibmVlZFVubG9jayI6dHJ1ZSwibmVlZFZpcCI6ZmFsc2UsImNvc3RDb2lucyI6MjAsImJhbGFuY2UiOjAsInZpcFZhbGlkIjpmYWxzZSwiaXNVbmxvY2tlZCI6ZmFsc2V9LHsiaWQiOjMzMDg5LCJwbGF5bGV0SWQiOjE0ODA5LCJjdXJyZW50RXBpc29kZSI6MTAsInRpdGxlIjoiMTAiLCJtZDUiOiIiLCJoYXNoIjoiMGY1Yjg3ODAzYjUyN2M1MjA4ZDJmZDBhMzdmZWYwYTYzZWM0MTM4ZiIsImhlaWdodCI6NzIwLCJ3aWR0aCI6MTI4MiwicmF0aW8iOjEuNzgwNTU1NTU1NTU1NTU1NCwidmlkZW9VcmwiOiIiLCJtZWRpYVNpemUiOjk1MjIzNzI4LCJtZWRpYVRpbWUiOjUyMSwicGF5VHlwZSI6MSwic2luZ2xlQ29pbnMiOjIwLCJjYW5XYXRjaCI6ZmFsc2UsIm5lZWRVbmxvY2siOnRydWUsIm5lZWRWaXAiOmZhbHNlLCJjb3N0Q29pbnMiOjIwLCJiYWxhbmNlIjowLCJ2aXBWYWxpZCI6ZmFsc2UsImlzVW5sb2NrZWQiOmZhbHNlfSx7ImlkIjozMzA5MCwicGxheWxldElkIjoxNDgwOSwiY3VycmVudEVwaXNvZGUiOjExLCJ0aXRsZSI6IjExIiwibWQ1IjoiIiwiaGFzaCI6Ijg1OTA3OWFmZmQ1ZmZmOGE0MDUzMjM5OTMyMTc5YWUwYWE4ZjZhYjAiLCJoZWlnaHQiOjcyMCwid2lkdGgiOjEyODAsInJhdGlvIjoxLjc3Nzc3Nzc3Nzc3Nzc3NzcsInZpZGVvVXJsIjoiIiwibWVkaWFTaXplIjo5OTc2Nzg0MCwibWVkaWFUaW1lIjo1NDgsInBheVR5cGUiOjEsInNpbmdsZUNvaW5zIjoyMCwiY2FuV2F0Y2giOmZhbHNlLCJuZWVkVW5sb2NrIjp0cnVlLCJuZWVkVmlwIjpmYWxzZSwiY29zdENvaW5zIjoyMCwiYmFsYW5jZSI6MCwidmlwVmFsaWQiOmZhbHNlLCJpc1VubG9ja2VkIjpmYWxzZX0seyJpZCI6MzMwOTEsInBsYXlsZXRJZCI6MTQ4MDksImN1cnJlbnRFcGlzb2RlIjoxMiwidGl0bGUiOiIxMiIsIm1kNSI6IiIsImhhc2giOiJjMjQ5MTQ2MTQyZTc2ZmJmODc4ZTBlNmYyNzI1MTNlZjg1Y2Q1NWNiIiwiaGVpZ2h0Ijo3MjAsIndpZHRoIjoxMjgwLCJyYXRpbyI6MS43Nzc3Nzc3Nzc3Nzc3Nzc3LCJ2aWRlb1VybCI6IiIsIm1lZGlhU2l6ZSI6NzEzNDY5NDQsIm1lZGlhVGltZSI6Mzg1LCJwYXlUeXBlIjoxLCJzaW5nbGVDb2lucyI6MjAsImNhbldhdGNoIjpmYWxzZSwibmVlZFVubG9jayI6dHJ1ZSwibmVlZFZpcCI6ZmFsc2UsImNvc3RDb2lucyI6MjAsImJhbGFuY2UiOjAsInZpcFZhbGlkIjpmYWxzZSwiaXNVbmxvY2tlZCI6ZmFsc2V9LHsiaWQiOjMzMDkyLCJwbGF5bGV0SWQiOjE0ODA5LCJjdXJyZW50RXBpc29kZSI6MTMsInRpdGxlIjoiMTMiLCJtZDUiOiIiLCJoYXNoIjoiZDQyOGZkMWRhZmRmZTgyODMwNGYwNWVjZDMwNzBlZTEyYmE4MWFkYyIsImhlaWdodCI6NzIwLCJ3aWR0aCI6MTI4MCwicmF0aW8iOjEuNzc3Nzc3Nzc3Nzc3Nzc3NywidmlkZW9VcmwiOiIiLCJtZWRpYVNpemUiOjEwNjA5NjQ0OCwibWVkaWFUaW1lIjo1ODEsInBheVR5cGUiOjEsInNpbmdsZUNvaW5zIjoyMCwiY2FuV2F0Y2giOmZhbHNlLCJuZWVkVW5sb2NrIjp0cnVlLCJuZWVkVmlwIjpmYWxzZSwiY29zdENvaW5zIjoyMCwiYmFsYW5jZSI6MCwidmlwVmFsaWQiOmZhbHNlLCJpc1VubG9ja2VkIjpmYWxzZX1dLCJzZW9JbmZvIjp7InRpdGxlIjoi55yf5Lq65aW05Y+v5qKm6K6t57uD5aSn5biI77yI5YWoMTPpm4bvvIkiLCJrZXl3b3JkcyI6WyLnnJ/kurrlpbTlj6/moqborq3nu4PlpKfluIgiLCLmr43lrZDlpZHnuqYiLCLnl7TlpbPnibnlt6UiLCLnnJ/kurrlpbTlj6/moqborq3nu4PlpKfluIjlrozmlbTniYgiLCLlnKjnur/nnIsiLCLmsojkuojlrokiLCLmsojlqYnmmbQiXSwiZGVzY3JpcHRpb24iOiLljYHlhavlsoHov5jopoHln4vlpLToi6bor7vogIPlpKflrabvvJ/kuI3vvIzlhYjlpZHnuqbkurLlpojlvZPigJzlpbTlj6/moqbigJ3lvIDlsYDni4Lnu4PvvIHlsJHlubTmsojkuojlronppbHlj5flmLLnrJHvvIzkuIDmgJLkuYvkuIvmgo3nhLblsIbkurLlpojmsojlqYnmmbTlvLrooYzlpZHnuqbjgILnq5nkuIrnq57mioDmk4Llj7DvvIzmr43kurLnnqzpl7TljJbouqvmgKfmhJ/nl7TlpbPnibnlt6XvvIzlvZPkvJflnKjkvJfkurrpnaLliY3oh6rmiaPmmKXmva7ms5vmu6XjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrnnJ/kurrlpbTlj6/moqborq3nu4PlpKfluIjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsIndlYlNpdGVOYW1lIjoi54af5p6c55+t5YmnIiwiY2Fub25pY2FsVXJsIjoiaHR0cHM6Ly9zaHVndW9kai5jb20vcGxheS96aGVucmVuIn0sImFkdml0aXNlIjp7ImRpYWxvZ0xpc3QiOm51bGwsImhvbWVMaXN0IjpudWxsLCJ2aWRlb1RvcExpc3QiOlt7ImlkIjoiMTEzODIwMDAwMyIsImxvY2F0aW9uIjozLCJ0aXRsZSI6IuWFqOWbvee6pueCriIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS9iNC8xdmIvMnEyLzFuLzVjNmE5N2RjZWNhY2VlMDVlMmRiN2I0NGI4ZmIwODBiLmdpZiIsImxpbmsiOiJodHRwczovL3lrNmViOXEudG9wOjQ1ODIifSx7ImlkIjoiMTEzODcwMDAwMyIsImxvY2F0aW9uIjozLCJ0aXRsZSI6IuepuumZjeWrqeaooSIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8xdHAvcmgvMXpyLzg1L2UwNzUyNzZlZGM2M2Q4MTFkM2M1NzExZjJmZDkwZDBiLkdJRiIsImxpbmsiOiJodHRwczovLzE3MDEudXd4YnlsLmNuL2xhb3Bhbi9pbmRleC5odG1sIn0seyJpZCI6IjExMzg4MDAwMDMiLCJsb2NhdGlvbiI6MywidGl0bGUiOiLmmKXoja8iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjRvLzF6LzFvaS9iMi9iNjhmMjhkNGQ0Zjg1MzJmNWY5YmY4MzYwZjA2NWUxMi5HSUYiLCJsaW5rIjoiaHR0cHM6Ly91NXE4cTUudG9wIn0seyJpZCI6IjExMzgzMDAwMDMiLCJsb2NhdGlvbiI6MywidGl0bGUiOiLmmKXoja/ov7foja8iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMXlzLzI3ai8xN2IvMmhuLzI1NGJiODBmODIxZWNhNzAxOTcwODZhZjRmNTE1OTI5LmdpZiIsImxpbmsiOiJodHRwczovL3BteDVnaGUudG9wOjI5MjAifV0sInZpZGVvRG93bkxpc3QiOlt7ImlkIjoiMTEzODIwMDAwMyIsImxvY2F0aW9uIjozLCJ0aXRsZSI6IuWFqOWbvee6pueCriIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS9iNC8xdmIvMnEyLzFuLzVjNmE5N2RjZWNhY2VlMDVlMmRiN2I0NGI4ZmIwODBiLmdpZiIsImxpbmsiOiJodHRwczovL3lrNmViOXEudG9wOjQ1ODIifSx7ImlkIjoiMTEzODcwMDAwMyIsImxvY2F0aW9uIjozLCJ0aXRsZSI6IuepuumZjeWrqeaooSIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8xdHAvcmgvMXpyLzg1L2UwNzUyNzZlZGM2M2Q4MTFkM2M1NzExZjJmZDkwZDBiLkdJRiIsImxpbmsiOiJodHRwczovLzE3MDEudXd4YnlsLmNuL2xhb3Bhbi9pbmRleC5odG1sIn0seyJpZCI6IjExMzg4MDAwMDMiLCJsb2NhdGlvbiI6MywidGl0bGUiOiLmmKXoja8iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjRvLzF6LzFvaS9iMi9iNjhmMjhkNGQ0Zjg1MzJmNWY5YmY4MzYwZjA2NWUxMi5HSUYiLCJsaW5rIjoiaHR0cHM6Ly91NXE4cTUudG9wIn0seyJpZCI6IjExMzgzMDAwMDMiLCJsb2NhdGlvbiI6MywidGl0bGUiOiLmmKXoja/ov7foja8iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMXlzLzI3ai8xN2IvMmhuLzI1NGJiODBmODIxZWNhNzAxOTcwODZhZjRmNTE1OTI5LmdpZiIsImxpbmsiOiJodHRwczovL3BteDVnaGUudG9wOjI5MjAifV0sImhvdEFwcExpc3QiOm51bGwsIm5ld0FwcExpc3QiOm51bGwsIm11c3RBcHBMaXN0IjpudWxsLCJ0aXRsZUFwcExpc3QiOm51bGwsImZyaWVuZExpc3QiOm51bGwsIm5pbmVHcmlkTGlzdCI6W3siaWQiOiIxMTM4MjAwMDAyIiwibG9jYXRpb24iOjIsInRpdGxlIjoi5YWo5Zu957qm54KuIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzIzdS94OS9rNy8xcDAvN2FlNjZmODBhNmIzODkzZmQ0MTk5OTFjM2NkOTgxYjguZ2lmIiwibGluayI6Imh0dHBzOi8veWs2ZWI5cS50b3A6NDU4MiJ9LHsiaWQiOiIxMTM4NzAwMDAyIiwibG9jYXRpb24iOjIsInRpdGxlIjoi56m66ZmN5aup5qihIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzMwNy8yaHQvMnEwLzJrai9kMWRiYTFhZjExNDQ1MTdmNTcyNDQ0YmU1ZGE3YTgwYy5HSUYiLCJsaW5rIjoiaHR0cHM6Ly8xNzAxLnV3eGJ5bC5jbi9sYW9wYW4vaW5kZXguaHRtbCJ9LHsiaWQiOiIxMTM4ODAwMDAyIiwibG9jYXRpb24iOjIsInRpdGxlIjoi5pil6I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzI4bi8yNnIvMm5xL2kxLzE2N2E1YjMxYjA3NzYzMTMxZDkxYzE4YjcxMjU3MDAyLkdJRiIsImxpbmsiOiJodHRwczovL3U1cThxNS50b3AifSx7ImlkIjoiMTEzODMwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6IuaYpeiNr+i/t+iNryIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yMHQvMnB4L3o2LzJsNS8wNTFkYTUzNjNhNThjNWRhMTRmMzJlZDJhODk1ZTEwOS5naWYiLCJsaW5rIjoiaHR0cHM6Ly9wbXg1Z2hlLnRvcDoyOTIwIn0seyJpZCI6IjExNjM4MDAwMDIiLCJsb2NhdGlvbiI6MiwidGl0bGUiOiLmtbfop5LnpL7ljLoiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjA4LzJsMi8xc20vMnB1LzAyM2IyZjJkYTJjNTFhZDYyYmFlNWIyMDQxNDlhNmQ2LndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMW1wMm9xazMxcDBkYS5jbG91ZGZyb250Lm5ldD9kYz1oZ3MwMDAxIn0seyJpZCI6IjExMzkwMDAwMDIiLCJsb2NhdGlvbiI6MiwidGl0bGUiOiLpu4Tmnpznn63liaciLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvdWkvMzU0L3A5L3F4LzU1MDFjMWRjZWZmZjg3MWFmNzhjMGRiZjMyYjc1YmU0LmpwZyIsImxpbmsiOiJodHRwczovL2Rvd3IydnJ6cjBmb28uY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM4OTAwMDAyIiwibG9jYXRpb24iOjIsInRpdGxlIjoiOTFmYW5zIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzJzOS8xbW0vMmh3LzMzai8wMjMwZTA0ZWM0ZTdkMzFhZjc1MTRjZWEwNDNkMzZkYi53ZWJwIiwibGluayI6Imh0dHBzOi8vZDEyODkwYXB0dWwxZDAuY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM4NjAwMDAyIiwibG9jYXRpb24iOjIsInRpdGxlIjoi6buE5p6c56aB5ryrIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzF1ZS8yeXIvbjkvMjA1Lzc2MmZkNjVmYjMxNzY4YTc2ZjE2NzRjN2VhMjJiMzUxLndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMjg3MWdmYjBrNXQxZS5jbG91ZGZyb250Lm5ldC9kb3dubG9hZC81L2hnczAwMDEifSx7ImlkIjoiMTEzODUwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6IjUx55+t5YmnIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzI3Ni8yMDIvMmo3L2dnL2YwNTNmYjUzYzIyM2UzZTg3YTQwZjIzNjgwOWFmMzkzLndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMWF2czBwb3JzODlmZi5jbG91ZGZyb250Lm5ldD9kYz1oZ3MwMDAxIn0seyJpZCI6IjExMzg0MDAwMDIiLCJsb2NhdGlvbiI6MiwidGl0bGUiOiLnuqLmnpznn63liaciLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMzFxLzJkMS9jbS82eS9kYmI3MzkwNjU1YzM0NGM1NDhkNzU0MWQzMjExM2U0OC53ZWJwIiwibGluayI6Imh0dHBzOi8vZDI4NzFnZmIwazV0MWUuY2xvdWRmcm9udC5uZXQvZG93bmxvYWQvNC9oZ3MwMDAxIn1dLCJ2aWRlb0xpc3QiOm51bGwsInN0b3BMaXN0IjpudWxsLCJmb3JjZWRKdW1wTGlzdCI6bnVsbCwiYXBwSW5mb0FMaXN0IjpbeyJpZCI6IjExMzgyMDAwMTIiLCJsb2NhdGlvbiI6MTIsInRpdGxlIjoi5YWo5Zu957qm54KuIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzIzdS94OS9rNy8xcDAvN2FlNjZmODBhNmIzODkzZmQ0MTk5OTFjM2NkOTgxYjguZ2lmIiwibGluayI6Imh0dHBzOi8veWs2ZWI5cS50b3A6NDU4MiJ9LHsiaWQiOiIxMTM4NzAwMDEyIiwibG9jYXRpb24iOjEyLCJ0aXRsZSI6IuepuumZjeWrqeaooSIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8zMDcvMmh0LzJxMC8ya2ovZDFkYmExYWYxMTQ0NTE3ZjU3MjQ0NGJlNWRhN2E4MGMuR0lGIiwibGluayI6Imh0dHBzOi8vMTcwMS51d3hieWwuY24vbGFvcGFuL2luZGV4Lmh0bWwifSx7ImlkIjoiMTEzODgwMDAxMiIsImxvY2F0aW9uIjoxMiwidGl0bGUiOiLmmKXoja8iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjhuLzI2ci8ybnEvaTEvMTY3YTViMzFiMDc3NjMxMzFkOTFjMThiNzEyNTcwMDIuR0lGIiwibGluayI6Imh0dHBzOi8vdTVxOHE1LnRvcCJ9LHsiaWQiOiIxMTM4MzAwMDEyIiwibG9jYXRpb24iOjEyLCJ0aXRsZSI6IuaYpeiNr+i/t+iNryIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yMHQvMnB4L3o2LzJsNS8wNTFkYTUzNjNhNThjNWRhMTRmMzJlZDJhODk1ZTEwOS5naWYiLCJsaW5rIjoiaHR0cHM6Ly9wbXg1Z2hlLnRvcDoyOTIwIn0seyJpZCI6IjExNjM4MDAwMTIiLCJsb2NhdGlvbiI6MTIsInRpdGxlIjoi5rW36KeS56S+5Yy6IiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzIwOC8ybDIvMXNtLzJwdS8wMjNiMmYyZGEyYzUxYWQ2MmJhZTViMjA0MTQ5YTZkNi53ZWJwIiwibGluayI6Imh0dHBzOi8vZDFtcDJvcWszMXAwZGEuY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM5MDAwMDEyIiwibG9jYXRpb24iOjEyLCJ0aXRsZSI6Ium7hOaenOefreWJpyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS91aS8zNTQvcDkvcXgvNTUwMWMxZGNlZmZmODcxYWY3OGMwZGJmMzJiNzViZTQuanBnIiwibGluayI6Imh0dHBzOi8vZG93cjJ2cnpyMGZvby5jbG91ZGZyb250Lm5ldD9kYz1oZ3MwMDAxIn0seyJpZCI6IjExMzg5MDAwMTIiLCJsb2NhdGlvbiI6MTIsInRpdGxlIjoiOTFmYW5zIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzJzOS8xbW0vMmh3LzMzai8wMjMwZTA0ZWM0ZTdkMzFhZjc1MTRjZWEwNDNkMzZkYi53ZWJwIiwibGluayI6Imh0dHBzOi8vZDEyODkwYXB0dWwxZDAuY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM4NjAwMDEyIiwibG9jYXRpb24iOjEyLCJ0aXRsZSI6Ium7hOaenOemgea8qyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8xdWUvMnlyL245LzIwNS83NjJmZDY1ZmIzMTc2OGE3NmYxNjc0YzdlYTIyYjM1MS53ZWJwIiwibGluayI6Imh0dHBzOi8vZDI4NzFnZmIwazV0MWUuY2xvdWRmcm9udC5uZXQvZG93bmxvYWQvNS9oZ3MwMDAxIn0seyJpZCI6IjExMzg1MDAwMTIiLCJsb2NhdGlvbiI6MTIsInRpdGxlIjoiNTHnn63liaciLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjc2LzIwMi8yajcvZ2cvZjA1M2ZiNTNjMjIzZTNlODdhNDBmMjM2ODA5YWYzOTMud2VicCIsImxpbmsiOiJodHRwczovL2QxYXZzMHBvcnM4OWZmLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzODQwMDAxMiIsImxvY2F0aW9uIjoxMiwidGl0bGUiOiLnuqLmnpznn63liaciLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMzFxLzJkMS9jbS82eS9kYmI3MzkwNjU1YzM0NGM1NDhkNzU0MWQzMjExM2U0OC53ZWJwIiwibGluayI6Imh0dHBzOi8vZDI4NzFnZmIwazV0MWUuY2xvdWRmcm9udC5uZXQvZG93bmxvYWQvNC9oZ3MwMDAxIn1dLCJhcHBJbmZvQkxpc3QiOlt7ImlkIjoiMTEzODIwMDAxMyIsImxvY2F0aW9uIjoxMywidGl0bGUiOiLlhajlm73nuqbngq4iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjN1L3g5L2s3LzFwMC83YWU2NmY4MGE2YjM4OTNmZDQxOTk5MWMzY2Q5ODFiOC5naWYiLCJsaW5rIjoiaHR0cHM6Ly95azZlYjlxLnRvcDo0NTgyIn0seyJpZCI6IjExMzg3MDAwMTMiLCJsb2NhdGlvbiI6MTMsInRpdGxlIjoi56m66ZmN5aup5qihIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzMwNy8yaHQvMnEwLzJrai9kMWRiYTFhZjExNDQ1MTdmNTcyNDQ0YmU1ZGE3YTgwYy5HSUYiLCJsaW5rIjoiaHR0cHM6Ly8xNzAxLnV3eGJ5bC5jbi9sYW9wYW4vaW5kZXguaHRtbCJ9LHsiaWQiOiIxMTM4ODAwMDEzIiwibG9jYXRpb24iOjEzLCJ0aXRsZSI6IuaYpeiNryIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yOG4vMjZyLzJucS9pMS8xNjdhNWIzMWIwNzc2MzEzMWQ5MWMxOGI3MTI1NzAwMi5HSUYiLCJsaW5rIjoiaHR0cHM6Ly91NXE4cTUudG9wIn0seyJpZCI6IjExMzgzMDAwMTMiLCJsb2NhdGlvbiI6MTMsInRpdGxlIjoi5pil6I2v6L+36I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzIwdC8ycHgvejYvMmw1LzA1MWRhNTM2M2E1OGM1ZGExNGYzMmVkMmE4OTVlMTA5LmdpZiIsImxpbmsiOiJodHRwczovL3BteDVnaGUudG9wOjI5MjAifSx7ImlkIjoiMTE2MzgwMDAxMyIsImxvY2F0aW9uIjoxMywidGl0bGUiOiLmtbfop5LnpL7ljLoiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjA4LzJsMi8xc20vMnB1LzAyM2IyZjJkYTJjNTFhZDYyYmFlNWIyMDQxNDlhNmQ2LndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMW1wMm9xazMxcDBkYS5jbG91ZGZyb250Lm5ldD9kYz1oZ3MwMDAxIn0seyJpZCI6IjExMzkwMDAwMTMiLCJsb2NhdGlvbiI6MTMsInRpdGxlIjoi6buE5p6c55+t5YmnIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlL3VpLzM1NC9wOS9xeC81NTAxYzFkY2VmZmY4NzFhZjc4YzBkYmYzMmI3NWJlNC5qcGciLCJsaW5rIjoiaHR0cHM6Ly9kb3dyMnZyenIwZm9vLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzODkwMDAxMyIsImxvY2F0aW9uIjoxMywidGl0bGUiOiI5MWZhbnMiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMnM5LzFtbS8yaHcvMzNqLzAyMzBlMDRlYzRlN2QzMWFmNzUxNGNlYTA0M2QzNmRiLndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMTI4OTBhcHR1bDFkMC5jbG91ZGZyb250Lm5ldD9kYz1oZ3MwMDAxIn0seyJpZCI6IjExMzg2MDAwMTMiLCJsb2NhdGlvbiI6MTMsInRpdGxlIjoi6buE5p6c56aB5ryrIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzF1ZS8yeXIvbjkvMjA1Lzc2MmZkNjVmYjMxNzY4YTc2ZjE2NzRjN2VhMjJiMzUxLndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMjg3MWdmYjBrNXQxZS5jbG91ZGZyb250Lm5ldC9kb3dubG9hZC81L2hnczAwMDEifSx7ImlkIjoiMTEzODUwMDAxMyIsImxvY2F0aW9uIjoxMywidGl0bGUiOiI1MeefreWJpyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yNzYvMjAyLzJqNy9nZy9mMDUzZmI1M2MyMjNlM2U4N2E0MGYyMzY4MDlhZjM5My53ZWJwIiwibGluayI6Imh0dHBzOi8vZDFhdnMwcG9yczg5ZmYuY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM4NDAwMDEzIiwibG9jYXRpb24iOjEzLCJ0aXRsZSI6Iue6ouaenOefreWJpyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8zMXEvMmQxL2NtLzZ5L2RiYjczOTA2NTVjMzQ0YzU0OGQ3NTQxZDMyMTEzZTQ4LndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMjg3MWdmYjBrNXQxZS5jbG91ZGZyb250Lm5ldC9kb3dubG9hZC80L2hnczAwMDEifV19fSwiaGFzaCI6ZmFsc2UsIm1zZyI6InN1Y2Nlc3MiLCJ0aW1lIjoiMjAyNi0xMS0wN1QwNDoxMzo0Ni40NjNaIiwidGlwIjoi5oiQ5YqfIn0=","status":200,"url":"https://webhgbapi.mfcg.me/api/app/playlet/detail?slug=zhenren"},"revalidate":60,"tags":["playlet-detail","playlet-detail-zhenren"]} \ No newline at end of file diff --git a/.next-dev/dev/cache/fetch-cache/53405056f559c4208f8c9b84b720240e7639d55934ca61f555ff5090912ef0ae b/.next-dev/dev/cache/fetch-cache/53405056f559c4208f8c9b84b720240e7639d55934ca61f555ff5090912ef0ae new file mode 100644 index 0000000..dbc8bab --- /dev/null +++ b/.next-dev/dev/cache/fetch-cache/53405056f559c4208f8c9b84b720240e7639d55934ca61f555ff5090912ef0ae @@ -0,0 +1 @@ +{"kind":"FETCH","data":{"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"Content-Disposition,Refresh-Authorization","connection":"keep-alive","content-encoding":"gzip","content-type":"application/json; charset=utf-8","date":"Sat, 07 Nov 2026 04:11:46 GMT","server":"nginx/1.24.0 (Ubuntu)","transfer-encoding":"chunked"},"body":"eyJjb2RlIjoyMDAsImRhdGEiOnsidG90YWxDb3VudCI6MTcwLCJwYWdlU2l6ZSI6MTIsInBhZ2VOdW0iOjEsImxpc3QiOlt7ImlkIjoxNDQ0NSwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOmZhbHNlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTEwLTI4VDE1OjE3OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDJUMDQ6MzM6MTRaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA0VDEyOjEyOjQwWiIsInRoZW1lSWRzIjpbMTI2ODVdLCJ0aGVtZU5hbWVzIjpbIumDveW4giJdLCJ0aGVtZVNsdWdzIjpbImR1c2hpIl0sImNhdGVnb3J5SWRzIjpbMTExMDVdLCJ0aXRsZSI6IuS4iumXqOS/rumAvCIsInBsYXlOYW1lIjoi5LiK6Zeo5L+u6YC8IiwiZGVzY3JpcHRpb24iOiLlubTovbvosoznvo7nmoTlsJHlpofni6zoh6rlnKjlrrbvvIzouqvnqb/mgKfmhJ/nnaHoo5nlsIbmm7zlppnouqvlp7/li77li5Llvpfmt4vmvJPlsL3oh7TjgILkuIrpl6jmo4Dkv67nmoTlubTovbvluIjlgoXkuIDouI/lhaXmiL/pl6jvvIznm67lhYnkvr/mrbvmrbvplIHkvY/lpbnppbHmu6HlnIbmtqbnmoToh4DogonvvIzkvZPlhoXljp/lp4vnmoTmrLLmnJvnnqzpl7Tooqvngrnnh4PjgILntKfnu7fnmoToo6Too4bpq5jpq5jpvJPotbfvvIzku5blho3kuZ/ml6Dms5XljovmipHlhoXlv4PnmoTlhrLliqjjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrkuIrpl6jkv67pgLzjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw06ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6InNoYW5nbWUiLCJkZXNjIjoi5bm06L276LKM576O55qE5bCR5aaH54us6Ieq5Zyo5a6277yM6Lqr56m/5oCn5oSf552h6KOZ5bCG5pu85aaZ6Lqr5ae/5Yu+5YuS5b6X5reL5ryT5bC96Ie044CC5LiK6Zeo5qOA5L+u55qE5bm06L275biI5YKF5LiA6LiP5YWl5oi/6Zeo77yM55uu5YWJ5L6/5q275q276ZSB5L2P5aW56aWx5ruh5ZyG5ram55qE6IeA6IKJ77yM5L2T5YaF5Y6f5aeL55qE5qyy5pyb556s6Ze06KKr54K554eD44CC57Sn57u355qE6KOk6KOG6auY6auY6byT6LW377yM5LuW5YaN5Lmf5peg5rOV5Y6L5oqR5YaF5b+D55qE5Yay5Yqo44CCIiwiYW5jaG9yIjoieWUnIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzQ2Lzk1LzEwNDkvcGxheWxldF9jb3Zlcl9hMjg2ODlkODcxNWIwMDJlLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvMW0vdXQvMTA0OS9wbGF5bGV0X2NvdmVyX2EyODY4OWQ4NzE1YjAwMmUuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUzXSwidGFnTmFtZXMiOlsiQUnmiJDkurrnn63liaciXSwidGFnU2x1Z3MiOlsiQ1JESiJdLCJ0b3RhbEVwaXNvZGUiOjQsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE5MSwiaGVhdFZhbHVlIjoyMzYxNCwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE4LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQxOjMwLjU0M1oiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAwOjAwOjE1LjQyNVoiLCJzZW9JbmZvIjp7InRpdGxlIjoi5LiK6Zeo5L+u6YC8Iiwia2V5d29ybGQiOlsi5LiK6Zeo5L+u6YC8Iiwi54af5aWz5Lq65aa7Iiwi5qyy5pyb6YeK5pS+Iiwi5LiK6Zeo5L+u6YC85a6M5pW054mIIiwi5Zyo57q/55yLIiwi57u05L+u5belIl0sImRlc2NyaXB0aW9uIjoi5bm06L276LKM576O55qE5bCR5aaH54us6Ieq5Zyo5a6277yM6Lqr56m/5oCn5oSf552h6KOZ5bCG5pu85aaZ6Lqr5ae/5Yu+5YuS5b6X5reL5ryT5bC96Ie044CC5LiK6Zeo5qOA5L+u55qE5bm06L275biI5YKF5LiA6LiP5YWl5oi/6Zeo77yM55uu5YWJ5L6/5q275q276ZSB5L2P5aW56aWx5ruh5ZyG5ram55qE6IeA6IKJ77yM5L2T5YaF5Y6f5aeL55qE5qyy5pyb556s6Ze06KKr54K554eD44CC57Sn57u355qE6KOk6KOG6auY6auY6byT6LW377yM5LuW5YaN5Lmf5peg5rOV5Y6L5oqR5YaF5b+D55qE5Yay5Yqo44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5LiK6Zeo5L+u6YC844CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysNOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDUyMywic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6dHJ1ZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wM1QxMjoxNDozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTA5LTEyVDIxOjUwOjA1WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMC0wMVQwODowMzoxNloiLCJ0aGVtZUlkcyI6WzEyNjgxLDEyNjg1XSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciLCLpg73luIIiXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiLCJkdXNoaSJdLCJjYXRlZ29yeUlkcyI6WzExMTAyLDExMTA1XSwidGl0bGUiOiLpobbnuqfnp4HljqjvvIjlhagxMOmbhu+8iSIsInBsYXlOYW1lIjoi6aG257qn56eB5Y6oIiwiZGVzY3JpcHRpb24iOiLnoLTkuqflsJHniLflsI/pob7lnKjkuIDlpJzkuYvpl7TlrrbpgZPkuK3okL3vvIzmtYHokL3oh7Pmr5TlvJfliKnlsbHluoTlvZPotbfkuobkuIrpl6jnp4HljqjjgILosIHmlpnku5bng7nliLbnmoTpobbnuqfmlpnnkIbnq5/mnInnnYDml6DkuI7kvKbmr5TnmoTprZTlipvvvIzorqnkuIDkvY3kvY3pq5jotLXkvJjpm4XnmoTosarpl6jotLXlpoflkIPlrozlkI7kuIvpnaLmmKXmva7ms5vmu6XjgIHlvZPlnLrnvp7ogLvmsYLmrKLjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrpobbnuqfnp4HljqjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJkaW5namlzIiwiZGVzYyI6IuegtOS6p+WwkeeIt+Wwj+mhvuWcqOS4gOWknOS5i+mXtOWutumBk+S4reiQve+8jOa1geiQveiHs+avlOW8l+WIqeWxseW6hOW9k+i1t+S6huS4iumXqOengeWOqOOAguiwgeaWmeS7lueDueWItueahOmhtue6p+aWmeeQhuern+acieedgOaXoOS4juS8puavlOeahOmtlOWKm++8jOiuqeS4gOS9jeS9jemrmOi0teS8mOmbheeahOixqumXqOi0teWmh+WQg+WujOWQjuS4i+mdouaYpea9ruazm+a7peOAgeW9k+Wcuue+nuiAu+axguasouOAgiIsImFuY2hvciI6IiIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9tcS9jZy8xMDQ5L3BsYXlsZXRfY292ZXJfNzUyYjk1OTdhZmViZDlhOC5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL20zLzkzLzEwNDkvcGxheWxldF9jb3Zlcl9lNjRkNzkyZTYyODI5YTY1LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MSwxMjg1Ml0sInRhZ05hbWVzIjpbIuWOn+WImyIsIum7hOaenCJdLCJ0YWdTbHVncyI6WyJZQyIsImh1YW5nZ3VvIl0sInRvdGFsRXBpc29kZSI6MTAsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE5OSwiaGVhdFZhbHVlIjoyMzI4MCwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE0LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ2OjIyLjMwMVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjEzLjY0MVoiLCJzZW9JbmZvIjp7InRpdGxlIjoi6aG257qn56eB5Y6o77yI5YWoMTDpm4bvvIkiLCJrZXl3b3JsZCI6WyLpobbnuqfnp4HljqgiLCLosarpl6jnp4HljqgiLCLotLXlpofmsYLmrKIiLCLpobbnuqfnp4HljqjlrozmlbTniYgiLCLlnKjnur/nnIsiLCLlsI/pob4iLCLlpaXmlq/ljaHlvbHlkI4iXSwiZGVzY3JpcHRpb24iOiLnoLTkuqflsJHniLflsI/pob7lnKjkuIDlpJzkuYvpl7TlrrbpgZPkuK3okL3vvIzmtYHokL3oh7Pmr5TlvJfliKnlsbHluoTlvZPotbfkuobkuIrpl6jnp4HljqjjgILosIHmlpnku5bng7nliLbnmoTpobbnuqfmlpnnkIbnq5/mnInnnYDml6DkuI7kvKbmr5TnmoTprZTlipvvvIzorqnkuIDkvY3kvY3pq5jotLXkvJjpm4XnmoTosarpl6jotLXlpoflkIPlrozlkI7kuIvpnaLmmKXmva7ms5vmu6XjgIHlvZPlnLrnvp7ogLvmsYLmrKLjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrpobbnuqfnp4HljqjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDY1NSwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDNUMDE6NTY6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMC0wMlQxMToxNTowMFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMDNUMTE6MjQ6MjhaIiwidGhlbWVJZHMiOlsxMjY4NV0sInRoZW1lTmFtZXMiOlsi6YO95biCIl0sInRoZW1lU2x1Z3MiOlsiZHVzaGkiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNV0sInRpdGxlIjoi6KKr5r2c6KaP5YmH55qE5aWz5a2p77yI5YWoMTHpm4bvvIkiLCJwbGF5TmFtZSI6Iuiiq+a9nOimj+WJh+eahOWls+WtqSIsImRlc2NyaXB0aW9uIjoi5rex5aSc55qE5YaZ5a2X5qW85Yqe5YWs5a6k6YeM77yM6buv5reh55qE54Gv5YWJ5bCG5rCU5rCb5ouJ5YWl5Luk5Lq656qS5oGv55qE6L6557yY44CC6Z2i5a+55rK56IW756eD6aG255qE5LiK5Y+455So5Y2H6IGM5Yqg6Jaq5YGa562556CB44CB5bim552A6Zyy6aqo5a6h6KeG5LiO6IOB6L+r55qE5LiR6ZmL5Zi06IS477yM6KKr6YC85Yiw5oKs5bSW6L6557yY55qE5aW577yM56m256uf5Lya6YCJ5oup5Y2R5b6u5bGI5pyN6L+Y5piv57ud5Zyw5Y+N5Ye777yf5b2T5oyH6ZKI5oyH5ZCR5piO5pep5Y2B54K544CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6KKr5r2c6KaP5YmH55qE5aWz5a2p44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTHpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiYmVpcWlhbiIsImRlc2MiOiLmt7HlpJznmoTlhpnlrZfmpbzlip7lhazlrqTph4zvvIzpu6/mt6HnmoTnga/lhYnlsIbmsJTmsJvmi4nlhaXku6TkurrnqpLmga/nmoTovrnnvJjjgILpnaLlr7nmsrnohbvnp4PpobbnmoTkuIrlj7jnlKjljYfogYzliqDolqrlgZrnrbnnoIHjgIHluKbnnYDpnLLpqqjlrqHop4bkuI7og4Hov6vnmoTkuJHpmYvlmLTohLjvvIzooqvpgLzliLDmgqzltJbovrnnvJjnmoTlpbnvvIznqbbnq5/kvJrpgInmi6nljZHlvq7lsYjmnI3ov5jmmK/nu53lnLDlj43lh7vvvJ/lvZPmjIfpkojmjIflkJHmmI7ml6nljYHngrnjgIIiLCJhbmNob3IiOiItIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3puL3oyLzEwNDkvcGxheWxldF9jb3Zlcl9jMjU4MzFiNGJlNDVkNTI0LmpwZyIsImhvcml6b250YWxDb3ZlciI6IiIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1NiwxMjg1NV0sInRhZ05hbWVzIjpbIuiBjOWcuuiwg+aVmSIsIumDveW4giJdLCJ0YWdTbHVncyI6WyJaQ1RKIiwiZHVzaGkiXSwidG90YWxFcGlzb2RlIjoxMSwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTYzLCJoZWF0VmFsdWUiOjIxMTUwLCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTUsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDg6MDUuMTQ2WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MTguMzI2WiIsInNlb0luZm8iOnsidGl0bGUiOiLooqvmvZzopo/liYfnmoTlpbPlranvvIjlhagxMembhu+8iSIsImtleXdvcmxkIjpbIuiiq+a9nOinhOWImeeahOWls+WtqSIsIuWKnuWFrOWupOa9nOinhOWImSIsIuadg+WKm+a4uOaIjyIsIuiiq+a9nOinhOWImeeahOWls+WtqeWujOaVtOeJiCIsIuWcqOe6v+eciyIsIueng+mhtuS4iuWPuCIsIuWls+iBjOWRmCJdLCJkZXNjcmlwdGlvbiI6Iua3seWknOeahOWGmeWtl+alvOWKnuWFrOWupOmHjO+8jOm7r+a3oeeahOeBr+WFieWwhuawlOawm+aLieWFpeS7pOS6uueqkuaBr+eahOi+uee8mOOAgumdouWvueayueiFu+eng+mhtueahOS4iuWPuOeUqOWNh+iBjOWKoOiWquWBmuetueeggeOAgeW4puedgOmcsumqqOWuoeinhuS4juiDgei/q+eahOS4kemZi+WYtOiEuO+8jOiiq+mAvOWIsOaCrOW0lui+uee8mOeahOWlue+8jOeptuern+S8mumAieaLqeWNkeW+ruWxiOacjei/mOaYr+e7neWcsOWPjeWHu++8n+W9k+aMh+mSiOaMh+WQkeaYjuaXqeWNgeeCueOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuiiq+a9nOimj+WJh+eahOWls+WtqeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEx6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NzQ4LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wMVQxOTo0NTozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTEwLTEwVDAzOjAwOjAwWiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMC0xMlQwMzo1MjoxNloiLCJ0aGVtZUlkcyI6WzEyNjg1XSwidGhlbWVOYW1lcyI6WyLpg73luIIiXSwidGhlbWVTbHVncyI6WyJkdXNoaSJdLCJjYXRlZ29yeUlkcyI6WzExMTA1LDExMTAxXSwidGl0bGUiOiLoi4/ogIHluIjnmoToo7jotLfkurrnlJ/vvIjph5HluIHop6PplIHvvInvvIjlhag16ZuG77yJIiwicGxheU5hbWUiOiLoi4/ogIHluIjnmoToo7jotLfkurrnlJ/vvIjph5HluIHop6PplIHvvIkiLCJkZXNjcmlwdGlvbiI6Iua4qeaflOerr+W6hOeahOiLj+iAgeW4iOS4uuS6huabv+WXnOi1jOaIkOaAp+eahOeItuS6sui/mOa4heW3qOminemrmOWIqei0t++8jOi/q+S6juaXoOWliOi1sOS4iuS6huWAn+ijuOi0t+eahOe7nei3r+OAguebtOWIsOWAuuS4u+a3seWknOaJk+W8gOWKoOWvhuebuOWGjOeahOmCo+S4gOWIu++8jOmch+aDiuWcsOWPkeeOsOWls+S4u+inkuern+eEtuWwseaYr+iHquW3seW5s+aXpemHjOmrmOmrmOWcqOS4iueahOaAp+aEn+Wls+iAgeW4iO+8geeGn+aenOefreWJp1dFQuaPkOS+m+OAiuiLj+iAgeW4iOeahOijuOi0t+S6uueUn++8iOmHkeW4geino+mUge+8ieOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDXpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoic3VsYW9zaCIsImRlc2MiOiLmuKnmn5Tnq6/luoTnmoToi4/ogIHluIjkuLrkuobmm7/ll5zotYzmiJDmgKfnmoTniLbkurLov5jmuIXlt6jpop3pq5jliKnotLfvvIzov6vkuo7ml6DlpYjotbDkuIrkuoblgJ/oo7jotLfnmoTnu53ot6/jgILnm7TliLDlgLrkuLvmt7HlpJzmiZPlvIDliqDlr4bnm7jlhoznmoTpgqPkuIDliLvvvIzpnIfmg4rlnLDlj5HnjrDlpbPkuLvop5Lnq5/nhLblsLHmmK/oh6rlt7HlubPml6Xph4zpq5jpq5jlnKjkuIrnmoTmgKfmhJ/lpbPogIHluIjvvIEiLCJhbmNob3IiOiItIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2czLzFxLzEwNDkvcGxheWxldF9jb3Zlcl8wMDk2N2M3ODhkYjVjMTgzLmpwZyIsImhvcml6b250YWxDb3ZlciI6IiIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1NiwxMjg1NV0sInRhZ05hbWVzIjpbIuiBjOWcuuiwg+aVmSIsIumDveW4giJdLCJ0YWdTbHVncyI6WyJaQ1RKIiwiZHVzaGkiXSwidG90YWxFcGlzb2RlIjo1LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNzEsImhlYXRWYWx1ZSI6MjEwOTIsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxMywiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0OTowMS4yMDVaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMTowMDoxOS42MzVaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuiLj+iAgeW4iOeahOijuOi0t+S6uueUn++8iOmHkeW4geino+mUge+8ie+8iOWFqDXpm4bvvIkiLCJrZXl3b3JsZCI6WyLoi4/ogIHluIjnmoToo7jotLfkurrnlJ8iLCLoo7jotLfpmbfpmLEiLCLpq5jlhrflvqHlp5AiLCLoi4/ogIHluIjnmoToo7jotLfkurrnlJ/lrozmlbTniYgiLCLlnKjnur/nnIsiLCLoi4/ogIHluIgiLCLotYzprLzniLkiXSwiZGVzY3JpcHRpb24iOiLmuKnmn5Tnq6/luoTnmoToi4/ogIHluIjkuLrkuobmm7/ll5zotYzmiJDmgKfnmoTniLbkurLov5jmuIXlt6jpop3pq5jliKnotLfvvIzov6vkuo7ml6DlpYjotbDkuIrkuoblgJ/oo7jotLfnmoTnu53ot6/jgILnm7TliLDlgLrkuLvmt7HlpJzmiZPlvIDliqDlr4bnm7jlhoznmoTpgqPkuIDliLvvvIzpnIfmg4rlnLDlj5HnjrDlpbPkuLvop5Lnq5/nhLblsLHmmK/oh6rlt7HlubPml6Xph4zpq5jpq5jlnKjkuIrnmoTmgKfmhJ/lpbPogIHluIjvvIHnhp/mnpznn63liadXRULmj5DkvpvjgIroi4/ogIHluIjnmoToo7jotLfkurrnlJ/vvIjph5HluIHop6PplIHvvInjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw16ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0ODI0LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6ZmFsc2UsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTAtMzFUMDI6MTY6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMC0xOFQwMjoyMDowMFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMTlUMTA6NDc6MDNaIiwidGhlbWVJZHMiOlsxMjY4NV0sInRoZW1lTmFtZXMiOlsi6YO95biCIl0sInRoZW1lU2x1Z3MiOlsiZHVzaGkiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNV0sInRpdGxlIjoi5qCh5Zut5a6g54mp546p5a6277yI6YeR5biB6Kej6ZSB77yJ77yI5YWoNembhu+8iSIsInBsYXlOYW1lIjoi5qCh5Zut5a6g54mp546p5a6277yI6YeR5biB6Kej6ZSB77yJIiwiZGVzY3JpcHRpb24iOiLlvIDlsYDnm7TmjqXmjZXojrfmnoHlk4Hpq5jlhrflvqHlp5DvvIHkuIDmnJ3mhI/lpJbnqb/otorov5vnlq/ni4LnmoTmoKHlm63lrqDnianmuLjmiI/kuJbnlYzvvIzmmJTml6Xpq5jkuI3lj6/mlIDnmoTmoKHlm63lpbPnpZ7nnqzpl7TmsqbokL3kuLrlpIfog47vvIzogIzmi6XmnInprZTprLzoiKzlgrLkurrouqvmnZDnmoTkvZPogrLogIHluIjkuZ/miJDkuobkvaDnmoTkuJPlsZ7ku7vkurrmkYbluIPnmoTnjI7nianjgILmnoHoh7TnmoTouqvmnZDnjJvng4jnorDmkp7jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmoKHlm63lrqDniannjqnlrrbvvIjph5HluIHop6PplIHvvInjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw16ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6InhpYW95dWEiLCJkZXNjIjoi5byA5bGA55u05o6l5o2V6I635p6B5ZOB6auY5Ya35b6h5aeQ77yB5LiA5pyd5oSP5aSW56m/6LaK6L+b55av54uC55qE5qCh5Zut5a6g54mp5ri45oiP5LiW55WM77yM5piU5pel6auY5LiN5Y+v5pSA55qE5qCh5Zut5aWz56We556s6Ze05rKm6JC95Li65aSH6IOO77yM6ICM5oul5pyJ6a2U6ay86Iis5YKy5Lq66Lqr5p2Q55qE5L2T6IKy6ICB5biI5Lmf5oiQ5LqG5L2g55qE5LiT5bGe5Lu75Lq65pGG5biD55qE54yO54mp44CC5p6B6Ie055qE6Lqr5p2Q54yb54OI56Kw5pKe44CCIiwiYW5jaG9yIjoiLSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9sdS9iYi8xMDQ5L3BsYXlsZXRfY292ZXJfYTFkZDVjMWIwMjIyN2VhZS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiIiLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTYsMTI4NTUsMTI4NjJdLCJ0YWdOYW1lcyI6WyLogYzlnLrosIPmlZkiLCLpg73luIIiLCLlpKflraYiXSwidGFnU2x1Z3MiOlsiWkNUSiIsImR1c2hpIiwiZGF4dWUiXSwidG90YWxFcGlzb2RlIjo1LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNjEsImhlYXRWYWx1ZSI6MjA0MDUsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoyMCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0OTo0MC4yMDhaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMTowMDoxNi41NTZaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuagoeWbreWuoOeJqeeOqeWutu+8iOmHkeW4geino+mUge+8ie+8iOWFqDXpm4bvvIkiLCJrZXl3b3JsZCI6WyLmoKHlm63lrqDniannjqnlrrYiLCLmuLjmiI/nqb/otooiLCLmoKHlm63lvqHlp5AiLCLmoKHlm63lrqDniannjqnlrrblrozmlbTniYgiLCJJbue6v+eciyIsIuaegeWTgeW+oeWnkCIsIuS9k+iCsuiAgeW4iCJdLCJkZXNjcmlwdGlvbiI6IuW8gOWxgOebtOaOpeaNleiOt+aegeWTgemrmOWGt+W+oeWnkO+8geS4gOacneaEj+Wkluepv+i2iui/m+eWr+eLgueahOagoeWbreWuoOeJqea4uOaIj+S4lueVjO+8jOaYlOaXpemrmOS4jeWPr+aUgOeahOagoeWbreWls+elnueerOmXtOaypuiQveS4uuWkh+iDju+8jOiAjOaLpeaciemtlOmsvOiIrOWCsuS6uui6q+adkOeahOS9k+iCsuiAgeW4iOS5n+aIkOS6huS9oOeahOS4k+WxnuS7u+S6uuaRhuW4g+eahOeMjueJqeOAguaegeiHtOeahOi6q+adkOeMm+eDiOeisOaSnuOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuagoeWbreWuoOeJqeeOqeWutu+8iOmHkeW4geino+mUge+8ieOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDXpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ1NzQsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOnRydWUsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDJUMTU6MDA6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0wOS0xMlQyMTo1MDowMloiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMDFUMDg6MDM6MTZaIiwidGhlbWVJZHMiOlsxMjY4MSwxMjY4NV0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIiwi6YO95biCIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIiwiZHVzaGkiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMl0sInRpdGxlIjoi5oiR5Zyo5a+h5aaH5p2R5b2T6ICB5biI77yI5YWoOembhu+8iSIsInBsYXlOYW1lIjoi5oiR5Zyo5a+h5aaH5p2R5b2T6ICB5biIIiwiZGVzY3JpcHRpb24iOiLkuIDlvKDmhI/lpJbnmoTmlK/mlZnosIPku6TvvIzlsIbliJ3lh7rojIXlupDnmoTnlLfkuLvop5LlvLrooYzpgIHov5vkuobkuIDluqfkuI7kuJbpmpTnu53nmoTlhajlpbPmgKfmnZHokL3jgILlnKjov5nkuKrpmLTnm5vpmLPoobDnmoTmoYPmupDnp5jlooPph4zvvIzku5bnmoTliLDmnaXlrpvlpoLokL3lhaXni7znvqTnmoTllJDlg6fogonjgILkuLrkuobpmLLmraLov5nkuKrmnoHlhbbnj43otLXnmoTnlLfogIHluIjlj5fkuI3kuobmuIXoi6bpgIPot5HjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmiJHlnKjlr6HlpofmnZHlvZPogIHluIjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw56ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6IndvemFpZ3UiLCJkZXNjIjoi5LiA5byg5oSP5aSW55qE5pSv5pWZ6LCD5Luk77yM5bCG5Yid5Ye66IyF5bqQ55qE55S35Li76KeS5by66KGM6YCB6L+b5LqG5LiA5bqn5LiO5LiW6ZqU57ud55qE5YWo5aWz5oCn5p2R6JC944CC5Zyo6L+Z5Liq6Zi055ub6Ziz6KGw55qE5qGD5rqQ56eY5aKD6YeM77yM5LuW55qE5Yiw5p2l5a6b5aaC6JC95YWl54u8576k55qE5ZSQ5YOn6IKJ44CC5Li65LqG6Ziy5q2i6L+Z5Liq5p6B5YW254+N6LS155qE55S36ICB5biI5Y+X5LiN5LqG5riF6Ium6YCD6LeR44CCIiwiYW5jaG9yIjoiIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2p0L2duLzEwNDkvcGxheWxldF9jb3Zlcl8wZTZjYjgwZGFhNzNlODVmLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvejMvMHovMTA0OS9wbGF5bGV0X2NvdmVyX2FjYzY4YzNkZTg5MzEzM2YuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUxLDEyODUyLDEyODY3XSwidGFnTmFtZXMiOlsi5Y6f5YibIiwi6buE5p6cIiwi5Lmh5p2RIl0sInRhZ1NsdWdzIjpbIllDIiwiaHVhbmdndW8iLCJ4aWFuZ2N1biJdLCJ0b3RhbEVwaXNvZGUiOjksInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE1NCwiaGVhdFZhbHVlIjoyMDIxOCwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjEzLCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ3OjExLjM5N1oiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjIwLjE1N1oiLCJzZW9JbmZvIjp7InRpdGxlIjoi5oiR5Zyo5a+h5aaH5p2R5b2T6ICB5biI77yI5YWoOembhu+8iSIsImtleXdvcmxkIjpbIuaIkeWcqOWvoeWmh+adkeW9k+iAgeW4iCIsIuS5oeadkeiJs+S6iyIsIuWvoeWmh+WbtOeMjiIsIuaIkeWcqOWvoeWmh+adkeW9k+iAgeW4iOWujOaVtOeJiCIsIuWcqOe6v+eciyIsIueUt+iAgeW4iCIsIuWls+adkeawkSJdLCJkZXNjcmlwdGlvbiI6IuS4gOW8oOaEj+WklueahOaUr+aVmeiwg+S7pO+8jOWwhuWIneWHuuiMheW6kOeahOeUt+S4u+inkuW8uuihjOmAgei/m+S6huS4gOW6p+S4juS4lumalOe7neeahOWFqOWls+aAp+adkeiQveOAguWcqOi/meS4qumYtOebm+mYs+ihsOeahOahg+a6kOenmOWig+mHjO+8jOS7lueahOWIsOadpeWum+WmguiQveWFpeeLvOe+pOeahOWUkOWDp+iCieOAguS4uuS6humYsuatoui/meS4quaegeWFtuePjei0teeahOeUt+iAgeW4iOWPl+S4jeS6hua4heiLpumAg+i3keOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuaIkeWcqOWvoeWmh+adkeW9k+iAgeW4iOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDnpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ1NjAsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOnRydWUsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOmZhbHNlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTEwLTI4VDEzOjEyOjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTJUMjE6NTA6MDJaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAxVDA4OjAzOjE2WiIsInRoZW1lSWRzIjpbMTI2ODEsMTI2ODVdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyIsIumDveW4giJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiIsImR1c2hpIl0sImNhdGVnb3J5SWRzIjpbMTExMDJdLCJ0aXRsZSI6IumXquWpmuWkp+S9rOaOiemprOWQju+8iOWFqDnpm4bvvIkiLCJwbGF5TmFtZSI6IumXquWpmuWkp+S9rOaOiemprOWQjiIsImRlc2NyaXB0aW9uIjoi5LiA5Zy65aCq56ew54G+6Zq+55qE55u45Lqy5bGA6K6p5aW55oiQ5LqG6Ieq5aSn54uC55S35Lq655qE5Ziy6K696Z225a2Q77yM5Y205Lmf6Zi05beu6Ziz6ZSZ6K6p5aW56YGH5Yiw5LqG6YKj5Liq54q55aaC5aSp56We5LiL5Yeh6Iis5oOK6Imz55qE55S35Lq644CC5Li65LqG5pGG6ISx5a625Lit5rKh5a6M5rKh5LqG55qE55av54uC5YKs5ama77yM5Lik5Lq65LiA5ouN5Y2z5ZCI6L+F6YCf562+6K6i5LqG5LiA57q45aWR57qm5ama5ae75Y2P6K6u44CC5pys5Lul5Li65Y+q5piv5pCt5LyZ6L+H5pel5a2Q44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6Zeq5ama5aSn5L2s5o6J6ams5ZCO44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysOembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJzaGFuaHVuIiwiZGVzYyI6IuS4gOWcuuWgquensOeBvumavueahOebuOS6suWxgOiuqeWlueaIkOS6huiHquWkp+eLgueUt+S6uueahOWYsuiuvemdtuWtkO+8jOWNtOS5n+mYtOW3rumYs+mUmeiuqeWluemBh+WIsOS6humCo+S4queKueWmguWkqeelnuS4i+WHoeiIrOaDiuiJs+eahOeUt+S6uuOAguS4uuS6huaRhuiEseWutuS4reayoeWujOayoeS6hueahOeWr+eLguWCrOWpmu+8jOS4pOS6uuS4gOaLjeWNs+WQiOi/hemAn+etvuiuouS6huS4gOe6uOWlkee6puWpmuWnu+WNj+iuruOAguacrOS7peS4uuWPquaYr+aQreS8mei/h+aXpeWtkOOAgiIsImFuY2hvciI6IiIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS8zOS94ZC8xMDQ5L3BsYXlsZXRfY292ZXJfODZkNjAwNmE0Yjc0NWEyMC5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzB5LzBhLzEwNDkvcGxheWxldF9jb3Zlcl9kMzI3Y2NkNmM5MjI0ODg4LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MSwxMjg1MiwxMjg2NV0sInRhZ05hbWVzIjpbIuWOn+WImyIsIum7hOaenCIsIuaXtumXtOaaguWBnCJdLCJ0YWdTbHVncyI6WyJZQyIsImh1YW5nZ3VvIiwiU0paVCJdLCJ0b3RhbEVwaXNvZGUiOjksInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE0OSwiaGVhdFZhbHVlIjoxOTg1NywiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE2LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ3OjAxLjY5M1oiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjIwLjg5N1oiLCJzZW9JbmZvIjp7InRpdGxlIjoi6Zeq5ama5aSn5L2s5o6J6ams5ZCO77yI5YWoOembhu+8iSIsImtleXdvcmxkIjpbIumXquWpmuWkp+S9rOaOiemprOWQjiIsIuWlkee6puWpmuWnuyIsIuixqumXqOWkp+S9rCIsIumXquWpmuWkp+S9rOaOiemprOWQjuWujOaVtOeJiCIsIuWcqOe6v+eciyIsIumXquWpmiIsIumakOiXj+Wkp+S9rCJdLCJkZXNjcmlwdGlvbiI6IuS4gOWcuuWgquensOeBvumavueahOebuOS6suWxgOiuqeWlueaIkOS6huiHquWkp+eLgueUt+S6uueahOWYsuiuvemdtuWtkO+8jOWNtOS5n+mYtOW3rumYs+mUmeiuqeWluemBh+WIsOS6humCo+S4queKueWmguWkqeelnuS4i+WHoeiIrOaDiuiJs+eahOeUt+S6uuOAguS4uuS6huaRhuiEseWutuS4reayoeWujOayoeS6hueahOeWr+eLguWCrOWpmu+8jOS4pOS6uuS4gOaLjeWNs+WQiOi/hemAn+etvuiuouS6huS4gOe6uOWlkee6puWpmuWnu+WNj+iuruOAguacrOS7peS4uuWPquaYr+aQreS8mei/h+aXpeWtkOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiumXquWpmuWkp+S9rOaOiemprOWQjuOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDnpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ3NzMsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDEyOjQ2OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMTBUMDQ6MjA6MzFaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTEyVDA1OjAzOjIxWiIsInRoZW1lSWRzIjpbMTI2ODVdLCJ0aGVtZU5hbWVzIjpbIumDveW4giJdLCJ0aGVtZVNsdWdzIjpbImR1c2hpIl0sImNhdGVnb3J5SWRzIjpbMTExMDVdLCJ0aXRsZSI6IuWwj+mVh+S4iueahOeGn+avjemcsuWHuuS/seS5kOmDqO+8iOWFqDPpm4bvvIkiLCJwbGF5TmFtZSI6IuWwj+mVh+S4iueahOeGn+avjemcsuWHuuS/seS5kOmDqCIsImRlc2NyaXB0aW9uIjoi5bm06L2755qE6auY5Lit55Sf546L5bCP5Y2O5pS+5a2m5ZCO5peg5oSP6Ze05pKe6KeB5LiA5Liq5oCn5oSf6aqa6LSn5Zyo6I2S6YOK6YeO5aSW6L+b6KGM5aSn6IOG6Zyy5Ye677yM5LuW6IOG5aSn5YyF5aSp5Zyw5YG35YG36Lef5LiK5Y6777yM56uf54S25Zyo5rex5aSc55qE55S35Y6V5omA6YeM6KKr5a+55pa554Ot5oOF5pyN5Yqh5LqG5LiA54Ku44CC6L+Z5Liq6aqa6LSn5pu85aaZ55qE5aiH6Lqv6K6p5LuW5oSf5Yiw5peg5q+U54af5oKJ77yM6Zm35YWl5LqG5rex5rex55qE6L+35oOR44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5bCP6ZWH5LiK55qE54af5q+N6Zyy5Ye65L+x5LmQ6YOo44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJ4aWFvemhlIiwiZGVzYyI6IuW5tOi9u+eahOmrmOS4reeUn+eOi+Wwj+WNjuaUvuWtpuWQjuaXoOaEj+mXtOaSnuingeS4gOS4quaAp+aEn+mqmui0p+WcqOiNkumDiumHjuWklui/m+ihjOWkp+iDhumcsuWHuu+8jOS7luiDhuWkp+WMheWkqeWcsOWBt+WBt+i3n+S4iuWOu++8jOern+eEtuWcqOa3seWknOeahOeUt+WOleaJgOmHjOiiq+WvueaWueeDreaDheacjeWKoeS6huS4gOeCruOAgui/meS4qumqmui0p+abvOWmmeeahOWoh+i6r+iuqeS7luaEn+WIsOaXoOavlOeGn+aCie+8jOmZt+WFpeS6hua3sea3seeahOi/t+aDkeOAgiIsImFuY2hvciI6Ium7hOaenOWumOaWuSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9meS81ZS8xMDQ5L3BsYXlsZXRfY292ZXJfOTM4OTdmZWExNDFmZTJiMC5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL25zL2liLzEwNDkvcGxheWxldF9jb3Zlcl85Mzg5N2ZlYTE0MWZlMmIwLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg2MV0sInRhZ05hbWVzIjpbIuavjeWtkCJdLCJ0YWdTbHVncyI6WyJtdXppIl0sInRvdGFsRXBpc29kZSI6MywidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTYwLCJoZWF0VmFsdWUiOjE5NzUzLCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTMsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDk6MTMuODA4WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDZUMjI6MDA6MTkuNjgzWiIsInNlb0luZm8iOnsidGl0bGUiOiLlsI/plYfkuIrnmoTnhp/mr43pnLLlh7rkv7HkuZDpg6jvvIjlhagz6ZuG77yJIiwia2V5d29ybGQiOlsi5bCP6ZWH5LiK55qE54af5q+N6Zyy5Ye65L+x5LmQ6YOoIiwi6YeO5aSW6Zyy5Ye6Iiwi54af5aaH5L+x5LmQ6YOoIiwi5bCP6ZWH5LiK55qE54af5q+N6Zyy5Ye65L+x5LmQ6YOo5a6M5pW054mIIiwi5Zyo57q/55yLIiwi546L5bCP5Y2OIiwi54af5q+N6Zyy5Ye6Il0sImRlc2NyaXB0aW9uIjoi5bm06L2755qE6auY5Lit55Sf546L5bCP5Y2O5pS+5a2m5ZCO5peg5oSP6Ze05pKe6KeB5LiA5Liq5oCn5oSf6aqa6LSn5Zyo6I2S6YOK6YeO5aSW6L+b6KGM5aSn6IOG6Zyy5Ye677yM5LuW6IOG5aSn5YyF5aSp5Zyw5YG35YG36Lef5LiK5Y6777yM56uf54S25Zyo5rex5aSc55qE55S35Y6V5omA6YeM6KKr5a+55pa554Ot5oOF5pyN5Yqh5LqG5LiA54Ku44CC6L+Z5Liq6aqa6LSn5pu85aaZ55qE5aiH6Lqv6K6p5LuW5oSf5Yiw5peg5q+U54af5oKJ77yM6Zm35YWl5LqG5rex5rex55qE6L+35oOR44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5bCP6ZWH5LiK55qE54af5q+N6Zyy5Ye65L+x5LmQ6YOo44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDU4MSwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6dHJ1ZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wMVQxOTozNTozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTA5LTEyVDIxOjUwOjA1WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMC0wMVQwODowMDo1NFoiLCJ0aGVtZUlkcyI6WzEyNjgxLDEyNjg1XSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciLCLpg73luIIiXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiLCJkdXNoaSJdLCJjYXRlZ29yeUlkcyI6WzExMTAyLDExMTA1XSwidGl0bGUiOiLljovmipHnmoTkuLvlpofvvIjlhagxMOmbhu+8iSIsInBsYXlOYW1lIjoi5Y6L5oqR55qE5Li75aaHIiwiZGVzY3JpcHRpb24iOiLlrrbluq3kuLvlpofplb/mnJ/mt7HpmbfkuKflgbblvI/lqZrlp7vnmoTms6Xmva3vvIzkuIjlpKvkuInlubTkuI3norDlpbnjgIHkuI3nu5nnlJ/mtLvotLnov5jlhaznhLblhrfmvKDlh7rovajvvIzlpbnlj6rog73kuIDlkbPpmpDlv43luqbml6XjgILnm7TliLDkuIDlnLrmg6jng4jovabnpbjkuK3lpbnooqvnlLfkuLvop5LmiYDmkK3mlZHvvIzlr7nmlrnkuIDnnLznnIvnqb/lpbnlhoXlv4PnmoTml6DlsL3ljovmipHjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrljovmipHnmoTkuLvlpofjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJ5YXlpZGV6IiwiZGVzYyI6IuWutuW6reS4u+Wmh+mVv+acn+a3semZt+S4p+WBtuW8j+WpmuWnu+eahOazpea9re+8jOS4iOWkq+S4ieW5tOS4jeeisOWlueOAgeS4jee7meeUn+a0u+i0uei/mOWFrOeEtuWGt+a8oOWHuui9qO+8jOWlueWPquiDveS4gOWRs+makOW/jeW6puaXpeOAguebtOWIsOS4gOWcuuaDqOeDiOi9pueluOS4reWlueiiq+eUt+S4u+inkuaJgOaQreaVke+8jOWvueaWueS4gOecvOeci+epv+WlueWGheW/g+eahOaXoOWwveWOi+aKkeOAgiIsImFuY2hvciI6IiIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9tei91cS8xMDQ5L3BsYXlsZXRfY292ZXJfODRmNzdhM2UwYjZkNmU1ZC5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2prL3NqLzEwNDkvcGxheWxldF9jb3Zlcl84ZTI4NmM2ZjJmOTgxOTExLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MSwxMjg1MiwxMjg2M10sInRhZ05hbWVzIjpbIuWOn+WImyIsIum7hOaenCIsIk5UUue7v+W4vSJdLCJ0YWdTbHVncyI6WyJZQyIsImh1YW5nZ3VvIiwibnRybHZtYW8iXSwidG90YWxFcGlzb2RlIjoxMCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTcyLCJoZWF0VmFsdWUiOjE5NzE4LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTEsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDc6MTcuMDQxWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MTMuNzQ3WiIsInNlb0luZm8iOnsidGl0bGUiOiLljovmipHnmoTkuLvlpofvvIjlhagxMOmbhu+8iSIsImtleXdvcmxkIjpbIuWOi+aKkeeahOS4u+WmhyIsIuS4u+Wmh+iniemGkiIsIuaDheaEn+aVkei1jiIsIuWOi+aKkeeahOS4u+Wmh+WujOaVtOeJiCIsIuWcqOe6v+eciyIsIuS4u+WmhyIsIueUt+S4u+inkiJdLCJkZXNjcmlwdGlvbiI6IuWutuW6reS4u+Wmh+mVv+acn+a3semZt+S4p+WBtuW8j+WpmuWnu+eahOazpea9re+8jOS4iOWkq+S4ieW5tOS4jeeisOWlueOAgeS4jee7meeUn+a0u+i0uei/mOWFrOeEtuWGt+a8oOWHuui9qO+8jOWlueWPquiDveS4gOWRs+makOW/jeW6puaXpeOAguebtOWIsOS4gOWcuuaDqOeDiOi9pueluOS4reWlueiiq+eUt+S4u+inkuaJgOaQreaVke+8jOWvueaWueS4gOecvOeci+epv+WlueWGheW/g+eahOaXoOWwveWOi+aKkeOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWOi+aKkeeahOS4u+Wmh+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NTk0LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3IjpmYWxzZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMC0yOVQxOToxMzozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTA5LTEyVDIxOjUwOjE4WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMC0wMVQwNzo1ODozMFoiLCJ0aGVtZUlkcyI6WzEyNjgxLDEyNjg1XSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciLCLpg73luIIiXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiLCJkdXNoaSJdLCJjYXRlZ29yeUlkcyI6WzExMTAyXSwidGl0bGUiOiJKS+WtpuWnkOS4jeS4uuS6uuefpeeahOenmOWvhu+8iOWFqDEw6ZuG77yJIiwicGxheU5hbWUiOiJKS+WtpuWnkOS4jeS4uuS6uuefpeeahOenmOWvhiIsImRlc2NyaXB0aW9uIjoi5aSW6KGo55yL5p2l77yM5aW55piv5LiA5L2N6Zu35Y6J6aOO6KGM44CB5Ya36YW35Lil5Y6J55qE5qCh5Zut5a2m55Sf5Lya6ZW/77yM54S26ICM5q+P5b2T5pS+5a2m5ZCO6ZqQ5Yy/6L+b5bm95pqX55qE5pen5qCh6IiN77yM5aW55L6/5b275bqV5Y245LiL5Lyq6KOF77yM5YyW6Lqr5Li66IKG5oSP5a6j5rOE5Y+b6YCG5qyy5pyb5LiO54uC6YeO5pys6IO955qE5oCn5oSf576O5bCR5aWz44CC6L+Z5Liq6Laz5Lul6L2w5Yqo5YWo5qCh55qE5oOK5aSp6aaZ6Imz56eY5a+G44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CKSkvlrablp5DkuI3kuLrkurrnn6XnmoTnp5jlr4bjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJqa3h1ZWppIiwiZGVzYyI6IuWkluihqOeci+adpe+8jOWlueaYr+S4gOS9jembt+WOiemjjuihjOOAgeWGt+mFt+S4peWOieeahOagoeWbreWtpueUn+S8mumVv++8jOeEtuiAjOavj+W9k+aUvuWtpuWQjumakOWMv+i/m+W5veaal+eahOaXp+agoeiIje+8jOWlueS+v+W9u+W6leWNuOS4i+S8quijhe+8jOWMlui6q+S4uuiChuaEj+Wuo+azhOWPm+mAhuassuacm+S4jueLgumHjuacrOiDveeahOaAp+aEn+e+juWwkeWls+OAgui/meS4qui2s+S7pei9sOWKqOWFqOagoeeahOaDiuWkqemmmeiJs+enmOWvhuOAgiIsImFuY2hvciI6IuWOn+WImyIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9ndy9nZy8xMDQ5L3BsYXlsZXRfY292ZXJfYmM0Mjc5YmZmNzdhMzA0OC5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3U4LzUwLzEwNDkvcGxheWxldF9jb3Zlcl8zYjNmNjA4MzE0NmEyOWE2LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MSwxMjg1MiwxMjg1Nl0sInRhZ05hbWVzIjpbIuWOn+WImyIsIum7hOaenCIsIuiBjOWcuuiwg+aVmSJdLCJ0YWdTbHVncyI6WyJZQyIsImh1YW5nZ3VvIiwiWkNUSiJdLCJ0b3RhbEVwaXNvZGUiOjEwLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNTYsImhlYXRWYWx1ZSI6MTk2MjQsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxMiwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0NzoyNy45MDVaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoxOC44OTVaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IkpL5a2m5aeQ5LiN5Li65Lq655+l55qE56eY5a+G77yI5YWoMTDpm4bvvIkiLCJrZXl3b3JsZCI6WyJKS+WtpuWnkOS4jeS4uuS6uuefpeeahOenmOWvhiIsIuagoeWbreemgeW/jCIsIuWtpueUn+S8mumVvyIsIkpL5a2m5aeQ5LiN5Li65Lq655+l55qE56eY5a+G5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5a2m5aeQIiwi55S35Li76KeSIl0sImRlc2NyaXB0aW9uIjoi5aSW6KGo55yL5p2l77yM5aW55piv5LiA5L2N6Zu35Y6J6aOO6KGM44CB5Ya36YW35Lil5Y6J55qE5qCh5Zut5a2m55Sf5Lya6ZW/77yM54S26ICM5q+P5b2T5pS+5a2m5ZCO6ZqQ5Yy/6L+b5bm95pqX55qE5pen5qCh6IiN77yM5aW55L6/5b275bqV5Y245LiL5Lyq6KOF77yM5YyW6Lqr5Li66IKG5oSP5a6j5rOE5Y+b6YCG5qyy5pyb5LiO54uC6YeO5pys6IO955qE5oCn5oSf576O5bCR5aWz44CC6L+Z5Liq6Laz5Lul6L2w5Yqo5YWo5qCh55qE5oOK5aSp6aaZ6Imz56eY5a+G44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CKSkvlrablp5DkuI3kuLrkurrnn6XnmoTnp5jlr4bjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDU2Niwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6dHJ1ZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6ZmFsc2UsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDFUMTQ6MzI6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0wOS0xMlQyMTo1MDoxOFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMDFUMDc6NTg6MzBaIiwidGhlbWVJZHMiOlsxMjY4MSwxMjY4NV0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIiwi6YO95biCIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIiwiZHVzaGkiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMl0sInRpdGxlIjoi5rex5aSc5Yqg54+t77yM57ud5pyb5Yqe5YWs5a6k77yI5YWoOOmbhu+8iSIsInBsYXlOYW1lIjoi5rex5aSc5Yqg54+t77yM57ud5pyb5Yqe5YWs5a6kIiwiZGVzY3JpcHRpb24iOiLotYTkuqfpga3pgYfnlq/ni4Llhrvnu5PvvIzlt6jpop3ov53nuqbph5Hms7DlsbHljovpobbvvIHmmJTml6Xpq5jpq5jlnKjkuIrjgIHkuI3lj6/kuIDkuJbnmoTlhrDlsbHlpbPmgLvoo4HlpoLku4rotbDmipXml6Dot6/vvIzlj6rog73ku7vnlLHllYblnLrlr7nlpLTmi7/nnYDlpKnku7fmlK/npajml6Dmg4Xot7XouI/lhbbpq5jotLXlsIrkuKXjgILljYPpkqfkuIDlj5HkuYvpmYXvvIzlubPml6Xph4zmr6vkuI3otbfnnLznmoTku5bnnqzpl7TmkpXlvIDkvKroo4XlvLrlir/lh7rmiYvvvIHnhp/mnpznn63liadXRULmj5DkvpvjgIrmt7HlpJzliqDnj63vvIznu53mnJvlip7lhazlrqTjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw46ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6InNoZW55ZWoiLCJkZXNjIjoi6LWE5Lqn6YGt6YGH55av54uC5Ya757uT77yM5beo6aKd6L+d57qm6YeR5rOw5bGx5Y6L6aG277yB5piU5pel6auY6auY5Zyo5LiK44CB5LiN5Y+v5LiA5LiW55qE5Yaw5bGx5aWz5oC76KOB5aaC5LuK6LWw5oqV5peg6Lev77yM5Y+q6IO95Lu755Sx5ZWG5Zy65a+55aS05ou/552A5aSp5Lu35pSv56Wo5peg5oOF6Le16LiP5YW26auY6LS15bCK5Lil44CC5Y2D6ZKn5LiA5Y+R5LmL6ZmF77yM5bmz5pel6YeM5q+r5LiN6LW355y855qE5LuW556s6Ze05pKV5byA5Lyq6KOF5by65Yq/5Ye65omL77yBIiwiYW5jaG9yIjoi5Y6f5YibIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzduL3QzLzEwNDkvcGxheWxldF9jb3Zlcl84YzI0MTYzYmIxZTAzZDNhLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvbzAvMWgvMTA0OS9wbGF5bGV0X2NvdmVyXzI3M2Q5NzQ5MmQxZjhiOWMuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUxLDEyODUyLDEyODU2XSwidGFnTmFtZXMiOlsi5Y6f5YibIiwi6buE5p6cIiwi6IGM5Zy66LCD5pWZIl0sInRhZ1NsdWdzIjpbIllDIiwiaHVhbmdndW8iLCJaQ1RKIl0sInRvdGFsRXBpc29kZSI6OCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTUzLCJoZWF0VmFsdWUiOjE5NTYwLCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTgsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDc6MDUuOTM0WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MjAuNjU2WiIsInNlb0luZm8iOnsidGl0bGUiOiLmt7HlpJzliqDnj63vvIznu53mnJvlip7lhazlrqTvvIjlhag46ZuG77yJIiwia2V5d29ybGQiOlsi5rex5aSc5Yqg54+t57ud5pyb5Yqe5YWs5a6kIiwi6Zy45oC75Y+N6L2sIiwi6IGM5Zy65r2c6KeE5YiZIiwi5rex5aSc5Yqg54+t57ud5pyb5Yqe5YWs5a6k5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5Yaw5bGx5aWz5oC76KOBIl0sImRlc2NyaXB0aW9uIjoi6LWE5Lqn6YGt6YGH55av54uC5Ya757uT77yM5beo6aKd6L+d57qm6YeR5rOw5bGx5Y6L6aG277yB5piU5pel6auY6auY5Zyo5LiK44CB5LiN5Y+v5LiA5LiW55qE5Yaw5bGx5aWz5oC76KOB5aaC5LuK6LWw5oqV5peg6Lev77yM5Y+q6IO95Lu755Sx5ZWG5Zy65a+55aS05ou/552A5aSp5Lu35pSv56Wo5peg5oOF6Le16LiP5YW26auY6LS15bCK5Lil44CC5Y2D6ZKn5LiA5Y+R5LmL6ZmF77yM5bmz5pel6YeM5q+r5LiN6LW355y855qE5LuW556s6Ze05pKV5byA5Lyq6KOF5by65Yq/5Ye65omL77yB54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5rex5aSc5Yqg54+t77yM57ud5pyb5Yqe5YWs5a6k44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysOOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDQ1Miwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDNUMTI6NTc6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wMVQxNDozNjo0OVoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDRUMTI6MTk6MjhaIiwidGhlbWVJZHMiOlsxMjY4NV0sInRoZW1lTmFtZXMiOlsi6YO95biCIl0sInRoZW1lU2x1Z3MiOlsiZHVzaGkiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNV0sInRpdGxlIjoi5aWz5Y+L6K6p5oiR552h6KGo5aa577yI5YWoM+mbhu+8iSIsInBsYXlOYW1lIjoi5aWz5Y+L6K6p5oiR552h6KGo5aa5IiwiZGVzY3JpcHRpb24iOiLotLrlt53lnKjlgbbnhLbpl7TmjZXmjYnliLDlpbPlj4vmnpfnn6XlpI/mjIfkvb/ooajlprnoi4/mo6DmnaXor5XmjqLoh6rlt7Hlv6Dor5rluqbnmoTpmLTosIvvvIzku5bkuI3liqjlo7DoibLlnLDpgInmi6nlsIborqHlsLHorqHvvIzlnKjkuIDml4HlhrfnnLzop4Llr5/jgILlsL3nrqHoi4/mo6DmjqXliLDkuobmtYvor5Xlj5bmtojnmoTmjIfku6TvvIzljbTkvp3nhLbmjInmjbrkuI3kvY/lhoXlv4PnmoTmgrjliqjkuLvliqjmipXmgIDpgIHmirHvvJvogIzmnpfnn6XlpI/lvZLlrrblkI7jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlpbPlj4vorqnmiJHnnaHooajlprnjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJudnlvdXJhIiwiZGVzYyI6Iui0uuW3neWcqOWBtueEtumXtOaNleaNieWIsOWls+WPi+ael+efpeWkj+aMh+S9v+ihqOWmueiLj+ajoOadpeivleaOouiHquW3seW/oOivmuW6pueahOmYtOiwi++8jOS7luS4jeWKqOWjsOiJsuWcsOmAieaLqeWwhuiuoeWwseiuoe+8jOWcqOS4gOaXgeWGt+ecvOinguWvn+OAguWwveeuoeiLj+ajoOaOpeWIsOS6hua1i+ivleWPlua2iOeahOaMh+S7pO+8jOWNtOS+neeEtuaMieaNuuS4jeS9j+WGheW/g+eahOaCuOWKqOS4u+WKqOaKleaAgOmAgeaKse+8m+iAjOael+efpeWkj+W9kuWutuWQjuOAgiIsImFuY2hvciI6Ium7hOaenOWumOaWuSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS8xYi94by8xMDQ5L3BsYXlsZXRfY292ZXJfZWQ3ODhmMTJiMWIzZjBiYS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzRuLzY0LzEwNDkvcGxheWxldF9jb3Zlcl9lZDc4OGYxMmIxYjNmMGJhLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1NV0sInRhZ05hbWVzIjpbIumDveW4giJdLCJ0YWdTbHVncyI6WyJkdXNoaSJdLCJ0b3RhbEVwaXNvZGUiOjEwLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxODQsImhlYXRWYWx1ZSI6MTk0NTcsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoyMCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0MTozNy4zMDdaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMDowMDoxNC43MzJaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuWls+WPi+iuqeaIkeedoeihqOWmue+8iOWFqDPpm4bvvIkiLCJrZXl3b3JsZCI6WyLlpbPlj4vorqnmiJHnnaHooajlprkiLCLmg4XmhJ/or5XmjqIiLCLkuInkurrnuqDokZsiLCLlpbPlj4vorqnmiJHnnaHooajlprnlrozmlbTniYgiLCLlnKjnur/nnIsiLCLmnpfnn6XlpI8iLCLoi4/mo6AiLCLotLrlt50iXSwiZGVzY3JpcHRpb24iOiLotLrlt53lnKjlgbbnhLbpl7TmjZXmjYnliLDlpbPlj4vmnpfnn6XlpI/mjIfkvb/ooajlprnoi4/mo6DmnaXor5XmjqLoh6rlt7Hlv6Dor5rluqbnmoTpmLTosIvvvIzku5bkuI3liqjlo7DoibLlnLDpgInmi6nlsIborqHlsLHorqHvvIzlnKjkuIDml4HlhrfnnLzop4Llr5/jgILlsL3nrqHoi4/mo6DmjqXliLDkuobmtYvor5Xlj5bmtojnmoTmjIfku6TvvIzljbTkvp3nhLbmjInmjbrkuI3kvY/lhoXlv4PnmoTmgrjliqjkuLvliqjmipXmgIDpgIHmirHvvJvogIzmnpfnn6XlpI/lvZLlrrblkI7jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlpbPlj4vorqnmiJHnnaHooajlprnjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fV19LCJoYXNoIjpmYWxzZSwibXNnIjoic3VjY2VzcyIsInRpbWUiOiIyMDI2LTExLTA3VDA0OjExOjQ2LjQ5MVoiLCJ0aXAiOiLmiJDlip8ifQ==","status":200,"url":"https://webhgbapi.mfcg.me/api/app/playlet/guess-like/list?playletId=14670&pageNum=1&pageSize=12"},"revalidate":60,"tags":["playlet-guess-like","playlet-guess-like-14670"]} \ No newline at end of file diff --git a/.next-dev/dev/cache/fetch-cache/553b2a58ae802c69f7943329182e2d885065f400313be443763ebe330da2bb56 b/.next-dev/dev/cache/fetch-cache/553b2a58ae802c69f7943329182e2d885065f400313be443763ebe330da2bb56 new file mode 100644 index 0000000..a7fd8ed --- /dev/null +++ b/.next-dev/dev/cache/fetch-cache/553b2a58ae802c69f7943329182e2d885065f400313be443763ebe330da2bb56 @@ -0,0 +1 @@ +{"kind":"FETCH","data":{"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"Content-Disposition,Refresh-Authorization","connection":"keep-alive","content-encoding":"gzip","content-type":"application/json; charset=utf-8","date":"Sat, 07 Nov 2026 04:13:14 GMT","server":"nginx/1.24.0 (Ubuntu)","transfer-encoding":"chunked"},"body":"eyJjb2RlIjoyMDAsImRhdGEiOnsibmV3QWRkcmVzc0luZm8iOnsibmV3VXJsQWRkciI6Imh0dHBzOi8vc2h1Z3VvZGoxLmNvbS8iLCJuZXdVcmxBZGRyMSI6Imh0dHBzOi8vc2h1Z3VvZGoyLmNvbS8iLCJuZXdVcmxBZGRyMiI6Imh0dHBzOi8vc2h1Z3VvZGozLmNvbS8iLCJmb3JldmVyVXJsQWRkciI6Imh0dHBzOi8vc2h1Z3VvZGouY29tIiwiZ21haWxBZGRyIjoiaHR0cHM6Ly9jaGVuZ3JlbnZpZGVvQHByb3Rvbi5tZSIsInRnR3JvdXAiOiJodHRwczovL3QubWUvU2h1R3VvQUkwMSIsInRlbGVncmFtIjoiIiwiY3VzdG9tZXJTZXJ2aWNlSG9zdCI6IiIsInR3aXR0ZXJBZGRyIjoiaHR0cHM6Ly94LmNvbS9ZYXNlZW5BbGlLazEiLCJwZGZBZGRyIjoiIiwiYXBwQWRkciI6Imh0dHBzOi8vZDMwZHh3NHYzYXZlZGouY2xvdWRmcm9udC5uZXQvP2RjPTF0QXBHZURoIiwib2ZmaWNpYWxBcHBBZGRyIjoiaHR0cHM6Ly9kMzBkeHc0djNhdmVkai5jbG91ZGZyb250Lm5ldC8/ZGM9MXRBcEdlRGgifSwiY29uZmlnIjp7InBkZkFkZHIiOiIiLCJuZXdVcmxBZGRyIjoiaHR0cHM6Ly9zaHVndW9kajEuY29tLyIsIm5ld1VybEFkZHIxIjoiaHR0cHM6Ly9zaHVndW9kajIuY29tLyIsIm5ld1VybEFkZHIyIjoiaHR0cHM6Ly9zaHVndW9kajMuY29tLyIsImZvcmV2ZXJVcmxBZGRyIjoiaHR0cHM6Ly9zaHVndW9kai5jb20iLCJnbWFpbEFkZHIiOiJodHRwczovL2NoZW5ncmVudmlkZW9AcHJvdG9uLm1lIiwiYXBwQWRkciI6Imh0dHBzOi8vZDMwZHh3NHYzYXZlZGouY2xvdWRmcm9udC5uZXQvP2RjPTF0QXBHZURoIiwib2ZmaWNpYWxBcHBBZGRyIjoiaHR0cHM6Ly9kMzBkeHc0djNhdmVkai5jbG91ZGZyb250Lm5ldC8/ZGM9MXRBcEdlRGgiLCJ3ZWlDaGFydCI6IiIsInFxIjoiIiwidGdHcm91cCI6Imh0dHBzOi8vdC5tZS9TaHVHdW9BSTAxIiwicG90YW9Hcm91cCI6IiIsImdpdEFkZHIiOiIiLCJ0d2l0dGVyQWRkciI6Imh0dHBzOi8veC5jb20vWWFzZWVuQWxpS2sxIiwidGVsZWdyYW0iOiIiLCJ0ZWxlZ3JhbUFkZCI6Imh0dHBzOi8vdC5tZS9TaHVHdW9BSTAxIiwidHJhbnNsYXRpb25BZGRyIjoiaHR0cHM6Ly9kaHAuZm0/ZGM9bWRmZmYiLCJpbWdDZG4iOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vIiwidHNDZG4iOiJodHRwczovL3dlYmF0cy5ybGtmdXMuY24vIiwiaW1nQXBwVXNDZG4iOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0LyIsIm1lZGlhQXBwVXNDZG4iOiJodHRwczovL2R5dW01M2hyZTQzbmouY2xvdWRmcm9udC5uZXQvIiwid2ViVGl0bGUiOiLnhp/mnpznn63liaflrpjnvZEgLSDng63pl6hBSeaIkOS6uuefreWJp+S4jum7hOaenOeyvuWTgUFJ5oiQ5Lq655+t5Ymn5ZCI6ZuGIiwid2ViS2V5d29ybGQiOlsi54af5p6c55+t5YmnIiwi6buE5p6c55+t5YmnIiwi6buE5p6cIiwiQUnmiJDkurrnn63liaciLCLnsr7lk4Hnn63liaciLCLnn63liadBUFAiLCLpu4TosYbnn63liaciLCLnhp/mnpzlrpjnvZEiLCLnhp/mnpxBUFDkuIvovb0iLCJBSeaIkOS6uuefreWJp+ingueci+e9keermSIsIkFJ5oiQ5Lq655+t5YmnYXBw5LiL6L29IiwiQUnmiJDkurrnn63liaflnKjnur/nnIsiXSwid2ViRGVzY3JpcHRpb24iOiLnhp/mnpznn63liafkvZzkuLrpooblhYjnmoRBSeaIkOS6uuefreWJp+S4jueyvuWTgeefreinhumikee7vOWQiOW5s+WPsO+8jOaxh+mbhuWFqOe9keWOn+WIm+mrmOiDvUlQ5LiO5Y+N6L2s54i95Ymn44CC56uZ5YaF54us5a6254Ot5pKt44CK6aOO5Y2O56We5aWz5b2V44CL44CK55C85piO56We5aWz5b2V44CL44CK5q+N5LiK5pS755Wl44CL44CK5LuZ5a2Q55qE5L+u6KGM44CL44CK5p6B5ZOB5a625LiB44CL562J5aSa6aKY5p2Q5Yqb5L2c77yM5ra155uW5LuZ5L6g5aWH5bm744CB6YO95biC5Lmx5Lym44CB6IGM5Zy65LiO56m/6LaK44CC5YWo56uZ55S76LSo6LaF5riF5peg5Yig5YeP44CB5q+P5pel5pu05paw5pyA5paw6ZuG77yM5pSv5oyB572R6aG15Y2z54K55Y2z5pKt5LiO5a6Y5pa5QVBQ5o6M5LiK6KeC5b2x77yM5byA5ZCv5p6B6Ie05rKJ5rW455qE6KeG5ZCs55ub5a6044CCIiwid2ViU2l0ZU5hbWUiOiLnhp/mnpznn63liaciLCJ3ZWJBZGRyIjoiaHR0cHM6Ly9zaHVndW9kai5jb20iLCJkaE5ld1VybEFkZHIxIjoiaHR0cHM6Ly9kM2c4aWtwZXF5b3ptby5jbG91ZGZyb250Lm5ldCIsImRoTmV3VXJsQWRkcjIiOiJodHRwczovL2QxMmwyeTFwejBqdThsLmNsb3VkZnJvbnQubmV0IiwiZGhOZXdVcmxBZGRyMyI6Imh0dHBzOi8vZDN0OTNkcmI4Zjlqd2ouY2xvdWRmcm9udC5uZXQiLCJmcmVlVlBOIjoiIiwidXNlSW5nQWRkcmVzcyI6WyJodHRwczovL2lwdGx6eWcuY29tIiwiaHR0cHM6Ly9hdHNldHFoLmNvbSJdLCJhZHZpdGllc1RvcGljTnVtIjoyLCJkaFRpdGxlIjoi54af5p6c55+t5Ymn5a+86IiqIC0g5pyA5paw5Y+R5biD6aG1IiwiZGhLZXl3b3JsZCI6WyLnhp/mnpznn63liaflr7zoiKoiLCLnhp/mnpznn63liafmnIDmlrDlnLDlnYAiLCLnhp/mnpznn63liaflpIfnlKjnur/ot68iLCLnhp/mnpznn63liaflj5HluIPpobUiLCLnhp/mnpznn63liadUZWxlZ3JhbSIsIueGn+aenOefreWJp1R3aXR0ZXIiLCLpmLLlpLHogZTlj5HluIPnq5kiLCLlpJrnur/ot6/mtYvpgJ/lr7zoiKoiLCLnhp/mnpznn63liaflrpjnvZHlhaXlj6MiXSwiZGhEZXNjcmlwdGlvbiI6IueGn+aenOefreWJp+WFqOe9keWumOaWueWvvOiIquWPkeW4g+mhte+8jOWRiuWIq+i/t+i3r+S4juWNoemhv++8geWunuaXtuWQjOatpeWFqOermeacgOaWsOWkh+eUqOWfn+WQjeOAgUNETuaegemAn+iKgueCueS4juWkmue6v+i3r+WFpeWPo++8jOaZuuiDveWIhua1geS/nemanOenkumAn+WKoOi9veOAguWQjOaXtuaPkOS+m+WumOaWuVRlbGVncmFt5Lqk5rWB576k44CBWO+8iFR3aXR0ZXLvvInnpL7lqpLkuI7ni6zlrrZBUFDlrpjmlrnkuIvovb3nm7Tovr7pgJrpgZPvvIzpgYfliLDorr/pl67pl67popjkuIDplK7liIfmjaLvvIzliqnkvaDpmo/ml7bpmo/lnLDnlYXpgJrml6DpmLvnm7Tovr7lpKfniYfnjrDlnLrjgIIiLCJkaFNpdGVOYW1lIjoi54af5p6c55+t5Ymn5a6Y572R5YWl5Y+jIiwiYWN0cmVzc0JhY2tHcm91bmQiOiIiLCJ3YXRlcm1hcmtJbWFnZSI6InYzL2ltYWdlLzhpL3d3LzEwNDkv5pyA5paw5Z+f5ZCNLnBuZyIsImN1c3RvbWVyU2VydmljZUhvc3QiOiIiLCJjaGFubmVsQ29kZSI6InNnd2ViIiwiZW5hYmxlSDI2NSI6ZmFsc2V9LCJhZHZpdGlzZSI6eyJkaWFsb2dMaXN0IjpudWxsLCJob21lTGlzdCI6bnVsbCwidmlkZW9Ub3BMaXN0IjpbeyJpZCI6IjExMzgyMDAwMDMiLCJsb2NhdGlvbiI6MywidGl0bGUiOiLlhajlm73nuqbngq4iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvYjQvMXZiLzJxMi8xbi81YzZhOTdkY2VjYWNlZTA1ZTJkYjdiNDRiOGZiMDgwYi5naWYiLCJsaW5rIjoiaHR0cHM6Ly95azZlYjlxLnRvcDo0NTgyIn0seyJpZCI6IjExMzg3MDAwMDMiLCJsb2NhdGlvbiI6MywidGl0bGUiOiLnqbrpmY3lq6nmqKEiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMXRwL3JoLzF6ci84NS9lMDc1Mjc2ZWRjNjNkODExZDNjNTcxMWYyZmQ5MGQwYi5HSUYiLCJsaW5rIjoiaHR0cHM6Ly8xNzAxLnV3eGJ5bC5jbi9sYW9wYW4vaW5kZXguaHRtbCJ9LHsiaWQiOiIxMTM4ODAwMDAzIiwibG9jYXRpb24iOjMsInRpdGxlIjoi5pil6I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzI0by8xei8xb2kvYjIvYjY4ZjI4ZDRkNGY4NTMyZjVmOWJmODM2MGYwNjVlMTIuR0lGIiwibGluayI6Imh0dHBzOi8vdTVxOHE1LnRvcCJ9LHsiaWQiOiIxMTM4MzAwMDAzIiwibG9jYXRpb24iOjMsInRpdGxlIjoi5pil6I2v6L+36I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzF5cy8yN2ovMTdiLzJobi8yNTRiYjgwZjgyMWVjYTcwMTk3MDg2YWY0ZjUxNTkyOS5naWYiLCJsaW5rIjoiaHR0cHM6Ly9wbXg1Z2hlLnRvcDoyOTIwIn1dLCJ2aWRlb0Rvd25MaXN0IjpbeyJpZCI6IjExMzgyMDAwMDMiLCJsb2NhdGlvbiI6MywidGl0bGUiOiLlhajlm73nuqbngq4iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvYjQvMXZiLzJxMi8xbi81YzZhOTdkY2VjYWNlZTA1ZTJkYjdiNDRiOGZiMDgwYi5naWYiLCJsaW5rIjoiaHR0cHM6Ly95azZlYjlxLnRvcDo0NTgyIn0seyJpZCI6IjExMzg3MDAwMDMiLCJsb2NhdGlvbiI6MywidGl0bGUiOiLnqbrpmY3lq6nmqKEiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMXRwL3JoLzF6ci84NS9lMDc1Mjc2ZWRjNjNkODExZDNjNTcxMWYyZmQ5MGQwYi5HSUYiLCJsaW5rIjoiaHR0cHM6Ly8xNzAxLnV3eGJ5bC5jbi9sYW9wYW4vaW5kZXguaHRtbCJ9LHsiaWQiOiIxMTM4ODAwMDAzIiwibG9jYXRpb24iOjMsInRpdGxlIjoi5pil6I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzI0by8xei8xb2kvYjIvYjY4ZjI4ZDRkNGY4NTMyZjVmOWJmODM2MGYwNjVlMTIuR0lGIiwibGluayI6Imh0dHBzOi8vdTVxOHE1LnRvcCJ9LHsiaWQiOiIxMTM4MzAwMDAzIiwibG9jYXRpb24iOjMsInRpdGxlIjoi5pil6I2v6L+36I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzF5cy8yN2ovMTdiLzJobi8yNTRiYjgwZjgyMWVjYTcwMTk3MDg2YWY0ZjUxNTkyOS5naWYiLCJsaW5rIjoiaHR0cHM6Ly9wbXg1Z2hlLnRvcDoyOTIwIn1dLCJob3RBcHBMaXN0IjpudWxsLCJuZXdBcHBMaXN0IjpudWxsLCJtdXN0QXBwTGlzdCI6bnVsbCwidGl0bGVBcHBMaXN0IjpudWxsLCJmcmllbmRMaXN0IjpudWxsLCJuaW5lR3JpZExpc3QiOlt7ImlkIjoiMTEzODIwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6IuWFqOWbvee6pueCriIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yM3UveDkvazcvMXAwLzdhZTY2ZjgwYTZiMzg5M2ZkNDE5OTkxYzNjZDk4MWI4LmdpZiIsImxpbmsiOiJodHRwczovL3lrNmViOXEudG9wOjQ1ODIifSx7ImlkIjoiMTEzODcwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6IuepuumZjeWrqeaooSIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8zMDcvMmh0LzJxMC8ya2ovZDFkYmExYWYxMTQ0NTE3ZjU3MjQ0NGJlNWRhN2E4MGMuR0lGIiwibGluayI6Imh0dHBzOi8vMTcwMS51d3hieWwuY24vbGFvcGFuL2luZGV4Lmh0bWwifSx7ImlkIjoiMTEzODgwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6IuaYpeiNryIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yOG4vMjZyLzJucS9pMS8xNjdhNWIzMWIwNzc2MzEzMWQ5MWMxOGI3MTI1NzAwMi5HSUYiLCJsaW5rIjoiaHR0cHM6Ly91NXE4cTUudG9wIn0seyJpZCI6IjExMzgzMDAwMDIiLCJsb2NhdGlvbiI6MiwidGl0bGUiOiLmmKXoja/ov7foja8iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjB0LzJweC96Ni8ybDUvMDUxZGE1MzYzYTU4YzVkYTE0ZjMyZWQyYTg5NWUxMDkuZ2lmIiwibGluayI6Imh0dHBzOi8vcG14NWdoZS50b3A6MjkyMCJ9LHsiaWQiOiIxMTYzODAwMDAyIiwibG9jYXRpb24iOjIsInRpdGxlIjoi5rW36KeS56S+5Yy6IiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzIwOC8ybDIvMXNtLzJwdS8wMjNiMmYyZGEyYzUxYWQ2MmJhZTViMjA0MTQ5YTZkNi53ZWJwIiwibGluayI6Imh0dHBzOi8vZDFtcDJvcWszMXAwZGEuY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM5MDAwMDAyIiwibG9jYXRpb24iOjIsInRpdGxlIjoi6buE5p6c55+t5YmnIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlL3VpLzM1NC9wOS9xeC81NTAxYzFkY2VmZmY4NzFhZjc4YzBkYmYzMmI3NWJlNC5qcGciLCJsaW5rIjoiaHR0cHM6Ly9kb3dyMnZyenIwZm9vLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzODkwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6IjkxZmFucyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yczkvMW1tLzJody8zM2ovMDIzMGUwNGVjNGU3ZDMxYWY3NTE0Y2VhMDQzZDM2ZGIud2VicCIsImxpbmsiOiJodHRwczovL2QxMjg5MGFwdHVsMWQwLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzODYwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6Ium7hOaenOemgea8qyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8xdWUvMnlyL245LzIwNS83NjJmZDY1ZmIzMTc2OGE3NmYxNjc0YzdlYTIyYjM1MS53ZWJwIiwibGluayI6Imh0dHBzOi8vZDI4NzFnZmIwazV0MWUuY2xvdWRmcm9udC5uZXQvZG93bmxvYWQvNS9oZ3MwMDAxIn0seyJpZCI6IjExMzg1MDAwMDIiLCJsb2NhdGlvbiI6MiwidGl0bGUiOiI1MeefreWJpyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yNzYvMjAyLzJqNy9nZy9mMDUzZmI1M2MyMjNlM2U4N2E0MGYyMzY4MDlhZjM5My53ZWJwIiwibGluayI6Imh0dHBzOi8vZDFhdnMwcG9yczg5ZmYuY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM4NDAwMDAyIiwibG9jYXRpb24iOjIsInRpdGxlIjoi57qi5p6c55+t5YmnIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzMxcS8yZDEvY20vNnkvZGJiNzM5MDY1NWMzNDRjNTQ4ZDc1NDFkMzIxMTNlNDgud2VicCIsImxpbmsiOiJodHRwczovL2QyODcxZ2ZiMGs1dDFlLmNsb3VkZnJvbnQubmV0L2Rvd25sb2FkLzQvaGdzMDAwMSJ9XSwidmlkZW9MaXN0IjpudWxsLCJzdG9wTGlzdCI6bnVsbCwiZm9yY2VkSnVtcExpc3QiOm51bGwsImFwcEluZm9BTGlzdCI6W3siaWQiOiIxMTM4MjAwMDEyIiwibG9jYXRpb24iOjEyLCJ0aXRsZSI6IuWFqOWbvee6pueCriIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yM3UveDkvazcvMXAwLzdhZTY2ZjgwYTZiMzg5M2ZkNDE5OTkxYzNjZDk4MWI4LmdpZiIsImxpbmsiOiJodHRwczovL3lrNmViOXEudG9wOjQ1ODIifSx7ImlkIjoiMTEzODcwMDAxMiIsImxvY2F0aW9uIjoxMiwidGl0bGUiOiLnqbrpmY3lq6nmqKEiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMzA3LzJodC8ycTAvMmtqL2QxZGJhMWFmMTE0NDUxN2Y1NzI0NDRiZTVkYTdhODBjLkdJRiIsImxpbmsiOiJodHRwczovLzE3MDEudXd4YnlsLmNuL2xhb3Bhbi9pbmRleC5odG1sIn0seyJpZCI6IjExMzg4MDAwMTIiLCJsb2NhdGlvbiI6MTIsInRpdGxlIjoi5pil6I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzI4bi8yNnIvMm5xL2kxLzE2N2E1YjMxYjA3NzYzMTMxZDkxYzE4YjcxMjU3MDAyLkdJRiIsImxpbmsiOiJodHRwczovL3U1cThxNS50b3AifSx7ImlkIjoiMTEzODMwMDAxMiIsImxvY2F0aW9uIjoxMiwidGl0bGUiOiLmmKXoja/ov7foja8iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjB0LzJweC96Ni8ybDUvMDUxZGE1MzYzYTU4YzVkYTE0ZjMyZWQyYTg5NWUxMDkuZ2lmIiwibGluayI6Imh0dHBzOi8vcG14NWdoZS50b3A6MjkyMCJ9LHsiaWQiOiIxMTYzODAwMDEyIiwibG9jYXRpb24iOjEyLCJ0aXRsZSI6Iua1t+inkuekvuWMuiIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yMDgvMmwyLzFzbS8ycHUvMDIzYjJmMmRhMmM1MWFkNjJiYWU1YjIwNDE0OWE2ZDYud2VicCIsImxpbmsiOiJodHRwczovL2QxbXAyb3FrMzFwMGRhLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzOTAwMDAxMiIsImxvY2F0aW9uIjoxMiwidGl0bGUiOiLpu4Tmnpznn63liaciLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvdWkvMzU0L3A5L3F4LzU1MDFjMWRjZWZmZjg3MWFmNzhjMGRiZjMyYjc1YmU0LmpwZyIsImxpbmsiOiJodHRwczovL2Rvd3IydnJ6cjBmb28uY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM4OTAwMDEyIiwibG9jYXRpb24iOjEyLCJ0aXRsZSI6IjkxZmFucyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yczkvMW1tLzJody8zM2ovMDIzMGUwNGVjNGU3ZDMxYWY3NTE0Y2VhMDQzZDM2ZGIud2VicCIsImxpbmsiOiJodHRwczovL2QxMjg5MGFwdHVsMWQwLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzODYwMDAxMiIsImxvY2F0aW9uIjoxMiwidGl0bGUiOiLpu4TmnpznpoHmvKsiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMXVlLzJ5ci9uOS8yMDUvNzYyZmQ2NWZiMzE3NjhhNzZmMTY3NGM3ZWEyMmIzNTEud2VicCIsImxpbmsiOiJodHRwczovL2QyODcxZ2ZiMGs1dDFlLmNsb3VkZnJvbnQubmV0L2Rvd25sb2FkLzUvaGdzMDAwMSJ9LHsiaWQiOiIxMTM4NTAwMDEyIiwibG9jYXRpb24iOjEyLCJ0aXRsZSI6IjUx55+t5YmnIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzI3Ni8yMDIvMmo3L2dnL2YwNTNmYjUzYzIyM2UzZTg3YTQwZjIzNjgwOWFmMzkzLndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMWF2czBwb3JzODlmZi5jbG91ZGZyb250Lm5ldD9kYz1oZ3MwMDAxIn0seyJpZCI6IjExMzg0MDAwMTIiLCJsb2NhdGlvbiI6MTIsInRpdGxlIjoi57qi5p6c55+t5YmnIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzMxcS8yZDEvY20vNnkvZGJiNzM5MDY1NWMzNDRjNTQ4ZDc1NDFkMzIxMTNlNDgud2VicCIsImxpbmsiOiJodHRwczovL2QyODcxZ2ZiMGs1dDFlLmNsb3VkZnJvbnQubmV0L2Rvd25sb2FkLzQvaGdzMDAwMSJ9XSwiYXBwSW5mb0JMaXN0IjpbeyJpZCI6IjExMzgyMDAwMTMiLCJsb2NhdGlvbiI6MTMsInRpdGxlIjoi5YWo5Zu957qm54KuIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzIzdS94OS9rNy8xcDAvN2FlNjZmODBhNmIzODkzZmQ0MTk5OTFjM2NkOTgxYjguZ2lmIiwibGluayI6Imh0dHBzOi8veWs2ZWI5cS50b3A6NDU4MiJ9LHsiaWQiOiIxMTM4NzAwMDEzIiwibG9jYXRpb24iOjEzLCJ0aXRsZSI6IuepuumZjeWrqeaooSIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8zMDcvMmh0LzJxMC8ya2ovZDFkYmExYWYxMTQ0NTE3ZjU3MjQ0NGJlNWRhN2E4MGMuR0lGIiwibGluayI6Imh0dHBzOi8vMTcwMS51d3hieWwuY24vbGFvcGFuL2luZGV4Lmh0bWwifSx7ImlkIjoiMTEzODgwMDAxMyIsImxvY2F0aW9uIjoxMywidGl0bGUiOiLmmKXoja8iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjhuLzI2ci8ybnEvaTEvMTY3YTViMzFiMDc3NjMxMzFkOTFjMThiNzEyNTcwMDIuR0lGIiwibGluayI6Imh0dHBzOi8vdTVxOHE1LnRvcCJ9LHsiaWQiOiIxMTM4MzAwMDEzIiwibG9jYXRpb24iOjEzLCJ0aXRsZSI6IuaYpeiNr+i/t+iNryIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yMHQvMnB4L3o2LzJsNS8wNTFkYTUzNjNhNThjNWRhMTRmMzJlZDJhODk1ZTEwOS5naWYiLCJsaW5rIjoiaHR0cHM6Ly9wbXg1Z2hlLnRvcDoyOTIwIn0seyJpZCI6IjExNjM4MDAwMTMiLCJsb2NhdGlvbiI6MTMsInRpdGxlIjoi5rW36KeS56S+5Yy6IiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzIwOC8ybDIvMXNtLzJwdS8wMjNiMmYyZGEyYzUxYWQ2MmJhZTViMjA0MTQ5YTZkNi53ZWJwIiwibGluayI6Imh0dHBzOi8vZDFtcDJvcWszMXAwZGEuY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM5MDAwMDEzIiwibG9jYXRpb24iOjEzLCJ0aXRsZSI6Ium7hOaenOefreWJpyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS91aS8zNTQvcDkvcXgvNTUwMWMxZGNlZmZmODcxYWY3OGMwZGJmMzJiNzViZTQuanBnIiwibGluayI6Imh0dHBzOi8vZG93cjJ2cnpyMGZvby5jbG91ZGZyb250Lm5ldD9kYz1oZ3MwMDAxIn0seyJpZCI6IjExMzg5MDAwMTMiLCJsb2NhdGlvbiI6MTMsInRpdGxlIjoiOTFmYW5zIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzJzOS8xbW0vMmh3LzMzai8wMjMwZTA0ZWM0ZTdkMzFhZjc1MTRjZWEwNDNkMzZkYi53ZWJwIiwibGluayI6Imh0dHBzOi8vZDEyODkwYXB0dWwxZDAuY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM4NjAwMDEzIiwibG9jYXRpb24iOjEzLCJ0aXRsZSI6Ium7hOaenOemgea8qyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8xdWUvMnlyL245LzIwNS83NjJmZDY1ZmIzMTc2OGE3NmYxNjc0YzdlYTIyYjM1MS53ZWJwIiwibGluayI6Imh0dHBzOi8vZDI4NzFnZmIwazV0MWUuY2xvdWRmcm9udC5uZXQvZG93bmxvYWQvNS9oZ3MwMDAxIn0seyJpZCI6IjExMzg1MDAwMTMiLCJsb2NhdGlvbiI6MTMsInRpdGxlIjoiNTHnn63liaciLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjc2LzIwMi8yajcvZ2cvZjA1M2ZiNTNjMjIzZTNlODdhNDBmMjM2ODA5YWYzOTMud2VicCIsImxpbmsiOiJodHRwczovL2QxYXZzMHBvcnM4OWZmLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzODQwMDAxMyIsImxvY2F0aW9uIjoxMywidGl0bGUiOiLnuqLmnpznn63liaciLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMzFxLzJkMS9jbS82eS9kYmI3MzkwNjU1YzM0NGM1NDhkNzU0MWQzMjExM2U0OC53ZWJwIiwibGluayI6Imh0dHBzOi8vZDI4NzFnZmIwazV0MWUuY2xvdWRmcm9udC5uZXQvZG93bmxvYWQvNC9oZ3MwMDAxIn1dfSwic2VvSW5mbyI6eyJ0aXRsZSI6IueGn+aenOefreWJp+WumOe9kSAtIOeDremXqEFJ5oiQ5Lq655+t5Ymn5LiO6buE5p6c57K+5ZOBQUnmiJDkurrnn63liaflkIjpm4YiLCJrZXl3b3JkcyI6WyLnhp/mnpznn63liaciLCLpu4Tmnpznn63liaciLCLpu4TmnpwiLCJBSeaIkOS6uuefreWJpyIsIueyvuWTgeefreWJpyIsIuefreWJp0FQUCIsIum7hOixhuefreWJpyIsIueGn+aenOWumOe9kSIsIueGn+aenEFQUOS4i+i9vSIsIkFJ5oiQ5Lq655+t5Ymn6KeC55yL572R56uZIiwiQUnmiJDkurrnn63liadhcHDkuIvovb0iLCJBSeaIkOS6uuefreWJp+WcqOe6v+eciyJdLCJkZXNjcmlwdGlvbiI6IueGn+aenOefreWJp+S9nOS4uumihuWFiOeahEFJ5oiQ5Lq655+t5Ymn5LiO57K+5ZOB55+t6KeG6aKR57u85ZCI5bmz5Y+w77yM5rGH6ZuG5YWo572R5Y6f5Yib6auY6IO9SVDkuI7lj43ovazniL3liafjgILnq5nlhoXni6zlrrbng63mkq3jgIrpo47ljY7npZ7lpbPlvZXjgIvjgIrnkLzmmI7npZ7lpbPlvZXjgIvjgIrmr43kuIrmlLvnlaXjgIvjgIrku5nlrZDnmoTkv67ooYzjgIvjgIrmnoHlk4HlrrbkuIHjgIvnrYnlpJrpopjmnZDlipvkvZzvvIzmtrXnm5bku5nkvqDlpYflubvjgIHpg73luILkubHkvKbjgIHogYzlnLrkuI7nqb/otorjgILlhajnq5nnlLvotKjotoXmuIXml6DliKDlh4/jgIHmr4/ml6Xmm7TmlrDmnIDmlrDpm4bvvIzmlK/mjIHnvZHpobXljbPngrnljbPmkq3kuI7lrpjmlrlBUFDmjozkuIrop4LlvbHvvIzlvIDlkK/mnoHoh7TmsonmtbjnmoTop4blkKznm5vlrrTjgIIiLCJ3ZWJTaXRlTmFtZSI6IueGn+aenOefreWJpyIsImNhbm9uaWNhbFVybCI6Imh0dHBzOi8vc2h1Z3VvZGouY29tIn0sInNlb05hdkluZm8iOnsiZGhUaXRsZSI6IueGn+aenOefreWJp+WvvOiIqiAtIOacgOaWsOWPkeW4g+mhtSIsImRoS2V5d29ybGQiOlsi54af5p6c55+t5Ymn5a+86IiqIiwi54af5p6c55+t5Ymn5pyA5paw5Zyw5Z2AIiwi54af5p6c55+t5Ymn5aSH55So57q/6LevIiwi54af5p6c55+t5Ymn5Y+R5biD6aG1Iiwi54af5p6c55+t5YmnVGVsZWdyYW0iLCLnhp/mnpznn63liadUd2l0dGVyIiwi6Ziy5aSx6IGU5Y+R5biD56uZIiwi5aSa57q/6Lev5rWL6YCf5a+86IiqIiwi54af5p6c55+t5Ymn5a6Y572R5YWl5Y+jIl0sImRoRGVzY3JpcHRpb24iOiLnhp/mnpznn63liaflhajnvZHlrpjmlrnlr7zoiKrlj5HluIPpobXvvIzlkYrliKvov7fot6/kuI7ljaHpob/vvIHlrp7ml7blkIzmraXlhajnq5nmnIDmlrDlpIfnlKjln5/lkI3jgIFDRE7mnoHpgJ/oioLngrnkuI7lpJrnur/ot6/lhaXlj6PvvIzmmbrog73liIbmtYHkv53pmpznp5LpgJ/liqDovb3jgILlkIzml7bmj5DkvpvlrpjmlrlUZWxlZ3JhbeS6pOa1gee+pOOAgVjvvIhUd2l0dGVy77yJ56S+5aqS5LiO54us5a62QVBQ5a6Y5pa55LiL6L2955u06L6+6YCa6YGT77yM6YGH5Yiw6K6/6Zeu6Zeu6aKY5LiA6ZSu5YiH5o2i77yM5Yqp5L2g6ZqP5pe26ZqP5Zyw55WF6YCa5peg6Zi755u06L6+5aSn54mH546w5Zy644CCIiwiZGhTaXRlTmFtZSI6IueGn+aenOefreWJp+WumOe9keWFpeWPoyJ9LCJuYXZQYWdlTGlzdCI6W3sibGluZSI6MSwidXJsIjoiaHR0cHM6Ly9kM2c4aWtwZXF5b3ptby5jbG91ZGZyb250Lm5ldCJ9LHsibGluZSI6MiwidXJsIjoiaHR0cHM6Ly9kMTJsMnkxcHowanU4bC5jbG91ZGZyb250Lm5ldCJ9LHsibGluZSI6MywidXJsIjoiaHR0cHM6Ly9kM3Q5M2RyYjhmOWp3ai5jbG91ZGZyb250Lm5ldCJ9XX0sImhhc2giOmZhbHNlLCJtc2ciOiJzdWNjZXNzIiwidGltZSI6IjIwMjYtMTEtMDdUMDQ6MTM6MTQuNjk0WiIsInRpcCI6IuaIkOWKnyJ9","status":200,"url":"https://webhgbapi.mfcg.me/api/app/config/info"},"revalidate":60,"tags":["app-config"]} \ No newline at end of file diff --git a/.next-dev/dev/cache/fetch-cache/59b413e7b10932834acb61a123df9fa2075d2b701f4812d5a4bf919d4a0f0209 b/.next-dev/dev/cache/fetch-cache/59b413e7b10932834acb61a123df9fa2075d2b701f4812d5a4bf919d4a0f0209 new file mode 100644 index 0000000..f83157a --- /dev/null +++ b/.next-dev/dev/cache/fetch-cache/59b413e7b10932834acb61a123df9fa2075d2b701f4812d5a4bf919d4a0f0209 @@ -0,0 +1 @@ +{"kind":"FETCH","data":{"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"Content-Disposition,Refresh-Authorization","connection":"keep-alive","content-encoding":"gzip","content-type":"application/json; charset=utf-8","date":"Sat, 07 Nov 2026 04:13:46 GMT","server":"nginx/1.24.0 (Ubuntu)","transfer-encoding":"chunked"},"body":"eyJjb2RlIjoyMDAsImRhdGEiOnsidG90YWxDb3VudCI6MTgsInBhZ2VTaXplIjoxMiwicGFnZU51bSI6MSwibGlzdCI6W3siaWQiOjE0NTkyLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDA1OjM4OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTJUMjE6NTA6MDdaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAxVDA4OjAwOjU0WiIsInRoZW1lSWRzIjpbMTI2ODEsMTI2ODhdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyIsIua8q+WJpyJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiIsIm1hbmp1Il0sImNhdGVnb3J5SWRzIjpbMTExMDIsMTExMDVdLCJ0aXRsZSI6IuacgOW8uuaYvuekuuWZqO+8iOWFqDEw6ZuG77yJIiwicGxheU5hbWUiOiLmnIDlvLrmmL7npLrlmagiLCJkZXNjcmlwdGlvbiI6IuS4uueVheeOqeiLsembhOiBlOebn++8jOS7luWcqOW6n+WTgeermea3mOWbnuS4gOWPsOazm+edgOivoeW8guiNp+WFieeahOS6jOaJi+aYvuekuuWxj+OAguS4gOe7j+mAmueUteS4jeS7heeUu+i0qOmAvOecn++8jOabtOaLpeacieS6huWwhueOsOWunuiCiei6q+KAnOaVsOS9jeWunuS9k+WMluKAneeahOmAhuWkqeelnuWKm+OAguW8gOacuueerOmXtOS7luebtOaOpeepv+i2iui/m+WFpeeIhuasvue9kea4uOS4lueVjOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuacgOW8uuaYvuekuuWZqOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6Inp1aXFpYW4iLCJkZXNjIjoi5Li655WF546p6Iux6ZuE6IGU55uf77yM5LuW5Zyo5bqf5ZOB56uZ5reY5Zue5LiA5Y+w5rOb552A6K+h5byC6I2n5YWJ55qE5LqM5omL5pi+56S65bGP44CC5LiA57uP6YCa55S15LiN5LuF55S76LSo6YC855yf77yM5pu05oul5pyJ5LqG5bCG546w5a6e6IKJ6Lqr4oCc5pWw5L2N5a6e5L2T5YyW4oCd55qE6YCG5aSp56We5Yqb44CC5byA5py6556s6Ze05LuW55u05o6l56m/6LaK6L+b5YWl54iG5qy+572R5ri45LiW55WM44CCIiwiYW5jaG9yIjoiIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzVjL2xmLzEwNDkvcGxheWxldF9jb3Zlcl8xZjE2NGJkNGI5NTMwYWNhLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvMmUvdWMvMTA0OS9wbGF5bGV0X2NvdmVyXzkwYzk2ZjcxNWQ1NWJiOTcuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUxLDEyODUyLDEyODU3XSwidGFnTmFtZXMiOlsi5Y6f5YibIiwi6buE5p6cIiwi5Y+k5LujIl0sInRhZ1NsdWdzIjpbIllDIiwiaHVhbmdndW8iLCJndWRhaSJdLCJ0b3RhbEVwaXNvZGUiOjEwLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxODgsImhlYXRWYWx1ZSI6MjM0MzcsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0NzoyNi4wMDNaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoxNC4zMTRaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuacgOW8uuaYvuekuuWZqO+8iOWFqDEw6ZuG77yJIiwia2V5d29ybGQiOlsi5pyA5by65pi+56S65ZmoIiwi5ri45oiP56m/6LaKIiwi6Jma5ouf5ZCO5a6rIiwi5pyA5by65pi+56S65Zmo5a6M5pW054mIIiwi5Zyo57q/55yLIiwi55yL5p2/5aiYIiwi5aWz5oiY56WeIl0sImRlc2NyaXB0aW9uIjoi5Li655WF546p6Iux6ZuE6IGU55uf77yM5LuW5Zyo5bqf5ZOB56uZ5reY5Zue5LiA5Y+w5rOb552A6K+h5byC6I2n5YWJ55qE5LqM5omL5pi+56S65bGP44CC5LiA57uP6YCa55S15LiN5LuF55S76LSo6YC855yf77yM5pu05oul5pyJ5LqG5bCG546w5a6e6IKJ6Lqr4oCc5pWw5L2N5a6e5L2T5YyW4oCd55qE6YCG5aSp56We5Yqb44CC5byA5py6556s6Ze05LuW55u05o6l56m/6LaK6L+b5YWl54iG5qy+572R5ri45LiW55WM44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5pyA5by65pi+56S65Zmo44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ0NzQsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDAxOjQ1OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMjlUMTA6NDc6NTNaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTMwVDA4OjUzOjUxWiIsInRoZW1lSWRzIjpbMTI2ODhdLCJ0aGVtZU5hbWVzIjpbIua8q+WJpyJdLCJ0aGVtZVNsdWdzIjpbIm1hbmp1Il0sImNhdGVnb3J5SWRzIjpbMTExMDVdLCJ0aXRsZSI6IuWutuaXj+enmOS6i++8iOWFqDPpm4bvvIkiLCJwbGF5TmFtZSI6IuWutuaXj+enmOS6iyIsImRlc2NyaXB0aW9uIjoi5aSc6Imy5rex5rKJ77yM6YO95biC6ZyT6Jm56YCP6L+H6JC95Zyw56qX5bCG5piP5pqX5YWJ5b2x5rSS5YWl6LGq5Y2O5a6F6YK477yM54i25Lqy5LiO5bm05LiL57un5aWz5LmL6Ze05pys6K+l5riF5pmw55qE6KGA57yY55WM6ZmQ5Zyo5pqX5rWB5Lit6YCQ5riQ5qih57OK44CC5Lym55CG6YGT5b635LmL5aSW55qE5Y6f5aeL5oOF5qyy6IKG5oSP5qiq5rWB77yM56aB5b+M55qE5rip5a2Y5LiO6LSq5oGL5Zyo5aSc6Imy5Lit5peg5aOw5ruL55Sf44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5a625peP56eY5LqL44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJqaWF6dW1pIiwiZGVzYyI6IuWknOiJsua3seayie+8jOmDveW4gumck+iZuemAj+i/h+iQveWcsOeql+WwhuaYj+aal+WFieW9sea0kuWFpeixquWNjuWuhemCuO+8jOeItuS6suS4juW5tOS4i+e7p+Wls+S5i+mXtOacrOivpea4heaZsOeahOihgOe8mOeVjOmZkOWcqOaal+a1geS4remAkOa4kOaooeeziuOAguS8pueQhumBk+W+t+S5i+WklueahOWOn+Wni+aDheassuiChuaEj+aoqua1ge+8jOemgeW/jOeahOa4qeWtmOS4jui0quaBi+WcqOWknOiJsuS4reaXoOWjsOa7i+eUn+OAgiIsImFuY2hvciI6Ium7hOaenOWumOaWuSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9wMS90di8xMDQ5L3BsYXlsZXRfY292ZXJfNWEyNDI2YTIyZGRhMjhmNy5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3M2L2s0LzEwNDkvcGxheWxldF9jb3Zlcl81YTI0MjZhMjJkZGEyOGY3LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MywxMjg1NV0sInRhZ05hbWVzIjpbIkFJ5oiQ5Lq655+t5YmnIiwi6YO95biCIl0sInRhZ1NsdWdzIjpbIkNSREoiLCJkdXNoaSJdLCJ0b3RhbEVwaXNvZGUiOjMsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE2OSwiaGVhdFZhbHVlIjoyMTU0NSwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE4LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQyOjA4LjcyOVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAwOjAwOjEyLjc0OVoiLCJzZW9JbmZvIjp7InRpdGxlIjoi5a625peP56eY5LqL77yI5YWoM+mbhu+8iSIsImtleXdvcmxkIjpbIuWutuaXj+enmOS6iyIsIuemgeW/jOS5i+aBiyIsIuS5seS8puaal+a1gSIsIuWutuaXj+enmOS6i+WujOaVtOeJiCIsIuWcqOe6v+eciyIsIue7p+WlsyIsIueItuS6siJdLCJkZXNjcmlwdGlvbiI6IuWknOiJsua3seayie+8jOmDveW4gumck+iZuemAj+i/h+iQveWcsOeql+WwhuaYj+aal+WFieW9sea0kuWFpeixquWNjuWuhemCuO+8jOeItuS6suS4juW5tOS4i+e7p+Wls+S5i+mXtOacrOivpea4heaZsOeahOihgOe8mOeVjOmZkOWcqOaal+a1geS4remAkOa4kOaooeeziuOAguS8pueQhumBk+W+t+S5i+WklueahOWOn+Wni+aDheassuiChuaEj+aoqua1ge+8jOemgeW/jOeahOa4qeWtmOS4jui0quaBi+WcqOWknOiJsuS4reaXoOWjsOa7i+eUn+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWutuaXj+enmOS6i+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDPpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ1MjYsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOnRydWUsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOmZhbHNlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTEwLTI5VDA5OjIzOjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTJUMjE6NTA6MDZaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAxVDA4OjAwOjU0WiIsInRoZW1lSWRzIjpbMTI2ODEsMTI2ODhdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyIsIua8q+WJpyJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiIsIm1hbmp1Il0sImNhdGVnb3J5SWRzIjpbMTExMDJdLCJ0aXRsZSI6IuWPjea0vu+8muaIkeeahOavjeS6suaYr+Wkp+W4ne+8iOWFqDEw6ZuG77yJIiwicGxheU5hbWUiOiLlj43mtL7vvJrmiJHnmoTmr43kurLmmK/lpKfluJ0iLCJkZXNjcmlwdGlvbiI6IuenpuWkqeaEj+Wklui9rOeUn+aIkOS7meeVjOiHs+W8uuWls+W4neeahOeLrOWtkO+8jOWNtOaDiuinieiHquW3seWPquaYr+eOhOW5u+eIveaWh+mHjOa0u+S4jei/h+S4ieeroOeahOefreWRveWPjea0vuOAgueuoeS7luS7gOS5iOWkqeWRveawlOi/kO+8jOS7luebtOaOpeW8uuWKv+aSleeiju+8geW8gOWQr+WPjea0vuezu+e7n+WQju+8jOS7luWFiOWwhumrmOmrmOWcqOS4iueahOWkp+W4neavjeS6suaMieWcqOm+meamu+S4iuWknOWknOWHjOi+se+8jOebtOaKiuWls+W4neW5suWIsOaXoOW/g+S4iuacneOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWPjea0vu+8muaIkeeahOavjeS6suaYr+Wkp+W4neOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImZhbnBhaXciLCJkZXNjIjoi56em5aSp5oSP5aSW6L2s55Sf5oiQ5LuZ55WM6Iez5by65aWz5bid55qE54us5a2Q77yM5Y205oOK6KeJ6Ieq5bex5Y+q5piv546E5bm754i95paH6YeM5rS75LiN6L+H5LiJ56ug55qE55+t5ZG95Y+N5rS+44CC566h5LuW5LuA5LmI5aSp5ZG95rCU6L+Q77yM5LuW55u05o6l5by65Yq/5pKV56KO77yB5byA5ZCv5Y+N5rS+57O757uf5ZCO77yM5LuW5YWI5bCG6auY6auY5Zyo5LiK55qE5aSn5bid5q+N5Lqy5oyJ5Zyo6b6Z5qa75LiK5aSc5aSc5YeM6L6x77yM55u05oqK5aWz5bid5bmy5Yiw5peg5b+D5LiK5pyd44CCIiwiYW5jaG9yIjoiIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2dkL3kzLzEwNDkvcGxheWxldF9jb3Zlcl80MTRmYjUwOTc5MGMzNTZmLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvOGkvZHIvMTA0OS9wbGF5bGV0X2NvdmVyXzA5ZmZlMDFiYzc4ODcxNTAuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUxLDEyODUyLDEyODYxXSwidGFnTmFtZXMiOlsi5Y6f5YibIiwi6buE5p6cIiwi5q+N5a2QIl0sInRhZ1NsdWdzIjpbIllDIiwiaHVhbmdndW8iLCJtdXppIl0sInRvdGFsRXBpc29kZSI6MTAsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE1MCwiaGVhdFZhbHVlIjoxOTU3OCwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjExLCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ2OjI0Ljc4OVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA2VDIyOjAwOjEyLjUzNVoiLCJzZW9JbmZvIjp7InRpdGxlIjoi5Y+N5rS+77ya5oiR55qE5q+N5Lqy5piv5aSn5bid77yI5YWoMTDpm4bvvIkiLCJrZXl3b3JsZCI6WyLlj43mtL7miJHnmoTmr43kurLmmK/lpKfluJ0iLCLpgIblpKnlj43mtL4iLCLlpKfluJ3mr43kurIiLCLlj43mtL7miJHnmoTmr43kurLmmK/lpKfluJ3lrozmlbTniYgiLCLlnKjnur/nnIsiLCLnp6blpKkiLCLlvbHlp6wiLCLoiJ7lhrDlqbUiXSwiZGVzY3JpcHRpb24iOiLnp6blpKnmhI/lpJbovaznlJ/miJDku5nnlYzoh7PlvLrlpbPluJ3nmoTni6zlrZDvvIzljbTmg4rop4noh6rlt7Hlj6rmmK/njoTlubvniL3mlofph4zmtLvkuI3ov4fkuInnq6DnmoTnn63lkb3lj43mtL7jgILnrqHku5bku4DkuYjlpKnlkb3msJTov5DvvIzku5bnm7TmjqXlvLrlir/mkpXnoo7vvIHlvIDlkK/lj43mtL7ns7vnu5/lkI7vvIzku5blhYjlsIbpq5jpq5jlnKjkuIrnmoTlpKfluJ3mr43kurLmjInlnKjpvpnmprvkuIrlpJzlpJzlh4zovrHvvIznm7TmiorlpbPluJ3lubLliLDml6Dlv4PkuIrmnJ3jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlj43mtL7vvJrmiJHnmoTmr43kurLmmK/lpKfluJ3jgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDU0Niwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6dHJ1ZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6ZmFsc2UsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTAtMzFUMjI6NDk6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0wOS0xMlQyMTo1MDowN1oiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMDFUMDg6MDA6NTRaIiwidGhlbWVJZHMiOlsxMjY4MSwxMjY4OF0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIiwi5ryr5YmnIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIiwibWFuanUiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMl0sInRpdGxlIjoi5pyr6Zuq56aB5Z+O77yI5YWoNumbhu+8iSIsInBsYXlOYW1lIjoi5pyr6Zuq56aB5Z+OIiwiZGVzY3JpcHRpb24iOiLmlofmmI7mr4Hnga3lkI7nmoTnrKzkuIPlubTvvIzmsLjlhrvmmrTpo47pm6rlvbvlupXlkJ7lmazkuoblnLDooajjgILliY3nibnmiJjpmJ/lkZjlhYvolb7lhL/kuI3lubjooqvkv5jvvIzmirzlm57kuobkuIDkuKrnlLfkurrmlbDph4/lkYjljovlgJLmgKfkvJjlir/nmoTlnLDkuIvluofmiqTmiYAtMDfjgILov5nph4znmoTnlLfkurrku6znlKjlhYXmu6Hmt6vpgqrnmoTnm67lhYnlsIblpbnmrbvmrbvplIHkvY/vvIzmmpbmsJTjgIHpo5/nianjgIHnlJ/lrZjkuYPoh7Pkurrouqvoh6rnlLHjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmnKvpm6rnpoHln47jgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw26ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6Im1veHVlamkiLCJkZXNjIjoi5paH5piO5q+B54Gt5ZCO55qE56ys5LiD5bm077yM5rC45Ya75pq06aOO6Zuq5b275bqV5ZCe5Zms5LqG5Zyw6KGo44CC5YmN54m55oiY6Zif5ZGY5YWL6JW+5YS/5LiN5bm46KKr5L+Y77yM5oq85Zue5LqG5LiA5Liq55S35Lq65pWw6YeP5ZGI5Y6L5YCS5oCn5LyY5Yq/55qE5Zyw5LiL5bqH5oqk5omALTA344CC6L+Z6YeM55qE55S35Lq65Lus55So5YWF5ruh5rer6YKq55qE55uu5YWJ5bCG5aW55q275q276ZSB5L2P77yM5pqW5rCU44CB6aOf54mp44CB55Sf5a2Y5LmD6Iez5Lq66Lqr6Ieq55Sx44CCIiwiYW5jaG9yIjoiLi4iLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvbHcvaXgvMTA0OS9wbGF5bGV0X2NvdmVyX2M4NTRlOWFlODk2N2E1NjMuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9qNS9vNy8xMDQ5L3BsYXlsZXRfY292ZXJfYzg1NGU5YWU4OTY3YTU2My5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTEsMTI4NTIsMTI4NjhdLCJ0YWdOYW1lcyI6WyLljp/liJsiLCLpu4TmnpwiLCLmnKvml6Xlup/lnJ8iXSwidGFnU2x1Z3MiOlsiWUMiLCJodWFuZ2d1byIsIm1vcmlmZWl0dSJdLCJ0b3RhbEVwaXNvZGUiOjYsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE1MSwiaGVhdFZhbHVlIjoxOTQxMiwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE4LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ2OjQ5LjQ0OVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjIxLjU1NloiLCJzZW9JbmZvIjp7InRpdGxlIjoi5pyr6Zuq56aB5Z+O77yI5YWoNumbhu+8iSIsImtleXdvcmxkIjpbIuacq+mbquemgeWfjiIsIuW6n+Wcn+axgueUnyIsIuadg+WKm+ivleaOoiIsIuacq+mbquemgeWfjuWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuWFi+iVvuWEvyIsIuaMh+aMpeWumCJdLCJkZXNjcmlwdGlvbiI6IuaWh+aYjuavgeeBreWQjueahOesrOS4g+W5tO+8jOawuOWGu+aatOmjjumbquW9u+W6leWQnuWZrOS6huWcsOihqOOAguWJjeeJueaImOmYn+WRmOWFi+iVvuWEv+S4jeW5uOiiq+S/mO+8jOaKvOWbnuS6huS4gOS4queUt+S6uuaVsOmHj+WRiOWOi+WAkuaAp+S8mOWKv+eahOWcsOS4i+W6h+aKpOaJgC0wN+OAgui/memHjOeahOeUt+S6uuS7rOeUqOWFhea7oea3q+mCqueahOebruWFieWwhuWlueatu+atu+mUgeS9j++8jOaaluawlOOAgemjn+eJqeOAgeeUn+WtmOS5g+iHs+S6uui6q+iHqueUseOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuacq+mbquemgeWfjuOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDbpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ1NTIsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOnRydWUsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDNUMDM6MDE6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0wOS0xMlQyMTo1MDowNloiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMDFUMDg6MDA6NTRaIiwidGhlbWVJZHMiOlsxMjY4MSwxMjY4OF0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIiwi5ryr5YmnIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIiwibWFuanUiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMl0sInRpdGxlIjoi5rOh6Z2i55Wq77yI5YWoNembhu+8iSIsInBsYXlOYW1lIjoi5rOh6Z2i55WqIiwiZGVzY3JpcHRpb24iOiLlr4LpnZnmt7HlpJznmoTnu7/nmq7ngavovabkuIrvvIzmu6HljYHlhavlsoHnmoTmnpfmmZPmn5TooqvliJfovabplb/ku6XljYfnrYnkuLrlgJ/lj6PlvLrooYzmi4nlhaXni63nqoTovabplb/lrqTvvIznlJ/ml6XonKHng5vliJrnhoTnga3vvIznoLTlpITkuI7msqbokL3lsLHlnKjlkIzkuIDmmZrpmY3kuLTjgILnoLTkuqflpbPnpL7plb/nmb3luq3lhbDooqvorqjolqrlkZjlt6Xlm7TloLXlnKjkvJrorq7lrqTvvIzntKfnu7fnmoTooazooavkuI7nm5jlj5HlsYLlsYLltKnokL3jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrms6HpnaLnlarjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw16ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6InBhb21pYW4iLCJkZXNjIjoi5a+C6Z2Z5rex5aSc55qE57u/55qu54Gr6L2m5LiK77yM5ruh5Y2B5YWr5bKB55qE5p6X5pmT5p+U6KKr5YiX6L2m6ZW/5Lul5Y2H562J5Li65YCf5Y+j5by66KGM5ouJ5YWl54ut56qE6L2m6ZW/5a6k77yM55Sf5pel6Jyh54Ob5Yia54aE54Gt77yM56C05aSE5LiO5rKm6JC95bCx5Zyo5ZCM5LiA5pma6ZmN5Li044CC56C05Lqn5aWz56S+6ZW/55m95bqt5YWw6KKr6K6o6Jaq5ZGY5bel5Zu05aC15Zyo5Lya6K6u5a6k77yM57Sn57u355qE6KGs6KGr5LiO55uY5Y+R5bGC5bGC5bSp6JC944CCIiwiYW5jaG9yIjoiIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3gwL2NtLzEwNDkvcGxheWxldF9jb3Zlcl9mMmFjYzEwNzcyZThjOTljLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UveHEveXAvMTA0OS9wbGF5bGV0X2NvdmVyX2FiMDJkMDdjN2ExNzM4ZGUuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUxLDEyODUyXSwidGFnTmFtZXMiOlsi5Y6f5YibIiwi6buE5p6cIl0sInRhZ1NsdWdzIjpbIllDIiwiaHVhbmdndW8iXSwidG90YWxFcGlzb2RlIjo1LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNTYsImhlYXRWYWx1ZSI6MTg5OTIsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxOCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0Njo1NS4wNjNaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoyMS4zMDdaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuazoemdoueVqu+8iOWFqDXpm4bvvIkiLCJrZXl3b3JsZCI6WyLms6HpnaLnlaoiLCLlr4bpl63nqbrpl7QiLCLmnYPlipvlgL7ovaciLCLms6HpnaLnlarlrozmlbTniYgiLCLlnKjnur/nnIsiLCLmnpfmmZPmn5QiLCLnmb3luq3lhbAiXSwiZGVzY3JpcHRpb24iOiLlr4LpnZnmt7HlpJznmoTnu7/nmq7ngavovabkuIrvvIzmu6HljYHlhavlsoHnmoTmnpfmmZPmn5TooqvliJfovabplb/ku6XljYfnrYnkuLrlgJ/lj6PlvLrooYzmi4nlhaXni63nqoTovabplb/lrqTvvIznlJ/ml6XonKHng5vliJrnhoTnga3vvIznoLTlpITkuI7msqbokL3lsLHlnKjlkIzkuIDmmZrpmY3kuLTjgILnoLTkuqflpbPnpL7plb/nmb3luq3lhbDooqvorqjolqrlkZjlt6Xlm7TloLXlnKjkvJrorq7lrqTvvIzntKfnu7fnmoTooazooavkuI7nm5jlj5HlsYLlsYLltKnokL3jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrms6HpnaLnlarjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw16ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NTc3LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3IjpmYWxzZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMC0zMVQxODozNTozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTA5LTEyVDIxOjUwOjA3WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMC0wMVQwODowMDo1NFoiLCJ0aGVtZUlkcyI6WzEyNjgxLDEyNjg4XSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciLCLmvKvliaciXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiLCJtYW5qdSJdLCJjYXRlZ29yeUlkcyI6WzExMTAyXSwidGl0bGUiOiLml6DmlYznmoTmiJHlnKjlvILkuJbnlYzlj6rmg7PlgZrniLHvvIjlhagxMOmbhu+8iSIsInBsYXlOYW1lIjoi5peg5pWM55qE5oiR5Zyo5byC5LiW55WM5Y+q5oOz5YGa54ixIiwiZGVzY3JpcHRpb24iOiLovaznlJ/miJDkuLrmt6vprZTnmoTliY3pq5jkuK3nlJ/pmobpgZPpnaDnnYDkuIDmoLnogonmo5Lku47prZTnlYzlupXlsYLkuIDot6/mnYDliLDkuI7prZTnpZ7lubPotbflubPlnZDnmoTlpKfliZHosarjgILpnaLlr7nprZTnjovorqnkvY3ku5bmnpzmlq3mi5Lnu53vvIzlm6DkuLrprZTnlYzlpbPkurrlt7Lnu4/mu6HotrPkuI3kuobku5bvvIzns7vnu5/mmL7npLrkuIvkuIDpmLbmrrXlv4XpobvlvoHmnI3nsr7ngbXkuI7kurrnsbvjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrml6DmlYznmoTmiJHlnKjlvILkuJbnlYzlj6rmg7PlgZrniLHjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJ3dWRpZGV3IiwiZGVzYyI6Iui9rOeUn+aIkOS4uua3q+mtlOeahOWJjemrmOS4reeUn+mahumBk+mdoOedgOS4gOagueiCieajkuS7jumtlOeVjOW6leWxguS4gOi3r+adgOWIsOS4jumtlOelnuW5s+i1t+W5s+WdkOeahOWkp+WJkeixquOAgumdouWvuemtlOeOi+iuqeS9jeS7luaenOaWreaLkue7ne+8jOWboOS4uumtlOeVjOWls+S6uuW3sue7j+a7oei2s+S4jeS6huS7lu+8jOezu+e7n+aYvuekuuS4i+S4gOmYtuauteW/hemhu+W+geacjeeyvueBteS4juS6uuexu+OAgiIsImFuY2hvciI6IiIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9xNi96ci8xMDQ5L3BsYXlsZXRfY292ZXJfY2YwMTE5Y2Q5MDZhNTI3NC5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzRxL2ZuLzEwNDkvcGxheWxldF9jb3Zlcl83NjgwNjBmZTk2MmM5NTI2LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MSwxMjg1MiwxMjg3MF0sInRhZ05hbWVzIjpbIuWOn+WImyIsIum7hOaenCIsIuW8guS4lueVjCJdLCJ0YWdTbHVncyI6WyJZQyIsImh1YW5nZ3VvIiwiWVNKIl0sInRvdGFsRXBpc29kZSI6MTAsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE0NCwiaGVhdFZhbHVlIjoxODMxNSwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE2LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ3OjEzLjc5NVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjIwLjIzMVoiLCJzZW9JbmZvIjp7InRpdGxlIjoi5peg5pWM55qE5oiR5Zyo5byC5LiW55WM5Y+q5oOz5YGa54ix77yI5YWoMTDpm4bvvIkiLCJrZXl3b3JsZCI6WyLml6DmlYznmoTmiJHlnKjlvILkuJbnlYzlj6rmg7PlgZrniLEiLCLlvILnlYzmt6vprZQiLCLnsr7ngbXlvoHmnI0iLCLml6DmlYznmoTmiJHlnKjlvILkuJbnlYzlj6rmg7PlgZrniLHlrozmlbTniYgiLCLlnKjnur/nnIsiLCLpmobpgZMiLCLnsr7ngbXlsJHlpbMiXSwiZGVzY3JpcHRpb24iOiLovaznlJ/miJDkuLrmt6vprZTnmoTliY3pq5jkuK3nlJ/pmobpgZPpnaDnnYDkuIDmoLnogonmo5Lku47prZTnlYzlupXlsYLkuIDot6/mnYDliLDkuI7prZTnpZ7lubPotbflubPlnZDnmoTlpKfliZHosarjgILpnaLlr7nprZTnjovorqnkvY3ku5bmnpzmlq3mi5Lnu53vvIzlm6DkuLrprZTnlYzlpbPkurrlt7Lnu4/mu6HotrPkuI3kuobku5bvvIzns7vnu5/mmL7npLrkuIvkuIDpmLbmrrXlv4XpobvlvoHmnI3nsr7ngbXkuI7kurrnsbvjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrml6DmlYznmoTmiJHlnKjlvILkuJbnlYzlj6rmg7PlgZrniLHjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDgyMiwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6dHJ1ZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6ZmFsc2UsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTAtMzBUMTE6MDg6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMC0xOFQwMjoxMDowMFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMTlUMTA6NDc6MDNaIiwidGhlbWVJZHMiOlsxMjY4MSwxMjY4OF0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIiwi5ryr5YmnIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIiwibWFuanUiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMiwxMTEwNV0sInRpdGxlIjoi5pyA5by65pi+56S65ZmoMu+8muWOn+elnu+8iOWFqDEw6ZuG77yJIiwicGxheU5hbWUiOiLmnIDlvLrmmL7npLrlmagy77ya5Y6f56WeIiwiZGVzY3JpcHRpb24iOiLnpZ7nuqfkuozmiYvmmL7npLrlsY/lho3luqblj5HnlJ/lvILlj5jvvIzku5bnm7TmjqXku6XogonouqvnnJ/ouqvlvLrooYznqb/moq3ov5vlhaXmj5Dnk6bnibnlpKfpmYbvvIHku47mnIDliJ3pmpTnnYDlsY/luZXljZXmnLrmir3ljaHvvIzliLDlpoLku4rlvbvlupXouqvkuLTokpnlvrfln47vvIzmuLjmiI/kuJbnlYzph4znmoTlkITlpKfnu53oibLnnIvmnb/lqJjkuI7lpbPmiJjnpZ7lhajlj5jmiJDkuobop6bmiYvlj6/lj4rnmoTmuKnpppnova/njonjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmnIDlvLrmmL7npLrlmagy77ya5Y6f56We44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoienVpcWlhMiIsImRlc2MiOiLnpZ7nuqfkuozmiYvmmL7npLrlsY/lho3luqblj5HnlJ/lvILlj5jvvIzku5bnm7TmjqXku6XogonouqvnnJ/ouqvlvLrooYznqb/moq3ov5vlhaXmj5Dnk6bnibnlpKfpmYbvvIHku47mnIDliJ3pmpTnnYDlsY/luZXljZXmnLrmir3ljaHvvIzliLDlpoLku4rlvbvlupXouqvkuLTokpnlvrfln47vvIzmuLjmiI/kuJbnlYzph4znmoTlkITlpKfnu53oibLnnIvmnb/lqJjkuI7lpbPmiJjnpZ7lhajlj5jmiJDkuobop6bmiYvlj6/lj4rnmoTmuKnpppnova/njonjgIIiLCJhbmNob3IiOiLljp/liJsiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvOWsvN2UvMTA0OS9wbGF5bGV0X2NvdmVyXzNlNjUxYzc2MTg3MzhmOGIuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9mNC9jay8xMDQ5L3BsYXlsZXRfY292ZXJfOGQ0OTlmYjUwYjExOTk3OC5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTEsMTI4NTIsMTI4NTddLCJ0YWdOYW1lcyI6WyLljp/liJsiLCLpu4TmnpwiLCLlj6Tku6MiXSwidGFnU2x1Z3MiOlsiWUMiLCJodWFuZ2d1byIsImd1ZGFpIl0sInRvdGFsRXBpc29kZSI6MTAsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE1MCwiaGVhdFZhbHVlIjoxODIyMCwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE4LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ5OjM5LjIwNloiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjE2Ljg5NloiLCJzZW9JbmZvIjp7InRpdGxlIjoi5pyA5by65pi+56S65ZmoMu+8muWOn+elnu+8iOWFqDEw6ZuG77yJIiwia2V5d29ybGQiOlsi5pyA5by65pi+56S65ZmoMuWOn+elniIsIua4uOaIj+epv+i2iiIsIuaPkOeTpueJueWQjuWuqyIsIuacgOW8uuaYvuekuuWZqDLljp/npZ7lrozmlbTniYgiLCLlnKjnur/nnIsiLCLljp/npZ7kvbPkuroiLCLlvILnlYzlkI7lrqsiXSwiZGVzY3JpcHRpb24iOiLnpZ7nuqfkuozmiYvmmL7npLrlsY/lho3luqblj5HnlJ/lvILlj5jvvIzku5bnm7TmjqXku6XogonouqvnnJ/ouqvlvLrooYznqb/moq3ov5vlhaXmj5Dnk6bnibnlpKfpmYbvvIHku47mnIDliJ3pmpTnnYDlsY/luZXljZXmnLrmir3ljaHvvIzliLDlpoLku4rlvbvlupXouqvkuLTokpnlvrfln47vvIzmuLjmiI/kuJbnlYzph4znmoTlkITlpKfnu53oibLnnIvmnb/lqJjkuI7lpbPmiJjnpZ7lhajlj5jmiJDkuobop6bmiYvlj6/lj4rnmoTmuKnpppnova/njonjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmnIDlvLrmmL7npLrlmagy77ya5Y6f56We44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ0NzEsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAxVDE2OjQwOjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMjlUMTE6MDY6NTNaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTMwVDA4OjUzOjUxWiIsInRoZW1lSWRzIjpbMTI2ODhdLCJ0aGVtZU5hbWVzIjpbIua8q+WJpyJdLCJ0aGVtZVNsdWdzIjpbIm1hbmp1Il0sImNhdGVnb3J5SWRzIjpbMTExMDVdLCJ0aXRsZSI6IuaBtumtlOWlkee6pu+8iOWFqDPpm4bvvIkiLCJwbGF5TmFtZSI6IuaBtumtlOWlkee6piIsImRlc2NyaXB0aW9uIjoi5byx5bCP5peg5L6d55qE5YaS6Zmp6ICF5rSb5oGp6aWx5Y+X5p2D6LS16LS15peP5aeQ5aa555qE55m+6Iis5qy65YeM77yM5YaF5b+D56ev5Y6L55qE5oKy5oSk5LiO5bGI6L6x5oSP5aSW5ZSk6YaS5LqG5aaW6Imz55qE6a2F6a2U6I6J6I6J5Lid44CC5Lik5Lq65b2T5Y2z57yU57uT5LiL6Zi05pqX55qE5oG26a2U5aWR57qm77yM5rSb5oGp5Lul6Ieq6Lqr55qE5oCn54ix57K+5ray5rqQ5rqQ5LiN5pat5Zyw5ruL5YW76a2F6a2U77yM5Lul5q2k5o2i5Y+W5Luk5Lq65oiY5qCX55qE5by65oKN5o6n5Yi25omL5q6144CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5oG26a2U5aWR57qm44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJlbW9xaXl1IiwiZGVzYyI6IuW8seWwj+aXoOS+neeahOWGkumZqeiAhea0m+aBqemlseWPl+adg+i0tei0teaXj+WnkOWmueeahOeZvuiIrOasuuWHjO+8jOWGheW/g+enr+WOi+eahOaCsuaEpOS4juWxiOi+seaEj+WkluWUpOmGkuS6huWmluiJs+eahOmthemtlOiOieiOieS4neOAguS4pOS6uuW9k+WNs+e8lOe7k+S4i+mYtOaal+eahOaBtumtlOWlkee6pu+8jOa0m+aBqeS7peiHqui6q+eahOaAp+eIseeyvua2sua6kOa6kOS4jeaWreWcsOa7i+WFu+mthemtlO+8jOS7peatpOaNouWPluS7pOS6uuaImOagl+eahOW8uuaCjeaOp+WItuaJi+auteOAgiIsImFuY2hvciI6Ium7hOaenOWumOaWuSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9pdC80by8xMDQ5L3BsYXlsZXRfY292ZXJfNzFiNTY0MjFjMmU4MGZkOS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzVtL3IwLzEwNDkvcGxheWxldF9jb3Zlcl83MWI1NjQyMWMyZTgwZmQ5LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1OSwxMjg2NCwxMjg3MF0sInRhZ05hbWVzIjpbIuiJs+mBhyIsIuWCrOecoCIsIuW8guS4lueVjCJdLCJ0YWdTbHVncyI6WyJ5YW55dSIsImN1aW1pYW4iLCJZU0oiXSwidG90YWxFcGlzb2RlIjozLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNDUsImhlYXRWYWx1ZSI6MTgwODksImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNiwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0MTo1Ni40MVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAwOjAwOjEzLjI0OFoiLCJzZW9JbmZvIjp7InRpdGxlIjoi5oG26a2U5aWR57qm77yI5YWoM+mbhu+8iSIsImtleXdvcmxkIjpbIuaBtumtlOWlkee6piIsIumthemtlOivseaDkSIsIuadg+i0teWkjeS7hyIsIuaBtumtlOWlkee6puWujOaVtOeJiCIsIuWcqOe6v+eciyIsIua0m+aBqSIsIuiOieiOieS4nSJdLCJkZXNjcmlwdGlvbiI6IuW8seWwj+aXoOS+neeahOWGkumZqeiAhea0m+aBqemlseWPl+adg+i0tei0teaXj+WnkOWmueeahOeZvuiIrOasuuWHjO+8jOWGheW/g+enr+WOi+eahOaCsuaEpOS4juWxiOi+seaEj+WkluWUpOmGkuS6huWmluiJs+eahOmthemtlOiOieiOieS4neOAguS4pOS6uuW9k+WNs+e8lOe7k+S4i+mYtOaal+eahOaBtumtlOWlkee6pu+8jOa0m+aBqeS7peiHqui6q+eahOaAp+eIseeyvua2sua6kOa6kOS4jeaWreWcsOa7i+WFu+mthemtlO+8jOS7peatpOaNouWPluS7pOS6uuaImOagl+eahOW8uuaCjeaOp+WItuaJi+auteOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuaBtumtlOWlkee6puOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDPpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ1NjgsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOnRydWUsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOmZhbHNlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTEwLTI5VDA3OjAyOjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTJUMjE6NTA6MDdaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAxVDA4OjAwOjU0WiIsInRoZW1lSWRzIjpbMTI2ODEsMTI2ODhdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyIsIua8q+WJpyJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiIsIm1hbmp1Il0sImNhdGVnb3J5SWRzIjpbMTExMDIsMTExMDVdLCJ0aXRsZSI6IuWPjOeUn+mBk+S+o++8iOWFqDnpm4bvvIkiLCJwbGF5TmFtZSI6IuWPjOeUn+mBk+S+oyIsImRlc2NyaXB0aW9uIjoi5LiA5YmR6IO95YqI6KOC5aaW546L55qE57ud5Luj5by66ICF5qWa5aSc77yM6ZqQ5aeT5Z+L5ZCN5Zyo5bCP6ZWH6KOF5LqG5Y2B5bm05Yeh5Lq677yM5Y+q5Li65a6I5oqk6Z2S5qKF56u56ams6IuP5qOg6L+H5a6J56iz5pel5a2Q44CC54S26ICM6IuP5qOg5L2T5YaF5Y205a+E5a6/552A5Y+m5LiA5Liq5pS+6I2h6aqa5rWq55qE54G16a2C4oCU4oCU5bCP5aeo5a2Q6IuP57OW44CC5q+P5b2T5aSc5bmV6ZmN5Li06IuP57OW5L6/5o6l566h6IKJ6Lqr44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5Y+M55Sf6YGT5L6j44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysOembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJzaHVhbmdzIiwiZGVzYyI6IuS4gOWJkeiDveWKiOijguWmlueOi+eahOe7neS7o+W8uuiAhealmuWknO+8jOmakOWnk+Wfi+WQjeWcqOWwj+mVh+ijheS6huWNgeW5tOWHoeS6uu+8jOWPquS4uuWuiOaKpOmdkuaiheeruemprOiLj+ajoOi/h+Wuieeos+aXpeWtkOOAgueEtuiAjOiLj+ajoOS9k+WGheWNtOWvhOWuv+edgOWPpuS4gOS4quaUvuiNoemqmua1queahOeBtemtguKAlOKAlOWwj+WnqOWtkOiLj+ezluOAguavj+W9k+WknOW5lemZjeS4tOiLj+ezluS+v+aOpeeuoeiCiei6q+OAgiIsImFuY2hvciI6IiIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9mdi9lYy8xMDQ5L3BsYXlsZXRfY292ZXJfMWE5ZWUwNmM3N2I3YTI3Mi5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3R1L2d3LzEwNDkvcGxheWxldF9jb3Zlcl9jMjE1Yjg3ODNmMmIxZjdjLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MSwxMjg1MiwxMjg1NF0sInRhZ05hbWVzIjpbIuWOn+WImyIsIum7hOaenCIsIuS7meS+oCJdLCJ0YWdTbHVncyI6WyJZQyIsImh1YW5nZ3VvIiwieGlhbnhpYSJdLCJ0b3RhbEVwaXNvZGUiOjksInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE0OCwiaGVhdFZhbHVlIjoxNzAzNiwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE1LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ3OjA3LjUwMloiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjE1LjM0NVoiLCJzZW9JbmZvIjp7InRpdGxlIjoi5Y+M55Sf6YGT5L6j77yI5YWoOembhu+8iSIsImtleXdvcmxkIjpbIuWPjOeUn+mBk+S+oyIsIuWPjOeUn+WnkOWmuSIsIuemgeW/jOWPjOS/riIsIuWPjOeUn+mBk+S+o+WujOaVtOeJiCIsIuWcqOe6v+eciyIsIualmuWknCIsIuiLj+ajoCIsIuiLj+ezliJdLCJkZXNjcmlwdGlvbiI6IuS4gOWJkeiDveWKiOijguWmlueOi+eahOe7neS7o+W8uuiAhealmuWknO+8jOmakOWnk+Wfi+WQjeWcqOWwj+mVh+ijheS6huWNgeW5tOWHoeS6uu+8jOWPquS4uuWuiOaKpOmdkuaiheeruemprOiLj+ajoOi/h+Wuieeos+aXpeWtkOOAgueEtuiAjOiLj+ajoOS9k+WGheWNtOWvhOWuv+edgOWPpuS4gOS4quaUvuiNoemqmua1queahOeBtemtguKAlOKAlOWwj+WnqOWtkOiLj+ezluOAguavj+W9k+WknOW5lemZjeS4tOiLj+ezluS+v+aOpeeuoeiCiei6q+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWPjOeUn+mBk+S+o+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDnpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ1NTgsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOnRydWUsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOmZhbHNlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTEwLTMxVDExOjA3OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTJUMjE6NTA6MDZaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAxVDA4OjAwOjU0WiIsInRoZW1lSWRzIjpbMTI2ODEsMTI2ODhdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyIsIua8q+WJpyJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiIsIm1hbmp1Il0sImNhdGVnb3J5SWRzIjpbMTExMDJdLCJ0aXRsZSI6IuiCieiSsuWbou+8iOWFqDbpm4bvvIkiLCJwbGF5TmFtZSI6IuiCieiSsuWboiIsImRlc2NyaXB0aW9uIjoi546w5Luj5a2m6ICFTWFyY3Vz56CU56m25Y+k5YW46aOO5pyI5ZCN6JGX5pe25oSP5aSW56m/6LaK6Iez5piO5Luj5oiY5Zy677yM5b2T5Zy66KKr6Iux5ae/6aOS54i955qE5aWz5bCG5Yab5by66KGM5ouW5Zue6JCl5biQ5Lit5Yml5YWJ6ZOg55Sy6aqR5LmY5b6B5pyN44CC6L+b5Z+O5ZCO5LuW5Lqy55y855uu55256aOO5rWB5omN5a2Q5pyq5aSu55Sf55So6K+X6K+N5bCG5Lq65aa76Imz6Iqz5Yu+5pCt5LiK5omL44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6IKJ6JKy5Zui44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysNumbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJyb3VwdXR1IiwiZGVzYyI6IueOsOS7o+WtpuiAhU1hcmN1c+eglOeptuWPpOWFuOmjjuaciOWQjeiRl+aXtuaEj+Wkluepv+i2iuiHs+aYjuS7o+aImOWcuu+8jOW9k+Wcuuiiq+iLseWnv+mjkueIveeahOWls+WwhuWGm+W8uuihjOaLluWbnuiQpeW4kOS4reWJpeWFiemToOeUsumqkeS5mOW+geacjeOAgui/m+WfjuWQjuS7luS6suecvOebrueduemjjua1geaJjeWtkOacquWkrueUn+eUqOivl+ivjeWwhuS6uuWmu+iJs+iKs+WLvuaQreS4iuaJi+OAgiIsImFuY2hvciI6IiIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9pcC9pZC8xMDQ5L3BsYXlsZXRfY292ZXJfNDBhMTllNWZlMzgyZjUxZi5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2doL2t3LzEwNDkvcGxheWxldF9jb3Zlcl9iN2IxZDJmMjdkYzE0ZjA3LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MSwxMjg1MiwxMjg1N10sInRhZ05hbWVzIjpbIuWOn+WImyIsIum7hOaenCIsIuWPpOS7oyJdLCJ0YWdTbHVncyI6WyJZQyIsImh1YW5nZ3VvIiwiZ3VkYWkiXSwidG90YWxFcGlzb2RlIjo2LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNTIsImhlYXRWYWx1ZSI6MTY2NDcsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxMywiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0Njo1OS45OTFaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoyMS4xNjhaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuiCieiSsuWbou+8iOWFqDbpm4bvvIkiLCJrZXl3b3JsZCI6WyLogonokrLlm6IiLCLmmI7ku6Pnqb/otooiLCLpo47mnIjmg4XoibIiLCLogonokrLlm6LlrozmlbTniYgiLCLlnKjnur/nnIsiLCJNYXJjdXMiLCLmnKrlpK7nlJ8iLCLoibPoirMiXSwiZGVzY3JpcHRpb24iOiLnjrDku6PlrabogIVNYXJjdXPnoJTnqbblj6Tlhbjpo47mnIjlkI3okZfml7bmhI/lpJbnqb/otoroh7PmmI7ku6PmiJjlnLrvvIzlvZPlnLrooqvoi7Hlp7/po5LniL3nmoTlpbPlsIblhpvlvLrooYzmi5blm57okKXluJDkuK3liaXlhYnpk6DnlLLpqpHkuZjlvoHmnI3jgILov5vln47lkI7ku5bkurLnnLznm67nnbnpo47mtYHmiY3lrZDmnKrlpK7nlJ/nlKjor5for43lsIbkurrlprvoibPoirPli77mkK3kuIrmiYvjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrogonokrLlm6LjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw26ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NjgyLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6ZmFsc2UsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDFUMDQ6NDk6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMC0xNlQwMzozNDoxNloiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMTZUMTI6MDA6MzRaIiwidGhlbWVJZHMiOlsxMjY4OF0sInRoZW1lTmFtZXMiOlsi5ryr5YmnIl0sInRoZW1lU2x1Z3MiOlsibWFuanUiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNV0sInRpdGxlIjoi5rWu5bGg56We5aWz5rKJ5rKm5b2V77yI5YWoM+mbhu+8iSIsInBsYXlOYW1lIjoi5rWu5bGg56We5aWz5rKJ5rKm5b2VIiwiZGVzY3JpcHRpb24iOiLljYPnmb7lsYLluoTkuKXnmoTmta7lsaDlrp3loZTkuYvlt4XvvIzpo47pn7XnirnlrZjnmoTnhp/lpbPnpZ7lpbPku6XlgL7ln47nu53kuJbkuYvlp7/lgrLnhLbplYflrojku5nnlYzvvIzljbTlnKjlpJzlpJznh4PotbfnmoToooXoooXpppnng5vkuI7lj6TogIHnp5jmnK/kuK3vvIzkuIDmraXmraXlpLHlrojlnaDlhaXmg4XmrLLnmoTml4vmtqHjgILlpbnog4zotJ/nnYDlpKflpbPkuLvnmoTlsIrotLXlkI3lj7fvvIzni6zoh6rmib/lj5fnnYDku5nprZTkuqTnu4fnmoTmrovphbfogIPpqozjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmta7lsaDnpZ7lpbPmsonmsqblvZXjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwz6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImZ1dHVzaGUiLCJkZXNjIjoi5Y2D55m+5bGC5bqE5Lil55qE5rWu5bGg5a6d5aGU5LmL5beF77yM6aOO6Z+154q55a2Y55qE54af5aWz56We5aWz5Lul5YC+5Z+O57ud5LiW5LmL5ae/5YKy54S26ZWH5a6I5LuZ55WM77yM5Y205Zyo5aSc5aSc54eD6LW355qE6KKF6KKF6aaZ54Ob5LiO5Y+k6ICB56eY5pyv5Lit77yM5LiA5q2l5q2l5aSx5a6I5Z2g5YWl5oOF5qyy55qE5peL5rah44CC5aW56IOM6LSf552A5aSn5aWz5Li755qE5bCK6LS15ZCN5Y+377yM54us6Ieq5om/5Y+X552A5LuZ6a2U5Lqk57uH55qE5q6L6YW36ICD6aqM44CCIiwiYW5jaG9yIjoi6buE5p6c5a6Y5pa5IiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L2NmMjMwNzA1L2ltYWdlLzF3cS8yYnUvbXYvMTNrL2RhOTZhOWM0YmMzOTM5ZTI5MDUwODhiYzhmZDk1MDA3LndlYnAiLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L2NmMjMwNzA1L2ltYWdlLzF3cS8yYnUvbXYvMTNrL2RhOTZhOWM0YmMzOTM5ZTI5MDUwODhiYzhmZDk1MDA3LndlYnAiLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTQsMTI4NTldLCJ0YWdOYW1lcyI6WyLku5nkvqAiLCLoibPpgYciXSwidGFnU2x1Z3MiOlsieGlhbnhpYSIsInlhbnl1Il0sInRvdGFsRXBpc29kZSI6MywidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTM0LCJoZWF0VmFsdWUiOjE2NTU5LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTUsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDg6MjEuOTExWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDZUMjM6MDA6MTMuNzE2WiIsInNlb0luZm8iOnsidGl0bGUiOiLmta7lsaDnpZ7lpbPmsonmsqblvZXvvIjlhagz6ZuG77yJIiwia2V5d29ybGQiOlsi5rWu5bGg56We5aWz5rKJ5rKm5b2VIiwi5LuZ5L6g56We5aWzIiwi5qyy5rW35rKJ5rKmIiwi5rWu5bGg56We5aWz5rKJ5rKm5b2V5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5rWu5bGg56We5aWzIiwi5LuZ55WMIl0sImRlc2NyaXB0aW9uIjoi5Y2D55m+5bGC5bqE5Lil55qE5rWu5bGg5a6d5aGU5LmL5beF77yM6aOO6Z+154q55a2Y55qE54af5aWz56We5aWz5Lul5YC+5Z+O57ud5LiW5LmL5ae/5YKy54S26ZWH5a6I5LuZ55WM77yM5Y205Zyo5aSc5aSc54eD6LW355qE6KKF6KKF6aaZ54Ob5LiO5Y+k6ICB56eY5pyv5Lit77yM5LiA5q2l5q2l5aSx5a6I5Z2g5YWl5oOF5qyy55qE5peL5rah44CC5aW56IOM6LSf552A5aSn5aWz5Li755qE5bCK6LS15ZCN5Y+377yM54us6Ieq5om/5Y+X552A5LuZ6a2U5Lqk57uH55qE5q6L6YW36ICD6aqM44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5rWu5bGg56We5aWz5rKJ5rKm5b2V44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDUzOSwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6dHJ1ZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wMlQyMTowMzozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTA5LTI5VDIxOjAwOjAwWiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMC0wMVQwNzo1NzoxN1oiLCJ0aGVtZUlkcyI6WzEyNjgxLDEyNjg4XSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciLCLmvKvliaciXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiLCJtYW5qdSJdLCJjYXRlZ29yeUlkcyI6WzExMTAyXSwidGl0bGUiOiLpoobkuLvnmoTpqa/pvpnml6XorrDvvIjlhagxMOmbhu+8iSIsInBsYXlOYW1lIjoi6aKG5Li755qE6amv6b6Z5pel6K6wIiwiZGVzY3JpcHRpb24iOiLnjrDku6PnpL7nlZzpmYjpgLjmhI/lpJbnqb/otormiJDovrnlooPotKvnmKDlsI/poobkuLvvvIzlvIDlsYDkvr/pmLTlt67pmLPplJnmlZHkuIvkuoblraTlgrLnmoTpvpnmr43kuI7lsIrotLXnmoTnsr7ngbXlhazkuLvjgILku5blh63lgJ/ohJHmtbfkuK3pooblhYjlvILkuJbnmoTnjrDku6PmmbrmhaflpKflipvlj5HlsZXpooblnLDjgIHmlLbmnI3lkITot6/kuI3mnI3nmoTlvILml4/lir/lipvjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrpoobkuLvnmoTpqa/pvpnml6XorrDjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJsaW5nemh1IiwiZGVzYyI6IueOsOS7o+ekvueVnOmZiOmAuOaEj+Wkluepv+i2iuaIkOi+ueWig+i0q+eYoOWwj+mihuS4u++8jOW8gOWxgOS+v+mYtOW3rumYs+mUmeaVkeS4i+S6huWtpOWCsueahOm+meavjeS4juWwiui0teeahOeyvueBteWFrOS4u+OAguS7luWHreWAn+iEkea1t+S4remihuWFiOW8guS4lueahOeOsOS7o+aZuuaFp+Wkp+WKm+WPkeWxlemihuWcsOOAgeaUtuacjeWQhOi3r+S4jeacjeeahOW8guaXj+WKv+WKm+OAgiIsImFuY2hvciI6IuWOn+WImyIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS90bC9yNC8xMDQ5L3BsYXlsZXRfY292ZXJfNzE5NDE3OGNjZjVlN2FjMy5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2xoL3I5LzEwNDkvcGxheWxldF9jb3Zlcl8yMjg2MzA0NTk1NWE4MmNkLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MSwxMjg1MiwxMjg1N10sInRhZ05hbWVzIjpbIuWOn+WImyIsIum7hOaenCIsIuWPpOS7oyJdLCJ0YWdTbHVncyI6WyJZQyIsImh1YW5nZ3VvIiwiZ3VkYWkiXSwidG90YWxFcGlzb2RlIjoxMCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTUwLCJoZWF0VmFsdWUiOjE2MjkxLCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTUsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDY6MzkuNzQ4WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MjEuNzk2WiIsInNlb0luZm8iOnsidGl0bGUiOiLpoobkuLvnmoTpqa/pvpnml6XorrDvvIjlhagxMOmbhu+8iSIsImtleXdvcmxkIjpbIumihuS4u+eahOmpr+m+meaXpeiusCIsIuW8gueVjOepv+i2iiIsIumihuWcsOW0m+i1tyIsIumihuS4u+eahOmpr+m+meaXpeiusOWujOaVtOeJiCIsIuWcqOe6v+eciyIsIumZiOmAuCIsIum+meavjSIsIueyvueBteWFrOS4uyJdLCJkZXNjcmlwdGlvbiI6IueOsOS7o+ekvueVnOmZiOmAuOaEj+Wkluepv+i2iuaIkOi+ueWig+i0q+eYoOWwj+mihuS4u++8jOW8gOWxgOS+v+mYtOW3rumYs+mUmeaVkeS4i+S6huWtpOWCsueahOm+meavjeS4juWwiui0teeahOeyvueBteWFrOS4u+OAguS7luWHreWAn+iEkea1t+S4remihuWFiOW8guS4lueahOeOsOS7o+aZuuaFp+Wkp+WKm+WPkeWxlemihuWcsOOAgeaUtuacjeWQhOi3r+S4jeacjeeahOW8guaXj+WKv+WKm+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiumihuS4u+eahOmpr+m+meaXpeiusOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19XX0sImhhc2giOmZhbHNlLCJtc2ciOiJzdWNjZXNzIiwidGltZSI6IjIwMjYtMTEtMDdUMDQ6MTM6NDYuNTU4WiIsInRpcCI6IuaIkOWKnyJ9","status":200,"url":"https://webhgbapi.mfcg.me/api/app/playlet/guess-like/list?playletId=14809&pageNum=1&pageSize=12"},"revalidate":60,"tags":["playlet-guess-like","playlet-guess-like-14809"]} \ No newline at end of file diff --git a/.next-dev/dev/cache/fetch-cache/6672e8ff20d85c8bafcca0ff125785e2c186b2420196367ec1652d297a20435a b/.next-dev/dev/cache/fetch-cache/6672e8ff20d85c8bafcca0ff125785e2c186b2420196367ec1652d297a20435a new file mode 100644 index 0000000..9054d87 --- /dev/null +++ b/.next-dev/dev/cache/fetch-cache/6672e8ff20d85c8bafcca0ff125785e2c186b2420196367ec1652d297a20435a @@ -0,0 +1 @@ +{"kind":"FETCH","data":{"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"Content-Disposition,Refresh-Authorization","connection":"keep-alive","content-encoding":"gzip","content-type":"application/json; charset=utf-8","date":"Sat, 07 Nov 2026 04:13:32 GMT","server":"nginx/1.24.0 (Ubuntu)","transfer-encoding":"chunked"},"body":"eyJjb2RlIjoyMDAsImRhdGEiOnsibmV3QWRkcmVzc0luZm8iOnsibmV3VXJsQWRkciI6Imh0dHBzOi8vc2h1Z3VvZGoxLmNvbS8iLCJuZXdVcmxBZGRyMSI6Imh0dHBzOi8vc2h1Z3VvZGoyLmNvbS8iLCJuZXdVcmxBZGRyMiI6Imh0dHBzOi8vc2h1Z3VvZGozLmNvbS8iLCJmb3JldmVyVXJsQWRkciI6Imh0dHBzOi8vc2h1Z3VvZGouY29tIiwiZ21haWxBZGRyIjoiaHR0cHM6Ly9jaGVuZ3JlbnZpZGVvQHByb3Rvbi5tZSIsInRnR3JvdXAiOiJodHRwczovL3QubWUvU2h1R3VvQUkwMSIsInRlbGVncmFtIjoiIiwiY3VzdG9tZXJTZXJ2aWNlSG9zdCI6IiIsInR3aXR0ZXJBZGRyIjoiaHR0cHM6Ly94LmNvbS9ZYXNlZW5BbGlLazEiLCJwZGZBZGRyIjoiIiwiYXBwQWRkciI6Imh0dHBzOi8vZDMwZHh3NHYzYXZlZGouY2xvdWRmcm9udC5uZXQvP2RjPTF0QXBHZURoIiwib2ZmaWNpYWxBcHBBZGRyIjoiaHR0cHM6Ly9kMzBkeHc0djNhdmVkai5jbG91ZGZyb250Lm5ldC8/ZGM9MXRBcEdlRGgifSwiY29uZmlnIjp7InBkZkFkZHIiOiIiLCJuZXdVcmxBZGRyIjoiaHR0cHM6Ly9zaHVndW9kajEuY29tLyIsIm5ld1VybEFkZHIxIjoiaHR0cHM6Ly9zaHVndW9kajIuY29tLyIsIm5ld1VybEFkZHIyIjoiaHR0cHM6Ly9zaHVndW9kajMuY29tLyIsImZvcmV2ZXJVcmxBZGRyIjoiaHR0cHM6Ly9zaHVndW9kai5jb20iLCJnbWFpbEFkZHIiOiJodHRwczovL2NoZW5ncmVudmlkZW9AcHJvdG9uLm1lIiwiYXBwQWRkciI6Imh0dHBzOi8vZDMwZHh3NHYzYXZlZGouY2xvdWRmcm9udC5uZXQvP2RjPTF0QXBHZURoIiwib2ZmaWNpYWxBcHBBZGRyIjoiaHR0cHM6Ly9kMzBkeHc0djNhdmVkai5jbG91ZGZyb250Lm5ldC8/ZGM9MXRBcEdlRGgiLCJ3ZWlDaGFydCI6IiIsInFxIjoiIiwidGdHcm91cCI6Imh0dHBzOi8vdC5tZS9TaHVHdW9BSTAxIiwicG90YW9Hcm91cCI6IiIsImdpdEFkZHIiOiIiLCJ0d2l0dGVyQWRkciI6Imh0dHBzOi8veC5jb20vWWFzZWVuQWxpS2sxIiwidGVsZWdyYW0iOiIiLCJ0ZWxlZ3JhbUFkZCI6Imh0dHBzOi8vdC5tZS9TaHVHdW9BSTAxIiwidHJhbnNsYXRpb25BZGRyIjoiaHR0cHM6Ly9kaHAuZm0/ZGM9bWRmZmYiLCJpbWdDZG4iOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vIiwidHNDZG4iOiJodHRwczovL3dlYmF0cy5ybGtmdXMuY24vIiwiaW1nQXBwVXNDZG4iOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0LyIsIm1lZGlhQXBwVXNDZG4iOiJodHRwczovL2R5dW01M2hyZTQzbmouY2xvdWRmcm9udC5uZXQvIiwid2ViVGl0bGUiOiLnhp/mnpznn63liaflrpjnvZEgLSDng63pl6hBSeaIkOS6uuefreWJp+S4jum7hOaenOeyvuWTgUFJ5oiQ5Lq655+t5Ymn5ZCI6ZuGIiwid2ViS2V5d29ybGQiOlsi54af5p6c55+t5YmnIiwi6buE5p6c55+t5YmnIiwi6buE5p6cIiwiQUnmiJDkurrnn63liaciLCLnsr7lk4Hnn63liaciLCLnn63liadBUFAiLCLpu4TosYbnn63liaciLCLnhp/mnpzlrpjnvZEiLCLnhp/mnpxBUFDkuIvovb0iLCJBSeaIkOS6uuefreWJp+ingueci+e9keermSIsIkFJ5oiQ5Lq655+t5YmnYXBw5LiL6L29IiwiQUnmiJDkurrnn63liaflnKjnur/nnIsiXSwid2ViRGVzY3JpcHRpb24iOiLnhp/mnpznn63liafkvZzkuLrpooblhYjnmoRBSeaIkOS6uuefreWJp+S4jueyvuWTgeefreinhumikee7vOWQiOW5s+WPsO+8jOaxh+mbhuWFqOe9keWOn+WIm+mrmOiDvUlQ5LiO5Y+N6L2s54i95Ymn44CC56uZ5YaF54us5a6254Ot5pKt44CK6aOO5Y2O56We5aWz5b2V44CL44CK55C85piO56We5aWz5b2V44CL44CK5q+N5LiK5pS755Wl44CL44CK5LuZ5a2Q55qE5L+u6KGM44CL44CK5p6B5ZOB5a625LiB44CL562J5aSa6aKY5p2Q5Yqb5L2c77yM5ra155uW5LuZ5L6g5aWH5bm744CB6YO95biC5Lmx5Lym44CB6IGM5Zy65LiO56m/6LaK44CC5YWo56uZ55S76LSo6LaF5riF5peg5Yig5YeP44CB5q+P5pel5pu05paw5pyA5paw6ZuG77yM5pSv5oyB572R6aG15Y2z54K55Y2z5pKt5LiO5a6Y5pa5QVBQ5o6M5LiK6KeC5b2x77yM5byA5ZCv5p6B6Ie05rKJ5rW455qE6KeG5ZCs55ub5a6044CCIiwid2ViU2l0ZU5hbWUiOiLnhp/mnpznn63liaciLCJ3ZWJBZGRyIjoiaHR0cHM6Ly9zaHVndW9kai5jb20iLCJkaE5ld1VybEFkZHIxIjoiaHR0cHM6Ly9kM2c4aWtwZXF5b3ptby5jbG91ZGZyb250Lm5ldCIsImRoTmV3VXJsQWRkcjIiOiJodHRwczovL2QxMmwyeTFwejBqdThsLmNsb3VkZnJvbnQubmV0IiwiZGhOZXdVcmxBZGRyMyI6Imh0dHBzOi8vZDN0OTNkcmI4Zjlqd2ouY2xvdWRmcm9udC5uZXQiLCJmcmVlVlBOIjoiIiwidXNlSW5nQWRkcmVzcyI6WyJodHRwczovL2lwdGx6eWcuY29tIiwiaHR0cHM6Ly9hdHNldHFoLmNvbSJdLCJhZHZpdGllc1RvcGljTnVtIjoyLCJkaFRpdGxlIjoi54af5p6c55+t5Ymn5a+86IiqIC0g5pyA5paw5Y+R5biD6aG1IiwiZGhLZXl3b3JsZCI6WyLnhp/mnpznn63liaflr7zoiKoiLCLnhp/mnpznn63liafmnIDmlrDlnLDlnYAiLCLnhp/mnpznn63liaflpIfnlKjnur/ot68iLCLnhp/mnpznn63liaflj5HluIPpobUiLCLnhp/mnpznn63liadUZWxlZ3JhbSIsIueGn+aenOefreWJp1R3aXR0ZXIiLCLpmLLlpLHogZTlj5HluIPnq5kiLCLlpJrnur/ot6/mtYvpgJ/lr7zoiKoiLCLnhp/mnpznn63liaflrpjnvZHlhaXlj6MiXSwiZGhEZXNjcmlwdGlvbiI6IueGn+aenOefreWJp+WFqOe9keWumOaWueWvvOiIquWPkeW4g+mhte+8jOWRiuWIq+i/t+i3r+S4juWNoemhv++8geWunuaXtuWQjOatpeWFqOermeacgOaWsOWkh+eUqOWfn+WQjeOAgUNETuaegemAn+iKgueCueS4juWkmue6v+i3r+WFpeWPo++8jOaZuuiDveWIhua1geS/nemanOenkumAn+WKoOi9veOAguWQjOaXtuaPkOS+m+WumOaWuVRlbGVncmFt5Lqk5rWB576k44CBWO+8iFR3aXR0ZXLvvInnpL7lqpLkuI7ni6zlrrZBUFDlrpjmlrnkuIvovb3nm7Tovr7pgJrpgZPvvIzpgYfliLDorr/pl67pl67popjkuIDplK7liIfmjaLvvIzliqnkvaDpmo/ml7bpmo/lnLDnlYXpgJrml6DpmLvnm7Tovr7lpKfniYfnjrDlnLrjgIIiLCJkaFNpdGVOYW1lIjoi54af5p6c55+t5Ymn5a6Y572R5YWl5Y+jIiwiYWN0cmVzc0JhY2tHcm91bmQiOiIiLCJ3YXRlcm1hcmtJbWFnZSI6InYzL2ltYWdlLzhpL3d3LzEwNDkv5pyA5paw5Z+f5ZCNLnBuZyIsImN1c3RvbWVyU2VydmljZUhvc3QiOiIiLCJjaGFubmVsQ29kZSI6InNnd2ViIiwiZW5hYmxlSDI2NSI6ZmFsc2V9LCJhZHZpdGlzZSI6eyJkaWFsb2dMaXN0IjpudWxsLCJob21lTGlzdCI6bnVsbCwidmlkZW9Ub3BMaXN0IjpbeyJpZCI6IjExMzgyMDAwMDMiLCJsb2NhdGlvbiI6MywidGl0bGUiOiLlhajlm73nuqbngq4iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvYjQvMXZiLzJxMi8xbi81YzZhOTdkY2VjYWNlZTA1ZTJkYjdiNDRiOGZiMDgwYi5naWYiLCJsaW5rIjoiaHR0cHM6Ly95azZlYjlxLnRvcDo0NTgyIn0seyJpZCI6IjExMzg3MDAwMDMiLCJsb2NhdGlvbiI6MywidGl0bGUiOiLnqbrpmY3lq6nmqKEiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMXRwL3JoLzF6ci84NS9lMDc1Mjc2ZWRjNjNkODExZDNjNTcxMWYyZmQ5MGQwYi5HSUYiLCJsaW5rIjoiaHR0cHM6Ly8xNzAxLnV3eGJ5bC5jbi9sYW9wYW4vaW5kZXguaHRtbCJ9LHsiaWQiOiIxMTM4ODAwMDAzIiwibG9jYXRpb24iOjMsInRpdGxlIjoi5pil6I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzI0by8xei8xb2kvYjIvYjY4ZjI4ZDRkNGY4NTMyZjVmOWJmODM2MGYwNjVlMTIuR0lGIiwibGluayI6Imh0dHBzOi8vdTVxOHE1LnRvcCJ9LHsiaWQiOiIxMTM4MzAwMDAzIiwibG9jYXRpb24iOjMsInRpdGxlIjoi5pil6I2v6L+36I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzF5cy8yN2ovMTdiLzJobi8yNTRiYjgwZjgyMWVjYTcwMTk3MDg2YWY0ZjUxNTkyOS5naWYiLCJsaW5rIjoiaHR0cHM6Ly9wbXg1Z2hlLnRvcDoyOTIwIn1dLCJ2aWRlb0Rvd25MaXN0IjpbeyJpZCI6IjExMzgyMDAwMDMiLCJsb2NhdGlvbiI6MywidGl0bGUiOiLlhajlm73nuqbngq4iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvYjQvMXZiLzJxMi8xbi81YzZhOTdkY2VjYWNlZTA1ZTJkYjdiNDRiOGZiMDgwYi5naWYiLCJsaW5rIjoiaHR0cHM6Ly95azZlYjlxLnRvcDo0NTgyIn0seyJpZCI6IjExMzg3MDAwMDMiLCJsb2NhdGlvbiI6MywidGl0bGUiOiLnqbrpmY3lq6nmqKEiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMXRwL3JoLzF6ci84NS9lMDc1Mjc2ZWRjNjNkODExZDNjNTcxMWYyZmQ5MGQwYi5HSUYiLCJsaW5rIjoiaHR0cHM6Ly8xNzAxLnV3eGJ5bC5jbi9sYW9wYW4vaW5kZXguaHRtbCJ9LHsiaWQiOiIxMTM4ODAwMDAzIiwibG9jYXRpb24iOjMsInRpdGxlIjoi5pil6I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzI0by8xei8xb2kvYjIvYjY4ZjI4ZDRkNGY4NTMyZjVmOWJmODM2MGYwNjVlMTIuR0lGIiwibGluayI6Imh0dHBzOi8vdTVxOHE1LnRvcCJ9LHsiaWQiOiIxMTM4MzAwMDAzIiwibG9jYXRpb24iOjMsInRpdGxlIjoi5pil6I2v6L+36I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzF5cy8yN2ovMTdiLzJobi8yNTRiYjgwZjgyMWVjYTcwMTk3MDg2YWY0ZjUxNTkyOS5naWYiLCJsaW5rIjoiaHR0cHM6Ly9wbXg1Z2hlLnRvcDoyOTIwIn1dLCJob3RBcHBMaXN0IjpudWxsLCJuZXdBcHBMaXN0IjpudWxsLCJtdXN0QXBwTGlzdCI6bnVsbCwidGl0bGVBcHBMaXN0IjpudWxsLCJmcmllbmRMaXN0IjpudWxsLCJuaW5lR3JpZExpc3QiOlt7ImlkIjoiMTEzODIwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6IuWFqOWbvee6pueCriIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yM3UveDkvazcvMXAwLzdhZTY2ZjgwYTZiMzg5M2ZkNDE5OTkxYzNjZDk4MWI4LmdpZiIsImxpbmsiOiJodHRwczovL3lrNmViOXEudG9wOjQ1ODIifSx7ImlkIjoiMTEzODcwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6IuepuumZjeWrqeaooSIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8zMDcvMmh0LzJxMC8ya2ovZDFkYmExYWYxMTQ0NTE3ZjU3MjQ0NGJlNWRhN2E4MGMuR0lGIiwibGluayI6Imh0dHBzOi8vMTcwMS51d3hieWwuY24vbGFvcGFuL2luZGV4Lmh0bWwifSx7ImlkIjoiMTEzODgwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6IuaYpeiNryIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yOG4vMjZyLzJucS9pMS8xNjdhNWIzMWIwNzc2MzEzMWQ5MWMxOGI3MTI1NzAwMi5HSUYiLCJsaW5rIjoiaHR0cHM6Ly91NXE4cTUudG9wIn0seyJpZCI6IjExMzgzMDAwMDIiLCJsb2NhdGlvbiI6MiwidGl0bGUiOiLmmKXoja/ov7foja8iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjB0LzJweC96Ni8ybDUvMDUxZGE1MzYzYTU4YzVkYTE0ZjMyZWQyYTg5NWUxMDkuZ2lmIiwibGluayI6Imh0dHBzOi8vcG14NWdoZS50b3A6MjkyMCJ9LHsiaWQiOiIxMTYzODAwMDAyIiwibG9jYXRpb24iOjIsInRpdGxlIjoi5rW36KeS56S+5Yy6IiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzIwOC8ybDIvMXNtLzJwdS8wMjNiMmYyZGEyYzUxYWQ2MmJhZTViMjA0MTQ5YTZkNi53ZWJwIiwibGluayI6Imh0dHBzOi8vZDFtcDJvcWszMXAwZGEuY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM5MDAwMDAyIiwibG9jYXRpb24iOjIsInRpdGxlIjoi6buE5p6c55+t5YmnIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlL3VpLzM1NC9wOS9xeC81NTAxYzFkY2VmZmY4NzFhZjc4YzBkYmYzMmI3NWJlNC5qcGciLCJsaW5rIjoiaHR0cHM6Ly9kb3dyMnZyenIwZm9vLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzODkwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6IjkxZmFucyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yczkvMW1tLzJody8zM2ovMDIzMGUwNGVjNGU3ZDMxYWY3NTE0Y2VhMDQzZDM2ZGIud2VicCIsImxpbmsiOiJodHRwczovL2QxMjg5MGFwdHVsMWQwLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzODYwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6Ium7hOaenOemgea8qyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8xdWUvMnlyL245LzIwNS83NjJmZDY1ZmIzMTc2OGE3NmYxNjc0YzdlYTIyYjM1MS53ZWJwIiwibGluayI6Imh0dHBzOi8vZDI4NzFnZmIwazV0MWUuY2xvdWRmcm9udC5uZXQvZG93bmxvYWQvNS9oZ3MwMDAxIn0seyJpZCI6IjExMzg1MDAwMDIiLCJsb2NhdGlvbiI6MiwidGl0bGUiOiI1MeefreWJpyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yNzYvMjAyLzJqNy9nZy9mMDUzZmI1M2MyMjNlM2U4N2E0MGYyMzY4MDlhZjM5My53ZWJwIiwibGluayI6Imh0dHBzOi8vZDFhdnMwcG9yczg5ZmYuY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM4NDAwMDAyIiwibG9jYXRpb24iOjIsInRpdGxlIjoi57qi5p6c55+t5YmnIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzMxcS8yZDEvY20vNnkvZGJiNzM5MDY1NWMzNDRjNTQ4ZDc1NDFkMzIxMTNlNDgud2VicCIsImxpbmsiOiJodHRwczovL2QyODcxZ2ZiMGs1dDFlLmNsb3VkZnJvbnQubmV0L2Rvd25sb2FkLzQvaGdzMDAwMSJ9XSwidmlkZW9MaXN0IjpudWxsLCJzdG9wTGlzdCI6bnVsbCwiZm9yY2VkSnVtcExpc3QiOm51bGwsImFwcEluZm9BTGlzdCI6W3siaWQiOiIxMTM4MjAwMDEyIiwibG9jYXRpb24iOjEyLCJ0aXRsZSI6IuWFqOWbvee6pueCriIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yM3UveDkvazcvMXAwLzdhZTY2ZjgwYTZiMzg5M2ZkNDE5OTkxYzNjZDk4MWI4LmdpZiIsImxpbmsiOiJodHRwczovL3lrNmViOXEudG9wOjQ1ODIifSx7ImlkIjoiMTEzODcwMDAxMiIsImxvY2F0aW9uIjoxMiwidGl0bGUiOiLnqbrpmY3lq6nmqKEiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMzA3LzJodC8ycTAvMmtqL2QxZGJhMWFmMTE0NDUxN2Y1NzI0NDRiZTVkYTdhODBjLkdJRiIsImxpbmsiOiJodHRwczovLzE3MDEudXd4YnlsLmNuL2xhb3Bhbi9pbmRleC5odG1sIn0seyJpZCI6IjExMzg4MDAwMTIiLCJsb2NhdGlvbiI6MTIsInRpdGxlIjoi5pil6I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzI4bi8yNnIvMm5xL2kxLzE2N2E1YjMxYjA3NzYzMTMxZDkxYzE4YjcxMjU3MDAyLkdJRiIsImxpbmsiOiJodHRwczovL3U1cThxNS50b3AifSx7ImlkIjoiMTEzODMwMDAxMiIsImxvY2F0aW9uIjoxMiwidGl0bGUiOiLmmKXoja/ov7foja8iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjB0LzJweC96Ni8ybDUvMDUxZGE1MzYzYTU4YzVkYTE0ZjMyZWQyYTg5NWUxMDkuZ2lmIiwibGluayI6Imh0dHBzOi8vcG14NWdoZS50b3A6MjkyMCJ9LHsiaWQiOiIxMTYzODAwMDEyIiwibG9jYXRpb24iOjEyLCJ0aXRsZSI6Iua1t+inkuekvuWMuiIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yMDgvMmwyLzFzbS8ycHUvMDIzYjJmMmRhMmM1MWFkNjJiYWU1YjIwNDE0OWE2ZDYud2VicCIsImxpbmsiOiJodHRwczovL2QxbXAyb3FrMzFwMGRhLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzOTAwMDAxMiIsImxvY2F0aW9uIjoxMiwidGl0bGUiOiLpu4Tmnpznn63liaciLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvdWkvMzU0L3A5L3F4LzU1MDFjMWRjZWZmZjg3MWFmNzhjMGRiZjMyYjc1YmU0LmpwZyIsImxpbmsiOiJodHRwczovL2Rvd3IydnJ6cjBmb28uY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM4OTAwMDEyIiwibG9jYXRpb24iOjEyLCJ0aXRsZSI6IjkxZmFucyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yczkvMW1tLzJody8zM2ovMDIzMGUwNGVjNGU3ZDMxYWY3NTE0Y2VhMDQzZDM2ZGIud2VicCIsImxpbmsiOiJodHRwczovL2QxMjg5MGFwdHVsMWQwLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzODYwMDAxMiIsImxvY2F0aW9uIjoxMiwidGl0bGUiOiLpu4TmnpznpoHmvKsiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMXVlLzJ5ci9uOS8yMDUvNzYyZmQ2NWZiMzE3NjhhNzZmMTY3NGM3ZWEyMmIzNTEud2VicCIsImxpbmsiOiJodHRwczovL2QyODcxZ2ZiMGs1dDFlLmNsb3VkZnJvbnQubmV0L2Rvd25sb2FkLzUvaGdzMDAwMSJ9LHsiaWQiOiIxMTM4NTAwMDEyIiwibG9jYXRpb24iOjEyLCJ0aXRsZSI6IjUx55+t5YmnIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzI3Ni8yMDIvMmo3L2dnL2YwNTNmYjUzYzIyM2UzZTg3YTQwZjIzNjgwOWFmMzkzLndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMWF2czBwb3JzODlmZi5jbG91ZGZyb250Lm5ldD9kYz1oZ3MwMDAxIn0seyJpZCI6IjExMzg0MDAwMTIiLCJsb2NhdGlvbiI6MTIsInRpdGxlIjoi57qi5p6c55+t5YmnIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzMxcS8yZDEvY20vNnkvZGJiNzM5MDY1NWMzNDRjNTQ4ZDc1NDFkMzIxMTNlNDgud2VicCIsImxpbmsiOiJodHRwczovL2QyODcxZ2ZiMGs1dDFlLmNsb3VkZnJvbnQubmV0L2Rvd25sb2FkLzQvaGdzMDAwMSJ9XSwiYXBwSW5mb0JMaXN0IjpbeyJpZCI6IjExMzgyMDAwMTMiLCJsb2NhdGlvbiI6MTMsInRpdGxlIjoi5YWo5Zu957qm54KuIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzIzdS94OS9rNy8xcDAvN2FlNjZmODBhNmIzODkzZmQ0MTk5OTFjM2NkOTgxYjguZ2lmIiwibGluayI6Imh0dHBzOi8veWs2ZWI5cS50b3A6NDU4MiJ9LHsiaWQiOiIxMTM4NzAwMDEzIiwibG9jYXRpb24iOjEzLCJ0aXRsZSI6IuepuumZjeWrqeaooSIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8zMDcvMmh0LzJxMC8ya2ovZDFkYmExYWYxMTQ0NTE3ZjU3MjQ0NGJlNWRhN2E4MGMuR0lGIiwibGluayI6Imh0dHBzOi8vMTcwMS51d3hieWwuY24vbGFvcGFuL2luZGV4Lmh0bWwifSx7ImlkIjoiMTEzODgwMDAxMyIsImxvY2F0aW9uIjoxMywidGl0bGUiOiLmmKXoja8iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjhuLzI2ci8ybnEvaTEvMTY3YTViMzFiMDc3NjMxMzFkOTFjMThiNzEyNTcwMDIuR0lGIiwibGluayI6Imh0dHBzOi8vdTVxOHE1LnRvcCJ9LHsiaWQiOiIxMTM4MzAwMDEzIiwibG9jYXRpb24iOjEzLCJ0aXRsZSI6IuaYpeiNr+i/t+iNryIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yMHQvMnB4L3o2LzJsNS8wNTFkYTUzNjNhNThjNWRhMTRmMzJlZDJhODk1ZTEwOS5naWYiLCJsaW5rIjoiaHR0cHM6Ly9wbXg1Z2hlLnRvcDoyOTIwIn0seyJpZCI6IjExNjM4MDAwMTMiLCJsb2NhdGlvbiI6MTMsInRpdGxlIjoi5rW36KeS56S+5Yy6IiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzIwOC8ybDIvMXNtLzJwdS8wMjNiMmYyZGEyYzUxYWQ2MmJhZTViMjA0MTQ5YTZkNi53ZWJwIiwibGluayI6Imh0dHBzOi8vZDFtcDJvcWszMXAwZGEuY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM5MDAwMDEzIiwibG9jYXRpb24iOjEzLCJ0aXRsZSI6Ium7hOaenOefreWJpyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS91aS8zNTQvcDkvcXgvNTUwMWMxZGNlZmZmODcxYWY3OGMwZGJmMzJiNzViZTQuanBnIiwibGluayI6Imh0dHBzOi8vZG93cjJ2cnpyMGZvby5jbG91ZGZyb250Lm5ldD9kYz1oZ3MwMDAxIn0seyJpZCI6IjExMzg5MDAwMTMiLCJsb2NhdGlvbiI6MTMsInRpdGxlIjoiOTFmYW5zIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzJzOS8xbW0vMmh3LzMzai8wMjMwZTA0ZWM0ZTdkMzFhZjc1MTRjZWEwNDNkMzZkYi53ZWJwIiwibGluayI6Imh0dHBzOi8vZDEyODkwYXB0dWwxZDAuY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM4NjAwMDEzIiwibG9jYXRpb24iOjEzLCJ0aXRsZSI6Ium7hOaenOemgea8qyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8xdWUvMnlyL245LzIwNS83NjJmZDY1ZmIzMTc2OGE3NmYxNjc0YzdlYTIyYjM1MS53ZWJwIiwibGluayI6Imh0dHBzOi8vZDI4NzFnZmIwazV0MWUuY2xvdWRmcm9udC5uZXQvZG93bmxvYWQvNS9oZ3MwMDAxIn0seyJpZCI6IjExMzg1MDAwMTMiLCJsb2NhdGlvbiI6MTMsInRpdGxlIjoiNTHnn63liaciLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjc2LzIwMi8yajcvZ2cvZjA1M2ZiNTNjMjIzZTNlODdhNDBmMjM2ODA5YWYzOTMud2VicCIsImxpbmsiOiJodHRwczovL2QxYXZzMHBvcnM4OWZmLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzODQwMDAxMyIsImxvY2F0aW9uIjoxMywidGl0bGUiOiLnuqLmnpznn63liaciLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMzFxLzJkMS9jbS82eS9kYmI3MzkwNjU1YzM0NGM1NDhkNzU0MWQzMjExM2U0OC53ZWJwIiwibGluayI6Imh0dHBzOi8vZDI4NzFnZmIwazV0MWUuY2xvdWRmcm9udC5uZXQvZG93bmxvYWQvNC9oZ3MwMDAxIn1dfSwic2VvSW5mbyI6eyJ0aXRsZSI6IueGn+aenOefreWJp+WumOe9kSAtIOeDremXqEFJ5oiQ5Lq655+t5Ymn5LiO6buE5p6c57K+5ZOBQUnmiJDkurrnn63liaflkIjpm4YiLCJrZXl3b3JkcyI6WyLnhp/mnpznn63liaciLCLpu4Tmnpznn63liaciLCLpu4TmnpwiLCJBSeaIkOS6uuefreWJpyIsIueyvuWTgeefreWJpyIsIuefreWJp0FQUCIsIum7hOixhuefreWJpyIsIueGn+aenOWumOe9kSIsIueGn+aenEFQUOS4i+i9vSIsIkFJ5oiQ5Lq655+t5Ymn6KeC55yL572R56uZIiwiQUnmiJDkurrnn63liadhcHDkuIvovb0iLCJBSeaIkOS6uuefreWJp+WcqOe6v+eciyJdLCJkZXNjcmlwdGlvbiI6IueGn+aenOefreWJp+S9nOS4uumihuWFiOeahEFJ5oiQ5Lq655+t5Ymn5LiO57K+5ZOB55+t6KeG6aKR57u85ZCI5bmz5Y+w77yM5rGH6ZuG5YWo572R5Y6f5Yib6auY6IO9SVDkuI7lj43ovazniL3liafjgILnq5nlhoXni6zlrrbng63mkq3jgIrpo47ljY7npZ7lpbPlvZXjgIvjgIrnkLzmmI7npZ7lpbPlvZXjgIvjgIrmr43kuIrmlLvnlaXjgIvjgIrku5nlrZDnmoTkv67ooYzjgIvjgIrmnoHlk4HlrrbkuIHjgIvnrYnlpJrpopjmnZDlipvkvZzvvIzmtrXnm5bku5nkvqDlpYflubvjgIHpg73luILkubHkvKbjgIHogYzlnLrkuI7nqb/otorjgILlhajnq5nnlLvotKjotoXmuIXml6DliKDlh4/jgIHmr4/ml6Xmm7TmlrDmnIDmlrDpm4bvvIzmlK/mjIHnvZHpobXljbPngrnljbPmkq3kuI7lrpjmlrlBUFDmjozkuIrop4LlvbHvvIzlvIDlkK/mnoHoh7TmsonmtbjnmoTop4blkKznm5vlrrTjgIIiLCJ3ZWJTaXRlTmFtZSI6IueGn+aenOefreWJpyIsImNhbm9uaWNhbFVybCI6Imh0dHBzOi8vc2h1Z3VvZGouY29tIn0sInNlb05hdkluZm8iOnsiZGhUaXRsZSI6IueGn+aenOefreWJp+WvvOiIqiAtIOacgOaWsOWPkeW4g+mhtSIsImRoS2V5d29ybGQiOlsi54af5p6c55+t5Ymn5a+86IiqIiwi54af5p6c55+t5Ymn5pyA5paw5Zyw5Z2AIiwi54af5p6c55+t5Ymn5aSH55So57q/6LevIiwi54af5p6c55+t5Ymn5Y+R5biD6aG1Iiwi54af5p6c55+t5YmnVGVsZWdyYW0iLCLnhp/mnpznn63liadUd2l0dGVyIiwi6Ziy5aSx6IGU5Y+R5biD56uZIiwi5aSa57q/6Lev5rWL6YCf5a+86IiqIiwi54af5p6c55+t5Ymn5a6Y572R5YWl5Y+jIl0sImRoRGVzY3JpcHRpb24iOiLnhp/mnpznn63liaflhajnvZHlrpjmlrnlr7zoiKrlj5HluIPpobXvvIzlkYrliKvov7fot6/kuI7ljaHpob/vvIHlrp7ml7blkIzmraXlhajnq5nmnIDmlrDlpIfnlKjln5/lkI3jgIFDRE7mnoHpgJ/oioLngrnkuI7lpJrnur/ot6/lhaXlj6PvvIzmmbrog73liIbmtYHkv53pmpznp5LpgJ/liqDovb3jgILlkIzml7bmj5DkvpvlrpjmlrlUZWxlZ3JhbeS6pOa1gee+pOOAgVjvvIhUd2l0dGVy77yJ56S+5aqS5LiO54us5a62QVBQ5a6Y5pa55LiL6L2955u06L6+6YCa6YGT77yM6YGH5Yiw6K6/6Zeu6Zeu6aKY5LiA6ZSu5YiH5o2i77yM5Yqp5L2g6ZqP5pe26ZqP5Zyw55WF6YCa5peg6Zi755u06L6+5aSn54mH546w5Zy644CCIiwiZGhTaXRlTmFtZSI6IueGn+aenOefreWJp+WumOe9keWFpeWPoyJ9LCJuYXZQYWdlTGlzdCI6W3sibGluZSI6MSwidXJsIjoiaHR0cHM6Ly9kM2c4aWtwZXF5b3ptby5jbG91ZGZyb250Lm5ldCJ9LHsibGluZSI6MiwidXJsIjoiaHR0cHM6Ly9kMTJsMnkxcHowanU4bC5jbG91ZGZyb250Lm5ldCJ9LHsibGluZSI6MywidXJsIjoiaHR0cHM6Ly9kM3Q5M2RyYjhmOWp3ai5jbG91ZGZyb250Lm5ldCJ9XX0sImhhc2giOmZhbHNlLCJtc2ciOiJzdWNjZXNzIiwidGltZSI6IjIwMjYtMTEtMDdUMDQ6MTM6MzIuODgzWiIsInRpcCI6IuaIkOWKnyJ9","status":200,"url":"https://webhgbapi.mfcg.me/api/app/config/info"},"revalidate":60,"tags":["app-config"]} \ No newline at end of file diff --git a/.next-dev/dev/cache/fetch-cache/66798302f41eabc5b47ed6ec443131e93e37bbc36f59772a679e4e121ae009d3 b/.next-dev/dev/cache/fetch-cache/66798302f41eabc5b47ed6ec443131e93e37bbc36f59772a679e4e121ae009d3 new file mode 100644 index 0000000..66f6426 --- /dev/null +++ b/.next-dev/dev/cache/fetch-cache/66798302f41eabc5b47ed6ec443131e93e37bbc36f59772a679e4e121ae009d3 @@ -0,0 +1 @@ +{"kind":"FETCH","data":{"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"Content-Disposition,Refresh-Authorization","connection":"keep-alive","content-encoding":"gzip","content-type":"application/json; charset=utf-8","date":"Sat, 07 Nov 2026 04:11:46 GMT","server":"nginx/1.24.0 (Ubuntu)","transfer-encoding":"chunked"},"body":"eyJjb2RlIjoyMDAsImRhdGEiOnsiaWQiOjE0NjcwLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wMVQyMDo0MTozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTEwLTEzVDAzOjI1OjM4WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wNFQxMjoxODozM1oiLCJ0aGVtZUlkcyI6WzEyNjg1XSwidGhlbWVOYW1lcyI6WyLpg73luIIiXSwidGhlbWVTbHVncyI6WyJkdXNoaSJdLCJjYXRlZ29yeUlkcyI6WzExMTA1LDExMTAxXSwidGl0bGUiOiLlrZjlnKjmhJ/vvJrpm7bvvIjlhag26ZuG77yJIiwicGxheU5hbWUiOiLlrZjlnKjmhJ/vvJrpm7YiLCJkZXNjcmlwdGlvbiI6IuWcqOWlouWNjua1ruWNjueahOeOsOS7o+WoseS5kOWciOiBjOWcuuiInuWPsOS4iu+8jOacieS4gOS9jeavq+aXoOWQjeawlOeahOi+uee8mOiJuuS6uu+8jOWFtuWtmOWcqOaEn+WgquensOmbtuOAgua3seWknOepuuaXt+eahOWKnuWFrOWupOWGhe+8jOaYj+aal+eahOmhtueBr+WwhuS4pOS6uueahOi6q+W9seaLieW+l+aegemVv++8jOiho+eJqea7keiQveeahOe7huW+ruWjsOWTjeS4juWOi+aKkeayiemHjeeahOWRvOWQuOWjsOWcqOepuuawlOS4reS6pOe7h+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWtmOWcqOaEn++8mumbtuOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDnpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiY3VuemFpZyIsImRlc2MiOiLlnKjlpaLljY7mta7ljY7nmoTnjrDku6PlqLHkuZDlnIjogYzlnLroiJ7lj7DkuIrvvIzmnInkuIDkvY3mr6vml6DlkI3msJTnmoTovrnnvJjoibrkurrvvIzlhbblrZjlnKjmhJ/loKrnp7Dpm7bjgILmt7HlpJznqbrml7fnmoTlip7lhazlrqTlhoXvvIzmmI/mmpfnmoTpobbnga/lsIbkuKTkurrnmoTouqvlvbHmi4nlvpfmnoHplb/vvIzooaPnianmu5HokL3nmoTnu4blvq7lo7Dlk43kuI7ljovmipHmsonph43nmoTlkbzlkLjlo7DlnKjnqbrmsJTkuK3kuqTnu4fjgIIiLCJhbmNob3IiOiLpu4TmnpzlrpjmlrkiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvMGgvaWgvMTA0OS9wbGF5bGV0X2NvdmVyXzJjNjAwM2U4YWNkNWZhZjYuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9xNy8yby8xMDQ5L3BsYXlsZXRfY292ZXJfMmM2MDAzZThhY2Q1ZmFmNi5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTYsMTI4NTVdLCJ0YWdOYW1lcyI6WyLogYzlnLrosIPmlZkiLCLpg73luIIiXSwidGFnU2x1Z3MiOlsiWkNUSiIsImR1c2hpIl0sInRvdGFsRXBpc29kZSI6OSwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6NDExLCJoZWF0VmFsdWUiOjQ2MDEwLCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTQsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDg6MTUuNjY2WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MDQuMzIyWiIsImlzTGlrZSI6MiwiaXNDb2xsZWN0IjoyLCJwbGF5bGV0Q2hhcHRlckluZm8iOlt7ImlkIjozMjE4OCwicGxheWxldElkIjoxNDY3MCwiY3VycmVudEVwaXNvZGUiOjEsInRpdGxlIjoiMSIsIm1kNSI6IiIsImhhc2giOiIyNDY4ZDdmYWQxNDIxNTViYTFiNmIwOTU4ZWEzZGEzZGEyNzEzMGI1IiwiaGVpZ2h0Ijo3MjAsIndpZHRoIjoxMjgwLCJyYXRpbyI6MS43Nzc3Nzc3Nzc3Nzc3Nzc3LCJ2aWRlb1VybCI6InYzL2sxMi9jOTJhL2QzZDkvYzUxYy81MDY3NDBjYThjZTY2NTllMWE2ZGNlN2U3MmRhZWVjMzEwNDkyMDI2MTEwNjIxMzUxMi5tM3U4IiwibWVkaWFTaXplIjo0ODM0MjM1MiwibWVkaWFUaW1lIjoyNzcsInBheVR5cGUiOjAsInNpbmdsZUNvaW5zIjowLCJjYW5XYXRjaCI6dHJ1ZSwibmVlZFVubG9jayI6ZmFsc2UsIm5lZWRWaXAiOmZhbHNlLCJjb3N0Q29pbnMiOjAsImJhbGFuY2UiOjAsInZpcFZhbGlkIjpmYWxzZSwiaXNVbmxvY2tlZCI6ZmFsc2V9LHsiaWQiOjMyMTg5LCJwbGF5bGV0SWQiOjE0NjcwLCJjdXJyZW50RXBpc29kZSI6MiwidGl0bGUiOiIyIiwibWQ1IjoiIiwiaGFzaCI6IjFiYmNiZmIyMjIxMjE5OWFjODM3MjRjZjUyZmQyYzc0YWE0ZjM3MDgiLCJoZWlnaHQiOjEwODAsIndpZHRoIjoxOTIwLCJyYXRpbyI6MS43Nzc3Nzc3Nzc3Nzc3Nzc3LCJ2aWRlb1VybCI6InYzL2sxMi9jOTJhL2QzZDkvYzUxYy81Zjc5NjZmY2VlNGJhZmY4ODFkZmM1YjBmNTUwNDA4NzEwNDkyMDI2MTEwNjIxMzUxNS5tM3U4IiwibWVkaWFTaXplIjo1ODc4MTA4OCwibWVkaWFUaW1lIjozMjAsInBheVR5cGUiOjAsInNpbmdsZUNvaW5zIjowLCJjYW5XYXRjaCI6dHJ1ZSwibmVlZFVubG9jayI6ZmFsc2UsIm5lZWRWaXAiOmZhbHNlLCJjb3N0Q29pbnMiOjAsImJhbGFuY2UiOjAsInZpcFZhbGlkIjpmYWxzZSwiaXNVbmxvY2tlZCI6ZmFsc2V9LHsiaWQiOjMyMTkwLCJwbGF5bGV0SWQiOjE0NjcwLCJjdXJyZW50RXBpc29kZSI6MywidGl0bGUiOiIzIiwibWQ1IjoiIiwiaGFzaCI6IjVlOWFkMTQ2NGE4ZjM5NDZjNGQ1ODQwZDBmY2ZkNmU5ZTRlOTEwYTciLCJoZWlnaHQiOjcyMCwid2lkdGgiOjEyODAsInJhdGlvIjoxLjc3Nzc3Nzc3Nzc3Nzc3NzcsInZpZGVvVXJsIjoiIiwibWVkaWFTaXplIjo1NTg4MzcxMiwibWVkaWFUaW1lIjozMTYsInBheVR5cGUiOjEsInNpbmdsZUNvaW5zIjoyMCwiY2FuV2F0Y2giOmZhbHNlLCJuZWVkVW5sb2NrIjp0cnVlLCJuZWVkVmlwIjpmYWxzZSwiY29zdENvaW5zIjoyMCwiYmFsYW5jZSI6MCwidmlwVmFsaWQiOmZhbHNlLCJpc1VubG9ja2VkIjpmYWxzZX0seyJpZCI6MzIxOTEsInBsYXlsZXRJZCI6MTQ2NzAsImN1cnJlbnRFcGlzb2RlIjo0LCJ0aXRsZSI6IjQiLCJtZDUiOiIiLCJoYXNoIjoiYjkyZTViYTIyMzhiY2U4NWUzYTljNDcxNzU5NzJkYzNjNzBlMmY3NiIsImhlaWdodCI6NzIwLCJ3aWR0aCI6MTI4MCwicmF0aW8iOjEuNzc3Nzc3Nzc3Nzc3Nzc3NywidmlkZW9VcmwiOiIiLCJtZWRpYVNpemUiOjU4NDAwNDQ4LCJtZWRpYVRpbWUiOjMzMiwicGF5VHlwZSI6MSwic2luZ2xlQ29pbnMiOjIwLCJjYW5XYXRjaCI6ZmFsc2UsIm5lZWRVbmxvY2siOnRydWUsIm5lZWRWaXAiOmZhbHNlLCJjb3N0Q29pbnMiOjIwLCJiYWxhbmNlIjowLCJ2aXBWYWxpZCI6ZmFsc2UsImlzVW5sb2NrZWQiOmZhbHNlfSx7ImlkIjozMjE5MiwicGxheWxldElkIjoxNDY3MCwiY3VycmVudEVwaXNvZGUiOjUsInRpdGxlIjoiNSIsIm1kNSI6IiIsImhhc2giOiJjYTA1N2IxMTA2YzM4NTBjZTY3NmJkNjE2NzdlY2ExMTU2ODYwMmQ0IiwiaGVpZ2h0Ijo3MjAsIndpZHRoIjoxMjgwLCJyYXRpbyI6MS43Nzc3Nzc3Nzc3Nzc3Nzc3LCJ2aWRlb1VybCI6IiIsIm1lZGlhU2l6ZSI6NTcyMDk1ODQsIm1lZGlhVGltZSI6MzI1LCJwYXlUeXBlIjoxLCJzaW5nbGVDb2lucyI6MjAsImNhbldhdGNoIjpmYWxzZSwibmVlZFVubG9jayI6dHJ1ZSwibmVlZFZpcCI6ZmFsc2UsImNvc3RDb2lucyI6MjAsImJhbGFuY2UiOjAsInZpcFZhbGlkIjpmYWxzZSwiaXNVbmxvY2tlZCI6ZmFsc2V9LHsiaWQiOjMyMTkzLCJwbGF5bGV0SWQiOjE0NjcwLCJjdXJyZW50RXBpc29kZSI6NiwidGl0bGUiOiI2IiwibWQ1IjoiIiwiaGFzaCI6IjI3YmMwOGUzNWRiZDU2ODU1MGQyZTIzNTUzMmM0OWM5YjExOWQ0YjQiLCJoZWlnaHQiOjcyMCwid2lkdGgiOjEyODAsInJhdGlvIjoxLjc3Nzc3Nzc3Nzc3Nzc3NzcsInZpZGVvVXJsIjoiIiwibWVkaWFTaXplIjo3NDI2Njg0OCwibWVkaWFUaW1lIjo0MDIsInBheVR5cGUiOjEsInNpbmdsZUNvaW5zIjoyMCwiY2FuV2F0Y2giOmZhbHNlLCJuZWVkVW5sb2NrIjp0cnVlLCJuZWVkVmlwIjpmYWxzZSwiY29zdENvaW5zIjoyMCwiYmFsYW5jZSI6MCwidmlwVmFsaWQiOmZhbHNlLCJpc1VubG9ja2VkIjpmYWxzZX0seyJpZCI6MzMzMzcsInBsYXlsZXRJZCI6MTQ2NzAsImN1cnJlbnRFcGlzb2RlIjo3LCJ0aXRsZSI6IjciLCJtZDUiOiIiLCJoYXNoIjoiNGZlYTRmZjdiNWEyYTEzMGYwMmE4MjJjNGI0OTlmOTg4ZjljMGJmZCIsImhlaWdodCI6NDgwLCJ3aWR0aCI6ODU0LCJyYXRpbyI6MS43NzkxNjY2NjY2NjY2NjY2LCJ2aWRlb1VybCI6InYzL2sxMi9jOTJhLzY1MTIvN2QwNi9kZDFkMjJjNzgyMjRiMWZmZjgyNGM0MTE3MGFjYWM3NzEwNDkyMDI2MTEwNjIyMDU0NC5tM3U4IiwibWVkaWFTaXplIjo0NTIyMjY4OCwibWVkaWFUaW1lIjo1MDEsInBheVR5cGUiOjAsInNpbmdsZUNvaW5zIjowLCJjYW5XYXRjaCI6dHJ1ZSwibmVlZFVubG9jayI6ZmFsc2UsIm5lZWRWaXAiOmZhbHNlLCJjb3N0Q29pbnMiOjAsImJhbGFuY2UiOjAsInZpcFZhbGlkIjpmYWxzZSwiaXNVbmxvY2tlZCI6ZmFsc2V9LHsiaWQiOjMzMzM4LCJwbGF5bGV0SWQiOjE0NjcwLCJjdXJyZW50RXBpc29kZSI6OCwidGl0bGUiOiI4IiwibWQ1IjoiIiwiaGFzaCI6IjU0ZGJhOTA4N2Y2OGM4ZmY0ZDgyMDRiODBlNTgzYzBiNjBlZGJhMzEiLCJoZWlnaHQiOjQ4MCwid2lkdGgiOjg1NCwicmF0aW8iOjEuNzc5MTY2NjY2NjY2NjY2NiwidmlkZW9VcmwiOiJ2My9rMTIvYzkyYS82NTEyLzdkMDYvYmJjYmNiM2NjNmNkZTk0ODRjNjk3ZGUwZTkyMWVjNzAxMDQ5MjAyNjExMDYyMjEwMDUubTN1OCIsIm1lZGlhU2l6ZSI6MzY2ODMxNjgsIm1lZGlhVGltZSI6NDAxLCJwYXlUeXBlIjowLCJzaW5nbGVDb2lucyI6MCwiY2FuV2F0Y2giOnRydWUsIm5lZWRVbmxvY2siOmZhbHNlLCJuZWVkVmlwIjpmYWxzZSwiY29zdENvaW5zIjowLCJiYWxhbmNlIjowLCJ2aXBWYWxpZCI6ZmFsc2UsImlzVW5sb2NrZWQiOmZhbHNlfSx7ImlkIjozMzMzOSwicGxheWxldElkIjoxNDY3MCwiY3VycmVudEVwaXNvZGUiOjksInRpdGxlIjoiOSIsIm1kNSI6IiIsImhhc2giOiI0ZTZiMTE1NWQ0ZGViNDY4OGMzMjI4YmY5MjcwMWZlOGRjMmQxMmFhIiwiaGVpZ2h0Ijo0ODAsIndpZHRoIjo4NTQsInJhdGlvIjoxLjc3OTE2NjY2NjY2NjY2NjYsInZpZGVvVXJsIjoidjMvazEyL2M5MmEvNjUxMi83ZDA2L2M4MTRlNjJhZjk3ZGJkYzY1NDVlNDVkYTg1YzdhNWFhMTA0OTIwMjYxMTA2MjIxMDA3Lm0zdTgiLCJtZWRpYVNpemUiOjQwNzA0NzY4LCJtZWRpYVRpbWUiOjQ1NCwicGF5VHlwZSI6MCwic2luZ2xlQ29pbnMiOjAsImNhbldhdGNoIjp0cnVlLCJuZWVkVW5sb2NrIjpmYWxzZSwibmVlZFZpcCI6ZmFsc2UsImNvc3RDb2lucyI6MCwiYmFsYW5jZSI6MCwidmlwVmFsaWQiOmZhbHNlLCJpc1VubG9ja2VkIjpmYWxzZX1dLCJzZW9JbmZvIjp7InRpdGxlIjoi5a2Y5Zyo5oSf77ya6Zu277yI5YWoNumbhu+8iSIsImtleXdvcmRzIjpbIuWtmOWcqOaEn+mbtiIsIuWoseS5kOWciOa9nOinhOWImSIsIuiBjOWcuuivseaDkSIsIuWtmOWcqOaEn+mbtuWujOaVtOeJiCIsIuWcqOe6v+eciyIsIui+uee8mOiJuuS6uiIsIuWKnuWFrOWupCJdLCJkZXNjcmlwdGlvbiI6IuWcqOWlouWNjua1ruWNjueahOeOsOS7o+WoseS5kOWciOiBjOWcuuiInuWPsOS4iu+8jOacieS4gOS9jeavq+aXoOWQjeawlOeahOi+uee8mOiJuuS6uu+8jOWFtuWtmOWcqOaEn+WgquensOmbtuOAgua3seWknOepuuaXt+eahOWKnuWFrOWupOWGhe+8jOaYj+aal+eahOmhtueBr+WwhuS4pOS6uueahOi6q+W9seaLieW+l+aegemVv++8jOiho+eJqea7keiQveeahOe7huW+ruWjsOWTjeS4juWOi+aKkeayiemHjeeahOWRvOWQuOWjsOWcqOepuuawlOS4reS6pOe7h+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWtmOWcqOaEn++8mumbtuOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDnpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJ3ZWJTaXRlTmFtZSI6IueGn+aenOefreWJpyIsImNhbm9uaWNhbFVybCI6Imh0dHBzOi8vc2h1Z3VvZGouY29tL3BsYXkvY3VuemFpZyJ9LCJhZHZpdGlzZSI6eyJkaWFsb2dMaXN0IjpudWxsLCJob21lTGlzdCI6bnVsbCwidmlkZW9Ub3BMaXN0IjpbeyJpZCI6IjExMzgyMDAwMDMiLCJsb2NhdGlvbiI6MywidGl0bGUiOiLlhajlm73nuqbngq4iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvYjQvMXZiLzJxMi8xbi81YzZhOTdkY2VjYWNlZTA1ZTJkYjdiNDRiOGZiMDgwYi5naWYiLCJsaW5rIjoiaHR0cHM6Ly95azZlYjlxLnRvcDo0NTgyIn0seyJpZCI6IjExMzg3MDAwMDMiLCJsb2NhdGlvbiI6MywidGl0bGUiOiLnqbrpmY3lq6nmqKEiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMXRwL3JoLzF6ci84NS9lMDc1Mjc2ZWRjNjNkODExZDNjNTcxMWYyZmQ5MGQwYi5HSUYiLCJsaW5rIjoiaHR0cHM6Ly8xNzAxLnV3eGJ5bC5jbi9sYW9wYW4vaW5kZXguaHRtbCJ9LHsiaWQiOiIxMTM4ODAwMDAzIiwibG9jYXRpb24iOjMsInRpdGxlIjoi5pil6I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzI0by8xei8xb2kvYjIvYjY4ZjI4ZDRkNGY4NTMyZjVmOWJmODM2MGYwNjVlMTIuR0lGIiwibGluayI6Imh0dHBzOi8vdTVxOHE1LnRvcCJ9LHsiaWQiOiIxMTM4MzAwMDAzIiwibG9jYXRpb24iOjMsInRpdGxlIjoi5pil6I2v6L+36I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzF5cy8yN2ovMTdiLzJobi8yNTRiYjgwZjgyMWVjYTcwMTk3MDg2YWY0ZjUxNTkyOS5naWYiLCJsaW5rIjoiaHR0cHM6Ly9wbXg1Z2hlLnRvcDoyOTIwIn1dLCJ2aWRlb0Rvd25MaXN0IjpbeyJpZCI6IjExMzgyMDAwMDMiLCJsb2NhdGlvbiI6MywidGl0bGUiOiLlhajlm73nuqbngq4iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvYjQvMXZiLzJxMi8xbi81YzZhOTdkY2VjYWNlZTA1ZTJkYjdiNDRiOGZiMDgwYi5naWYiLCJsaW5rIjoiaHR0cHM6Ly95azZlYjlxLnRvcDo0NTgyIn0seyJpZCI6IjExMzg3MDAwMDMiLCJsb2NhdGlvbiI6MywidGl0bGUiOiLnqbrpmY3lq6nmqKEiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMXRwL3JoLzF6ci84NS9lMDc1Mjc2ZWRjNjNkODExZDNjNTcxMWYyZmQ5MGQwYi5HSUYiLCJsaW5rIjoiaHR0cHM6Ly8xNzAxLnV3eGJ5bC5jbi9sYW9wYW4vaW5kZXguaHRtbCJ9LHsiaWQiOiIxMTM4ODAwMDAzIiwibG9jYXRpb24iOjMsInRpdGxlIjoi5pil6I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzI0by8xei8xb2kvYjIvYjY4ZjI4ZDRkNGY4NTMyZjVmOWJmODM2MGYwNjVlMTIuR0lGIiwibGluayI6Imh0dHBzOi8vdTVxOHE1LnRvcCJ9LHsiaWQiOiIxMTM4MzAwMDAzIiwibG9jYXRpb24iOjMsInRpdGxlIjoi5pil6I2v6L+36I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzF5cy8yN2ovMTdiLzJobi8yNTRiYjgwZjgyMWVjYTcwMTk3MDg2YWY0ZjUxNTkyOS5naWYiLCJsaW5rIjoiaHR0cHM6Ly9wbXg1Z2hlLnRvcDoyOTIwIn1dLCJob3RBcHBMaXN0IjpudWxsLCJuZXdBcHBMaXN0IjpudWxsLCJtdXN0QXBwTGlzdCI6bnVsbCwidGl0bGVBcHBMaXN0IjpudWxsLCJmcmllbmRMaXN0IjpudWxsLCJuaW5lR3JpZExpc3QiOlt7ImlkIjoiMTEzODIwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6IuWFqOWbvee6pueCriIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yM3UveDkvazcvMXAwLzdhZTY2ZjgwYTZiMzg5M2ZkNDE5OTkxYzNjZDk4MWI4LmdpZiIsImxpbmsiOiJodHRwczovL3lrNmViOXEudG9wOjQ1ODIifSx7ImlkIjoiMTEzODcwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6IuepuumZjeWrqeaooSIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8zMDcvMmh0LzJxMC8ya2ovZDFkYmExYWYxMTQ0NTE3ZjU3MjQ0NGJlNWRhN2E4MGMuR0lGIiwibGluayI6Imh0dHBzOi8vMTcwMS51d3hieWwuY24vbGFvcGFuL2luZGV4Lmh0bWwifSx7ImlkIjoiMTEzODgwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6IuaYpeiNryIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yOG4vMjZyLzJucS9pMS8xNjdhNWIzMWIwNzc2MzEzMWQ5MWMxOGI3MTI1NzAwMi5HSUYiLCJsaW5rIjoiaHR0cHM6Ly91NXE4cTUudG9wIn0seyJpZCI6IjExMzgzMDAwMDIiLCJsb2NhdGlvbiI6MiwidGl0bGUiOiLmmKXoja/ov7foja8iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjB0LzJweC96Ni8ybDUvMDUxZGE1MzYzYTU4YzVkYTE0ZjMyZWQyYTg5NWUxMDkuZ2lmIiwibGluayI6Imh0dHBzOi8vcG14NWdoZS50b3A6MjkyMCJ9LHsiaWQiOiIxMTYzODAwMDAyIiwibG9jYXRpb24iOjIsInRpdGxlIjoi5rW36KeS56S+5Yy6IiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzIwOC8ybDIvMXNtLzJwdS8wMjNiMmYyZGEyYzUxYWQ2MmJhZTViMjA0MTQ5YTZkNi53ZWJwIiwibGluayI6Imh0dHBzOi8vZDFtcDJvcWszMXAwZGEuY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM5MDAwMDAyIiwibG9jYXRpb24iOjIsInRpdGxlIjoi6buE5p6c55+t5YmnIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlL3VpLzM1NC9wOS9xeC81NTAxYzFkY2VmZmY4NzFhZjc4YzBkYmYzMmI3NWJlNC5qcGciLCJsaW5rIjoiaHR0cHM6Ly9kb3dyMnZyenIwZm9vLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzODkwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6IjkxZmFucyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yczkvMW1tLzJody8zM2ovMDIzMGUwNGVjNGU3ZDMxYWY3NTE0Y2VhMDQzZDM2ZGIud2VicCIsImxpbmsiOiJodHRwczovL2QxMjg5MGFwdHVsMWQwLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzODYwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6Ium7hOaenOemgea8qyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8xdWUvMnlyL245LzIwNS83NjJmZDY1ZmIzMTc2OGE3NmYxNjc0YzdlYTIyYjM1MS53ZWJwIiwibGluayI6Imh0dHBzOi8vZDI4NzFnZmIwazV0MWUuY2xvdWRmcm9udC5uZXQvZG93bmxvYWQvNS9oZ3MwMDAxIn0seyJpZCI6IjExMzg1MDAwMDIiLCJsb2NhdGlvbiI6MiwidGl0bGUiOiI1MeefreWJpyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yNzYvMjAyLzJqNy9nZy9mMDUzZmI1M2MyMjNlM2U4N2E0MGYyMzY4MDlhZjM5My53ZWJwIiwibGluayI6Imh0dHBzOi8vZDFhdnMwcG9yczg5ZmYuY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM4NDAwMDAyIiwibG9jYXRpb24iOjIsInRpdGxlIjoi57qi5p6c55+t5YmnIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzMxcS8yZDEvY20vNnkvZGJiNzM5MDY1NWMzNDRjNTQ4ZDc1NDFkMzIxMTNlNDgud2VicCIsImxpbmsiOiJodHRwczovL2QyODcxZ2ZiMGs1dDFlLmNsb3VkZnJvbnQubmV0L2Rvd25sb2FkLzQvaGdzMDAwMSJ9XSwidmlkZW9MaXN0IjpudWxsLCJzdG9wTGlzdCI6bnVsbCwiZm9yY2VkSnVtcExpc3QiOm51bGwsImFwcEluZm9BTGlzdCI6W3siaWQiOiIxMTM4MjAwMDEyIiwibG9jYXRpb24iOjEyLCJ0aXRsZSI6IuWFqOWbvee6pueCriIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yM3UveDkvazcvMXAwLzdhZTY2ZjgwYTZiMzg5M2ZkNDE5OTkxYzNjZDk4MWI4LmdpZiIsImxpbmsiOiJodHRwczovL3lrNmViOXEudG9wOjQ1ODIifSx7ImlkIjoiMTEzODcwMDAxMiIsImxvY2F0aW9uIjoxMiwidGl0bGUiOiLnqbrpmY3lq6nmqKEiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMzA3LzJodC8ycTAvMmtqL2QxZGJhMWFmMTE0NDUxN2Y1NzI0NDRiZTVkYTdhODBjLkdJRiIsImxpbmsiOiJodHRwczovLzE3MDEudXd4YnlsLmNuL2xhb3Bhbi9pbmRleC5odG1sIn0seyJpZCI6IjExMzg4MDAwMTIiLCJsb2NhdGlvbiI6MTIsInRpdGxlIjoi5pil6I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzI4bi8yNnIvMm5xL2kxLzE2N2E1YjMxYjA3NzYzMTMxZDkxYzE4YjcxMjU3MDAyLkdJRiIsImxpbmsiOiJodHRwczovL3U1cThxNS50b3AifSx7ImlkIjoiMTEzODMwMDAxMiIsImxvY2F0aW9uIjoxMiwidGl0bGUiOiLmmKXoja/ov7foja8iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjB0LzJweC96Ni8ybDUvMDUxZGE1MzYzYTU4YzVkYTE0ZjMyZWQyYTg5NWUxMDkuZ2lmIiwibGluayI6Imh0dHBzOi8vcG14NWdoZS50b3A6MjkyMCJ9LHsiaWQiOiIxMTYzODAwMDEyIiwibG9jYXRpb24iOjEyLCJ0aXRsZSI6Iua1t+inkuekvuWMuiIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yMDgvMmwyLzFzbS8ycHUvMDIzYjJmMmRhMmM1MWFkNjJiYWU1YjIwNDE0OWE2ZDYud2VicCIsImxpbmsiOiJodHRwczovL2QxbXAyb3FrMzFwMGRhLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzOTAwMDAxMiIsImxvY2F0aW9uIjoxMiwidGl0bGUiOiLpu4Tmnpznn63liaciLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvdWkvMzU0L3A5L3F4LzU1MDFjMWRjZWZmZjg3MWFmNzhjMGRiZjMyYjc1YmU0LmpwZyIsImxpbmsiOiJodHRwczovL2Rvd3IydnJ6cjBmb28uY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM4OTAwMDEyIiwibG9jYXRpb24iOjEyLCJ0aXRsZSI6IjkxZmFucyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yczkvMW1tLzJody8zM2ovMDIzMGUwNGVjNGU3ZDMxYWY3NTE0Y2VhMDQzZDM2ZGIud2VicCIsImxpbmsiOiJodHRwczovL2QxMjg5MGFwdHVsMWQwLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzODYwMDAxMiIsImxvY2F0aW9uIjoxMiwidGl0bGUiOiLpu4TmnpznpoHmvKsiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMXVlLzJ5ci9uOS8yMDUvNzYyZmQ2NWZiMzE3NjhhNzZmMTY3NGM3ZWEyMmIzNTEud2VicCIsImxpbmsiOiJodHRwczovL2QyODcxZ2ZiMGs1dDFlLmNsb3VkZnJvbnQubmV0L2Rvd25sb2FkLzUvaGdzMDAwMSJ9LHsiaWQiOiIxMTM4NTAwMDEyIiwibG9jYXRpb24iOjEyLCJ0aXRsZSI6IjUx55+t5YmnIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzI3Ni8yMDIvMmo3L2dnL2YwNTNmYjUzYzIyM2UzZTg3YTQwZjIzNjgwOWFmMzkzLndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMWF2czBwb3JzODlmZi5jbG91ZGZyb250Lm5ldD9kYz1oZ3MwMDAxIn0seyJpZCI6IjExMzg0MDAwMTIiLCJsb2NhdGlvbiI6MTIsInRpdGxlIjoi57qi5p6c55+t5YmnIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzMxcS8yZDEvY20vNnkvZGJiNzM5MDY1NWMzNDRjNTQ4ZDc1NDFkMzIxMTNlNDgud2VicCIsImxpbmsiOiJodHRwczovL2QyODcxZ2ZiMGs1dDFlLmNsb3VkZnJvbnQubmV0L2Rvd25sb2FkLzQvaGdzMDAwMSJ9XSwiYXBwSW5mb0JMaXN0IjpbeyJpZCI6IjExMzgyMDAwMTMiLCJsb2NhdGlvbiI6MTMsInRpdGxlIjoi5YWo5Zu957qm54KuIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzIzdS94OS9rNy8xcDAvN2FlNjZmODBhNmIzODkzZmQ0MTk5OTFjM2NkOTgxYjguZ2lmIiwibGluayI6Imh0dHBzOi8veWs2ZWI5cS50b3A6NDU4MiJ9LHsiaWQiOiIxMTM4NzAwMDEzIiwibG9jYXRpb24iOjEzLCJ0aXRsZSI6IuepuumZjeWrqeaooSIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8zMDcvMmh0LzJxMC8ya2ovZDFkYmExYWYxMTQ0NTE3ZjU3MjQ0NGJlNWRhN2E4MGMuR0lGIiwibGluayI6Imh0dHBzOi8vMTcwMS51d3hieWwuY24vbGFvcGFuL2luZGV4Lmh0bWwifSx7ImlkIjoiMTEzODgwMDAxMyIsImxvY2F0aW9uIjoxMywidGl0bGUiOiLmmKXoja8iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjhuLzI2ci8ybnEvaTEvMTY3YTViMzFiMDc3NjMxMzFkOTFjMThiNzEyNTcwMDIuR0lGIiwibGluayI6Imh0dHBzOi8vdTVxOHE1LnRvcCJ9LHsiaWQiOiIxMTM4MzAwMDEzIiwibG9jYXRpb24iOjEzLCJ0aXRsZSI6IuaYpeiNr+i/t+iNryIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yMHQvMnB4L3o2LzJsNS8wNTFkYTUzNjNhNThjNWRhMTRmMzJlZDJhODk1ZTEwOS5naWYiLCJsaW5rIjoiaHR0cHM6Ly9wbXg1Z2hlLnRvcDoyOTIwIn0seyJpZCI6IjExNjM4MDAwMTMiLCJsb2NhdGlvbiI6MTMsInRpdGxlIjoi5rW36KeS56S+5Yy6IiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzIwOC8ybDIvMXNtLzJwdS8wMjNiMmYyZGEyYzUxYWQ2MmJhZTViMjA0MTQ5YTZkNi53ZWJwIiwibGluayI6Imh0dHBzOi8vZDFtcDJvcWszMXAwZGEuY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM5MDAwMDEzIiwibG9jYXRpb24iOjEzLCJ0aXRsZSI6Ium7hOaenOefreWJpyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS91aS8zNTQvcDkvcXgvNTUwMWMxZGNlZmZmODcxYWY3OGMwZGJmMzJiNzViZTQuanBnIiwibGluayI6Imh0dHBzOi8vZG93cjJ2cnpyMGZvby5jbG91ZGZyb250Lm5ldD9kYz1oZ3MwMDAxIn0seyJpZCI6IjExMzg5MDAwMTMiLCJsb2NhdGlvbiI6MTMsInRpdGxlIjoiOTFmYW5zIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzJzOS8xbW0vMmh3LzMzai8wMjMwZTA0ZWM0ZTdkMzFhZjc1MTRjZWEwNDNkMzZkYi53ZWJwIiwibGluayI6Imh0dHBzOi8vZDEyODkwYXB0dWwxZDAuY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM4NjAwMDEzIiwibG9jYXRpb24iOjEzLCJ0aXRsZSI6Ium7hOaenOemgea8qyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8xdWUvMnlyL245LzIwNS83NjJmZDY1ZmIzMTc2OGE3NmYxNjc0YzdlYTIyYjM1MS53ZWJwIiwibGluayI6Imh0dHBzOi8vZDI4NzFnZmIwazV0MWUuY2xvdWRmcm9udC5uZXQvZG93bmxvYWQvNS9oZ3MwMDAxIn0seyJpZCI6IjExMzg1MDAwMTMiLCJsb2NhdGlvbiI6MTMsInRpdGxlIjoiNTHnn63liaciLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjc2LzIwMi8yajcvZ2cvZjA1M2ZiNTNjMjIzZTNlODdhNDBmMjM2ODA5YWYzOTMud2VicCIsImxpbmsiOiJodHRwczovL2QxYXZzMHBvcnM4OWZmLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzODQwMDAxMyIsImxvY2F0aW9uIjoxMywidGl0bGUiOiLnuqLmnpznn63liaciLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMzFxLzJkMS9jbS82eS9kYmI3MzkwNjU1YzM0NGM1NDhkNzU0MWQzMjExM2U0OC53ZWJwIiwibGluayI6Imh0dHBzOi8vZDI4NzFnZmIwazV0MWUuY2xvdWRmcm9udC5uZXQvZG93bmxvYWQvNC9oZ3MwMDAxIn1dfX0sImhhc2giOmZhbHNlLCJtc2ciOiJzdWNjZXNzIiwidGltZSI6IjIwMjYtMTEtMDdUMDQ6MTE6NDYuMzc0WiIsInRpcCI6IuaIkOWKnyJ9","status":200,"url":"https://webhgbapi.mfcg.me/api/app/playlet/detail?id=14670"},"revalidate":60,"tags":["playlet-detail","playlet-detail-14670"]} \ No newline at end of file diff --git a/.next-dev/dev/cache/fetch-cache/9169f538ec2eb4ec5b6c6827df453e244ce3c22b21a9613a414499d0c109cadb b/.next-dev/dev/cache/fetch-cache/9169f538ec2eb4ec5b6c6827df453e244ce3c22b21a9613a414499d0c109cadb new file mode 100644 index 0000000..bb42f5c --- /dev/null +++ b/.next-dev/dev/cache/fetch-cache/9169f538ec2eb4ec5b6c6827df453e244ce3c22b21a9613a414499d0c109cadb @@ -0,0 +1 @@ +{"kind":"FETCH","data":{"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"Content-Disposition,Refresh-Authorization","connection":"keep-alive","content-encoding":"gzip","content-type":"application/json; charset=utf-8","date":"Sat, 07 Nov 2026 04:13:32 GMT","server":"nginx/1.24.0 (Ubuntu)","transfer-encoding":"chunked"},"body":"eyJjb2RlIjoyMDAsImRhdGEiOnsiZm9vdGVySW5mbyI6eyJicmFuZCI6eyJ0aXRsZSI6IueGn+aenOefreWJpyIsImNvbnRlbnQiOiLnhp/mnpznn63liafkvZzkuLrpooblhYjnmoRBSeaIkOS6uuefreWJp+S4jueyvuWTgeefreinhumikee7vOWQiOW5s+WPsO+8jOaxh+mbhuWFqOe9keWOn+WIm+mrmOiDvUlQ5LiO5Y+N6L2s54i95Ymn44CC56uZ5YaF54us5a6254Ot5pKt44CK6aOO5Y2O56We5aWz5b2V44CL44CK55C85piO56We5aWz5b2V44CL44CK5q+N5LiK5pS755Wl44CL44CK5LuZ5a2Q55qE5L+u6KGM44CL44CK5p6B5ZOB5a625LiB44CL562J5aSa6aKY5p2Q5Yqb5L2c77yM5ra155uW5LuZ5L6g5aWH5bm744CB6YO95biC5Lmx5Lym44CB6IGM5Zy65LiO56m/6LaK44CC5YWo56uZ55S76LSo6LaF5riF5peg5Yig5YeP44CB5q+P5pel5pu05paw5pyA5paw6ZuG77yM5pSv5oyB572R6aG15Y2z54K55Y2z5pKt5LiO5a6Y5pa5QVBQ5o6M5LiK6KeC5b2x77yM5byA5ZCv5p6B6Ie05rKJ5rW455qE6KeG5ZCs55ub5a6044CCIn0sIm5hdkxpc3QiOlt7ImlkIjoxMjcwNywibmFtZSI6IuW6lemDqOWvvOiIqiIsImljb24iOiIiLCJ0cmFuc2xhdGlvbkxpc3QiOlt7ImlkIjoxMjY3MSwibmFtZSI6IuWFs+S6juaIkeS7rCIsImlzRnJpZW5kQWRzIjpmYWxzZSwidXJsVmFsdWUiOiIvcmljaHRleHQv5YWz5LqO5oiR5LusIn0seyJpZCI6MTI2NzMsIm5hbWUiOiLpmpDnp4HmlL/nrZYiLCJpc0ZyaWVuZEFkcyI6ZmFsc2UsInVybFZhbHVlIjoiL3JpY2h0ZXh0L+makOengeaUv+etliJ9LHsiaWQiOjEyNjc0LCJuYW1lIjoi572R56uZ55aR6ZeuIiwiaXNGcmllbmRBZHMiOmZhbHNlLCJ1cmxWYWx1ZSI6Ii9yaWNodGV4dC/nvZHnq5nnlpHpl64ifSx7ImlkIjoxMjY3NSwibmFtZSI6IuaEj+ingeWPjemmiCIsImlzRnJpZW5kQWRzIjpmYWxzZSwidXJsVmFsdWUiOiIvZmVlZGJhY2sifSx7ImlkIjoxMjY3NiwibmFtZSI6IjIyNTciLCJpc0ZyaWVuZEFkcyI6ZmFsc2UsInVybFZhbHVlIjoiL3JpY2hldGV4dC8yMjU3In0seyJpZCI6MTI2NzcsIm5hbWUiOiJETUNBIiwiaXNGcmllbmRBZHMiOmZhbHNlLCJ1cmxWYWx1ZSI6Ii9yaWNoZXRleHQvRE1DQSJ9XSwidXJsVmFsdWUiOiIiLCJjYXRlZ29yeVR5cGUiOjMsInNlb0luZm8iOnsidGl0bGUiOiIiLCJrZXl3b3JsZCI6W10sImRlc2NyaXB0aW9uIjoiIn19XSwiY29udGFjdExpc3QiOlt7Im5hbWUiOiJFLW1haWwiLCJ2YWx1ZSI6Imh0dHBzOi8vY2hlbmdyZW52aWRlb0Bwcm90b24ubWUifSx7Im5hbWUiOiLllYbliqHlkIjkvZzvvJrnq4vljbPogZTns7siLCJ2YWx1ZSI6IiJ9LHsibmFtZSI6IuWumOaWuee+pO+8mueri+WNs+WKoOWFpSIsInZhbHVlIjoiaHR0cHM6Ly90Lm1lL1NodUd1b0FJMDEifV19fSwiaGFzaCI6ZmFsc2UsIm1zZyI6InN1Y2Nlc3MiLCJ0aW1lIjoiMjAyNi0xMS0wN1QwNDoxMzozMi44OTJaIiwidGlwIjoi5oiQ5YqfIn0=","status":200,"url":"https://webhgbapi.mfcg.me/api/app/config/footer/info"},"revalidate":60,"tags":["footer-info"]} \ No newline at end of file diff --git a/.next-dev/dev/cache/fetch-cache/a8046274801ad851140554f91b26142298c3cf933567895e56c02824f9759027 b/.next-dev/dev/cache/fetch-cache/a8046274801ad851140554f91b26142298c3cf933567895e56c02824f9759027 new file mode 100644 index 0000000..9908123 --- /dev/null +++ b/.next-dev/dev/cache/fetch-cache/a8046274801ad851140554f91b26142298c3cf933567895e56c02824f9759027 @@ -0,0 +1 @@ +{"kind":"FETCH","data":{"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"Content-Disposition,Refresh-Authorization","connection":"keep-alive","content-encoding":"gzip","content-type":"application/json; charset=utf-8","date":"Sat, 07 Nov 2026 04:13:32 GMT","server":"nginx/1.24.0 (Ubuntu)","transfer-encoding":"chunked"},"body":"eyJjb2RlIjoyMDAsImRhdGEiOnsiaG9tZUJhbm5lckRhdGEiOlt7ImlkIjoxNDkxMSwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjp0cnVlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjp0cnVlLCJiYW5uZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2ExL2kxLzEwNDkvenliLTAxNy0zJTIwJUU3JTkwJUJDJUU2JTk4JThFJUU3JUE1JTlFJUU1JUE1JUIzJUU1JUJEJTk1JTIwZXAzLndlYnAiLCJtb2JpbGVCYW5uZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzF0L2gzLzEwNDkvNS5wbmciLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDJUMDM6NDE6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMC0wM1QxMTo0NTowMFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMDVUMDM6MDE6MzVaIiwidGhlbWVJZHMiOlsxMjY4MSwxMjY4Ml0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIiwi5LuZ5L6gIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIiwieGlhbnhpYSJdLCJjYXRlZ29yeUlkcyI6WzExMTAyLDExMTA1XSwidGl0bGUiOiLnkLzmmI7npZ7lpbPlvZUgRVAzIOeBq+eDreS4iuaYoOS4re+8gSIsInBsYXlOYW1lIjoi55C85piO56We5aWz5b2VIEVQMyDngavng63kuIrmmKDkuK3vvIEiLCJkZXNjcmlwdGlvbiI6IuiMg+aBkuaenOaWreaMpeWJkeaWqeadgOS6huS4gOebtOasuui+seS4iuWumOaCoOeahOmYtOmBk+S4u++8jOaIkOWKn+WkuuWPlumYtOmYs+S7pOS4juacuuWvhuS/oeS7tu+8jOS7luW9k+WNs+WGs+aEj+S7peaJi+S4remVv+WJkeiqk+atu+WkuuWbnuWJkeWul+WkseWOu+eahOS4gOWIh++8jOW5tuWKv+imgeaLv+S4i+ivlemBk+Wkp+S8mueahOaXoOS4iumtgemmluOAgumZpOWkleS5i+WknO+8jOWPtuWuieWmrueJueaEj+aLieedgOS7lueZu+S4iumrmOiAuOeahOaOpeWkqealvOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiueQvOaYjuelnuWls+W9lSBFUDMg54Gr54Ot5LiK5pig5Lit77yB44CL5YWo6ZuG5Zyo57q/6KeC55yL44CB5Ymn5oOF5LuL57uN5Y+K5a6M5pW06YCJ6ZuG77yM5bm25oyB57ut5pu05paw55u45YWz54Ot6Zeo55+t5Ymn44CCIiwic2x1ZyI6InFpb25nbTMiLCJkZXNjIjoi6IyD5oGS5p6c5pat5oyl5YmR5pap5p2A5LqG5LiA55u05qy66L6x5LiK5a6Y5oKg55qE6Zi06YGT5Li777yM5oiQ5Yqf5aS65Y+W6Zi06Ziz5Luk5LiO5py65a+G5L+h5Lu277yM5LuW5b2T5Y2z5Yaz5oSP5Lul5omL5Lit6ZW/5YmR6KqT5q275aS65Zue5YmR5a6X5aSx5Y6755qE5LiA5YiH77yM5bm25Yq/6KaB5ou/5LiL6K+V6YGT5aSn5Lya55qE5peg5LiK6a2B6aaW44CC6Zmk5aSV5LmL5aSc77yM5Y+25a6J5aau54m55oSP5ouJ552A5LuW55m75LiK6auY6IC455qE5o6l5aSp5qW844CCIiwiYW5jaG9yIjoi5Y6f5YibIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzQ2L3lwLzEwNDkvcGxheWxldF9jb3Zlcl8wMjMyYTc3MGIwMGRhYjY3LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UveWwvd2IvMTA0OS9wbGF5bGV0X2NvdmVyX2VjOTk4Y2UxNjg3NDFiNDcuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUxLDEyODUyLDEyODU0XSwidGFnTmFtZXMiOlsi5Y6f5YibIiwi6buE5p6cIiwi5LuZ5L6gIl0sInRhZ1NsdWdzIjpbIllDIiwiaHVhbmdndW8iLCJ4aWFueGlhIl0sInRvdGFsRXBpc29kZSI6MSwidXBkYXRlU3RhdHVzIjoyLCJjb3VudEJyb3dzZSI6MzA5LCJoZWF0VmFsdWUiOjMyMjg3LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTYsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDk6MDY6NTEuMjUyWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDRUMTA6MDA6NTkuNzEzWiIsInNlb0luZm8iOnsidGl0bGUiOiLnkLzmmI7npZ7lpbPlvZUgRVAzIOeBq+eDreS4iuaYoOS4re+8gSIsImtleXdvcmxkIjpbIueQvOaYjuelnuWls+W9lUVQM+eBq+eDreS4iuaYoOS4rSIsIueQvOaYjuelnuWls+W9lSIsIuWJkeWul+WvueWGsyIsIueQvOaYjuelnuWls+W9lUVQM+eBq+eDreS4iuaYoOS4reWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuiMg+aBkiIsIuS4iuWumOaCoCIsIuWPtuWuieWmriIsIumZhuWYiemdmSJdLCJkZXNjcmlwdGlvbiI6IuiMg+aBkuaenOaWreaMpeWJkeaWqeadgOS6huS4gOebtOasuui+seS4iuWumOaCoOeahOmYtOmBk+S4u++8jOaIkOWKn+WkuuWPlumYtOmYs+S7pOS4juacuuWvhuS/oeS7tu+8jOS7luW9k+WNs+WGs+aEj+S7peaJi+S4remVv+WJkeiqk+atu+WkuuWbnuWJkeWul+WkseWOu+eahOS4gOWIh++8jOW5tuWKv+imgeaLv+S4i+ivlemBk+Wkp+S8mueahOaXoOS4iumtgemmluOAgumZpOWkleS5i+WknO+8jOWPtuWuieWmrueJueaEj+aLieedgOS7lueZu+S4iumrmOiAuOeahOaOpeWkqealvOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiueQvOaYjuelnuWls+W9lSBFUDMg54Gr54Ot5LiK5pig5Lit77yB44CL5YWo6ZuG5Zyo57q/6KeC55yL44CB5Ymn5oOF5LuL57uN5Y+K5a6M5pW06YCJ6ZuG77yM5bm25oyB57ut5pu05paw55u45YWz54Ot6Zeo55+t5Ymn44CCIn19LHsiaWQiOjE0NTAyLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3IjpmYWxzZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6dHJ1ZSwiYmFubmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS92My84bi8xMDQ5LyVFOCU4QSVCMSVFOSVBRCU4MSVFOSVBNiU5NiVFNyU5OSVCQy0zJTIwJUU2JUFGJThEJUU0JUI4JThBJUU2JTk0JUJCJUU3JTk1JUE1LmpwZyIsIm1vYmlsZUJhbm5lciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvdXcvYXcvMTA0OS8xMS5wbmciLCJvbmxpbmVBdCI6IjIwMjYtMTAtMjhUMDE6MjI6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMC0yNFQwNDo0ODo0NloiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMjRUMDU6MjY6MDdaIiwidGhlbWVJZHMiOlsxMjY4Nl0sInRoZW1lTmFtZXMiOlsi5Lmx5LymIl0sInRoZW1lU2x1Z3MiOlsibHVhbmx1biJdLCJjYXRlZ29yeUlkcyI6WzExMTA0XSwidGl0bGUiOiLmr43kuIrmlLvnlaUgRVAxIiwicGxheU5hbWUiOiLmr43kuIrmlLvnlaUgRVAxIiwiZGVzY3JpcHRpb24iOiLmr43kurLmgLvmmK/kuaDmg6/ouqvnnYDpu5HkuJ3oopzouKnnnYDnu4bpq5jot5/pnovlnKjlrrbkuK3otbDliqjvvIzov5norqnmgqPmnInkuKXph43mgYvoopznmZbnmoTlhL/lrZDlnKjkuIDml4HnnIvlvpfmrLLngavkuK3ng6fjgIHog6/kuIvmu5rng6vjgILkvp3kvp3kuLvliqjmjaLkuIrntKfouqvlpZfoo5not6jlnZDlnKjku5bouqvkuIrvvIzku5bpl63kuIrlj4znnLzmsonmtbjlnKjlubvmg7PkuK3vvIzlsL3mg4Xkuqvlj5fnnYDmr43kurLku6XlpbPkuIrkvY3ot6johLjluKbmnaXnmoTmnoHoh7TlhrLlh7vjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmr43kuIrmlLvnlaUgRVAx44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJtdXNoYW5nIiwiZGVzYyI6IuavjeS6suaAu+aYr+S5oOaDr+i6q+edgOm7keS4neiinOi4qeedgOe7humrmOi3n+mei+WcqOWutuS4rei1sOWKqO+8jOi/meiuqeaCo+acieS4pemHjeaBi+iinOeZlueahOWEv+WtkOWcqOS4gOaXgeeci+W+l+assueBq+S4reeDp+OAgeiDr+S4i+a7mueDq+OAguS+neS+neS4u+WKqOaNouS4iue0p+i6q+Wll+ijmei3qOWdkOWcqOS7lui6q+S4iu+8jOS7lumXreS4iuWPjOecvOayiea1uOWcqOW5u+aDs+S4re+8jOWwveaDheS6q+WPl+edgOavjeS6suS7peWls+S4iuS9jei3qOiEuOW4puadpeeahOaegeiHtOWGsuWHu+OAgiIsImFuY2hvciI6IuWOn+WImyIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9rdi84Yy8xMDQ5L3BsYXlsZXRfY292ZXJfODMwNzYzOGQ2OTM1NGUzOS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3M3L2pzLzEwNDkvcGxheWxldF9jb3Zlcl9mZGZjMTM5YjIzOGI3NmNkLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg2MSwxMjg2MF0sInRhZ05hbWVzIjpbIuavjeWtkCIsIuS5seS8piJdLCJ0YWdTbHVncyI6WyJtdXppIiwibHVhbmx1biJdLCJ0b3RhbEVwaXNvZGUiOjEsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE4MSwiaGVhdFZhbHVlIjoyMDI1NywiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE3LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQzOjI3LjEwMloiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjE5LjE1MloiLCJzZW9JbmZvIjp7InRpdGxlIjoi5q+N5LiK5pS755WlIEVQMS0g6Iqx6a2BQVBQ54mIIiwia2V5d29ybGQiOlsi5q+N5LiK5pS755WlIiwi5oGL6KKc55mWIiwi5q+N5Lqy6K+x5oORIiwi5q+N5LiK5pS755Wl5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5L6d5L6dIiwi5YS/5a2QIl0sImRlc2NyaXB0aW9uIjoi5q+N5Lqy5oC75piv5Lmg5oOv6Lqr552A6buR5Lid6KKc6Lip552A57uG6auY6Lef6Z6L5Zyo5a625Lit6LWw5Yqo77yM6L+Z6K6p5oKj5pyJ5Lil6YeN5oGL6KKc55mW55qE5YS/5a2Q5Zyo5LiA5peB55yL5b6X5qyy54Gr5Lit54On44CB6IOv5LiL5rua54Or44CC5L6d5L6d5Li75Yqo5o2i5LiK57Sn6Lqr5aWX6KOZ6Leo5Z2Q5Zyo5LuW6Lqr5LiK77yM5LuW6Zet5LiK5Y+M55y85rKJ5rW45Zyo5bm75oOz5Lit77yM5bC95oOF5Lqr5Y+X552A5q+N5Lqy5Lul5aWz5LiK5L2N6Leo6IS45bim5p2l55qE5p6B6Ie05Yay5Ye744CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5q+N5LiK5pS755WlIEVQMeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDHpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ0OTgsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6dHJ1ZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6dHJ1ZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6ZmFsc2UsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOnRydWUsImJhbm5lciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UveHQvb20vMTA0OS96eWItMDA3LTUlMjAlRTYlOUUlODElRTUlOTMlODElRTUlQUUlQjYlRTQlQjglODElMjBlcDEud2VicCIsIm1vYmlsZUJhbm5lciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UveDQvM3QvMTA0OS82NGQ1MGQwNC1kNWM5LTRmM2UtYmE2MS1kY2E1ZTU5MjgzZmQuanBnIiwib25saW5lQXQiOiIyMDI2LTEwLTMxVDIzOjMzOjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMjRUMDg6MzA6MDBaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTI1VDA0OjE3OjEzWiIsInRoZW1lSWRzIjpbMTI2ODVdLCJ0aGVtZU5hbWVzIjpbIumDveW4giJdLCJ0aGVtZVNsdWdzIjpbImR1c2hpIl0sImNhdGVnb3J5SWRzIjpbMTExMDVdLCJ0aXRsZSI6IuaegeWTgeWutuS4gSBFUDHvvIjlkajmm7Tplb/liafvvIkiLCJwbGF5TmFtZSI6IuaegeWTgeWutuS4gSBFUDHvvIjlkajmm7Tplb/liafvvIkiLCJkZXNjcmlwdGlvbiI6Iuael+aZmuiNo+aCoOeEtua8q+atpeS6jueDn+mbqOi/t+iSmeeahOeOhOatpua5lueVlO+8jOavq+S4jeWuouawlOWcsOWHuuiogOiupeiuvemCo+S6m+aJgOiwk+eahOmrmOWCsuaJjeWtkO+8jOWNtOmYtOW3rumYs+mUmeWBtumBh+S6huW+ruacjeWHuuiuv+eahOe7neiJsui0teWls+iClumdkueSh+OAguS4pOS6uuWboOaEj+ingeS4jeWQiOWcqOa5lui+uea/gOeDiOS6iei+qe+8jOaDheaApeS5i+S4i+WPjOWPjOWksei2s+i3jOWFpea5luawtOS5i+S4reOAguWcqOawtOS4i+aMo+aJjuWGsueqgeaXtuOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuaegeWTgeWutuS4gSBFUDHvvIjlkajmm7Tplb/liafvvInjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwx6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImppcGluamkiLCJkZXNjIjoi5p6X5pma6I2j5oKg54S25ryr5q2l5LqO54Of6Zuo6L+36JKZ55qE546E5q2m5rmW55WU77yM5q+r5LiN5a6i5rCU5Zyw5Ye66KiA6K6l6K696YKj5Lqb5omA6LCT55qE6auY5YKy5omN5a2Q77yM5Y206Zi05beu6Ziz6ZSZ5YG26YGH5LqG5b6u5pyN5Ye66K6/55qE57ud6Imy6LS15aWz6IKW6Z2S55KH44CC5Lik5Lq65Zug5oSP6KeB5LiN5ZCI5Zyo5rmW6L655r+A54OI5LqJ6L6p77yM5oOF5oCl5LmL5LiL5Y+M5Y+M5aSx6Laz6LeM5YWl5rmW5rC05LmL5Lit44CC5Zyo5rC05LiL5oyj5omO5Yay56qB5pe244CCIiwiYW5jaG9yIjoi5Y6f5YibIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzdiLzV5LzEwNDkvcGxheWxldF9jb3Zlcl80MWYwN2FmZjAyZDhjNDg4LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvN3gvZHcvMTA0OS9wbGF5bGV0X2NvdmVyXzczY2U1MjMwMTczYWNmYjcuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUzXSwidGFnTmFtZXMiOlsiQUnmiJDkurrnn63liaciXSwidGFnU2x1Z3MiOlsiQ1JESiJdLCJ0b3RhbEVwaXNvZGUiOjEsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjEyNiwiaGVhdFZhbHVlIjoxNTE1NywiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE1LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQzOjI0LjI2M1oiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAwOjAwOjE3LjM5N1oiLCJzZW9JbmZvIjp7InRpdGxlIjoi5p6B5ZOB5a625LiBIEVQMe+8iOWRqOabtOmVv+WJp++8iSIsImtleXdvcmxkIjpbIuaegeWTgeWutuS4gSIsIuepv+i2iuadg+iwiyIsIua5lueVlOWBtumBhyIsIuaegeWTgeWutuS4geWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuael+aZmuiNoyIsIuiClumdkueShyJdLCJkZXNjcmlwdGlvbiI6Iuael+aZmuiNo+aCoOeEtua8q+atpeS6jueDn+mbqOi/t+iSmeeahOeOhOatpua5lueVlO+8jOavq+S4jeWuouawlOWcsOWHuuiogOiupeiuvemCo+S6m+aJgOiwk+eahOmrmOWCsuaJjeWtkO+8jOWNtOmYtOW3rumYs+mUmeWBtumBh+S6huW+ruacjeWHuuiuv+eahOe7neiJsui0teWls+iClumdkueSh+OAguS4pOS6uuWboOaEj+ingeS4jeWQiOWcqOa5lui+uea/gOeDiOS6iei+qe+8jOaDheaApeS5i+S4i+WPjOWPjOWksei2s+i3jOWFpea5luawtOS5i+S4reOAguWcqOawtOS4i+aMo+aJjuWGsueqgeaXtuOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuaegeWTgeWutuS4gSBFUDHvvIjlkajmm7Tplb/liafvvInjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwx6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NDg4LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOnRydWUsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOnRydWUsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOmZhbHNlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjp0cnVlLCJiYW5uZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2IwL3l5LzEwNDkvenliLTAyMi0xLSVFOSVBMiVBOCVFOCU4RiVBRiVFNyVBNSU5RSVFNSVBNSVCMyVFOSU4QyU4NGVwMS53ZWJwIiwibW9iaWxlQmFubmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS8zay9uby8xMDQ5LzgucG5nIiwib25saW5lQXQiOiIyMDI2LTEwLTMxVDE3OjA5OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMjZUMDk6NTA6MDBaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTI3VDAzOjI1OjIyWiIsInRoZW1lSWRzIjpbMTI2ODJdLCJ0aGVtZU5hbWVzIjpbIuS7meS+oCJdLCJ0aGVtZVNsdWdzIjpbInhpYW54aWEiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMV0sInRpdGxlIjoi6aOO5Y2O56We5aWz5b2VIiwicGxheU5hbWUiOiLpo47ljY7npZ7lpbPlvZUiLCJkZXNjcmlwdGlvbiI6IumrmOi0tee7nee+jueahOWkqeWHpOmmluW4reWHpOeSg+atpOWIu+ato+a1kei6q+i1pOijuOOAgemrmOmrmOaShei1t+mlsea7oeeahOiHgOmDqOWxiOi+sei3queIrO+8jOi6q+WQjue0p+iHtOeahOiPiueptOmHjOi1q+eEtuaPkuedgOS4gOagueayvua7oea3q+a2sueahOa5v+a2pue+veavm+OAgumdouWvuea7oeWPo+axoeiogOenveivreeahOiAgeWktO+8jOWlueS4jeW+l+S4jeS4u+WKqOW8oOW8gOe6ouWUh+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiumjjuWNjuelnuWls+W9leOAi+WFqOmbhuWcqOe6v+ingueci+OAgeWJp+aDheS7i+e7jeWPiuWujOaVtOmAiembhu+8jOW5tuaMgee7reabtOaWsOebuOWFs+eDremXqOefreWJp+OAgiIsInNsdWciOiJmZW5naHVhIiwiZGVzYyI6IumrmOi0tee7nee+jueahOWkqeWHpOmmluW4reWHpOeSg+atpOWIu+ato+a1kei6q+i1pOijuOOAgemrmOmrmOaShei1t+mlsea7oeeahOiHgOmDqOWxiOi+sei3queIrO+8jOi6q+WQjue0p+iHtOeahOiPiueptOmHjOi1q+eEtuaPkuedgOS4gOagueayvua7oea3q+a2sueahOa5v+a2pue+veavm+OAgumdouWvuea7oeWPo+axoeiogOenveivreeahOiAgeWktO+8jOWlueS4jeW+l+S4jeS4u+WKqOW8oOW8gOe6ouWUh+OAgiIsImFuY2hvciI6IuWOn+WImyIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9raS81aS8xMDQ5L3BsYXlsZXRfY292ZXJfNWQ4MDM2MmJlZTIxZmZiMi5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL291L29qLzEwNDkvcGxheWxldF9jb3Zlcl83YmYzNGRhMzA5NTcxNTA5LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1NCwxMjg2Nl0sInRhZ05hbWVzIjpbIuS7meS+oCIsIumHjeWPoyJdLCJ0YWdTbHVncyI6WyJ4aWFueGlhIiwiemhvbmdrb3UiXSwidG90YWxFcGlzb2RlIjoyLCJ1cGRhdGVTdGF0dXMiOjIsImNvdW50QnJvd3NlIjoxMzQsImhlYXRWYWx1ZSI6MTU5NTAsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0MjozMi41OTdaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wNFQxMzo0Njo0MC4xOTRaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IumjjuWNjuelnuWls+W9lSIsImtleXdvcmxkIjpbIumjjuWNjuelnuWls+W9lSIsIuWul+mXqOelnuWlsyIsIuaegeW6puiwg+aVmSIsIumjjuWNjuelnuWls+W9leWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuWHpOeSgyIsIuW+kOmXuyJdLCJkZXNjcmlwdGlvbiI6IumrmOi0tee7nee+jueahOWkqeWHpOmmluW4reWHpOeSg+atpOWIu+ato+a1kei6q+i1pOijuOOAgemrmOmrmOaShei1t+mlsea7oeeahOiHgOmDqOWxiOi+sei3queIrO+8jOi6q+WQjue0p+iHtOeahOiPiueptOmHjOi1q+eEtuaPkuedgOS4gOagueayvua7oea3q+a2sueahOa5v+a2pue+veavm+OAgumdouWvuea7oeWPo+axoeiogOenveivreeahOiAgeWktO+8jOWlueS4jeW+l+S4jeS4u+WKqOW8oOW8gOe6ouWUh+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiumjjuWNjuelnuWls+W9leOAi+WFqOmbhuWcqOe6v+ingueci+OAgeWJp+aDheS7i+e7jeWPiuWujOaVtOmAiembhu+8jOW5tuaMgee7reabtOaWsOebuOWFs+eDremXqOefreWJp+OAgiJ9fV0sIm1vZHVsZXMiOlt7ImlkIjoxMTEwMSwic2x1ZyI6Inp1aXJlZHVhbmp1IiwidGl0bGUiOiLmnIDng63nn63liaciLCJkZXNjIjoiIiwia2V5d29yZCI6W10sImxhYmVsIjoiIiwic3R5bGUiOiJBIiwiY2FyZEJhY2tncm91bmRJbWFnZSI6IiIsIm1vZHVsZVR5cGUiOjEsImRhdGFUeXBlIjoxLCJyZWNvbW1lbmRUeXBlIjowLCJjYXRlZ29yeUlkIjowLCJyYW5rIjo2LCJsaW1pdCI6MTAsInNlb0luZm8iOnsidGl0bGUiOiLnhp/mnpznn63liafmnIDng63nn63liafkuJPljLogLSDng63pl6hBSeaIkOS6uuefreWJp+S4jum7hOaenOeIhuasvuefreWJp+WQiOmbhiIsImtleXdvcmxkIjpbIueGn+aenOefreWJpyIsIum7hOaenOefreWJpyIsIum7hOaenCIsIkFJ5oiQ5Lq655+t5YmnIiwi5pyA54Ot55+t5YmnIiwi54iG5qy+55+t5YmnIiwi6aG257qn56eB5Y6oIiwi6ay854i255yf5Lq654mIIiwi5oiQ5Lq655+t5YmnQVBQIl0sImRlc2NyaXB0aW9uIjoi6LWw6L+b54af5p6c55+t5Ymn5pyA54Ot55+t5Ymn5LiT5Yy677yM5rKJ5rW45L2T6aqM5YWo572R5pyA5YW35Lq65rCU55qE54iG5qy+QUnnn63liafkuI7mnoHoh7Top4bop4nlhrLlh7vjgILlubPlj7Dmr4/ml6XlnZrmjIHmjIHnu63mm7TmlrDvvIzngavng63mlLblvZXkuobjgIrpobbnuqfnp4HljqjjgIvjgIHjgIrprLzniLbnnJ/kurrniYjjgIvnrYnpq5jkurrmsJTniIbmrL7lpKfmiI/jgILov5nph4zliafmg4Xlj43ovazkuI3mlq3jgIHng63luqbmjIHnu63pq5jmtqjjgILotbblv6vngrnlh7vkuIvovb3lrpjmlrnkuJPlsZ7npo/liKlBUFDvvIzluKbmgqjpmo/ml7bpmo/lnLDnlYXkuqvml6DlubLmibDnmoTpq5jmuIXmjozkuIrov73liafmlrDkvZPpqozvvIEifSwibGlzdCI6W3siaWQiOjE0ODA5LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wMlQyMzo1ODozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTEwLTEyVDA3OjIzOjE0WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wMlQxMDowMzo1MVoiLCJ0aGVtZUlkcyI6WzEyNjg4XSwidGhlbWVOYW1lcyI6WyLmvKvliaciXSwidGhlbWVTbHVncyI6WyJtYW5qdSJdLCJjYXRlZ29yeUlkcyI6WzExMTA1LDExMTAxXSwidGl0bGUiOiLnnJ/kurrlpbTlj6/moqborq3nu4PlpKfluIjvvIjlhagxM+mbhu+8iSIsInBsYXlOYW1lIjoi55yf5Lq65aW05Y+v5qKm6K6t57uD5aSn5biIIiwiZGVzY3JpcHRpb24iOiLljYHlhavlsoHov5jopoHln4vlpLToi6bor7vogIPlpKflrabvvJ/kuI3vvIzlhYjlpZHnuqbkurLlpojlvZPigJzlpbTlj6/moqbigJ3lvIDlsYDni4Lnu4PvvIHlsJHlubTmsojkuojlronppbHlj5flmLLnrJHvvIzkuIDmgJLkuYvkuIvmgo3nhLblsIbkurLlpojmsojlqYnmmbTlvLrooYzlpZHnuqbjgILnq5nkuIrnq57mioDmk4Llj7DvvIzmr43kurLnnqzpl7TljJbouqvmgKfmhJ/nl7TlpbPnibnlt6XvvIzlvZPkvJflnKjkvJfkurrpnaLliY3oh6rmiaPmmKXmva7ms5vmu6XjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrnnJ/kurrlpbTlj6/moqborq3nu4PlpKfluIjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJ6aGVucmVuIiwiZGVzYyI6IuWNgeWFq+Wygei/mOimgeWfi+WktOiLpuivu+iAg+Wkp+Wtpu+8n+S4je+8jOWFiOWlkee6puS6suWmiOW9k+KAnOWltOWPr+aipuKAneW8gOWxgOeLgue7g++8geWwkeW5tOayiOS6iOWuiemlseWPl+WYsueske+8jOS4gOaAkuS5i+S4i+aCjeeEtuWwhuS6suWmiOayiOWpieaZtOW8uuihjOWlkee6puOAguermeS4iuernuaKgOaTguWPsO+8jOavjeS6sueerOmXtOWMlui6q+aAp+aEn+eXtOWls+eJueW3pe+8jOW9k+S8l+WcqOS8l+S6uumdouWJjeiHquaJo+aYpea9ruazm+a7peOAgiIsImFuY2hvciI6IlN5YmlsIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2o3L3RuLzEwNDkvcGxheWxldF9jb3Zlcl82YmQwMmRlM2E0YjUyYTliLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvbjQveXUvMTA0OS9wbGF5bGV0X2NvdmVyXzZiZDAyZGUzYTRiNTJhOWIuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODYxLDEyODY2LDEyODYyXSwidGFnTmFtZXMiOlsi5q+N5a2QIiwi6YeN5Y+jIiwi5aSn5a2mIl0sInRhZ1NsdWdzIjpbIm11emkiLCJ6aG9uZ2tvdSIsImRheHVlIl0sInRvdGFsRXBpc29kZSI6MTMsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE4NywiaGVhdFZhbHVlIjoyMTU5OCwiY291bnRDb2xsZWN0IjoxLCJjb3VudExpa2UiOjE5LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ5OjMxLjM4NFoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjA0Ljg0M1oiLCJzZW9JbmZvIjp7InRpdGxlIjoi55yf5Lq65aW05Y+v5qKm6K6t57uD5aSn5biI77yI5YWoMTPpm4bvvIkiLCJrZXl3b3JsZCI6WyLnnJ/kurrlpbTlj6/moqborq3nu4PlpKfluIgiLCLmr43lrZDlpZHnuqYiLCLnl7TlpbPnibnlt6UiLCLnnJ/kurrlpbTlj6/moqborq3nu4PlpKfluIjlrozmlbTniYgiLCLlnKjnur/nnIsiLCLmsojkuojlrokiLCLmsojlqYnmmbQiXSwiZGVzY3JpcHRpb24iOiLljYHlhavlsoHov5jopoHln4vlpLToi6bor7vogIPlpKflrabvvJ/kuI3vvIzlhYjlpZHnuqbkurLlpojlvZPigJzlpbTlj6/moqbigJ3lvIDlsYDni4Lnu4PvvIHlsJHlubTmsojkuojlronppbHlj5flmLLnrJHvvIzkuIDmgJLkuYvkuIvmgo3nhLblsIbkurLlpojmsojlqYnmmbTlvLrooYzlpZHnuqbjgILnq5nkuIrnq57mioDmk4Llj7DvvIzmr43kurLnnqzpl7TljJbouqvmgKfmhJ/nl7TlpbPnibnlt6XvvIzlvZPkvJflnKjkvJfkurrpnaLliY3oh6rmiaPmmKXmva7ms5vmu6XjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrnnJ/kurrlpbTlj6/moqborq3nu4PlpKfluIjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDY3MCwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDFUMjA6NDE6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMC0xM1QwMzoyNTozOFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDRUMTI6MTg6MzNaIiwidGhlbWVJZHMiOlsxMjY4NV0sInRoZW1lTmFtZXMiOlsi6YO95biCIl0sInRoZW1lU2x1Z3MiOlsiZHVzaGkiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNSwxMTEwMV0sInRpdGxlIjoi5a2Y5Zyo5oSf77ya6Zu277yI5YWoNumbhu+8iSIsInBsYXlOYW1lIjoi5a2Y5Zyo5oSf77ya6Zu2IiwiZGVzY3JpcHRpb24iOiLlnKjlpaLljY7mta7ljY7nmoTnjrDku6PlqLHkuZDlnIjogYzlnLroiJ7lj7DkuIrvvIzmnInkuIDkvY3mr6vml6DlkI3msJTnmoTovrnnvJjoibrkurrvvIzlhbblrZjlnKjmhJ/loKrnp7Dpm7bjgILmt7HlpJznqbrml7fnmoTlip7lhazlrqTlhoXvvIzmmI/mmpfnmoTpobbnga/lsIbkuKTkurrnmoTouqvlvbHmi4nlvpfmnoHplb/vvIzooaPnianmu5HokL3nmoTnu4blvq7lo7Dlk43kuI7ljovmipHmsonph43nmoTlkbzlkLjlo7DlnKjnqbrmsJTkuK3kuqTnu4fjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlrZjlnKjmhJ/vvJrpm7bjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw56ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImN1bnphaWciLCJkZXNjIjoi5Zyo5aWi5Y2O5rWu5Y2O55qE546w5Luj5aix5LmQ5ZyI6IGM5Zy66Iie5Y+w5LiK77yM5pyJ5LiA5L2N5q+r5peg5ZCN5rCU55qE6L6557yY6Im65Lq677yM5YW25a2Y5Zyo5oSf5aCq56ew6Zu244CC5rex5aSc56m65pe355qE5Yqe5YWs5a6k5YaF77yM5piP5pqX55qE6aG254Gv5bCG5Lik5Lq655qE6Lqr5b2x5ouJ5b6X5p6B6ZW/77yM6KGj54mp5ruR6JC955qE57uG5b6u5aOw5ZON5LiO5Y6L5oqR5rKJ6YeN55qE5ZG85ZC45aOw5Zyo56m65rCU5Lit5Lqk57uH44CCIiwiYW5jaG9yIjoi6buE5p6c5a6Y5pa5IiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzBoL2loLzEwNDkvcGxheWxldF9jb3Zlcl8yYzYwMDNlOGFjZDVmYWY2LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvcTcvMm8vMTA0OS9wbGF5bGV0X2NvdmVyXzJjNjAwM2U4YWNkNWZhZjYuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODU2LDEyODU1XSwidGFnTmFtZXMiOlsi6IGM5Zy66LCD5pWZIiwi6YO95biCIl0sInRhZ1NsdWdzIjpbIlpDVEoiLCJkdXNoaSJdLCJ0b3RhbEVwaXNvZGUiOjksInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjQwOCwiaGVhdFZhbHVlIjo0NTcxMCwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE0LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ4OjE1LjY2NloiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjA0LjMyMloiLCJzZW9JbmZvIjp7InRpdGxlIjoi5a2Y5Zyo5oSf77ya6Zu277yI5YWoNumbhu+8iSIsImtleXdvcmxkIjpbIuWtmOWcqOaEn+mbtiIsIuWoseS5kOWciOa9nOinhOWImSIsIuiBjOWcuuivseaDkSIsIuWtmOWcqOaEn+mbtuWujOaVtOeJiCIsIuWcqOe6v+eciyIsIui+uee8mOiJuuS6uiIsIuWKnuWFrOWupCJdLCJkZXNjcmlwdGlvbiI6IuWcqOWlouWNjua1ruWNjueahOeOsOS7o+WoseS5kOWciOiBjOWcuuiInuWPsOS4iu+8jOacieS4gOS9jeavq+aXoOWQjeawlOeahOi+uee8mOiJuuS6uu+8jOWFtuWtmOWcqOaEn+WgquensOmbtuOAgua3seWknOepuuaXt+eahOWKnuWFrOWupOWGhe+8jOaYj+aal+eahOmhtueBr+WwhuS4pOS6uueahOi6q+W9seaLieW+l+aegemVv++8jOiho+eJqea7keiQveeahOe7huW+ruWjsOWTjeS4juWOi+aKkeayiemHjeeahOWRvOWQuOWjsOWcqOepuuawlOS4reS6pOe7h+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWtmOWcqOaEn++8mumbtuOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDnpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ3NDgsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAxVDE5OjQ1OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMTBUMDM6MDA6MDBaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTEyVDAzOjUyOjE2WiIsInRoZW1lSWRzIjpbMTI2ODVdLCJ0aGVtZU5hbWVzIjpbIumDveW4giJdLCJ0aGVtZVNsdWdzIjpbImR1c2hpIl0sImNhdGVnb3J5SWRzIjpbMTExMDUsMTExMDFdLCJ0aXRsZSI6IuiLj+iAgeW4iOeahOijuOi0t+S6uueUn++8iOmHkeW4geino+mUge+8ie+8iOWFqDXpm4bvvIkiLCJwbGF5TmFtZSI6IuiLj+iAgeW4iOeahOijuOi0t+S6uueUn++8iOmHkeW4geino+mUge+8iSIsImRlc2NyaXB0aW9uIjoi5rip5p+U56uv5bqE55qE6IuP6ICB5biI5Li65LqG5pu/5Zec6LWM5oiQ5oCn55qE54i25Lqy6L+Y5riF5beo6aKd6auY5Yip6LS377yM6L+r5LqO5peg5aWI6LWw5LiK5LqG5YCf6KO46LS355qE57ud6Lev44CC55u05Yiw5YC65Li75rex5aSc5omT5byA5Yqg5a+G55u45YaM55qE6YKj5LiA5Yi777yM6ZyH5oOK5Zyw5Y+R546w5aWz5Li76KeS56uf54S25bCx5piv6Ieq5bex5bmz5pel6YeM6auY6auY5Zyo5LiK55qE5oCn5oSf5aWz6ICB5biI77yB54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6IuP6ICB5biI55qE6KO46LS35Lq655Sf77yI6YeR5biB6Kej6ZSB77yJ44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysNembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJzdWxhb3NoIiwiZGVzYyI6Iua4qeaflOerr+W6hOeahOiLj+iAgeW4iOS4uuS6huabv+WXnOi1jOaIkOaAp+eahOeItuS6sui/mOa4heW3qOminemrmOWIqei0t++8jOi/q+S6juaXoOWliOi1sOS4iuS6huWAn+ijuOi0t+eahOe7nei3r+OAguebtOWIsOWAuuS4u+a3seWknOaJk+W8gOWKoOWvhuebuOWGjOeahOmCo+S4gOWIu++8jOmch+aDiuWcsOWPkeeOsOWls+S4u+inkuern+eEtuWwseaYr+iHquW3seW5s+aXpemHjOmrmOmrmOWcqOS4iueahOaAp+aEn+Wls+iAgeW4iO+8gSIsImFuY2hvciI6Ii0iLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvZzMvMXEvMTA0OS9wbGF5bGV0X2NvdmVyXzAwOTY3Yzc4OGRiNWMxODMuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODU2LDEyODU1XSwidGFnTmFtZXMiOlsi6IGM5Zy66LCD5pWZIiwi6YO95biCIl0sInRhZ1NsdWdzIjpbIlpDVEoiLCJkdXNoaSJdLCJ0b3RhbEVwaXNvZGUiOjUsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE3MSwiaGVhdFZhbHVlIjoyMTA5MiwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjEzLCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ5OjAxLjIwNVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAxOjAwOjE5LjYzNVoiLCJzZW9JbmZvIjp7InRpdGxlIjoi6IuP6ICB5biI55qE6KO46LS35Lq655Sf77yI6YeR5biB6Kej6ZSB77yJ77yI5YWoNembhu+8iSIsImtleXdvcmxkIjpbIuiLj+iAgeW4iOeahOijuOi0t+S6uueUnyIsIuijuOi0t+mZt+mYsSIsIumrmOWGt+W+oeWnkCIsIuiLj+iAgeW4iOeahOijuOi0t+S6uueUn+WujOaVtOeJiCIsIuWcqOe6v+eciyIsIuiLj+iAgeW4iCIsIui1jOmsvOeIuSJdLCJkZXNjcmlwdGlvbiI6Iua4qeaflOerr+W6hOeahOiLj+iAgeW4iOS4uuS6huabv+WXnOi1jOaIkOaAp+eahOeItuS6sui/mOa4heW3qOminemrmOWIqei0t++8jOi/q+S6juaXoOWliOi1sOS4iuS6huWAn+ijuOi0t+eahOe7nei3r+OAguebtOWIsOWAuuS4u+a3seWknOaJk+W8gOWKoOWvhuebuOWGjOeahOmCo+S4gOWIu++8jOmch+aDiuWcsOWPkeeOsOWls+S4u+inkuern+eEtuWwseaYr+iHquW3seW5s+aXpemHjOmrmOmrmOWcqOS4iueahOaAp+aEn+Wls+iAgeW4iO+8geeGn+aenOefreWJp1dFQuaPkOS+m+OAiuiLj+iAgeW4iOeahOijuOi0t+S6uueUn++8iOmHkeW4geino+mUge+8ieOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDXpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ0OTcsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAxVDE2OjA5OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMjRUMTI6MzE6MjJaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTAzVDA3OjQ4OjU3WiIsInRoZW1lSWRzIjpbMTI2ODVdLCJ0aGVtZU5hbWVzIjpbIumDveW4giJdLCJ0aGVtZVNsdWdzIjpbImR1c2hpIl0sImNhdGVnb3J5SWRzIjpbMTExMDUsMTExMDFdLCJ0aXRsZSI6IumHnOWxseijuOihjO+8iOWFqDnpm4bvvIkiLCJwbGF5TmFtZSI6IumHnOWxseijuOihjCIsImRlc2NyaXB0aW9uIjoi6auY6YCf6KGM6am255qES1RY5YiX6L2m5LiK56qB54S254iG5Y+R5oGQ5oCW57ud5Lym55qE5Lin5bC454uC5r2u77yM5p6X5a6H5oOK5oGQ5Zyw5Y+R546w5Lin5bC456uf54S25Y+q5a+56KGj54mp5pWP5oSf77yM5Y+q6KaB5YWo6Lqr6LWk6KO45L6/6IO95a6e546w5a6M576O6ZqQ5b2i44CC5Li65LqG5Zyo6KGA6IWl5ZGz5byl5ryr55qE6L2m5Y6i5Lit5rS75ZG944CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6Yec5bGx6KO46KGM44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysOembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJmdXNoYW5sIiwiZGVzYyI6IumrmOmAn+ihjOmptueahEtUWOWIl+i9puS4iueqgeeEtueIhuWPkeaBkOaAlue7neS8pueahOS4p+WwuOeLgua9ru+8jOael+Wuh+aDiuaBkOWcsOWPkeeOsOS4p+WwuOern+eEtuWPquWvueiho+eJqeaVj+aEn++8jOWPquimgeWFqOi6q+i1pOijuOS+v+iDveWunueOsOWujOe+jumakOW9ouOAguS4uuS6huWcqOihgOiFpeWRs+W8pea8q+eahOi9puWOouS4rea0u+WRveOAgiIsImFuY2hvciI6IueIseixhuS8oOWqkiIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9mNC9pby8xMDQ5L3BsYXlsZXRfY292ZXJfYTRjNGIzY2M0YjI5MTk2Mi5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2wxL2V0LzEwNDkvcGxheWxldF9jb3Zlcl9hNGM0YjNjYzRiMjkxOTYyLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg2OF0sInRhZ05hbWVzIjpbIuacq+aXpeW6n+WcnyJdLCJ0YWdTbHVncyI6WyJtb3JpZmVpdHUiXSwidG90YWxFcGlzb2RlIjo5LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNzEsImhlYXRWYWx1ZSI6MTgyNDgsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxMiwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0Mjo1OC4zNjlaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMTowMDoxOS41NFoiLCJzZW9JbmZvIjp7InRpdGxlIjoi6Yec5bGx6KO46KGM77yI5YWoOembhu+8iSIsImtleXdvcmxkIjpbIumHnOWxseijuOihjCIsIuacq+aXpeaxgueUnyIsIuWFqOijuOmakOW9oiIsIumHnOWxseijuOihjOWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuael+WuhyIsIuWkj+aZtCIsIualmuaciCIsIumHkeato+eGmSJdLCJkZXNjcmlwdGlvbiI6IumrmOmAn+ihjOmptueahEtUWOWIl+i9puS4iueqgeeEtueIhuWPkeaBkOaAlue7neS8pueahOS4p+WwuOeLgua9ru+8jOael+Wuh+aDiuaBkOWcsOWPkeeOsOS4p+WwuOern+eEtuWPquWvueiho+eJqeaVj+aEn++8jOWPquimgeWFqOi6q+i1pOijuOS+v+iDveWunueOsOWujOe+jumakOW9ouOAguS4uuS6huWcqOihgOiFpeWRs+W8pea8q+eahOi9puWOouS4rea0u+WRveOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiumHnOWxseijuOihjOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDnpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ1NDksInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3IjpmYWxzZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMC0zMFQxMDoyMTozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTEwLTAzVDEwOjI1OjAwWiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMC0wM1QxMToyNDoyOFoiLCJ0aGVtZUlkcyI6WzEyNjg1XSwidGhlbWVOYW1lcyI6WyLpg73luIIiXSwidGhlbWVTbHVncyI6WyJkdXNoaSJdLCJjYXRlZ29yeUlkcyI6WzExMTAxXSwidGl0bGUiOiLlpbPlj4vluK7miJHmk43pl7ronJwiLCJwbGF5TmFtZSI6IuWls+WPi+W4ruaIkeaTjemXuuicnCIsImRlc2NyaXB0aW9uIjoi5oOo6YGt5aSx5oGL5omT5Ye755qE6Ze66Jyc5rex5aSc55m76Zeo5YCf5a6/77yM5LiJ5Liq5Lq65oyk5Zyo5ZCM5LiA5byg5bqK5LiK5pWj5Y+R552A5peg5bC955qE5bC05bCs5LiO6K+h5byC44CC5Y6f5pys5Y+q5piv5Ye65LqO5peg5aWI55qE55WZ5a6/6Zmq5Ly077yM5Y205Zyo5ZCO5Y2K5aSc5pqX5r2u5rG55raM55qE56m65rCU5Lit5b275bqV5aSx5o6n77yM5LiA5Zy656qB56C06YGT5b635bqV57q/55qE56aB5b+M5oSP5aSW5Zyo6YC85LuE55qE56m66Ze05YaF6L2w54S254K46KOC44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5aWz5Y+L5biu5oiR5pON6Ze66Jyc44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJudnlvdWJhIiwiZGVzYyI6IuaDqOmBreWkseaBi+aJk+WHu+eahOmXuuicnOa3seWknOeZu+mXqOWAn+Wuv++8jOS4ieS4quS6uuaMpOWcqOWQjOS4gOW8oOW6iuS4iuaVo+WPkeedgOaXoOWwveeahOWwtOWwrOS4juivoeW8guOAguWOn+acrOWPquaYr+WHuuS6juaXoOWliOeahOeVmeWuv+mZquS8tO+8jOWNtOWcqOWQjuWNiuWknOaal+a9ruaxuea2jOeahOepuuawlOS4reW9u+W6leWkseaOp++8jOS4gOWcuueqgeegtOmBk+W+t+W6lee6v+eahOemgeW/jOaEj+WkluWcqOmAvOS7hOeahOepuumXtOWGhei9sOeEtueCuOijguOAgiIsImFuY2hvciI6Ii0iLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvaTAvY3QvMTA0OS9wbGF5bGV0X2NvdmVyXzY4NDcyMWQ4ZGFkNzNiY2MuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUzLDEyODU5LDEyODU1XSwidGFnTmFtZXMiOlsiQUnmiJDkurrnn63liaciLCLoibPpgYciLCLpg73luIIiXSwidGFnU2x1Z3MiOlsiQ1JESiIsInlhbnl1IiwiZHVzaGkiXSwidG90YWxFcGlzb2RlIjozLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNTcsImhlYXRWYWx1ZSI6MTg0MjEsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxOSwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0Njo1Mi41M1oiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAxOjAwOjE5LjQ0OFoiLCJzZW9JbmZvIjp7InRpdGxlIjoi5aWz5Y+L5biu5oiR5pON6Ze66JycIiwia2V5d29ybGQiOlsi5aWz5Y+L5biu5oiR5pON6Ze66JycIiwi6Ze66Jyc5YCf5a6/Iiwi56aB5b+M54uC5LmxIiwi5aWz5Y+L5biu5oiR5pON6Ze66Jyc5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5aSx5oGL6Ze66JycIiwi54ut56qE56m66Ze0Il0sImRlc2NyaXB0aW9uIjoi5oOo6YGt5aSx5oGL5omT5Ye755qE6Ze66Jyc5rex5aSc55m76Zeo5YCf5a6/77yM5LiJ5Liq5Lq65oyk5Zyo5ZCM5LiA5byg5bqK5LiK5pWj5Y+R552A5peg5bC955qE5bC05bCs5LiO6K+h5byC44CC5Y6f5pys5Y+q5piv5Ye65LqO5peg5aWI55qE55WZ5a6/6Zmq5Ly077yM5Y205Zyo5ZCO5Y2K5aSc5pqX5r2u5rG55raM55qE56m65rCU5Lit5b275bqV5aSx5o6n77yM5LiA5Zy656qB56C06YGT5b635bqV57q/55qE56aB5b+M5oSP5aSW5Zyo6YC85LuE55qE56m66Ze05YaF6L2w54S254K46KOC44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5aWz5Y+L5biu5oiR5pON6Ze66Jyc44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDU5OCwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOmZhbHNlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTEwLTMwVDA2OjUzOjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMTJUMTA6NTQ6NDBaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTAzVDA3OjQ3OjIyWiIsInRoZW1lSWRzIjpbMTI2ODRdLCJ0aGVtZU5hbWVzIjpbIuepv+i2iiJdLCJ0aGVtZVNsdWdzIjpbImNodWFueXVlIl0sImNhdGVnb3J5SWRzIjpbMTExMDUsMTExMDFdLCJ0aXRsZSI6IjUw5YWD5Lmw5pat5Lq65aa777yI5YWoMTTpm4bvvIkiLCJwbGF5TmFtZSI6IjUw5YWD5Lmw5pat5Lq65aa7IiwiZGVzY3JpcHRpb24iOiLmnpflpKnmjo/lv4Pmjo/ogrrnnJ/or5rnm7jlvoXkuInlubTnmoTmt7Hmg4XlpbPlj4vvvIznq5/nhLblnKjog4zlnLDph4zlgbfmg4Xml7bov5jogobml6Dlv4zmg67lnLDorqnku5bljrvkubDpgb/lrZXlpZfjgILkuIflv7Xkv7HngbDkuYvkuIvvvIzku5bmhI/lpJbop4nphpLkuobpnIfmkrzkuJbkv5fnmoTigJzkurrlprvkubDmlq3ns7vnu5/igJ3jgILogIzns7vnu5/op6PplIHnmoTnrKzkuIDkuKrkubDmlq3lr7nosaHjgILnhp/mnpznn63liadXRULmj5DkvpvjgIo1MOWFg+S5sOaWreS6uuWmu+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDE06ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6IjUweXVhbm0iLCJkZXNjIjoi5p6X5aSp5o6P5b+D5o6P6IK655yf6K+a55u45b6F5LiJ5bm055qE5rex5oOF5aWz5Y+L77yM56uf54S25Zyo6IOM5Zyw6YeM5YG35oOF5pe26L+Y6IKG5peg5b+M5oOu5Zyw6K6p5LuW5Y675Lmw6YG/5a2V5aWX44CC5LiH5b+15L+x54Gw5LmL5LiL77yM5LuW5oSP5aSW6KeJ6YaS5LqG6ZyH5pK85LiW5L+X55qE4oCc5Lq65aa75Lmw5pat57O757uf4oCd44CC6ICM57O757uf6Kej6ZSB55qE56ys5LiA5Liq5Lmw5pat5a+56LGh44CCIiwiYW5jaG9yIjoi5ZGo5aSn6JCMIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3dqL2NvLzEwNDkvcGxheWxldF9jb3Zlcl85M2RmY2FhNzc0NDFlN2VjLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvczkvbWMvMTA0OS9wbGF5bGV0X2NvdmVyXzkzZGZjYWE3NzQ0MWU3ZWMuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODU1LDEyODczLDEyODc0XSwidGFnTmFtZXMiOlsi6YO95biCIiwi57O757ufIiwi5byC6IO96KeJ6YaSIl0sInRhZ1NsdWdzIjpbImR1c2hpIiwieGl0b25nIiwiWU5KWCJdLCJ0b3RhbEVwaXNvZGUiOjE0LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNTEsImhlYXRWYWx1ZSI6MTY3NjYsImNvdW50Q29sbGVjdCI6MSwiY291bnRMaWtlIjoxOSwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0NzozMC40NjNaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMTowMDoxOS4zOTVaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IjUw5YWD5Lmw5pat5Lq65aa777yI5YWoMTTpm4bvvIkiLCJrZXl3b3JsZCI6WyI1MOWFg+S5sOaWreS6uuWmuyIsIuezu+e7n+WkjeS7hyIsIuS6uuWmu+S5sOaWrSIsIjUw5YWD5Lmw5pat5Lq65aa75a6M5pW054mIIiwi5Zyo57q/55yLIiwi5p6X5aSpIiwi546L5by6Iiwi5aiH5aa7Il0sImRlc2NyaXB0aW9uIjoi5p6X5aSp5o6P5b+D5o6P6IK655yf6K+a55u45b6F5LiJ5bm055qE5rex5oOF5aWz5Y+L77yM56uf54S25Zyo6IOM5Zyw6YeM5YG35oOF5pe26L+Y6IKG5peg5b+M5oOu5Zyw6K6p5LuW5Y675Lmw6YG/5a2V5aWX44CC5LiH5b+15L+x54Gw5LmL5LiL77yM5LuW5oSP5aSW6KeJ6YaS5LqG6ZyH5pK85LiW5L+X55qE4oCc5Lq65aa75Lmw5pat57O757uf4oCd44CC6ICM57O757uf6Kej6ZSB55qE56ys5LiA5Liq5Lmw5pat5a+56LGh44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CKNTDlhYPkubDmlq3kurrlprvjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxNOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDYzMywic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOmZhbHNlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTEwLTMwVDA2OjM2OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMTBUMDU6MDg6MDBaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA2VDA4OjI1OjI4WiIsInRoZW1lSWRzIjpbMTI2ODRdLCJ0aGVtZU5hbWVzIjpbIuepv+i2iiJdLCJ0aGVtZVNsdWdzIjpbImNodWFueXVlIl0sImNhdGVnb3J5SWRzIjpbMTExMDFdLCJ0aXRsZSI6IuaXtuWBnOaJi+ihqO+8iOWFqDjpm4bvvIkiLCJwbGF5TmFtZSI6IuaXtuWBnOaJi+ihqCIsImRlc2NyaXB0aW9uIjoi5Y+q6KaB6L276L275oyJ5Yqo6KGo5Yag77yM5pW05Liq5a6i5Y6F556s6Ze06Zm35YWl5q275a+C44CC5oCA5a2V5YWt5Liq5pyI55qE5aeR5aaI5pW05Liq5Lq66KKr5a6a5qC85Zyo5rKZ5Y+R5LiK77yM6aWx5ruh55qE6IO46YOo5a6M5YWo6KKS6Zyy77yM5Lmz5pmV5rex6YKD77yM5aW25aS06L+Y5oyC552A5rip54Ot55qE5Lmz5ru077yM5LuW6L+r5LiN5Y+K5b6F5L+v6Lqr5ZCr5L2P77yM5rWT6YOB55qE5aW25rC0556s6Ze05raM5YWl5ZaJ5ZKZ44CC5LuF5Ymp5YCS6K6h5pe25Y2B56eS44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5pe25YGc5omL6KGo44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysOembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJzaGl0aW5nIiwiZGVzYyI6IuWPquimgei9u+i9u+aMieWKqOihqOWGoO+8jOaVtOS4quWuouWOheeerOmXtOmZt+WFpeatu+WvguOAguaAgOWtleWFreS4quaciOeahOWnkeWmiOaVtOS4quS6uuiiq+WumuagvOWcqOaymeWPkeS4iu+8jOmlsea7oeeahOiDuOmDqOWujOWFqOiikumcsu+8jOS5s+aZlea3semCg++8jOWltuWktOi/mOaMguedgOa4qeeDreeahOS5s+a7tO+8jOS7lui/q+S4jeWPiuW+heS/r+i6q+WQq+S9j++8jOa1k+mDgeeahOWltuawtOeerOmXtOa2jOWFpeWWieWSmeOAguS7heWJqeWAkuiuoeaXtuWNgeenkuOAgiIsImFuY2hvciI6InhpbmdsYW4iLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvbTEvdGgvMTA0OS9wbGF5bGV0X2NvdmVyXzVhZjE2OTc2MWUzMTc5YjUuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS8xby8xNi8xMDQ5L3BsYXlsZXRfY292ZXJfNWFmMTY5NzYxZTMxNzliNS5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NjVdLCJ0YWdOYW1lcyI6WyLml7bpl7TmmoLlgZwiXSwidGFnU2x1Z3MiOlsiU0paVCJdLCJ0b3RhbEVwaXNvZGUiOjksInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjEzMSwiaGVhdFZhbHVlIjoxNTMzMywiY291bnRDb2xsZWN0IjoxLCJjb3VudExpa2UiOjEwLCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ3OjUwLjk3NVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjAyLjkzMloiLCJzZW9JbmZvIjp7InRpdGxlIjoi5pe25YGc5omL6KGo77yI5YWoOOmbhu+8iSIsImtleXdvcmxkIjpbIuaXtuWBnOaJi+ihqCIsIuaXtumXtOaaguWBnCIsIuWnkeWmiOivseaDkSIsIuaXtuWBnOaJi+ihqOWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuWtleacn+WnkeWmiCIsIuWmiOWmiCJdLCJkZXNjcmlwdGlvbiI6IuWPquimgei9u+i9u+aMieWKqOihqOWGoO+8jOaVtOS4quWuouWOheeerOmXtOmZt+WFpeatu+WvguOAguaAgOWtleWFreS4quaciOeahOWnkeWmiOaVtOS4quS6uuiiq+WumuagvOWcqOaymeWPkeS4iu+8jOmlsea7oeeahOiDuOmDqOWujOWFqOiikumcsu+8jOS5s+aZlea3semCg++8jOWltuWktOi/mOaMguedgOa4qeeDreeahOS5s+a7tO+8jOS7lui/q+S4jeWPiuW+heS/r+i6q+WQq+S9j++8jOa1k+mDgeeahOWltuawtOeerOmXtOa2jOWFpeWWieWSmeOAguS7heWJqeWAkuiuoeaXtuWNgeenkuOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuaXtuWBnOaJi+ihqOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDnpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ2MzYsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3IjpmYWxzZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMC0yOVQwNjo1NTozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTA5LTExVDAzOjM1OjA1WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wM1QwNzoyMjo1NloiLCJ0aGVtZUlkcyI6WzEyNjg2XSwidGhlbWVOYW1lcyI6WyLkubHkvKYiXSwidGhlbWVTbHVncyI6WyJsdWFubHVuIl0sImNhdGVnb3J5SWRzIjpbMTExMDQsMTExMDFdLCJ0aXRsZSI6IuaIkeeahOWys+avjeiLj+aym+ecn++8iOWFqDM16ZuG77yJIiwicGxheU5hbWUiOiLmiJHnmoTlsrPmr43oi4/mspvnnJ8iLCJkZXNjcmlwdGlvbiI6Iuael+mBk+aYr+S4qua1kei6q+aVo+WPkeedgOaIkOeGn+eUt+S6uumtheWKm+eahOaZrumAmumdkuW5tO+8jOWNtOWboOS4gOWcuuWRvei/kOeahOmUmeS9jeWNt+WFpeS6huS4gOauteaegeWFtuemgeW/jOeahOeIseaBqOe6oOiRm+S4reOAguW9k+aIkOeGn+S8mOmbheOAgemjjumfteeKueWtmOeahOiLj+aym+ecn+S7peWys+avjei6q+S7veWgguiAjOeah+S5i+WcsOi1sOi/m+S7lueahOeUn+a0u++8jOWOn+acrOW5s+mdmeeahOWutuW6reW6lee6v+iiq+WxguWxguaSleW8gOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuaIkeeahOWys+avjeiLj+aym+ecn+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDM16ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6IndvZGV5dTIiLCJkZXNjIjoi5p6X6YGT5piv5Liq5rWR6Lqr5pWj5Y+R552A5oiQ54af55S35Lq66a2F5Yqb55qE5pmu6YCa6Z2S5bm077yM5Y205Zug5LiA5Zy65ZG96L+Q55qE6ZSZ5L2N5Y235YWl5LqG5LiA5q615p6B5YW256aB5b+M55qE54ix5oGo57qg6JGb5Lit44CC5b2T5oiQ54af5LyY6ZuF44CB6aOO6Z+154q55a2Y55qE6IuP5rKb55yf5Lul5bKz5q+N6Lqr5Lu95aCC6ICM55qH5LmL5Zyw6LWw6L+b5LuW55qE55Sf5rS777yM5Y6f5pys5bmz6Z2Z55qE5a625bqt5bqV57q/6KKr5bGC5bGC5pKV5byA44CCIiwiYW5jaG9yIjoieWUiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2Uvcm4vYjMvMTA0OS9wbGF5bGV0X2NvdmVyXzFlNTdlYTU1YWEwMTNlNWQuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS8xcS9kay8xMDQ5L3BsYXlsZXRfY292ZXJfMWU1N2VhNTVhYTAxM2U1ZC5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NjBdLCJ0YWdOYW1lcyI6WyLkubHkvKYiXSwidGFnU2x1Z3MiOlsibHVhbmx1biJdLCJ0b3RhbEVwaXNvZGUiOjM1LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNTEsImhlYXRWYWx1ZSI6MTYzNzcsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxMSwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0Nzo1Mi40NzJaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDowNS42NVoiLCJzZW9JbmZvIjp7InRpdGxlIjoi5oiR55qE5bKz5q+N6IuP5rKb55yf77yI5YWoMzXpm4bvvIkiLCJrZXl3b3JsZCI6WyLmiJHnmoTlsrPmr43oi4/mspvnnJ8iLCLlrrbluq3kvKbnkIYiLCLlsrPmr43or7Hmg5EiLCLmiJHnmoTlsrPmr43oi4/mspvnnJ/lrozmlbTniYgiLCLlnKjnur/nnIsiLCLmnpfpgZMiLCLoi4/mspvnnJ8iXSwiZGVzY3JpcHRpb24iOiLmnpfpgZPmmK/kuKrmtZHouqvmlaPlj5HnnYDmiJDnhp/nlLfkurrprYXlipvnmoTmma7pgJrpnZLlubTvvIzljbTlm6DkuIDlnLrlkb3ov5DnmoTplJnkvY3ljbflhaXkuobkuIDmrrXmnoHlhbbnpoHlv4znmoTniLHmgajnuqDokZvkuK3jgILlvZPmiJDnhp/kvJjpm4XjgIHpo47pn7XnirnlrZjnmoToi4/mspvnnJ/ku6XlsrPmr43ouqvku73loILogIznmofkuYvlnLDotbDov5vku5bnmoTnlJ/mtLvvvIzljp/mnKzlubPpnZnnmoTlrrbluq3lupXnur/ooqvlsYLlsYLmkpXlvIDjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmiJHnmoTlsrPmr43oi4/mspvnnJ/jgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwzNembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDYyMCwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOmZhbHNlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTEwLTI5VDAyOjMyOjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMDRUMDM6MTI6NTJaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTA5VDAyOjMzOjM3WiIsInRoZW1lSWRzIjpbMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNCwxMTEwMV0sInRpdGxlIjoi5q+N5a2Q5ZCM5qyi77yI5YWoMTLpm4bvvIkiLCJwbGF5TmFtZSI6IuavjeWtkOWQjOasoiIsImRlc2NyaXB0aW9uIjoi5q+N5Lqy6Lqr5Li66L+c6L+R6Ze75ZCN55qE57ud6Imy6Iie6LmI6ICB5biI77yM5LiN5LuF6Lqr5q615aaW5aiG5aSa5ae/77yM5pu05pWj5Y+R552A5oiQ54af5aWz5oCn6Ie05ZG955qE6Iqs6Iqz44CC5bCR5bm06ZW/5pyf5pqX5Lit56ql5o6i552A5q+N5Lqy6YKj5pu85aaZ55qE6Iie5ae/77yM5bCG5YaF5b+D5rex5aSE6ZqQ56eY6ICM55av54uC55qE54ix5oWV5LiO5oOF5oSr5pel5aSc5ruL5YW744CC5b2T5p+Q5Liq5rex5aSc5Lik5Lq654us5aSE5LiA5a6k44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5q+N5a2Q5ZCM5qyi44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTLpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoibXV6aXRvbiIsImRlc2MiOiLmr43kurLouqvkuLrov5zov5Hpl7vlkI3nmoTnu53oibLoiJ7ouYjogIHluIjvvIzkuI3ku4XouqvmrrXlppblqIblpJrlp7/vvIzmm7TmlaPlj5HnnYDmiJDnhp/lpbPmgKfoh7Tlkb3nmoToiqzoirPjgILlsJHlubTplb/mnJ/mmpfkuK3nqqXmjqLnnYDmr43kurLpgqPmm7zlppnnmoToiJ7lp7/vvIzlsIblhoXlv4Pmt7HlpITpmpDnp5jogIznlq/ni4LnmoTniLHmhZXkuI7mg4XmhKvml6XlpJzmu4vlhbvjgILlvZPmn5DkuKrmt7HlpJzkuKTkurrni6zlpITkuIDlrqTjgIIiLCJhbmNob3IiOiJzaGFuaHVvIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3U2LzB4LzEwNDkvcGxheWxldF9jb3Zlcl85OTVjNGY4ZjA4ZTA1NDk0LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvOXAvbWQvMTA0OS9wbGF5bGV0X2NvdmVyXzk5NWM0ZjhmMDhlMDU0OTQuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODYxLDEyODYwLDEyODU2XSwidGFnTmFtZXMiOlsi5q+N5a2QIiwi5Lmx5LymIiwi6IGM5Zy66LCD5pWZIl0sInRhZ1NsdWdzIjpbIm11emkiLCJsdWFubHVuIiwiWkNUSiJdLCJ0b3RhbEVwaXNvZGUiOjEyLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxMzYsImhlYXRWYWx1ZSI6MTc2MTIsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoyMCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0Nzo0My4yMDdaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDowMC4xNDJaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuavjeWtkOWQjOasou+8iOWFqDEy6ZuG77yJIiwia2V5d29ybGQiOlsi5q+N5a2Q5ZCM5qyiIiwi6Iie6LmI6ICB5biIIiwi56aB5b+M5oOF5oSrIiwi5q+N5a2Q5ZCM5qyi5a6M5pW054mIIiwi5Zyo57q/55yLIiwi57ud6Imy5q+N5LqyIiwi5bCR5bm0Il0sImRlc2NyaXB0aW9uIjoi5q+N5Lqy6Lqr5Li66L+c6L+R6Ze75ZCN55qE57ud6Imy6Iie6LmI6ICB5biI77yM5LiN5LuF6Lqr5q615aaW5aiG5aSa5ae/77yM5pu05pWj5Y+R552A5oiQ54af5aWz5oCn6Ie05ZG955qE6Iqs6Iqz44CC5bCR5bm06ZW/5pyf5pqX5Lit56ql5o6i552A5q+N5Lqy6YKj5pu85aaZ55qE6Iie5ae/77yM5bCG5YaF5b+D5rex5aSE6ZqQ56eY6ICM55av54uC55qE54ix5oWV5LiO5oOF5oSr5pel5aSc5ruL5YW744CC5b2T5p+Q5Liq5rex5aSc5Lik5Lq654us5aSE5LiA5a6k44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5q+N5a2Q5ZCM5qyi44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTLpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ2MDEsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3IjpmYWxzZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMC0yN1QxOToyNjozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTA5LTE2VDEyOjA5OjMxWiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMC0wOVQwMjozODowNVoiLCJ0aGVtZUlkcyI6WzEyNjg2XSwidGhlbWVOYW1lcyI6WyLkubHkvKYiXSwidGhlbWVTbHVncyI6WyJsdWFubHVuIl0sImNhdGVnb3J5SWRzIjpbMTExMDQsMTExMDFdLCJ0aXRsZSI6IuS7juWcsOeLseW9kuadpe+8mua3sea4iuiwg+aVme+8iOWFqDEw6ZuG77yJIiwicGxheU5hbWUiOiLku47lnLDni7HlvZLmnaXvvJrmt7HmuIrosIPmlZkiLCJkZXNjcmlwdGlvbiI6IuS4gOWcuuaDqOe7neS6uuWvsOeahOixqumXqOmYtOiwi+WvvOiHtOiwouWutuS4gOWknOS5i+mXtOa7oemXqOimhueBre+8jOavjeS6suabtOaYr+W9k+S8l+mBreWPl+aXoOaDhei9ruWluOWQjuWHhOWOieaDqOatu+OAguWOhue7j+S6lOW5tOaal+aXoOWkqeaXpeeahOihgOiJsumAg+S6oe+8jOS7juaXoOmXtOWcsOeLseS4reW8uuWKv+W9kuadpeeahOiwouWutueLrOWtkOikquWOu+aJgOaciemdkua2qe+8jOWMlui6q+e0ouWRveS/rue9l+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuS7juWcsOeLseW9kuadpe+8mua3sea4iuiwg+aVmeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImNvbmdkaXkiLCJkZXNjIjoi5LiA5Zy65oOo57ud5Lq65a+w55qE6LGq6Zeo6Zi06LCL5a+86Ie06LCi5a625LiA5aSc5LmL6Ze05ruh6Zeo6KaG54Gt77yM5q+N5Lqy5pu05piv5b2T5LyX6YGt5Y+X5peg5oOF6L2u5aW45ZCO5YeE5Y6J5oOo5q2744CC5Y6G57uP5LqU5bm05pqX5peg5aSp5pel55qE6KGA6Imy6YCD5Lqh77yM5LuO5peg6Ze05Zyw54ux5Lit5by65Yq/5b2S5p2l55qE6LCi5a6254us5a2Q6KSq5Y675omA5pyJ6Z2S5rap77yM5YyW6Lqr57Si5ZG95L+u572X44CCIiwiYW5jaG9yIjoieWUiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvaDEvdm4vMTA0OS9wbGF5bGV0X2NvdmVyXzk0YTNhMDI1NDFmODdkOGUuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9ybC9rdS8xMDQ5L3BsYXlsZXRfY292ZXJfOTRhM2EwMjU0MWY4N2Q4ZS5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NjEsMTI4NTYsMTI4NjZdLCJ0YWdOYW1lcyI6WyLmr43lrZAiLCLogYzlnLrosIPmlZkiLCLph43lj6MiXSwidGFnU2x1Z3MiOlsibXV6aSIsIlpDVEoiLCJ6aG9uZ2tvdSJdLCJ0b3RhbEVwaXNvZGUiOjEwLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxMzgsImhlYXRWYWx1ZSI6MTY0MjgsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0NzozMi4zMDhaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMTowMDoxOS4zMTNaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuS7juWcsOeLseW9kuadpe+8mua3sea4iuiwg+aVme+8iOWFqDEw6ZuG77yJIiwia2V5d29ybGQiOlsi5LuO5Zyw54ux5b2S5p2l5rex5riK6LCD5pWZIiwi6LGq6Zeo5aSN5LuHIiwi5p6B6ZmQ6LCD5pWZIiwi5LuO5Zyw54ux5b2S5p2l5rex5riK6LCD5pWZ5a6M5pW054mIIiwi5Zyo57q/55yLIiwi6LCi5a6254us5a2QIiwi5LuH5Lq6Il0sImRlc2NyaXB0aW9uIjoi5LiA5Zy65oOo57ud5Lq65a+w55qE6LGq6Zeo6Zi06LCL5a+86Ie06LCi5a625LiA5aSc5LmL6Ze05ruh6Zeo6KaG54Gt77yM5q+N5Lqy5pu05piv5b2T5LyX6YGt5Y+X5peg5oOF6L2u5aW45ZCO5YeE5Y6J5oOo5q2744CC5Y6G57uP5LqU5bm05pqX5peg5aSp5pel55qE6KGA6Imy6YCD5Lqh77yM5LuO5peg6Ze05Zyw54ux5Lit5by65Yq/5b2S5p2l55qE6LCi5a6254us5a2Q6KSq5Y675omA5pyJ6Z2S5rap77yM5YyW6Lqr57Si5ZG95L+u572X44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5LuO5Zyw54ux5b2S5p2l77ya5rex5riK6LCD5pWZ44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX1dLCJ0b3BpY0xpc3QiOltdfSx7ImlkIjoxMTEwMiwic2x1ZyI6IllDSlgiLCJ0aXRsZSI6IuWOn+WIm+eyvumAiSIsImRlc2MiOiIiLCJrZXl3b3JkIjpbXSwibGFiZWwiOiIiLCJzdHlsZSI6IkIiLCJjYXJkQmFja2dyb3VuZEltYWdlIjoiIiwibW9kdWxlVHlwZSI6MSwiZGF0YVR5cGUiOjEsInJlY29tbWVuZFR5cGUiOjAsImNhdGVnb3J5SWQiOjAsInJhbmsiOjUsImxpbWl0IjoxMiwic2VvSW5mbyI6eyJ0aXRsZSI6IueGn+aenOefreWJp+WOn+WIm+eyvumAieS4k+WMuiAtIOeDremXqEFJ5oiQ5Lq655+t5Ymn5LiO6buE5p6c54iG5qy+55+t5Ymn5ZCI6ZuGIiwia2V5d29ybGQiOlsi5Y6f5Yib57K+6YCJIiwi5Y6f5Yib55+t5YmnIiwi54af5p6c55+t5YmnIiwi6buE5p6c55+t5YmnIiwi6buE5p6cIiwiQUnmiJDkurrnn63liaciLCLmnIDng63nn63liaciLCLniIbmrL7nn63liaciLCLpobbnuqfnp4HljqgiLCLprLzniLbnnJ/kurrniYgiLCLmiJDkurrnn63liadBUFAiXSwiZGVzY3JpcHRpb24iOiLmjqLlr7vnhp/mnpznn63liafljp/liJvnsr7pgInkuJPljLrvvIzpoobnlaXlubPlj7Dni6zlrrbljKDlv4PmiZPpgKDnmoTohJHmtJ7lpKflvIDkuI7mnoHoh7Top4bop4nnm5vlrrTjgILlubPlj7Dmr4/ml6Xkv53mjIHmjIHnu63mm7TmlrDvvIzngavng63mlLblvZXkuobjgIrmnIDlvLrmmL7npLrlmajjgIvjgIHjgIrms6HpnaLnlarjgIvnrYnpq5jkurrmsJTljp/liJvlpKfmiI/jgILov5nph4zliafmg4Xlj43ovazkuI3mlq3jgIHorr7lrprmlrDlpYfov4fnmL7jgILnjrDlnKjlsLHooYzliqjkuIvovb3lrpjmlrnkuJPlsZ7npo/liKlBUFDvvIzluKbmgqjpmo/ml7bpmo/lnLDlsL3mg4XnlYXkuqvml6DlubLmibDnmoTpq5jmuIXmjozkuIrov73liafmlrDkvZPpqozvvIEifSwibGlzdCI6W3siaWQiOjE0OTc3LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOnRydWUsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDEyOjI1OjE0LjMyN1oiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDRUMDk6MDc6NDNaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA1VDA4OjU0OjIyWiIsInRoZW1lSWRzIjpbMTI2ODFdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiJdLCJjYXRlZ29yeUlkcyI6WzExMTAyXSwidGl0bGUiOiLluornrKvvvIjlhag26ZuG77yJIiwicGxheU5hbWUiOiLluornrKsiLCJkZXNjcmlwdGlvbiI6IuW6iuesq+S5i+S4iuWlueS4u+WKqOikquWwveiho+ihq++8jOi6q+S9k+WcqOeDm+WFieS4i+mipOaKlu+8jOS7jeS7peWkjeadguebruWFieeci+edgOWvueaWueOAguS4gOasoeasoea3seWFpeiuqeWlueW9u+W6lei9r+S4i+adpe+8jOa1quWPq+WOi+aKkeS4jeS9j+OAguW6iuesq+eahOemgeW/jOWcqOWknOmHjOW9u+W6leeIhuWPke+8jOWGjeS5n+aXoOazleWbnuWktOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuW6iuesq+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDbpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiY2h1YW5neiIsImRlc2MiOiLluornrKvkuYvkuIrlpbnkuLvliqjopKrlsL3ooaPooavvvIzouqvkvZPlnKjng5vlhYnkuIvpoqTmipbvvIzku43ku6XlpI3mnYLnm67lhYnnnIvnnYDlr7nmlrnjgILkuIDmrKHmrKHmt7HlhaXorqnlpbnlvbvlupXova/kuIvmnaXvvIzmtarlj6vljovmipHkuI3kvY/jgILluornrKvnmoTnpoHlv4zlnKjlpJzph4zlvbvlupXniIblj5HvvIzlho3kuZ/ml6Dms5Xlm57lpLTjgIIiLCJhbmNob3IiOiLpu4TmnpzlrpjmlrkiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvZ3Qva3cvMTA0OS9wbGF5bGV0X2NvdmVyX2MzY2M0NWUyMDdkM2NhODMuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS8yMC84MC8xMDQ5L3BsYXlsZXRfY292ZXJfYzNjYzQ1ZTIwN2QzY2E4My5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTIsMTI4NTddLCJ0YWdOYW1lcyI6WyLpu4TmnpwiLCLlj6Tku6MiXSwidGFnU2x1Z3MiOlsiaHVhbmdndW8iLCJndWRhaSJdLCJ0b3RhbEVwaXNvZGUiOjYsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjIyLCJoZWF0VmFsdWUiOjM5MDksImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNywiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozMy42WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDZUMjI6MDA6MTEuNTA2WiIsInNlb0luZm8iOnsidGl0bGUiOiIiLCJrZXl3b3JsZCI6WyLlsIblhpvkuI7ljaflupUiLCLlj6Too4Xnn63liaciLCLpu4Tmnpzljp/liJsiLCLluornrKvkuYvpl7TnmoTlvbvlupXmsonmsqYiLCLpg73luILluornrKvmg4XoibIiLCLluornrKsiLCLmt7HlhaXlpLHmjqciLCLlrozmlbTniYgiLCLlnKjnur/nnIsiLCLluornrKvlpJznmoTnsr7lh4bmt7HlhaUiLCLluornrKvkuIrnmoTlpLHmjqfpoqTmipYiXSwiZGVzY3JpcHRpb24iOiLluornrKvkuYvkuIrlpbnkuLvliqjopKrlsL3ooaPooavvvIzouqvkvZPlnKjng5vlhYnkuIvpoqTmipbvvIzku43ku6XlpI3mnYLnm67lhYnnnIvnnYDlr7nmlrnjgILkuIDmrKHmrKHmt7HlhaXorqnlpbnlvbvlupXova/kuIvmnaXvvIzmtarlj6vljovmipHkuI3kvY/jgILluornrKvnmoTnpoHlv4zlnKjlpJzph4zlvbvlupXniIblj5HvvIzlho3kuZ/ml6Dms5Xlm57lpLTjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrluornrKvjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw26ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0OTc4LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOnRydWUsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDEyOjIzOjU3LjU1NFoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDRUMDg6NDE6MjdaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA1VDA4OjU0OjIyWiIsInRoZW1lSWRzIjpbMTI2ODFdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiJdLCJjYXRlZ29yeUlkcyI6WzExMTAyXSwidGl0bGUiOiLlpojlpojmiJHniLHkvaDvvIjlhagxMOmbhu+8iSIsInBsYXlOYW1lIjoi5aaI5aaI5oiR54ix5L2gIiwiZGVzY3JpcHRpb24iOiLlpojlpojotbfliJ3lronpnZnpobrku47vvIzlg4/msonpu5jnmoTnvpTnvorjgILlnKjlr4bpl63miL/pl7Tph4zvvIzkvKroo4XooqvkuIDngrnngrnmj63lvIDjgILllpjmga/liLvmhI/ljovkvY7vvIzouqvkvZPljbTlnKjmiJHnmoToioLlpY/kuIvovbvovbvpoqTmipbjgILmr4/kuIDmrKHmt7HlhaXpg73orqnlpbnku47pmpDlv43otbDlkJHlpLHmjqfvvIzmnIDnu4jlvbvlupXmsonmsqbvvIzlronpnZnkuI3lho3vvIzlj6rliankuIvljovmipHkuI3kvY/nmoTlkbvlkJ/vvIznpoHlv4znmoTmr43lrZDlhbPns7vlvbvlupXltKnlnY/jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlpojlpojmiJHniLHkvaDjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJtbXdhbiIsImRlc2MiOiLlpojlpojotbfliJ3lronpnZnpobrku47vvIzlg4/msonpu5jnmoTnvpTnvorjgILlnKjlr4bpl63miL/pl7Tph4zvvIzkvKroo4XooqvkuIDngrnngrnmj63lvIDjgILllpjmga/liLvmhI/ljovkvY7vvIzouqvkvZPljbTlnKjmiJHnmoToioLlpY/kuIvovbvovbvpoqTmipbjgILmr4/kuIDmrKHmt7HlhaXpg73orqnlpbnku47pmpDlv43otbDlkJHlpLHmjqfvvIzmnIDnu4jlvbvlupXmsonmsqbvvIzlronpnZnkuI3lho3vvIzlj6rliankuIvljovmipHkuI3kvY/nmoTlkbvlkJ/vvIznpoHlv4znmoTmr43lrZDlhbPns7vlvbvlupXltKnlnY/jgIIiLCJhbmNob3IiOiLpu4TmnpzlrpjmlrkyIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL200LzFtLzEwNDkvcGxheWxldF9jb3Zlcl8xOTVhYzllZWUzOTQyNTM5LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvODAvc3QvMTA0OS9wbGF5bGV0X2NvdmVyXzE5NWFjOWVlZTM5NDI1MzkuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUyLDEyODYxXSwidGFnTmFtZXMiOlsi6buE5p6cIiwi5q+N5a2QIl0sInRhZ1NsdWdzIjpbImh1YW5nZ3VvIiwibXV6aSJdLCJ0b3RhbEVwaXNvZGUiOjEwLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoyNCwiaGVhdFZhbHVlIjo1MzA0LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTksImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDZUMDU6MDc6MzQuMDRaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMDowMDoxMS40OThaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuavjeWtkOWFs+ezuyIsIum7hOaenOWOn+WImyIsIuWmiOWmiOaIkeeIseS9oCIsIuavjeWtkOemgeW/jOaDheiJsiIsIuWmiOWmiCIsIua3seWknOayieaypiIsIuWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuWmiOWmiOa3seWknOeahOayieaypiIsIuaIkeeIseS9oOWmiOWmiCJdLCJkZXNjcmlwdGlvbiI6IuWmiOWmiOi1t+WIneWuiemdmemhuuS7ju+8jOWDj+ayiem7mOeahOe+lOe+iuOAguWcqOWvhumXreaIv+mXtOmHjO+8jOS8quijheiiq+S4gOeCueeCueaPreW8gOOAguWWmOaBr+WIu+aEj+WOi+S9ju+8jOi6q+S9k+WNtOWcqOaIkeeahOiKguWlj+S4i+i9u+i9u+mipOaKluOAguavj+S4gOasoea3seWFpemDveiuqeWlueS7jumakOW/jei1sOWQkeWkseaOp++8jOacgOe7iOW9u+W6leayieaypu+8jOWuiemdmeS4jeWGje+8jOWPquWJqeS4i+WOi+aKkeS4jeS9j+eahOWRu+WQn++8jOemgeW/jOeahOavjeWtkOWFs+ezu+W9u+W6leW0qeWdj+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWmiOWmiOaIkeeIseS9oOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0OTc5LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOnRydWUsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6dHJ1ZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDZUMTI6MjE6MTguNzM3WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wNFQwODozOTozNFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDVUMDg6NTQ6MjJaIiwidGhlbWVJZHMiOlsxMjY4MV0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIl0sImNhdGVnb3J5SWRzIjpbMTExMDJdLCJ0aXRsZSI6IuaIkeeahOWQiOenn+Wls+WupOWPi+S7rO+8iOWFqDLpm4bvvIkiLCJwbGF5TmFtZSI6IuaIkeeahOWQiOenn+Wls+WupOWPi+S7rCIsImRlc2NyaXB0aW9uIjoi5oiR5ZKM5Yeg5L2N5aWz5a6k5Y+L5ZCI56ef5ZCO77yM5rex5aSc55qE5ZaY5oGv6LaK5p2l6LaK5piO5pi+44CC5p+Q5aSc5aW55Lus5Li75Yqo6Leo5Z2Q5LiK5p2l77yM6Iqx56m057Sn57Sn5ZKs5L2P77yM5LiA6L655ZOt5LiA6L655omt6IWw44CC5LiA55u05YGa5Yiw5aSp5Lqu77yM5rer5rC06aG6552A5Lqk5ZCI5aSE5rWB5LqG5LiA5Zyw44CC5ZCI56ef55qE6YO95biC56aB5b+M5b275bqV5rKJ5rKm77yM5YaN5Lmf5Zue5LiN5Yiw6L+H5Y6744CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5oiR55qE5ZCI56ef5aWz5a6k5Y+L5Lus44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMumbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJoem5zeSIsImRlc2MiOiLmiJHlkozlh6DkvY3lpbPlrqTlj4vlkIjnp5/lkI7vvIzmt7HlpJznmoTllpjmga/otormnaXotormmI7mmL7jgILmn5DlpJzlpbnku6zkuLvliqjot6jlnZDkuIrmnaXvvIzoirHnqbTntKfntKflkqzkvY/vvIzkuIDovrnlk63kuIDovrnmia3ohbDjgILkuIDnm7TlgZrliLDlpKnkuq7vvIzmt6vmsLTpobrnnYDkuqTlkIjlpITmtYHkuobkuIDlnLDjgILlkIjnp5/nmoTpg73luILnpoHlv4zlvbvlupXmsonmsqbvvIzlho3kuZ/lm57kuI3liLDov4fljrvjgIIiLCJhbmNob3IiOiLpu4TmnpzlrpjmlrkiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvZmcva2IvMTA0OS9wbGF5bGV0X2NvdmVyX2VhNzk4MDljMWI2ZjMzODIuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9mbi90OC8xMDQ5L3BsYXlsZXRfY292ZXJfZWE3OTgwOWMxYjZmMzM4Mi5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTIsMTI4NTVdLCJ0YWdOYW1lcyI6WyLpu4TmnpwiLCLpg73luIIiXSwidGFnU2x1Z3MiOlsiaHVhbmdndW8iLCJkdXNoaSJdLCJ0b3RhbEVwaXNvZGUiOjIsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE0LCJoZWF0VmFsdWUiOjYwMzIsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxMiwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozNC43NTJaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoyMi43NVoiLCJzZW9JbmZvIjp7InRpdGxlIjoiIiwia2V5d29ybGQiOlsi5ZCI56ef55Sf5rS7Iiwi6buE5p6c5Y6f5YibIiwi5oiR55qE5ZCI56ef5aWz5a6k5Y+L5LusIiwi6YO95biC5ZCI56ef5oOF6ImyIiwi5aWz5a6k5Y+LIiwi5ZCI56ef56aB5b+MIiwi5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5ZCI56ef5aWz5a6k5Y+L55qE5rex5aSc5aSx5o6nIiwi5aWz5a6k5Y+L5Lus55qE5ZCI56ef5rKm6Zm3Il0sImRlc2NyaXB0aW9uIjoi5oiR5ZKM5Yeg5L2N5aWz5a6k5Y+L5ZCI56ef5ZCO77yM5rex5aSc55qE5ZaY5oGv6LaK5p2l6LaK5piO5pi+44CC5p+Q5aSc5aW55Lus5Li75Yqo6Leo5Z2Q5LiK5p2l77yM6Iqx56m057Sn57Sn5ZKs5L2P77yM5LiA6L655ZOt5LiA6L655omt6IWw44CC5LiA55u05YGa5Yiw5aSp5Lqu77yM5rer5rC06aG6552A5Lqk5ZCI5aSE5rWB5LqG5LiA5Zyw44CC5ZCI56ef55qE6YO95biC56aB5b+M5b275bqV5rKJ5rKm77yM5YaN5Lmf5Zue5LiN5Yiw6L+H5Y6744CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5oiR55qE5ZCI56ef5aWz5a6k5Y+L5Lus44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMumbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDk4MSwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjp0cnVlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOnRydWUsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDEyOjE4OjIzLjU2NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDRUMDg6MjQ6NTBaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA1VDA4OjU0OjIyWiIsInRoZW1lSWRzIjpbMTI2ODFdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiJdLCJjYXRlZ29yeUlkcyI6WzExMTAyXSwidGl0bGUiOiLmnaXoh6rkvoTlpbPmsonph43nmoTniLHvvIjlhag36ZuG77yJIiwicGxheU5hbWUiOiLmnaXoh6rkvoTlpbPmsonph43nmoTniLEiLCJkZXNjcmlwdGlvbiI6IuWfjuW4guWFrOWvk+eahOWknOaZmu+8jOaIkOW5tOS+hOWls+WQkeWPlOWPlOWAvuivieeWsuaDq+OAguS4gOasoeivleaOouiuqeWOn+acrOeGn+aCieeahOS6suaDheWPmOW+l+W+ruWmme+8jOS4pOS6uumDveiiq+i/q+mdouWvuei/meauteWFs+ezu+eahOi+ueeVjOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuadpeiHquS+hOWls+ayiemHjeeahOeIseOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDfpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiem5jemRhIiwiZGVzYyI6IuWfjuW4guWFrOWvk+eahOWknOaZmu+8jOaIkOW5tOS+hOWls+WQkeWPlOWPlOWAvuivieeWsuaDq+OAguS4gOasoeivleaOouiuqeWOn+acrOeGn+aCieeahOS6suaDheWPmOW+l+W+ruWmme+8jOS4pOS6uumDveiiq+i/q+mdouWvuei/meauteWFs+ezu+eahOi+ueeVjOOAgiIsImFuY2hvciI6Ium7hOaenOWumOaWuSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9qei9uNi8xMDQ5L3BsYXlsZXRfY292ZXJfZTRlYzA5Y2JmMzQ4ZjdjNS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3Y2LzBnLzEwNDkvcGxheWxldF9jb3Zlcl9lNGVjMDljYmYzNDhmN2M1LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MiwxMjg2MF0sInRhZ05hbWVzIjpbIum7hOaenCIsIuS5seS8piJdLCJ0YWdTbHVncyI6WyJodWFuZ2d1byIsImx1YW5sdW4iXSwidG90YWxFcGlzb2RlIjo3LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxMywiaGVhdFZhbHVlIjo1MjQwLCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTgsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDZUMDU6MDc6MzUuNzY4WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MjIuNjE2WiIsInNlb0luZm8iOnsidGl0bGUiOiIiLCJrZXl3b3JsZCI6WyLmnaXoh6rkvoTlpbPmsonph43nmoTniLEiLCLlrrbluq3lhbPns7siLCLpu4Tmnpzljp/liJsiXSwiZGVzY3JpcHRpb24iOiLln47luILlhazlr5PnmoTlpJzmmZrvvIzmiJDlubTkvoTlpbPlkJHlj5Tlj5TlgL7or4nnlrLmg6vjgILkuIDmrKHor5XmjqLorqnljp/mnKznhp/mgonnmoTkurLmg4Xlj5jlvpflvq7lppnvvIzkuKTkurrpg73ooqvov6vpnaLlr7nov5nmrrXlhbPns7vnmoTovrnnlYzjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmnaXoh6rkvoTlpbPmsonph43nmoTniLHjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw36ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0OTgyLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOnRydWUsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDEyOjE3OjQ1LjI4NFoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDRUMDg6MTg6MjRaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA1VDA4OjU0OjIyWiIsInRoZW1lSWRzIjpbMTI2ODFdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiJdLCJjYXRlZ29yeUlkcyI6WzExMTAyXSwidGl0bGUiOiLmsonpu5jnmoTnvpTnvorvvIjlhag46ZuG77yJIiwicGxheU5hbWUiOiLmsonpu5jnmoTnvpTnvooiLCJkZXNjcmlwdGlvbiI6IuWSjOiAgeWFrOS6ieWQteWQjuS4jumXuuicnOWOu+mFkuWQp+S5sOmGie+8jOmGkuadpeWNtOWPkeeOsOiHquW3sei1pOijuOi6uuWcqOmZjOeUn+eUt+S6uuW6iuS4iuOAguacrOaDs+mBl+W/mOe7p+e7reeUn+a0u++8jOmZjOeUn+eUteivneS7pemFkuW6l+W8gOaIv+WogeiDgeOAguS7juaLjeaRhOengeWvhueFp+W8gOWni++8jOWGjeWIsOWPmOaAgeWutuS4rea7oei2s+S7lueahOimgeaxguOAguW9k+WcuuaKiuaWh+iDuOWGheijpOiEsee7meS7luWQju+8jOS7lua4kOa4kOaPkOWHuuabtOi/h+WIhueahOimgeaxgu+8jOemgeW/jOW9u+W6leWkseaOp+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuayiem7mOeahOe+lOe+iuOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDjpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiY21kZ3kiLCJkZXNjIjoi5ZKM6ICB5YWs5LqJ5ZC15ZCO5LiO6Ze66Jyc5Y676YWS5ZCn5Lmw6YaJ77yM6YaS5p2l5Y205Y+R546w6Ieq5bex6LWk6KO46Lq65Zyo6ZmM55Sf55S35Lq65bqK5LiK44CC5pys5oOz6YGX5b+Y57un57ut55Sf5rS777yM6ZmM55Sf55S16K+d5Lul6YWS5bqX5byA5oi/5aiB6IOB44CC5LuO5ouN5pGE56eB5a+G54Wn5byA5aeL77yM5YaN5Yiw5Y+Y5oCB5a625Lit5ruh6Laz5LuW55qE6KaB5rGC44CC5b2T5Zy65oqK5paH6IO45YaF6KOk6ISx57uZ5LuW5ZCO77yM5LuW5riQ5riQ5o+Q5Ye65pu06L+H5YiG55qE6KaB5rGC77yM56aB5b+M5b275bqV5aSx5o6n44CCIiwiYW5jaG9yIjoi6buE5p6c5a6Y5pa5IiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3IxLzYwLzEwNDkvcGxheWxldF9jb3Zlcl81ODFkNDE1N2JjZWQ3MmMxLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2Uvd3kvb2UvMTA0OS9wbGF5bGV0X2NvdmVyXzU4MWQ0MTU3YmNlZDcyYzEuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUyXSwidGFnTmFtZXMiOlsi6buE5p6cIl0sInRhZ1NsdWdzIjpbImh1YW5nZ3VvIl0sInRvdGFsRXBpc29kZSI6OCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTEsImhlYXRWYWx1ZSI6Mjk0MSwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjExLCJjcmVhdGVkQXQiOiIyMDI2LTExLTA2VDA1OjA3OjM2LjI0OVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjIyLjQ5WiIsInNlb0luZm8iOnsidGl0bGUiOiIiLCJrZXl3b3JsZCI6WyLmsonpu5jnmoTnvpTnvooiLCLpu4Tmnpzljp/liJsiLCLlr4bpl63nqbrpl7QiLCLphZLlkKfphpLmnaXlkI7nmoTphZLlupflqIHog4EiLCLpg73luILpu5FtYWls5oOF6ImyIiwi5p2o5bCP5aeQIiwi6ZmM55Sf55S16K+dIiwi5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5p2o5bCP5aeQ55qE6YWS5ZCn5aSx5o6n5aScIiwi6YWS5bqX5byA5oi/5aiB6IOB5Y2H57qnIl0sImRlc2NyaXB0aW9uIjoi5ZKM6ICB5YWs5LqJ5ZC15ZCO5LiO6Ze66Jyc5Y676YWS5ZCn5Lmw6YaJ77yM6YaS5p2l5Y205Y+R546w6Ieq5bex6LWk6KO46Lq65Zyo6ZmM55Sf55S35Lq65bqK5LiK44CC5pys5oOz6YGX5b+Y57un57ut55Sf5rS777yM6ZmM55Sf55S16K+d5Lul6YWS5bqX5byA5oi/5aiB6IOB44CC5LuO5ouN5pGE56eB5a+G54Wn5byA5aeL77yM5YaN5Yiw5Y+Y5oCB5a625Lit5ruh6Laz5LuW55qE6KaB5rGC44CC5b2T5Zy65oqK5paH6IO45YaF6KOk6ISx57uZ5LuW5ZCO77yM5LuW5riQ5riQ5o+Q5Ye65pu06L+H5YiG55qE6KaB5rGC77yM56aB5b+M5b275bqV5aSx5o6n44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5rKJ6buY55qE576U576K44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysOOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDk4Mywic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjp0cnVlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wNlQxMjoxNTo0MC43ODdaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTExLTA0VDA4OjE1OjI3WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wNVQwODo1NDoyMloiLCJ0aGVtZUlkcyI6WzEyNjgxXSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMl0sInRpdGxlIjoi6YeN55Sf5ZCO5pON5YS/5aqz5pW06aG/5YWo5a6277yI5YWoM+mbhu+8iSIsInBsYXlOYW1lIjoi6YeN55Sf5ZCO5pON5YS/5aqz5pW06aG/5YWo5a62IiwiZGVzY3JpcHRpb24iOiLnmb7kur/lrrbkuLvlj5HnjrDkuInkuKrlhL/lrZDpg73kuI7oh6rlt7HmsqHmnInooYDnvJjlhbPns7vvvIzliY3kuJblsLHmraTnu4jnu5PjgILph43nlJ/lkI7vvIzku5bop4nphpLns7vnu5/vvIzph43mlrDlrqHop4bouqvovrnkurrnmoTnrpforqHvvIznnYDmiYvmuIXnkIblrrbml4/lhoXnmoTml6fotKbjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrph43nlJ/lkI7mk43lhL/lqrPmlbTpob/lhajlrrbjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwz6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6InpzaGRxaiIsImRlc2MiOiLnmb7kur/lrrbkuLvlj5HnjrDkuInkuKrlhL/lrZDpg73kuI7oh6rlt7HmsqHmnInooYDnvJjlhbPns7vvvIzliY3kuJblsLHmraTnu4jnu5PjgILph43nlJ/lkI7vvIzku5bop4nphpLns7vnu5/vvIzph43mlrDlrqHop4bouqvovrnkurrnmoTnrpforqHvvIznnYDmiYvmuIXnkIblrrbml4/lhoXnmoTml6fotKbjgIIiLCJhbmNob3IiOiLpu4TmnpzlrpjmlrkiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2Uvc2wvMDUvMTA0OS9wbGF5bGV0X2NvdmVyXzA2NDRmN2ZjMmU0NzllNTYuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9kZS9kdi8xMDQ5L3BsYXlsZXRfY292ZXJfMDY0NGY3ZmMyZTQ3OWU1Ni5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTIsMTI4NzIsMTI4NzNdLCJ0YWdOYW1lcyI6WyLpu4TmnpwiLCLph43nlJ8iLCLns7vnu58iXSwidGFnU2x1Z3MiOlsiaHVhbmdndW8iLCJDUyIsInhpdG9uZyJdLCJ0b3RhbEVwaXNvZGUiOjMsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE2LCJoZWF0VmFsdWUiOjM1NDUsImNvdW50Q29sbGVjdCI6MSwiY291bnRMaWtlIjoxOSwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozNi45MjZaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoyMi40MThaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIumHjeeUn+WQjuaTjeWEv+Wqs+aVtOmhv+WFqOWutiIsIumHjeeUn+ezu+e7nyIsIuWutuaXj+a4heeulyJdLCJkZXNjcmlwdGlvbiI6IueZvuS6v+WutuS4u+WPkeeOsOS4ieS4quWEv+WtkOmDveS4juiHquW3seayoeacieihgOe8mOWFs+ezu++8jOWJjeS4luWwseatpOe7iOe7k+OAgumHjeeUn+WQju+8jOS7luiniemGkuezu+e7n++8jOmHjeaWsOWuoeinhui6q+i+ueS6uueahOeul+iuoe+8jOedgOaJi+a4heeQhuWutuaXj+WGheeahOaXp+i0puOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiumHjeeUn+WQjuaTjeWEv+Wqs+aVtOmhv+WFqOWutuOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDPpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ5ODQsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6dHJ1ZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjp0cnVlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wNlQxMjoxNDo0OC44ODlaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTExLTA0VDA4OjAxOjQyWiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wNVQwODo1NDoyMloiLCJ0aGVtZUlkcyI6WzEyNjgxXSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMl0sInRpdGxlIjoi5ZCI5qyi5a6X5LmL5rer5q+N6K6w77yI5YWoOOmbhu+8iSIsInBsYXlOYW1lIjoi5ZCI5qyi5a6X5LmL5rer5q+N6K6wIiwiZGVzY3JpcHRpb24iOiLmnpflh6HmraPmgJ3ntKLlpoLkvZXlupTlr7nlrpfpl6jnurfkuonvvIzmhI/lpJblvpfliLDkuIDmoLnngavngbXlj4LvvIzlkLjmlLblrozngbXlipvlkI7nm7TlpZTnvo7lpbPlrZDmiL/pl7TjgILkuKTkurrpmLTpmLPkuqTlkIjvvIznvo7lpbPlsIbogonmo5LlkKvov5vlmLTph4zoiJTlvITvvIzpmo/lkI7mkoXotbflsYHogqHorqnku5bku47lkI7lpLTnjJvlubLjgILmv4Dmg4Xov4flkI7nqb/lpb3ooaPmnI3vvIzmnpflh6Hov5jkuI3lv5josIPmiI/lpbnkuIDnlarvvIzlrpfpl6jnurfkuonmmoLooqvmipvlnKjohJHlkI7jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlkIjmrKLlrpfkuYvmt6vmr43orrDjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw46ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImhoenltaiIsImRlc2MiOiLmnpflh6HmraPmgJ3ntKLlpoLkvZXlupTlr7nlrpfpl6jnurfkuonvvIzmhI/lpJblvpfliLDkuIDmoLnngavngbXlj4LvvIzlkLjmlLblrozngbXlipvlkI7nm7TlpZTnvo7lpbPlrZDmiL/pl7TjgILkuKTkurrpmLTpmLPkuqTlkIjvvIznvo7lpbPlsIbogonmo5LlkKvov5vlmLTph4zoiJTlvITvvIzpmo/lkI7mkoXotbflsYHogqHorqnku5bku47lkI7lpLTnjJvlubLjgILmv4Dmg4Xov4flkI7nqb/lpb3ooaPmnI3vvIzmnpflh6Hov5jkuI3lv5josIPmiI/lpbnkuIDnlarvvIzlrpfpl6jnurfkuonmmoLooqvmipvlnKjohJHlkI7jgIIiLCJhbmNob3IiOiLpu4TmnpzlrpjmlrkiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvdHMvMmYvMTA0OS9wbGF5bGV0X2NvdmVyX2ZiMzkxZjA3OGI3MDU3ZDEuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9taS91dC8xMDQ5L3BsYXlsZXRfY292ZXJfZmIzOTFmMDc4YjcwNTdkMS5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTIsMTI4NTRdLCJ0YWdOYW1lcyI6WyLpu4TmnpwiLCLku5nkvqAiXSwidGFnU2x1Z3MiOlsiaHVhbmdndW8iLCJ4aWFueGlhIl0sInRvdGFsRXBpc29kZSI6OCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTQsImhlYXRWYWx1ZSI6NDQ0NywiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE5LCJjcmVhdGVkQXQiOiIyMDI2LTExLTA2VDA1OjA3OjM3LjQzMVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjIyLjM0M1oiLCJzZW9JbmZvIjp7InRpdGxlIjoiIiwia2V5d29ybGQiOlsi5ZCI5qyi5a6X5LmL5rer5q+N6K6wIiwi6buE5p6c5Y6f5YibIiwi5L+u5LuZIiwi5p6X5Yeh54Gr54G15Y+C5ZCO55qE6Zi06Ziz5Lqk5ZCIIiwi5LuZ5L6g5a6X6Zeo5oOF6ImyIiwi54Gr54G15Y+CIiwi576O5aWz5a2Q5Y+M5L+uIiwi5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5a6X6Zeo57q35LqJ5ZCO55qE5Y+M5L+u5aScIiwi576O5aWz5a2Q5oi/6Ze055qE6Zi06Ziz5Lqk5ZCIIl0sImRlc2NyaXB0aW9uIjoi5p6X5Yeh5q2j5oCd57Si5aaC5L2V5bqU5a+55a6X6Zeo57q35LqJ77yM5oSP5aSW5b6X5Yiw5LiA5qC554Gr54G15Y+C77yM5ZC45pS25a6M54G15Yqb5ZCO55u05aWU576O5aWz5a2Q5oi/6Ze044CC5Lik5Lq66Zi06Ziz5Lqk5ZCI77yM576O5aWz5bCG6IKJ5qOS5ZCr6L+b5Zi06YeM6IiU5byE77yM6ZqP5ZCO5pKF6LW35bGB6IKh6K6p5LuW5LuO5ZCO5aS054yb5bmy44CC5r+A5oOF6L+H5ZCO56m/5aW96KGj5pyN77yM5p6X5Yeh6L+Y5LiN5b+Y6LCD5oiP5aW55LiA55Wq77yM5a6X6Zeo57q35LqJ5pqC6KKr5oqb5Zyo6ISR5ZCO44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5ZCI5qyi5a6X5LmL5rer5q+N6K6w44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysOOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDk4OCwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjp0cnVlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wNlQxMjowNToyMy43MzVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA5OjQ1OjAwWiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wNFQwMjowMjozNloiLCJ0aGVtZUlkcyI6WzEyNjgzLDEyNjgxXSwidGhlbWVOYW1lcyI6WyLlj6Too4UiLCLljp/liJvnn63liaciXSwidGhlbWVTbHVncyI6WyJndXpodWFuZyIsInlhdW5jaHVhbmdkaiJdLCJjYXRlZ29yeUlkcyI6WzExMTA1LDExMTAyXSwidGl0bGUiOiLlhaXotZjooqvnu7/kuInlubTvvIznnJ/lpKrlrZDlvZLkvY3lhYjmlqnojaHlpoflkI7or5vkuZ3ml48iLCJwbGF5TmFtZSI6IuWFpei1mOiiq+e7v+S4ieW5tO+8jOecn+WkquWtkOW9kuS9jeWFiOaWqeiNoeWmh+WQjuivm+S5neaXjyIsImRlc2NyaXB0aW9uIjoi5rWB6JC95rCR6Ze055qE5aSq5a2Q6ZqQ5aeT5Z+L5ZCN77yM5YWl6LWY5a6Y5a6m5LmL5a6277yM5Y+X5bC95Ya36YGH5Y205aeL57uI5a6I552A5Y2K5Z2X6b6Z57q5546J5L2p44CC546J5L2p6KKr5Lq65Y+Y5Y2W5ZCO77yM5LuW55qE55yf5a6e6Lqr5Lu95oSP5aSW5pud5YWJ44CC6ZKm5beu6K6k5Ye65LuW5pe277yM5LuW57uI5LqO6IO95riF566X5LiJ5bm05p2l55qE5pen6LSm77yM5Lmf5b6X5Lul5Zue5oql5pu+5Zyo5LuW6JC96a2E5pe25ZaE5b6F5LuW55qE5Lq644CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5YWl6LWY6KKr57u/5LiJ5bm077yM55yf5aSq5a2Q5b2S5L2N5YWI5pap6I2h5aaH5ZCO6K+b5Lmd5peP44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJ6enR6Z3ciLCJkZXNjIjoi5rWB6JC95rCR6Ze055qE5aSq5a2Q6ZqQ5aeT5Z+L5ZCN77yM5YWl6LWY5a6Y5a6m5LmL5a6277yM5Y+X5bC95Ya36YGH5Y205aeL57uI5a6I552A5Y2K5Z2X6b6Z57q5546J5L2p44CC546J5L2p6KKr5Lq65Y+Y5Y2W5ZCO77yM5LuW55qE55yf5a6e6Lqr5Lu95oSP5aSW5pud5YWJ44CC6ZKm5beu6K6k5Ye65LuW5pe277yM5LuW57uI5LqO6IO95riF566X5LiJ5bm05p2l55qE5pen6LSm77yM5Lmf5b6X5Lul5Zue5oql5pu+5Zyo5LuW6JC96a2E5pe25ZaE5b6F5LuW55qE5Lq644CCIiwiYW5jaG9yIjoi5Y6f5YibIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3VmL2Z0LzEwNDkvcGxheWxldF9jb3Zlcl9mMjhlNzdmZmE2ZTQzZDI4LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2Uvc28va2wvMTA0OS9wbGF5bGV0X2NvdmVyX2I2YzRhMmI4NTY3YWFkMmUuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODU3LDEyODc1XSwidGFnTmFtZXMiOlsi5Y+k5LujIiwi5aSN5LuHIl0sInRhZ1NsdWdzIjpbImd1ZGFpIiwiRkMiXSwidG90YWxFcGlzb2RlIjoxLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjozLCJoZWF0VmFsdWUiOjIyNTIsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNiwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozOS4xNjVaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoyMi4yMTRaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuecn+WkquWtkOW9kuS9jSIsIum+mee6ueeOieS9qSIsIuWPpOijheWkjeS7hyIsIueGn+aenGFpIiwiQUnmiJDkurrnn63liaciXSwiZGVzY3JpcHRpb24iOiLmtYHokL3msJHpl7TnmoTlpKrlrZDpmpDlp5Pln4vlkI3vvIzlhaXotZjlrpjlrqbkuYvlrrbvvIzlj5flsL3lhrfpgYfljbTlp4vnu4jlrojnnYDljYrlnZfpvpnnurnnjonkvanjgILnjonkvanooqvkurrlj5jljZblkI7vvIzku5bnmoTnnJ/lrp7ouqvku73mhI/lpJbmm53lhYnjgILpkqblt67orqTlh7rku5bml7bvvIzku5bnu4jkuo7og73muIXnrpfkuInlubTmnaXnmoTml6fotKbvvIzkuZ/lvpfku6Xlm57miqXmm77lnKjku5bokL3prYTml7blloTlvoXku5bnmoTkurrjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlhaXotZjooqvnu7/kuInlubTvvIznnJ/lpKrlrZDlvZLkvY3lhYjmlqnojaHlpoflkI7or5vkuZ3ml4/jgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwx6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NTIzLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDEyOjE0OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTJUMjE6NTA6MDVaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAxVDA4OjAzOjE2WiIsInRoZW1lSWRzIjpbMTI2ODEsMTI2ODVdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyIsIumDveW4giJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiIsImR1c2hpIl0sImNhdGVnb3J5SWRzIjpbMTExMDIsMTExMDVdLCJ0aXRsZSI6Iumhtue6p+engeWOqO+8iOWFqDEw6ZuG77yJIiwicGxheU5hbWUiOiLpobbnuqfnp4HljqgiLCJkZXNjcmlwdGlvbiI6IuegtOS6p+WwkeeIt+Wwj+mhvuWcqOS4gOWknOS5i+mXtOWutumBk+S4reiQve+8jOa1geiQveiHs+avlOW8l+WIqeWxseW6hOW9k+i1t+S6huS4iumXqOengeWOqOOAguiwgeaWmeS7lueDueWItueahOmhtue6p+aWmeeQhuern+acieedgOaXoOS4juS8puavlOeahOmtlOWKm++8jOiuqeS4gOS9jeS9jemrmOi0teS8mOmbheeahOixqumXqOi0teWmh+WQg+WujOWQjuS4i+mdouaYpea9ruazm+a7peOAgeW9k+Wcuue+nuiAu+axguasouOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiumhtue6p+engeWOqOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImRpbmdqaXMiLCJkZXNjIjoi56C05Lqn5bCR54i35bCP6aG+5Zyo5LiA5aSc5LmL6Ze05a626YGT5Lit6JC977yM5rWB6JC96Iez5q+U5byX5Yip5bGx5bqE5b2T6LW35LqG5LiK6Zeo56eB5Y6o44CC6LCB5paZ5LuW54O55Yi255qE6aG257qn5paZ55CG56uf5pyJ552A5peg5LiO5Lym5q+U55qE6a2U5Yqb77yM6K6p5LiA5L2N5L2N6auY6LS15LyY6ZuF55qE6LGq6Zeo6LS15aaH5ZCD5a6M5ZCO5LiL6Z2i5pil5r2u5rOb5rul44CB5b2T5Zy6576e6IC75rGC5qyi44CCIiwiYW5jaG9yIjoiIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL21xL2NnLzEwNDkvcGxheWxldF9jb3Zlcl83NTJiOTU5N2FmZWJkOWE4LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvbTMvOTMvMTA0OS9wbGF5bGV0X2NvdmVyX2U2NGQ3OTJlNjI4MjlhNjUuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUxLDEyODUyXSwidGFnTmFtZXMiOlsi5Y6f5YibIiwi6buE5p6cIl0sInRhZ1NsdWdzIjpbIllDIiwiaHVhbmdndW8iXSwidG90YWxFcGlzb2RlIjoxMCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTk5LCJoZWF0VmFsdWUiOjIzMjgwLCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTQsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDY6MjIuMzAxWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MTMuNjQxWiIsInNlb0luZm8iOnsidGl0bGUiOiLpobbnuqfnp4HljqjvvIjlhagxMOmbhu+8iSIsImtleXdvcmxkIjpbIumhtue6p+engeWOqCIsIuixqumXqOengeWOqCIsIui0teWmh+axguasoiIsIumhtue6p+engeWOqOWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuWwj+mhviIsIuWlpeaWr+WNoeW9seWQjiJdLCJkZXNjcmlwdGlvbiI6IuegtOS6p+WwkeeIt+Wwj+mhvuWcqOS4gOWknOS5i+mXtOWutumBk+S4reiQve+8jOa1geiQveiHs+avlOW8l+WIqeWxseW6hOW9k+i1t+S6huS4iumXqOengeWOqOOAguiwgeaWmeS7lueDueWItueahOmhtue6p+aWmeeQhuern+acieedgOaXoOS4juS8puavlOeahOmtlOWKm++8jOiuqeS4gOS9jeS9jemrmOi0teS8mOmbheeahOixqumXqOi0teWmh+WQg+WujOWQjuS4i+mdouaYpea9ruazm+a7peOAgeW9k+Wcuue+nuiAu+axguasouOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiumhtue6p+engeWOqOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NTI5LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDEwOjU2OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTJUMjE6NTA6MDVaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAxVDA4OjAzOjE2WiIsInRoZW1lSWRzIjpbMTI2ODEsMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyIsIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiIsImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMiwxMTEwNCwxMTEwNV0sInRpdGxlIjoi6ay854i255yf5Lq654mI77yI5YWoMTDpm4bvvIkiLCJwbGF5TmFtZSI6IumsvOeItuecn+S6uueJiCIsImRlc2NyaXB0aW9uIjoi55m95aSp5LuW5piv5rip5p+U5L2T6LS044CB54Wn6aG+5a625bqt55qE5qih6IyD57un54i277yM5LiA5Yiw5aSc5bmV6ZmN5Li05L6/5b275bqV5pKV5byA5Lyq6KOF77yM5YWI5piv5Lul57ud5a+555qE5by66ICF5ae/5oCB5by66KGM5Y2g5pyJ5LqG5YKy5aiH5Y+b6YCG55qE5aeQ5aeQ54ix6I6J77yM6ZqP5ZCO5Y+I5bCG5riF57qv5Y+v5Lq655qE5aa55aa557qx5aWI5LiA5q2l5q2l6LCD5pWZ5b6X5b275bqV5rKJ5rKm44CC5LuO5pyA5Yid55qE5YG356ql5YG36Ze75Yiw5YaF5b+D55qE5oqX5ouS5bSp5rqD44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6ay854i255yf5Lq654mI44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiZ3VpZnV6aCIsImRlc2MiOiLnmb3lpKnku5bmmK/muKnmn5TkvZPotLTjgIHnhafpob7lrrbluq3nmoTmqKHojIPnu6fniLbvvIzkuIDliLDlpJzluZXpmY3kuLTkvr/lvbvlupXmkpXlvIDkvKroo4XvvIzlhYjmmK/ku6Xnu53lr7nnmoTlvLrogIXlp7/mgIHlvLrooYzljaDmnInkuoblgrLlqIflj5vpgIbnmoTlp5Dlp5DniLHojonvvIzpmo/lkI7lj4jlsIbmuIXnuq/lj6/kurrnmoTlprnlprnnurHlpYjkuIDmraXmraXosIPmlZnlvpflvbvlupXmsonmsqbjgILku47mnIDliJ3nmoTlgbfnqqXlgbfpl7vliLDlhoXlv4PnmoTmipfmi5LltKnmuoPjgIIiLCJhbmNob3IiOiIiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvdHMvM28vMTA0OS9wbGF5bGV0X2NvdmVyX2FlNWZhNmM3ZDcwNzg4NjAuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS82Mi90NC8xMDQ5L3BsYXlsZXRfY292ZXJfZmJmN2UzY2VlYTU2ZWYzNC5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTEsMTI4NTIsMTI4NTldLCJ0YWdOYW1lcyI6WyLljp/liJsiLCLpu4TmnpwiLCLoibPpgYciXSwidGFnU2x1Z3MiOlsiWUMiLCJodWFuZ2d1byIsInlhbnl1Il0sInRvdGFsRXBpc29kZSI6MTAsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE4MCwiaGVhdFZhbHVlIjoyMTIzNCwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE2LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ2OjI5LjE0NVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjEzLjUyWiIsInNlb0luZm8iOnsidGl0bGUiOiLprLzniLbnnJ/kurrniYjvvIjlhagxMOmbhu+8iSIsImtleXdvcmxkIjpbIumsvOeItuecn+S6uueJiCIsIueVuOW9ouWutuW6rSIsIuWnkOWmueS6ieWuoCIsIumsvOeItuecn+S6uueJiOWujOaVtOeJiCIsIuWcqOe6v+eciyIsIue7p+eItiIsIueIseiOiSIsIue6seWliCJdLCJkZXNjcmlwdGlvbiI6IueZveWkqeS7luaYr+a4qeaflOS9k+i0tOOAgeeFp+mhvuWutuW6reeahOaooeiMg+e7p+eItu+8jOS4gOWIsOWknOW5lemZjeS4tOS+v+W9u+W6leaSleW8gOS8quijhe+8jOWFiOaYr+S7pee7neWvueeahOW8uuiAheWnv+aAgeW8uuihjOWNoOacieS6huWCsuWoh+WPm+mAhueahOWnkOWnkOeIseiOie+8jOmaj+WQjuWPiOWwhua4hee6r+WPr+S6uueahOWmueWmuee6seWliOS4gOatpeatpeiwg+aVmeW+l+W9u+W6leayieaypuOAguS7juacgOWIneeahOWBt+eqpeWBt+mXu+WIsOWGheW/g+eahOaKl+aLkuW0qea6g+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiumsvOeItuecn+S6uueJiOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NTkyLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDA1OjM4OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTJUMjE6NTA6MDdaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAxVDA4OjAwOjU0WiIsInRoZW1lSWRzIjpbMTI2ODEsMTI2ODhdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyIsIua8q+WJpyJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiIsIm1hbmp1Il0sImNhdGVnb3J5SWRzIjpbMTExMDIsMTExMDVdLCJ0aXRsZSI6IuacgOW8uuaYvuekuuWZqO+8iOWFqDEw6ZuG77yJIiwicGxheU5hbWUiOiLmnIDlvLrmmL7npLrlmagiLCJkZXNjcmlwdGlvbiI6IuS4uueVheeOqeiLsembhOiBlOebn++8jOS7luWcqOW6n+WTgeermea3mOWbnuS4gOWPsOazm+edgOivoeW8guiNp+WFieeahOS6jOaJi+aYvuekuuWxj+OAguS4gOe7j+mAmueUteS4jeS7heeUu+i0qOmAvOecn++8jOabtOaLpeacieS6huWwhueOsOWunuiCiei6q+KAnOaVsOS9jeWunuS9k+WMluKAneeahOmAhuWkqeelnuWKm+OAguW8gOacuueerOmXtOS7luebtOaOpeepv+i2iui/m+WFpeeIhuasvue9kea4uOS4lueVjOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuacgOW8uuaYvuekuuWZqOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6Inp1aXFpYW4iLCJkZXNjIjoi5Li655WF546p6Iux6ZuE6IGU55uf77yM5LuW5Zyo5bqf5ZOB56uZ5reY5Zue5LiA5Y+w5rOb552A6K+h5byC6I2n5YWJ55qE5LqM5omL5pi+56S65bGP44CC5LiA57uP6YCa55S15LiN5LuF55S76LSo6YC855yf77yM5pu05oul5pyJ5LqG5bCG546w5a6e6IKJ6Lqr4oCc5pWw5L2N5a6e5L2T5YyW4oCd55qE6YCG5aSp56We5Yqb44CC5byA5py6556s6Ze05LuW55u05o6l56m/6LaK6L+b5YWl54iG5qy+572R5ri45LiW55WM44CCIiwiYW5jaG9yIjoiIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzVjL2xmLzEwNDkvcGxheWxldF9jb3Zlcl8xZjE2NGJkNGI5NTMwYWNhLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvMmUvdWMvMTA0OS9wbGF5bGV0X2NvdmVyXzkwYzk2ZjcxNWQ1NWJiOTcuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUxLDEyODUyLDEyODU3XSwidGFnTmFtZXMiOlsi5Y6f5YibIiwi6buE5p6cIiwi5Y+k5LujIl0sInRhZ1NsdWdzIjpbIllDIiwiaHVhbmdndW8iLCJndWRhaSJdLCJ0b3RhbEVwaXNvZGUiOjEwLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxODgsImhlYXRWYWx1ZSI6MjM0MzcsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0NzoyNi4wMDNaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoxNC4zMTRaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuacgOW8uuaYvuekuuWZqO+8iOWFqDEw6ZuG77yJIiwia2V5d29ybGQiOlsi5pyA5by65pi+56S65ZmoIiwi5ri45oiP56m/6LaKIiwi6Jma5ouf5ZCO5a6rIiwi5pyA5by65pi+56S65Zmo5a6M5pW054mIIiwi5Zyo57q/55yLIiwi55yL5p2/5aiYIiwi5aWz5oiY56WeIl0sImRlc2NyaXB0aW9uIjoi5Li655WF546p6Iux6ZuE6IGU55uf77yM5LuW5Zyo5bqf5ZOB56uZ5reY5Zue5LiA5Y+w5rOb552A6K+h5byC6I2n5YWJ55qE5LqM5omL5pi+56S65bGP44CC5LiA57uP6YCa55S15LiN5LuF55S76LSo6YC855yf77yM5pu05oul5pyJ5LqG5bCG546w5a6e6IKJ6Lqr4oCc5pWw5L2N5a6e5L2T5YyW4oCd55qE6YCG5aSp56We5Yqb44CC5byA5py6556s6Ze05LuW55u05o6l56m/6LaK6L+b5YWl54iG5qy+572R5ri45LiW55WM44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5pyA5by65pi+56S65Zmo44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ1MTQsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOnRydWUsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDNUMDM6Mjg6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0wOS0xMlQyMTo1MDowNFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMDFUMDg6MDM6MTZaIiwidGhlbWVJZHMiOlsxMjY4MSwxMjY4Ml0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIiwi5LuZ5L6gIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIiwieGlhbnhpYSJdLCJjYXRlZ29yeUlkcyI6WzExMTAyXSwidGl0bGUiOiLpgLzoia/kuLrlppbvvIjlhagxMOmbhu+8iSIsInBsYXlOYW1lIjoi6YC86Imv5Li65aaWIiwiZGVzY3JpcHRpb24iOiLkuIDmnJ3ovaznlJ/vvIzku5blubbmnKrokL3lhaXlh6HlsJjkurrpl7TvvIzogIzmmK/lnaDlhaXkuobkuIDkuKrlpKflppbnurXmqKrjgIHlh7blhb3pgY3lnLDnmoTor6HlvILlvILnlYzjgILlnKjov5nniYfkuZ3mrbvkuIDnlJ/nmoTnu53lnLDkuK3vvIzkvJflppbnq5/pmLTlt67pmLPplJnlsIbku5bor6/orqTkuLrkuobkvKDor7TkuK3og73mi6/mlZHkuIflppbnmoToh7Ppq5jigJzmlZHkuJbkuLvigJ3jgILkuLrkuobljZrlj5bku5bnmoTluofmiqTkuI7mganms73jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrpgLzoia/kuLrlppbjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJiaWxpYW5nIiwiZGVzYyI6IuS4gOacnei9rOeUn++8jOS7luW5tuacquiQveWFpeWHoeWwmOS6uumXtO+8jOiAjOaYr+WdoOWFpeS6huS4gOS4quWkp+Wmlue6teaoquOAgeWHtuWFvemBjeWcsOeahOivoeW8guW8gueVjOOAguWcqOi/meeJh+S5neatu+S4gOeUn+eahOe7neWcsOS4re+8jOS8l+Wmluern+mYtOW3rumYs+mUmeWwhuS7luivr+iupOS4uuS6huS8oOivtOS4reiDveaLr+aVkeS4h+WmlueahOiHs+mrmOKAnOaVkeS4luS4u+KAneOAguS4uuS6huWNmuWPluS7lueahOW6h+aKpOS4juaBqeazveOAgiIsImFuY2hvciI6IiIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9xdS9oOS8xMDQ5L3BsYXlsZXRfY292ZXJfZThjMWY1MjViNDY3M2MyZi5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2hkL2YwLzEwNDkvcGxheWxldF9jb3Zlcl82NTRiOTAwYjA2MjY1ODM4LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MSwxMjg1MiwxMjg3MF0sInRhZ05hbWVzIjpbIuWOn+WImyIsIum7hOaenCIsIuW8guS4lueVjCJdLCJ0YWdTbHVncyI6WyJZQyIsImh1YW5nZ3VvIiwiWVNKIl0sInRvdGFsRXBpc29kZSI6MTAsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE1OSwiaGVhdFZhbHVlIjoxNzI0MSwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE1LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ2OjEwLjY1NVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA2VDIyOjAwOjEzLjIzM1oiLCJzZW9JbmZvIjp7InRpdGxlIjoi6YC86Imv5Li65aaW77yI5YWoMTDpm4bvvIkiLCJrZXl3b3JsZCI6WyLpgLzoia/kuLrlppYiLCLlvILnlYzlppblhb0iLCLmlZHkuJbkuLvor7Hmg5EiLCLpgLzoia/kuLrlppblrozmlbTniYgiLCLlnKjnur/nnIsiLCLkuZ3lsL7ni5Dku5kiLCLmlZHkuJbkuLsiXSwiZGVzY3JpcHRpb24iOiLkuIDmnJ3ovaznlJ/vvIzku5blubbmnKrokL3lhaXlh6HlsJjkurrpl7TvvIzogIzmmK/lnaDlhaXkuobkuIDkuKrlpKflppbnurXmqKrjgIHlh7blhb3pgY3lnLDnmoTor6HlvILlvILnlYzjgILlnKjov5nniYfkuZ3mrbvkuIDnlJ/nmoTnu53lnLDkuK3vvIzkvJflppbnq5/pmLTlt67pmLPplJnlsIbku5bor6/orqTkuLrkuobkvKDor7TkuK3og73mi6/mlZHkuIflppbnmoToh7Ppq5jigJzmlZHkuJbkuLvigJ3jgILkuLrkuobljZrlj5bku5bnmoTluofmiqTkuI7mganms73jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrpgLzoia/kuLrlppbjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fV0sInRvcGljTGlzdCI6W119LHsiaWQiOjExMTAzLCJzbHVnIjoiWlhHWCIsInRpdGxlIjoi5pyA5paw5pu05pawIiwiZGVzYyI6IiIsImtleXdvcmQiOltdLCJsYWJlbCI6IiIsInN0eWxlIjoiQiIsImNhcmRCYWNrZ3JvdW5kSW1hZ2UiOiIiLCJtb2R1bGVUeXBlIjoxLCJkYXRhVHlwZSI6MSwicmVjb21tZW5kVHlwZSI6MCwiY2F0ZWdvcnlJZCI6MCwicmFuayI6NCwibGltaXQiOjEyLCJzZW9JbmZvIjp7InRpdGxlIjoi54af5p6c55+t5Ymn5pyA5paw5pu05paw5LiT5Yy6IC0g54Ot6ZeoQUnmiJDkurrnn63liafkuI7pu4TmnpzmlrDliafpgJ/pgJLlkIjpm4YiLCJrZXl3b3JsZCI6WyLmnIDmlrDmm7TmlrAiLCLmlrDkuIrmnrbnn63liaciLCLmiqLlhYjnnIsiLCLnhp/mnpznn63liaciLCLpu4Tmnpznn63liaciLCLpu4TmnpwiLCJBSeaIkOS6uuefreWJpyIsIuacgOaWsOabtOaWsCIsIuaWsOWJp+mAn+mAkiIsIui9rOaAp+WQjuaIkeeluOS5seS/ruS7meeVjCIsIuWFqOePreWcsOmTgeaxgueUnyIsIuaIkOS6uuefreWJp0FQUCJdLCJkZXNjcmlwdGlvbiI6IuiBmueEpueGn+aenOefreWJp+acgOaWsOabtOaWsOS4k+WMuu+8jOesrOS4gOaXtumXtOaOjOaPoeacgOWJjeayv+eahEFJ5oiQ5Lq655+t5Ymn5LiO57K+5b2p5paw5Ymn6YCf6YCS44CC5bmz5Y+w5q+P5pel5L+d5oyB5oyB57ut5pu05paw77yM54Gr54Ot5pS25b2V5LqG44CK6L2s5oCn5ZCO5oiR56W45Lmx5L+u5LuZ55WM44CL44CB44CK5YWo54+t5Zyw6ZOB5rGC55SfIOWPquacieaIkeS4gOS4queUt+eUn+OAi+etiemrmOS6uuawlOacgOaWsOWkp+aIj+OAgui/memHjOWJp+aDheWPjei9rOS4jeaWreOAgeaDiuWWnOWxguWHuuS4jeept+OAguW/q+adpeS4i+i9veWumOaWueS4k+Wxnuemj+WIqUFQUO+8jOW4puaCqOmaj+aXtumaj+WcsOeVheS6q+aXoOW5suaJsOeahOmrmOa4heaOjOS4iui/veWJp+aWsOS9k+mqjO+8gSJ9LCJsaXN0IjpbeyJpZCI6MTQ5NzYsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6dHJ1ZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDZUMTI6Mjg6NDcuMzQ2WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wNVQwMjoyNTowMFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDVUMDQ6MjM6NDJaIiwidGhlbWVJZHMiOlsxMjY4NF0sInRoZW1lTmFtZXMiOlsi56m/6LaKIl0sInRoZW1lU2x1Z3MiOlsiY2h1YW55dWUiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNV0sInRpdGxlIjoi5pyr5LiW77ya55S35aWz5q+U5L6L5aSx6KGh77yM576O5aWz5Lus6YO95Zyo5oqi5oiRIiwicGxheU5hbWUiOiLmnKvkuJbvvJrnlLflpbPmr5TkvovlpLHooaHvvIznvo7lpbPku6zpg73lnKjmiqLmiJEiLCJkZXNjcmlwdGlvbiI6Iuacq+S4lumZjeS4tOWQjueUt+Wls+avlOS+i+S4pemHjeWkseihoe+8jOe+juWls+S7rOmDveWcqOaKouaIkeOAguWlueS7rOS7jumakOW/jei1sOWQkeS4u+WKqO+8jOiho+ihq+iiq+ikquWwveWQjui6q+S9k+WcqOaIkeaJi+S4i+i9u+i9u+mipOaKluOAguS4gOasoeasoeiiq+Whq+a7oeWIsOacgOa3seWkhO+8jOa1quWPq+WOi+aKkeS4jeS9j+OAguWFseaEn+iuqeassuacm+WQjOatpeeIhuWPke+8jOacq+S4lueahOemgeW/jOWcqOWknOmHjOW9u+W6leayieaypu+8jOWGjeS5n+WbnuS4jeWIsOS7juWJjeOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuacq+S4lu+8mueUt+Wls+avlOS+i+Wkseihoe+8jOe+juWls+S7rOmDveWcqOaKouaIkeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6Im1zbm5iIiwiZGVzYyI6Iuacq+S4lumZjeS4tOWQjueUt+Wls+avlOS+i+S4pemHjeWkseihoe+8jOe+juWls+S7rOmDveWcqOaKouaIkeOAguWlueS7rOS7jumakOW/jei1sOWQkeS4u+WKqO+8jOiho+ihq+iiq+ikquWwveWQjui6q+S9k+WcqOaIkeaJi+S4i+i9u+i9u+mipOaKluOAguS4gOasoeasoeiiq+Whq+a7oeWIsOacgOa3seWkhO+8jOa1quWPq+WOi+aKkeS4jeS9j+OAguWFseaEn+iuqeassuacm+WQjOatpeeIhuWPke+8jOacq+S4lueahOemgeW/jOWcqOWknOmHjOW9u+W6leayieaypu+8jOWGjeS5n+WbnuS4jeWIsOS7juWJjeOAgiIsImFuY2hvciI6IuWOn+WImyIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS94cS94dy8xMDQ5L3BsYXlsZXRfY292ZXJfNTc5NTNmMDc3OGQ2NjZlZC5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzZpL25sLzEwNDkvcGxheWxldF9jb3Zlcl85ZTRmOTQyMTFmMDAxNWVmLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg2OF0sInRhZ05hbWVzIjpbIuacq+aXpeW6n+WcnyJdLCJ0YWdTbHVncyI6WyJtb3JpZmVpdHUiXSwidG90YWxFcGlzb2RlIjoxMCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6OCwiaGVhdFZhbHVlIjo0MzAyLCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTksImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDZUMDU6MDc6MzMuMDI2WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDZUMjI6MDA6MTEuODYzWiIsInNlb0luZm8iOnsidGl0bGUiOiIiLCJrZXl3b3JsZCI6WyLmnKvkuJYiLCLnlLflpbPmr5TkvovlpLHooaEiLCLmnKvml6Xnn63liaciLCLmnKvkuJbnlLflpbPmr5TkvovlpLHooaEiLCLmnKvkuJblkI7lrqvmg4XoibIiLCLnvo7lpbPku6zpg73lnKjmiqLmiJEiLCLlrozmlbTniYgiLCLlnKjnur/nnIsiLCLnvo7lpbPmiqLmiJHnmoTmnKvkuJblpJwiLCLmnKvkuJbph4zooqvnvo7lpbPku6zljIXlm7QiXSwiZGVzY3JpcHRpb24iOiLmnKvkuJbpmY3kuLTlkI7nlLflpbPmr5TkvovkuKXph43lpLHooaHvvIznvo7lpbPku6zpg73lnKjmiqLmiJHjgILlpbnku6zku47pmpDlv43otbDlkJHkuLvliqjvvIzooaPooavooqvopKrlsL3lkI7ouqvkvZPlnKjmiJHmiYvkuIvovbvovbvpoqTmipbjgILkuIDmrKHmrKHooqvloavmu6HliLDmnIDmt7HlpITvvIzmtarlj6vljovmipHkuI3kvY/jgILlhbHmhJ/orqnmrLLmnJvlkIzmraXniIblj5HvvIzmnKvkuJbnmoTnpoHlv4zlnKjlpJzph4zlvbvlupXmsonmsqbvvIzlho3kuZ/lm57kuI3liLDku47liY3jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmnKvkuJbvvJrnlLflpbPmr5TkvovlpLHooaHvvIznvo7lpbPku6zpg73lnKjmiqLmiJHjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDk4Nywic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDZUMTI6MjY6MjkuNzQ5WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwOTo0NTo0MVoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDRUMDM6MzY6MzJaIiwidGhlbWVJZHMiOlsxMjY4OF0sInRoZW1lTmFtZXMiOlsi5ryr5YmnIl0sInRoZW1lU2x1Z3MiOlsibWFuanUiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNV0sInRpdGxlIjoi5YWU5a2Q5ZKM5ZOl5ZOl5YWx5oSf5LqGIiwicGxheU5hbWUiOiLlhZTlrZDlkozlk6Xlk6XlhbHmhJ/kuoYiLCJkZXNjcmlwdGlvbiI6IuWFlOWtkOWSjOWTpeWTpeWFseaEn+WQjuassuacm+WQjOatpeeIhuWPkeOAguWlueS4i+i6q+a8j+awtO+8jOWTpeWTpeaJi+aMh+WPiOa3seWPiOWHhuWcsOWIuua/gOOAguS4gOasoeasoeiiq+Whq+a7oeWIsOacgOa3seWkhO+8jOi6q+S9k+W9u+W6lei9r+S4i+adpeOAgua1quWPq+WOi+aKkeS4jeS9j++8jOS4pOS4quS6uueahOW/q+aEn+S6pOe7h+WcqOS4gOi1t++8jOemgeW/jOWQjOWxheWcqOmDveW4guWknOmHjOW9u+W6leW0qeWdj++8jOWGjeS5n+WbnuS4jeWIsOS7juWJjeOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWFlOWtkOWSjOWTpeWTpeWFseaEn+S6huOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDPpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoidHpoZ2ciLCJkZXNjIjoi5YWU5a2Q5ZKM5ZOl5ZOl5YWx5oSf5ZCO5qyy5pyb5ZCM5q2l54iG5Y+R44CC5aW55LiL6Lqr5ryP5rC077yM5ZOl5ZOl5omL5oyH5Y+I5rex5Y+I5YeG5Zyw5Yi65r+A44CC5LiA5qyh5qyh6KKr5aGr5ruh5Yiw5pyA5rex5aSE77yM6Lqr5L2T5b275bqV6L2v5LiL5p2l44CC5rWq5Y+r5Y6L5oqR5LiN5L2P77yM5Lik5Liq5Lq655qE5b+r5oSf5Lqk57uH5Zyo5LiA6LW377yM56aB5b+M5ZCM5bGF5Zyo6YO95biC5aSc6YeM5b275bqV5bSp5Z2P77yM5YaN5Lmf5Zue5LiN5Yiw5LuO5YmN44CCIiwiYW5jaG9yIjoi5pyA5YWo54mH5bqTIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2dyL3A5LzEwNDkvcGxheWxldF9jb3Zlcl83MzIwNmU1NjMzMjVjNzAzLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvbGkvNTAvMTA0OS9wbGF5bGV0X2NvdmVyXzczMjA2ZTU2MzMyNWM3MDMuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODc2XSwidGFnTmFtZXMiOlsiQUnmiJDkurrmvKvliaciXSwidGFnU2x1Z3MiOlsiQ1JNSiJdLCJ0b3RhbEVwaXNvZGUiOjMsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjksImhlYXRWYWx1ZSI6MTk5NiwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE4LCJjcmVhdGVkQXQiOiIyMDI2LTExLTA2VDA1OjA3OjM4LjY3MloiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA2VDIyOjAwOjExLjY5MloiLCJzZW9JbmZvIjp7InRpdGxlIjoiIiwia2V5d29ybGQiOlsi5YWU5a2Q5ZKM5ZOl5ZOl5YWx5oSf5LqGIiwi546p5YG25YWU5a2QIiwi5YWx5oSfIiwi5YWU5a2Q5ZKM5ZOl5ZOl5YWx5oSf5LqGIiwi6YO95biC5ZCM5bGF56aB5b+MIiwi5YWU5a2QIiwi5ZOl5ZOlIiwi5YWx5oSfIiwi5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5YWU5a2Q5ZOl5ZOl55qE5YWx5oSf5aScIiwi5YWx5oSf5ZCO55qE5YWU5a2Q5ZOl5ZOlIl0sImRlc2NyaXB0aW9uIjoi5YWU5a2Q5ZKM5ZOl5ZOl5YWx5oSf5ZCO5qyy5pyb5ZCM5q2l54iG5Y+R44CC5aW55LiL6Lqr5ryP5rC077yM5ZOl5ZOl5omL5oyH5Y+I5rex5Y+I5YeG5Zyw5Yi65r+A44CC5LiA5qyh5qyh6KKr5aGr5ruh5Yiw5pyA5rex5aSE77yM6Lqr5L2T5b275bqV6L2v5LiL5p2l44CC5rWq5Y+r5Y6L5oqR5LiN5L2P77yM5Lik5Liq5Lq655qE5b+r5oSf5Lqk57uH5Zyo5LiA6LW377yM56aB5b+M5ZCM5bGF5Zyo6YO95biC5aSc6YeM5b275bqV5bSp5Z2P77yM5YaN5Lmf5Zue5LiN5Yiw5LuO5YmN44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5YWU5a2Q5ZKM5ZOl5ZOl5YWx5oSf5LqG44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDk3Nywic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjp0cnVlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wNlQxMjoyNToxNC4zMjdaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTExLTA0VDA5OjA3OjQzWiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wNVQwODo1NDoyMloiLCJ0aGVtZUlkcyI6WzEyNjgxXSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMl0sInRpdGxlIjoi5bqK56yr77yI5YWoNumbhu+8iSIsInBsYXlOYW1lIjoi5bqK56yrIiwiZGVzY3JpcHRpb24iOiLluornrKvkuYvkuIrlpbnkuLvliqjopKrlsL3ooaPooavvvIzouqvkvZPlnKjng5vlhYnkuIvpoqTmipbvvIzku43ku6XlpI3mnYLnm67lhYnnnIvnnYDlr7nmlrnjgILkuIDmrKHmrKHmt7HlhaXorqnlpbnlvbvlupXova/kuIvmnaXvvIzmtarlj6vljovmipHkuI3kvY/jgILluornrKvnmoTnpoHlv4zlnKjlpJzph4zlvbvlupXniIblj5HvvIzlho3kuZ/ml6Dms5Xlm57lpLTjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrluornrKvjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw26ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImNodWFuZ3oiLCJkZXNjIjoi5bqK56yr5LmL5LiK5aW55Li75Yqo6KSq5bC96KGj6KGr77yM6Lqr5L2T5Zyo54Ob5YWJ5LiL6aKk5oqW77yM5LuN5Lul5aSN5p2C55uu5YWJ55yL552A5a+55pa544CC5LiA5qyh5qyh5rex5YWl6K6p5aW55b275bqV6L2v5LiL5p2l77yM5rWq5Y+r5Y6L5oqR5LiN5L2P44CC5bqK56yr55qE56aB5b+M5Zyo5aSc6YeM5b275bqV54iG5Y+R77yM5YaN5Lmf5peg5rOV5Zue5aS044CCIiwiYW5jaG9yIjoi6buE5p6c5a6Y5pa5IiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2d0L2t3LzEwNDkvcGxheWxldF9jb3Zlcl9jM2NjNDVlMjA3ZDNjYTgzLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvMjAvODAvMTA0OS9wbGF5bGV0X2NvdmVyX2MzY2M0NWUyMDdkM2NhODMuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUyLDEyODU3XSwidGFnTmFtZXMiOlsi6buE5p6cIiwi5Y+k5LujIl0sInRhZ1NsdWdzIjpbImh1YW5nZ3VvIiwiZ3VkYWkiXSwidG90YWxFcGlzb2RlIjo2LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoyMiwiaGVhdFZhbHVlIjozOTA5LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTcsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDZUMDU6MDc6MzMuNloiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA2VDIyOjAwOjExLjUwNloiLCJzZW9JbmZvIjp7InRpdGxlIjoiIiwia2V5d29ybGQiOlsi5bCG5Yab5LiO5Y2n5bqVIiwi5Y+k6KOF55+t5YmnIiwi6buE5p6c5Y6f5YibIiwi5bqK56yr5LmL6Ze055qE5b275bqV5rKJ5rKmIiwi6YO95biC5bqK56yr5oOF6ImyIiwi5bqK56yrIiwi5rex5YWl5aSx5o6nIiwi5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5bqK56yr5aSc55qE57K+5YeG5rex5YWlIiwi5bqK56yr5LiK55qE5aSx5o6n6aKk5oqWIl0sImRlc2NyaXB0aW9uIjoi5bqK56yr5LmL5LiK5aW55Li75Yqo6KSq5bC96KGj6KGr77yM6Lqr5L2T5Zyo54Ob5YWJ5LiL6aKk5oqW77yM5LuN5Lul5aSN5p2C55uu5YWJ55yL552A5a+55pa544CC5LiA5qyh5qyh5rex5YWl6K6p5aW55b275bqV6L2v5LiL5p2l77yM5rWq5Y+r5Y6L5oqR5LiN5L2P44CC5bqK56yr55qE56aB5b+M5Zyo5aSc6YeM5b275bqV54iG5Y+R77yM5YaN5Lmf5peg5rOV5Zue5aS044CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5bqK56yr44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysNumbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDk3OCwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjp0cnVlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wNlQxMjoyMzo1Ny41NTRaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTExLTA0VDA4OjQxOjI3WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wNVQwODo1NDoyMloiLCJ0aGVtZUlkcyI6WzEyNjgxXSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMl0sInRpdGxlIjoi5aaI5aaI5oiR54ix5L2g77yI5YWoMTDpm4bvvIkiLCJwbGF5TmFtZSI6IuWmiOWmiOaIkeeIseS9oCIsImRlc2NyaXB0aW9uIjoi5aaI5aaI6LW35Yid5a6J6Z2Z6aG65LuO77yM5YOP5rKJ6buY55qE576U576K44CC5Zyo5a+G6Zet5oi/6Ze06YeM77yM5Lyq6KOF6KKr5LiA54K554K55o+t5byA44CC5ZaY5oGv5Yi75oSP5Y6L5L2O77yM6Lqr5L2T5Y205Zyo5oiR55qE6IqC5aWP5LiL6L276L276aKk5oqW44CC5q+P5LiA5qyh5rex5YWl6YO96K6p5aW55LuO6ZqQ5b+N6LWw5ZCR5aSx5o6n77yM5pyA57uI5b275bqV5rKJ5rKm77yM5a6J6Z2Z5LiN5YaN77yM5Y+q5Ymp5LiL5Y6L5oqR5LiN5L2P55qE5ZG75ZCf77yM56aB5b+M55qE5q+N5a2Q5YWz57O75b275bqV5bSp5Z2P44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5aaI5aaI5oiR54ix5L2g44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoibW13YW4iLCJkZXNjIjoi5aaI5aaI6LW35Yid5a6J6Z2Z6aG65LuO77yM5YOP5rKJ6buY55qE576U576K44CC5Zyo5a+G6Zet5oi/6Ze06YeM77yM5Lyq6KOF6KKr5LiA54K554K55o+t5byA44CC5ZaY5oGv5Yi75oSP5Y6L5L2O77yM6Lqr5L2T5Y205Zyo5oiR55qE6IqC5aWP5LiL6L276L276aKk5oqW44CC5q+P5LiA5qyh5rex5YWl6YO96K6p5aW55LuO6ZqQ5b+N6LWw5ZCR5aSx5o6n77yM5pyA57uI5b275bqV5rKJ5rKm77yM5a6J6Z2Z5LiN5YaN77yM5Y+q5Ymp5LiL5Y6L5oqR5LiN5L2P55qE5ZG75ZCf77yM56aB5b+M55qE5q+N5a2Q5YWz57O75b275bqV5bSp5Z2P44CCIiwiYW5jaG9yIjoi6buE5p6c5a6Y5pa5MiIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9tNC8xbS8xMDQ5L3BsYXlsZXRfY292ZXJfMTk1YWM5ZWVlMzk0MjUzOS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzgwL3N0LzEwNDkvcGxheWxldF9jb3Zlcl8xOTVhYzllZWUzOTQyNTM5LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MiwxMjg2MV0sInRhZ05hbWVzIjpbIum7hOaenCIsIuavjeWtkCJdLCJ0YWdTbHVncyI6WyJodWFuZ2d1byIsIm11emkiXSwidG90YWxFcGlzb2RlIjoxMCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MjQsImhlYXRWYWx1ZSI6NTMwNCwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE5LCJjcmVhdGVkQXQiOiIyMDI2LTExLTA2VDA1OjA3OjM0LjA0WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDA6MDA6MTEuNDk4WiIsInNlb0luZm8iOnsidGl0bGUiOiIiLCJrZXl3b3JsZCI6WyLmr43lrZDlhbPns7siLCLpu4Tmnpzljp/liJsiLCLlpojlpojmiJHniLHkvaAiLCLmr43lrZDnpoHlv4zmg4XoibIiLCLlpojlpogiLCLmt7HlpJzmsonmsqYiLCLlrozmlbTniYgiLCLlnKjnur/nnIsiLCLlpojlpojmt7HlpJznmoTmsonmsqYiLCLmiJHniLHkvaDlpojlpogiXSwiZGVzY3JpcHRpb24iOiLlpojlpojotbfliJ3lronpnZnpobrku47vvIzlg4/msonpu5jnmoTnvpTnvorjgILlnKjlr4bpl63miL/pl7Tph4zvvIzkvKroo4XooqvkuIDngrnngrnmj63lvIDjgILllpjmga/liLvmhI/ljovkvY7vvIzouqvkvZPljbTlnKjmiJHnmoToioLlpY/kuIvovbvovbvpoqTmipbjgILmr4/kuIDmrKHmt7HlhaXpg73orqnlpbnku47pmpDlv43otbDlkJHlpLHmjqfvvIzmnIDnu4jlvbvlupXmsonmsqbvvIzlronpnZnkuI3lho3vvIzlj6rliankuIvljovmipHkuI3kvY/nmoTlkbvlkJ/vvIznpoHlv4znmoTmr43lrZDlhbPns7vlvbvlupXltKnlnY/jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlpojlpojmiJHniLHkvaDjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDk3OSwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjp0cnVlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOnRydWUsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDEyOjIxOjE4LjczN1oiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDRUMDg6Mzk6MzRaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA1VDA4OjU0OjIyWiIsInRoZW1lSWRzIjpbMTI2ODFdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiJdLCJjYXRlZ29yeUlkcyI6WzExMTAyXSwidGl0bGUiOiLmiJHnmoTlkIjnp5/lpbPlrqTlj4vku6zvvIjlhagy6ZuG77yJIiwicGxheU5hbWUiOiLmiJHnmoTlkIjnp5/lpbPlrqTlj4vku6wiLCJkZXNjcmlwdGlvbiI6IuaIkeWSjOWHoOS9jeWls+WupOWPi+WQiOenn+WQju+8jOa3seWknOeahOWWmOaBr+i2iuadpei2iuaYjuaYvuOAguafkOWknOWlueS7rOS4u+WKqOi3qOWdkOS4iuadpe+8jOiKseeptOe0p+e0p+WSrOS9j++8jOS4gOi+ueWTreS4gOi+ueaJreiFsOOAguS4gOebtOWBmuWIsOWkqeS6ru+8jOa3q+awtOmhuuedgOS6pOWQiOWkhOa1geS6huS4gOWcsOOAguWQiOenn+eahOmDveW4guemgeW/jOW9u+W6leayieaypu+8jOWGjeS5n+WbnuS4jeWIsOi/h+WOu+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuaIkeeahOWQiOenn+Wls+WupOWPi+S7rOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDLpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiaHpuc3kiLCJkZXNjIjoi5oiR5ZKM5Yeg5L2N5aWz5a6k5Y+L5ZCI56ef5ZCO77yM5rex5aSc55qE5ZaY5oGv6LaK5p2l6LaK5piO5pi+44CC5p+Q5aSc5aW55Lus5Li75Yqo6Leo5Z2Q5LiK5p2l77yM6Iqx56m057Sn57Sn5ZKs5L2P77yM5LiA6L655ZOt5LiA6L655omt6IWw44CC5LiA55u05YGa5Yiw5aSp5Lqu77yM5rer5rC06aG6552A5Lqk5ZCI5aSE5rWB5LqG5LiA5Zyw44CC5ZCI56ef55qE6YO95biC56aB5b+M5b275bqV5rKJ5rKm77yM5YaN5Lmf5Zue5LiN5Yiw6L+H5Y6744CCIiwiYW5jaG9yIjoi6buE5p6c5a6Y5pa5IiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2ZnL2tiLzEwNDkvcGxheWxldF9jb3Zlcl9lYTc5ODA5YzFiNmYzMzgyLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvZm4vdDgvMTA0OS9wbGF5bGV0X2NvdmVyX2VhNzk4MDljMWI2ZjMzODIuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUyLDEyODU1XSwidGFnTmFtZXMiOlsi6buE5p6cIiwi6YO95biCIl0sInRhZ1NsdWdzIjpbImh1YW5nZ3VvIiwiZHVzaGkiXSwidG90YWxFcGlzb2RlIjoyLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNCwiaGVhdFZhbHVlIjo2MDMyLCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTIsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDZUMDU6MDc6MzQuNzUyWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MjIuNzVaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuWQiOenn+eUn+a0uyIsIum7hOaenOWOn+WImyIsIuaIkeeahOWQiOenn+Wls+WupOWPi+S7rCIsIumDveW4guWQiOenn+aDheiJsiIsIuWls+WupOWPiyIsIuWQiOenn+emgeW/jCIsIuWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuWQiOenn+Wls+WupOWPi+eahOa3seWknOWkseaOpyIsIuWls+WupOWPi+S7rOeahOWQiOenn+aypumZtyJdLCJkZXNjcmlwdGlvbiI6IuaIkeWSjOWHoOS9jeWls+WupOWPi+WQiOenn+WQju+8jOa3seWknOeahOWWmOaBr+i2iuadpei2iuaYjuaYvuOAguafkOWknOWlueS7rOS4u+WKqOi3qOWdkOS4iuadpe+8jOiKseeptOe0p+e0p+WSrOS9j++8jOS4gOi+ueWTreS4gOi+ueaJreiFsOOAguS4gOebtOWBmuWIsOWkqeS6ru+8jOa3q+awtOmhuuedgOS6pOWQiOWkhOa1geS6huS4gOWcsOOAguWQiOenn+eahOmDveW4guemgeW/jOW9u+W6leayieaypu+8jOWGjeS5n+WbnuS4jeWIsOi/h+WOu+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuaIkeeahOWQiOenn+Wls+WupOWPi+S7rOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDLpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ5ODAsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDEyOjE5OjU0Ljk0NloiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDRUMDg6MzM6MDNaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA1VDA4OjU0OjIyWiIsInRoZW1lSWRzIjpbMTI2ODVdLCJ0aGVtZU5hbWVzIjpbIumDveW4giJdLCJ0aGVtZVNsdWdzIjpbImR1c2hpIl0sImNhdGVnb3J5SWRzIjpbMTExMDVdLCJ0aXRsZSI6IuW5v+S4nOm4reeOi++8iOWFqDLpm4bvvIkiLCJwbGF5TmFtZSI6IuW5v+S4nOm4reeOiyIsImRlc2NyaXB0aW9uIjoi5bm/5Lic6bit546L5Lul6Lqr5L2T5Li65Lia77yM5Zyo6YO95biC5rex5aSc5LiO5ZCE6Lev5aWz5Lq65Lqk57yg44CC5LuW5omL5rOV5Y+I5rex5Y+I5YeG77yM5LiA5LiL5LiL57K+5YeG5Yi65r+A5pyA5pWP5oSf5aSE44CC5a+55pa56Lqr5L2T5b275bqV6L2v5LiL5p2l77yM5rWq5Y+r5YaN5Lmf5Y6L5LiN5L2P44CC56aB5b+M55qE5Lqk5piT5Zyo5aSc6Imy5Lit5b275bqV5aSx5o6n77yM5b+r5oSf5Lqk57uH77yM5YaN5Lmf5Zue5LiN5Yiw6L+H5Y6744CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5bm/5Lic6bit546L44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMumbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJnZHl3IiwiZGVzYyI6IuW5v+S4nOm4reeOi+S7pei6q+S9k+S4uuS4mu+8jOWcqOmDveW4gua3seWknOS4juWQhOi3r+Wls+S6uuS6pOe8oOOAguS7luaJi+azleWPiOa3seWPiOWHhu+8jOS4gOS4i+S4i+eyvuWHhuWIuua/gOacgOaVj+aEn+WkhOOAguWvueaWuei6q+S9k+W9u+W6lei9r+S4i+adpe+8jOa1quWPq+WGjeS5n+WOi+S4jeS9j+OAguemgeW/jOeahOS6pOaYk+WcqOWknOiJsuS4reW9u+W6leWkseaOp++8jOW/q+aEn+S6pOe7h++8jOWGjeS5n+WbnuS4jeWIsOi/h+WOu+OAgiIsImFuY2hvciI6IuiuuOePqei/nCIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9mcy9ybS8xMDQ5L3BsYXlsZXRfY292ZXJfYjMwNWU2OWVlMTUzMDBhMC5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2NxLzIwLzEwNDkvcGxheWxldF9jb3Zlcl9iMzA1ZTY5ZWUxNTMwMGEwLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1NSwxMjg1OV0sInRhZ05hbWVzIjpbIumDveW4giIsIuiJs+mBhyJdLCJ0YWdTbHVncyI6WyJkdXNoaSIsInlhbnl1Il0sInRvdGFsRXBpc29kZSI6MiwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6OSwiaGVhdFZhbHVlIjo1MDM5LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTEsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDZUMDU6MDc6MzUuMjU0WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MjIuNjc5WiIsInNlb0luZm8iOnsidGl0bGUiOiIiLCJrZXl3b3JsZCI6WyLlkI3mtYHnlJ/mtLsiLCLpg73luILnn63liaciLCLlub/kuJzpuK3njovlpJzlpJzpo47mtYEiLCLpg73luILmg4XoibLpuK3njosiLCLlub/kuJzpuK3njosiLCLphZLlupciLCLlrozmlbTniYgiLCLlnKjnur/nnIsiLCLpg73luILpuK3njovnmoTnpoHlv4zlpJwiLCLpuK3njovphZLlupfmt7HpmbforrAiXSwiZGVzY3JpcHRpb24iOiLlub/kuJzpuK3njovku6XouqvkvZPkuLrkuJrvvIzlnKjpg73luILmt7HlpJzkuI7lkITot6/lpbPkurrkuqTnvKDjgILku5bmiYvms5Xlj4jmt7Hlj4jlh4bvvIzkuIDkuIvkuIvnsr7lh4bliLrmv4DmnIDmlY/mhJ/lpITjgILlr7nmlrnouqvkvZPlvbvlupXova/kuIvmnaXvvIzmtarlj6vlho3kuZ/ljovkuI3kvY/jgILnpoHlv4znmoTkuqTmmJPlnKjlpJzoibLkuK3lvbvlupXlpLHmjqfvvIzlv6vmhJ/kuqTnu4fvvIzlho3kuZ/lm57kuI3liLDov4fljrvjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlub/kuJzpuK3njovjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwy6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0OTgxLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOnRydWUsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6dHJ1ZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDZUMTI6MTg6MjMuNTY1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wNFQwODoyNDo1MFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDVUMDg6NTQ6MjJaIiwidGhlbWVJZHMiOlsxMjY4MV0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIl0sImNhdGVnb3J5SWRzIjpbMTExMDJdLCJ0aXRsZSI6IuadpeiHquS+hOWls+ayiemHjeeahOeIse+8iOWFqDfpm4bvvIkiLCJwbGF5TmFtZSI6IuadpeiHquS+hOWls+ayiemHjeeahOeIsSIsImRlc2NyaXB0aW9uIjoi5Z+O5biC5YWs5a+T55qE5aSc5pma77yM5oiQ5bm05L6E5aWz5ZCR5Y+U5Y+U5YC+6K+J55ay5oOr44CC5LiA5qyh6K+V5o6i6K6p5Y6f5pys54af5oKJ55qE5Lqy5oOF5Y+Y5b6X5b6u5aaZ77yM5Lik5Lq66YO96KKr6L+r6Z2i5a+56L+Z5q615YWz57O755qE6L6555WM44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5p2l6Ieq5L6E5aWz5rKJ6YeN55qE54ix44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysN+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJ6bmN6ZGEiLCJkZXNjIjoi5Z+O5biC5YWs5a+T55qE5aSc5pma77yM5oiQ5bm05L6E5aWz5ZCR5Y+U5Y+U5YC+6K+J55ay5oOr44CC5LiA5qyh6K+V5o6i6K6p5Y6f5pys54af5oKJ55qE5Lqy5oOF5Y+Y5b6X5b6u5aaZ77yM5Lik5Lq66YO96KKr6L+r6Z2i5a+56L+Z5q615YWz57O755qE6L6555WM44CCIiwiYW5jaG9yIjoi6buE5p6c5a6Y5pa5IiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2p6L242LzEwNDkvcGxheWxldF9jb3Zlcl9lNGVjMDljYmYzNDhmN2M1LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvdjYvMGcvMTA0OS9wbGF5bGV0X2NvdmVyX2U0ZWMwOWNiZjM0OGY3YzUuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUyLDEyODYwXSwidGFnTmFtZXMiOlsi6buE5p6cIiwi5Lmx5LymIl0sInRhZ1NsdWdzIjpbImh1YW5nZ3VvIiwibHVhbmx1biJdLCJ0b3RhbEVwaXNvZGUiOjcsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjEzLCJoZWF0VmFsdWUiOjUyNDAsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxOCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozNS43NjhaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoyMi42MTZaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuadpeiHquS+hOWls+ayiemHjeeahOeIsSIsIuWutuW6reWFs+ezuyIsIum7hOaenOWOn+WImyJdLCJkZXNjcmlwdGlvbiI6IuWfjuW4guWFrOWvk+eahOWknOaZmu+8jOaIkOW5tOS+hOWls+WQkeWPlOWPlOWAvuivieeWsuaDq+OAguS4gOasoeivleaOouiuqeWOn+acrOeGn+aCieeahOS6suaDheWPmOW+l+W+ruWmme+8jOS4pOS6uumDveiiq+i/q+mdouWvuei/meauteWFs+ezu+eahOi+ueeVjOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuadpeiHquS+hOWls+ayiemHjeeahOeIseOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDfpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ5ODIsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6dHJ1ZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDZUMTI6MTc6NDUuMjg0WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wNFQwODoxODoyNFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDVUMDg6NTQ6MjJaIiwidGhlbWVJZHMiOlsxMjY4MV0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIl0sImNhdGVnb3J5SWRzIjpbMTExMDJdLCJ0aXRsZSI6Iuayiem7mOeahOe+lOe+iu+8iOWFqDjpm4bvvIkiLCJwbGF5TmFtZSI6Iuayiem7mOeahOe+lOe+iiIsImRlc2NyaXB0aW9uIjoi5ZKM6ICB5YWs5LqJ5ZC15ZCO5LiO6Ze66Jyc5Y676YWS5ZCn5Lmw6YaJ77yM6YaS5p2l5Y205Y+R546w6Ieq5bex6LWk6KO46Lq65Zyo6ZmM55Sf55S35Lq65bqK5LiK44CC5pys5oOz6YGX5b+Y57un57ut55Sf5rS777yM6ZmM55Sf55S16K+d5Lul6YWS5bqX5byA5oi/5aiB6IOB44CC5LuO5ouN5pGE56eB5a+G54Wn5byA5aeL77yM5YaN5Yiw5Y+Y5oCB5a625Lit5ruh6Laz5LuW55qE6KaB5rGC44CC5b2T5Zy65oqK5paH6IO45YaF6KOk6ISx57uZ5LuW5ZCO77yM5LuW5riQ5riQ5o+Q5Ye65pu06L+H5YiG55qE6KaB5rGC77yM56aB5b+M5b275bqV5aSx5o6n44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5rKJ6buY55qE576U576K44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysOOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJjbWRneSIsImRlc2MiOiLlkozogIHlhazkuonlkLXlkI7kuI7pl7ronJzljrvphZLlkKfkubDphonvvIzphpLmnaXljbTlj5HnjrDoh6rlt7HotaToo7jourrlnKjpmYznlJ/nlLfkurrluorkuIrjgILmnKzmg7PpgZflv5jnu6fnu63nlJ/mtLvvvIzpmYznlJ/nlLXor53ku6XphZLlupflvIDmiL/lqIHog4HjgILku47mi43mkYTnp4Hlr4bnhaflvIDlp4vvvIzlho3liLDlj5jmgIHlrrbkuK3mu6HotrPku5bnmoTopoHmsYLjgILlvZPlnLrmiormlofog7jlhoXoo6TohLHnu5nku5blkI7vvIzku5bmuJDmuJDmj5Dlh7rmm7Tov4fliIbnmoTopoHmsYLvvIznpoHlv4zlvbvlupXlpLHmjqfjgIIiLCJhbmNob3IiOiLpu4TmnpzlrpjmlrkiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvcjEvNjAvMTA0OS9wbGF5bGV0X2NvdmVyXzU4MWQ0MTU3YmNlZDcyYzEuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS93eS9vZS8xMDQ5L3BsYXlsZXRfY292ZXJfNTgxZDQxNTdiY2VkNzJjMS5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTJdLCJ0YWdOYW1lcyI6WyLpu4TmnpwiXSwidGFnU2x1Z3MiOlsiaHVhbmdndW8iXSwidG90YWxFcGlzb2RlIjo4LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxMSwiaGVhdFZhbHVlIjoyOTQxLCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTEsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDZUMDU6MDc6MzYuMjQ5WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MjIuNDlaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuayiem7mOeahOe+lOe+iiIsIum7hOaenOWOn+WImyIsIuWvhumXreepuumXtCIsIumFkuWQp+mGkuadpeWQjueahOmFkuW6l+WogeiDgSIsIumDveW4gum7kW1haWzmg4XoibIiLCLmnajlsI/lp5AiLCLpmYznlJ/nlLXor50iLCLlrozmlbTniYgiLCLlnKjnur/nnIsiLCLmnajlsI/lp5DnmoTphZLlkKflpLHmjqflpJwiLCLphZLlupflvIDmiL/lqIHog4HljYfnuqciXSwiZGVzY3JpcHRpb24iOiLlkozogIHlhazkuonlkLXlkI7kuI7pl7ronJzljrvphZLlkKfkubDphonvvIzphpLmnaXljbTlj5HnjrDoh6rlt7HotaToo7jourrlnKjpmYznlJ/nlLfkurrluorkuIrjgILmnKzmg7PpgZflv5jnu6fnu63nlJ/mtLvvvIzpmYznlJ/nlLXor53ku6XphZLlupflvIDmiL/lqIHog4HjgILku47mi43mkYTnp4Hlr4bnhaflvIDlp4vvvIzlho3liLDlj5jmgIHlrrbkuK3mu6HotrPku5bnmoTopoHmsYLjgILlvZPlnLrmiormlofog7jlhoXoo6TohLHnu5nku5blkI7vvIzku5bmuJDmuJDmj5Dlh7rmm7Tov4fliIbnmoTopoHmsYLvvIznpoHlv4zlvbvlupXlpLHmjqfjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmsonpu5jnmoTnvpTnvorjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw46ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0OTgzLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOnRydWUsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDEyOjE1OjQwLjc4N1oiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDRUMDg6MTU6MjdaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA1VDA4OjU0OjIyWiIsInRoZW1lSWRzIjpbMTI2ODFdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiJdLCJjYXRlZ29yeUlkcyI6WzExMTAyXSwidGl0bGUiOiLph43nlJ/lkI7mk43lhL/lqrPmlbTpob/lhajlrrbvvIjlhagz6ZuG77yJIiwicGxheU5hbWUiOiLph43nlJ/lkI7mk43lhL/lqrPmlbTpob/lhajlrrYiLCJkZXNjcmlwdGlvbiI6IueZvuS6v+WutuS4u+WPkeeOsOS4ieS4quWEv+WtkOmDveS4juiHquW3seayoeacieihgOe8mOWFs+ezu++8jOWJjeS4luWwseatpOe7iOe7k+OAgumHjeeUn+WQju+8jOS7luiniemGkuezu+e7n++8jOmHjeaWsOWuoeinhui6q+i+ueS6uueahOeul+iuoe+8jOedgOaJi+a4heeQhuWutuaXj+WGheeahOaXp+i0puOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiumHjeeUn+WQjuaTjeWEv+Wqs+aVtOmhv+WFqOWutuOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDPpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoienNoZHFqIiwiZGVzYyI6IueZvuS6v+WutuS4u+WPkeeOsOS4ieS4quWEv+WtkOmDveS4juiHquW3seayoeacieihgOe8mOWFs+ezu++8jOWJjeS4luWwseatpOe7iOe7k+OAgumHjeeUn+WQju+8jOS7luiniemGkuezu+e7n++8jOmHjeaWsOWuoeinhui6q+i+ueS6uueahOeul+iuoe+8jOedgOaJi+a4heeQhuWutuaXj+WGheeahOaXp+i0puOAgiIsImFuY2hvciI6Ium7hOaenOWumOaWuSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9zbC8wNS8xMDQ5L3BsYXlsZXRfY292ZXJfMDY0NGY3ZmMyZTQ3OWU1Ni5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2RlL2R2LzEwNDkvcGxheWxldF9jb3Zlcl8wNjQ0ZjdmYzJlNDc5ZTU2LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MiwxMjg3MiwxMjg3M10sInRhZ05hbWVzIjpbIum7hOaenCIsIumHjeeUnyIsIuezu+e7nyJdLCJ0YWdTbHVncyI6WyJodWFuZ2d1byIsIkNTIiwieGl0b25nIl0sInRvdGFsRXBpc29kZSI6MywidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTYsImhlYXRWYWx1ZSI6MzU0NSwiY291bnRDb2xsZWN0IjoxLCJjb3VudExpa2UiOjE5LCJjcmVhdGVkQXQiOiIyMDI2LTExLTA2VDA1OjA3OjM2LjkyNloiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjIyLjQxOFoiLCJzZW9JbmZvIjp7InRpdGxlIjoiIiwia2V5d29ybGQiOlsi6YeN55Sf5ZCO5pON5YS/5aqz5pW06aG/5YWo5a62Iiwi6YeN55Sf57O757ufIiwi5a625peP5riF566XIl0sImRlc2NyaXB0aW9uIjoi55m+5Lq/5a625Li75Y+R546w5LiJ5Liq5YS/5a2Q6YO95LiO6Ieq5bex5rKh5pyJ6KGA57yY5YWz57O777yM5YmN5LiW5bCx5q2k57uI57uT44CC6YeN55Sf5ZCO77yM5LuW6KeJ6YaS57O757uf77yM6YeN5paw5a6h6KeG6Lqr6L655Lq655qE566X6K6h77yM552A5omL5riF55CG5a625peP5YaF55qE5pen6LSm44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6YeN55Sf5ZCO5pON5YS/5aqz5pW06aG/5YWo5a6244CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDk4NCwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjp0cnVlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOnRydWUsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDEyOjE0OjQ4Ljg4OVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDRUMDg6MDE6NDJaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA1VDA4OjU0OjIyWiIsInRoZW1lSWRzIjpbMTI2ODFdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiJdLCJjYXRlZ29yeUlkcyI6WzExMTAyXSwidGl0bGUiOiLlkIjmrKLlrpfkuYvmt6vmr43orrDvvIjlhag46ZuG77yJIiwicGxheU5hbWUiOiLlkIjmrKLlrpfkuYvmt6vmr43orrAiLCJkZXNjcmlwdGlvbiI6Iuael+WHoeato+aAnee0ouWmguS9leW6lOWvueWul+mXqOe6t+S6ie+8jOaEj+WkluW+l+WIsOS4gOagueeBq+eBteWPgu+8jOWQuOaUtuWujOeBteWKm+WQjuebtOWllOe+juWls+WtkOaIv+mXtOOAguS4pOS6uumYtOmYs+S6pOWQiO+8jOe+juWls+WwhuiCieajkuWQq+i/m+WYtOmHjOiIlOW8hO+8jOmaj+WQjuaShei1t+WxgeiCoeiuqeS7luS7juWQjuWktOeMm+W5suOAgua/gOaDhei/h+WQjuepv+Wlveiho+acje+8jOael+WHoei/mOS4jeW/mOiwg+aIj+WlueS4gOeVqu+8jOWul+mXqOe6t+S6ieaaguiiq+aKm+WcqOiEkeWQjuOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWQiOasouWul+S5i+a3q+avjeiusOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDjpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiaGh6eW1qIiwiZGVzYyI6Iuael+WHoeato+aAnee0ouWmguS9leW6lOWvueWul+mXqOe6t+S6ie+8jOaEj+WkluW+l+WIsOS4gOagueeBq+eBteWPgu+8jOWQuOaUtuWujOeBteWKm+WQjuebtOWllOe+juWls+WtkOaIv+mXtOOAguS4pOS6uumYtOmYs+S6pOWQiO+8jOe+juWls+WwhuiCieajkuWQq+i/m+WYtOmHjOiIlOW8hO+8jOmaj+WQjuaShei1t+WxgeiCoeiuqeS7luS7juWQjuWktOeMm+W5suOAgua/gOaDhei/h+WQjuepv+Wlveiho+acje+8jOael+WHoei/mOS4jeW/mOiwg+aIj+WlueS4gOeVqu+8jOWul+mXqOe6t+S6ieaaguiiq+aKm+WcqOiEkeWQjuOAgiIsImFuY2hvciI6Ium7hOaenOWumOaWuSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS90cy8yZi8xMDQ5L3BsYXlsZXRfY292ZXJfZmIzOTFmMDc4YjcwNTdkMS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL21pL3V0LzEwNDkvcGxheWxldF9jb3Zlcl9mYjM5MWYwNzhiNzA1N2QxLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MiwxMjg1NF0sInRhZ05hbWVzIjpbIum7hOaenCIsIuS7meS+oCJdLCJ0YWdTbHVncyI6WyJodWFuZ2d1byIsInhpYW54aWEiXSwidG90YWxFcGlzb2RlIjo4LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNCwiaGVhdFZhbHVlIjo0NDQ3LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTksImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDZUMDU6MDc6MzcuNDMxWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MjIuMzQzWiIsInNlb0luZm8iOnsidGl0bGUiOiIiLCJrZXl3b3JsZCI6WyLlkIjmrKLlrpfkuYvmt6vmr43orrAiLCLpu4Tmnpzljp/liJsiLCLkv67ku5kiLCLmnpflh6HngavngbXlj4LlkI7nmoTpmLTpmLPkuqTlkIgiLCLku5nkvqDlrpfpl6jmg4XoibIiLCLngavngbXlj4IiLCLnvo7lpbPlrZDlj4zkv64iLCLlrozmlbTniYgiLCLlnKjnur/nnIsiLCLlrpfpl6jnurfkuonlkI7nmoTlj4zkv67lpJwiLCLnvo7lpbPlrZDmiL/pl7TnmoTpmLTpmLPkuqTlkIgiXSwiZGVzY3JpcHRpb24iOiLmnpflh6HmraPmgJ3ntKLlpoLkvZXlupTlr7nlrpfpl6jnurfkuonvvIzmhI/lpJblvpfliLDkuIDmoLnngavngbXlj4LvvIzlkLjmlLblrozngbXlipvlkI7nm7TlpZTnvo7lpbPlrZDmiL/pl7TjgILkuKTkurrpmLTpmLPkuqTlkIjvvIznvo7lpbPlsIbogonmo5LlkKvov5vlmLTph4zoiJTlvITvvIzpmo/lkI7mkoXotbflsYHogqHorqnku5bku47lkI7lpLTnjJvlubLjgILmv4Dmg4Xov4flkI7nqb/lpb3ooaPmnI3vvIzmnpflh6Hov5jkuI3lv5josIPmiI/lpbnkuIDnlarvvIzlrpfpl6jnurfkuonmmoLooqvmipvlnKjohJHlkI7jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlkIjmrKLlrpfkuYvmt6vmr43orrDjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw46ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0OTg1LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOnRydWUsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDEyOjEyOjQ1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wNFQwNDo1NTowMFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDVUMDQ6MjM6NDJaIiwidGhlbWVJZHMiOlsxMjY4NV0sInRoZW1lTmFtZXMiOlsi6YO95biCIl0sInRoZW1lU2x1Z3MiOlsiZHVzaGkiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNV0sInRpdGxlIjoi6I2S5bKb6LWO5ZG955m+5Lq66IKJ5pCP5aSn5oiYIEVQMSIsInBsYXlOYW1lIjoi6I2S5bKb6LWO5ZG955m+5Lq66IKJ5pCP5aSn5oiYIiwiZGVzY3JpcHRpb24iOiLkuLrkuobmlZHlprnlprnvvIznlLfkuLvlj4LliqDkuobkuIDlnLrpq5jpop3lpZbph5HnmoTojZLlspvnlJ/lrZjotZvvvIzljbTlj5HnjrDmr5TotZvmmK/otKLlm6Lmk43nurXnmoTmnYDlsYDjgILku5bkuI7kuIDlkI3ljaflupXorablr5/ogZTmiYvvvIzlnKjog4zlj5vkuI7ov73mnYDkuK3lr7vmib7nlJ/ot6/jgILnnLznnIvlsLHopoHotaLkuIvmr5TotZvvvIzohJrkuIvnmoTnpZ7np5jmt7HmuIrlj4jlsIbku5bmi5blhaXmlrDnmoTljbHmnLrjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrojZLlspvotY7lkb3nmb7kurrogonmkI/lpKfmiJjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwx6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6Imhkc20iLCJkZXNjIjoi5Li65LqG5pWR5aa55aa577yM55S35Li75Y+C5Yqg5LqG5LiA5Zy66auY6aKd5aWW6YeR55qE6I2S5bKb55Sf5a2Y6LWb77yM5Y205Y+R546w5q+U6LWb5piv6LSi5Zui5pON57q155qE5p2A5bGA44CC5LuW5LiO5LiA5ZCN5Y2n5bqV6K2m5a+f6IGU5omL77yM5Zyo6IOM5Y+b5LiO6L+95p2A5Lit5a+75om+55Sf6Lev44CC55y855yL5bCx6KaB6LWi5LiL5q+U6LWb77yM6ISa5LiL55qE56We56eY5rex5riK5Y+I5bCG5LuW5ouW5YWl5paw55qE5Y2x5py644CCIiwiYW5jaG9yIjoi5Y6f5YibIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzBiL2F6LzEwNDkvcGxheWxldF9jb3Zlcl81NjBkMjBmN2VhNmQzYzEwLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvZjQvczgvMTA0OS9wbGF5bGV0X2NvdmVyX2QyNTEzZDRlYmYzMzUzYjkuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODcwXSwidGFnTmFtZXMiOlsi5byC5LiW55WMIl0sInRhZ1NsdWdzIjpbIllTSiJdLCJ0b3RhbEVwaXNvZGUiOjEsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjksImhlYXRWYWx1ZSI6MzIyMywiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjIwLCJjcmVhdGVkQXQiOiIyMDI2LTExLTA2VDA1OjA3OjM3Ljg4M1oiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjIyLjI3MVoiLCJzZW9JbmZvIjp7InRpdGxlIjoiIiwia2V5d29ybGQiOlsi6I2S5bKb6LWO5ZG9Iiwi6I2S5bKb55Sf5a2Y6LWbIiwi5Y2n5bqV6K2m5a+fIl0sImRlc2NyaXB0aW9uIjoi5Li65LqG5pWR5aa55aa577yM55S35Li75Y+C5Yqg5LqG5LiA5Zy66auY6aKd5aWW6YeR55qE6I2S5bKb55Sf5a2Y6LWb77yM5Y205Y+R546w5q+U6LWb5piv6LSi5Zui5pON57q155qE5p2A5bGA44CC5LuW5LiO5LiA5ZCN5Y2n5bqV6K2m5a+f6IGU5omL77yM5Zyo6IOM5Y+b5LiO6L+95p2A5Lit5a+75om+55Sf6Lev44CC55y855yL5bCx6KaB6LWi5LiL5q+U6LWb77yM6ISa5LiL55qE56We56eY5rex5riK5Y+I5bCG5LuW5ouW5YWl5paw55qE5Y2x5py644CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6I2S5bKb6LWO5ZG955m+5Lq66IKJ5pCP5aSn5oiY44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDk4OCwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjp0cnVlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wNlQxMjowNToyMy43MzVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA5OjQ1OjAwWiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wNFQwMjowMjozNloiLCJ0aGVtZUlkcyI6WzEyNjgzLDEyNjgxXSwidGhlbWVOYW1lcyI6WyLlj6Too4UiLCLljp/liJvnn63liaciXSwidGhlbWVTbHVncyI6WyJndXpodWFuZyIsInlhdW5jaHVhbmdkaiJdLCJjYXRlZ29yeUlkcyI6WzExMTA1LDExMTAyXSwidGl0bGUiOiLlhaXotZjooqvnu7/kuInlubTvvIznnJ/lpKrlrZDlvZLkvY3lhYjmlqnojaHlpoflkI7or5vkuZ3ml48iLCJwbGF5TmFtZSI6IuWFpei1mOiiq+e7v+S4ieW5tO+8jOecn+WkquWtkOW9kuS9jeWFiOaWqeiNoeWmh+WQjuivm+S5neaXjyIsImRlc2NyaXB0aW9uIjoi5rWB6JC95rCR6Ze055qE5aSq5a2Q6ZqQ5aeT5Z+L5ZCN77yM5YWl6LWY5a6Y5a6m5LmL5a6277yM5Y+X5bC95Ya36YGH5Y205aeL57uI5a6I552A5Y2K5Z2X6b6Z57q5546J5L2p44CC546J5L2p6KKr5Lq65Y+Y5Y2W5ZCO77yM5LuW55qE55yf5a6e6Lqr5Lu95oSP5aSW5pud5YWJ44CC6ZKm5beu6K6k5Ye65LuW5pe277yM5LuW57uI5LqO6IO95riF566X5LiJ5bm05p2l55qE5pen6LSm77yM5Lmf5b6X5Lul5Zue5oql5pu+5Zyo5LuW6JC96a2E5pe25ZaE5b6F5LuW55qE5Lq644CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5YWl6LWY6KKr57u/5LiJ5bm077yM55yf5aSq5a2Q5b2S5L2N5YWI5pap6I2h5aaH5ZCO6K+b5Lmd5peP44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJ6enR6Z3ciLCJkZXNjIjoi5rWB6JC95rCR6Ze055qE5aSq5a2Q6ZqQ5aeT5Z+L5ZCN77yM5YWl6LWY5a6Y5a6m5LmL5a6277yM5Y+X5bC95Ya36YGH5Y205aeL57uI5a6I552A5Y2K5Z2X6b6Z57q5546J5L2p44CC546J5L2p6KKr5Lq65Y+Y5Y2W5ZCO77yM5LuW55qE55yf5a6e6Lqr5Lu95oSP5aSW5pud5YWJ44CC6ZKm5beu6K6k5Ye65LuW5pe277yM5LuW57uI5LqO6IO95riF566X5LiJ5bm05p2l55qE5pen6LSm77yM5Lmf5b6X5Lul5Zue5oql5pu+5Zyo5LuW6JC96a2E5pe25ZaE5b6F5LuW55qE5Lq644CCIiwiYW5jaG9yIjoi5Y6f5YibIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3VmL2Z0LzEwNDkvcGxheWxldF9jb3Zlcl9mMjhlNzdmZmE2ZTQzZDI4LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2Uvc28va2wvMTA0OS9wbGF5bGV0X2NvdmVyX2I2YzRhMmI4NTY3YWFkMmUuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODU3LDEyODc1XSwidGFnTmFtZXMiOlsi5Y+k5LujIiwi5aSN5LuHIl0sInRhZ1NsdWdzIjpbImd1ZGFpIiwiRkMiXSwidG90YWxFcGlzb2RlIjoxLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjozLCJoZWF0VmFsdWUiOjIyNTIsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNiwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozOS4xNjVaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoyMi4yMTRaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuecn+WkquWtkOW9kuS9jSIsIum+mee6ueeOieS9qSIsIuWPpOijheWkjeS7hyIsIueGn+aenGFpIiwiQUnmiJDkurrnn63liaciXSwiZGVzY3JpcHRpb24iOiLmtYHokL3msJHpl7TnmoTlpKrlrZDpmpDlp5Pln4vlkI3vvIzlhaXotZjlrpjlrqbkuYvlrrbvvIzlj5flsL3lhrfpgYfljbTlp4vnu4jlrojnnYDljYrlnZfpvpnnurnnjonkvanjgILnjonkvanooqvkurrlj5jljZblkI7vvIzku5bnmoTnnJ/lrp7ouqvku73mhI/lpJbmm53lhYnjgILpkqblt67orqTlh7rku5bml7bvvIzku5bnu4jkuo7og73muIXnrpfkuInlubTmnaXnmoTml6fotKbvvIzkuZ/lvpfku6Xlm57miqXmm77lnKjku5bokL3prYTml7blloTlvoXku5bnmoTkurrjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlhaXotZjooqvnu7/kuInlubTvvIznnJ/lpKrlrZDlvZLkvY3lhYjmlqnojaHlpoflkI7or5vkuZ3ml4/jgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwx6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19XSwidG9waWNMaXN0IjpbXX0seyJpZCI6MTExMDQsInNsdWciOiJscmpjIiwidGl0bGUiOiLkubHkvKbliaflnLoiLCJkZXNjIjoiIiwia2V5d29yZCI6W10sImxhYmVsIjoiIiwic3R5bGUiOiJBIiwiY2FyZEJhY2tncm91bmRJbWFnZSI6IiIsIm1vZHVsZVR5cGUiOjEsImRhdGFUeXBlIjoxLCJyZWNvbW1lbmRUeXBlIjowLCJjYXRlZ29yeUlkIjowLCJyYW5rIjozLCJsaW1pdCI6MTIsInNlb0luZm8iOnsidGl0bGUiOiLnhp/mnpznn63liafni6zlrrbkuJPpopjkuJPljLogLSDng63pl6hBSeaIkOS6uuefreWJp+S4juS5seS8puS4k+mimOWQiOmbhiIsImtleXdvcmxkIjpbIueGn+aenOefreWJpyIsIum7hOaenOefreWJpyIsIum7hOaenCIsIkFJ5oiQ5Lq655+t5YmnIiwi54Ot6Zeo5o6o6I2QIiwi57K+6YCJ5o6o6I2QIiwi6Imz5q+NIiwi5a2Q6LGq55qE56eY5a+G5pWZ5a2mIiwi5oiQ5Lq655+t5YmnQVBQIiwi5Lmx5LymQUnmiJDkurrnn63liaciXSwiZGVzY3JpcHRpb24iOiLmraXlhaXnhp/mnpznn63liafkubHkvKbliaflnLrkuJPljLrvvIznurXop4jlhajnvZHlpIflj5fnnqnnm67nmoTpq5jlj6PnopFBSeaIkOS6uuefreWJp+avjeWtkOS5seS8pueyvumAieOAguW5s+WPsOavj+aXpeS/neaMgeaMgee7reabtOaWsO+8jOeBq+eDreaUtuW9leS6huOAiuiJs+avjeOAi+OAgeOAiuWtkOixqueahOenmOWvhuaVmeWtpuOAi+etiemrmOS6uuawlOaOqOiNkOWkp+aIj+OAgui/memHjOWJp+aDheWPjei9rOS4jeaWreOAgeeci+eCueeyvuW9qee6t+WRiOOAgueOsOWcqOWwseWOu+S4i+i9veWumOaWueS4k+Wxnuemj+WIqUFQUO+8jOW4puaCqOmaj+aXtumaj+WcsOWwveaDheeVheS6q+aXoOW5suaJsOeahOmrmOa4heaOjOS4iui/veWJp+aWsOS9k+mqjO+8gSJ9LCJsaXN0IjpbeyJpZCI6MTQ3OTUsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDA2OjA2OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMTNUMDQ6MDI6MjBaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTE0VDAyOjMyOjI1WiIsInRoZW1lSWRzIjpbMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNF0sInRpdGxlIjoi5Zyo5ZOl5ZOl6Z2i5YmN5auC5a2Q56uf54S26L+Z5qC35a+55oiRIiwicGxheU5hbWUiOiLlnKjlk6Xlk6XpnaLliY3lq4LlrZDnq5/nhLbov5nmoLflr7nmiJEiLCJkZXNjcmlwdGlvbiI6IuW9k+S6suWTpeWTpeavq+aXoOW+geWFhuWcsOaOqOW8gOaIv+mXqOaXtu+8jOWmluWohueahOWrguWtkOato+WNiui3quWcqOW6iuayv++8jOi6q+S4iueahOS4nei0qOedoeiijemhuuedgOmbqueZveiCqeiGgOa7keiQveiHs+ebiOebiOiFsOmZheOAguWlueS4gOi+ueWBh+ijheaFjOS5seWcsOaVtOeQhuiiq+ikpe+8jOS4gOi+ueWNtOaVheaEj+Wwhumlsea7oea1keWchueahOivseS6uuabsue6v+acneedgOaIv+mXqOWPo+eahOaWueWQkeW+ruW+ruaKrOmrmOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWcqOWTpeWTpemdouWJjeWrguWtkOern+eEtui/meagt+WvueaIkeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDPpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiemFpZ2VnZSIsImRlc2MiOiLlvZPkurLlk6Xlk6Xmr6vml6DlvoHlhYblnLDmjqjlvIDmiL/pl6jml7bvvIzlppblqIbnmoTlq4LlrZDmraPljYrot6rlnKjluormsr/vvIzouqvkuIrnmoTkuJ3otKjnnaHooo3pobrnnYDpm6rnmb3ogqnohoDmu5HokL3oh7Pnm4jnm4johbDpmYXjgILlpbnkuIDovrnlgYfoo4XmhYzkubHlnLDmlbTnkIbooqvopKXvvIzkuIDovrnljbTmlYXmhI/lsIbppbHmu6HmtZHlnIbnmoTor7Hkurrmm7Lnur/mnJ3nnYDmiL/pl6jlj6PnmoTmlrnlkJHlvq7lvq7miqzpq5jjgIIiLCJhbmNob3IiOiIiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvaGcveWkvMTA0OS9wbGF5bGV0X2NvdmVyX2JhYjczOWYxYzBmNzJmOWEuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9xay90di8xMDQ5L3BsYXlsZXRfY292ZXJfYmFiNzM5ZjFjMGY3MmY5YS5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NjBdLCJ0YWdOYW1lcyI6WyLkubHkvKYiXSwidGFnU2x1Z3MiOlsibHVhbmx1biJdLCJ0b3RhbEVwaXNvZGUiOjMsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE1MSwiaGVhdFZhbHVlIjoxNzk5MywiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE5LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ5OjIzLjgyM1oiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjE3LjU0MVoiLCJzZW9JbmZvIjp7InRpdGxlIjoi5Zyo5ZOl5ZOl6Z2i5YmN5auC5a2Q56uf54S26L+Z5qC35a+55oiRIiwia2V5d29ybGQiOlsi5Zyo5ZOl5ZOl6Z2i5YmN5auC5a2Q56uf54S26L+Z5qC35a+55oiRIiwi5Y+U5auC5YG35oOFIiwi6Zeo5YmN6K+x5oORIiwi5Zyo5ZOl5ZOl6Z2i5YmN5auC5a2Q56uf54S26L+Z5qC35a+55oiR5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5ZOl5ZOlIiwi5auC5a2QIl0sImRlc2NyaXB0aW9uIjoi5b2T5Lqy5ZOl5ZOl5q+r5peg5b6B5YWG5Zyw5o6o5byA5oi/6Zeo5pe277yM5aaW5aiG55qE5auC5a2Q5q2j5Y2K6Leq5Zyo5bqK5rK/77yM6Lqr5LiK55qE5Lid6LSo552h6KKN6aG6552A6Zuq55m96IKp6IaA5ruR6JC96Iez55uI55uI6IWw6ZmF44CC5aW55LiA6L655YGH6KOF5oWM5Lmx5Zyw5pW055CG6KKr6KSl77yM5LiA6L655Y205pWF5oSP5bCG6aWx5ruh5rWR5ZyG55qE6K+x5Lq65puy57q/5pyd552A5oi/6Zeo5Y+j55qE5pa55ZCR5b6u5b6u5oqs6auY44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5Zyo5ZOl5ZOl6Z2i5YmN5auC5a2Q56uf54S26L+Z5qC35a+55oiR44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDUwMywic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDJUMjE6NDc6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMC0yNFQwNDozNToyMloiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMjhUMDM6Mzc6MzdaIiwidGhlbWVJZHMiOlsxMjY4Nl0sInRoZW1lTmFtZXMiOlsi5Lmx5LymIl0sInRoZW1lU2x1Z3MiOlsibHVhbmx1biJdLCJjYXRlZ29yeUlkcyI6WzExMTA0XSwidGl0bGUiOiLmiJHnmoTlpojlpojmmK/ni5DlpK3lpK3luIjlsIrmmK/oiojmn5TvvIjlhagxMOmbhu+8iSIsInBsYXlOYW1lIjoi5oiR55qE5aaI5aaI5piv54uQ5aSt5aSt5biI5bCK5piv6IqI5p+UIiwiZGVzY3JpcHRpb24iOiLoiojkupHnrJnkuYPmmK/ni5Dlppbni5DlpK3lpK3kuI7nvr3ljJbpo57ljYfnmoTlpKfog73miYDnlJ/kuYvku5nlppbmt7fooYDjgILlvZPlubTlm6Dni5Dml4/mg6jotKXkurrnsbvkuYvmiYvvvIzni5DlpK3lpK3ml6DlpYjlj6rog73lsIblhbbmipvlvIPvvIzlubjlvpflhbbpl7rkuK3lr4blj4vmuIXmn5Tpl6jlnKPlpbPoiojmn5TlsIblhbbmiprlhbvplb/lpKfjgILlpJrlubTlkI7lvZPoiojmn5Tpl63lhbPkv67ngrzkuYvpmYXvvIzni5DlpK3lpK3pqqTnhLbnjrDouqvkurrpl7TjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmiJHnmoTlpojlpojmmK/ni5DlpK3lpK3luIjlsIrmmK/oiojmn5TjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJ3b2RlbWFtIiwiZGVzYyI6IuiKiOS6keesmeS5g+aYr+eLkOWmlueLkOWkreWkreS4jue+veWMlumjnuWNh+eahOWkp+iDveaJgOeUn+S5i+S7meWmlua3t+ihgOOAguW9k+W5tOWboOeLkOaXj+aDqOi0peS6uuexu+S5i+aJi++8jOeLkOWkreWkreaXoOWliOWPquiDveWwhuWFtuaKm+W8g++8jOW5uOW+l+WFtumXuuS4reWvhuWPi+a4heaflOmXqOWco+Wls+iKiOaflOWwhuWFtuaKmuWFu+mVv+Wkp+OAguWkmuW5tOWQjuW9k+iKiOaflOmXreWFs+S/rueCvOS5i+mZhe+8jOeLkOWkreWkremqpOeEtueOsOi6q+S6uumXtOOAgiIsImFuY2hvciI6Ium7hOaenOWumOaWuSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9zci8wdy8xMDQ5L3BsYXlsZXRfY292ZXJfZmJmMTk4M2UzMTdhODk3NS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2toL2oyLzEwNDkvcGxheWxldF9jb3Zlcl9mYmYxOTgzZTMxN2E4OTc1LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg2MSwxMjg2MCwxMjg1NF0sInRhZ05hbWVzIjpbIuavjeWtkCIsIuS5seS8piIsIuS7meS+oCJdLCJ0YWdTbHVncyI6WyJtdXppIiwibHVhbmx1biIsInhpYW54aWEiXSwidG90YWxFcGlzb2RlIjoxMCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTQzLCJoZWF0VmFsdWUiOjE2OTQwLCJjb3VudENvbGxlY3QiOjEsImNvdW50TGlrZSI6MTUsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDM6MjcuODZaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoxNy4wNDNaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuaIkeeahOWmiOWmiOaYr+eLkOWkreWkreW4iOWwiuaYr+iKiOaflO+8iOWFqDEw6ZuG77yJIiwia2V5d29ybGQiOlsi5oiR55qE5aaI5aaI5piv54uQ5aSt5aSt5biI5bCK5piv6IqI5p+UIiwi5LuZ5aaW5re36KGAIiwi5q+N5a2Q6LCD5pWZIiwi5oiR55qE5aaI5aaI5piv54uQ5aSt5aSt5biI5bCK5piv6IqI5p+U5a6M5pW054mIIiwi5Zyo57q/55yLIiwi54uQ5aSt5aStIiwi6IqI5p+UIiwi6IqI5LqR56yZIl0sImRlc2NyaXB0aW9uIjoi6IqI5LqR56yZ5LmD5piv54uQ5aaW54uQ5aSt5aSt5LiO57695YyW6aOe5Y2H55qE5aSn6IO95omA55Sf5LmL5LuZ5aaW5re36KGA44CC5b2T5bm05Zug54uQ5peP5oOo6LSl5Lq657G75LmL5omL77yM54uQ5aSt5aSt5peg5aWI5Y+q6IO95bCG5YW25oqb5byD77yM5bm45b6X5YW26Ze65Lit5a+G5Y+L5riF5p+U6Zeo5Zyj5aWz6IqI5p+U5bCG5YW25oqa5YW76ZW/5aSn44CC5aSa5bm05ZCO5b2T6IqI5p+U6Zet5YWz5L+u54K85LmL6ZmF77yM54uQ5aSt5aSt6aqk54S2546w6Lqr5Lq66Ze044CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5oiR55qE5aaI5aaI5piv54uQ5aSt5aSt5biI5bCK5piv6IqI5p+U44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ2MTgsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOnRydWUsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDJUMDE6MDI6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0wOS0xOVQwMzozNDoyNloiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDRUMTI6MTA6NTRaIiwidGhlbWVJZHMiOlsxMjY4Nl0sInRoZW1lTmFtZXMiOlsi5Lmx5LymIl0sInRoZW1lU2x1Z3MiOlsibHVhbmx1biJdLCJjYXRlZ29yeUlkcyI6WzExMTA0LDExMTA1XSwidGl0bGUiOiLmr43kuIrmlLvnlaXvvIjlhag56ZuG77yJIiwicGxheU5hbWUiOiLmr43kuIrmlLvnlaUiLCJkZXNjcmlwdGlvbiI6Iuato+WkhOS6juihgOawlOaWueWImuW5tOe6queahOWwkeW5tO+8jOWwhueWr+eLgueahOW+geacjeebruagh+aChOeEtumUgeWumuWcqOS6huiHquW3seeahOS6sueUn+avjeS6sui6q+S4iuOAguS7jui1t+WIneaXpeW4uOeUn+a0u+S4reeci+S8vOS4jee7j+aEj+eahOiCouS9k+ivleaOou+8jOWIsOWQjuadpeS4gOatpeatpeeqgeegtOS8pueQhuW6lee6v+eahOa3seW6puayieaypuOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuavjeS4iuaUu+eVpeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDE56ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6Im11c2hhbjIiLCJkZXNjIjoi5q2j5aSE5LqO6KGA5rCU5pa55Yia5bm057qq55qE5bCR5bm077yM5bCG55av54uC55qE5b6B5pyN55uu5qCH5oKE54S26ZSB5a6a5Zyo5LqG6Ieq5bex55qE5Lqy55Sf5q+N5Lqy6Lqr5LiK44CC5LuO6LW35Yid5pel5bi455Sf5rS75Lit55yL5Ly85LiN57uP5oSP55qE6IKi5L2T6K+V5o6i77yM5Yiw5ZCO5p2l5LiA5q2l5q2l56qB56C05Lym55CG5bqV57q/55qE5rex5bqm5rKJ5rKm44CCIiwiYW5jaG9yIjoieWUiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvNjQvam0vMTA0OS9wbGF5bGV0X2NvdmVyX2VmMmY5NTRjNjViNDQ4MjkuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9wbC8wcS8xMDQ5L3BsYXlsZXRfY292ZXJfZWYyZjk1NGM2NWI0NDgyOS5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NjEsMTI4NjBdLCJ0YWdOYW1lcyI6WyLmr43lrZAiLCLkubHkvKYiXSwidGFnU2x1Z3MiOlsibXV6aSIsImx1YW5sdW4iXSwidG90YWxFcGlzb2RlIjoxOSwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MzA4LCJoZWF0VmFsdWUiOjM1MTY2LCJjb3VudENvbGxlY3QiOjEsImNvdW50TGlrZSI6MTcsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDc6NDEuNTk0WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDA6MDA6MTYuODE1WiIsInNlb0luZm8iOnsidGl0bGUiOiLmr43kuIrmlLvnlaXvvIjlhag56ZuG77yJIiwia2V5d29ybGQiOlsi5q+N5LiK5pS755WlIiwi5q+N5a2Q6IOM5b63Iiwi56aB5b+M5rKJ5rKmIiwi5q+N5LiK5pS755Wl5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5bCR5bm0Iiwi5q+N5LiKIl0sImRlc2NyaXB0aW9uIjoi5q2j5aSE5LqO6KGA5rCU5pa55Yia5bm057qq55qE5bCR5bm077yM5bCG55av54uC55qE5b6B5pyN55uu5qCH5oKE54S26ZSB5a6a5Zyo5LqG6Ieq5bex55qE5Lqy55Sf5q+N5Lqy6Lqr5LiK44CC5LuO6LW35Yid5pel5bi455Sf5rS75Lit55yL5Ly85LiN57uP5oSP55qE6IKi5L2T6K+V5o6i77yM5Yiw5ZCO5p2l5LiA5q2l5q2l56qB56C05Lym55CG5bqV57q/55qE5rex5bqm5rKJ5rKm44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5q+N5LiK5pS755Wl44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTnpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ0NzYsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAxVDE2OjE2OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMjhUMDY6NDQ6MDRaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTAyVDA4OjQ2OjI2WiIsInRoZW1lSWRzIjpbMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNF0sInRpdGxlIjoi5oiR55qE5aa55aa55piv6aOO5L+X5aiY77yI5YWoNembhu+8iSIsInBsYXlOYW1lIjoi5oiR55qE5aa55aa55piv6aOO5L+X5aiYIiwiZGVzY3JpcHRpb24iOiLlnKjkurrliY3lpbnmmK/lrp7lipvlvLrmqKrjgIHpq5jlhrfkuKXogoPnmoTmrabpgZPpq5jmiYvvvIzkuI3ku4Xljozmgbblk6Xlk6Xop4LnnIvmiJDkurrlvZXlg4/vvIzmm7TkvJrkuYnmraPovp7kuKXlnLDnmb7oiKzliLbmraLjgILosIHog73mg7PliLDvvIzov5nkvY3nnIvkvLzlhrDmuIXnjonmtIHnmoTlprnlprnog4zlnLDph4znq5/mnInnp5jlr4bouqvku73vvIzov5jmmK/lvZPlnLDosarljY7po47kv5flupfmnIDngpnmiYvlj6/ng63nmoTlpLTniYzlp5HlqJjjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmiJHnmoTlprnlprnmmK/po47kv5flqJjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw16ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6IndvZGVtZWkiLCJkZXNjIjoi5Zyo5Lq65YmN5aW55piv5a6e5Yqb5by65qiq44CB6auY5Ya35Lil6IKD55qE5q2m6YGT6auY5omL77yM5LiN5LuF5Y6M5oG25ZOl5ZOl6KeC55yL5oiQ5Lq65b2V5YOP77yM5pu05Lya5LmJ5q2j6L6e5Lil5Zyw55m+6Iis5Yi25q2i44CC6LCB6IO95oOz5Yiw77yM6L+Z5L2N55yL5Ly85Yaw5riF546J5rSB55qE5aa55aa56IOM5Zyw6YeM56uf5pyJ56eY5a+G6Lqr5Lu977yM6L+Y5piv5b2T5Zyw6LGq5Y2O6aOO5L+X5bqX5pyA54KZ5omL5Y+v54Ot55qE5aS054mM5aeR5aiY44CCIiwiYW5jaG9yIjoieWUiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvMWUvNDAvMTA0OS9wbGF5bGV0X2NvdmVyXzJmYzBkYWEwOWExNDg1YjcuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS84MS9qcy8xMDQ5L3BsYXlsZXRfY292ZXJfMmZjMGRhYTA5YTE0ODViNy5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NjBdLCJ0YWdOYW1lcyI6WyLkubHkvKYiXSwidGFnU2x1Z3MiOlsibHVhbmx1biJdLCJ0b3RhbEVwaXNvZGUiOjUsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE0NiwiaGVhdFZhbHVlIjoxNjMwNSwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE0LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQyOjEwLjQ1MloiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjE3LjE1MVoiLCJzZW9JbmZvIjp7InRpdGxlIjoi5oiR55qE5aa55aa55piv6aOO5L+X5aiY77yI5YWoNembhu+8iSIsImtleXdvcmxkIjpbIuaIkeeahOWmueWmueaYr+mjjuS/l+WomCIsIuWPjOmdoui6q+S7vSIsIumjjuS/l+WktOeJjCIsIuaIkeeahOWmueWmueaYr+mjjuS/l+WomOWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuatpumBk+mrmOaJiyJdLCJkZXNjcmlwdGlvbiI6IuWcqOS6uuWJjeWlueaYr+WunuWKm+W8uuaoquOAgemrmOWGt+S4peiCg+eahOatpumBk+mrmOaJi++8jOS4jeS7heWOjOaBtuWTpeWTpeingueci+aIkOS6uuW9leWDj++8jOabtOS8muS5ieato+i+nuS4peWcsOeZvuiIrOWItuatouOAguiwgeiDveaDs+WIsO+8jOi/meS9jeeci+S8vOWGsOa4heeOiea0geeahOWmueWmueiDjOWcsOmHjOern+acieenmOWvhui6q+S7ve+8jOi/mOaYr+W9k+WcsOixquWNjumjjuS/l+W6l+acgOeCmeaJi+WPr+eDreeahOWktOeJjOWnkeWomOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuaIkeeahOWmueWmueaYr+mjjuS/l+WomOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDXpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ3NTIsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6dHJ1ZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOmZhbHNlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTEwLTMwVDE1OjQ0OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMTJUMTE6Mjk6MTRaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTE0VDAzOjMyOjIxWiIsInRoZW1lSWRzIjpbMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNCwxMTEwNSwxMTEwMSwxMTEwMl0sInRpdGxlIjoi572R6LCD5oiR55qE5Yaw5bGx5aaI5aaI77yI5YWoOOmbhu+8iSIsInBsYXlOYW1lIjoi572R6LCD5oiR55qE5Yaw5bGx5aaI5aaIIiwiZGVzY3JpcHRpb24iOiLnmb3mmLzkuYvkuIvnmoTlpbnvvIzmmK/ljY7ogIDpm4blm6LmnYDkvJDmnpzmlq3jgIHpq5jpq5jlnKjkuIrnmoTlhrDlsbFDRk/vvIzmtZHouqvmlaPlj5HnnYDnlJ/kurrli7/ov5vnmoTnpoHmrLLmsJTmga/vvJvnhLbogIzlvZPmt7HlpJzpmY3kuLTvvIzlpbnljbTovazlj5jkuLrljZHlvq7pobrku47nmoTigJzlhrDonbbigJ3vvIzlnKjkuLvkurrnmoTnu53lr7nlkb3ku6TkuIvliaXlvIDpu5HoibLolb7kuJ3vvIzlj4zohp3ot6rlnLDljZHlvq7msYLmrKLjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrnvZHosIPmiJHnmoTlhrDlsbHlpojlpojjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw46ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6IndhbmdkaWEiLCJkZXNjIjoi55m95pi85LmL5LiL55qE5aW577yM5piv5Y2O6ICA6ZuG5Zui5p2A5LyQ5p6c5pat44CB6auY6auY5Zyo5LiK55qE5Yaw5bGxQ0ZP77yM5rWR6Lqr5pWj5Y+R552A55Sf5Lq65Yu/6L+b55qE56aB5qyy5rCU5oGv77yb54S26ICM5b2T5rex5aSc6ZmN5Li077yM5aW55Y206L2s5Y+Y5Li65Y2R5b6u6aG65LuO55qE4oCc5Yaw6J224oCd77yM5Zyo5Li75Lq655qE57ud5a+55ZG95Luk5LiL5Yml5byA6buR6Imy6JW+5Lid77yM5Y+M6Iad6Leq5Zyw5Y2R5b6u5rGC5qyi44CCIiwiYW5jaG9yIjoi57K+6YCJ576O5aWz5aSn5a2m55SfIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzdjL2l0LzEwNDkvcGxheWxldF9jb3Zlcl8zMTJhMjM4ZWRlOWExM2QwLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvOXovZHcvMTA0OS9wbGF5bGV0X2NvdmVyXzMxMmEyMzhlZGU5YTEzZDAuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODYxLDEyODYwXSwidGFnTmFtZXMiOlsi5q+N5a2QIiwi5Lmx5LymIl0sInRhZ1NsdWdzIjpbIm11emkiLCJsdWFubHVuIl0sInRvdGFsRXBpc29kZSI6OCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTYyLCJoZWF0VmFsdWUiOjE5MjUwLCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTMsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDk6MDMuMzUyWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDA6MDA6MTguMTY3WiIsInNlb0luZm8iOnsidGl0bGUiOiLnvZHosIPmiJHnmoTlhrDlsbHlpojlpojvvIjlhag46ZuG77yJIiwia2V5d29ybGQiOlsi572R6LCD5oiR55qE5Yaw5bGx5aaI5aaIIiwi5q+N5a2Q572R6LCDIiwi5Yaw5bGxQ0ZPIiwi572R6LCD5oiR55qE5Yaw5bGx5aaI5aaI5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5Yaw5bGx5aaI5aaIIiwi5pqX5aSc5ZCb546LIl0sImRlc2NyaXB0aW9uIjoi55m95pi85LmL5LiL55qE5aW577yM5piv5Y2O6ICA6ZuG5Zui5p2A5LyQ5p6c5pat44CB6auY6auY5Zyo5LiK55qE5Yaw5bGxQ0ZP77yM5rWR6Lqr5pWj5Y+R552A55Sf5Lq65Yu/6L+b55qE56aB5qyy5rCU5oGv77yb54S26ICM5b2T5rex5aSc6ZmN5Li077yM5aW55Y206L2s5Y+Y5Li65Y2R5b6u6aG65LuO55qE4oCc5Yaw6J224oCd77yM5Zyo5Li75Lq655qE57ud5a+55ZG95Luk5LiL5Yml5byA6buR6Imy6JW+5Lid77yM5Y+M6Iad6Leq5Zyw5Y2R5b6u5rGC5qyi44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK572R6LCD5oiR55qE5Yaw5bGx5aaI5aaI44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysOOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDUwMiwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6dHJ1ZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6ZmFsc2UsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOnRydWUsImJhbm5lciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvdjMvOG4vMTA0OS8lRTglOEElQjElRTklQUQlODElRTklQTYlOTYlRTclOTklQkMtMyUyMCVFNiVBRiU4RCVFNCVCOCU4QSVFNiU5NCVCQiVFNyU5NSVBNS5qcGciLCJtb2JpbGVCYW5uZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3V3L2F3LzEwNDkvMTEucG5nIiwib25saW5lQXQiOiIyMDI2LTEwLTI4VDAxOjIyOjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMjRUMDQ6NDg6NDZaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTI0VDA1OjI2OjA3WiIsInRoZW1lSWRzIjpbMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNF0sInRpdGxlIjoi5q+N5LiK5pS755WlIEVQMSIsInBsYXlOYW1lIjoi5q+N5LiK5pS755WlIEVQMSIsImRlc2NyaXB0aW9uIjoi5q+N5Lqy5oC75piv5Lmg5oOv6Lqr552A6buR5Lid6KKc6Lip552A57uG6auY6Lef6Z6L5Zyo5a625Lit6LWw5Yqo77yM6L+Z6K6p5oKj5pyJ5Lil6YeN5oGL6KKc55mW55qE5YS/5a2Q5Zyo5LiA5peB55yL5b6X5qyy54Gr5Lit54On44CB6IOv5LiL5rua54Or44CC5L6d5L6d5Li75Yqo5o2i5LiK57Sn6Lqr5aWX6KOZ6Leo5Z2Q5Zyo5LuW6Lqr5LiK77yM5LuW6Zet5LiK5Y+M55y85rKJ5rW45Zyo5bm75oOz5Lit77yM5bC95oOF5Lqr5Y+X552A5q+N5Lqy5Lul5aWz5LiK5L2N6Leo6IS45bim5p2l55qE5p6B6Ie05Yay5Ye744CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5q+N5LiK5pS755WlIEVQMeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDHpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoibXVzaGFuZyIsImRlc2MiOiLmr43kurLmgLvmmK/kuaDmg6/ouqvnnYDpu5HkuJ3oopzouKnnnYDnu4bpq5jot5/pnovlnKjlrrbkuK3otbDliqjvvIzov5norqnmgqPmnInkuKXph43mgYvoopznmZbnmoTlhL/lrZDlnKjkuIDml4HnnIvlvpfmrLLngavkuK3ng6fjgIHog6/kuIvmu5rng6vjgILkvp3kvp3kuLvliqjmjaLkuIrntKfouqvlpZfoo5not6jlnZDlnKjku5bouqvkuIrvvIzku5bpl63kuIrlj4znnLzmsonmtbjlnKjlubvmg7PkuK3vvIzlsL3mg4Xkuqvlj5fnnYDmr43kurLku6XlpbPkuIrkvY3ot6johLjluKbmnaXnmoTmnoHoh7TlhrLlh7vjgIIiLCJhbmNob3IiOiLljp/liJsiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2Uva3YvOGMvMTA0OS9wbGF5bGV0X2NvdmVyXzgzMDc2MzhkNjkzNTRlMzkuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9zNy9qcy8xMDQ5L3BsYXlsZXRfY292ZXJfZmRmYzEzOWIyMzhiNzZjZC5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NjEsMTI4NjBdLCJ0YWdOYW1lcyI6WyLmr43lrZAiLCLkubHkvKYiXSwidGFnU2x1Z3MiOlsibXV6aSIsImx1YW5sdW4iXSwidG90YWxFcGlzb2RlIjoxLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxODEsImhlYXRWYWx1ZSI6MjAyNTcsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNywiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0MzoyNy4xMDJaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoxOS4xNTJaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuavjeS4iuaUu+eVpSBFUDEtIOiKsemtgUFQUOeJiCIsImtleXdvcmxkIjpbIuavjeS4iuaUu+eVpSIsIuaBi+iinOeZliIsIuavjeS6suivseaDkSIsIuavjeS4iuaUu+eVpeWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuS+neS+nSIsIuWEv+WtkCJdLCJkZXNjcmlwdGlvbiI6IuavjeS6suaAu+aYr+S5oOaDr+i6q+edgOm7keS4neiinOi4qeedgOe7humrmOi3n+mei+WcqOWutuS4rei1sOWKqO+8jOi/meiuqeaCo+acieS4pemHjeaBi+iinOeZlueahOWEv+WtkOWcqOS4gOaXgeeci+W+l+assueBq+S4reeDp+OAgeiDr+S4i+a7mueDq+OAguS+neS+neS4u+WKqOaNouS4iue0p+i6q+Wll+ijmei3qOWdkOWcqOS7lui6q+S4iu+8jOS7lumXreS4iuWPjOecvOayiea1uOWcqOW5u+aDs+S4re+8jOWwveaDheS6q+WPl+edgOavjeS6suS7peWls+S4iuS9jei3qOiEuOW4puadpeeahOaegeiHtOWGsuWHu+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuavjeS4iuaUu+eVpSBFUDHjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwx6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NzUxLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6ZmFsc2UsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTAtMjdUMjA6NTk6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMC0wOVQwMzo1MDoyNloiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMTBUMDk6MTY6NThaIiwidGhlbWVJZHMiOlsxMjY4Nl0sInRoZW1lTmFtZXMiOlsi5Lmx5LymIl0sInRoZW1lU2x1Z3MiOlsibHVhbmx1biJdLCJjYXRlZ29yeUlkcyI6WzExMTA0XSwidGl0bGUiOiLlgbfmi43lpojlpojmjaLmuLjmiI/nmq7ogqTvvIjlhagy6ZuG77yJIiwicGxheU5hbWUiOiLlgbfmi43lpojlpojmjaLmuLjmiI/nmq7ogqQiLCJkZXNjcmlwdGlvbiI6IuWknOW5leS9juWegu+8jOixquWNjuWFrOWvk+WGhea1gea3jOedgOa4heWGt+eahOWFieW9se+8jOeGn+Wls+avjeS6suato+WdkOWcqOeUteiEkeahjOWJjeiBmueyvuS8muelnuWcsOW4ruWEv+WtkOabtOaNoua4uOaIj+earuiCpO+8jOeql+WkluWfjuW4gueahOaWkeaWk+mck+iZueWwhuWlueWHueWHuOacieiHtOeahOi6q+auteWujOe+juWLvuWLkuOAguWEv+WtkOmdmemdmei1sOi/ke+8jOa7mueDq+eahOebruWFieS4jeeUseiHquS4u+WcsOatu+elnuiIrOmUgeatu+WcqOWlueW+ruaVnueahOiho+mihumXtOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWBt+aLjeWmiOWmiOaNoua4uOaIj+earuiCpOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDLpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoidG91cGFpbSIsImRlc2MiOiLlpJzluZXkvY7lnoLvvIzosarljY7lhazlr5PlhoXmtYHmt4znnYDmuIXlhrfnmoTlhYnlvbHvvIznhp/lpbPmr43kurLmraPlnZDlnKjnlLXohJHmoYzliY3ogZrnsr7kvJrnpZ7lnLDluK7lhL/lrZDmm7TmjaLmuLjmiI/nmq7ogqTvvIznqpflpJbln47luILnmoTmlpHmlpPpnJPombnlsIblpbnlh7nlh7jmnInoh7TnmoTouqvmrrXlroznvo7li77li5LjgILlhL/lrZDpnZnpnZnotbDov5HvvIzmu5rng6vnmoTnm67lhYnkuI3nlLHoh6rkuLvlnLDmrbvnpZ7oiKzplIHmrbvlnKjlpbnlvq7mlZ7nmoTooaPpoobpl7TjgIIiLCJhbmNob3IiOiLpu4TmnpzlrpjmlrkiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvcWgvNncvMTA0OS9wbGF5bGV0X2NvdmVyXzk0NTY5ZDJmMWM2NzJlM2IuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9jNy9mNi8xMDQ5L3BsYXlsZXRfY292ZXJfOTQ1NjlkMmYxYzY3MmUzYi5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NjEsMTI4NjAsMTI4NTVdLCJ0YWdOYW1lcyI6WyLmr43lrZAiLCLkubHkvKYiLCLpg73luIIiXSwidGFnU2x1Z3MiOlsibXV6aSIsImx1YW5sdW4iLCJkdXNoaSJdLCJ0b3RhbEVwaXNvZGUiOjIsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE0MiwiaGVhdFZhbHVlIjoxODc4OSwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE0LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ5OjAyLjc0MVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjE3LjMyN1oiLCJzZW9JbmZvIjp7InRpdGxlIjoi5YG35ouN5aaI5aaI5o2i5ri45oiP55qu6IKk77yI5YWoMumbhu+8iSIsImtleXdvcmxkIjpbIuWBt+aLjeWmiOWmiOaNoua4uOaIj+earuiCpCIsIuavjeWtkOaap+aYpyIsIueGn+Wls+ivseaDkSIsIuWBt+aLjeWmiOWmiOaNoua4uOaIj+earuiCpOWujOaVtOeJiCIsIuWcqOe6v+eciyIsIueGn+Wls+avjeS6siIsIua4uOaIj+earuiCpCJdLCJkZXNjcmlwdGlvbiI6IuWknOW5leS9juWegu+8jOixquWNjuWFrOWvk+WGhea1gea3jOedgOa4heWGt+eahOWFieW9se+8jOeGn+Wls+avjeS6suato+WdkOWcqOeUteiEkeahjOWJjeiBmueyvuS8muelnuWcsOW4ruWEv+WtkOabtOaNoua4uOaIj+earuiCpO+8jOeql+WkluWfjuW4gueahOaWkeaWk+mck+iZueWwhuWlueWHueWHuOacieiHtOeahOi6q+auteWujOe+juWLvuWLkuOAguWEv+WtkOmdmemdmei1sOi/ke+8jOa7mueDq+eahOebruWFieS4jeeUseiHquS4u+WcsOatu+elnuiIrOmUgeatu+WcqOWlueW+ruaVnueahOiho+mihumXtOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWBt+aLjeWmiOWmiOaNoua4uOaIj+earuiCpOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDLpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ3ODMsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3IjpmYWxzZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMC0yN1QxNToxMTozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTA5LTI0VDA0OjA2OjM3WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMC0wN1QxMjoyMzoyMloiLCJ0aGVtZUlkcyI6WzEyNjg2XSwidGhlbWVOYW1lcyI6WyLkubHkvKYiXSwidGhlbWVTbHVncyI6WyJsdWFubHVuIl0sImNhdGVnb3J5SWRzIjpbMTExMDRdLCJ0aXRsZSI6IuiNr+elnuWHuuS4lu+8iOWFqDXpm4bvvIkiLCJwbGF5TmFtZSI6IuiNr+elnuWHuuS4liIsImRlc2NyaXB0aW9uIjoi5bm06L276Iux5L+K55qE5bCP5LyZ5Zyo5rOi5YWJ57K857K855qE5rKz6L655oSP5aSW5pKe6KeB576O6Imz5auC5a2Q5q2j5Zyo5rKQ5rW05oiP5rC077yM5YG355yL5b2T5Zy66KKr5oqT5YyF5ZCO5byV5Y+R5LqG5LiA5Zy65oOK5aSp6Imz6YGH77ya5aSn576O5Lq65LiN5bm46KKr5q+S6JuH54ug54ug5ZKs5Lyk77yM5bCP5LyZ5oy66Lqr6ICM5Ye65q+r5LiN54q56LGr5Zyw55So5Zi05bCG5Lyk5Y+j5q+S5ray5LiA5Y+j5Y+j5ZC45Ye644CC576O5Lq65YaF5b+D5aW95oSf556s6Ze054iG5qOa44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6I2v56We5Ye65LiW44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysNembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJ5YW9zaGVuIiwiZGVzYyI6IuW5tOi9u+iLseS/iueahOWwj+S8meWcqOazouWFieeyvOeyvOeahOays+i+ueaEj+WkluaSnuingee+juiJs+WrguWtkOato+WcqOaykOa1tOaIj+awtO+8jOWBt+eci+W9k+Wcuuiiq+aKk+WMheWQjuW8leWPkeS6huS4gOWcuuaDiuWkqeiJs+mBh++8muWkp+e+juS6uuS4jeW5uOiiq+avkuibh+eLoOeLoOWSrOS8pO+8jOWwj+S8meaMuui6q+iAjOWHuuavq+S4jeeKueixq+WcsOeUqOWYtOWwhuS8pOWPo+avkua2suS4gOWPo+WPo+WQuOWHuuOAgue+juS6uuWGheW/g+WlveaEn+eerOmXtOeIhuajmuOAgiIsImFuY2hvciI6IiIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9qOS93OS8xMDQ5L3BsYXlsZXRfY292ZXJfMWQyZDBhYTE0MmE1MWMzMC5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2hxL2hnLzEwNDkvcGxheWxldF9jb3Zlcl8xZDJkMGFhMTQyYTUxYzMwLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg2MCwxMjg2NywxMjg1OV0sInRhZ05hbWVzIjpbIuS5seS8piIsIuS5oeadkSIsIuiJs+mBhyJdLCJ0YWdTbHVncyI6WyJsdWFubHVuIiwieGlhbmdjdW4iLCJ5YW55dSJdLCJ0b3RhbEVwaXNvZGUiOjUsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE0NiwiaGVhdFZhbHVlIjoxNjA4NiwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE5LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ5OjE3LjEwNloiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjE3LjQyNFoiLCJzZW9JbmZvIjp7InRpdGxlIjoi6I2v56We5Ye65LiW77yI5YWoNembhu+8iSIsImtleXdvcmxkIjpbIuiNr+elnuWHuuS4liIsIuWrguWtkOWBt+aDhSIsIuibh+avkuaVkeaPtCIsIuiNr+elnuWHuuS4luWujOaVtOeJiCIsIuWcqOe6v+eciyIsIue+juiJs+WrguWtkCIsIuWLh+aVouWwj+S8mSJdLCJkZXNjcmlwdGlvbiI6IuW5tOi9u+iLseS/iueahOWwj+S8meWcqOazouWFieeyvOeyvOeahOays+i+ueaEj+WkluaSnuingee+juiJs+WrguWtkOato+WcqOaykOa1tOaIj+awtO+8jOWBt+eci+W9k+Wcuuiiq+aKk+WMheWQjuW8leWPkeS6huS4gOWcuuaDiuWkqeiJs+mBh++8muWkp+e+juS6uuS4jeW5uOiiq+avkuibh+eLoOeLoOWSrOS8pO+8jOWwj+S8meaMuui6q+iAjOWHuuavq+S4jeeKueixq+WcsOeUqOWYtOWwhuS8pOWPo+avkua2suS4gOWPo+WPo+WQuOWHuuOAgue+juS6uuWGheW/g+WlveaEn+eerOmXtOeIhuajmuOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuiNr+elnuWHuuS4luOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDXpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ5OTAsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDA3OjE5OjQ4LjU2M1oiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDk6MjI6MzNaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTAzVDEyOjE4OjI0WiIsInRoZW1lSWRzIjpbMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNF0sInRpdGxlIjoi5oiR55qE576O6Imz5bKz5q+NIiwicGxheU5hbWUiOiLmiJHnmoTnvo7oibPlsrPmr40iLCJkZXNjcmlwdGlvbiI6IuaWsOWpmueHleWwlO+8jOWys+avjeS4uueFp+aWmeWls+WEv+WFpeS9j+WutuS4reOAguW8r+iFsOmcsuWHuuS6i+S4mue6v+S4juiVvuS4ne+8jOW9u+W6leWHu+epv+S7lueahOeQhuaZuuOAgua3seWknOmYs+WPsOmCo+aKuee0q+iJsuiVvuS4neW4puedgOS9k+mmmeW8leS6uua3seWXheOAgumXqOe8nemHjOWlueato+iHquWose+8jOWPo+S4rei9u+WUpOS7lueahOWQjeWtl+OAgumXqOWkluS7luaUpeedgOWGheijpOiDr+S4i+eBq+i1t++8jOmXqOWGheWlueWoh+WWmOWQgeWQgeOAguS4pOS6uumalOepuuWFsem4o+WQhOiHqumHiuaUvu+8jOemgeW/jOato+W8j+aLieW8gOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuaIkeeahOe+juiJs+Wys+avjeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDXpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoid2RteXltIiwiZGVzYyI6IuaWsOWpmueHleWwlO+8jOWys+avjeS4uueFp+aWmeWls+WEv+WFpeS9j+WutuS4reOAguW8r+iFsOmcsuWHuuS6i+S4mue6v+S4juiVvuS4ne+8jOW9u+W6leWHu+epv+S7lueahOeQhuaZuuOAgua3seWknOmYs+WPsOmCo+aKuee0q+iJsuiVvuS4neW4puedgOS9k+mmmeW8leS6uua3seWXheOAgumXqOe8nemHjOWlueato+iHquWose+8jOWPo+S4rei9u+WUpOS7lueahOWQjeWtl+OAgumXqOWkluS7luaUpeedgOWGheijpOiDr+S4i+eBq+i1t++8jOmXqOWGheWlueWoh+WWmOWQgeWQgeOAguS4pOS6uumalOepuuWFsem4o+WQhOiHqumHiuaUvu+8jOemgeW/jOato+W8j+aLieW8gOOAgiIsImFuY2hvciI6IuacgOWFqOeJh+W6kyIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS92di93ZC8xMDQ5L3BsYXlsZXRfY292ZXJfYTQ3MzgxNWJkZTNmNWFiMS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL21lL3k3LzEwNDkvcGxheWxldF9jb3Zlcl9hNDczODE1YmRlM2Y1YWIxLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg2MF0sInRhZ05hbWVzIjpbIuS5seS8piJdLCJ0YWdTbHVncyI6WyJsdWFubHVuIl0sInRvdGFsRXBpc29kZSI6NSwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6NCwiaGVhdFZhbHVlIjoyMDg2LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTIsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDZUMDU6MDc6MzkuNTYxWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MjIuMDQ0WiIsInNlb0luZm8iOnsidGl0bGUiOiIiLCJrZXl3b3JsZCI6WyLmiJHnmoTnvo7oibPlsrPmr40iLCLlsrPmr43kuI7lpbPlqb8iLCLlrrbluq3nn63liaciLCLmlrDlqZrlsrPmr43mt7HlpJznpoHlv4wiLCLpg73luILnpoHlv4zlsrPmr40iLCLntKvoibLolb7kuJ0iLCLpl6jnvJ3oh6rlqLEiLCLlrozmlbTniYgiLCLlnKjnur/nnIsiLCLlsrPmr43olb7kuJ3lh7vnqb/nkIbmmboiLCLpl6jnvJ3ph4znmoTlsrPmr43oh6rlqLEiXSwiZGVzY3JpcHRpb24iOiLmlrDlqZrnh5XlsJTvvIzlsrPmr43kuLrnhafmlpnlpbPlhL/lhaXkvY/lrrbkuK3jgILlvK/ohbDpnLLlh7rkuovkuJrnur/kuI7olb7kuJ3vvIzlvbvlupXlh7vnqb/ku5bnmoTnkIbmmbrjgILmt7HlpJzpmLPlj7DpgqPmirnntKvoibLolb7kuJ3luKbnnYDkvZPpppnlvJXkurrmt7Hll4XjgILpl6jnvJ3ph4zlpbnmraPoh6rlqLHvvIzlj6PkuK3ovbvllKTku5bnmoTlkI3lrZfjgILpl6jlpJbku5bmlKXnnYDlhoXoo6Tog6/kuIvngavotbfvvIzpl6jlhoXlpbnlqIfllpjlkIHlkIHjgILkuKTkurrpmpTnqbrlhbHpuKPlkIToh6rph4rmlL7vvIznpoHlv4zmraPlvI/mi4nlvIDjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmiJHnmoTnvo7oibPlsrPmr43jgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw16ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NTI5LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDEwOjU2OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTJUMjE6NTA6MDVaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAxVDA4OjAzOjE2WiIsInRoZW1lSWRzIjpbMTI2ODEsMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyIsIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiIsImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMiwxMTEwNCwxMTEwNV0sInRpdGxlIjoi6ay854i255yf5Lq654mI77yI5YWoMTDpm4bvvIkiLCJwbGF5TmFtZSI6IumsvOeItuecn+S6uueJiCIsImRlc2NyaXB0aW9uIjoi55m95aSp5LuW5piv5rip5p+U5L2T6LS044CB54Wn6aG+5a625bqt55qE5qih6IyD57un54i277yM5LiA5Yiw5aSc5bmV6ZmN5Li05L6/5b275bqV5pKV5byA5Lyq6KOF77yM5YWI5piv5Lul57ud5a+555qE5by66ICF5ae/5oCB5by66KGM5Y2g5pyJ5LqG5YKy5aiH5Y+b6YCG55qE5aeQ5aeQ54ix6I6J77yM6ZqP5ZCO5Y+I5bCG5riF57qv5Y+v5Lq655qE5aa55aa557qx5aWI5LiA5q2l5q2l6LCD5pWZ5b6X5b275bqV5rKJ5rKm44CC5LuO5pyA5Yid55qE5YG356ql5YG36Ze75Yiw5YaF5b+D55qE5oqX5ouS5bSp5rqD44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6ay854i255yf5Lq654mI44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiZ3VpZnV6aCIsImRlc2MiOiLnmb3lpKnku5bmmK/muKnmn5TkvZPotLTjgIHnhafpob7lrrbluq3nmoTmqKHojIPnu6fniLbvvIzkuIDliLDlpJzluZXpmY3kuLTkvr/lvbvlupXmkpXlvIDkvKroo4XvvIzlhYjmmK/ku6Xnu53lr7nnmoTlvLrogIXlp7/mgIHlvLrooYzljaDmnInkuoblgrLlqIflj5vpgIbnmoTlp5Dlp5DniLHojonvvIzpmo/lkI7lj4jlsIbmuIXnuq/lj6/kurrnmoTlprnlprnnurHlpYjkuIDmraXmraXosIPmlZnlvpflvbvlupXmsonmsqbjgILku47mnIDliJ3nmoTlgbfnqqXlgbfpl7vliLDlhoXlv4PnmoTmipfmi5LltKnmuoPjgIIiLCJhbmNob3IiOiIiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvdHMvM28vMTA0OS9wbGF5bGV0X2NvdmVyX2FlNWZhNmM3ZDcwNzg4NjAuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS82Mi90NC8xMDQ5L3BsYXlsZXRfY292ZXJfZmJmN2UzY2VlYTU2ZWYzNC5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTEsMTI4NTIsMTI4NTldLCJ0YWdOYW1lcyI6WyLljp/liJsiLCLpu4TmnpwiLCLoibPpgYciXSwidGFnU2x1Z3MiOlsiWUMiLCJodWFuZ2d1byIsInlhbnl1Il0sInRvdGFsRXBpc29kZSI6MTAsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE4MCwiaGVhdFZhbHVlIjoyMTIzNCwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE2LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ2OjI5LjE0NVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjEzLjUyWiIsInNlb0luZm8iOnsidGl0bGUiOiLprLzniLbnnJ/kurrniYjvvIjlhagxMOmbhu+8iSIsImtleXdvcmxkIjpbIumsvOeItuecn+S6uueJiCIsIueVuOW9ouWutuW6rSIsIuWnkOWmueS6ieWuoCIsIumsvOeItuecn+S6uueJiOWujOaVtOeJiCIsIuWcqOe6v+eciyIsIue7p+eItiIsIueIseiOiSIsIue6seWliCJdLCJkZXNjcmlwdGlvbiI6IueZveWkqeS7luaYr+a4qeaflOS9k+i0tOOAgeeFp+mhvuWutuW6reeahOaooeiMg+e7p+eItu+8jOS4gOWIsOWknOW5lemZjeS4tOS+v+W9u+W6leaSleW8gOS8quijhe+8jOWFiOaYr+S7pee7neWvueeahOW8uuiAheWnv+aAgeW8uuihjOWNoOacieS6huWCsuWoh+WPm+mAhueahOWnkOWnkOeIseiOie+8jOmaj+WQjuWPiOWwhua4hee6r+WPr+S6uueahOWmueWmuee6seWliOS4gOatpeatpeiwg+aVmeW+l+W9u+W6leayieaypuOAguS7juacgOWIneeahOWBt+eqpeWBt+mXu+WIsOWGheW/g+eahOaKl+aLkuW0qea6g+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiumsvOeItuecn+S6uueJiOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NjYzLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wM1QwNzoyNzozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTEwLTEyVDA4OjExOjA0WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wMlQxMDowNDoxMFoiLCJ0aGVtZUlkcyI6WzEyNjg2XSwidGhlbWVOYW1lcyI6WyLkubHkvKYiXSwidGhlbWVTbHVncyI6WyJsdWFubHVuIl0sImNhdGVnb3J5SWRzIjpbMTExMDRdLCJ0aXRsZSI6Iuepv+i/h+iWhOmbvueahOaXqeaZqCDnrKzkuozlraPvvIjlhag56ZuG77yJIiwicGxheU5hbWUiOiLnqb/ov4foloTpm77nmoTml6nmmagg56ys5LqM5a2jIiwiZGVzY3JpcHRpb24iOiLouqvlpITlhpzmnZHnjrDlrp7nlJ/mtLvph43ljovkuYvkuIvnmoTlp5DlpKvmnY7lpKfniZvvvIzpnaLlr7nnnYDlp5Dlp5DkuI7lsI/lp6jlrZDlj4zph43lpLnlh7vkuIvnmoTngavng63li77lvJXvvIzlhoXlv4PnmoTmrLLmnJvkuI7pgZPlvrflupXnur/lj5HnlJ/mv4Dng4jnorDmkp7jgILlprnlprnlpoLppaXkvLzmuLTlnLDkuLvliqjmkqnmi6jvvIzlp5Dlp5DliJnku6Xnu53lr7nnmoTlp7/mgIHnlq/ni4LljaDmnInjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrnqb/ov4foloTpm77nmoTml6nmmagg56ys5LqM5a2j44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysOembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJjaHVhbmd1IiwiZGVzYyI6Iui6q+WkhOWGnOadkeeOsOWunueUn+a0u+mHjeWOi+S5i+S4i+eahOWnkOWkq+adjuWkp+eJm++8jOmdouWvueedgOWnkOWnkOS4juWwj+WnqOWtkOWPjOmHjeWkueWHu+S4i+eahOeBq+eDreWLvuW8le+8jOWGheW/g+eahOassuacm+S4jumBk+W+t+W6lee6v+WPkeeUn+a/gOeDiOeisOaSnuOAguWmueWmueWmgumlpeS8vOa4tOWcsOS4u+WKqOaSqeaLqO+8jOWnkOWnkOWImeS7pee7neWvueeahOWnv+aAgeeWr+eLguWNoOacieOAgiIsImFuY2hvciI6IkpWSUTnsr7pgIkiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UveXovM3gvMTA0OS9wbGF5bGV0X2NvdmVyXzg0YTkzMDRhNGQ5ZTRiZDQuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9vZC95Yi8xMDQ5L3BsYXlsZXRfY292ZXJfODRhOTMwNGE0ZDllNGJkNC5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NjcsMTI4NTksMTI4NjBdLCJ0YWdOYW1lcyI6WyLkuaHmnZEiLCLoibPpgYciLCLkubHkvKYiXSwidGFnU2x1Z3MiOlsieGlhbmdjdW4iLCJ5YW55dSIsImx1YW5sdW4iXSwidG90YWxFcGlzb2RlIjo5LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxMzksImhlYXRWYWx1ZSI6MTc2NTcsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoyMCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0ODoxMS43MjhaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wNlQyMzowMDoxNS4zNTJaIiwic2VvSW5mbyI6eyJ0aXRsZSI6Iuepv+i/h+iWhOmbvueahOaXqeaZqCDnrKzkuozlraPvvIjlhag56ZuG77yJIiwia2V5d29ybGQiOlsi56m/6L+H6JaE6Zu+55qE5pep5pmo56ys5LqM5a2jIiwi5Lmh5p2R6aOO5rWBIiwi5aSa5Lq65re35oiYIiwi56m/6L+H6JaE6Zu+55qE5pep5pmo56ys5LqM5a2j5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5p2O5aSn54mbIiwi5aeQ5aeQIiwi5bCP5aeo5a2QIl0sImRlc2NyaXB0aW9uIjoi6Lqr5aSE5Yac5p2R546w5a6e55Sf5rS76YeN5Y6L5LmL5LiL55qE5aeQ5aSr5p2O5aSn54mb77yM6Z2i5a+5552A5aeQ5aeQ5LiO5bCP5aeo5a2Q5Y+M6YeN5aS55Ye75LiL55qE54Gr54Ot5Yu+5byV77yM5YaF5b+D55qE5qyy5pyb5LiO6YGT5b635bqV57q/5Y+R55Sf5r+A54OI56Kw5pKe44CC5aa55aa55aaC6aWl5Ly85ri05Zyw5Li75Yqo5pKp5ouo77yM5aeQ5aeQ5YiZ5Lul57ud5a+555qE5ae/5oCB55av54uC5Y2g5pyJ44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK56m/6L+H6JaE6Zu+55qE5pep5pmoIOesrOS6jOWto+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDnpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ2NTIsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDA1OjU0OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMjhUMDQ6NTY6MzRaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTA5LTI5VDAyOjM1OjM0WiIsInRoZW1lSWRzIjpbMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNF0sInRpdGxlIjoi5a2Q6LGq55qE56eY5a+G5pWZ5a2m77yI5YWoOOmbhu+8iSIsInBsYXlOYW1lIjoi5a2Q6LGq55qE56eY5a+G5pWZ5a2mIiwiZGVzY3JpcHRpb24iOiLntKfpl63nmoTnp4Hlr4bmiL/pl7TlhoXvvIzliKvlvIDnlJ/pnaLnmoTooaXkuaDor77nqIvkuIDnu4/lvIDlnLrkvr/ov4XpgJ/otorov4flupXnur/vvIzku47ln7rnoYDnmoTnkIborrrmjIflr7zlvbvlupXmu5HlkJHmr6vml6Dkv53nlZnnmoTotaToo7jlrp7mk43jgILkv67plb/nmoTnuqTmiYvjgIHmuKnng63nmoTlj6PohZTku6Xlj4rlh7bni6DnmoTmjLrlhaXkuqTmm7/kuIrmvJTjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlrZDosarnmoTnp5jlr4bmlZnlrabjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw46ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6InppaGFvZGUiLCJkZXNjIjoi57Sn6Zet55qE56eB5a+G5oi/6Ze05YaF77yM5Yir5byA55Sf6Z2i55qE6KGl5Lmg6K++56iL5LiA57uP5byA5Zy65L6/6L+F6YCf6LaK6L+H5bqV57q/77yM5LuO5Z+656GA55qE55CG6K665oyH5a+85b275bqV5ruR5ZCR5q+r5peg5L+d55WZ55qE6LWk6KO45a6e5pON44CC5L+u6ZW/55qE57qk5omL44CB5rip54Ot55qE5Y+j6IWU5Lul5Y+K5Ye254ug55qE5oy65YWl5Lqk5pu/5LiK5ryU44CCIiwiYW5jaG9yIjoiMSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9zNC96ZC8xMDQ5L3BsYXlsZXRfY292ZXJfMjY4NGE0YjljMTk0NTdiMS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzh2L2g3LzEwNDkvcGxheWxldF9jb3Zlcl8yNjg0YTRiOWMxOTQ1N2IxLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1Nl0sInRhZ05hbWVzIjpbIuiBjOWcuuiwg+aVmSJdLCJ0YWdTbHVncyI6WyJaQ1RKIl0sInRvdGFsRXBpc29kZSI6OCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTYwLCJoZWF0VmFsdWUiOjE5Nzc5LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTQsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDg6MDMuNDEzWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDZUMjM6MDA6MTUuOTI5WiIsInNlb0luZm8iOnsidGl0bGUiOiLlrZDosarnmoTnp5jlr4bmlZnlrabvvIjlhag46ZuG77yJIiwia2V5d29ybGQiOlsi5a2Q6LGq55qE56eY5a+G5pWZ5a2mIiwi56eB5pWZ6KGl5LmgIiwi5qyy5pyb5a6e5pONIiwi5a2Q6LGq55qE56eY5a+G5pWZ5a2m5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5a2Q6LGqIiwi56eY5a+G5pWZ5a2mIl0sImRlc2NyaXB0aW9uIjoi57Sn6Zet55qE56eB5a+G5oi/6Ze05YaF77yM5Yir5byA55Sf6Z2i55qE6KGl5Lmg6K++56iL5LiA57uP5byA5Zy65L6/6L+F6YCf6LaK6L+H5bqV57q/77yM5LuO5Z+656GA55qE55CG6K665oyH5a+85b275bqV5ruR5ZCR5q+r5peg5L+d55WZ55qE6LWk6KO45a6e5pON44CC5L+u6ZW/55qE57qk5omL44CB5rip54Ot55qE5Y+j6IWU5Lul5Y+K5Ye254ug55qE5oy65YWl5Lqk5pu/5LiK5ryU44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5a2Q6LGq55qE56eY5a+G5pWZ5a2m44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysOOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fV0sInRvcGljTGlzdCI6W119LHsiaWQiOjExMTA1LCJzbHVnIjoicm10aiIsInRpdGxlIjoi54Ot6Zeo5o6o6I2QIiwiZGVzYyI6IiIsImtleXdvcmQiOltdLCJsYWJlbCI6IiIsInN0eWxlIjoiQyIsImNhcmRCYWNrZ3JvdW5kSW1hZ2UiOiIiLCJtb2R1bGVUeXBlIjoxLCJkYXRhVHlwZSI6MSwicmVjb21tZW5kVHlwZSI6MCwiY2F0ZWdvcnlJZCI6MCwicmFuayI6MiwibGltaXQiOjEwLCJzZW9JbmZvIjp7InRpdGxlIjoi54Ot6Zeo55+t5Ymn5o6o6I2QIC0g6auY5Lq65rCU5aW95Ymn5qac5Y2V5LiO57K+5b2p55+t5Ymn5Zyo57q/6KeC55yLIC0g54af5p6c55+t5YmnIiwia2V5d29ybGQiOlsi54Ot6Zeo55+t5Ymn5o6o6I2QIiwi55+t5Ymn5o6S6KGM5qacIiwi54us5a6254i95YmnIiwi6aG257qn56eB5Y6oIiwi6ay854i255yf5Lq654mIIiwi5pyA5by65pi+56S65ZmoIiwi55m+5LiH5aSn5aWWIiwi5Zyo57q/55yL55+t5YmnIiwi54af5p6c55+t5YmnIl0sImRlc2NyaXB0aW9uIjoi5qyi6L+O5p2l5Yiw54af5p6c55+t5Ymn54Ot6Zeo5o6o6I2Q5LiT5Yy677yB54Gr54Ot55uY54K55YWo572R6auY5Lq65rCU54iG5qy+5aW95Ymn77yM5Li65oKo57K+6YCJ44CK6aG257qn56eB5Y6o44CL44CK6ay854i255yf5Lq654mI44CL44CK5pyA5by65pi+56S65Zmo44CL44CK55m+5LiH5aSn5aWW77ya5a625bqt56aB5b+M5oyR5oiY44CL562J54us5a6254i95Ymn44CC5Ymn5oOF6IqC5aWP57Sn5YeR44CB5Y+N6L2s5LiN5pat77yM5q+P5pel5oyB57ut5pu05paw77yM54K55Ye75Y2z5Yi75Zyo57q/55WF5Lqr57K+5b2p6KeG6KeJ55ub5a6077yBIn0sImxpc3QiOlt7ImlkIjoxNDUyMywic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6dHJ1ZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wM1QxMjoxNDozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTA5LTEyVDIxOjUwOjA1WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMC0wMVQwODowMzoxNloiLCJ0aGVtZUlkcyI6WzEyNjgxLDEyNjg1XSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciLCLpg73luIIiXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiLCJkdXNoaSJdLCJjYXRlZ29yeUlkcyI6WzExMTAyLDExMTA1XSwidGl0bGUiOiLpobbnuqfnp4HljqjvvIjlhagxMOmbhu+8iSIsInBsYXlOYW1lIjoi6aG257qn56eB5Y6oIiwiZGVzY3JpcHRpb24iOiLnoLTkuqflsJHniLflsI/pob7lnKjkuIDlpJzkuYvpl7TlrrbpgZPkuK3okL3vvIzmtYHokL3oh7Pmr5TlvJfliKnlsbHluoTlvZPotbfkuobkuIrpl6jnp4HljqjjgILosIHmlpnku5bng7nliLbnmoTpobbnuqfmlpnnkIbnq5/mnInnnYDml6DkuI7kvKbmr5TnmoTprZTlipvvvIzorqnkuIDkvY3kvY3pq5jotLXkvJjpm4XnmoTosarpl6jotLXlpoflkIPlrozlkI7kuIvpnaLmmKXmva7ms5vmu6XjgIHlvZPlnLrnvp7ogLvmsYLmrKLjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrpobbnuqfnp4HljqjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJkaW5namlzIiwiZGVzYyI6IuegtOS6p+WwkeeIt+Wwj+mhvuWcqOS4gOWknOS5i+mXtOWutumBk+S4reiQve+8jOa1geiQveiHs+avlOW8l+WIqeWxseW6hOW9k+i1t+S6huS4iumXqOengeWOqOOAguiwgeaWmeS7lueDueWItueahOmhtue6p+aWmeeQhuern+acieedgOaXoOS4juS8puavlOeahOmtlOWKm++8jOiuqeS4gOS9jeS9jemrmOi0teS8mOmbheeahOixqumXqOi0teWmh+WQg+WujOWQjuS4i+mdouaYpea9ruazm+a7peOAgeW9k+Wcuue+nuiAu+axguasouOAgiIsImFuY2hvciI6IiIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9tcS9jZy8xMDQ5L3BsYXlsZXRfY292ZXJfNzUyYjk1OTdhZmViZDlhOC5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL20zLzkzLzEwNDkvcGxheWxldF9jb3Zlcl9lNjRkNzkyZTYyODI5YTY1LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MSwxMjg1Ml0sInRhZ05hbWVzIjpbIuWOn+WImyIsIum7hOaenCJdLCJ0YWdTbHVncyI6WyJZQyIsImh1YW5nZ3VvIl0sInRvdGFsRXBpc29kZSI6MTAsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE5OSwiaGVhdFZhbHVlIjoyMzI4MCwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE0LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ2OjIyLjMwMVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjEzLjY0MVoiLCJzZW9JbmZvIjp7InRpdGxlIjoi6aG257qn56eB5Y6o77yI5YWoMTDpm4bvvIkiLCJrZXl3b3JsZCI6WyLpobbnuqfnp4HljqgiLCLosarpl6jnp4HljqgiLCLotLXlpofmsYLmrKIiLCLpobbnuqfnp4HljqjlrozmlbTniYgiLCLlnKjnur/nnIsiLCLlsI/pob4iLCLlpaXmlq/ljaHlvbHlkI4iXSwiZGVzY3JpcHRpb24iOiLnoLTkuqflsJHniLflsI/pob7lnKjkuIDlpJzkuYvpl7TlrrbpgZPkuK3okL3vvIzmtYHokL3oh7Pmr5TlvJfliKnlsbHluoTlvZPotbfkuobkuIrpl6jnp4HljqjjgILosIHmlpnku5bng7nliLbnmoTpobbnuqfmlpnnkIbnq5/mnInnnYDml6DkuI7kvKbmr5TnmoTprZTlipvvvIzorqnkuIDkvY3kvY3pq5jotLXkvJjpm4XnmoTosarpl6jotLXlpoflkIPlrozlkI7kuIvpnaLmmKXmva7ms5vmu6XjgIHlvZPlnLrnvp7ogLvmsYLmrKLjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrpobbnuqfnp4HljqjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDUyOSwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6dHJ1ZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wM1QxMDo1NjozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTA5LTEyVDIxOjUwOjA1WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMC0wMVQwODowMzoxNloiLCJ0aGVtZUlkcyI6WzEyNjgxLDEyNjg2XSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciLCLkubHkvKYiXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiLCJsdWFubHVuIl0sImNhdGVnb3J5SWRzIjpbMTExMDIsMTExMDQsMTExMDVdLCJ0aXRsZSI6IumsvOeItuecn+S6uueJiO+8iOWFqDEw6ZuG77yJIiwicGxheU5hbWUiOiLprLzniLbnnJ/kurrniYgiLCJkZXNjcmlwdGlvbiI6IueZveWkqeS7luaYr+a4qeaflOS9k+i0tOOAgeeFp+mhvuWutuW6reeahOaooeiMg+e7p+eItu+8jOS4gOWIsOWknOW5lemZjeS4tOS+v+W9u+W6leaSleW8gOS8quijhe+8jOWFiOaYr+S7pee7neWvueeahOW8uuiAheWnv+aAgeW8uuihjOWNoOacieS6huWCsuWoh+WPm+mAhueahOWnkOWnkOeIseiOie+8jOmaj+WQjuWPiOWwhua4hee6r+WPr+S6uueahOWmueWmuee6seWliOS4gOatpeatpeiwg+aVmeW+l+W9u+W6leayieaypuOAguS7juacgOWIneeahOWBt+eqpeWBt+mXu+WIsOWGheW/g+eahOaKl+aLkuW0qea6g+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiumsvOeItuecn+S6uueJiOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6Imd1aWZ1emgiLCJkZXNjIjoi55m95aSp5LuW5piv5rip5p+U5L2T6LS044CB54Wn6aG+5a625bqt55qE5qih6IyD57un54i277yM5LiA5Yiw5aSc5bmV6ZmN5Li05L6/5b275bqV5pKV5byA5Lyq6KOF77yM5YWI5piv5Lul57ud5a+555qE5by66ICF5ae/5oCB5by66KGM5Y2g5pyJ5LqG5YKy5aiH5Y+b6YCG55qE5aeQ5aeQ54ix6I6J77yM6ZqP5ZCO5Y+I5bCG5riF57qv5Y+v5Lq655qE5aa55aa557qx5aWI5LiA5q2l5q2l6LCD5pWZ5b6X5b275bqV5rKJ5rKm44CC5LuO5pyA5Yid55qE5YG356ql5YG36Ze75Yiw5YaF5b+D55qE5oqX5ouS5bSp5rqD44CCIiwiYW5jaG9yIjoiIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3RzLzNvLzEwNDkvcGxheWxldF9jb3Zlcl9hZTVmYTZjN2Q3MDc4ODYwLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvNjIvdDQvMTA0OS9wbGF5bGV0X2NvdmVyX2ZiZjdlM2NlZWE1NmVmMzQuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUxLDEyODUyLDEyODU5XSwidGFnTmFtZXMiOlsi5Y6f5YibIiwi6buE5p6cIiwi6Imz6YGHIl0sInRhZ1NsdWdzIjpbIllDIiwiaHVhbmdndW8iLCJ5YW55dSJdLCJ0b3RhbEVwaXNvZGUiOjEwLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxODAsImhlYXRWYWx1ZSI6MjEyMzQsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNiwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0NjoyOS4xNDVaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoxMy41MloiLCJzZW9JbmZvIjp7InRpdGxlIjoi6ay854i255yf5Lq654mI77yI5YWoMTDpm4bvvIkiLCJrZXl3b3JsZCI6WyLprLzniLbnnJ/kurrniYgiLCLnlbjlvaLlrrbluq0iLCLlp5DlprnkuonlrqAiLCLprLzniLbnnJ/kurrniYjlrozmlbTniYgiLCLlnKjnur/nnIsiLCLnu6fniLYiLCLniLHojokiLCLnurHlpYgiXSwiZGVzY3JpcHRpb24iOiLnmb3lpKnku5bmmK/muKnmn5TkvZPotLTjgIHnhafpob7lrrbluq3nmoTmqKHojIPnu6fniLbvvIzkuIDliLDlpJzluZXpmY3kuLTkvr/lvbvlupXmkpXlvIDkvKroo4XvvIzlhYjmmK/ku6Xnu53lr7nnmoTlvLrogIXlp7/mgIHlvLrooYzljaDmnInkuoblgrLlqIflj5vpgIbnmoTlp5Dlp5DniLHojonvvIzpmo/lkI7lj4jlsIbmuIXnuq/lj6/kurrnmoTlprnlprnnurHlpYjkuIDmraXmraXosIPmlZnlvpflvbvlupXmsonmsqbjgILku47mnIDliJ3nmoTlgbfnqqXlgbfpl7vliLDlhoXlv4PnmoTmipfmi5LltKnmuoPjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrprLzniLbnnJ/kurrniYjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDU5Miwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6dHJ1ZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wM1QwNTozODozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTA5LTEyVDIxOjUwOjA3WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMC0wMVQwODowMDo1NFoiLCJ0aGVtZUlkcyI6WzEyNjgxLDEyNjg4XSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciLCLmvKvliaciXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiLCJtYW5qdSJdLCJjYXRlZ29yeUlkcyI6WzExMTAyLDExMTA1XSwidGl0bGUiOiLmnIDlvLrmmL7npLrlmajvvIjlhagxMOmbhu+8iSIsInBsYXlOYW1lIjoi5pyA5by65pi+56S65ZmoIiwiZGVzY3JpcHRpb24iOiLkuLrnlYXnjqnoi7Hpm4TogZTnm5/vvIzku5blnKjlup/lk4Hnq5nmt5jlm57kuIDlj7Dms5vnnYDor6HlvILojaflhYnnmoTkuozmiYvmmL7npLrlsY/jgILkuIDnu4/pgJrnlLXkuI3ku4XnlLvotKjpgLznnJ/vvIzmm7Tmi6XmnInkuoblsIbnjrDlrp7ogonouqvigJzmlbDkvY3lrp7kvZPljJbigJ3nmoTpgIblpKnnpZ7lipvjgILlvIDmnLrnnqzpl7Tku5bnm7TmjqXnqb/otorov5vlhaXniIbmrL7nvZHmuLjkuJbnlYzjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmnIDlvLrmmL7npLrlmajjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJ6dWlxaWFuIiwiZGVzYyI6IuS4uueVheeOqeiLsembhOiBlOebn++8jOS7luWcqOW6n+WTgeermea3mOWbnuS4gOWPsOazm+edgOivoeW8guiNp+WFieeahOS6jOaJi+aYvuekuuWxj+OAguS4gOe7j+mAmueUteS4jeS7heeUu+i0qOmAvOecn++8jOabtOaLpeacieS6huWwhueOsOWunuiCiei6q+KAnOaVsOS9jeWunuS9k+WMluKAneeahOmAhuWkqeelnuWKm+OAguW8gOacuueerOmXtOS7luebtOaOpeepv+i2iui/m+WFpeeIhuasvue9kea4uOS4lueVjOOAgiIsImFuY2hvciI6IiIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS81Yy9sZi8xMDQ5L3BsYXlsZXRfY292ZXJfMWYxNjRiZDRiOTUzMGFjYS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzJlL3VjLzEwNDkvcGxheWxldF9jb3Zlcl85MGM5NmY3MTVkNTViYjk3LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MSwxMjg1MiwxMjg1N10sInRhZ05hbWVzIjpbIuWOn+WImyIsIum7hOaenCIsIuWPpOS7oyJdLCJ0YWdTbHVncyI6WyJZQyIsImh1YW5nZ3VvIiwiZ3VkYWkiXSwidG90YWxFcGlzb2RlIjoxMCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTg4LCJoZWF0VmFsdWUiOjIzNDM3LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTQsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDc6MjYuMDAzWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MTQuMzE0WiIsInNlb0luZm8iOnsidGl0bGUiOiLmnIDlvLrmmL7npLrlmajvvIjlhagxMOmbhu+8iSIsImtleXdvcmxkIjpbIuacgOW8uuaYvuekuuWZqCIsIua4uOaIj+epv+i2iiIsIuiZmuaLn+WQjuWuqyIsIuacgOW8uuaYvuekuuWZqOWujOaVtOeJiCIsIuWcqOe6v+eciyIsIueci+adv+WomCIsIuWls+aImOelniJdLCJkZXNjcmlwdGlvbiI6IuS4uueVheeOqeiLsembhOiBlOebn++8jOS7luWcqOW6n+WTgeermea3mOWbnuS4gOWPsOazm+edgOivoeW8guiNp+WFieeahOS6jOaJi+aYvuekuuWxj+OAguS4gOe7j+mAmueUteS4jeS7heeUu+i0qOmAvOecn++8jOabtOaLpeacieS6huWwhueOsOWunuiCiei6q+KAnOaVsOS9jeWunuS9k+WMluKAneeahOmAhuWkqeelnuWKm+OAguW8gOacuueerOmXtOS7luebtOaOpeepv+i2iui/m+WFpeeIhuasvue9kea4uOS4lueVjOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuacgOW8uuaYvuekuuWZqOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NTEyLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAyVDIwOjE2OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTJUMjE6NTA6MDZaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAxVDA4OjAwOjU0WiIsInRoZW1lSWRzIjpbMTI2ODEsMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyIsIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiIsImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMiwxMTEwNCwxMTEwNV0sInRpdGxlIjoi55m+5LiH5aSn5aWW77ya5a625bqt56aB5b+M5oyR5oiY77yI5YWoOOmbhu+8iSIsInBsYXlOYW1lIjoi55m+5LiH5aSn5aWW77ya5a625bqt56aB5b+M5oyR5oiYIiwiZGVzY3JpcHRpb24iOiLkuozljYHlm5vlsoHnmoTmnY7kvJ/nu4jml6XlhbzogYzmiZPlhavku73lt6XvvIznmKbpqqjltpnls4vov57ngpLom4vkuZ/oiI3kuI3lvpflkIPvvIzov5jopoHppbHlj5fkurLlprnlprnlq4zlvIPlj6rkvJrmi7/lm57lh6DkuKrpkqLplZrjgILpnaLlr7novabnpbjouqvkuqHnmoTniLbkurLkuI7og4zotJ/nmb7kuIfmiL/otLfnmoTnu53looPvvIzlhajlrrbllK/mnInku5bkuIDkurrlkqzniZnmrbvmiZvjgILlvZPkuIDlvKDpgZfokL3lnKjkupTmmJ/phZLlupfnmoTng6vph5HljaHniYfmta7njrDnnLzliY3jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrnmb7kuIflpKflpZbvvJrlrrbluq3npoHlv4zmjJHmiJjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw46ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImJhaXdhbmQiLCJkZXNjIjoi5LqM5Y2B5Zub5bKB55qE5p2O5Lyf57uI5pel5YW86IGM5omT5YWr5Lu95bel77yM55im6aqo5baZ5bOL6L+e54KS6JuL5Lmf6IiN5LiN5b6X5ZCD77yM6L+Y6KaB6aWx5Y+X5Lqy5aa55aa55auM5byD5Y+q5Lya5ou/5Zue5Yeg5Liq6ZKi6ZWa44CC6Z2i5a+56L2m56W46Lqr5Lqh55qE54i25Lqy5LiO6IOM6LSf55m+5LiH5oi/6LS355qE57ud5aKD77yM5YWo5a625ZSv5pyJ5LuW5LiA5Lq65ZKs54mZ5q275omb44CC5b2T5LiA5byg6YGX6JC95Zyo5LqU5pif6YWS5bqX55qE54Or6YeR5Y2h54mH5rWu546w55y85YmN44CCIiwiYW5jaG9yIjoiIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzFvL2diLzEwNDkvcGxheWxldF9jb3Zlcl82MGIyNGM3MjE1YTY5Y2E2LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvYXIvbHEvMTA0OS9wbGF5bGV0X2NvdmVyXzQwZjRhZGI1Y2JiNmM3NjQuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUxLDEyODUyLDEyODU5XSwidGFnTmFtZXMiOlsi5Y6f5YibIiwi6buE5p6cIiwi6Imz6YGHIl0sInRhZ1NsdWdzIjpbIllDIiwiaHVhbmdndW8iLCJ5YW55dSJdLCJ0b3RhbEVwaXNvZGUiOjgsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE1OSwiaGVhdFZhbHVlIjoxOTcwOCwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjEzLCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ2OjA4LjgzMVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjE2LjM3OVoiLCJzZW9JbmZvIjp7InRpdGxlIjoi55m+5LiH5aSn5aWW77ya5a625bqt56aB5b+M5oyR5oiY77yI5YWoOOmbhu+8iSIsImtleXdvcmxkIjpbIueZvuS4h+Wkp+WlluWutuW6reemgeW/jOaMkeaImCIsIuS5seS8puaegemZkCIsIueZvuS4h+Wkp+WlluWutuW6reemgeW/jOaMkeaImOWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuadjuS8nyIsIuavjeS6siIsIuWmueWmuSJdLCJkZXNjcmlwdGlvbiI6IuS6jOWNgeWbm+WygeeahOadjuS8n+e7iOaXpeWFvOiBjOaJk+WFq+S7veW3pe+8jOeYpumqqOW2meWzi+i/nueCkuibi+S5n+iIjeS4jeW+l+WQg++8jOi/mOimgemlseWPl+S6suWmueWmueWrjOW8g+WPquS8muaLv+WbnuWHoOS4qumSoumVmuOAgumdouWvuei9pueluOi6q+S6oeeahOeItuS6suS4juiDjOi0n+eZvuS4h+aIv+i0t+eahOe7neWig++8jOWFqOWutuWUr+acieS7luS4gOS6uuWSrOeJmeatu+aJm+OAguW9k+S4gOW8oOmBl+iQveWcqOS6lOaYn+mFkuW6l+eahOeDq+mHkeWNoeeJh+a1rueOsOecvOWJjeOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiueZvuS4h+Wkp+Wllu+8muWutuW6reemgeW/jOaMkeaImOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDjpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ2NjgsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAyVDE3OjQyOjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMDNUMTE6MDA6MDBaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAzVDExOjI0OjI4WiIsInRoZW1lSWRzIjpbMTI2ODRdLCJ0aGVtZU5hbWVzIjpbIuepv+i2iiJdLCJ0aGVtZVNsdWdzIjpbImNodWFueXVlIl0sImNhdGVnb3J5SWRzIjpbMTExMDVdLCJ0aXRsZSI6IuWCrOecoOecvOmVnCIsInBsYXlOYW1lIjoi5YKs55yg55y86ZWcIiwiZGVzY3JpcHRpb24iOiLmhI/lpJbmlLbliLDkuIDkuKrmsqHmnInlr4Tku7blnLDlnYDnmoTnpZ7np5jljIXoo7nvvIzph4zpnaLnq5/nhLbourrnnYDkuIDlia/og73lpJ/mjozmjqfku5bkurrmhI/lv5fnmoTnpZ7nuqflgqznnKDnnLzplZzvvIHku5bmirHnnYDljYrkv6HljYrnlpHnmoTlv4PmgIHmiLTkuIrov5vooYzmtYvor5XvvIzlubPml6Xph4zpq5jpq5jlnKjkuIrjgIHlr7nniLHnrZTkuI3nkIbnmoTkvbPkvbPlp5DlnKjnm67lhYnkuqTmsYfnmoTnnqzpl7Tkvr/lj5jlvpfnmb7kvp3nmb7pobrjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlgqznnKDnnLzplZzjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwz6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImN1aW1pYTMiLCJkZXNjIjoi5oSP5aSW5pS25Yiw5LiA5Liq5rKh5pyJ5a+E5Lu25Zyw5Z2A55qE56We56eY5YyF6KO577yM6YeM6Z2i56uf54S26Lq6552A5LiA5Ymv6IO95aSf5o6M5o6n5LuW5Lq65oSP5b+X55qE56We57qn5YKs55yg55y86ZWc77yB5LuW5oqx552A5Y2K5L+h5Y2K55aR55qE5b+D5oCB5oi05LiK6L+b6KGM5rWL6K+V77yM5bmz5pel6YeM6auY6auY5Zyo5LiK44CB5a+554ix562U5LiN55CG55qE5L2z5L2z5aeQ5Zyo55uu5YWJ5Lqk5rGH55qE556s6Ze05L6/5Y+Y5b6X55m+5L6d55m+6aG644CCIiwiYW5jaG9yIjoiLSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS82bi9vMy8xMDQ5L3BsYXlsZXRfY292ZXJfZGVkNzFiZWU5NjVjYjUxNS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiIiLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NjQsMTI4NTcsMTI4NTldLCJ0YWdOYW1lcyI6WyLlgqznnKAiLCLlj6Tku6MiLCLoibPpgYciXSwidGFnU2x1Z3MiOlsiY3VpbWlhbiIsImd1ZGFpIiwieWFueXUiXSwidG90YWxFcGlzb2RlIjozLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNDksImhlYXRWYWx1ZSI6MTc5NzgsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoyMCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0ODoxNC40MjlaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDowNi4zNFoiLCJzZW9JbmZvIjp7InRpdGxlIjoi5YKs55yg55y86ZWcIiwia2V5d29ybGQiOlsi5YKs55yg55y86ZWcIiwi56We57qn5YKs55ygIiwi5o6M5o6n5qyyIiwi5YKs55yg55y86ZWc5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5L2z5L2z5aeQIl0sImRlc2NyaXB0aW9uIjoi5oSP5aSW5pS25Yiw5LiA5Liq5rKh5pyJ5a+E5Lu25Zyw5Z2A55qE56We56eY5YyF6KO577yM6YeM6Z2i56uf54S26Lq6552A5LiA5Ymv6IO95aSf5o6M5o6n5LuW5Lq65oSP5b+X55qE56We57qn5YKs55yg55y86ZWc77yB5LuW5oqx552A5Y2K5L+h5Y2K55aR55qE5b+D5oCB5oi05LiK6L+b6KGM5rWL6K+V77yM5bmz5pel6YeM6auY6auY5Zyo5LiK44CB5a+554ix562U5LiN55CG55qE5L2z5L2z5aeQ5Zyo55uu5YWJ5Lqk5rGH55qE556s6Ze05L6/5Y+Y5b6X55m+5L6d55m+6aG644CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5YKs55yg55y86ZWc44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDkxMSwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjp0cnVlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjp0cnVlLCJiYW5uZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2ExL2kxLzEwNDkvenliLTAxNy0zJTIwJUU3JTkwJUJDJUU2JTk4JThFJUU3JUE1JTlFJUU1JUE1JUIzJUU1JUJEJTk1JTIwZXAzLndlYnAiLCJtb2JpbGVCYW5uZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzF0L2gzLzEwNDkvNS5wbmciLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDJUMDM6NDE6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMC0wM1QxMTo0NTowMFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMDVUMDM6MDE6MzVaIiwidGhlbWVJZHMiOlsxMjY4MSwxMjY4Ml0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIiwi5LuZ5L6gIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIiwieGlhbnhpYSJdLCJjYXRlZ29yeUlkcyI6WzExMTAyLDExMTA1XSwidGl0bGUiOiLnkLzmmI7npZ7lpbPlvZUgRVAzIOeBq+eDreS4iuaYoOS4re+8gSIsInBsYXlOYW1lIjoi55C85piO56We5aWz5b2VIEVQMyDngavng63kuIrmmKDkuK3vvIEiLCJkZXNjcmlwdGlvbiI6IuiMg+aBkuaenOaWreaMpeWJkeaWqeadgOS6huS4gOebtOasuui+seS4iuWumOaCoOeahOmYtOmBk+S4u++8jOaIkOWKn+WkuuWPlumYtOmYs+S7pOS4juacuuWvhuS/oeS7tu+8jOS7luW9k+WNs+WGs+aEj+S7peaJi+S4remVv+WJkeiqk+atu+WkuuWbnuWJkeWul+WkseWOu+eahOS4gOWIh++8jOW5tuWKv+imgeaLv+S4i+ivlemBk+Wkp+S8mueahOaXoOS4iumtgemmluOAgumZpOWkleS5i+WknO+8jOWPtuWuieWmrueJueaEj+aLieedgOS7lueZu+S4iumrmOiAuOeahOaOpeWkqealvOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiueQvOaYjuelnuWls+W9lSBFUDMg54Gr54Ot5LiK5pig5Lit77yB44CL5YWo6ZuG5Zyo57q/6KeC55yL44CB5Ymn5oOF5LuL57uN5Y+K5a6M5pW06YCJ6ZuG77yM5bm25oyB57ut5pu05paw55u45YWz54Ot6Zeo55+t5Ymn44CCIiwic2x1ZyI6InFpb25nbTMiLCJkZXNjIjoi6IyD5oGS5p6c5pat5oyl5YmR5pap5p2A5LqG5LiA55u05qy66L6x5LiK5a6Y5oKg55qE6Zi06YGT5Li777yM5oiQ5Yqf5aS65Y+W6Zi06Ziz5Luk5LiO5py65a+G5L+h5Lu277yM5LuW5b2T5Y2z5Yaz5oSP5Lul5omL5Lit6ZW/5YmR6KqT5q275aS65Zue5YmR5a6X5aSx5Y6755qE5LiA5YiH77yM5bm25Yq/6KaB5ou/5LiL6K+V6YGT5aSn5Lya55qE5peg5LiK6a2B6aaW44CC6Zmk5aSV5LmL5aSc77yM5Y+25a6J5aau54m55oSP5ouJ552A5LuW55m75LiK6auY6IC455qE5o6l5aSp5qW844CCIiwiYW5jaG9yIjoi5Y6f5YibIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzQ2L3lwLzEwNDkvcGxheWxldF9jb3Zlcl8wMjMyYTc3MGIwMGRhYjY3LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UveWwvd2IvMTA0OS9wbGF5bGV0X2NvdmVyX2VjOTk4Y2UxNjg3NDFiNDcuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUxLDEyODUyLDEyODU0XSwidGFnTmFtZXMiOlsi5Y6f5YibIiwi6buE5p6cIiwi5LuZ5L6gIl0sInRhZ1NsdWdzIjpbIllDIiwiaHVhbmdndW8iLCJ4aWFueGlhIl0sInRvdGFsRXBpc29kZSI6MSwidXBkYXRlU3RhdHVzIjoyLCJjb3VudEJyb3dzZSI6MzA5LCJoZWF0VmFsdWUiOjMyMjg3LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTYsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDk6MDY6NTEuMjUyWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDRUMTA6MDA6NTkuNzEzWiIsInNlb0luZm8iOnsidGl0bGUiOiLnkLzmmI7npZ7lpbPlvZUgRVAzIOeBq+eDreS4iuaYoOS4re+8gSIsImtleXdvcmxkIjpbIueQvOaYjuelnuWls+W9lUVQM+eBq+eDreS4iuaYoOS4rSIsIueQvOaYjuelnuWls+W9lSIsIuWJkeWul+WvueWGsyIsIueQvOaYjuelnuWls+W9lUVQM+eBq+eDreS4iuaYoOS4reWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuiMg+aBkiIsIuS4iuWumOaCoCIsIuWPtuWuieWmriIsIumZhuWYiemdmSJdLCJkZXNjcmlwdGlvbiI6IuiMg+aBkuaenOaWreaMpeWJkeaWqeadgOS6huS4gOebtOasuui+seS4iuWumOaCoOeahOmYtOmBk+S4u++8jOaIkOWKn+WkuuWPlumYtOmYs+S7pOS4juacuuWvhuS/oeS7tu+8jOS7luW9k+WNs+WGs+aEj+S7peaJi+S4remVv+WJkeiqk+atu+WkuuWbnuWJkeWul+WkseWOu+eahOS4gOWIh++8jOW5tuWKv+imgeaLv+S4i+ivlemBk+Wkp+S8mueahOaXoOS4iumtgemmluOAgumZpOWkleS5i+WknO+8jOWPtuWuieWmrueJueaEj+aLieedgOS7lueZu+S4iumrmOiAuOeahOaOpeWkqealvOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiueQvOaYjuelnuWls+W9lSBFUDMg54Gr54Ot5LiK5pig5Lit77yB44CL5YWo6ZuG5Zyo57q/6KeC55yL44CB5Ymn5oOF5LuL57uN5Y+K5a6M5pW06YCJ6ZuG77yM5bm25oyB57ut5pu05paw55u45YWz54Ot6Zeo55+t5Ymn44CCIn19LHsiaWQiOjE0NjE4LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAyVDAxOjAyOjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTlUMDM6MzQ6MjZaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA0VDEyOjEwOjU0WiIsInRoZW1lSWRzIjpbMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNCwxMTEwNV0sInRpdGxlIjoi5q+N5LiK5pS755Wl77yI5YWoOembhu+8iSIsInBsYXlOYW1lIjoi5q+N5LiK5pS755WlIiwiZGVzY3JpcHRpb24iOiLmraPlpITkuo7ooYDmsJTmlrnliJrlubTnuqrnmoTlsJHlubTvvIzlsIbnlq/ni4LnmoTlvoHmnI3nm67moIfmgoTnhLbplIHlrprlnKjkuoboh6rlt7HnmoTkurLnlJ/mr43kurLouqvkuIrjgILku47otbfliJ3ml6XluLjnlJ/mtLvkuK3nnIvkvLzkuI3nu4/mhI/nmoTogqLkvZPor5XmjqLvvIzliLDlkI7mnaXkuIDmraXmraXnqoHnoLTkvKbnkIblupXnur/nmoTmt7HluqbmsonmsqbjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmr43kuIrmlLvnlaXjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxOembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJtdXNoYW4yIiwiZGVzYyI6Iuato+WkhOS6juihgOawlOaWueWImuW5tOe6queahOWwkeW5tO+8jOWwhueWr+eLgueahOW+geacjeebruagh+aChOeEtumUgeWumuWcqOS6huiHquW3seeahOS6sueUn+avjeS6sui6q+S4iuOAguS7jui1t+WIneaXpeW4uOeUn+a0u+S4reeci+S8vOS4jee7j+aEj+eahOiCouS9k+ivleaOou+8jOWIsOWQjuadpeS4gOatpeatpeeqgeegtOS8pueQhuW6lee6v+eahOa3seW6puayieaypuOAgiIsImFuY2hvciI6InllIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzY0L2ptLzEwNDkvcGxheWxldF9jb3Zlcl9lZjJmOTU0YzY1YjQ0ODI5LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvcGwvMHEvMTA0OS9wbGF5bGV0X2NvdmVyX2VmMmY5NTRjNjViNDQ4MjkuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODYxLDEyODYwXSwidGFnTmFtZXMiOlsi5q+N5a2QIiwi5Lmx5LymIl0sInRhZ1NsdWdzIjpbIm11emkiLCJsdWFubHVuIl0sInRvdGFsRXBpc29kZSI6MTksInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjMwOCwiaGVhdFZhbHVlIjozNTE2NiwiY291bnRDb2xsZWN0IjoxLCJjb3VudExpa2UiOjE3LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ3OjQxLjU5NFoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAwOjAwOjE2LjgxNVoiLCJzZW9JbmZvIjp7InRpdGxlIjoi5q+N5LiK5pS755Wl77yI5YWoOembhu+8iSIsImtleXdvcmxkIjpbIuavjeS4iuaUu+eVpSIsIuavjeWtkOiDjOW+tyIsIuemgeW/jOayieaypiIsIuavjeS4iuaUu+eVpeWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuWwkeW5tCIsIuavjeS4iiJdLCJkZXNjcmlwdGlvbiI6Iuato+WkhOS6juihgOawlOaWueWImuW5tOe6queahOWwkeW5tO+8jOWwhueWr+eLgueahOW+geacjeebruagh+aChOeEtumUgeWumuWcqOS6huiHquW3seeahOS6sueUn+avjeS6sui6q+S4iuOAguS7jui1t+WIneaXpeW4uOeUn+a0u+S4reeci+S8vOS4jee7j+aEj+eahOiCouS9k+ivleaOou+8jOWIsOWQjuadpeS4gOatpeatpeeqgeegtOS8pueQhuW6lee6v+eahOa3seW6puayieaypuOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuavjeS4iuaUu+eVpeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDE56ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NTgxLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAxVDE5OjM1OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTJUMjE6NTA6MDVaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAxVDA4OjAwOjU0WiIsInRoZW1lSWRzIjpbMTI2ODEsMTI2ODVdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyIsIumDveW4giJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiIsImR1c2hpIl0sImNhdGVnb3J5SWRzIjpbMTExMDIsMTExMDVdLCJ0aXRsZSI6IuWOi+aKkeeahOS4u+Wmh++8iOWFqDEw6ZuG77yJIiwicGxheU5hbWUiOiLljovmipHnmoTkuLvlpociLCJkZXNjcmlwdGlvbiI6IuWutuW6reS4u+Wmh+mVv+acn+a3semZt+S4p+WBtuW8j+WpmuWnu+eahOazpea9re+8jOS4iOWkq+S4ieW5tOS4jeeisOWlueOAgeS4jee7meeUn+a0u+i0uei/mOWFrOeEtuWGt+a8oOWHuui9qO+8jOWlueWPquiDveS4gOWRs+makOW/jeW6puaXpeOAguebtOWIsOS4gOWcuuaDqOeDiOi9pueluOS4reWlueiiq+eUt+S4u+inkuaJgOaQreaVke+8jOWvueaWueS4gOecvOeci+epv+WlueWGheW/g+eahOaXoOWwveWOi+aKkeOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWOi+aKkeeahOS4u+Wmh+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6InlheWlkZXoiLCJkZXNjIjoi5a625bqt5Li75aaH6ZW/5pyf5rex6Zm35Lin5YG25byP5ama5ae755qE5rOl5r2t77yM5LiI5aSr5LiJ5bm05LiN56Kw5aW544CB5LiN57uZ55Sf5rS76LS56L+Y5YWs54S25Ya35ryg5Ye66L2o77yM5aW55Y+q6IO95LiA5ZGz6ZqQ5b+N5bqm5pel44CC55u05Yiw5LiA5Zy65oOo54OI6L2m56W45Lit5aW56KKr55S35Li76KeS5omA5pCt5pWR77yM5a+55pa55LiA55y855yL56m/5aW55YaF5b+D55qE5peg5bC95Y6L5oqR44CCIiwiYW5jaG9yIjoiIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL216L3VxLzEwNDkvcGxheWxldF9jb3Zlcl84NGY3N2EzZTBiNmQ2ZTVkLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2Uvamsvc2ovMTA0OS9wbGF5bGV0X2NvdmVyXzhlMjg2YzZmMmY5ODE5MTEuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUxLDEyODUyLDEyODYzXSwidGFnTmFtZXMiOlsi5Y6f5YibIiwi6buE5p6cIiwiTlRS57u/5bi9Il0sInRhZ1NsdWdzIjpbIllDIiwiaHVhbmdndW8iLCJudHJsdm1hbyJdLCJ0b3RhbEVwaXNvZGUiOjEwLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNzIsImhlYXRWYWx1ZSI6MTk3MTgsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxMSwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0NzoxNy4wNDFaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoxMy43NDdaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuWOi+aKkeeahOS4u+Wmh++8iOWFqDEw6ZuG77yJIiwia2V5d29ybGQiOlsi5Y6L5oqR55qE5Li75aaHIiwi5Li75aaH6KeJ6YaSIiwi5oOF5oSf5pWR6LWOIiwi5Y6L5oqR55qE5Li75aaH5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5Li75aaHIiwi55S35Li76KeSIl0sImRlc2NyaXB0aW9uIjoi5a625bqt5Li75aaH6ZW/5pyf5rex6Zm35Lin5YG25byP5ama5ae755qE5rOl5r2t77yM5LiI5aSr5LiJ5bm05LiN56Kw5aW544CB5LiN57uZ55Sf5rS76LS56L+Y5YWs54S25Ya35ryg5Ye66L2o77yM5aW55Y+q6IO95LiA5ZGz6ZqQ5b+N5bqm5pel44CC55u05Yiw5LiA5Zy65oOo54OI6L2m56W45Lit5aW56KKr55S35Li76KeS5omA5pCt5pWR77yM5a+55pa55LiA55y855yL56m/5aW55YaF5b+D55qE5peg5bC95Y6L5oqR44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5Y6L5oqR55qE5Li75aaH44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ1MjcsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6dHJ1ZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6dHJ1ZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6ZmFsc2UsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3VzL2c2LzEwNDkvenliLTAwNy01JTIwJUU2JTlFJTgxJUU1JTkzJTgxJUU1JUFFJUI2JUU0JUI4JTgxJTIwZXAxLndlYnAiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDFUMDg6Mzk6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0wOS0xMlQyMTo1MDowNFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMDFUMDg6MDM6MTZaIiwidGhlbWVJZHMiOlsxMjY4MSwxMjY4NCwxMjY4M10sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIiwi56m/6LaKIiwi5Y+k6KOFIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIiwiY2h1YW55dWUiLCJndXpodWFuZyJdLCJjYXRlZ29yeUlkcyI6WzExMTAyLDExMTA1XSwidGl0bGUiOiLlup/mn7TmnYLlvbnvvIjlhagxNembhu+8iSIsInBsYXlOYW1lIjoi5bqf5p+05p2C5b25IiwiZGVzY3JpcHRpb24iOiLnjrDku6PmuLjmiI/lroXokKflsJjmhI/lpJbnqb/otoroh7PmrabkvqDkuJbnlYzvvIzmsqbkuLrlhajlkZjnmoblpbPnmoTnmb7oirHlrqvmnIDlupXlsYLmn7TmiL/mnYLlvbnvvIzmnKzku6XkuLrmraTnlJ/lj6rog73lgZrkupvnspfmtLvjgILnm7TliLDnl4XlgJLlkI7ooqvmnpfmtYXlhL/ku6Xlj4zkv67np5jms5XljJbop6Plr5LlhrDliafmr5LvvIzpobrlir/kuaDlvpfnu53kuJbjgIrnjonlpbPlv4Pnu4/jgIvkuI7jgIrkuZ3pmLTnnJ/nu4/jgIvjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlup/mn7TmnYLlvbnjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxNembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJmZWljaGFpIiwiZGVzYyI6IueOsOS7o+a4uOaIj+WuheiQp+WwmOaEj+Wkluepv+i2iuiHs+atpuS+oOS4lueVjO+8jOaypuS4uuWFqOWRmOeahuWls+eahOeZvuiKseWuq+acgOW6leWxguaftOaIv+adguW9ue+8jOacrOS7peS4uuatpOeUn+WPquiDveWBmuS6m+eyl+a0u+OAguebtOWIsOeXheWAkuWQjuiiq+ael+a1heWEv+S7peWPjOS/ruenmOazleWMluino+WvkuWGsOWJp+avku+8jOmhuuWKv+S5oOW+l+e7neS4luOAiueOieWls+W/g+e7j+OAi+S4juOAiuS5nemYtOecn+e7j+OAi+OAgiIsImFuY2hvciI6IiIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS94Ny96Zy8xMDQ5L3BsYXlsZXRfY292ZXJfYmQ2MTgwZmNkYzJhMDIyOS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzlzL2FsLzEwNDkvcGxheWxldF9jb3Zlcl81MzRmMDZhMDA4NmEwZDIzLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MSwxMjg1MiwxMjg1NF0sInRhZ05hbWVzIjpbIuWOn+WImyIsIum7hOaenCIsIuS7meS+oCJdLCJ0YWdTbHVncyI6WyJZQyIsImh1YW5nZ3VvIiwieGlhbnhpYSJdLCJ0b3RhbEVwaXNvZGUiOjE1LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNTgsImhlYXRWYWx1ZSI6MTkxNDUsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0NjoyNi4xNDJaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoxMi45ODFaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuW6n+aftOadguW9ue+8iOWFqDE16ZuG77yJIiwia2V5d29ybGQiOlsi5bqf5p+05p2C5b25Iiwi5q2m5L6g5Y+M5L+uIiwi55m+6Iqx5a6r5p2C5b25Iiwi5bqf5p+05p2C5b255a6M5pW054mIIiwi5Zyo57q/55yLIiwi6JCn5bCYIiwi5p6X5rWF5YS/Il0sImRlc2NyaXB0aW9uIjoi546w5Luj5ri45oiP5a6F6JCn5bCY5oSP5aSW56m/6LaK6Iez5q2m5L6g5LiW55WM77yM5rKm5Li65YWo5ZGY55qG5aWz55qE55m+6Iqx5a6r5pyA5bqV5bGC5p+05oi/5p2C5b2577yM5pys5Lul5Li65q2k55Sf5Y+q6IO95YGa5Lqb57KX5rS744CC55u05Yiw55eF5YCS5ZCO6KKr5p6X5rWF5YS/5Lul5Y+M5L+u56eY5rOV5YyW6Kej5a+S5Yaw5Ymn5q+S77yM6aG65Yq/5Lmg5b6X57ud5LiW44CK546J5aWz5b+D57uP44CL5LiO44CK5Lmd6Zi055yf57uP44CL44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5bqf5p+05p2C5b2544CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTXpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ1NjksInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOnRydWUsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOmZhbHNlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTEwLTMxVDE3OjM3OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTJUMjE6NTA6MDRaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAxVDA4OjAzOjE2WiIsInRoZW1lSWRzIjpbMTI2ODEsMTI2ODNdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyIsIuWPpOijhSJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiIsImd1emh1YW5nIl0sImNhdGVnb3J5SWRzIjpbMTExMDIsMTExMDVdLCJ0aXRsZSI6IuawtOa1kua3q+S8oCIsInBsYXlOYW1lIjoi5rC05rWS5rer5LygIiwiZGVzY3JpcHRpb24iOiLmooHlsbHms4rotavnhLbmmK/nlLHkuIDluK7ooqvml6fml7bku6Pml6Dmg4XpgZflvIPnmoTng4jmgKflpbPlrZDlu7rnq4vnmoTni6znq4vlm73luqbjgILmrablqIDmgKfmhJ/lhrfoibPjgIHmraboibrotoXnvqTvvIzot6/ov4fpmLPosLfljr/ml7bor6/ppa7kuobng4jmgKfigJzmt6vmrLLlkIjmrKLphZLigJ3vvIzoja/lirLkuIrmtozmtZHouqvlj5Hng6vjgIHog7jopZ/lpKflvIDjgILlpbnni6zpl6/mma/pmb3lhojpga3pgYfkuIDlpLTkv67miJDkurrlvaLnmoTlh7bnjJvomY7lhb3jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmsLTmtZLmt6vkvKDjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwy6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6InNodWlodXkiLCJkZXNjIjoi5qKB5bGx5rOK6LWr54S25piv55Sx5LiA5biu6KKr5pen5pe25Luj5peg5oOF6YGX5byD55qE54OI5oCn5aWz5a2Q5bu656uL55qE54us56uL5Zu95bqm44CC5q2m5aiA5oCn5oSf5Ya36Imz44CB5q2m6Im66LaF576k77yM6Lev6L+H6Ziz6LC35Y6/5pe26K+v6aWu5LqG54OI5oCn4oCc5rer5qyy5ZCI5qyi6YWS4oCd77yM6I2v5Yqy5LiK5raM5rWR6Lqr5Y+R54Or44CB6IO46KWf5aSn5byA44CC5aW554us6Zev5pmv6Zm95YaI6YGt6YGH5LiA5aS05L+u5oiQ5Lq65b2i55qE5Ye254yb6JmO5YW944CCIiwiYW5jaG9yIjoiIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzViL3J0LzEwNDkvcGxheWxldF9jb3Zlcl8yNGFkMTZmMDUyMDg2ODUyLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvenkvenkvMTA0OS9wbGF5bGV0X2NvdmVyX2UzNGI0ZDhiMDFhOWZjYjMuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUxLDEyODUyLDEyODU3XSwidGFnTmFtZXMiOlsi5Y6f5YibIiwi6buE5p6cIiwi5Y+k5LujIl0sInRhZ1NsdWdzIjpbIllDIiwiaHVhbmdndW8iLCJndWRhaSJdLCJ0b3RhbEVwaXNvZGUiOjIsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE1NCwiaGVhdFZhbHVlIjoxODM4MywiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjEwLCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ3OjA4LjQ0NVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjEzLjI3MVoiLCJzZW9JbmZvIjp7InRpdGxlIjoi5rC05rWS5rer5LygIiwia2V5d29ybGQiOlsi5rC05rWS5rer5LygIiwi5rC05rWS5oG25pS5Iiwi54yb5YW95ZCI5qyiIiwi5rC05rWS5rer5Lyg5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5q2m5aiAIiwi6JmO5YW9Iiwi5a6L5aecIl0sImRlc2NyaXB0aW9uIjoi5qKB5bGx5rOK6LWr54S25piv55Sx5LiA5biu6KKr5pen5pe25Luj5peg5oOF6YGX5byD55qE54OI5oCn5aWz5a2Q5bu656uL55qE54us56uL5Zu95bqm44CC5q2m5aiA5oCn5oSf5Ya36Imz44CB5q2m6Im66LaF576k77yM6Lev6L+H6Ziz6LC35Y6/5pe26K+v6aWu5LqG54OI5oCn4oCc5rer5qyy5ZCI5qyi6YWS4oCd77yM6I2v5Yqy5LiK5raM5rWR6Lqr5Y+R54Or44CB6IO46KWf5aSn5byA44CC5aW554us6Zev5pmv6Zm95YaI6YGt6YGH5LiA5aS05L+u5oiQ5Lq65b2i55qE5Ye254yb6JmO5YW944CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5rC05rWS5rer5Lyg44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMumbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fV0sInRvcGljTGlzdCI6W119LHsiaWQiOjExMTA2LCJzbHVnIjoiZGp6dCIsInRpdGxlIjoi55+t5Ymn5LiT6aKYIiwiZGVzYyI6IiIsImtleXdvcmQiOltdLCJsYWJlbCI6IiIsInN0eWxlIjoiQSIsImNhcmRCYWNrZ3JvdW5kSW1hZ2UiOiIiLCJtb2R1bGVUeXBlIjoyLCJkYXRhVHlwZSI6MSwicmVjb21tZW5kVHlwZSI6MCwiY2F0ZWdvcnlJZCI6MCwicmFuayI6MSwibGltaXQiOjgsInNlb0luZm8iOnsidGl0bGUiOiLnn63liafkuJPpopjlkIjpm4YgLSDng63pl6jnn63liafliIbnsbvmjqjojZDkuI7lnKjnur/op4LnnIsgfCDnhp/mnpznn63liaciLCJrZXl3b3JsZCI6WyLnn63liafkuJPpopgiLCLnn63liafliIbnsbsiLCLng63pl6jnn63liaflkIjpm4YiLCLpg73luILnn63liaciLCLnqb/otornn63liaciLCLku5nkvqDnn63liaciLCLlj6Too4Xnn63liaciLCLmvKvliafmjqjojZAiLCLnhp/mnpznn63liaciXSwiZGVzY3JpcHRpb24iOiLmrKLov47mnaXliLDnhp/mnpznn63liafnn63liafkuJPpopjpobXpnaLvvIHkuLrmgqjmsYfpm4bpg73luILmmpfmtozjgIHprZTmlLnlj43ovazjgIHnqb/otorku5nkvqDjgIHlj6Too4XmvKvliafnrYnmtbfph4/ng63pl6jnn63liafliIbnsbvkuI7nsr7lvanmlYXkuovjgILliafmg4XntKflh5HjgIHlj43ovazlr4bpm4bvvIzngrnlh7vmjJHpgInmgqjllpzniLHnmoTpopjmnZDlnKjnur/ov73liafjgIIifSwibGlzdCI6W10sInRvcGljTGlzdCI6W3siaWQiOjEyNjg1LCJuYW1lIjoi6YO95biCIiwic2x1ZyI6ImR1c2hpIiwiaWNvbiI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2Uvb2YvZWYvMTA0OS8lRTklODMlQkQlRTUlQjglODIlRTUlQjklQkIlRTYlODMlQjMuanBnIiwicmFuayI6NCwicGxheWxldENvdW50IjoxNzEsImxpc3QiOlt7ImlkIjoxNDk4MCwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDZUMTI6MTk6NTQuOTQ2WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wNFQwODozMzowM1oiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDVUMDg6NTQ6MjJaIiwidGhlbWVJZHMiOlsxMjY4NV0sInRoZW1lTmFtZXMiOlsi6YO95biCIl0sInRoZW1lU2x1Z3MiOlsiZHVzaGkiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNV0sInRpdGxlIjoi5bm/5Lic6bit546L77yI5YWoMumbhu+8iSIsInBsYXlOYW1lIjoi5bm/5Lic6bit546LIiwiZGVzY3JpcHRpb24iOiLlub/kuJzpuK3njovku6XouqvkvZPkuLrkuJrvvIzlnKjpg73luILmt7HlpJzkuI7lkITot6/lpbPkurrkuqTnvKDjgILku5bmiYvms5Xlj4jmt7Hlj4jlh4bvvIzkuIDkuIvkuIvnsr7lh4bliLrmv4DmnIDmlY/mhJ/lpITjgILlr7nmlrnouqvkvZPlvbvlupXova/kuIvmnaXvvIzmtarlj6vlho3kuZ/ljovkuI3kvY/jgILnpoHlv4znmoTkuqTmmJPlnKjlpJzoibLkuK3lvbvlupXlpLHmjqfvvIzlv6vmhJ/kuqTnu4fvvIzlho3kuZ/lm57kuI3liLDov4fljrvjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlub/kuJzpuK3njovjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwy6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImdkeXciLCJkZXNjIjoi5bm/5Lic6bit546L5Lul6Lqr5L2T5Li65Lia77yM5Zyo6YO95biC5rex5aSc5LiO5ZCE6Lev5aWz5Lq65Lqk57yg44CC5LuW5omL5rOV5Y+I5rex5Y+I5YeG77yM5LiA5LiL5LiL57K+5YeG5Yi65r+A5pyA5pWP5oSf5aSE44CC5a+55pa56Lqr5L2T5b275bqV6L2v5LiL5p2l77yM5rWq5Y+r5YaN5Lmf5Y6L5LiN5L2P44CC56aB5b+M55qE5Lqk5piT5Zyo5aSc6Imy5Lit5b275bqV5aSx5o6n77yM5b+r5oSf5Lqk57uH77yM5YaN5Lmf5Zue5LiN5Yiw6L+H5Y6744CCIiwiYW5jaG9yIjoi6K6454+p6L+cIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2ZzL3JtLzEwNDkvcGxheWxldF9jb3Zlcl9iMzA1ZTY5ZWUxNTMwMGEwLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvY3EvMjAvMTA0OS9wbGF5bGV0X2NvdmVyX2IzMDVlNjllZTE1MzAwYTAuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODU1LDEyODU5XSwidGFnTmFtZXMiOlsi6YO95biCIiwi6Imz6YGHIl0sInRhZ1NsdWdzIjpbImR1c2hpIiwieWFueXUiXSwidG90YWxFcGlzb2RlIjoyLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjo5LCJoZWF0VmFsdWUiOjUwMzksImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxMSwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozNS4yNTRaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoyMi42NzlaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuWQjea1geeUn+a0uyIsIumDveW4guefreWJpyIsIuW5v+S4nOm4reeOi+WknOWknOmjjua1gSIsIumDveW4guaDheiJsum4reeOiyIsIuW5v+S4nOm4reeOiyIsIumFkuW6lyIsIuWujOaVtOeJiCIsIuWcqOe6v+eciyIsIumDveW4gum4reeOi+eahOemgeW/jOWknCIsIum4reeOi+mFkuW6l+a3semZt+iusCJdLCJkZXNjcmlwdGlvbiI6IuW5v+S4nOm4reeOi+S7pei6q+S9k+S4uuS4mu+8jOWcqOmDveW4gua3seWknOS4juWQhOi3r+Wls+S6uuS6pOe8oOOAguS7luaJi+azleWPiOa3seWPiOWHhu+8jOS4gOS4i+S4i+eyvuWHhuWIuua/gOacgOaVj+aEn+WkhOOAguWvueaWuei6q+S9k+W9u+W6lei9r+S4i+adpe+8jOa1quWPq+WGjeS5n+WOi+S4jeS9j+OAguemgeW/jOeahOS6pOaYk+WcqOWknOiJsuS4reW9u+W6leWkseaOp++8jOW/q+aEn+S6pOe7h++8jOWGjeS5n+WbnuS4jeWIsOi/h+WOu+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuW5v+S4nOm4reeOi+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDLpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ5ODUsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6dHJ1ZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDZUMTI6MTI6NDVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTExLTA0VDA0OjU1OjAwWiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wNVQwNDoyMzo0MloiLCJ0aGVtZUlkcyI6WzEyNjg1XSwidGhlbWVOYW1lcyI6WyLpg73luIIiXSwidGhlbWVTbHVncyI6WyJkdXNoaSJdLCJjYXRlZ29yeUlkcyI6WzExMTA1XSwidGl0bGUiOiLojZLlspvotY7lkb3nmb7kurrogonmkI/lpKfmiJggRVAxIiwicGxheU5hbWUiOiLojZLlspvotY7lkb3nmb7kurrogonmkI/lpKfmiJgiLCJkZXNjcmlwdGlvbiI6IuS4uuS6huaVkeWmueWmue+8jOeUt+S4u+WPguWKoOS6huS4gOWcuumrmOmineWllumHkeeahOiNkuWym+eUn+WtmOi1m++8jOWNtOWPkeeOsOavlOi1m+aYr+i0ouWbouaTjee6teeahOadgOWxgOOAguS7luS4juS4gOWQjeWNp+W6leitpuWvn+iBlOaJi++8jOWcqOiDjOWPm+S4jui/veadgOS4reWvu+aJvueUn+i3r+OAguecvOeci+Wwseimgei1ouS4i+avlOi1m++8jOiEmuS4i+eahOelnuenmOa3sea4iuWPiOWwhuS7luaLluWFpeaWsOeahOWNseacuuOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuiNkuWym+i1juWRveeZvuS6uuiCieaQj+Wkp+aImOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDHpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiaGRzbSIsImRlc2MiOiLkuLrkuobmlZHlprnlprnvvIznlLfkuLvlj4LliqDkuobkuIDlnLrpq5jpop3lpZbph5HnmoTojZLlspvnlJ/lrZjotZvvvIzljbTlj5HnjrDmr5TotZvmmK/otKLlm6Lmk43nurXnmoTmnYDlsYDjgILku5bkuI7kuIDlkI3ljaflupXorablr5/ogZTmiYvvvIzlnKjog4zlj5vkuI7ov73mnYDkuK3lr7vmib7nlJ/ot6/jgILnnLznnIvlsLHopoHotaLkuIvmr5TotZvvvIzohJrkuIvnmoTnpZ7np5jmt7HmuIrlj4jlsIbku5bmi5blhaXmlrDnmoTljbHmnLrjgIIiLCJhbmNob3IiOiLljp/liJsiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvMGIvYXovMTA0OS9wbGF5bGV0X2NvdmVyXzU2MGQyMGY3ZWE2ZDNjMTAuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9mNC9zOC8xMDQ5L3BsYXlsZXRfY292ZXJfZDI1MTNkNGViZjMzNTNiOS5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NzBdLCJ0YWdOYW1lcyI6WyLlvILkuJbnlYwiXSwidGFnU2x1Z3MiOlsiWVNKIl0sInRvdGFsRXBpc29kZSI6MSwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6OSwiaGVhdFZhbHVlIjozMjIzLCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MjAsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDZUMDU6MDc6MzcuODgzWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MjIuMjcxWiIsInNlb0luZm8iOnsidGl0bGUiOiIiLCJrZXl3b3JsZCI6WyLojZLlspvotY7lkb0iLCLojZLlspvnlJ/lrZjotZsiLCLljaflupXorablr58iXSwiZGVzY3JpcHRpb24iOiLkuLrkuobmlZHlprnlprnvvIznlLfkuLvlj4LliqDkuobkuIDlnLrpq5jpop3lpZbph5HnmoTojZLlspvnlJ/lrZjotZvvvIzljbTlj5HnjrDmr5TotZvmmK/otKLlm6Lmk43nurXnmoTmnYDlsYDjgILku5bkuI7kuIDlkI3ljaflupXorablr5/ogZTmiYvvvIzlnKjog4zlj5vkuI7ov73mnYDkuK3lr7vmib7nlJ/ot6/jgILnnLznnIvlsLHopoHotaLkuIvmr5TotZvvvIzohJrkuIvnmoTnpZ7np5jmt7HmuIrlj4jlsIbku5bmi5blhaXmlrDnmoTljbHmnLrjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrojZLlspvotY7lkb3nmb7kurrogonmkI/lpKfmiJjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwx6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0OTg5LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOnRydWUsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDA3OjI4OjQwLjA3NFoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDk6MzY6MTRaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA0VDAzOjI1OjM3WiIsInRoZW1lSWRzIjpbMTI2ODVdLCJ0aGVtZU5hbWVzIjpbIumDveW4giJdLCJ0aGVtZVNsdWdzIjpbImR1c2hpIl0sImNhdGVnb3J5SWRzIjpbMTExMDVdLCJ0aXRsZSI6Ium7hOixhumrmOS4rSIsInBsYXlOYW1lIjoi6buE6LGG6auY5LitIiwiZGVzY3JpcHRpb24iOiLmoKHokaPmiorliJrlhaXogYznmoTlsKTnianlj6vliLDmsaDnlZTvvIzlj6rlh4bnqb/kuIDku7bmub/pgI/nmoTmr5Tln7rlsLzmiqXliLDjgILlpbnot6rlnKjourrmpIXliY3lkKvlvITliLDlj4jnoazlj4jng6vvvIzooqvmjInlgJLlnKjova/lnqvkuIrml7blt7Lnu4/mub/lvpfkuIDloYzns4rmtoLjgILnspflo67nmoTmgKflmajnm7Tnm7TpobblvIDntKfoh7ToirHlvoTvvIzkuIDkuIvkuIvlj4jmt7Hlj4jni6DlnLDmkp7lh7vvvIzmsLTlo7Dmt7fnnYDljovmipHnmoTllpjmga/lnKjljYjlkI7nmoTmsaDovrnkuI3mlq3lm57ojaHjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrpu4TosYbpq5jkuK3jgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw16ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImhkZ3oiLCJkZXNjIjoi5qCh6JGj5oqK5Yia5YWl6IGM55qE5bCk54mp5Y+r5Yiw5rGg55WU77yM5Y+q5YeG56m/5LiA5Lu25rm/6YCP55qE5q+U5Z+65bC85oql5Yiw44CC5aW56Leq5Zyo6Lq65qSF5YmN5ZCr5byE5Yiw5Y+I56Gs5Y+I54Or77yM6KKr5oyJ5YCS5Zyo6L2v5Z6r5LiK5pe25bey57uP5rm/5b6X5LiA5aGM57OK5raC44CC57KX5aOu55qE5oCn5Zmo55u055u06aG25byA57Sn6Ie06Iqx5b6E77yM5LiA5LiL5LiL5Y+I5rex5Y+I54ug5Zyw5pKe5Ye777yM5rC05aOw5re3552A5Y6L5oqR55qE5ZaY5oGv5Zyo5Y2I5ZCO55qE5rGg6L655LiN5pat5Zue6I2h44CCIiwiYW5jaG9yIjoi5pyA5YWo54mH5bqTIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L2sxMnAvYzkyYS82NTEyL2U0NWUvZWU3NWUxZDIzNTI3YzZjZTY3ZGM2NmIyOTk4YTk3MTMuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC9rMTJwL2M5MmEvNjUxMi9lNDVlL2VlNzVlMWQyMzUyN2M2Y2U2N2RjNjZiMjk5OGE5NzEzLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1M10sInRhZ05hbWVzIjpbIkFJ5oiQ5Lq655+t5YmnIl0sInRhZ1NsdWdzIjpbIkNSREoiXSwidG90YWxFcGlzb2RlIjo1LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjozLCJoZWF0VmFsdWUiOjI5NjYsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxOSwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozOS4yNzJaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoxOS4yNDNaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIum7hOixhumrmOS4rSIsIuagoeWbreefreWJpyIsIumrmOS4rSIsIuagoemVv+azs+axoCIsIuavlOWfuuWwvOaKpeWIsCIsIuaymeWPkeakheWPo+S6pCIsIuebtOaNo+m7hOm+mSIsIuWls+aVmeW4iOemgeW/jCIsIuagoemVv+WujOaVtOeJiOWcqOe6v+eciyJdLCJkZXNjcmlwdGlvbiI6IuagoeiRo+aKiuWImuWFpeiBjOeahOWwpOeJqeWPq+WIsOaxoOeVlO+8jOWPquWHhuepv+S4gOS7tua5v+mAj+eahOavlOWfuuWwvOaKpeWIsOOAguWluei3quWcqOi6uuakheWJjeWQq+W8hOWIsOWPiOehrOWPiOeDq++8jOiiq+aMieWAkuWcqOi9r+Weq+S4iuaXtuW3sue7j+a5v+W+l+S4gOWhjOeziua2guOAgueyl+WjrueahOaAp+WZqOebtOebtOmhtuW8gOe0p+iHtOiKseW+hO+8jOS4gOS4i+S4i+WPiOa3seWPiOeLoOWcsOaSnuWHu++8jOawtOWjsOa3t+edgOWOi+aKkeeahOWWmOaBr+WcqOWNiOWQjueahOaxoOi+ueS4jeaWreWbnuiNoeOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAium7hOixhumrmOS4reOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDXpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX1dLCJzZW9JbmZvIjp7InRpdGxlIjoi54af5p6c55+t5Ymn6YO95biC5LiT6aKYIC0g54Ot6ZeoQUnmiJDkurrnn63liafkuI7pu4Tmnpzpg73luILmg4XmhJ/lpKfmiI/lkIjpm4YiLCJrZXl3b3JkcyI6WyLnhp/mnpznn63liaciLCLpu4Tmnpznn63liaciLCLpu4TmnpwiLCJBSeaIkOS6uuefreWJpyIsIumDveW4guS4k+mimCIsIumDveW4guefreWJpyIsIumhtue6p+engeWOqCIsIuWtkOixqueahOenmOWvhuaVmeWtpiIsIuaIkOS6uuefreWJp0FQUCJdLCJkZXNjcmlwdGlvbiI6Iui1sOi/m+eGn+aenOefreWJp+mDveW4guS4k+mimO+8jOayiea1uOS9k+mqjOeOsOS7o+mDveW4guiDjOaZr+S4i+eahOaDheaEn+e6oOiRm+S4juiBjOWcuuivseaDkeOAguW5s+WPsOavj+aXpeWdmuaMgeaMgee7reabtOaWsO+8jOeBq+eDreaUtuW9leS6huOAiumhtue6p+engeWOqOOAi+OAgeOAiuWtkOixqueahOenmOWvhuaVmeWtpuOAi+etiemrmOS6uuawlOmDveW4guWkp+aIj+OAgui/memHjOWJp+aDheWPjei9rOS4jeaWreOAgeS7o+WFpeaEn+aegeW8uuOAgui1tuW/q+eCueWHu+S4i+i9veWumOaWueS4k+Wxnuemj+WIqUFQUO+8jOW4puaCqOmaj+aXtumaj+WcsOeVheS6q+aXoOW5suaJsOeahOmrmOa4heaOjOS4iui/veWJp+aWsOS9k+mqjO+8gSIsIndlYlNpdGVOYW1lIjoi54af5p6c55+t5YmnIiwiY2Fub25pY2FsVXJsIjoiaHR0cHM6Ly9zaHVndW9kai5jb20vdG9waWMtZGV0YWlsL2R1c2hpIn19LHsiaWQiOjEyNjgxLCJuYW1lIjoi5Y6f5Yib55+t5YmnIiwic2x1ZyI6InlhdW5jaHVhbmdkaiIsImljb24iOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzE3L2dpLzEwNDkvJUU5JUJCJTg0JUU2JTlFJTlDJUU3JUIyJUJFJUU5JTgwJTg5LmpwZyIsInJhbmsiOjEwLCJwbGF5bGV0Q291bnQiOjkwLCJsaXN0IjpbeyJpZCI6MTQ5NzcsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6dHJ1ZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDZUMTI6MjU6MTQuMzI3WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wNFQwOTowNzo0M1oiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDVUMDg6NTQ6MjJaIiwidGhlbWVJZHMiOlsxMjY4MV0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIl0sImNhdGVnb3J5SWRzIjpbMTExMDJdLCJ0aXRsZSI6IuW6iuesq++8iOWFqDbpm4bvvIkiLCJwbGF5TmFtZSI6IuW6iuesqyIsImRlc2NyaXB0aW9uIjoi5bqK56yr5LmL5LiK5aW55Li75Yqo6KSq5bC96KGj6KGr77yM6Lqr5L2T5Zyo54Ob5YWJ5LiL6aKk5oqW77yM5LuN5Lul5aSN5p2C55uu5YWJ55yL552A5a+55pa544CC5LiA5qyh5qyh5rex5YWl6K6p5aW55b275bqV6L2v5LiL5p2l77yM5rWq5Y+r5Y6L5oqR5LiN5L2P44CC5bqK56yr55qE56aB5b+M5Zyo5aSc6YeM5b275bqV54iG5Y+R77yM5YaN5Lmf5peg5rOV5Zue5aS044CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5bqK56yr44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysNumbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJjaHVhbmd6IiwiZGVzYyI6IuW6iuesq+S5i+S4iuWlueS4u+WKqOikquWwveiho+ihq++8jOi6q+S9k+WcqOeDm+WFieS4i+mipOaKlu+8jOS7jeS7peWkjeadguebruWFieeci+edgOWvueaWueOAguS4gOasoeasoea3seWFpeiuqeWlueW9u+W6lei9r+S4i+adpe+8jOa1quWPq+WOi+aKkeS4jeS9j+OAguW6iuesq+eahOemgeW/jOWcqOWknOmHjOW9u+W6leeIhuWPke+8jOWGjeS5n+aXoOazleWbnuWktOOAgiIsImFuY2hvciI6Ium7hOaenOWumOaWuSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9ndC9rdy8xMDQ5L3BsYXlsZXRfY292ZXJfYzNjYzQ1ZTIwN2QzY2E4My5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzIwLzgwLzEwNDkvcGxheWxldF9jb3Zlcl9jM2NjNDVlMjA3ZDNjYTgzLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MiwxMjg1N10sInRhZ05hbWVzIjpbIum7hOaenCIsIuWPpOS7oyJdLCJ0YWdTbHVncyI6WyJodWFuZ2d1byIsImd1ZGFpIl0sInRvdGFsRXBpc29kZSI6NiwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MjIsImhlYXRWYWx1ZSI6MzkwOSwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE3LCJjcmVhdGVkQXQiOiIyMDI2LTExLTA2VDA1OjA3OjMzLjZaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wNlQyMjowMDoxMS41MDZaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuWwhuWGm+S4juWNp+W6lSIsIuWPpOijheefreWJpyIsIum7hOaenOWOn+WImyIsIuW6iuesq+S5i+mXtOeahOW9u+W6leayieaypiIsIumDveW4guW6iuesq+aDheiJsiIsIuW6iuesqyIsIua3seWFpeWkseaOpyIsIuWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuW6iuesq+WknOeahOeyvuWHhua3seWFpSIsIuW6iuesq+S4iueahOWkseaOp+mipOaKliJdLCJkZXNjcmlwdGlvbiI6IuW6iuesq+S5i+S4iuWlueS4u+WKqOikquWwveiho+ihq++8jOi6q+S9k+WcqOeDm+WFieS4i+mipOaKlu+8jOS7jeS7peWkjeadguebruWFieeci+edgOWvueaWueOAguS4gOasoeasoea3seWFpeiuqeWlueW9u+W6lei9r+S4i+adpe+8jOa1quWPq+WOi+aKkeS4jeS9j+OAguW6iuesq+eahOemgeW/jOWcqOWknOmHjOW9u+W6leeIhuWPke+8jOWGjeS5n+aXoOazleWbnuWktOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuW6iuesq+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDbpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ5NzgsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6dHJ1ZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDZUMTI6MjM6NTcuNTU0WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wNFQwODo0MToyN1oiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDVUMDg6NTQ6MjJaIiwidGhlbWVJZHMiOlsxMjY4MV0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIl0sImNhdGVnb3J5SWRzIjpbMTExMDJdLCJ0aXRsZSI6IuWmiOWmiOaIkeeIseS9oO+8iOWFqDEw6ZuG77yJIiwicGxheU5hbWUiOiLlpojlpojmiJHniLHkvaAiLCJkZXNjcmlwdGlvbiI6IuWmiOWmiOi1t+WIneWuiemdmemhuuS7ju+8jOWDj+ayiem7mOeahOe+lOe+iuOAguWcqOWvhumXreaIv+mXtOmHjO+8jOS8quijheiiq+S4gOeCueeCueaPreW8gOOAguWWmOaBr+WIu+aEj+WOi+S9ju+8jOi6q+S9k+WNtOWcqOaIkeeahOiKguWlj+S4i+i9u+i9u+mipOaKluOAguavj+S4gOasoea3seWFpemDveiuqeWlueS7jumakOW/jei1sOWQkeWkseaOp++8jOacgOe7iOW9u+W6leayieaypu+8jOWuiemdmeS4jeWGje+8jOWPquWJqeS4i+WOi+aKkeS4jeS9j+eahOWRu+WQn++8jOemgeW/jOeahOavjeWtkOWFs+ezu+W9u+W6leW0qeWdj+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWmiOWmiOaIkeeIseS9oOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6Im1td2FuIiwiZGVzYyI6IuWmiOWmiOi1t+WIneWuiemdmemhuuS7ju+8jOWDj+ayiem7mOeahOe+lOe+iuOAguWcqOWvhumXreaIv+mXtOmHjO+8jOS8quijheiiq+S4gOeCueeCueaPreW8gOOAguWWmOaBr+WIu+aEj+WOi+S9ju+8jOi6q+S9k+WNtOWcqOaIkeeahOiKguWlj+S4i+i9u+i9u+mipOaKluOAguavj+S4gOasoea3seWFpemDveiuqeWlueS7jumakOW/jei1sOWQkeWkseaOp++8jOacgOe7iOW9u+W6leayieaypu+8jOWuiemdmeS4jeWGje+8jOWPquWJqeS4i+WOi+aKkeS4jeS9j+eahOWRu+WQn++8jOemgeW/jOeahOavjeWtkOWFs+ezu+W9u+W6leW0qeWdj+OAgiIsImFuY2hvciI6Ium7hOaenOWumOaWuTIiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvbTQvMW0vMTA0OS9wbGF5bGV0X2NvdmVyXzE5NWFjOWVlZTM5NDI1MzkuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS84MC9zdC8xMDQ5L3BsYXlsZXRfY292ZXJfMTk1YWM5ZWVlMzk0MjUzOS5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTIsMTI4NjFdLCJ0YWdOYW1lcyI6WyLpu4TmnpwiLCLmr43lrZAiXSwidGFnU2x1Z3MiOlsiaHVhbmdndW8iLCJtdXppIl0sInRvdGFsRXBpc29kZSI6MTAsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjI0LCJoZWF0VmFsdWUiOjUzMDQsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxOSwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozNC4wNFoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAwOjAwOjExLjQ5OFoiLCJzZW9JbmZvIjp7InRpdGxlIjoiIiwia2V5d29ybGQiOlsi5q+N5a2Q5YWz57O7Iiwi6buE5p6c5Y6f5YibIiwi5aaI5aaI5oiR54ix5L2gIiwi5q+N5a2Q56aB5b+M5oOF6ImyIiwi5aaI5aaIIiwi5rex5aSc5rKJ5rKmIiwi5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5aaI5aaI5rex5aSc55qE5rKJ5rKmIiwi5oiR54ix5L2g5aaI5aaIIl0sImRlc2NyaXB0aW9uIjoi5aaI5aaI6LW35Yid5a6J6Z2Z6aG65LuO77yM5YOP5rKJ6buY55qE576U576K44CC5Zyo5a+G6Zet5oi/6Ze06YeM77yM5Lyq6KOF6KKr5LiA54K554K55o+t5byA44CC5ZaY5oGv5Yi75oSP5Y6L5L2O77yM6Lqr5L2T5Y205Zyo5oiR55qE6IqC5aWP5LiL6L276L276aKk5oqW44CC5q+P5LiA5qyh5rex5YWl6YO96K6p5aW55LuO6ZqQ5b+N6LWw5ZCR5aSx5o6n77yM5pyA57uI5b275bqV5rKJ5rKm77yM5a6J6Z2Z5LiN5YaN77yM5Y+q5Ymp5LiL5Y6L5oqR5LiN5L2P55qE5ZG75ZCf77yM56aB5b+M55qE5q+N5a2Q5YWz57O75b275bqV5bSp5Z2P44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5aaI5aaI5oiR54ix5L2g44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ5NzksInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6dHJ1ZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjp0cnVlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wNlQxMjoyMToxOC43MzdaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTExLTA0VDA4OjM5OjM0WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wNVQwODo1NDoyMloiLCJ0aGVtZUlkcyI6WzEyNjgxXSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMl0sInRpdGxlIjoi5oiR55qE5ZCI56ef5aWz5a6k5Y+L5Lus77yI5YWoMumbhu+8iSIsInBsYXlOYW1lIjoi5oiR55qE5ZCI56ef5aWz5a6k5Y+L5LusIiwiZGVzY3JpcHRpb24iOiLmiJHlkozlh6DkvY3lpbPlrqTlj4vlkIjnp5/lkI7vvIzmt7HlpJznmoTllpjmga/otormnaXotormmI7mmL7jgILmn5DlpJzlpbnku6zkuLvliqjot6jlnZDkuIrmnaXvvIzoirHnqbTntKfntKflkqzkvY/vvIzkuIDovrnlk63kuIDovrnmia3ohbDjgILkuIDnm7TlgZrliLDlpKnkuq7vvIzmt6vmsLTpobrnnYDkuqTlkIjlpITmtYHkuobkuIDlnLDjgILlkIjnp5/nmoTpg73luILnpoHlv4zlvbvlupXmsonmsqbvvIzlho3kuZ/lm57kuI3liLDov4fljrvjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmiJHnmoTlkIjnp5/lpbPlrqTlj4vku6zjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwy6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6Imh6bnN5IiwiZGVzYyI6IuaIkeWSjOWHoOS9jeWls+WupOWPi+WQiOenn+WQju+8jOa3seWknOeahOWWmOaBr+i2iuadpei2iuaYjuaYvuOAguafkOWknOWlueS7rOS4u+WKqOi3qOWdkOS4iuadpe+8jOiKseeptOe0p+e0p+WSrOS9j++8jOS4gOi+ueWTreS4gOi+ueaJreiFsOOAguS4gOebtOWBmuWIsOWkqeS6ru+8jOa3q+awtOmhuuedgOS6pOWQiOWkhOa1geS6huS4gOWcsOOAguWQiOenn+eahOmDveW4guemgeW/jOW9u+W6leayieaypu+8jOWGjeS5n+WbnuS4jeWIsOi/h+WOu+OAgiIsImFuY2hvciI6Ium7hOaenOWumOaWuSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9mZy9rYi8xMDQ5L3BsYXlsZXRfY292ZXJfZWE3OTgwOWMxYjZmMzM4Mi5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2ZuL3Q4LzEwNDkvcGxheWxldF9jb3Zlcl9lYTc5ODA5YzFiNmYzMzgyLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MiwxMjg1NV0sInRhZ05hbWVzIjpbIum7hOaenCIsIumDveW4giJdLCJ0YWdTbHVncyI6WyJodWFuZ2d1byIsImR1c2hpIl0sInRvdGFsRXBpc29kZSI6MiwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTQsImhlYXRWYWx1ZSI6NjAzMiwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjEyLCJjcmVhdGVkQXQiOiIyMDI2LTExLTA2VDA1OjA3OjM0Ljc1MloiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjIyLjc1WiIsInNlb0luZm8iOnsidGl0bGUiOiIiLCJrZXl3b3JsZCI6WyLlkIjnp5/nlJ/mtLsiLCLpu4Tmnpzljp/liJsiLCLmiJHnmoTlkIjnp5/lpbPlrqTlj4vku6wiLCLpg73luILlkIjnp5/mg4XoibIiLCLlpbPlrqTlj4siLCLlkIjnp5/npoHlv4wiLCLlrozmlbTniYgiLCLlnKjnur/nnIsiLCLlkIjnp5/lpbPlrqTlj4vnmoTmt7HlpJzlpLHmjqciLCLlpbPlrqTlj4vku6znmoTlkIjnp5/msqbpmbciXSwiZGVzY3JpcHRpb24iOiLmiJHlkozlh6DkvY3lpbPlrqTlj4vlkIjnp5/lkI7vvIzmt7HlpJznmoTllpjmga/otormnaXotormmI7mmL7jgILmn5DlpJzlpbnku6zkuLvliqjot6jlnZDkuIrmnaXvvIzoirHnqbTntKfntKflkqzkvY/vvIzkuIDovrnlk63kuIDovrnmia3ohbDjgILkuIDnm7TlgZrliLDlpKnkuq7vvIzmt6vmsLTpobrnnYDkuqTlkIjlpITmtYHkuobkuIDlnLDjgILlkIjnp5/nmoTpg73luILnpoHlv4zlvbvlupXmsonmsqbvvIzlho3kuZ/lm57kuI3liLDov4fljrvjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmiJHnmoTlkIjnp5/lpbPlrqTlj4vku6zjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwy6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19XSwic2VvSW5mbyI6eyJ0aXRsZSI6IueGn+aenOefreWJp+WOn+WIm+efreWJp+S4k+mimCAtIOeDremXqEFJ5oiQ5Lq655+t5Ymn5LiO6buE5p6c54us5a625Y6f5Yib5aSn5oiP5ZCI6ZuGIiwia2V5d29yZHMiOlsi54af5p6c55+t5YmnIiwi6buE5p6c55+t5YmnIiwi6buE5p6cIiwiQUnmiJDkurrnn63liaciLCLljp/liJvnn63liafkuJPpopgiLCLni6zlrrbljp/liJsiLCLmnIDlvLrmmL7npLrlmagiLCLms6HpnaLnlaoiLCLmiJDkurrnn63liadBUFAiLCLljp/liJvnn63liaciXSwiZGVzY3JpcHRpb24iOiLmjqLntKLnhp/mnpznn63liafljp/liJvnn63liafkuJPpopjvvIzpoobnlaXlubPlj7DljKDlv4Pni6zlhbfnmoTohJHmtJ7lpKflvIDkuI7mnoHoh7Top4bop4nlvKDlipvjgILlubPlj7Dmr4/ml6Xkv53mjIHmjIHnu63mm7TmlrDvvIzngavng63mlLblvZXkuobjgIrmnIDlvLrmmL7npLrlmajjgIvjgIHjgIrms6HpnaLnlarjgIvnrYnpq5jkurrmsJTljp/liJvlpKfmiI/jgILov5nph4zliafmg4Xlj43ovazkuI3mlq3jgIHorr7lrprmlrDlpYfov4fnmL7jgILnjrDlnKjlsLHooYzliqjkuIvovb3lrpjmlrnkuJPlsZ7npo/liKlBUFDvvIzluKbmgqjpmo/ml7bpmo/lnLDlsL3mg4XnlYXkuqvml6DlubLmibDnmoTpq5jmuIXmjozkuIrov73liafmlrDkvZPpqozvvIEiLCJ3ZWJTaXRlTmFtZSI6IueGn+aenOefreWJpyIsImNhbm9uaWNhbFVybCI6Imh0dHBzOi8vc2h1Z3VvZGouY29tL3RvcGljLWRldGFpbC95YXVuY2h1YW5nZGoifX0seyJpZCI6MTI2ODcsIm5hbWUiOiLprZTmlLkiLCJzbHVnIjoibW9nYWkiLCJpY29uIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS91YS91Ny8xMDQ5LyVFNyU5NCVCNSVFNSVCRCVCMSVFOSVBRCU5NCVFNiU5NCVCOS5qcGciLCJyYW5rIjoyLCJwbGF5bGV0Q291bnQiOjg2LCJsaXN0IjpbeyJpZCI6MTQ4NzAsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDExOjMyOjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMDRUMTY6MzA6MTNaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTA5LTExVDAyOjEzOjUyWiIsInRoZW1lSWRzIjpbMTI2ODddLCJ0aGVtZU5hbWVzIjpbIumtlOaUuSJdLCJ0aGVtZVNsdWdzIjpbIm1vZ2FpIl0sImNhdGVnb3J5SWRzIjpbMTExMDVdLCJ0aXRsZSI6IkFJ6a2U5pS5LUFJ6a2U5pS5572R57qi5pa55ZyGIOWOu+iho+i3s+ijuOiInu+8iOWFqDHpm4bvvIkiLCJwbGF5TmFtZSI6IkFJ6a2U5pS5LUFJ6a2U5pS5572R57qi5pa55ZyGIOWOu+iho+i3s+ijuOiIniIsImRlc2NyaXB0aW9uIjoi57Sg5pyJ57qv5qyy5aSp6Iqx5p2/5LmL56ew55qE572R57qi5pa55ZyG5Zyo5rex5aSc56m65pe355qE5oi/6Ze06YeM6IKG5oSP54Ot6Iie77yM5Ly06ZqP552A6Z+z5LmQ6KGj6KGr5bC96KSq77yM6aWx5ruh6Zuq55m955qE6YWl6IO45q+r5peg5L+d55WZ5Zyw5pq06Zyy5Zyo56m65rCU5Lit44CC5aW56IKG5oSP5pKp5ouo552A6ZW/5Y+R55av54uC5omt5Yqo57qk57uG6IWw6IKi77yM5Lik5Zui56GV5aSn5Y+M5Lmz6ZqP552A6IqC5aWP5Ymn54OI6L276aKk44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CKQUnprZTmlLktQUnprZTmlLnnvZHnuqLmlrnlnIYg5Y676KGj6Lez6KO46Iie44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJhaW1vZzQ4IiwiZGVzYyI6Iue0oOaciee6r+assuWkqeiKseadv+S5i+ensOeahOe9kee6ouaWueWchuWcqOa3seWknOepuuaXt+eahOaIv+mXtOmHjOiChuaEj+eDreiInu+8jOS8tOmaj+edgOmfs+S5kOiho+ihq+Wwveikqu+8jOmlsea7oembqueZveeahOmFpeiDuOavq+aXoOS/neeVmeWcsOaatOmcsuWcqOepuuawlOS4reOAguWlueiChuaEj+aSqeaLqOedgOmVv+WPkeeWr+eLguaJreWKqOe6pOe7huiFsOiCou+8jOS4pOWbouehleWkp+WPjOS5s+maj+edgOiKguWlj+WJp+eDiOi9u+mipOOAgiIsImFuY2hvciI6Ium7hOaenEFJ5bCP5a2QIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2p5LzdiLzEwNDkvcGxheWxldF9jb3Zlcl81N2IyMzU1OWJiM2QwZjY3LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvNGMvNWovMTA0OS9wbGF5bGV0X2NvdmVyXzU3YjIzNTU5YmIzZDBmNjcuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODc3LDEyODc5XSwidGFnTmFtZXMiOlsiQUnmiJDkurrprZTmlLkiLCLmmI7mmJ/nvZHnuqLmlLnnvJYiXSwidGFnU2x1Z3MiOlsiQ1JNRyIsIk1YIl0sInRvdGFsRXBpc29kZSI6MSwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTMxLCJoZWF0VmFsdWUiOjE1NzMzLCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTQsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NTA6MTAuMzgxWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDE6MDA6MDYuNjU1WiIsInNlb0luZm8iOnsidGl0bGUiOiJBSemtlOaUuS1BSemtlOaUuee9kee6ouaWueWchiDljrvooaPot7Poo7joiJ7vvIjlhagx6ZuG77yJIiwia2V5d29ybGQiOlsiQUnprZTmlLnnvZHnuqLmlrnlnIbljrvooaPot7Poo7joiJ4iLCLnuq/mrLLlpKnoirHmnb8iLCLljrvooaPng63oiJ4iLCJBSemtlOaUuee9kee6ouaWueWchuWOu+iho+i3s+ijuOiInuWujOaVtOeJiCIsIuWcqOe6v+eciyIsIue9kee6ouaWueWchiIsIumbqueZvemFpeiDuCJdLCJkZXNjcmlwdGlvbiI6Iue0oOaciee6r+assuWkqeiKseadv+S5i+ensOeahOe9kee6ouaWueWchuWcqOa3seWknOepuuaXt+eahOaIv+mXtOmHjOiChuaEj+eDreiInu+8jOS8tOmaj+edgOmfs+S5kOiho+ihq+Wwveikqu+8jOmlsea7oembqueZveeahOmFpeiDuOavq+aXoOS/neeVmeWcsOaatOmcsuWcqOepuuawlOS4reOAguWlueiChuaEj+aSqeaLqOedgOmVv+WPkeeWr+eLguaJreWKqOe6pOe7huiFsOiCou+8jOS4pOWbouehleWkp+WPjOS5s+maj+edgOiKguWlj+WJp+eDiOi9u+mipOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAikFJ6a2U5pS5LUFJ6a2U5pS5572R57qi5pa55ZyGIOWOu+iho+i3s+ijuOiInuOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDHpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ4ODksInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDA5OjQ0OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMDRUMTc6NDQ6MzRaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTA5LTExVDAyOjEzOjUyWiIsInRoZW1lSWRzIjpbMTI2ODddLCJ0aGVtZU5hbWVzIjpbIumtlOaUuSJdLCJ0aGVtZVNsdWdzIjpbIm1vZ2FpIl0sImNhdGVnb3J5SWRzIjpbMTExMDVdLCJ0aXRsZSI6IkFJ6a2U5pS5LUFJ6a2U5pS5IOW8oOWpp+S7qiDlvZPmuIXlhrflsI/lp5Dlp5Dot6rkvI/lnKjkvaDpnaLliY0g6Zyy5Ye65b6I5oOz6KaB55qE6KGo5oOFIOS9oOehruWumuS4jee7meWlueeCuei1j+i1kO+8iOWFqDHpm4bvvIkiLCJwbGF5TmFtZSI6IkFJ6a2U5pS5LUFJ6a2U5pS5IOW8oOWpp+S7qiDlvZPmuIXlhrflsI/lp5Dlp5Dot6rkvI/lnKjkvaDpnaLliY0g6Zyy5Ye65b6I5oOz6KaB55qE6KGo5oOFIOS9oOehruWumuS4jee7meWlueeCuei1j+i1kCIsImRlc2NyaXB0aW9uIjoi5Zyo5Ymn57uE5a6J6Z2Z55qE5LyR5oGv5Yy65YaF77yM5byg5amn5Luq6YKj5LiA5Y+M6KKr6buR6Imy5Lid6KKc5YyF6KO555qE5L+u6ZW/576O6IW/5q275q275bm25oui6Leq5LyP5Zyo5Zyw5LiK77yM5aaG5a6557K+6Ie055qE6Z2i6aKK5b6u5b6u5LiK5oms77yM5riF57qv55qE55uu5YWJ6YeM5rWu5Yqo552A5pi+6ICM5piT6KeB55qE5p6B5bqm5ri05pyb44CC6L+Z5L2N6auY6aKc5YC85aWz5pif5q2k5Yi76L+Z5Ymv5Y2R5b6u55qE5ae/5oCB44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CKQUnprZTmlLktQUnprZTmlLkg5byg5amn5LuqIOW9k+a4heWGt+Wwj+WnkOWnkOi3quS8j+WcqOS9oOmdouWJjSDpnLLlh7rlvojmg7PopoHnmoTooajmg4Ug5L2g56Gu5a6a5LiN57uZ5aW554K56LWP6LWQ44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJhaW1vZzY3IiwiZGVzYyI6IuWcqOWJp+e7hOWuiemdmeeahOS8keaBr+WMuuWGhe+8jOW8oOWpp+S7qumCo+S4gOWPjOiiq+m7keiJsuS4neiinOWMheijueeahOS/rumVv+e+juiFv+atu+atu+W5tuaLoui3quS8j+WcqOWcsOS4iu+8jOWmhuWuueeyvuiHtOeahOmdoumiiuW+ruW+ruS4iuaJrO+8jOa4hee6r+eahOebruWFiemHjOa1ruWKqOedgOaYvuiAjOaYk+ingeeahOaegeW6pua4tOacm+OAgui/meS9jemrmOminOWAvOWls+aYn+atpOWIu+i/meWJr+WNkeW+rueahOWnv+aAgeOAgiIsImFuY2hvciI6Ium7hOaenEFJ5aSn5biIIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3o1L3Z2LzEwNDkvcGxheWxldF9jb3Zlcl9jMDAyYmQxYTkyZDdlOTVlLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvMnovZHovMTA0OS9wbGF5bGV0X2NvdmVyX2MwMDJiZDFhOTJkN2U5NWUuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODc3XSwidGFnTmFtZXMiOlsiQUnmiJDkurrprZTmlLkiXSwidGFnU2x1Z3MiOlsiQ1JNRyJdLCJ0b3RhbEVwaXNvZGUiOjEsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjEyNCwiaGVhdFZhbHVlIjoxNjU3NSwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjEyLCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjUwOjIyLjc0OVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAxOjAwOjAwLjk5OFoiLCJzZW9JbmZvIjp7InRpdGxlIjoiQUnprZTmlLktQUnprZTmlLkg5byg5amn5LuqIOW9k+a4heWGt+Wwj+WnkOWnkOi3quS8j+WcqOS9oOmdouWJjSDpnLLlh7rlvojmg7PopoHnmoTooajmg4Ug5L2g56Gu5a6a5LiN57uZ5aW554K56LWP6LWQ77yI5YWoMembhu+8iSIsImtleXdvcmxkIjpbIkFJ6a2U5pS55byg5amn5Luq5b2T5riF5Ya35bCP5aeQ5aeQ6Leq5LyP5Zyo5L2g6Z2i5YmN6Zyy5Ye65b6I5oOz6KaB55qE6KGo5oOF5L2g56Gu5a6a5LiN57uZ5aW554K56LWP6LWQIiwi5riF5Ya35bCP5aeQ5aeQIiwi6Leq5LyP5ri05pybIiwiQUnprZTmlLnlvKDlqafku6rlvZPmuIXlhrflsI/lp5Dlp5Dot6rkvI/lnKjkvaDpnaLliY3pnLLlh7rlvojmg7PopoHnmoTooajmg4XkvaDnoa7lrprkuI3nu5nlpbnngrnotY/otZDlrozmlbTniYgiLCLlnKjnur/nnIsiLCLlvKDlqafku6oiLCLpu5HkuJ3ot6rkvI8iXSwiZGVzY3JpcHRpb24iOiLlnKjliafnu4TlronpnZnnmoTkvJHmga/ljLrlhoXvvIzlvKDlqafku6rpgqPkuIDlj4zooqvpu5HoibLkuJ3oopzljIXoo7nnmoTkv67plb/nvo7ohb/mrbvmrbvlubbmi6Lot6rkvI/lnKjlnLDkuIrvvIzlpoblrrnnsr7oh7TnmoTpnaLpoorlvq7lvq7kuIrmiazvvIzmuIXnuq/nmoTnm67lhYnph4zmta7liqjnnYDmmL7ogIzmmJPop4HnmoTmnoHluqbmuLTmnJvjgILov5nkvY3pq5jpopzlgLzlpbPmmJ/mraTliLvov5nlia/ljZHlvq7nmoTlp7/mgIHjgILnhp/mnpznn63liadXRULmj5DkvpvjgIpBSemtlOaUuS1BSemtlOaUuSDlvKDlqafku6og5b2T5riF5Ya35bCP5aeQ5aeQ6Leq5LyP5Zyo5L2g6Z2i5YmNIOmcsuWHuuW+iOaDs+imgeeahOihqOaDhSDkvaDnoa7lrprkuI3nu5nlpbnngrnotY/otZDjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwx6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0OTA4LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wM1QwNzo1ODozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTA5LTA0VDE3OjAyOjQ1WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0wOS0xMVQwMjoxMzo1MloiLCJ0aGVtZUlkcyI6WzEyNjg3XSwidGhlbWVOYW1lcyI6WyLprZTmlLkiXSwidGhlbWVTbHVncyI6WyJtb2dhaSJdLCJjYXRlZ29yeUlkcyI6WzExMTA1XSwidGl0bGUiOiJBSemtlOaUuS1BSemtlOaUuSDluoTovr7oj7LvvIjlhagx6ZuG77yJIiwicGxheU5hbWUiOiJBSemtlOaUuS1BSemtlOaUuSDluoTovr7oj7IiLCJkZXNjcmlwdGlvbiI6IuWcqOaYj+m7hOaap+aYp+eahOWNp+WupOeBr+WFieS4i++8jOW6hOi+vuiPsumlsea7oeeahOi6q+S9k+absue6v+iiq+WFieW9semHjeaWsOWLvuWLkuOAguWlueaUvuiNoeWcsOi3qOWdkOiAjOS4iu+8jOS7peagh+WHhueahOmqkeS5mOWnv+aAgeWFqOadg+aOjOaOp+edgOavj+S4gOasoei1t+S8j+eahOiKguWlj++8jOe6pOe7hueahOiFsOiCoui9u+aJremXtOiChuaEj+mHiuaUvuWHuua1k+eDiOeahOWOn+Wni+assuacm+OAgumaj+WQjuWlueeerOmXtOi9rOWQkeWPpuS4gOS+p+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAikFJ6a2U5pS5LUFJ6a2U5pS5IOW6hOi+vuiPsuOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDHpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiYWltb2c4NSIsImRlc2MiOiLlnKjmmI/pu4TmmqfmmKfnmoTljaflrqTnga/lhYnkuIvvvIzluoTovr7oj7LppbHmu6HnmoTouqvkvZPmm7Lnur/ooqvlhYnlvbHph43mlrDli77li5LjgILlpbnmlL7ojaHlnLDot6jlnZDogIzkuIrvvIzku6XmoIflh4bnmoTpqpHkuZjlp7/mgIHlhajmnYPmjozmjqfnnYDmr4/kuIDmrKHotbfkvI/nmoToioLlpY/vvIznuqTnu4bnmoTohbDogqLovbvmia3pl7TogobmhI/ph4rmlL7lh7rmtZPng4jnmoTljp/lp4vmrLLmnJvjgILpmo/lkI7lpbnnnqzpl7TovazlkJHlj6bkuIDkvqfjgIIiLCJhbmNob3IiOiLpu4TmnpxBSeWwj+WtkCIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS95Zi92Ni8xMDQ5L3BsYXlsZXRfY292ZXJfZjBlMmFlNzdiZTk4ODA5Zi5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzFvLzM3LzEwNDkvcGxheWxldF9jb3Zlcl9mMGUyYWU3N2JlOTg4MDlmLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg3N10sInRhZ05hbWVzIjpbIkFJ5oiQ5Lq66a2U5pS5Il0sInRhZ1NsdWdzIjpbIkNSTUciXSwidG90YWxFcGlzb2RlIjoxLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxMzQsImhlYXRWYWx1ZSI6MTQ5MTEsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxOCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo1MDo0MC43NzNaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMDowMDoxNS43NzdaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IkFJ6a2U5pS5LUFJ6a2U5pS5IOW6hOi+vuiPsu+8iOWFqDHpm4bvvIkiLCJrZXl3b3JsZCI6WyJBSemtlOaUueW6hOi+vuiPsiIsIumqkeS5mOWQjuWFpSIsIuWNp+WupOeBr+WFiSIsIkFJ6a2U5pS55bqE6L6+6I+y5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5bqE6L6+6I+yIiwi6aqR5LmY5ae/5oCBIl0sImRlc2NyaXB0aW9uIjoi5Zyo5piP6buE5pqn5pin55qE5Y2n5a6k54Gv5YWJ5LiL77yM5bqE6L6+6I+y6aWx5ruh55qE6Lqr5L2T5puy57q/6KKr5YWJ5b2x6YeN5paw5Yu+5YuS44CC5aW55pS+6I2h5Zyw6Leo5Z2Q6ICM5LiK77yM5Lul5qCH5YeG55qE6aqR5LmY5ae/5oCB5YWo5p2D5o6M5o6n552A5q+P5LiA5qyh6LW35LyP55qE6IqC5aWP77yM57qk57uG55qE6IWw6IKi6L275omt6Ze06IKG5oSP6YeK5pS+5Ye65rWT54OI55qE5Y6f5aeL5qyy5pyb44CC6ZqP5ZCO5aW5556s6Ze06L2s5ZCR5Y+m5LiA5L6n44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CKQUnprZTmlLktQUnprZTmlLkg5bqE6L6+6I+y44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fV0sInNlb0luZm8iOnsidGl0bGUiOiLnhp/mnpznn63liafprZTmlLnkuJPpopggLSDng63pl6hBSeaIkOS6uuefreWJp+S4jum7hOaenOiEkea0numtlOaUueWkp+aIj+WQiOmbhiIsImtleXdvcmRzIjpbIueGn+aenOefreWJpyIsIum7hOaenOefreWJpyIsIum7hOaenCIsIkFJ5oiQ5Lq655+t5YmnIiwi6a2U5pS55LiT6aKYIiwi6a2U5pS555+t5YmnIiwi6L2s5oCn5ZCO5oiR56W45Lmx5L+u5LuZ55WMIiwi5pyA5by65pi+56S65ZmoIiwi5oiQ5Lq655+t5YmnQVBQIl0sImRlc2NyaXB0aW9uIjoi5ryr5q2l54af5p6c55+t5Ymn6a2U5pS55LiT6aKY77yM5L2T6aqM6ISR5rSe5aSn5byA5LiO57uP5YW46aKg6KaG5Lqk57uH55qE5aWH5aaZ6KeG6KeJ55ub5a6044CC5bmz5Y+w5q+P5pel5L+d5oyB5oyB57ut5pu05paw77yM54Gr54Ot5pS25b2V5LqG44CK6L2s5oCn5ZCO5oiR56W45Lmx5L+u5LuZ55WM44CL44CB44CK5pyA5by65pi+56S65Zmo44CL562J6auY5Lq65rCU6a2U5pS55aSn5oiP44CC6L+Z6YeM5Ymn5oOF5Y+N6L2s5a+G6ZuG44CB6K6+5a6a5paw5aWH6L+H55i+44CC5b+r5p2l5LiL6L295a6Y5pa55LiT5bGe56aP5YipQVBQ77yM5bim5oKo6ZqP5pe26ZqP5Zyw5bC95oOF55WF5Lqr5peg5bmy5omw55qE6auY5riF5o6M5LiK6L+95Ymn5paw5L2T6aqM77yBIiwid2ViU2l0ZU5hbWUiOiLnhp/mnpznn63liaciLCJjYW5vbmljYWxVcmwiOiJodHRwczovL3NodWd1b2RqLmNvbS90b3BpYy1kZXRhaWwvbW9nYWkifX0seyJpZCI6MTI2ODYsIm5hbWUiOiLkubHkvKYiLCJzbHVnIjoibHVhbmx1biIsImljb24iOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2FmL2c4LzEwNDkvJUU0JUI5JUIxJUU0JUJDJUE2LmpwZyIsInJhbmsiOjMsInBsYXlsZXRDb3VudCI6NTQsImxpc3QiOlt7ImlkIjoxNDk5MCwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDZUMDc6MTk6NDguNTYzWiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwOToyMjozM1oiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDNUMTI6MTg6MjRaIiwidGhlbWVJZHMiOlsxMjY4Nl0sInRoZW1lTmFtZXMiOlsi5Lmx5LymIl0sInRoZW1lU2x1Z3MiOlsibHVhbmx1biJdLCJjYXRlZ29yeUlkcyI6WzExMTA0XSwidGl0bGUiOiLmiJHnmoTnvo7oibPlsrPmr40iLCJwbGF5TmFtZSI6IuaIkeeahOe+juiJs+Wys+avjSIsImRlc2NyaXB0aW9uIjoi5paw5ama54eV5bCU77yM5bKz5q+N5Li654Wn5paZ5aWz5YS/5YWl5L2P5a625Lit44CC5byv6IWw6Zyy5Ye65LqL5Lia57q/5LiO6JW+5Lid77yM5b275bqV5Ye756m/5LuW55qE55CG5pm644CC5rex5aSc6Ziz5Y+w6YKj5oq557Sr6Imy6JW+5Lid5bim552A5L2T6aaZ5byV5Lq65rex5ZeF44CC6Zeo57yd6YeM5aW55q2j6Ieq5aix77yM5Y+j5Lit6L275ZSk5LuW55qE5ZCN5a2X44CC6Zeo5aSW5LuW5pSl552A5YaF6KOk6IOv5LiL54Gr6LW377yM6Zeo5YaF5aW55aiH5ZaY5ZCB5ZCB44CC5Lik5Lq66ZqU56m65YWx6bij5ZCE6Ieq6YeK5pS+77yM56aB5b+M5q2j5byP5ouJ5byA44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5oiR55qE576O6Imz5bKz5q+N44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysNembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJ3ZG15eW0iLCJkZXNjIjoi5paw5ama54eV5bCU77yM5bKz5q+N5Li654Wn5paZ5aWz5YS/5YWl5L2P5a625Lit44CC5byv6IWw6Zyy5Ye65LqL5Lia57q/5LiO6JW+5Lid77yM5b275bqV5Ye756m/5LuW55qE55CG5pm644CC5rex5aSc6Ziz5Y+w6YKj5oq557Sr6Imy6JW+5Lid5bim552A5L2T6aaZ5byV5Lq65rex5ZeF44CC6Zeo57yd6YeM5aW55q2j6Ieq5aix77yM5Y+j5Lit6L275ZSk5LuW55qE5ZCN5a2X44CC6Zeo5aSW5LuW5pSl552A5YaF6KOk6IOv5LiL54Gr6LW377yM6Zeo5YaF5aW55aiH5ZaY5ZCB5ZCB44CC5Lik5Lq66ZqU56m65YWx6bij5ZCE6Ieq6YeK5pS+77yM56aB5b+M5q2j5byP5ouJ5byA44CCIiwiYW5jaG9yIjoi5pyA5YWo54mH5bqTIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3Z2L3dkLzEwNDkvcGxheWxldF9jb3Zlcl9hNDczODE1YmRlM2Y1YWIxLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvbWUveTcvMTA0OS9wbGF5bGV0X2NvdmVyX2E0NzM4MTViZGUzZjVhYjEuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODYwXSwidGFnTmFtZXMiOlsi5Lmx5LymIl0sInRhZ1NsdWdzIjpbImx1YW5sdW4iXSwidG90YWxFcGlzb2RlIjo1LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjo0LCJoZWF0VmFsdWUiOjIwODYsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxMiwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozOS41NjFaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoyMi4wNDRaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuaIkeeahOe+juiJs+Wys+avjSIsIuWys+avjeS4juWls+WpvyIsIuWutuW6reefreWJpyIsIuaWsOWpmuWys+avjea3seWknOemgeW/jCIsIumDveW4guemgeW/jOWys+avjSIsIue0q+iJsuiVvuS4nSIsIumXqOe8neiHquWosSIsIuWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuWys+avjeiVvuS4neWHu+epv+eQhuaZuiIsIumXqOe8nemHjOeahOWys+avjeiHquWosSJdLCJkZXNjcmlwdGlvbiI6IuaWsOWpmueHleWwlO+8jOWys+avjeS4uueFp+aWmeWls+WEv+WFpeS9j+WutuS4reOAguW8r+iFsOmcsuWHuuS6i+S4mue6v+S4juiVvuS4ne+8jOW9u+W6leWHu+epv+S7lueahOeQhuaZuuOAgua3seWknOmYs+WPsOmCo+aKuee0q+iJsuiVvuS4neW4puedgOS9k+mmmeW8leS6uua3seWXheOAgumXqOe8nemHjOWlueato+iHquWose+8jOWPo+S4rei9u+WUpOS7lueahOWQjeWtl+OAgumXqOWkluS7luaUpeedgOWGheijpOiDr+S4i+eBq+i1t++8jOmXqOWGheWlueWoh+WWmOWQgeWQgeOAguS4pOS6uumalOepuuWFsem4o+WQhOiHqumHiuaUvu+8jOemgeW/jOato+W8j+aLieW8gOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuaIkeeahOe+juiJs+Wys+avjeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDXpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ1MjksInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOnRydWUsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDNUMTA6NTY6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0wOS0xMlQyMTo1MDowNVoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMDFUMDg6MDM6MTZaIiwidGhlbWVJZHMiOlsxMjY4MSwxMjY4Nl0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIiwi5Lmx5LymIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIiwibHVhbmx1biJdLCJjYXRlZ29yeUlkcyI6WzExMTAyLDExMTA0LDExMTA1XSwidGl0bGUiOiLprLzniLbnnJ/kurrniYjvvIjlhagxMOmbhu+8iSIsInBsYXlOYW1lIjoi6ay854i255yf5Lq654mIIiwiZGVzY3JpcHRpb24iOiLnmb3lpKnku5bmmK/muKnmn5TkvZPotLTjgIHnhafpob7lrrbluq3nmoTmqKHojIPnu6fniLbvvIzkuIDliLDlpJzluZXpmY3kuLTkvr/lvbvlupXmkpXlvIDkvKroo4XvvIzlhYjmmK/ku6Xnu53lr7nnmoTlvLrogIXlp7/mgIHlvLrooYzljaDmnInkuoblgrLlqIflj5vpgIbnmoTlp5Dlp5DniLHojonvvIzpmo/lkI7lj4jlsIbmuIXnuq/lj6/kurrnmoTlprnlprnnurHlpYjkuIDmraXmraXosIPmlZnlvpflvbvlupXmsonmsqbjgILku47mnIDliJ3nmoTlgbfnqqXlgbfpl7vliLDlhoXlv4PnmoTmipfmi5LltKnmuoPjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrprLzniLbnnJ/kurrniYjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJndWlmdXpoIiwiZGVzYyI6IueZveWkqeS7luaYr+a4qeaflOS9k+i0tOOAgeeFp+mhvuWutuW6reeahOaooeiMg+e7p+eItu+8jOS4gOWIsOWknOW5lemZjeS4tOS+v+W9u+W6leaSleW8gOS8quijhe+8jOWFiOaYr+S7pee7neWvueeahOW8uuiAheWnv+aAgeW8uuihjOWNoOacieS6huWCsuWoh+WPm+mAhueahOWnkOWnkOeIseiOie+8jOmaj+WQjuWPiOWwhua4hee6r+WPr+S6uueahOWmueWmuee6seWliOS4gOatpeatpeiwg+aVmeW+l+W9u+W6leayieaypuOAguS7juacgOWIneeahOWBt+eqpeWBt+mXu+WIsOWGheW/g+eahOaKl+aLkuW0qea6g+OAgiIsImFuY2hvciI6IiIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS90cy8zby8xMDQ5L3BsYXlsZXRfY292ZXJfYWU1ZmE2YzdkNzA3ODg2MC5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzYyL3Q0LzEwNDkvcGxheWxldF9jb3Zlcl9mYmY3ZTNjZWVhNTZlZjM0LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MSwxMjg1MiwxMjg1OV0sInRhZ05hbWVzIjpbIuWOn+WImyIsIum7hOaenCIsIuiJs+mBhyJdLCJ0YWdTbHVncyI6WyJZQyIsImh1YW5nZ3VvIiwieWFueXUiXSwidG90YWxFcGlzb2RlIjoxMCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTgwLCJoZWF0VmFsdWUiOjIxMjM0LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTYsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDY6MjkuMTQ1WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MTMuNTJaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IumsvOeItuecn+S6uueJiO+8iOWFqDEw6ZuG77yJIiwia2V5d29ybGQiOlsi6ay854i255yf5Lq654mIIiwi55W45b2i5a625bqtIiwi5aeQ5aa55LqJ5a6gIiwi6ay854i255yf5Lq654mI5a6M5pW054mIIiwi5Zyo57q/55yLIiwi57un54i2Iiwi54ix6I6JIiwi57qx5aWIIl0sImRlc2NyaXB0aW9uIjoi55m95aSp5LuW5piv5rip5p+U5L2T6LS044CB54Wn6aG+5a625bqt55qE5qih6IyD57un54i277yM5LiA5Yiw5aSc5bmV6ZmN5Li05L6/5b275bqV5pKV5byA5Lyq6KOF77yM5YWI5piv5Lul57ud5a+555qE5by66ICF5ae/5oCB5by66KGM5Y2g5pyJ5LqG5YKy5aiH5Y+b6YCG55qE5aeQ5aeQ54ix6I6J77yM6ZqP5ZCO5Y+I5bCG5riF57qv5Y+v5Lq655qE5aa55aa557qx5aWI5LiA5q2l5q2l6LCD5pWZ5b6X5b275bqV5rKJ5rKm44CC5LuO5pyA5Yid55qE5YG356ql5YG36Ze75Yiw5YaF5b+D55qE5oqX5ouS5bSp5rqD44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6ay854i255yf5Lq654mI44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ2NjMsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDA3OjI3OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMTJUMDg6MTE6MDRaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTAyVDEwOjA0OjEwWiIsInRoZW1lSWRzIjpbMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNF0sInRpdGxlIjoi56m/6L+H6JaE6Zu+55qE5pep5pmoIOesrOS6jOWto++8iOWFqDnpm4bvvIkiLCJwbGF5TmFtZSI6Iuepv+i/h+iWhOmbvueahOaXqeaZqCDnrKzkuozlraMiLCJkZXNjcmlwdGlvbiI6Iui6q+WkhOWGnOadkeeOsOWunueUn+a0u+mHjeWOi+S5i+S4i+eahOWnkOWkq+adjuWkp+eJm++8jOmdouWvueedgOWnkOWnkOS4juWwj+WnqOWtkOWPjOmHjeWkueWHu+S4i+eahOeBq+eDreWLvuW8le+8jOWGheW/g+eahOassuacm+S4jumBk+W+t+W6lee6v+WPkeeUn+a/gOeDiOeisOaSnuOAguWmueWmueWmgumlpeS8vOa4tOWcsOS4u+WKqOaSqeaLqO+8jOWnkOWnkOWImeS7pee7neWvueeahOWnv+aAgeeWr+eLguWNoOacieOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuepv+i/h+iWhOmbvueahOaXqeaZqCDnrKzkuozlraPjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw56ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImNodWFuZ3UiLCJkZXNjIjoi6Lqr5aSE5Yac5p2R546w5a6e55Sf5rS76YeN5Y6L5LmL5LiL55qE5aeQ5aSr5p2O5aSn54mb77yM6Z2i5a+5552A5aeQ5aeQ5LiO5bCP5aeo5a2Q5Y+M6YeN5aS55Ye75LiL55qE54Gr54Ot5Yu+5byV77yM5YaF5b+D55qE5qyy5pyb5LiO6YGT5b635bqV57q/5Y+R55Sf5r+A54OI56Kw5pKe44CC5aa55aa55aaC6aWl5Ly85ri05Zyw5Li75Yqo5pKp5ouo77yM5aeQ5aeQ5YiZ5Lul57ud5a+555qE5ae/5oCB55av54uC5Y2g5pyJ44CCIiwiYW5jaG9yIjoiSlZJROeyvumAiSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS95ei8zeC8xMDQ5L3BsYXlsZXRfY292ZXJfODRhOTMwNGE0ZDllNGJkNC5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL29kL3liLzEwNDkvcGxheWxldF9jb3Zlcl84NGE5MzA0YTRkOWU0YmQ0LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg2NywxMjg1OSwxMjg2MF0sInRhZ05hbWVzIjpbIuS5oeadkSIsIuiJs+mBhyIsIuS5seS8piJdLCJ0YWdTbHVncyI6WyJ4aWFuZ2N1biIsInlhbnl1IiwibHVhbmx1biJdLCJ0b3RhbEVwaXNvZGUiOjksInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjEzOSwiaGVhdFZhbHVlIjoxNzY1NywiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjIwLCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ4OjExLjcyOFoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA2VDIzOjAwOjE1LjM1MloiLCJzZW9JbmZvIjp7InRpdGxlIjoi56m/6L+H6JaE6Zu+55qE5pep5pmoIOesrOS6jOWto++8iOWFqDnpm4bvvIkiLCJrZXl3b3JsZCI6WyLnqb/ov4foloTpm77nmoTml6nmmajnrKzkuozlraMiLCLkuaHmnZHpo47mtYEiLCLlpJrkurrmt7fmiJgiLCLnqb/ov4foloTpm77nmoTml6nmmajnrKzkuozlraPlrozmlbTniYgiLCLlnKjnur/nnIsiLCLmnY7lpKfniZsiLCLlp5Dlp5AiLCLlsI/lp6jlrZAiXSwiZGVzY3JpcHRpb24iOiLouqvlpITlhpzmnZHnjrDlrp7nlJ/mtLvph43ljovkuYvkuIvnmoTlp5DlpKvmnY7lpKfniZvvvIzpnaLlr7nnnYDlp5Dlp5DkuI7lsI/lp6jlrZDlj4zph43lpLnlh7vkuIvnmoTngavng63li77lvJXvvIzlhoXlv4PnmoTmrLLmnJvkuI7pgZPlvrflupXnur/lj5HnlJ/mv4Dng4jnorDmkp7jgILlprnlprnlpoLppaXkvLzmuLTlnLDkuLvliqjmkqnmi6jvvIzlp5Dlp5DliJnku6Xnu53lr7nnmoTlp7/mgIHnlq/ni4LljaDmnInjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrnqb/ov4foloTpm77nmoTml6nmmagg56ys5LqM5a2j44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysOembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fV0sInNlb0luZm8iOnsidGl0bGUiOiLnhp/mnpznn63liafkubHkvKbkuJPpopggLSDng63pl6hBSeaIkOS6uuefreWJp+S4jum7hOaenOemgeW/jOS8pueQhuWkp+aIj+WQiOmbhiIsImtleXdvcmRzIjpbIueGn+aenOefreWJpyIsIum7hOaenOefreWJpyIsIum7hOaenCIsIkFJ5oiQ5Lq655+t5YmnIiwi5Lmx5Lym5LiT6aKYIiwi56aB5b+M55+t5YmnIiwi5a625peP56eY5LqLIiwi6ay854i255yf5Lq654mIIiwi5oiQ5Lq655+t5YmnQVBQIiwi5Lmx5Lym55+t5YmnIl0sImRlc2NyaXB0aW9uIjoi5o6i57Si54af5p6c55+t5Ymn5Lmx5Lym5LiT6aKY77yM6aKG55Wl5omT56C05Lyg57uf5Lym55CG6YGT5b635p2f57ya55qE5p6B6Ie056aB5b+M5ouJ5omv44CC5bmz5Y+w5q+P5pel5L+d5oyB5oyB57ut5pu05paw77yM54Gr54Ot5pS25b2V5LqG44CK5a625peP56eY5LqL44CL44CB44CK6ay854i255yf5Lq654mI44CL562J6auY5Lq65rCU5Lmx5Lym6aKY5p2Q5aSn5oiP44CC6L+Z6YeM5Ymn5oOF5Y+N6L2s5LiN5pat44CB5oOF5oSf5byg5Yqb5Y2B6Laz44CC546w5Zyo5bCx5LiL6L295a6Y5pa55LiT5bGe56aP5YipQVBQ77yM5bim5oKo6ZqP5pe26ZqP5Zyw55WF5Lqr5peg5bmy5omw55qE6auY5riF5o6M5LiK6L+95Ymn5paw5L2T6aqM77yBIiwid2ViU2l0ZU5hbWUiOiLnhp/mnpznn63liaciLCJjYW5vbmljYWxVcmwiOiJodHRwczovL3NodWd1b2RqLmNvbS90b3BpYy1kZXRhaWwvbHVhbmx1biJ9fSx7ImlkIjoxMjY4NCwibmFtZSI6Iuepv+i2iiIsInNsdWciOiJjaHVhbnl1ZSIsImljb24iOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3hoL2dsLzEwNDkvJUU1JTkwJThFJUU1JUFFJUFCLmpwZyIsInJhbmsiOjUsInBsYXlsZXRDb3VudCI6NDcsImxpc3QiOlt7ImlkIjoxNDk3Niwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjp0cnVlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wNlQxMjoyODo0Ny4zNDZaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTExLTA1VDAyOjI1OjAwWiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wNVQwNDoyMzo0MloiLCJ0aGVtZUlkcyI6WzEyNjg0XSwidGhlbWVOYW1lcyI6WyLnqb/otooiXSwidGhlbWVTbHVncyI6WyJjaHVhbnl1ZSJdLCJjYXRlZ29yeUlkcyI6WzExMTA1XSwidGl0bGUiOiLmnKvkuJbvvJrnlLflpbPmr5TkvovlpLHooaHvvIznvo7lpbPku6zpg73lnKjmiqLmiJEiLCJwbGF5TmFtZSI6Iuacq+S4lu+8mueUt+Wls+avlOS+i+Wkseihoe+8jOe+juWls+S7rOmDveWcqOaKouaIkSIsImRlc2NyaXB0aW9uIjoi5pyr5LiW6ZmN5Li05ZCO55S35aWz5q+U5L6L5Lil6YeN5aSx6KGh77yM576O5aWz5Lus6YO95Zyo5oqi5oiR44CC5aW55Lus5LuO6ZqQ5b+N6LWw5ZCR5Li75Yqo77yM6KGj6KGr6KKr6KSq5bC95ZCO6Lqr5L2T5Zyo5oiR5omL5LiL6L276L276aKk5oqW44CC5LiA5qyh5qyh6KKr5aGr5ruh5Yiw5pyA5rex5aSE77yM5rWq5Y+r5Y6L5oqR5LiN5L2P44CC5YWx5oSf6K6p5qyy5pyb5ZCM5q2l54iG5Y+R77yM5pyr5LiW55qE56aB5b+M5Zyo5aSc6YeM5b275bqV5rKJ5rKm77yM5YaN5Lmf5Zue5LiN5Yiw5LuO5YmN44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5pyr5LiW77ya55S35aWz5q+U5L6L5aSx6KGh77yM576O5aWz5Lus6YO95Zyo5oqi5oiR44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoibXNubmIiLCJkZXNjIjoi5pyr5LiW6ZmN5Li05ZCO55S35aWz5q+U5L6L5Lil6YeN5aSx6KGh77yM576O5aWz5Lus6YO95Zyo5oqi5oiR44CC5aW55Lus5LuO6ZqQ5b+N6LWw5ZCR5Li75Yqo77yM6KGj6KGr6KKr6KSq5bC95ZCO6Lqr5L2T5Zyo5oiR5omL5LiL6L276L276aKk5oqW44CC5LiA5qyh5qyh6KKr5aGr5ruh5Yiw5pyA5rex5aSE77yM5rWq5Y+r5Y6L5oqR5LiN5L2P44CC5YWx5oSf6K6p5qyy5pyb5ZCM5q2l54iG5Y+R77yM5pyr5LiW55qE56aB5b+M5Zyo5aSc6YeM5b275bqV5rKJ5rKm77yM5YaN5Lmf5Zue5LiN5Yiw5LuO5YmN44CCIiwiYW5jaG9yIjoi5Y6f5YibIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3hxL3h3LzEwNDkvcGxheWxldF9jb3Zlcl81Nzk1M2YwNzc4ZDY2NmVkLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvNmkvbmwvMTA0OS9wbGF5bGV0X2NvdmVyXzllNGY5NDIxMWYwMDE1ZWYuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODY4XSwidGFnTmFtZXMiOlsi5pyr5pel5bqf5ZyfIl0sInRhZ1NsdWdzIjpbIm1vcmlmZWl0dSJdLCJ0b3RhbEVwaXNvZGUiOjEwLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjo4LCJoZWF0VmFsdWUiOjQzMDIsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxOSwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozMy4wMjZaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wNlQyMjowMDoxMS44NjNaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuacq+S4liIsIueUt+Wls+avlOS+i+WkseihoSIsIuacq+aXpeefreWJpyIsIuacq+S4lueUt+Wls+avlOS+i+WkseihoSIsIuacq+S4luWQjuWuq+aDheiJsiIsIue+juWls+S7rOmDveWcqOaKouaIkSIsIuWujOaVtOeJiCIsIuWcqOe6v+eciyIsIue+juWls+aKouaIkeeahOacq+S4luWknCIsIuacq+S4lumHjOiiq+e+juWls+S7rOWMheWbtCJdLCJkZXNjcmlwdGlvbiI6Iuacq+S4lumZjeS4tOWQjueUt+Wls+avlOS+i+S4pemHjeWkseihoe+8jOe+juWls+S7rOmDveWcqOaKouaIkeOAguWlueS7rOS7jumakOW/jei1sOWQkeS4u+WKqO+8jOiho+ihq+iiq+ikquWwveWQjui6q+S9k+WcqOaIkeaJi+S4i+i9u+i9u+mipOaKluOAguS4gOasoeasoeiiq+Whq+a7oeWIsOacgOa3seWkhO+8jOa1quWPq+WOi+aKkeS4jeS9j+OAguWFseaEn+iuqeassuacm+WQjOatpeeIhuWPke+8jOacq+S4lueahOemgeW/jOWcqOWknOmHjOW9u+W6leayieaypu+8jOWGjeS5n+WbnuS4jeWIsOS7juWJjeOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuacq+S4lu+8mueUt+Wls+avlOS+i+Wkseihoe+8jOe+juWls+S7rOmDveWcqOaKouaIkeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NjY0LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wM1QwOTozNTozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTEwLTEyVDA3OjE0OjMwWiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wMlQxMDowMzo1MVoiLCJ0aGVtZUlkcyI6WzEyNjg0XSwidGhlbWVOYW1lcyI6WyLnqb/otooiXSwidGhlbWVTbHVncyI6WyJjaHVhbnl1ZSJdLCJjYXRlZ29yeUlkcyI6WzExMTA1XSwidGl0bGUiOiLnqb/otormiJDkuobmm7nmk43vvIjlhag26ZuG77yJIiwicGxheU5hbWUiOiLnqb/otormiJDkuobmm7nmk40iLCJkZXNjcmlwdGlvbiI6IuS4gOiniemGkuadpe+8jOeOsOS7o+S6uuern+aEj+Wkluepv+i2iuaIkOS6huS5seS4luaerembhOabueaTjeOAguabtOiuqeS6uuihgOiEieWBvuW8oOeahOaYr+KAlOKAlOW5veaal+eahOWvneWupOmHjOaXqeWwseiiq+WFs+aKvOedgOS4ieS9jeWQjeWKqOWkqeS4i+eahOe7neiJsuS6uuWmu++8muiyguidieOAgeWkp+S5lOS4juWwj+S5lOOAguacrOaDs+WcqOS5seS4luS4reWBmuS4qumBtee6quWuiOazleeahOWlveS6uu+8jOWPr+W9k+WOmumHjeeahOWvneWupOWkp+mXqOi9sOeEtuWFs+S4iumCo+S4gOWIu+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuepv+i2iuaIkOS6huabueaTjeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDbpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiY2h1YW55MiIsImRlc2MiOiLkuIDop4nphpLmnaXvvIznjrDku6Pkurrnq5/mhI/lpJbnqb/otormiJDkuobkubHkuJbmnq3pm4Tmm7nmk43jgILmm7TorqnkurrooYDohInlgb7lvKDnmoTmmK/igJTigJTlub3mmpfnmoTlr53lrqTph4zml6nlsLHooqvlhbPmirznnYDkuInkvY3lkI3liqjlpKnkuIvnmoTnu53oibLkurrlprvvvJrosoLonYnjgIHlpKfkuZTkuI7lsI/kuZTjgILmnKzmg7PlnKjkubHkuJbkuK3lgZrkuKrpgbXnuqrlrojms5XnmoTlpb3kurrvvIzlj6/lvZPljprph43nmoTlr53lrqTlpKfpl6jovbDnhLblhbPkuIrpgqPkuIDliLvjgIIiLCJhbmNob3IiOiLmmJ/lrqvkuIDoirEiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvNDcvYWIvMTA0OS9wbGF5bGV0X2NvdmVyX2YwZWM2YzQwYzI1ZTIwMDEuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9xZy82OC8xMDQ5L3BsYXlsZXRfY292ZXJfZjBlYzZjNDBjMjVlMjAwMS5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTcsMTI4NTksMTI4NTVdLCJ0YWdOYW1lcyI6WyLlj6Tku6MiLCLoibPpgYciLCLpg73luIIiXSwidGFnU2x1Z3MiOlsiZ3VkYWkiLCJ5YW55dSIsImR1c2hpIl0sInRvdGFsRXBpc29kZSI6NiwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTQwLCJoZWF0VmFsdWUiOjE3NDQ5LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTcsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDg6MTEuOTU2WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDZUMjM6MDA6MTUuNTYzWiIsInNlb0luZm8iOnsidGl0bGUiOiLnqb/otormiJDkuobmm7nmk43vvIjlhag26ZuG77yJIiwia2V5d29ybGQiOlsi56m/6LaK5oiQ5LqG5pu55pONIiwi5pu55pON5Lq65aa7Iiwi56m/6LaK5Lmx5LiWIiwi56m/6LaK5oiQ5LqG5pu55pON5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5pu55pONIiwi6LKC6J2JIiwi5aSn5LmUIiwi5bCP5LmUIl0sImRlc2NyaXB0aW9uIjoi5LiA6KeJ6YaS5p2l77yM546w5Luj5Lq656uf5oSP5aSW56m/6LaK5oiQ5LqG5Lmx5LiW5p6t6ZuE5pu55pON44CC5pu06K6p5Lq66KGA6ISJ5YG+5byg55qE5piv4oCU4oCU5bm95pqX55qE5a+d5a6k6YeM5pep5bCx6KKr5YWz5oq8552A5LiJ5L2N5ZCN5Yqo5aSp5LiL55qE57ud6Imy5Lq65aa777ya6LKC6J2J44CB5aSn5LmU5LiO5bCP5LmU44CC5pys5oOz5Zyo5Lmx5LiW5Lit5YGa5Liq6YG157qq5a6I5rOV55qE5aW95Lq677yM5Y+v5b2T5Y6a6YeN55qE5a+d5a6k5aSn6Zeo6L2w54S25YWz5LiK6YKj5LiA5Yi744CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK56m/6LaK5oiQ5LqG5pu55pON44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysNumbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDcyOCwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDNUMDY6MTM6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0wOS0xMlQyMTo1MDowOVoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMDFUMDg6MDA6NTRaIiwidGhlbWVJZHMiOlsxMjY4NF0sInRoZW1lTmFtZXMiOlsi56m/6LaKIl0sInRoZW1lU2x1Z3MiOlsiY2h1YW55dWUiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNV0sInRpdGxlIjoi5YWo54+t5Zyw6ZOB5rGC55SfIOWPquacieaIkeS4gOS4queUt+eUnyIsInBsYXlOYW1lIjoi5YWo54+t5Zyw6ZOB5rGC55SfIOWPquacieaIkeS4gOS4queUt+eUnyIsImRlc2NyaXB0aW9uIjoi54yb54S2552B5byA5Y+M55y877yM5LiJ5Y2B5aSa5YW36LWk5p2h5p2h55qE5bm06L275aWz5L2T5qiq6ZmI5Zyo5bCB6Zet55qE6ZOB55qu6L2m5Y6i5YaF77yM6ICM5YGM5aSn55qE54+t57qn6YeM56uf54S25Y+q5Ymp5LiL5oiR6L+Z5ZSv5LiA55qE54us6IuX55S355Sf44CC56We56eY5Yaw5Ya355qE57O757uf5Zyo6ISR5rW35Lit5a6j5ZGK77ya6L+Z5piv5LiA5Zy65peg5oOF55qE5pyr5pel5rGC55Sf77yM5Y+q6KaB55av54uC5Lqk5ZCI5bCx6IO96I635b6X5Yqb6YeP5LiN5pat5Y+Y5by644CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5YWo54+t5Zyw6ZOB5rGC55SfIOWPquacieaIkeS4gOS4queUt+eUn+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDPpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoicXVhbmJhbiIsImRlc2MiOiLnjJvnhLbnnYHlvIDlj4znnLzvvIzkuInljYHlpJrlhbfotaTmnaHmnaHnmoTlubTovbvlpbPkvZPmqKrpmYjlnKjlsIHpl63nmoTpk4Hnmq7ovabljqLlhoXvvIzogIzlgYzlpKfnmoTnj63nuqfph4znq5/nhLblj6rliankuIvmiJHov5nllK/kuIDnmoTni6zoi5fnlLfnlJ/jgILnpZ7np5jlhrDlhrfnmoTns7vnu5/lnKjohJHmtbfkuK3lrqPlkYrvvJrov5nmmK/kuIDlnLrml6Dmg4XnmoTmnKvml6XmsYLnlJ/vvIzlj6ropoHnlq/ni4LkuqTlkIjlsLHog73ojrflvpflipvph4/kuI3mlq3lj5jlvLrjgIIiLCJhbmNob3IiOiItIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2hkLzc5LzEwNDkvcGxheWxldF9jb3Zlcl8yNjA1OGUyMzY0M2EzYjQxLmpwZyIsImhvcml6b250YWxDb3ZlciI6IiIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg2OCwxMjg3M10sInRhZ05hbWVzIjpbIuacq+aXpeW6n+WcnyIsIuezu+e7nyJdLCJ0YWdTbHVncyI6WyJtb3JpZmVpdHUiLCJ4aXRvbmciXSwidG90YWxFcGlzb2RlIjozLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxMzcsImhlYXRWYWx1ZSI6MTc4ODksImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxMSwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0ODo0OC40NzNaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMTowMDoxOC43MjhaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuWFqOePreWcsOmTgeaxgueUnyDlj6rmnInmiJHkuIDkuKrnlLfnlJ8iLCJrZXl3b3JsZCI6WyLlhajnj63lnLDpk4HmsYLnlJ/lj6rmnInmiJHkuIDkuKrnlLfnlJ8iLCLlnLDpk4HmsYLnlJ8iLCLnu53lnLDkuqTlkIgiLCLlhajnj63lnLDpk4HmsYLnlJ/lj6rmnInmiJHkuIDkuKrnlLfnlJ/lrozmlbTniYgiLCLlnKjnur/nnIsiLCLmnKvml6XmsYLnlJ8iLCLlpbPkvZPovabljqIiXSwiZGVzY3JpcHRpb24iOiLnjJvnhLbnnYHlvIDlj4znnLzvvIzkuInljYHlpJrlhbfotaTmnaHmnaHnmoTlubTovbvlpbPkvZPmqKrpmYjlnKjlsIHpl63nmoTpk4Hnmq7ovabljqLlhoXvvIzogIzlgYzlpKfnmoTnj63nuqfph4znq5/nhLblj6rliankuIvmiJHov5nllK/kuIDnmoTni6zoi5fnlLfnlJ/jgILnpZ7np5jlhrDlhrfnmoTns7vnu5/lnKjohJHmtbfkuK3lrqPlkYrvvJrov5nmmK/kuIDlnLrml6Dmg4XnmoTmnKvml6XmsYLnlJ/vvIzlj6ropoHnlq/ni4LkuqTlkIjlsLHog73ojrflvpflipvph4/kuI3mlq3lj5jlvLrjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlhajnj63lnLDpk4HmsYLnlJ8g5Y+q5pyJ5oiR5LiA5Liq55S355Sf44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fV0sInNlb0luZm8iOnsidGl0bGUiOiLnhp/mnpznn63liafnqb/otorkuJPpopggLSDng63pl6hBSeaIkOS6uuefreWJp+S4jum7hOaenOaXtuepuuepv+i2iuWkp+aIj+WQiOmbhiIsImtleXdvcmRzIjpbIueGn+aenOefreWJpyIsIum7hOaenOefreWJpyIsIum7hOaenCIsIkFJ5oiQ5Lq655+t5YmnIiwi56m/6LaK5LiT6aKYIiwi56m/6LaK55+t5YmnIiwi6L2s5oCn5ZCO5oiR56W45Lmx5L+u5LuZ55WMIiwi5YWo54+t5Zyw6ZOB5rGC55SfIiwi5oiQ5Lq655+t5YmnQVBQIl0sImRlc2NyaXB0aW9uIjoi5o6i57Si54af5p6c55+t5Ymn56m/6LaK5LiT6aKY77yM5L2T6aqM56m/5qKt5LqO5LiN5ZCM5pe256m65LmL6Ze055qE5aWH5bm75YaS6Zmp5LiO5a6/5ZG957qg6JGb44CC5bmz5Y+w5q+P5pel5L+d5oyB5oyB57ut5pu05paw77yM54Gr54Ot5pS25b2V5LqG44CK6L2s5oCn5ZCO5oiR56W45Lmx5L+u5LuZ55WM44CL44CB44CK5YWo54+t5Zyw6ZOB5rGC55SfIOWPquacieaIkeS4gOS4queUt+eUn+OAi+etiemrmOS6uuawlOepv+i2iuWkp+aIj+OAgui/memHjOWJp+aDheWPjei9rOS4jeaWreOAgeiEkea0nuWkp+W8gOWIuua/gOOAgueOsOWcqOWwseS4i+i9veWumOaWueS4k+Wxnuemj+WIqUFQUO+8jOW4puaCqOmaj+aXtumaj+WcsOWwveaDheeVheS6q+aXoOW5suaJsOeahOmrmOa4heaOjOS4iui/veWJp+aWsOS9k+mqjO+8gSIsIndlYlNpdGVOYW1lIjoi54af5p6c55+t5YmnIiwiY2Fub25pY2FsVXJsIjoiaHR0cHM6Ly9zaHVndW9kai5jb20vdG9waWMtZGV0YWlsL2NodWFueXVlIn19LHsiaWQiOjEyNjgyLCJuYW1lIjoi5LuZ5L6gIiwic2x1ZyI6InhpYW54aWEiLCJpY29uIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9ibC9hZi8xMDQ5LyVFNCVCRiVBRSVFNCVCQiU5OSVFOCU4OSVCMyVFOSU4MSU4Ny5qcGciLCJyYW5rIjo3LCJwbGF5bGV0Q291bnQiOjM5LCJsaXN0IjpbeyJpZCI6MTQ3NjAsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDA0OjI0OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMjJUMDM6Mjc6MzBaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTA5LTIyVDA3OjE0OjAzWiIsInRoZW1lSWRzIjpbMTI2ODJdLCJ0aGVtZU5hbWVzIjpbIuS7meS+oCJdLCJ0aGVtZVNsdWdzIjpbInhpYW54aWEiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNV0sInRpdGxlIjoi5oiR5ZKM5LiJ5Liq5aW25aaI5LiL5Ymv5pys77yI5YWoNumbhu+8iSIsInBsYXlOYW1lIjoi5oiR5ZKM5LiJ5Liq5aW25aaI5LiL5Ymv5pysIiwiZGVzY3JpcHRpb24iOiLmiYvmjIHljYfku5nku6TnmoTmnpfpgLjmhI/lpJbnqb/otorliLDkuoblhYnmgKrpmYbnprvnmoTkv67ku5nkuJbnlYzvvIzkuIDnnYHnnLzkvr/ov47pnaLmkp7op4HkuobkuInkvY3ouqvmnZDppbHmu6HniIbkubPnmoTnu53oibLnvo7lpbPjgILnu4/ov4fkuInlpbPlqIfmu7Tmu7TnmoToh6rmiJHku4vnu43miY3lvpfnn6XvvIzku5blh63lgJ/ku6TniYznm7TmjqXouI/lhaXkuobpobbnuqfkv67ku5nlrpfpl6jmuIXpn7PpmIHjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmiJHlkozkuInkuKrlpbblpojkuIvlia/mnKzjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw26ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6IndvaGVzYW4iLCJkZXNjIjoi5omL5oyB5Y2H5LuZ5Luk55qE5p6X6YC45oSP5aSW56m/6LaK5Yiw5LqG5YWJ5oCq6ZmG56a755qE5L+u5LuZ5LiW55WM77yM5LiA552B55y85L6/6L+O6Z2i5pKe6KeB5LqG5LiJ5L2N6Lqr5p2Q6aWx5ruh54iG5Lmz55qE57ud6Imy576O5aWz44CC57uP6L+H5LiJ5aWz5aiH5ru05ru055qE6Ieq5oiR5LuL57uN5omN5b6X55+l77yM5LuW5Yet5YCf5Luk54mM55u05o6l6LiP5YWl5LqG6aG257qn5L+u5LuZ5a6X6Zeo5riF6Z+z6ZiB44CCIiwiYW5jaG9yIjoiIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3RxL2dtLzEwNDkvcGxheWxldF9jb3Zlcl84OWUzMWU0ZTI5MjkzZGM4LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2Uvc24vNGovMTA0OS9wbGF5bGV0X2NvdmVyXzg5ZTMxZTRlMjkyOTNkYzguanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODYxLDEyODU0LDEyODU3XSwidGFnTmFtZXMiOlsi5q+N5a2QIiwi5LuZ5L6gIiwi5Y+k5LujIl0sInRhZ1NsdWdzIjpbIm11emkiLCJ4aWFueGlhIiwiZ3VkYWkiXSwidG90YWxFcGlzb2RlIjo2LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNDksImhlYXRWYWx1ZSI6MTY0MTAsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0OTowNy41MDJaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wNlQyMjowMDoyMC44MzZaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuaIkeWSjOS4ieS4quWltuWmiOS4i+WJr+acrO+8iOWFqDbpm4bvvIkiLCJrZXl3b3JsZCI6WyLmiJHlkozkuInkuKrlpbblpojkuIvlia/mnKwiLCLkv67ku5nnqb/otooiLCLlt6jkubPnvo7lpbMiLCLmiJHlkozkuInkuKrlpbblpojkuIvlia/mnKzlrozmlbTniYgiLCLlnKjnur/nnIsiLCLmnpfpgLgiLCLmuIXpn7PpmIEiXSwiZGVzY3JpcHRpb24iOiLmiYvmjIHljYfku5nku6TnmoTmnpfpgLjmhI/lpJbnqb/otorliLDkuoblhYnmgKrpmYbnprvnmoTkv67ku5nkuJbnlYzvvIzkuIDnnYHnnLzkvr/ov47pnaLmkp7op4HkuobkuInkvY3ouqvmnZDppbHmu6HniIbkubPnmoTnu53oibLnvo7lpbPjgILnu4/ov4fkuInlpbPlqIfmu7Tmu7TnmoToh6rmiJHku4vnu43miY3lvpfnn6XvvIzku5blh63lgJ/ku6TniYznm7TmjqXouI/lhaXkuobpobbnuqfkv67ku5nlrpfpl6jmuIXpn7PpmIHjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmiJHlkozkuInkuKrlpbblpojkuIvlia/mnKzjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw26ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NTE0LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDAzOjI4OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTJUMjE6NTA6MDRaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAxVDA4OjAzOjE2WiIsInRoZW1lSWRzIjpbMTI2ODEsMTI2ODJdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyIsIuS7meS+oCJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiIsInhpYW54aWEiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMl0sInRpdGxlIjoi6YC86Imv5Li65aaW77yI5YWoMTDpm4bvvIkiLCJwbGF5TmFtZSI6IumAvOiJr+S4uuWmliIsImRlc2NyaXB0aW9uIjoi5LiA5pyd6L2s55Sf77yM5LuW5bm25pyq6JC95YWl5Yeh5bCY5Lq66Ze077yM6ICM5piv5Z2g5YWl5LqG5LiA5Liq5aSn5aaW57q15qiq44CB5Ye25YW96YGN5Zyw55qE6K+h5byC5byC55WM44CC5Zyo6L+Z54mH5Lmd5q275LiA55Sf55qE57ud5Zyw5Lit77yM5LyX5aaW56uf6Zi05beu6Ziz6ZSZ5bCG5LuW6K+v6K6k5Li65LqG5Lyg6K+05Lit6IO95ouv5pWR5LiH5aaW55qE6Iez6auY4oCc5pWR5LiW5Li74oCd44CC5Li65LqG5Y2a5Y+W5LuW55qE5bqH5oqk5LiO5oGp5rO944CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6YC86Imv5Li65aaW44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiYmlsaWFuZyIsImRlc2MiOiLkuIDmnJ3ovaznlJ/vvIzku5blubbmnKrokL3lhaXlh6HlsJjkurrpl7TvvIzogIzmmK/lnaDlhaXkuobkuIDkuKrlpKflppbnurXmqKrjgIHlh7blhb3pgY3lnLDnmoTor6HlvILlvILnlYzjgILlnKjov5nniYfkuZ3mrbvkuIDnlJ/nmoTnu53lnLDkuK3vvIzkvJflppbnq5/pmLTlt67pmLPplJnlsIbku5bor6/orqTkuLrkuobkvKDor7TkuK3og73mi6/mlZHkuIflppbnmoToh7Ppq5jigJzmlZHkuJbkuLvigJ3jgILkuLrkuobljZrlj5bku5bnmoTluofmiqTkuI7mganms73jgIIiLCJhbmNob3IiOiIiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvcXUvaDkvMTA0OS9wbGF5bGV0X2NvdmVyX2U4YzFmNTI1YjQ2NzNjMmYuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9oZC9mMC8xMDQ5L3BsYXlsZXRfY292ZXJfNjU0YjkwMGIwNjI2NTgzOC5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTEsMTI4NTIsMTI4NzBdLCJ0YWdOYW1lcyI6WyLljp/liJsiLCLpu4TmnpwiLCLlvILkuJbnlYwiXSwidGFnU2x1Z3MiOlsiWUMiLCJodWFuZ2d1byIsIllTSiJdLCJ0b3RhbEVwaXNvZGUiOjEwLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNTksImhlYXRWYWx1ZSI6MTcyNDEsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNSwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0NjoxMC42NTVaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wNlQyMjowMDoxMy4yMzNaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IumAvOiJr+S4uuWmlu+8iOWFqDEw6ZuG77yJIiwia2V5d29ybGQiOlsi6YC86Imv5Li65aaWIiwi5byC55WM5aaW5YW9Iiwi5pWR5LiW5Li76K+x5oORIiwi6YC86Imv5Li65aaW5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5Lmd5bC+54uQ5LuZIiwi5pWR5LiW5Li7Il0sImRlc2NyaXB0aW9uIjoi5LiA5pyd6L2s55Sf77yM5LuW5bm25pyq6JC95YWl5Yeh5bCY5Lq66Ze077yM6ICM5piv5Z2g5YWl5LqG5LiA5Liq5aSn5aaW57q15qiq44CB5Ye25YW96YGN5Zyw55qE6K+h5byC5byC55WM44CC5Zyo6L+Z54mH5Lmd5q275LiA55Sf55qE57ud5Zyw5Lit77yM5LyX5aaW56uf6Zi05beu6Ziz6ZSZ5bCG5LuW6K+v6K6k5Li65LqG5Lyg6K+05Lit6IO95ouv5pWR5LiH5aaW55qE6Iez6auY4oCc5pWR5LiW5Li74oCd44CC5Li65LqG5Y2a5Y+W5LuW55qE5bqH5oqk5LiO5oGp5rO944CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6YC86Imv5Li65aaW44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ4MDMsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAyVDIzOjAxOjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMTBUMDQ6MTE6MzhaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTEwVDA3OjQ2OjU1WiIsInRoZW1lSWRzIjpbMTI2ODJdLCJ0aGVtZU5hbWVzIjpbIuS7meS+oCJdLCJ0aGVtZVNsdWdzIjpbInhpYW54aWEiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNV0sInRpdGxlIjoi6L2s5oCn5ZCO5oiR56W45Lmx5L+u5LuZ55WM77yI5YWoNumbhu+8iSIsInBsYXlOYW1lIjoi6L2s5oCn5ZCO5oiR56W45Lmx5L+u5LuZ55WMIiwiZGVzY3JpcHRpb24iOiLok6zojrHku5nlrpfnmoTlpKnmiY3lnKPlrZDlh4zpnZLmnKzor6Xpo47lhYnml6DpmZDvvIzljbTlm6Dor6/mnI3kupToibLpgZPmnpzlubbkv67ngrzjgIrpvpnlh6Tln7nlhYPlip/jgIvlr7zoh7TpmLTpmLPlvbvlupXpgIbovazvvIzlnKjkuIDniYfmg4rmgZDkuK3ku47kv4rnvo7nlLflrZDljJbkuLrouqvmrrXlppblqIbnmoTnu53oibLnvo7lqIflqJjjgILotbDmipXml6Dot6/kuYvpmYXvvIzllK/mnInku5bmnIDkv6Hku7vnmoTlv4PohbnlsI/lvJ/mrKfpmLPmmI7nn6XmmZPov5nkuKrlpKnlpKfnp5jlr4bjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrovazmgKflkI7miJHnpbjkubHkv67ku5nnlYzjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw26ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6InpodWFueGkiLCJkZXNjIjoi6JOs6I6x5LuZ5a6X55qE5aSp5omN5Zyj5a2Q5YeM6Z2S5pys6K+l6aOO5YWJ5peg6ZmQ77yM5Y205Zug6K+v5pyN5LqU6Imy6YGT5p6c5bm25L+u54K844CK6b6Z5Yek5Z+55YWD5Yqf44CL5a+86Ie06Zi06Ziz5b275bqV6YCG6L2s77yM5Zyo5LiA54mH5oOK5oGQ5Lit5LuO5L+K576O55S35a2Q5YyW5Li66Lqr5q615aaW5aiG55qE57ud6Imy576O5aiH5aiY44CC6LWw5oqV5peg6Lev5LmL6ZmF77yM5ZSv5pyJ5LuW5pyA5L+h5Lu755qE5b+D6IW55bCP5byf5qyn6Ziz5piO55+l5pmT6L+Z5Liq5aSp5aSn56eY5a+G44CCIiwiYW5jaG9yIjoi6buE5p6c5a6Y5pa5IiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3A3L2g4LzEwNDkvcGxheWxldF9jb3Zlcl9mZDg4N2VhOTVhOWRkMGVkLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvM20vbHIvMTA0OS9wbGF5bGV0X2NvdmVyX2ZkODg3ZWE5NWE5ZGQwZWQuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODU0XSwidGFnTmFtZXMiOlsi5LuZ5L6gIl0sInRhZ1NsdWdzIjpbInhpYW54aWEiXSwidG90YWxFcGlzb2RlIjo2LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxMjgsImhlYXRWYWx1ZSI6MTU1ODEsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNywiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0OToyNy42NjRaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wNlQyMjowMDoxNi43MjlaIiwic2VvSW5mbyI6eyJ0aXRsZSI6Iui9rOaAp+WQjuaIkeeluOS5seS/ruS7meeVjO+8iOWFqDbpm4bvvIkiLCJrZXl3b3JsZCI6WyLovazmgKflkI7miJHnpbjkubHkv67ku5nnlYwiLCLmgKfliKvpgIbovawiLCLkv67ku5nnpoHlv4wiLCLovazmgKflkI7miJHnpbjkubHkv67ku5nnlYzlrozmlbTniYgiLCLlnKjnur/nnIsiLCLlh4zpnZIiLCLmrKfpmLPmmI4iXSwiZGVzY3JpcHRpb24iOiLok6zojrHku5nlrpfnmoTlpKnmiY3lnKPlrZDlh4zpnZLmnKzor6Xpo47lhYnml6DpmZDvvIzljbTlm6Dor6/mnI3kupToibLpgZPmnpzlubbkv67ngrzjgIrpvpnlh6Tln7nlhYPlip/jgIvlr7zoh7TpmLTpmLPlvbvlupXpgIbovazvvIzlnKjkuIDniYfmg4rmgZDkuK3ku47kv4rnvo7nlLflrZDljJbkuLrouqvmrrXlppblqIbnmoTnu53oibLnvo7lqIflqJjjgILotbDmipXml6Dot6/kuYvpmYXvvIzllK/mnInku5bmnIDkv6Hku7vnmoTlv4PohbnlsI/lvJ/mrKfpmLPmmI7nn6XmmZPov5nkuKrlpKnlpKfnp5jlr4bjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrovazmgKflkI7miJHnpbjkubHkv67ku5nnlYzjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw26ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19XSwic2VvSW5mbyI6eyJ0aXRsZSI6IueGn+aenOefreWJp+S7meS+oOS4k+mimCAtIOeDremXqEFJ5oiQ5Lq655+t5Ymn5LiO6buE5p6c5LuZ5L6g5L+u55yf5aSn5oiP5ZCI6ZuGIiwia2V5d29yZHMiOlsi54af5p6c55+t5YmnIiwi6buE5p6c55+t5YmnIiwi6buE5p6cIiwiQUnmiJDkurrnn63liaciLCLku5nkvqDkuJPpopgiLCLkv67nnJ/nn63liaciLCLovazmgKflkI7miJHnpbjkubHkv67ku5nnlYwiLCLpgLzoia/kuLrlppYiLCLmiJDkurrnn63liadBUFAiLCLku5nkvqDnn63liaciXSwiZGVzY3JpcHRpb24iOiLmvKvmraXnhp/mnpznn63liafku5nkvqDkuJPpopjvvIzmsonmtbjkvZPpqozlhYnmgKrpmYbnprvnmoTkv67nnJ/kuJbnlYzkuI7ku5nmgYvmg4XnvJjkuqTnu4fnmoTop4bop4nlpYfop4LjgILlubPlj7Dmr4/ml6Xkv53mjIHmjIHnu63mm7TmlrDvvIzngavng63mlLblvZXkuobjgIrovazmgKflkI7miJHnpbjkubHkv67ku5nnlYzjgIvjgIHjgIrpgLzoia/kuLrlppbjgIvnrYnpq5jkurrmsJTku5nkvqDlpKfmiI/jgILov5nph4zliafmg4Xlj43ovazkuI3mlq3jgIHkv67nnJ/msJvlm7Tmi4nmu6HjgILlv6vmnaXkuIvovb3lrpjmlrnkuJPlsZ7npo/liKlBUFDvvIzluKbmgqjpmo/ml7bpmo/lnLDlsL3mg4XnlYXkuqvml6DlubLmibDnmoTpq5jmuIXmjozkuIrov73liafmlrDkvZPpqozvvIEiLCJ3ZWJTaXRlTmFtZSI6IueGn+aenOefreWJpyIsImNhbm9uaWNhbFVybCI6Imh0dHBzOi8vc2h1Z3VvZGouY29tL3RvcGljLWRldGFpbC94aWFueGlhIn19LHsiaWQiOjEyNjgzLCJuYW1lIjoi5Y+k6KOFIiwic2x1ZyI6Imd1emh1YW5nIiwiaWNvbiI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvNTMvZHUvMTA0OS8lRTUlOEYlQTQlRTQlQkIlQTMlRTUlOTAlOEUlRTUlQUUlQUIuanBnIiwicmFuayI6NiwicGxheWxldENvdW50IjozNCwibGlzdCI6W3siaWQiOjE0OTg4LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOnRydWUsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDEyOjA1OjIzLjczNVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDk6NDU6MDBaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA0VDAyOjAyOjM2WiIsInRoZW1lSWRzIjpbMTI2ODMsMTI2ODFdLCJ0aGVtZU5hbWVzIjpbIuWPpOijhSIsIuWOn+WIm+efreWJpyJdLCJ0aGVtZVNsdWdzIjpbImd1emh1YW5nIiwieWF1bmNodWFuZ2RqIl0sImNhdGVnb3J5SWRzIjpbMTExMDUsMTExMDJdLCJ0aXRsZSI6IuWFpei1mOiiq+e7v+S4ieW5tO+8jOecn+WkquWtkOW9kuS9jeWFiOaWqeiNoeWmh+WQjuivm+S5neaXjyIsInBsYXlOYW1lIjoi5YWl6LWY6KKr57u/5LiJ5bm077yM55yf5aSq5a2Q5b2S5L2N5YWI5pap6I2h5aaH5ZCO6K+b5Lmd5pePIiwiZGVzY3JpcHRpb24iOiLmtYHokL3msJHpl7TnmoTlpKrlrZDpmpDlp5Pln4vlkI3vvIzlhaXotZjlrpjlrqbkuYvlrrbvvIzlj5flsL3lhrfpgYfljbTlp4vnu4jlrojnnYDljYrlnZfpvpnnurnnjonkvanjgILnjonkvanooqvkurrlj5jljZblkI7vvIzku5bnmoTnnJ/lrp7ouqvku73mhI/lpJbmm53lhYnjgILpkqblt67orqTlh7rku5bml7bvvIzku5bnu4jkuo7og73muIXnrpfkuInlubTmnaXnmoTml6fotKbvvIzkuZ/lvpfku6Xlm57miqXmm77lnKjku5bokL3prYTml7blloTlvoXku5bnmoTkurrjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlhaXotZjooqvnu7/kuInlubTvvIznnJ/lpKrlrZDlvZLkvY3lhYjmlqnojaHlpoflkI7or5vkuZ3ml4/jgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwx6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6Inp6dHpndyIsImRlc2MiOiLmtYHokL3msJHpl7TnmoTlpKrlrZDpmpDlp5Pln4vlkI3vvIzlhaXotZjlrpjlrqbkuYvlrrbvvIzlj5flsL3lhrfpgYfljbTlp4vnu4jlrojnnYDljYrlnZfpvpnnurnnjonkvanjgILnjonkvanooqvkurrlj5jljZblkI7vvIzku5bnmoTnnJ/lrp7ouqvku73mhI/lpJbmm53lhYnjgILpkqblt67orqTlh7rku5bml7bvvIzku5bnu4jkuo7og73muIXnrpfkuInlubTmnaXnmoTml6fotKbvvIzkuZ/lvpfku6Xlm57miqXmm77lnKjku5bokL3prYTml7blloTlvoXku5bnmoTkurrjgIIiLCJhbmNob3IiOiLljp/liJsiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvdWYvZnQvMTA0OS9wbGF5bGV0X2NvdmVyX2YyOGU3N2ZmYTZlNDNkMjguanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9zby9rbC8xMDQ5L3BsYXlsZXRfY292ZXJfYjZjNGEyYjg1NjdhYWQyZS5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTcsMTI4NzVdLCJ0YWdOYW1lcyI6WyLlj6Tku6MiLCLlpI3ku4ciXSwidGFnU2x1Z3MiOlsiZ3VkYWkiLCJGQyJdLCJ0b3RhbEVwaXNvZGUiOjEsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjMsImhlYXRWYWx1ZSI6MjI1MiwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE2LCJjcmVhdGVkQXQiOiIyMDI2LTExLTA2VDA1OjA3OjM5LjE2NVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjIyLjIxNFoiLCJzZW9JbmZvIjp7InRpdGxlIjoiIiwia2V5d29ybGQiOlsi55yf5aSq5a2Q5b2S5L2NIiwi6b6Z57q5546J5L2pIiwi5Y+k6KOF5aSN5LuHIiwi54af5p6cYWkiLCJBSeaIkOS6uuefreWJpyJdLCJkZXNjcmlwdGlvbiI6Iua1geiQveawkemXtOeahOWkquWtkOmakOWnk+Wfi+WQje+8jOWFpei1mOWumOWupuS5i+Wutu+8jOWPl+WwveWGt+mBh+WNtOWni+e7iOWuiOedgOWNiuWdl+m+mee6ueeOieS9qeOAgueOieS9qeiiq+S6uuWPmOWNluWQju+8jOS7lueahOecn+Wunui6q+S7veaEj+WkluabneWFieOAgumSpuW3ruiupOWHuuS7luaXtu+8jOS7lue7iOS6juiDvea4heeul+S4ieW5tOadpeeahOaXp+i0pu+8jOS5n+W+l+S7peWbnuaKpeabvuWcqOS7luiQvemthOaXtuWWhOW+heS7lueahOS6uuOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWFpei1mOiiq+e7v+S4ieW5tO+8jOecn+WkquWtkOW9kuS9jeWFiOaWqeiNoeWmh+WQjuivm+S5neaXj+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDHpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ5ODYsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6dHJ1ZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDZUMTI6MDM6MDcuMzAzWiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wNFQwMzoxNTowMFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDVUMDQ6MjM6NDJaIiwidGhlbWVJZHMiOlsxMjY4M10sInRoZW1lTmFtZXMiOlsi5Y+k6KOFIl0sInRoZW1lU2x1Z3MiOlsiZ3V6aHVhbmciXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNV0sInRpdGxlIjoi5Y2K55Sf57yY5pyq5LqGIiwicGxheU5hbWUiOiLljYrnlJ/nvJjmnKrkuoYiLCJkZXNjcmlwdGlvbiI6IuawkeWbveaXtuacn++8jOS4gOWQjeWls+WtpueUn+WPl+WnkOWnkOmCgOivt+WIsOWutuS4reWBmuWuou+8jOWNtOiQveWFpeWnkOWnkOS4juWnkOWkq+iuvuS4i+eahOWciOWll+OAguWOn+acrOeGn+aCieeahOS6suS6uueqgeeEtuWPmOW+l+mavuS7peS/oeS7u++8jOi/meWcuueci+S8vOWvu+W4uOeahOaOouiuv+S5n+eUseatpOaUueWPmOS6huWlueeahOWkhOWig+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWNiueUn+e8mOacquS6huOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImJzeXdsIiwiZGVzYyI6IuawkeWbveaXtuacn++8jOS4gOWQjeWls+WtpueUn+WPl+WnkOWnkOmCgOivt+WIsOWutuS4reWBmuWuou+8jOWNtOiQveWFpeWnkOWnkOS4juWnkOWkq+iuvuS4i+eahOWciOWll+OAguWOn+acrOeGn+aCieeahOS6suS6uueqgeeEtuWPmOW+l+mavuS7peS/oeS7u++8jOi/meWcuueci+S8vOWvu+W4uOeahOaOouiuv+S5n+eUseatpOaUueWPmOS6huWlueeahOWkhOWig+OAgiIsImFuY2hvciI6IuWOn+WImyIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS96dC94aS8xMDQ5L3BsYXlsZXRfY292ZXJfNmY0ZWMyZDA2MzM0Y2UzZS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3V0L3lqLzEwNDkvcGxheWxldF9jb3Zlcl9jMGJmOGY1NGJjZDZmMGQ3LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg3NV0sInRhZ05hbWVzIjpbIuWkjeS7hyJdLCJ0YWdTbHVncyI6WyJGQyJdLCJ0b3RhbEVwaXNvZGUiOjEwLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxLCJoZWF0VmFsdWUiOjMyNDcsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNywiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozOC40MjlaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoyMi4xMTlaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuWNiueUn+e8mOacquS6hiIsIuawkeWbveefreWJpyIsIuS6suaDhemZt+mYsSJdLCJkZXNjcmlwdGlvbiI6IuawkeWbveaXtuacn++8jOS4gOWQjeWls+WtpueUn+WPl+WnkOWnkOmCgOivt+WIsOWutuS4reWBmuWuou+8jOWNtOiQveWFpeWnkOWnkOS4juWnkOWkq+iuvuS4i+eahOWciOWll+OAguWOn+acrOeGn+aCieeahOS6suS6uueqgeeEtuWPmOW+l+mavuS7peS/oeS7u++8jOi/meWcuueci+S8vOWvu+W4uOeahOaOouiuv+S5n+eUseatpOaUueWPmOS6huWlueeahOWkhOWig+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWNiueUn+e8mOacquS6huOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NDcyLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wM1QxMTo0ODozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTEwLTI5VDExOjA0OjA5WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMC0zMFQwODo1Mzo1MVoiLCJ0aGVtZUlkcyI6WzEyNjgzXSwidGhlbWVOYW1lcyI6WyLlj6Too4UiXSwidGhlbWVTbHVncyI6WyJndXpodWFuZyJdLCJjYXRlZ29yeUlkcyI6WzExMTA1XSwidGl0bGUiOiLnpZ7pm5XvvJrph43nlJ/kuYvmnajov4fvvIjlhagz6ZuG77yJIiwicGxheU5hbWUiOiLnpZ7pm5XvvJrph43nlJ/kuYvmnajov4ciLCJkZXNjcmlwdGlvbiI6Iui6q+aAgOS5neWNgeS5neS4lua1qeeAmuS/ruS7meiusOW/huS4juelnuenmOmVv+eUn+ezu+e7n+eahOepv+i2iuiAhe+8jOaEj+WklumZjeS4tOelnumbleS4lueVjOW5tumZhOi6q+S6juWNgeWFq+WygeeahOadqOi/h+i6q+S4iuOAguatpOaXtuW/g+aAgOS4jei9qOeahOW8oOWutuaBtumcuOato+W8uuihjOmAvOWAuuephuW/teaFiO+8jOWmhOWbvuWbvuiwi+S4jei9qOaWveaatOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuelnumble+8mumHjeeUn+S5i+adqOi/h+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDPpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoic2hlbmRpYSIsImRlc2MiOiLouqvmgIDkuZ3ljYHkuZ3kuJbmtanngJrkv67ku5norrDlv4bkuI7npZ7np5jplb/nlJ/ns7vnu5/nmoTnqb/otorogIXvvIzmhI/lpJbpmY3kuLTnpZ7pm5XkuJbnlYzlubbpmYTouqvkuo7ljYHlhavlsoHnmoTmnajov4fouqvkuIrjgILmraTml7blv4PmgIDkuI3ovajnmoTlvKDlrrbmgbbpnLjmraPlvLrooYzpgLzlgLrnqYblv7XmhYjvvIzlpoTlm77lm77osIvkuI3ovajmlr3mmrTjgIIiLCJhbmNob3IiOiLpu4TmnpzlrpjmlrkiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvaTEvd3AvMTA0OS9wbGF5bGV0X2NvdmVyX2Y1MDAwYWQ3NjIzNWM1NWYuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS92OS83bS8xMDQ5L3BsYXlsZXRfY292ZXJfZjUwMDBhZDc2MjM1YzU1Zi5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTQsMTI4NzIsMTI4NzNdLCJ0YWdOYW1lcyI6WyLku5nkvqAiLCLph43nlJ8iLCLns7vnu58iXSwidGFnU2x1Z3MiOlsieGlhbnhpYSIsIkNTIiwieGl0b25nIl0sInRvdGFsRXBpc29kZSI6MywidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTYyLCJoZWF0VmFsdWUiOjIwMzY0LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTUsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDE6NTcuNzMyWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDA6MDA6MTMuMTA4WiIsInNlb0luZm8iOnsidGl0bGUiOiLnpZ7pm5XvvJrph43nlJ/kuYvmnajov4fvvIjlhagz6ZuG77yJIiwia2V5d29ybGQiOlsi56We6ZuV6YeN55Sf5LmL5p2o6L+HIiwi57O757uf5L+u5LuZIiwi6Iux6ZuE5pWR576OIiwi56We6ZuV6YeN55Sf5LmL5p2o6L+H5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5p2o6L+HIiwi56mG5b+15oWIIl0sImRlc2NyaXB0aW9uIjoi6Lqr5oCA5Lmd5Y2B5Lmd5LiW5rWp54Ca5L+u5LuZ6K6w5b+G5LiO56We56eY6ZW/55Sf57O757uf55qE56m/6LaK6ICF77yM5oSP5aSW6ZmN5Li056We6ZuV5LiW55WM5bm26ZmE6Lqr5LqO5Y2B5YWr5bKB55qE5p2o6L+H6Lqr5LiK44CC5q2k5pe25b+D5oCA5LiN6L2o55qE5byg5a625oG26Zy45q2j5by66KGM6YC85YC656mG5b+15oWI77yM5aaE5Zu+5Zu+6LCL5LiN6L2o5pa95pq044CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK56We6ZuV77ya6YeN55Sf5LmL5p2o6L+H44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fV0sInNlb0luZm8iOnsidGl0bGUiOiLnhp/mnpznn63liaflj6Too4XkuJPpopggLSDng63pl6hBSeaIkOS6uuefreWJp+S4jum7hOaenOWPpOmjjuiZkOaBi+Wkp+aIj+WQiOmbhiIsImtleXdvcmRzIjpbIueGn+aenOefreWJpyIsIum7hOaenOefreWJpyIsIum7hOaenCIsIkFJ5oiQ5Lq655+t5YmnIiwi5Y+k6KOF5LiT6aKYIiwi5Y+k6aOO55+t5YmnIiwi5a625peP56eY5LqLIiwi6Zuq5bGx5pWR54uQ54u4Iiwi5oiQ5Lq655+t5YmnQVBQIiwi5Y+k6KOF55+t5YmnIl0sImRlc2NyaXB0aW9uIjoi6LWw6L+b54af5p6c55+t5Ymn5Y+k6KOF5LiT6aKY77yM6aKG55Wl5Y+k5YW46Z+15ZGz5LiO54ix5oGo57qg6JGb5Lqk57uH55qE5Y+k6aOO5oOF5LuH5aSn5oiP44CC5bmz5Y+w5q+P5pel5L+d5oyB5oyB57ut5pu05paw77yM54Gr54Ot5pS25b2V5LqG44CK5a625peP56eY5LqL44CL44CB44CK6Zuq5bGx5pWR54uQ54u444CL562J6auY5Lq65rCU5Y+k6KOF5aSn5oiP44CC6L+Z6YeM5Ymn5oOF5Y+N6L2s5LiN5pat44CB5Y+k6Z+15ZSv576O5Yqo5Lq644CC6LW25b+r54K55Ye75LiL6L295a6Y5pa55LiT5bGe56aP5YipQVBQ77yM5bim5oKo6ZqP5pe26ZqP5Zyw55WF5Lqr5peg5bmy5omw55qE6auY5riF5o6M5LiK6L+95Ymn5paw5L2T6aqM77yBIiwid2ViU2l0ZU5hbWUiOiLnhp/mnpznn63liaciLCJjYW5vbmljYWxVcmwiOiJodHRwczovL3NodWd1b2RqLmNvbS90b3BpYy1kZXRhaWwvZ3V6aHVhbmcifX0seyJpZCI6MTI2ODgsIm5hbWUiOiLmvKvliaciLCJzbHVnIjoibWFuanUiLCJpY29uIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9yci94NC8xMDQ5LyVFNiVCQyVBQiVFNiU5NCVCOSVFNyU5RiVBRCVFNSU4OSVBNy5qcGciLCJyYW5rIjoxLCJwbGF5bGV0Q291bnQiOjE5LCJsaXN0IjpbeyJpZCI6MTQ5ODcsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDEyOjI2OjI5Ljc0OVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDk6NDU6NDFaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA0VDAzOjM2OjMyWiIsInRoZW1lSWRzIjpbMTI2ODhdLCJ0aGVtZU5hbWVzIjpbIua8q+WJpyJdLCJ0aGVtZVNsdWdzIjpbIm1hbmp1Il0sImNhdGVnb3J5SWRzIjpbMTExMDVdLCJ0aXRsZSI6IuWFlOWtkOWSjOWTpeWTpeWFseaEn+S6hiIsInBsYXlOYW1lIjoi5YWU5a2Q5ZKM5ZOl5ZOl5YWx5oSf5LqGIiwiZGVzY3JpcHRpb24iOiLlhZTlrZDlkozlk6Xlk6XlhbHmhJ/lkI7mrLLmnJvlkIzmraXniIblj5HjgILlpbnkuIvouqvmvI/msLTvvIzlk6Xlk6XmiYvmjIflj4jmt7Hlj4jlh4blnLDliLrmv4DjgILkuIDmrKHmrKHooqvloavmu6HliLDmnIDmt7HlpITvvIzouqvkvZPlvbvlupXova/kuIvmnaXjgILmtarlj6vljovmipHkuI3kvY/vvIzkuKTkuKrkurrnmoTlv6vmhJ/kuqTnu4flnKjkuIDotbfvvIznpoHlv4zlkIzlsYXlnKjpg73luILlpJzph4zlvbvlupXltKnlnY/vvIzlho3kuZ/lm57kuI3liLDku47liY3jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlhZTlrZDlkozlk6Xlk6XlhbHmhJ/kuobjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwz6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6InR6aGdnIiwiZGVzYyI6IuWFlOWtkOWSjOWTpeWTpeWFseaEn+WQjuassuacm+WQjOatpeeIhuWPkeOAguWlueS4i+i6q+a8j+awtO+8jOWTpeWTpeaJi+aMh+WPiOa3seWPiOWHhuWcsOWIuua/gOOAguS4gOasoeasoeiiq+Whq+a7oeWIsOacgOa3seWkhO+8jOi6q+S9k+W9u+W6lei9r+S4i+adpeOAgua1quWPq+WOi+aKkeS4jeS9j++8jOS4pOS4quS6uueahOW/q+aEn+S6pOe7h+WcqOS4gOi1t++8jOemgeW/jOWQjOWxheWcqOmDveW4guWknOmHjOW9u+W6leW0qeWdj++8jOWGjeS5n+WbnuS4jeWIsOS7juWJjeOAgiIsImFuY2hvciI6IuacgOWFqOeJh+W6kyIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9nci9wOS8xMDQ5L3BsYXlsZXRfY292ZXJfNzMyMDZlNTYzMzI1YzcwMy5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2xpLzUwLzEwNDkvcGxheWxldF9jb3Zlcl83MzIwNmU1NjMzMjVjNzAzLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg3Nl0sInRhZ05hbWVzIjpbIkFJ5oiQ5Lq65ryr5YmnIl0sInRhZ1NsdWdzIjpbIkNSTUoiXSwidG90YWxFcGlzb2RlIjozLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjo5LCJoZWF0VmFsdWUiOjE5OTYsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxOCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozOC42NzJaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wNlQyMjowMDoxMS42OTJaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuWFlOWtkOWSjOWTpeWTpeWFseaEn+S6hiIsIueOqeWBtuWFlOWtkCIsIuWFseaEnyIsIuWFlOWtkOWSjOWTpeWTpeWFseaEn+S6hiIsIumDveW4guWQjOWxheemgeW/jCIsIuWFlOWtkCIsIuWTpeWTpSIsIuWFseaEnyIsIuWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuWFlOWtkOWTpeWTpeeahOWFseaEn+WknCIsIuWFseaEn+WQjueahOWFlOWtkOWTpeWTpSJdLCJkZXNjcmlwdGlvbiI6IuWFlOWtkOWSjOWTpeWTpeWFseaEn+WQjuassuacm+WQjOatpeeIhuWPkeOAguWlueS4i+i6q+a8j+awtO+8jOWTpeWTpeaJi+aMh+WPiOa3seWPiOWHhuWcsOWIuua/gOOAguS4gOasoeasoeiiq+Whq+a7oeWIsOacgOa3seWkhO+8jOi6q+S9k+W9u+W6lei9r+S4i+adpeOAgua1quWPq+WOi+aKkeS4jeS9j++8jOS4pOS4quS6uueahOW/q+aEn+S6pOe7h+WcqOS4gOi1t++8jOemgeW/jOWQjOWxheWcqOmDveW4guWknOmHjOW9u+W6leW0qeWdj++8jOWGjeS5n+WbnuS4jeWIsOS7juWJjeOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWFlOWtkOWSjOWTpeWTpeWFseaEn+S6huOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDPpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ1OTIsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOnRydWUsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDNUMDU6Mzg6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0wOS0xMlQyMTo1MDowN1oiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMDFUMDg6MDA6NTRaIiwidGhlbWVJZHMiOlsxMjY4MSwxMjY4OF0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIiwi5ryr5YmnIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIiwibWFuanUiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMiwxMTEwNV0sInRpdGxlIjoi5pyA5by65pi+56S65Zmo77yI5YWoMTDpm4bvvIkiLCJwbGF5TmFtZSI6IuacgOW8uuaYvuekuuWZqCIsImRlc2NyaXB0aW9uIjoi5Li655WF546p6Iux6ZuE6IGU55uf77yM5LuW5Zyo5bqf5ZOB56uZ5reY5Zue5LiA5Y+w5rOb552A6K+h5byC6I2n5YWJ55qE5LqM5omL5pi+56S65bGP44CC5LiA57uP6YCa55S15LiN5LuF55S76LSo6YC855yf77yM5pu05oul5pyJ5LqG5bCG546w5a6e6IKJ6Lqr4oCc5pWw5L2N5a6e5L2T5YyW4oCd55qE6YCG5aSp56We5Yqb44CC5byA5py6556s6Ze05LuW55u05o6l56m/6LaK6L+b5YWl54iG5qy+572R5ri45LiW55WM44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5pyA5by65pi+56S65Zmo44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoienVpcWlhbiIsImRlc2MiOiLkuLrnlYXnjqnoi7Hpm4TogZTnm5/vvIzku5blnKjlup/lk4Hnq5nmt5jlm57kuIDlj7Dms5vnnYDor6HlvILojaflhYnnmoTkuozmiYvmmL7npLrlsY/jgILkuIDnu4/pgJrnlLXkuI3ku4XnlLvotKjpgLznnJ/vvIzmm7Tmi6XmnInkuoblsIbnjrDlrp7ogonouqvigJzmlbDkvY3lrp7kvZPljJbigJ3nmoTpgIblpKnnpZ7lipvjgILlvIDmnLrnnqzpl7Tku5bnm7TmjqXnqb/otorov5vlhaXniIbmrL7nvZHmuLjkuJbnlYzjgIIiLCJhbmNob3IiOiIiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvNWMvbGYvMTA0OS9wbGF5bGV0X2NvdmVyXzFmMTY0YmQ0Yjk1MzBhY2EuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS8yZS91Yy8xMDQ5L3BsYXlsZXRfY292ZXJfOTBjOTZmNzE1ZDU1YmI5Ny5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTEsMTI4NTIsMTI4NTddLCJ0YWdOYW1lcyI6WyLljp/liJsiLCLpu4TmnpwiLCLlj6Tku6MiXSwidGFnU2x1Z3MiOlsiWUMiLCJodWFuZ2d1byIsImd1ZGFpIl0sInRvdGFsRXBpc29kZSI6MTAsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE4OCwiaGVhdFZhbHVlIjoyMzQzNywiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE0LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ3OjI2LjAwM1oiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjE0LjMxNFoiLCJzZW9JbmZvIjp7InRpdGxlIjoi5pyA5by65pi+56S65Zmo77yI5YWoMTDpm4bvvIkiLCJrZXl3b3JsZCI6WyLmnIDlvLrmmL7npLrlmagiLCLmuLjmiI/nqb/otooiLCLomZrmi5/lkI7lrqsiLCLmnIDlvLrmmL7npLrlmajlrozmlbTniYgiLCLlnKjnur/nnIsiLCLnnIvmnb/lqJgiLCLlpbPmiJjnpZ4iXSwiZGVzY3JpcHRpb24iOiLkuLrnlYXnjqnoi7Hpm4TogZTnm5/vvIzku5blnKjlup/lk4Hnq5nmt5jlm57kuIDlj7Dms5vnnYDor6HlvILojaflhYnnmoTkuozmiYvmmL7npLrlsY/jgILkuIDnu4/pgJrnlLXkuI3ku4XnlLvotKjpgLznnJ/vvIzmm7Tmi6XmnInkuoblsIbnjrDlrp7ogonouqvigJzmlbDkvY3lrp7kvZPljJbigJ3nmoTpgIblpKnnpZ7lipvjgILlvIDmnLrnnqzpl7Tku5bnm7TmjqXnqb/otorov5vlhaXniIbmrL7nvZHmuLjkuJbnlYzjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmnIDlvLrmmL7npLrlmajjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDU1Miwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6dHJ1ZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wM1QwMzowMTozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTA5LTEyVDIxOjUwOjA2WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMC0wMVQwODowMDo1NFoiLCJ0aGVtZUlkcyI6WzEyNjgxLDEyNjg4XSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciLCLmvKvliaciXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiLCJtYW5qdSJdLCJjYXRlZ29yeUlkcyI6WzExMTAyXSwidGl0bGUiOiLms6HpnaLnlarvvIjlhag16ZuG77yJIiwicGxheU5hbWUiOiLms6HpnaLnlaoiLCJkZXNjcmlwdGlvbiI6IuWvgumdmea3seWknOeahOe7v+earueBq+i9puS4iu+8jOa7oeWNgeWFq+WygeeahOael+aZk+aflOiiq+WIl+i9pumVv+S7peWNh+etieS4uuWAn+WPo+W8uuihjOaLieWFpeeLreeqhOi9pumVv+WupO+8jOeUn+aXpeicoeeDm+WImueGhOeBre+8jOegtOWkhOS4juaypuiQveWwseWcqOWQjOS4gOaZmumZjeS4tOOAguegtOS6p+Wls+ekvumVv+eZveW6reWFsOiiq+iuqOiWquWRmOW3peWbtOWgteWcqOS8muiuruWupO+8jOe0p+e7t+eahOihrOihq+S4juebmOWPkeWxguWxguW0qeiQveOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuazoemdoueVquOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDXpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoicGFvbWlhbiIsImRlc2MiOiLlr4LpnZnmt7HlpJznmoTnu7/nmq7ngavovabkuIrvvIzmu6HljYHlhavlsoHnmoTmnpfmmZPmn5TooqvliJfovabplb/ku6XljYfnrYnkuLrlgJ/lj6PlvLrooYzmi4nlhaXni63nqoTovabplb/lrqTvvIznlJ/ml6XonKHng5vliJrnhoTnga3vvIznoLTlpITkuI7msqbokL3lsLHlnKjlkIzkuIDmmZrpmY3kuLTjgILnoLTkuqflpbPnpL7plb/nmb3luq3lhbDooqvorqjolqrlkZjlt6Xlm7TloLXlnKjkvJrorq7lrqTvvIzntKfnu7fnmoTooazooavkuI7nm5jlj5HlsYLlsYLltKnokL3jgIIiLCJhbmNob3IiOiIiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UveDAvY20vMTA0OS9wbGF5bGV0X2NvdmVyX2YyYWNjMTA3NzJlOGM5OWMuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS94cS95cC8xMDQ5L3BsYXlsZXRfY292ZXJfYWIwMmQwN2M3YTE3MzhkZS5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTEsMTI4NTJdLCJ0YWdOYW1lcyI6WyLljp/liJsiLCLpu4TmnpwiXSwidGFnU2x1Z3MiOlsiWUMiLCJodWFuZ2d1byJdLCJ0b3RhbEVwaXNvZGUiOjUsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE1NiwiaGVhdFZhbHVlIjoxODk5MiwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE4LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ2OjU1LjA2M1oiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjIxLjMwN1oiLCJzZW9JbmZvIjp7InRpdGxlIjoi5rOh6Z2i55Wq77yI5YWoNembhu+8iSIsImtleXdvcmxkIjpbIuazoemdoueVqiIsIuWvhumXreepuumXtCIsIuadg+WKm+WAvui9pyIsIuazoemdoueVquWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuael+aZk+aflCIsIueZveW6reWFsCJdLCJkZXNjcmlwdGlvbiI6IuWvgumdmea3seWknOeahOe7v+earueBq+i9puS4iu+8jOa7oeWNgeWFq+WygeeahOael+aZk+aflOiiq+WIl+i9pumVv+S7peWNh+etieS4uuWAn+WPo+W8uuihjOaLieWFpeeLreeqhOi9pumVv+WupO+8jOeUn+aXpeicoeeDm+WImueGhOeBre+8jOegtOWkhOS4juaypuiQveWwseWcqOWQjOS4gOaZmumZjeS4tOOAguegtOS6p+Wls+ekvumVv+eZveW6reWFsOiiq+iuqOiWquWRmOW3peWbtOWgteWcqOS8muiuruWupO+8jOe0p+e7t+eahOihrOihq+S4juebmOWPkeWxguWxguW0qeiQveOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuazoemdoueVquOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDXpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX1dLCJzZW9JbmZvIjp7InRpdGxlIjoi54af5p6c55+t5Ymn5ryr5Ymn5LiT6aKYIC0g54Ot6ZeoQUnmiJDkurrnn63liafkuI7pu4TmnpzmvKvnlLvmlLnnvJblpKfmiI/lkIjpm4YiLCJrZXl3b3JkcyI6WyLnhp/mnpznn63liaciLCLpu4Tmnpznn63liaciLCLpu4TmnpwiLCJBSeaIkOS6uuefreWJpyIsIua8q+WJp+S4k+mimCIsIua8q+aUueefreWJpyIsIuecn+S6uuWltOWPr+aipuiuree7g+Wkp+W4iCIsIuazoemdoueVqiIsIuaIkOS6uuefreWJp0FQUCIsIkFJ5ryr5YmnIl0sImRlc2NyaXB0aW9uIjoi6LWw6L+b54af5p6c55+t5Ymn5ryr5Ymn5LiT6aKY77yM6aKG55Wl5qyh5YWD5aOB56C06KOC5bim5p2l55qE5p6B6Ie06KeG6KeJ5byg5Yqb5LiO55Sf5Yqo5Ymn5oOF44CC5bmz5Y+w5q+P5pel5L+d5oyB5oyB57ut5pu05paw77yM54Gr54Ot5pS25b2V5LqG44CK55yf5Lq65aW05Y+v5qKm6K6t57uD5aSn5biI44CL44CB44CK5rOh6Z2i55Wq44CL562J6auY5Lq65rCU5ryr5pS55aSn5oiP44CC6L+Z6YeM5Ymn5oOF5Y+N6L2s5LiN5pat44CB55S76Z2i57K+5b2p6L+H55i+44CC6LW25b+r54K55Ye75LiL6L295a6Y5pa55LiT5bGe56aP5YipQVBQ77yM5bim5oKo6ZqP5pe26ZqP5Zyw55WF5Lqr5peg5bmy5omw55qE6auY5riF5o6M5LiK6L+95Ymn5paw5L2T6aqM77yBIiwid2ViU2l0ZU5hbWUiOiLnhp/mnpznn63liaciLCJjYW5vbmljYWxVcmwiOiJodHRwczovL3NodWd1b2RqLmNvbS90b3BpYy1kZXRhaWwvbWFuanUifX1dfV0sImFubm91bmNlbWVudHMiOlt7ImlkIjoxMTc4MSwidGl0bGUiOiLnhp/mnpznn63liaciLCJjb250ZW50IjoiICAgICAgICAg8J+ToiAg5pS26JeP54af5p6c55+t5Ymn4oCc5Zue5a6255qE6Lev4oCdIO+9nCDwn4+gIOWFpeWPo+WPmOabtOS5n+S4jeWkseiBlCJ9LHsiaWQiOjExNzgzLCJ0aXRsZSI6IueGn+aenOefreWJpyIsImNvbnRlbnQiOiIgICAgICAgICDwn5OiIOWOn+WIm0FJ5oiQ5Lq655+t5Ymn5q+P5pel5pu05pawIO+9nCDwn4aVIOacgOaWsOWJp+mbhuaMgee7reS4iue6vyJ9LHsiaWQiOjExNzgyLCJ0aXRsZSI6IueGn+aenOefreWJpyIsImNvbnRlbnQiOiIgICAgICAgICDwn5OiIOe6v+i3r+iuv+mXruS4jeeos+Wumu+8nyDvvZwg4p6cIOi/m+WFpeWvvOiIquW/q+mAn+WIh+aNouWkh+eUqOWcsOWdgCJ9LHsiaWQiOjExNzg0LCJ0aXRsZSI6IueGn+aenOefreWJpyIsImNvbnRlbnQiOiIgICAgICAgICDwn5OiIOS4i+i9veeGn+aenOefreWJp0FQUCDvvZwg4q2Q77iPIOeDremXqOWlveWJp+maj+i6q+ingueciyJ9XSwiYWR2aXRpc2UiOnsiZGlhbG9nTGlzdCI6bnVsbCwiaG9tZUxpc3QiOm51bGwsInZpZGVvVG9wTGlzdCI6W3siaWQiOiIxMTM4MjAwMDAzIiwibG9jYXRpb24iOjMsInRpdGxlIjoi5YWo5Zu957qm54KuIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlL2I0LzF2Yi8ycTIvMW4vNWM2YTk3ZGNlY2FjZWUwNWUyZGI3YjQ0YjhmYjA4MGIuZ2lmIiwibGluayI6Imh0dHBzOi8veWs2ZWI5cS50b3A6NDU4MiJ9LHsiaWQiOiIxMTM4NzAwMDAzIiwibG9jYXRpb24iOjMsInRpdGxlIjoi56m66ZmN5aup5qihIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzF0cC9yaC8xenIvODUvZTA3NTI3NmVkYzYzZDgxMWQzYzU3MTFmMmZkOTBkMGIuR0lGIiwibGluayI6Imh0dHBzOi8vMTcwMS51d3hieWwuY24vbGFvcGFuL2luZGV4Lmh0bWwifSx7ImlkIjoiMTEzODgwMDAwMyIsImxvY2F0aW9uIjozLCJ0aXRsZSI6IuaYpeiNryIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yNG8vMXovMW9pL2IyL2I2OGYyOGQ0ZDRmODUzMmY1ZjliZjgzNjBmMDY1ZTEyLkdJRiIsImxpbmsiOiJodHRwczovL3U1cThxNS50b3AifSx7ImlkIjoiMTEzODMwMDAwMyIsImxvY2F0aW9uIjozLCJ0aXRsZSI6IuaYpeiNr+i/t+iNryIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8xeXMvMjdqLzE3Yi8yaG4vMjU0YmI4MGY4MjFlY2E3MDE5NzA4NmFmNGY1MTU5MjkuZ2lmIiwibGluayI6Imh0dHBzOi8vcG14NWdoZS50b3A6MjkyMCJ9XSwidmlkZW9Eb3duTGlzdCI6W3siaWQiOiIxMTM4MjAwMDAzIiwibG9jYXRpb24iOjMsInRpdGxlIjoi5YWo5Zu957qm54KuIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlL2I0LzF2Yi8ycTIvMW4vNWM2YTk3ZGNlY2FjZWUwNWUyZGI3YjQ0YjhmYjA4MGIuZ2lmIiwibGluayI6Imh0dHBzOi8veWs2ZWI5cS50b3A6NDU4MiJ9LHsiaWQiOiIxMTM4NzAwMDAzIiwibG9jYXRpb24iOjMsInRpdGxlIjoi56m66ZmN5aup5qihIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzF0cC9yaC8xenIvODUvZTA3NTI3NmVkYzYzZDgxMWQzYzU3MTFmMmZkOTBkMGIuR0lGIiwibGluayI6Imh0dHBzOi8vMTcwMS51d3hieWwuY24vbGFvcGFuL2luZGV4Lmh0bWwifSx7ImlkIjoiMTEzODgwMDAwMyIsImxvY2F0aW9uIjozLCJ0aXRsZSI6IuaYpeiNryIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yNG8vMXovMW9pL2IyL2I2OGYyOGQ0ZDRmODUzMmY1ZjliZjgzNjBmMDY1ZTEyLkdJRiIsImxpbmsiOiJodHRwczovL3U1cThxNS50b3AifSx7ImlkIjoiMTEzODMwMDAwMyIsImxvY2F0aW9uIjozLCJ0aXRsZSI6IuaYpeiNr+i/t+iNryIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8xeXMvMjdqLzE3Yi8yaG4vMjU0YmI4MGY4MjFlY2E3MDE5NzA4NmFmNGY1MTU5MjkuZ2lmIiwibGluayI6Imh0dHBzOi8vcG14NWdoZS50b3A6MjkyMCJ9XSwiaG90QXBwTGlzdCI6bnVsbCwibmV3QXBwTGlzdCI6bnVsbCwibXVzdEFwcExpc3QiOm51bGwsInRpdGxlQXBwTGlzdCI6bnVsbCwiZnJpZW5kTGlzdCI6bnVsbCwibmluZUdyaWRMaXN0IjpbeyJpZCI6IjExMzgyMDAwMDIiLCJsb2NhdGlvbiI6MiwidGl0bGUiOiLlhajlm73nuqbngq4iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjN1L3g5L2s3LzFwMC83YWU2NmY4MGE2YjM4OTNmZDQxOTk5MWMzY2Q5ODFiOC5naWYiLCJsaW5rIjoiaHR0cHM6Ly95azZlYjlxLnRvcDo0NTgyIn0seyJpZCI6IjExMzg3MDAwMDIiLCJsb2NhdGlvbiI6MiwidGl0bGUiOiLnqbrpmY3lq6nmqKEiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMzA3LzJodC8ycTAvMmtqL2QxZGJhMWFmMTE0NDUxN2Y1NzI0NDRiZTVkYTdhODBjLkdJRiIsImxpbmsiOiJodHRwczovLzE3MDEudXd4YnlsLmNuL2xhb3Bhbi9pbmRleC5odG1sIn0seyJpZCI6IjExMzg4MDAwMDIiLCJsb2NhdGlvbiI6MiwidGl0bGUiOiLmmKXoja8iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjhuLzI2ci8ybnEvaTEvMTY3YTViMzFiMDc3NjMxMzFkOTFjMThiNzEyNTcwMDIuR0lGIiwibGluayI6Imh0dHBzOi8vdTVxOHE1LnRvcCJ9LHsiaWQiOiIxMTM4MzAwMDAyIiwibG9jYXRpb24iOjIsInRpdGxlIjoi5pil6I2v6L+36I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzIwdC8ycHgvejYvMmw1LzA1MWRhNTM2M2E1OGM1ZGExNGYzMmVkMmE4OTVlMTA5LmdpZiIsImxpbmsiOiJodHRwczovL3BteDVnaGUudG9wOjI5MjAifSx7ImlkIjoiMTE2MzgwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6Iua1t+inkuekvuWMuiIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yMDgvMmwyLzFzbS8ycHUvMDIzYjJmMmRhMmM1MWFkNjJiYWU1YjIwNDE0OWE2ZDYud2VicCIsImxpbmsiOiJodHRwczovL2QxbXAyb3FrMzFwMGRhLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzOTAwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6Ium7hOaenOefreWJpyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS91aS8zNTQvcDkvcXgvNTUwMWMxZGNlZmZmODcxYWY3OGMwZGJmMzJiNzViZTQuanBnIiwibGluayI6Imh0dHBzOi8vZG93cjJ2cnpyMGZvby5jbG91ZGZyb250Lm5ldD9kYz1oZ3MwMDAxIn0seyJpZCI6IjExMzg5MDAwMDIiLCJsb2NhdGlvbiI6MiwidGl0bGUiOiI5MWZhbnMiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMnM5LzFtbS8yaHcvMzNqLzAyMzBlMDRlYzRlN2QzMWFmNzUxNGNlYTA0M2QzNmRiLndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMTI4OTBhcHR1bDFkMC5jbG91ZGZyb250Lm5ldD9kYz1oZ3MwMDAxIn0seyJpZCI6IjExMzg2MDAwMDIiLCJsb2NhdGlvbiI6MiwidGl0bGUiOiLpu4TmnpznpoHmvKsiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMXVlLzJ5ci9uOS8yMDUvNzYyZmQ2NWZiMzE3NjhhNzZmMTY3NGM3ZWEyMmIzNTEud2VicCIsImxpbmsiOiJodHRwczovL2QyODcxZ2ZiMGs1dDFlLmNsb3VkZnJvbnQubmV0L2Rvd25sb2FkLzUvaGdzMDAwMSJ9LHsiaWQiOiIxMTM4NTAwMDAyIiwibG9jYXRpb24iOjIsInRpdGxlIjoiNTHnn63liaciLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjc2LzIwMi8yajcvZ2cvZjA1M2ZiNTNjMjIzZTNlODdhNDBmMjM2ODA5YWYzOTMud2VicCIsImxpbmsiOiJodHRwczovL2QxYXZzMHBvcnM4OWZmLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzODQwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6Iue6ouaenOefreWJpyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8zMXEvMmQxL2NtLzZ5L2RiYjczOTA2NTVjMzQ0YzU0OGQ3NTQxZDMyMTEzZTQ4LndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMjg3MWdmYjBrNXQxZS5jbG91ZGZyb250Lm5ldC9kb3dubG9hZC80L2hnczAwMDEifV0sInZpZGVvTGlzdCI6bnVsbCwic3RvcExpc3QiOm51bGwsImZvcmNlZEp1bXBMaXN0IjpudWxsLCJhcHBJbmZvQUxpc3QiOlt7ImlkIjoiMTEzODIwMDAxMiIsImxvY2F0aW9uIjoxMiwidGl0bGUiOiLlhajlm73nuqbngq4iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjN1L3g5L2s3LzFwMC83YWU2NmY4MGE2YjM4OTNmZDQxOTk5MWMzY2Q5ODFiOC5naWYiLCJsaW5rIjoiaHR0cHM6Ly95azZlYjlxLnRvcDo0NTgyIn0seyJpZCI6IjExMzg3MDAwMTIiLCJsb2NhdGlvbiI6MTIsInRpdGxlIjoi56m66ZmN5aup5qihIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzMwNy8yaHQvMnEwLzJrai9kMWRiYTFhZjExNDQ1MTdmNTcyNDQ0YmU1ZGE3YTgwYy5HSUYiLCJsaW5rIjoiaHR0cHM6Ly8xNzAxLnV3eGJ5bC5jbi9sYW9wYW4vaW5kZXguaHRtbCJ9LHsiaWQiOiIxMTM4ODAwMDEyIiwibG9jYXRpb24iOjEyLCJ0aXRsZSI6IuaYpeiNryIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yOG4vMjZyLzJucS9pMS8xNjdhNWIzMWIwNzc2MzEzMWQ5MWMxOGI3MTI1NzAwMi5HSUYiLCJsaW5rIjoiaHR0cHM6Ly91NXE4cTUudG9wIn0seyJpZCI6IjExMzgzMDAwMTIiLCJsb2NhdGlvbiI6MTIsInRpdGxlIjoi5pil6I2v6L+36I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzIwdC8ycHgvejYvMmw1LzA1MWRhNTM2M2E1OGM1ZGExNGYzMmVkMmE4OTVlMTA5LmdpZiIsImxpbmsiOiJodHRwczovL3BteDVnaGUudG9wOjI5MjAifSx7ImlkIjoiMTE2MzgwMDAxMiIsImxvY2F0aW9uIjoxMiwidGl0bGUiOiLmtbfop5LnpL7ljLoiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjA4LzJsMi8xc20vMnB1LzAyM2IyZjJkYTJjNTFhZDYyYmFlNWIyMDQxNDlhNmQ2LndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMW1wMm9xazMxcDBkYS5jbG91ZGZyb250Lm5ldD9kYz1oZ3MwMDAxIn0seyJpZCI6IjExMzkwMDAwMTIiLCJsb2NhdGlvbiI6MTIsInRpdGxlIjoi6buE5p6c55+t5YmnIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlL3VpLzM1NC9wOS9xeC81NTAxYzFkY2VmZmY4NzFhZjc4YzBkYmYzMmI3NWJlNC5qcGciLCJsaW5rIjoiaHR0cHM6Ly9kb3dyMnZyenIwZm9vLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzODkwMDAxMiIsImxvY2F0aW9uIjoxMiwidGl0bGUiOiI5MWZhbnMiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMnM5LzFtbS8yaHcvMzNqLzAyMzBlMDRlYzRlN2QzMWFmNzUxNGNlYTA0M2QzNmRiLndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMTI4OTBhcHR1bDFkMC5jbG91ZGZyb250Lm5ldD9kYz1oZ3MwMDAxIn0seyJpZCI6IjExMzg2MDAwMTIiLCJsb2NhdGlvbiI6MTIsInRpdGxlIjoi6buE5p6c56aB5ryrIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzF1ZS8yeXIvbjkvMjA1Lzc2MmZkNjVmYjMxNzY4YTc2ZjE2NzRjN2VhMjJiMzUxLndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMjg3MWdmYjBrNXQxZS5jbG91ZGZyb250Lm5ldC9kb3dubG9hZC81L2hnczAwMDEifSx7ImlkIjoiMTEzODUwMDAxMiIsImxvY2F0aW9uIjoxMiwidGl0bGUiOiI1MeefreWJpyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yNzYvMjAyLzJqNy9nZy9mMDUzZmI1M2MyMjNlM2U4N2E0MGYyMzY4MDlhZjM5My53ZWJwIiwibGluayI6Imh0dHBzOi8vZDFhdnMwcG9yczg5ZmYuY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM4NDAwMDEyIiwibG9jYXRpb24iOjEyLCJ0aXRsZSI6Iue6ouaenOefreWJpyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8zMXEvMmQxL2NtLzZ5L2RiYjczOTA2NTVjMzQ0YzU0OGQ3NTQxZDMyMTEzZTQ4LndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMjg3MWdmYjBrNXQxZS5jbG91ZGZyb250Lm5ldC9kb3dubG9hZC80L2hnczAwMDEifV0sImFwcEluZm9CTGlzdCI6W3siaWQiOiIxMTM4MjAwMDEzIiwibG9jYXRpb24iOjEzLCJ0aXRsZSI6IuWFqOWbvee6pueCriIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yM3UveDkvazcvMXAwLzdhZTY2ZjgwYTZiMzg5M2ZkNDE5OTkxYzNjZDk4MWI4LmdpZiIsImxpbmsiOiJodHRwczovL3lrNmViOXEudG9wOjQ1ODIifSx7ImlkIjoiMTEzODcwMDAxMyIsImxvY2F0aW9uIjoxMywidGl0bGUiOiLnqbrpmY3lq6nmqKEiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMzA3LzJodC8ycTAvMmtqL2QxZGJhMWFmMTE0NDUxN2Y1NzI0NDRiZTVkYTdhODBjLkdJRiIsImxpbmsiOiJodHRwczovLzE3MDEudXd4YnlsLmNuL2xhb3Bhbi9pbmRleC5odG1sIn0seyJpZCI6IjExMzg4MDAwMTMiLCJsb2NhdGlvbiI6MTMsInRpdGxlIjoi5pil6I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzI4bi8yNnIvMm5xL2kxLzE2N2E1YjMxYjA3NzYzMTMxZDkxYzE4YjcxMjU3MDAyLkdJRiIsImxpbmsiOiJodHRwczovL3U1cThxNS50b3AifSx7ImlkIjoiMTEzODMwMDAxMyIsImxvY2F0aW9uIjoxMywidGl0bGUiOiLmmKXoja/ov7foja8iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjB0LzJweC96Ni8ybDUvMDUxZGE1MzYzYTU4YzVkYTE0ZjMyZWQyYTg5NWUxMDkuZ2lmIiwibGluayI6Imh0dHBzOi8vcG14NWdoZS50b3A6MjkyMCJ9LHsiaWQiOiIxMTYzODAwMDEzIiwibG9jYXRpb24iOjEzLCJ0aXRsZSI6Iua1t+inkuekvuWMuiIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yMDgvMmwyLzFzbS8ycHUvMDIzYjJmMmRhMmM1MWFkNjJiYWU1YjIwNDE0OWE2ZDYud2VicCIsImxpbmsiOiJodHRwczovL2QxbXAyb3FrMzFwMGRhLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzOTAwMDAxMyIsImxvY2F0aW9uIjoxMywidGl0bGUiOiLpu4Tmnpznn63liaciLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvdWkvMzU0L3A5L3F4LzU1MDFjMWRjZWZmZjg3MWFmNzhjMGRiZjMyYjc1YmU0LmpwZyIsImxpbmsiOiJodHRwczovL2Rvd3IydnJ6cjBmb28uY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM4OTAwMDEzIiwibG9jYXRpb24iOjEzLCJ0aXRsZSI6IjkxZmFucyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yczkvMW1tLzJody8zM2ovMDIzMGUwNGVjNGU3ZDMxYWY3NTE0Y2VhMDQzZDM2ZGIud2VicCIsImxpbmsiOiJodHRwczovL2QxMjg5MGFwdHVsMWQwLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzODYwMDAxMyIsImxvY2F0aW9uIjoxMywidGl0bGUiOiLpu4TmnpznpoHmvKsiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMXVlLzJ5ci9uOS8yMDUvNzYyZmQ2NWZiMzE3NjhhNzZmMTY3NGM3ZWEyMmIzNTEud2VicCIsImxpbmsiOiJodHRwczovL2QyODcxZ2ZiMGs1dDFlLmNsb3VkZnJvbnQubmV0L2Rvd25sb2FkLzUvaGdzMDAwMSJ9LHsiaWQiOiIxMTM4NTAwMDEzIiwibG9jYXRpb24iOjEzLCJ0aXRsZSI6IjUx55+t5YmnIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzI3Ni8yMDIvMmo3L2dnL2YwNTNmYjUzYzIyM2UzZTg3YTQwZjIzNjgwOWFmMzkzLndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMWF2czBwb3JzODlmZi5jbG91ZGZyb250Lm5ldD9kYz1oZ3MwMDAxIn0seyJpZCI6IjExMzg0MDAwMTMiLCJsb2NhdGlvbiI6MTMsInRpdGxlIjoi57qi5p6c55+t5YmnIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzMxcS8yZDEvY20vNnkvZGJiNzM5MDY1NWMzNDRjNTQ4ZDc1NDFkMzIxMTNlNDgud2VicCIsImxpbmsiOiJodHRwczovL2QyODcxZ2ZiMGs1dDFlLmNsb3VkZnJvbnQubmV0L2Rvd25sb2FkLzQvaGdzMDAwMSJ9XX0sInNlb0luZm8iOnsidGl0bGUiOiLnhp/mnpznn63liaflrpjnvZEgLSDng63pl6hBSeaIkOS6uuefreWJp+S4jum7hOaenOeyvuWTgUFJ5oiQ5Lq655+t5Ymn5ZCI6ZuGIiwia2V5d29yZHMiOlsi54af5p6c55+t5YmnIiwi6buE5p6c55+t5YmnIiwi6buE5p6cIiwiQUnmiJDkurrnn63liaciLCLnsr7lk4Hnn63liaciLCLnn63liadBUFAiLCLpu4TosYbnn63liaciLCLnhp/mnpzlrpjnvZEiLCLnhp/mnpxBUFDkuIvovb0iLCJBSeaIkOS6uuefreWJp+ingueci+e9keermSIsIkFJ5oiQ5Lq655+t5YmnYXBw5LiL6L29IiwiQUnmiJDkurrnn63liaflnKjnur/nnIsiXSwiZGVzY3JpcHRpb24iOiLnhp/mnpznn63liafkvZzkuLrpooblhYjnmoRBSeaIkOS6uuefreWJp+S4jueyvuWTgeefreinhumikee7vOWQiOW5s+WPsO+8jOaxh+mbhuWFqOe9keWOn+WIm+mrmOiDvUlQ5LiO5Y+N6L2s54i95Ymn44CC56uZ5YaF54us5a6254Ot5pKt44CK6aOO5Y2O56We5aWz5b2V44CL44CK55C85piO56We5aWz5b2V44CL44CK5q+N5LiK5pS755Wl44CL44CK5LuZ5a2Q55qE5L+u6KGM44CL44CK5p6B5ZOB5a625LiB44CL562J5aSa6aKY5p2Q5Yqb5L2c77yM5ra155uW5LuZ5L6g5aWH5bm744CB6YO95biC5Lmx5Lym44CB6IGM5Zy65LiO56m/6LaK44CC5YWo56uZ55S76LSo6LaF5riF5peg5Yig5YeP44CB5q+P5pel5pu05paw5pyA5paw6ZuG77yM5pSv5oyB572R6aG15Y2z54K55Y2z5pKt5LiO5a6Y5pa5QVBQ5o6M5LiK6KeC5b2x77yM5byA5ZCv5p6B6Ie05rKJ5rW455qE6KeG5ZCs55ub5a6044CCIiwid2ViU2l0ZU5hbWUiOiLnhp/mnpznn63liaciLCJjYW5vbmljYWxVcmwiOiJodHRwczovL3NodWd1b2RqLmNvbSJ9fSwiaGFzaCI6ZmFsc2UsIm1zZyI6InN1Y2Nlc3MiLCJ0aW1lIjoiMjAyNi0xMS0wN1QwNDoxMzozMi45MDFaIiwidGlwIjoi5oiQ5YqfIn0=","status":200,"url":"https://webhgbapi.mfcg.me/api/app/playlet/home"},"revalidate":60,"tags":["playlet-home"]} \ No newline at end of file diff --git a/.next-dev/dev/cache/fetch-cache/c6d7a83800394affcbcfca1724fc226a588fcfcabaf1350542c21cb431319035 b/.next-dev/dev/cache/fetch-cache/c6d7a83800394affcbcfca1724fc226a588fcfcabaf1350542c21cb431319035 new file mode 100644 index 0000000..73e8420 --- /dev/null +++ b/.next-dev/dev/cache/fetch-cache/c6d7a83800394affcbcfca1724fc226a588fcfcabaf1350542c21cb431319035 @@ -0,0 +1 @@ +{"kind":"FETCH","data":{"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"Content-Disposition,Refresh-Authorization","connection":"keep-alive","content-encoding":"gzip","content-type":"application/json; charset=utf-8","date":"Sat, 07 Nov 2026 04:13:14 GMT","server":"nginx/1.24.0 (Ubuntu)","transfer-encoding":"chunked"},"body":"eyJjb2RlIjoyMDAsImRhdGEiOnsiaG9tZUJhbm5lckRhdGEiOlt7ImlkIjoxNDkxMSwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjp0cnVlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjp0cnVlLCJiYW5uZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2ExL2kxLzEwNDkvenliLTAxNy0zJTIwJUU3JTkwJUJDJUU2JTk4JThFJUU3JUE1JTlFJUU1JUE1JUIzJUU1JUJEJTk1JTIwZXAzLndlYnAiLCJtb2JpbGVCYW5uZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzF0L2gzLzEwNDkvNS5wbmciLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDJUMDM6NDE6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMC0wM1QxMTo0NTowMFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMDVUMDM6MDE6MzVaIiwidGhlbWVJZHMiOlsxMjY4MSwxMjY4Ml0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIiwi5LuZ5L6gIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIiwieGlhbnhpYSJdLCJjYXRlZ29yeUlkcyI6WzExMTAyLDExMTA1XSwidGl0bGUiOiLnkLzmmI7npZ7lpbPlvZUgRVAzIOeBq+eDreS4iuaYoOS4re+8gSIsInBsYXlOYW1lIjoi55C85piO56We5aWz5b2VIEVQMyDngavng63kuIrmmKDkuK3vvIEiLCJkZXNjcmlwdGlvbiI6IuiMg+aBkuaenOaWreaMpeWJkeaWqeadgOS6huS4gOebtOasuui+seS4iuWumOaCoOeahOmYtOmBk+S4u++8jOaIkOWKn+WkuuWPlumYtOmYs+S7pOS4juacuuWvhuS/oeS7tu+8jOS7luW9k+WNs+WGs+aEj+S7peaJi+S4remVv+WJkeiqk+atu+WkuuWbnuWJkeWul+WkseWOu+eahOS4gOWIh++8jOW5tuWKv+imgeaLv+S4i+ivlemBk+Wkp+S8mueahOaXoOS4iumtgemmluOAgumZpOWkleS5i+WknO+8jOWPtuWuieWmrueJueaEj+aLieedgOS7lueZu+S4iumrmOiAuOeahOaOpeWkqealvOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiueQvOaYjuelnuWls+W9lSBFUDMg54Gr54Ot5LiK5pig5Lit77yB44CL5YWo6ZuG5Zyo57q/6KeC55yL44CB5Ymn5oOF5LuL57uN5Y+K5a6M5pW06YCJ6ZuG77yM5bm25oyB57ut5pu05paw55u45YWz54Ot6Zeo55+t5Ymn44CCIiwic2x1ZyI6InFpb25nbTMiLCJkZXNjIjoi6IyD5oGS5p6c5pat5oyl5YmR5pap5p2A5LqG5LiA55u05qy66L6x5LiK5a6Y5oKg55qE6Zi06YGT5Li777yM5oiQ5Yqf5aS65Y+W6Zi06Ziz5Luk5LiO5py65a+G5L+h5Lu277yM5LuW5b2T5Y2z5Yaz5oSP5Lul5omL5Lit6ZW/5YmR6KqT5q275aS65Zue5YmR5a6X5aSx5Y6755qE5LiA5YiH77yM5bm25Yq/6KaB5ou/5LiL6K+V6YGT5aSn5Lya55qE5peg5LiK6a2B6aaW44CC6Zmk5aSV5LmL5aSc77yM5Y+25a6J5aau54m55oSP5ouJ552A5LuW55m75LiK6auY6IC455qE5o6l5aSp5qW844CCIiwiYW5jaG9yIjoi5Y6f5YibIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzQ2L3lwLzEwNDkvcGxheWxldF9jb3Zlcl8wMjMyYTc3MGIwMGRhYjY3LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UveWwvd2IvMTA0OS9wbGF5bGV0X2NvdmVyX2VjOTk4Y2UxNjg3NDFiNDcuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUxLDEyODUyLDEyODU0XSwidGFnTmFtZXMiOlsi5Y6f5YibIiwi6buE5p6cIiwi5LuZ5L6gIl0sInRhZ1NsdWdzIjpbIllDIiwiaHVhbmdndW8iLCJ4aWFueGlhIl0sInRvdGFsRXBpc29kZSI6MSwidXBkYXRlU3RhdHVzIjoyLCJjb3VudEJyb3dzZSI6MzA5LCJoZWF0VmFsdWUiOjMyMjg3LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTYsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDk6MDY6NTEuMjUyWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDRUMTA6MDA6NTkuNzEzWiIsInNlb0luZm8iOnsidGl0bGUiOiLnkLzmmI7npZ7lpbPlvZUgRVAzIOeBq+eDreS4iuaYoOS4re+8gSIsImtleXdvcmxkIjpbIueQvOaYjuelnuWls+W9lUVQM+eBq+eDreS4iuaYoOS4rSIsIueQvOaYjuelnuWls+W9lSIsIuWJkeWul+WvueWGsyIsIueQvOaYjuelnuWls+W9lUVQM+eBq+eDreS4iuaYoOS4reWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuiMg+aBkiIsIuS4iuWumOaCoCIsIuWPtuWuieWmriIsIumZhuWYiemdmSJdLCJkZXNjcmlwdGlvbiI6IuiMg+aBkuaenOaWreaMpeWJkeaWqeadgOS6huS4gOebtOasuui+seS4iuWumOaCoOeahOmYtOmBk+S4u++8jOaIkOWKn+WkuuWPlumYtOmYs+S7pOS4juacuuWvhuS/oeS7tu+8jOS7luW9k+WNs+WGs+aEj+S7peaJi+S4remVv+WJkeiqk+atu+WkuuWbnuWJkeWul+WkseWOu+eahOS4gOWIh++8jOW5tuWKv+imgeaLv+S4i+ivlemBk+Wkp+S8mueahOaXoOS4iumtgemmluOAgumZpOWkleS5i+WknO+8jOWPtuWuieWmrueJueaEj+aLieedgOS7lueZu+S4iumrmOiAuOeahOaOpeWkqealvOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiueQvOaYjuelnuWls+W9lSBFUDMg54Gr54Ot5LiK5pig5Lit77yB44CL5YWo6ZuG5Zyo57q/6KeC55yL44CB5Ymn5oOF5LuL57uN5Y+K5a6M5pW06YCJ6ZuG77yM5bm25oyB57ut5pu05paw55u45YWz54Ot6Zeo55+t5Ymn44CCIn19LHsiaWQiOjE0NTAyLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3IjpmYWxzZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6dHJ1ZSwiYmFubmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS92My84bi8xMDQ5LyVFOCU4QSVCMSVFOSVBRCU4MSVFOSVBNiU5NiVFNyU5OSVCQy0zJTIwJUU2JUFGJThEJUU0JUI4JThBJUU2JTk0JUJCJUU3JTk1JUE1LmpwZyIsIm1vYmlsZUJhbm5lciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvdXcvYXcvMTA0OS8xMS5wbmciLCJvbmxpbmVBdCI6IjIwMjYtMTAtMjhUMDE6MjI6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMC0yNFQwNDo0ODo0NloiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMjRUMDU6MjY6MDdaIiwidGhlbWVJZHMiOlsxMjY4Nl0sInRoZW1lTmFtZXMiOlsi5Lmx5LymIl0sInRoZW1lU2x1Z3MiOlsibHVhbmx1biJdLCJjYXRlZ29yeUlkcyI6WzExMTA0XSwidGl0bGUiOiLmr43kuIrmlLvnlaUgRVAxIiwicGxheU5hbWUiOiLmr43kuIrmlLvnlaUgRVAxIiwiZGVzY3JpcHRpb24iOiLmr43kurLmgLvmmK/kuaDmg6/ouqvnnYDpu5HkuJ3oopzouKnnnYDnu4bpq5jot5/pnovlnKjlrrbkuK3otbDliqjvvIzov5norqnmgqPmnInkuKXph43mgYvoopznmZbnmoTlhL/lrZDlnKjkuIDml4HnnIvlvpfmrLLngavkuK3ng6fjgIHog6/kuIvmu5rng6vjgILkvp3kvp3kuLvliqjmjaLkuIrntKfouqvlpZfoo5not6jlnZDlnKjku5bouqvkuIrvvIzku5bpl63kuIrlj4znnLzmsonmtbjlnKjlubvmg7PkuK3vvIzlsL3mg4Xkuqvlj5fnnYDmr43kurLku6XlpbPkuIrkvY3ot6johLjluKbmnaXnmoTmnoHoh7TlhrLlh7vjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmr43kuIrmlLvnlaUgRVAx44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJtdXNoYW5nIiwiZGVzYyI6IuavjeS6suaAu+aYr+S5oOaDr+i6q+edgOm7keS4neiinOi4qeedgOe7humrmOi3n+mei+WcqOWutuS4rei1sOWKqO+8jOi/meiuqeaCo+acieS4pemHjeaBi+iinOeZlueahOWEv+WtkOWcqOS4gOaXgeeci+W+l+assueBq+S4reeDp+OAgeiDr+S4i+a7mueDq+OAguS+neS+neS4u+WKqOaNouS4iue0p+i6q+Wll+ijmei3qOWdkOWcqOS7lui6q+S4iu+8jOS7lumXreS4iuWPjOecvOayiea1uOWcqOW5u+aDs+S4re+8jOWwveaDheS6q+WPl+edgOavjeS6suS7peWls+S4iuS9jei3qOiEuOW4puadpeeahOaegeiHtOWGsuWHu+OAgiIsImFuY2hvciI6IuWOn+WImyIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9rdi84Yy8xMDQ5L3BsYXlsZXRfY292ZXJfODMwNzYzOGQ2OTM1NGUzOS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3M3L2pzLzEwNDkvcGxheWxldF9jb3Zlcl9mZGZjMTM5YjIzOGI3NmNkLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg2MSwxMjg2MF0sInRhZ05hbWVzIjpbIuavjeWtkCIsIuS5seS8piJdLCJ0YWdTbHVncyI6WyJtdXppIiwibHVhbmx1biJdLCJ0b3RhbEVwaXNvZGUiOjEsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE4MSwiaGVhdFZhbHVlIjoyMDI1NywiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE3LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQzOjI3LjEwMloiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjE5LjE1MloiLCJzZW9JbmZvIjp7InRpdGxlIjoi5q+N5LiK5pS755WlIEVQMS0g6Iqx6a2BQVBQ54mIIiwia2V5d29ybGQiOlsi5q+N5LiK5pS755WlIiwi5oGL6KKc55mWIiwi5q+N5Lqy6K+x5oORIiwi5q+N5LiK5pS755Wl5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5L6d5L6dIiwi5YS/5a2QIl0sImRlc2NyaXB0aW9uIjoi5q+N5Lqy5oC75piv5Lmg5oOv6Lqr552A6buR5Lid6KKc6Lip552A57uG6auY6Lef6Z6L5Zyo5a625Lit6LWw5Yqo77yM6L+Z6K6p5oKj5pyJ5Lil6YeN5oGL6KKc55mW55qE5YS/5a2Q5Zyo5LiA5peB55yL5b6X5qyy54Gr5Lit54On44CB6IOv5LiL5rua54Or44CC5L6d5L6d5Li75Yqo5o2i5LiK57Sn6Lqr5aWX6KOZ6Leo5Z2Q5Zyo5LuW6Lqr5LiK77yM5LuW6Zet5LiK5Y+M55y85rKJ5rW45Zyo5bm75oOz5Lit77yM5bC95oOF5Lqr5Y+X552A5q+N5Lqy5Lul5aWz5LiK5L2N6Leo6IS45bim5p2l55qE5p6B6Ie05Yay5Ye744CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5q+N5LiK5pS755WlIEVQMeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDHpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ0OTgsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6dHJ1ZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6dHJ1ZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6ZmFsc2UsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOnRydWUsImJhbm5lciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UveHQvb20vMTA0OS96eWItMDA3LTUlMjAlRTYlOUUlODElRTUlOTMlODElRTUlQUUlQjYlRTQlQjglODElMjBlcDEud2VicCIsIm1vYmlsZUJhbm5lciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UveDQvM3QvMTA0OS82NGQ1MGQwNC1kNWM5LTRmM2UtYmE2MS1kY2E1ZTU5MjgzZmQuanBnIiwib25saW5lQXQiOiIyMDI2LTEwLTMxVDIzOjMzOjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMjRUMDg6MzA6MDBaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTI1VDA0OjE3OjEzWiIsInRoZW1lSWRzIjpbMTI2ODVdLCJ0aGVtZU5hbWVzIjpbIumDveW4giJdLCJ0aGVtZVNsdWdzIjpbImR1c2hpIl0sImNhdGVnb3J5SWRzIjpbMTExMDVdLCJ0aXRsZSI6IuaegeWTgeWutuS4gSBFUDHvvIjlkajmm7Tplb/liafvvIkiLCJwbGF5TmFtZSI6IuaegeWTgeWutuS4gSBFUDHvvIjlkajmm7Tplb/liafvvIkiLCJkZXNjcmlwdGlvbiI6Iuael+aZmuiNo+aCoOeEtua8q+atpeS6jueDn+mbqOi/t+iSmeeahOeOhOatpua5lueVlO+8jOavq+S4jeWuouawlOWcsOWHuuiogOiupeiuvemCo+S6m+aJgOiwk+eahOmrmOWCsuaJjeWtkO+8jOWNtOmYtOW3rumYs+mUmeWBtumBh+S6huW+ruacjeWHuuiuv+eahOe7neiJsui0teWls+iClumdkueSh+OAguS4pOS6uuWboOaEj+ingeS4jeWQiOWcqOa5lui+uea/gOeDiOS6iei+qe+8jOaDheaApeS5i+S4i+WPjOWPjOWksei2s+i3jOWFpea5luawtOS5i+S4reOAguWcqOawtOS4i+aMo+aJjuWGsueqgeaXtuOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuaegeWTgeWutuS4gSBFUDHvvIjlkajmm7Tplb/liafvvInjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwx6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImppcGluamkiLCJkZXNjIjoi5p6X5pma6I2j5oKg54S25ryr5q2l5LqO54Of6Zuo6L+36JKZ55qE546E5q2m5rmW55WU77yM5q+r5LiN5a6i5rCU5Zyw5Ye66KiA6K6l6K696YKj5Lqb5omA6LCT55qE6auY5YKy5omN5a2Q77yM5Y206Zi05beu6Ziz6ZSZ5YG26YGH5LqG5b6u5pyN5Ye66K6/55qE57ud6Imy6LS15aWz6IKW6Z2S55KH44CC5Lik5Lq65Zug5oSP6KeB5LiN5ZCI5Zyo5rmW6L655r+A54OI5LqJ6L6p77yM5oOF5oCl5LmL5LiL5Y+M5Y+M5aSx6Laz6LeM5YWl5rmW5rC05LmL5Lit44CC5Zyo5rC05LiL5oyj5omO5Yay56qB5pe244CCIiwiYW5jaG9yIjoi5Y6f5YibIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzdiLzV5LzEwNDkvcGxheWxldF9jb3Zlcl80MWYwN2FmZjAyZDhjNDg4LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvN3gvZHcvMTA0OS9wbGF5bGV0X2NvdmVyXzczY2U1MjMwMTczYWNmYjcuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUzXSwidGFnTmFtZXMiOlsiQUnmiJDkurrnn63liaciXSwidGFnU2x1Z3MiOlsiQ1JESiJdLCJ0b3RhbEVwaXNvZGUiOjEsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjEyNiwiaGVhdFZhbHVlIjoxNTE1NywiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE1LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQzOjI0LjI2M1oiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAwOjAwOjE3LjM5N1oiLCJzZW9JbmZvIjp7InRpdGxlIjoi5p6B5ZOB5a625LiBIEVQMe+8iOWRqOabtOmVv+WJp++8iSIsImtleXdvcmxkIjpbIuaegeWTgeWutuS4gSIsIuepv+i2iuadg+iwiyIsIua5lueVlOWBtumBhyIsIuaegeWTgeWutuS4geWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuael+aZmuiNoyIsIuiClumdkueShyJdLCJkZXNjcmlwdGlvbiI6Iuael+aZmuiNo+aCoOeEtua8q+atpeS6jueDn+mbqOi/t+iSmeeahOeOhOatpua5lueVlO+8jOavq+S4jeWuouawlOWcsOWHuuiogOiupeiuvemCo+S6m+aJgOiwk+eahOmrmOWCsuaJjeWtkO+8jOWNtOmYtOW3rumYs+mUmeWBtumBh+S6huW+ruacjeWHuuiuv+eahOe7neiJsui0teWls+iClumdkueSh+OAguS4pOS6uuWboOaEj+ingeS4jeWQiOWcqOa5lui+uea/gOeDiOS6iei+qe+8jOaDheaApeS5i+S4i+WPjOWPjOWksei2s+i3jOWFpea5luawtOS5i+S4reOAguWcqOawtOS4i+aMo+aJjuWGsueqgeaXtuOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuaegeWTgeWutuS4gSBFUDHvvIjlkajmm7Tplb/liafvvInjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwx6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NDg4LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOnRydWUsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOnRydWUsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOmZhbHNlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjp0cnVlLCJiYW5uZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2IwL3l5LzEwNDkvenliLTAyMi0xLSVFOSVBMiVBOCVFOCU4RiVBRiVFNyVBNSU5RSVFNSVBNSVCMyVFOSU4QyU4NGVwMS53ZWJwIiwibW9iaWxlQmFubmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS8zay9uby8xMDQ5LzgucG5nIiwib25saW5lQXQiOiIyMDI2LTEwLTMxVDE3OjA5OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMjZUMDk6NTA6MDBaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTI3VDAzOjI1OjIyWiIsInRoZW1lSWRzIjpbMTI2ODJdLCJ0aGVtZU5hbWVzIjpbIuS7meS+oCJdLCJ0aGVtZVNsdWdzIjpbInhpYW54aWEiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMV0sInRpdGxlIjoi6aOO5Y2O56We5aWz5b2VIiwicGxheU5hbWUiOiLpo47ljY7npZ7lpbPlvZUiLCJkZXNjcmlwdGlvbiI6IumrmOi0tee7nee+jueahOWkqeWHpOmmluW4reWHpOeSg+atpOWIu+ato+a1kei6q+i1pOijuOOAgemrmOmrmOaShei1t+mlsea7oeeahOiHgOmDqOWxiOi+sei3queIrO+8jOi6q+WQjue0p+iHtOeahOiPiueptOmHjOi1q+eEtuaPkuedgOS4gOagueayvua7oea3q+a2sueahOa5v+a2pue+veavm+OAgumdouWvuea7oeWPo+axoeiogOenveivreeahOiAgeWktO+8jOWlueS4jeW+l+S4jeS4u+WKqOW8oOW8gOe6ouWUh+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiumjjuWNjuelnuWls+W9leOAi+WFqOmbhuWcqOe6v+ingueci+OAgeWJp+aDheS7i+e7jeWPiuWujOaVtOmAiembhu+8jOW5tuaMgee7reabtOaWsOebuOWFs+eDremXqOefreWJp+OAgiIsInNsdWciOiJmZW5naHVhIiwiZGVzYyI6IumrmOi0tee7nee+jueahOWkqeWHpOmmluW4reWHpOeSg+atpOWIu+ato+a1kei6q+i1pOijuOOAgemrmOmrmOaShei1t+mlsea7oeeahOiHgOmDqOWxiOi+sei3queIrO+8jOi6q+WQjue0p+iHtOeahOiPiueptOmHjOi1q+eEtuaPkuedgOS4gOagueayvua7oea3q+a2sueahOa5v+a2pue+veavm+OAgumdouWvuea7oeWPo+axoeiogOenveivreeahOiAgeWktO+8jOWlueS4jeW+l+S4jeS4u+WKqOW8oOW8gOe6ouWUh+OAgiIsImFuY2hvciI6IuWOn+WImyIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9raS81aS8xMDQ5L3BsYXlsZXRfY292ZXJfNWQ4MDM2MmJlZTIxZmZiMi5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL291L29qLzEwNDkvcGxheWxldF9jb3Zlcl83YmYzNGRhMzA5NTcxNTA5LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1NCwxMjg2Nl0sInRhZ05hbWVzIjpbIuS7meS+oCIsIumHjeWPoyJdLCJ0YWdTbHVncyI6WyJ4aWFueGlhIiwiemhvbmdrb3UiXSwidG90YWxFcGlzb2RlIjoyLCJ1cGRhdGVTdGF0dXMiOjIsImNvdW50QnJvd3NlIjoxMzQsImhlYXRWYWx1ZSI6MTU5NTAsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0MjozMi41OTdaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wNFQxMzo0Njo0MC4xOTRaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IumjjuWNjuelnuWls+W9lSIsImtleXdvcmxkIjpbIumjjuWNjuelnuWls+W9lSIsIuWul+mXqOelnuWlsyIsIuaegeW6puiwg+aVmSIsIumjjuWNjuelnuWls+W9leWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuWHpOeSgyIsIuW+kOmXuyJdLCJkZXNjcmlwdGlvbiI6IumrmOi0tee7nee+jueahOWkqeWHpOmmluW4reWHpOeSg+atpOWIu+ato+a1kei6q+i1pOijuOOAgemrmOmrmOaShei1t+mlsea7oeeahOiHgOmDqOWxiOi+sei3queIrO+8jOi6q+WQjue0p+iHtOeahOiPiueptOmHjOi1q+eEtuaPkuedgOS4gOagueayvua7oea3q+a2sueahOa5v+a2pue+veavm+OAgumdouWvuea7oeWPo+axoeiogOenveivreeahOiAgeWktO+8jOWlueS4jeW+l+S4jeS4u+WKqOW8oOW8gOe6ouWUh+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiumjjuWNjuelnuWls+W9leOAi+WFqOmbhuWcqOe6v+ingueci+OAgeWJp+aDheS7i+e7jeWPiuWujOaVtOmAiembhu+8jOW5tuaMgee7reabtOaWsOebuOWFs+eDremXqOefreWJp+OAgiJ9fV0sIm1vZHVsZXMiOlt7ImlkIjoxMTEwMSwic2x1ZyI6Inp1aXJlZHVhbmp1IiwidGl0bGUiOiLmnIDng63nn63liaciLCJkZXNjIjoiIiwia2V5d29yZCI6W10sImxhYmVsIjoiIiwic3R5bGUiOiJBIiwiY2FyZEJhY2tncm91bmRJbWFnZSI6IiIsIm1vZHVsZVR5cGUiOjEsImRhdGFUeXBlIjoxLCJyZWNvbW1lbmRUeXBlIjowLCJjYXRlZ29yeUlkIjowLCJyYW5rIjo2LCJsaW1pdCI6MTAsInNlb0luZm8iOnsidGl0bGUiOiLnhp/mnpznn63liafmnIDng63nn63liafkuJPljLogLSDng63pl6hBSeaIkOS6uuefreWJp+S4jum7hOaenOeIhuasvuefreWJp+WQiOmbhiIsImtleXdvcmxkIjpbIueGn+aenOefreWJpyIsIum7hOaenOefreWJpyIsIum7hOaenCIsIkFJ5oiQ5Lq655+t5YmnIiwi5pyA54Ot55+t5YmnIiwi54iG5qy+55+t5YmnIiwi6aG257qn56eB5Y6oIiwi6ay854i255yf5Lq654mIIiwi5oiQ5Lq655+t5YmnQVBQIl0sImRlc2NyaXB0aW9uIjoi6LWw6L+b54af5p6c55+t5Ymn5pyA54Ot55+t5Ymn5LiT5Yy677yM5rKJ5rW45L2T6aqM5YWo572R5pyA5YW35Lq65rCU55qE54iG5qy+QUnnn63liafkuI7mnoHoh7Top4bop4nlhrLlh7vjgILlubPlj7Dmr4/ml6XlnZrmjIHmjIHnu63mm7TmlrDvvIzngavng63mlLblvZXkuobjgIrpobbnuqfnp4HljqjjgIvjgIHjgIrprLzniLbnnJ/kurrniYjjgIvnrYnpq5jkurrmsJTniIbmrL7lpKfmiI/jgILov5nph4zliafmg4Xlj43ovazkuI3mlq3jgIHng63luqbmjIHnu63pq5jmtqjjgILotbblv6vngrnlh7vkuIvovb3lrpjmlrnkuJPlsZ7npo/liKlBUFDvvIzluKbmgqjpmo/ml7bpmo/lnLDnlYXkuqvml6DlubLmibDnmoTpq5jmuIXmjozkuIrov73liafmlrDkvZPpqozvvIEifSwibGlzdCI6W3siaWQiOjE0ODA5LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wMlQyMzo1ODozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTEwLTEyVDA3OjIzOjE0WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wMlQxMDowMzo1MVoiLCJ0aGVtZUlkcyI6WzEyNjg4XSwidGhlbWVOYW1lcyI6WyLmvKvliaciXSwidGhlbWVTbHVncyI6WyJtYW5qdSJdLCJjYXRlZ29yeUlkcyI6WzExMTA1LDExMTAxXSwidGl0bGUiOiLnnJ/kurrlpbTlj6/moqborq3nu4PlpKfluIjvvIjlhagxM+mbhu+8iSIsInBsYXlOYW1lIjoi55yf5Lq65aW05Y+v5qKm6K6t57uD5aSn5biIIiwiZGVzY3JpcHRpb24iOiLljYHlhavlsoHov5jopoHln4vlpLToi6bor7vogIPlpKflrabvvJ/kuI3vvIzlhYjlpZHnuqbkurLlpojlvZPigJzlpbTlj6/moqbigJ3lvIDlsYDni4Lnu4PvvIHlsJHlubTmsojkuojlronppbHlj5flmLLnrJHvvIzkuIDmgJLkuYvkuIvmgo3nhLblsIbkurLlpojmsojlqYnmmbTlvLrooYzlpZHnuqbjgILnq5nkuIrnq57mioDmk4Llj7DvvIzmr43kurLnnqzpl7TljJbouqvmgKfmhJ/nl7TlpbPnibnlt6XvvIzlvZPkvJflnKjkvJfkurrpnaLliY3oh6rmiaPmmKXmva7ms5vmu6XjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrnnJ/kurrlpbTlj6/moqborq3nu4PlpKfluIjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJ6aGVucmVuIiwiZGVzYyI6IuWNgeWFq+Wygei/mOimgeWfi+WktOiLpuivu+iAg+Wkp+Wtpu+8n+S4je+8jOWFiOWlkee6puS6suWmiOW9k+KAnOWltOWPr+aipuKAneW8gOWxgOeLgue7g++8geWwkeW5tOayiOS6iOWuiemlseWPl+WYsueske+8jOS4gOaAkuS5i+S4i+aCjeeEtuWwhuS6suWmiOayiOWpieaZtOW8uuihjOWlkee6puOAguermeS4iuernuaKgOaTguWPsO+8jOavjeS6sueerOmXtOWMlui6q+aAp+aEn+eXtOWls+eJueW3pe+8jOW9k+S8l+WcqOS8l+S6uumdouWJjeiHquaJo+aYpea9ruazm+a7peOAgiIsImFuY2hvciI6IlN5YmlsIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2o3L3RuLzEwNDkvcGxheWxldF9jb3Zlcl82YmQwMmRlM2E0YjUyYTliLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvbjQveXUvMTA0OS9wbGF5bGV0X2NvdmVyXzZiZDAyZGUzYTRiNTJhOWIuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODYxLDEyODY2LDEyODYyXSwidGFnTmFtZXMiOlsi5q+N5a2QIiwi6YeN5Y+jIiwi5aSn5a2mIl0sInRhZ1NsdWdzIjpbIm11emkiLCJ6aG9uZ2tvdSIsImRheHVlIl0sInRvdGFsRXBpc29kZSI6MTMsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE4NywiaGVhdFZhbHVlIjoyMTU5OCwiY291bnRDb2xsZWN0IjoxLCJjb3VudExpa2UiOjE5LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ5OjMxLjM4NFoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjA0Ljg0M1oiLCJzZW9JbmZvIjp7InRpdGxlIjoi55yf5Lq65aW05Y+v5qKm6K6t57uD5aSn5biI77yI5YWoMTPpm4bvvIkiLCJrZXl3b3JsZCI6WyLnnJ/kurrlpbTlj6/moqborq3nu4PlpKfluIgiLCLmr43lrZDlpZHnuqYiLCLnl7TlpbPnibnlt6UiLCLnnJ/kurrlpbTlj6/moqborq3nu4PlpKfluIjlrozmlbTniYgiLCLlnKjnur/nnIsiLCLmsojkuojlrokiLCLmsojlqYnmmbQiXSwiZGVzY3JpcHRpb24iOiLljYHlhavlsoHov5jopoHln4vlpLToi6bor7vogIPlpKflrabvvJ/kuI3vvIzlhYjlpZHnuqbkurLlpojlvZPigJzlpbTlj6/moqbigJ3lvIDlsYDni4Lnu4PvvIHlsJHlubTmsojkuojlronppbHlj5flmLLnrJHvvIzkuIDmgJLkuYvkuIvmgo3nhLblsIbkurLlpojmsojlqYnmmbTlvLrooYzlpZHnuqbjgILnq5nkuIrnq57mioDmk4Llj7DvvIzmr43kurLnnqzpl7TljJbouqvmgKfmhJ/nl7TlpbPnibnlt6XvvIzlvZPkvJflnKjkvJfkurrpnaLliY3oh6rmiaPmmKXmva7ms5vmu6XjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrnnJ/kurrlpbTlj6/moqborq3nu4PlpKfluIjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDY3MCwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDFUMjA6NDE6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMC0xM1QwMzoyNTozOFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDRUMTI6MTg6MzNaIiwidGhlbWVJZHMiOlsxMjY4NV0sInRoZW1lTmFtZXMiOlsi6YO95biCIl0sInRoZW1lU2x1Z3MiOlsiZHVzaGkiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNSwxMTEwMV0sInRpdGxlIjoi5a2Y5Zyo5oSf77ya6Zu277yI5YWoNumbhu+8iSIsInBsYXlOYW1lIjoi5a2Y5Zyo5oSf77ya6Zu2IiwiZGVzY3JpcHRpb24iOiLlnKjlpaLljY7mta7ljY7nmoTnjrDku6PlqLHkuZDlnIjogYzlnLroiJ7lj7DkuIrvvIzmnInkuIDkvY3mr6vml6DlkI3msJTnmoTovrnnvJjoibrkurrvvIzlhbblrZjlnKjmhJ/loKrnp7Dpm7bjgILmt7HlpJznqbrml7fnmoTlip7lhazlrqTlhoXvvIzmmI/mmpfnmoTpobbnga/lsIbkuKTkurrnmoTouqvlvbHmi4nlvpfmnoHplb/vvIzooaPnianmu5HokL3nmoTnu4blvq7lo7Dlk43kuI7ljovmipHmsonph43nmoTlkbzlkLjlo7DlnKjnqbrmsJTkuK3kuqTnu4fjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlrZjlnKjmhJ/vvJrpm7bjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw56ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImN1bnphaWciLCJkZXNjIjoi5Zyo5aWi5Y2O5rWu5Y2O55qE546w5Luj5aix5LmQ5ZyI6IGM5Zy66Iie5Y+w5LiK77yM5pyJ5LiA5L2N5q+r5peg5ZCN5rCU55qE6L6557yY6Im65Lq677yM5YW25a2Y5Zyo5oSf5aCq56ew6Zu244CC5rex5aSc56m65pe355qE5Yqe5YWs5a6k5YaF77yM5piP5pqX55qE6aG254Gv5bCG5Lik5Lq655qE6Lqr5b2x5ouJ5b6X5p6B6ZW/77yM6KGj54mp5ruR6JC955qE57uG5b6u5aOw5ZON5LiO5Y6L5oqR5rKJ6YeN55qE5ZG85ZC45aOw5Zyo56m65rCU5Lit5Lqk57uH44CCIiwiYW5jaG9yIjoi6buE5p6c5a6Y5pa5IiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzBoL2loLzEwNDkvcGxheWxldF9jb3Zlcl8yYzYwMDNlOGFjZDVmYWY2LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvcTcvMm8vMTA0OS9wbGF5bGV0X2NvdmVyXzJjNjAwM2U4YWNkNWZhZjYuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODU2LDEyODU1XSwidGFnTmFtZXMiOlsi6IGM5Zy66LCD5pWZIiwi6YO95biCIl0sInRhZ1NsdWdzIjpbIlpDVEoiLCJkdXNoaSJdLCJ0b3RhbEVwaXNvZGUiOjksInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjQwOCwiaGVhdFZhbHVlIjo0NTcxMCwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE0LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ4OjE1LjY2NloiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjA0LjMyMloiLCJzZW9JbmZvIjp7InRpdGxlIjoi5a2Y5Zyo5oSf77ya6Zu277yI5YWoNumbhu+8iSIsImtleXdvcmxkIjpbIuWtmOWcqOaEn+mbtiIsIuWoseS5kOWciOa9nOinhOWImSIsIuiBjOWcuuivseaDkSIsIuWtmOWcqOaEn+mbtuWujOaVtOeJiCIsIuWcqOe6v+eciyIsIui+uee8mOiJuuS6uiIsIuWKnuWFrOWupCJdLCJkZXNjcmlwdGlvbiI6IuWcqOWlouWNjua1ruWNjueahOeOsOS7o+WoseS5kOWciOiBjOWcuuiInuWPsOS4iu+8jOacieS4gOS9jeavq+aXoOWQjeawlOeahOi+uee8mOiJuuS6uu+8jOWFtuWtmOWcqOaEn+WgquensOmbtuOAgua3seWknOepuuaXt+eahOWKnuWFrOWupOWGhe+8jOaYj+aal+eahOmhtueBr+WwhuS4pOS6uueahOi6q+W9seaLieW+l+aegemVv++8jOiho+eJqea7keiQveeahOe7huW+ruWjsOWTjeS4juWOi+aKkeayiemHjeeahOWRvOWQuOWjsOWcqOepuuawlOS4reS6pOe7h+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWtmOWcqOaEn++8mumbtuOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDnpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ3NDgsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAxVDE5OjQ1OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMTBUMDM6MDA6MDBaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTEyVDAzOjUyOjE2WiIsInRoZW1lSWRzIjpbMTI2ODVdLCJ0aGVtZU5hbWVzIjpbIumDveW4giJdLCJ0aGVtZVNsdWdzIjpbImR1c2hpIl0sImNhdGVnb3J5SWRzIjpbMTExMDUsMTExMDFdLCJ0aXRsZSI6IuiLj+iAgeW4iOeahOijuOi0t+S6uueUn++8iOmHkeW4geino+mUge+8ie+8iOWFqDXpm4bvvIkiLCJwbGF5TmFtZSI6IuiLj+iAgeW4iOeahOijuOi0t+S6uueUn++8iOmHkeW4geino+mUge+8iSIsImRlc2NyaXB0aW9uIjoi5rip5p+U56uv5bqE55qE6IuP6ICB5biI5Li65LqG5pu/5Zec6LWM5oiQ5oCn55qE54i25Lqy6L+Y5riF5beo6aKd6auY5Yip6LS377yM6L+r5LqO5peg5aWI6LWw5LiK5LqG5YCf6KO46LS355qE57ud6Lev44CC55u05Yiw5YC65Li75rex5aSc5omT5byA5Yqg5a+G55u45YaM55qE6YKj5LiA5Yi777yM6ZyH5oOK5Zyw5Y+R546w5aWz5Li76KeS56uf54S25bCx5piv6Ieq5bex5bmz5pel6YeM6auY6auY5Zyo5LiK55qE5oCn5oSf5aWz6ICB5biI77yB54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6IuP6ICB5biI55qE6KO46LS35Lq655Sf77yI6YeR5biB6Kej6ZSB77yJ44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysNembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJzdWxhb3NoIiwiZGVzYyI6Iua4qeaflOerr+W6hOeahOiLj+iAgeW4iOS4uuS6huabv+WXnOi1jOaIkOaAp+eahOeItuS6sui/mOa4heW3qOminemrmOWIqei0t++8jOi/q+S6juaXoOWliOi1sOS4iuS6huWAn+ijuOi0t+eahOe7nei3r+OAguebtOWIsOWAuuS4u+a3seWknOaJk+W8gOWKoOWvhuebuOWGjOeahOmCo+S4gOWIu++8jOmch+aDiuWcsOWPkeeOsOWls+S4u+inkuern+eEtuWwseaYr+iHquW3seW5s+aXpemHjOmrmOmrmOWcqOS4iueahOaAp+aEn+Wls+iAgeW4iO+8gSIsImFuY2hvciI6Ii0iLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvZzMvMXEvMTA0OS9wbGF5bGV0X2NvdmVyXzAwOTY3Yzc4OGRiNWMxODMuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODU2LDEyODU1XSwidGFnTmFtZXMiOlsi6IGM5Zy66LCD5pWZIiwi6YO95biCIl0sInRhZ1NsdWdzIjpbIlpDVEoiLCJkdXNoaSJdLCJ0b3RhbEVwaXNvZGUiOjUsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE3MSwiaGVhdFZhbHVlIjoyMTA5MiwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjEzLCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ5OjAxLjIwNVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAxOjAwOjE5LjYzNVoiLCJzZW9JbmZvIjp7InRpdGxlIjoi6IuP6ICB5biI55qE6KO46LS35Lq655Sf77yI6YeR5biB6Kej6ZSB77yJ77yI5YWoNembhu+8iSIsImtleXdvcmxkIjpbIuiLj+iAgeW4iOeahOijuOi0t+S6uueUnyIsIuijuOi0t+mZt+mYsSIsIumrmOWGt+W+oeWnkCIsIuiLj+iAgeW4iOeahOijuOi0t+S6uueUn+WujOaVtOeJiCIsIuWcqOe6v+eciyIsIuiLj+iAgeW4iCIsIui1jOmsvOeIuSJdLCJkZXNjcmlwdGlvbiI6Iua4qeaflOerr+W6hOeahOiLj+iAgeW4iOS4uuS6huabv+WXnOi1jOaIkOaAp+eahOeItuS6sui/mOa4heW3qOminemrmOWIqei0t++8jOi/q+S6juaXoOWliOi1sOS4iuS6huWAn+ijuOi0t+eahOe7nei3r+OAguebtOWIsOWAuuS4u+a3seWknOaJk+W8gOWKoOWvhuebuOWGjOeahOmCo+S4gOWIu++8jOmch+aDiuWcsOWPkeeOsOWls+S4u+inkuern+eEtuWwseaYr+iHquW3seW5s+aXpemHjOmrmOmrmOWcqOS4iueahOaAp+aEn+Wls+iAgeW4iO+8geeGn+aenOefreWJp1dFQuaPkOS+m+OAiuiLj+iAgeW4iOeahOijuOi0t+S6uueUn++8iOmHkeW4geino+mUge+8ieOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDXpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ0OTcsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAxVDE2OjA5OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMjRUMTI6MzE6MjJaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTAzVDA3OjQ4OjU3WiIsInRoZW1lSWRzIjpbMTI2ODVdLCJ0aGVtZU5hbWVzIjpbIumDveW4giJdLCJ0aGVtZVNsdWdzIjpbImR1c2hpIl0sImNhdGVnb3J5SWRzIjpbMTExMDUsMTExMDFdLCJ0aXRsZSI6IumHnOWxseijuOihjO+8iOWFqDnpm4bvvIkiLCJwbGF5TmFtZSI6IumHnOWxseijuOihjCIsImRlc2NyaXB0aW9uIjoi6auY6YCf6KGM6am255qES1RY5YiX6L2m5LiK56qB54S254iG5Y+R5oGQ5oCW57ud5Lym55qE5Lin5bC454uC5r2u77yM5p6X5a6H5oOK5oGQ5Zyw5Y+R546w5Lin5bC456uf54S25Y+q5a+56KGj54mp5pWP5oSf77yM5Y+q6KaB5YWo6Lqr6LWk6KO45L6/6IO95a6e546w5a6M576O6ZqQ5b2i44CC5Li65LqG5Zyo6KGA6IWl5ZGz5byl5ryr55qE6L2m5Y6i5Lit5rS75ZG944CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6Yec5bGx6KO46KGM44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysOembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJmdXNoYW5sIiwiZGVzYyI6IumrmOmAn+ihjOmptueahEtUWOWIl+i9puS4iueqgeeEtueIhuWPkeaBkOaAlue7neS8pueahOS4p+WwuOeLgua9ru+8jOael+Wuh+aDiuaBkOWcsOWPkeeOsOS4p+WwuOern+eEtuWPquWvueiho+eJqeaVj+aEn++8jOWPquimgeWFqOi6q+i1pOijuOS+v+iDveWunueOsOWujOe+jumakOW9ouOAguS4uuS6huWcqOihgOiFpeWRs+W8pea8q+eahOi9puWOouS4rea0u+WRveOAgiIsImFuY2hvciI6IueIseixhuS8oOWqkiIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9mNC9pby8xMDQ5L3BsYXlsZXRfY292ZXJfYTRjNGIzY2M0YjI5MTk2Mi5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2wxL2V0LzEwNDkvcGxheWxldF9jb3Zlcl9hNGM0YjNjYzRiMjkxOTYyLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg2OF0sInRhZ05hbWVzIjpbIuacq+aXpeW6n+WcnyJdLCJ0YWdTbHVncyI6WyJtb3JpZmVpdHUiXSwidG90YWxFcGlzb2RlIjo5LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNzEsImhlYXRWYWx1ZSI6MTgyNDgsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxMiwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0Mjo1OC4zNjlaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMTowMDoxOS41NFoiLCJzZW9JbmZvIjp7InRpdGxlIjoi6Yec5bGx6KO46KGM77yI5YWoOembhu+8iSIsImtleXdvcmxkIjpbIumHnOWxseijuOihjCIsIuacq+aXpeaxgueUnyIsIuWFqOijuOmakOW9oiIsIumHnOWxseijuOihjOWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuael+WuhyIsIuWkj+aZtCIsIualmuaciCIsIumHkeato+eGmSJdLCJkZXNjcmlwdGlvbiI6IumrmOmAn+ihjOmptueahEtUWOWIl+i9puS4iueqgeeEtueIhuWPkeaBkOaAlue7neS8pueahOS4p+WwuOeLgua9ru+8jOael+Wuh+aDiuaBkOWcsOWPkeeOsOS4p+WwuOern+eEtuWPquWvueiho+eJqeaVj+aEn++8jOWPquimgeWFqOi6q+i1pOijuOS+v+iDveWunueOsOWujOe+jumakOW9ouOAguS4uuS6huWcqOihgOiFpeWRs+W8pea8q+eahOi9puWOouS4rea0u+WRveOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiumHnOWxseijuOihjOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDnpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ1NDksInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3IjpmYWxzZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMC0zMFQxMDoyMTozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTEwLTAzVDEwOjI1OjAwWiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMC0wM1QxMToyNDoyOFoiLCJ0aGVtZUlkcyI6WzEyNjg1XSwidGhlbWVOYW1lcyI6WyLpg73luIIiXSwidGhlbWVTbHVncyI6WyJkdXNoaSJdLCJjYXRlZ29yeUlkcyI6WzExMTAxXSwidGl0bGUiOiLlpbPlj4vluK7miJHmk43pl7ronJwiLCJwbGF5TmFtZSI6IuWls+WPi+W4ruaIkeaTjemXuuicnCIsImRlc2NyaXB0aW9uIjoi5oOo6YGt5aSx5oGL5omT5Ye755qE6Ze66Jyc5rex5aSc55m76Zeo5YCf5a6/77yM5LiJ5Liq5Lq65oyk5Zyo5ZCM5LiA5byg5bqK5LiK5pWj5Y+R552A5peg5bC955qE5bC05bCs5LiO6K+h5byC44CC5Y6f5pys5Y+q5piv5Ye65LqO5peg5aWI55qE55WZ5a6/6Zmq5Ly077yM5Y205Zyo5ZCO5Y2K5aSc5pqX5r2u5rG55raM55qE56m65rCU5Lit5b275bqV5aSx5o6n77yM5LiA5Zy656qB56C06YGT5b635bqV57q/55qE56aB5b+M5oSP5aSW5Zyo6YC85LuE55qE56m66Ze05YaF6L2w54S254K46KOC44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5aWz5Y+L5biu5oiR5pON6Ze66Jyc44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJudnlvdWJhIiwiZGVzYyI6IuaDqOmBreWkseaBi+aJk+WHu+eahOmXuuicnOa3seWknOeZu+mXqOWAn+Wuv++8jOS4ieS4quS6uuaMpOWcqOWQjOS4gOW8oOW6iuS4iuaVo+WPkeedgOaXoOWwveeahOWwtOWwrOS4juivoeW8guOAguWOn+acrOWPquaYr+WHuuS6juaXoOWliOeahOeVmeWuv+mZquS8tO+8jOWNtOWcqOWQjuWNiuWknOaal+a9ruaxuea2jOeahOepuuawlOS4reW9u+W6leWkseaOp++8jOS4gOWcuueqgeegtOmBk+W+t+W6lee6v+eahOemgeW/jOaEj+WkluWcqOmAvOS7hOeahOepuumXtOWGhei9sOeEtueCuOijguOAgiIsImFuY2hvciI6Ii0iLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvaTAvY3QvMTA0OS9wbGF5bGV0X2NvdmVyXzY4NDcyMWQ4ZGFkNzNiY2MuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUzLDEyODU5LDEyODU1XSwidGFnTmFtZXMiOlsiQUnmiJDkurrnn63liaciLCLoibPpgYciLCLpg73luIIiXSwidGFnU2x1Z3MiOlsiQ1JESiIsInlhbnl1IiwiZHVzaGkiXSwidG90YWxFcGlzb2RlIjozLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNTcsImhlYXRWYWx1ZSI6MTg0MjEsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxOSwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0Njo1Mi41M1oiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAxOjAwOjE5LjQ0OFoiLCJzZW9JbmZvIjp7InRpdGxlIjoi5aWz5Y+L5biu5oiR5pON6Ze66JycIiwia2V5d29ybGQiOlsi5aWz5Y+L5biu5oiR5pON6Ze66JycIiwi6Ze66Jyc5YCf5a6/Iiwi56aB5b+M54uC5LmxIiwi5aWz5Y+L5biu5oiR5pON6Ze66Jyc5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5aSx5oGL6Ze66JycIiwi54ut56qE56m66Ze0Il0sImRlc2NyaXB0aW9uIjoi5oOo6YGt5aSx5oGL5omT5Ye755qE6Ze66Jyc5rex5aSc55m76Zeo5YCf5a6/77yM5LiJ5Liq5Lq65oyk5Zyo5ZCM5LiA5byg5bqK5LiK5pWj5Y+R552A5peg5bC955qE5bC05bCs5LiO6K+h5byC44CC5Y6f5pys5Y+q5piv5Ye65LqO5peg5aWI55qE55WZ5a6/6Zmq5Ly077yM5Y205Zyo5ZCO5Y2K5aSc5pqX5r2u5rG55raM55qE56m65rCU5Lit5b275bqV5aSx5o6n77yM5LiA5Zy656qB56C06YGT5b635bqV57q/55qE56aB5b+M5oSP5aSW5Zyo6YC85LuE55qE56m66Ze05YaF6L2w54S254K46KOC44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5aWz5Y+L5biu5oiR5pON6Ze66Jyc44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDU5OCwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOmZhbHNlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTEwLTMwVDA2OjUzOjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMTJUMTA6NTQ6NDBaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTAzVDA3OjQ3OjIyWiIsInRoZW1lSWRzIjpbMTI2ODRdLCJ0aGVtZU5hbWVzIjpbIuepv+i2iiJdLCJ0aGVtZVNsdWdzIjpbImNodWFueXVlIl0sImNhdGVnb3J5SWRzIjpbMTExMDUsMTExMDFdLCJ0aXRsZSI6IjUw5YWD5Lmw5pat5Lq65aa777yI5YWoMTTpm4bvvIkiLCJwbGF5TmFtZSI6IjUw5YWD5Lmw5pat5Lq65aa7IiwiZGVzY3JpcHRpb24iOiLmnpflpKnmjo/lv4Pmjo/ogrrnnJ/or5rnm7jlvoXkuInlubTnmoTmt7Hmg4XlpbPlj4vvvIznq5/nhLblnKjog4zlnLDph4zlgbfmg4Xml7bov5jogobml6Dlv4zmg67lnLDorqnku5bljrvkubDpgb/lrZXlpZfjgILkuIflv7Xkv7HngbDkuYvkuIvvvIzku5bmhI/lpJbop4nphpLkuobpnIfmkrzkuJbkv5fnmoTigJzkurrlprvkubDmlq3ns7vnu5/igJ3jgILogIzns7vnu5/op6PplIHnmoTnrKzkuIDkuKrkubDmlq3lr7nosaHjgILnhp/mnpznn63liadXRULmj5DkvpvjgIo1MOWFg+S5sOaWreS6uuWmu+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDE06ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6IjUweXVhbm0iLCJkZXNjIjoi5p6X5aSp5o6P5b+D5o6P6IK655yf6K+a55u45b6F5LiJ5bm055qE5rex5oOF5aWz5Y+L77yM56uf54S25Zyo6IOM5Zyw6YeM5YG35oOF5pe26L+Y6IKG5peg5b+M5oOu5Zyw6K6p5LuW5Y675Lmw6YG/5a2V5aWX44CC5LiH5b+15L+x54Gw5LmL5LiL77yM5LuW5oSP5aSW6KeJ6YaS5LqG6ZyH5pK85LiW5L+X55qE4oCc5Lq65aa75Lmw5pat57O757uf4oCd44CC6ICM57O757uf6Kej6ZSB55qE56ys5LiA5Liq5Lmw5pat5a+56LGh44CCIiwiYW5jaG9yIjoi5ZGo5aSn6JCMIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3dqL2NvLzEwNDkvcGxheWxldF9jb3Zlcl85M2RmY2FhNzc0NDFlN2VjLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvczkvbWMvMTA0OS9wbGF5bGV0X2NvdmVyXzkzZGZjYWE3NzQ0MWU3ZWMuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODU1LDEyODczLDEyODc0XSwidGFnTmFtZXMiOlsi6YO95biCIiwi57O757ufIiwi5byC6IO96KeJ6YaSIl0sInRhZ1NsdWdzIjpbImR1c2hpIiwieGl0b25nIiwiWU5KWCJdLCJ0b3RhbEVwaXNvZGUiOjE0LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNTEsImhlYXRWYWx1ZSI6MTY3NjYsImNvdW50Q29sbGVjdCI6MSwiY291bnRMaWtlIjoxOSwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0NzozMC40NjNaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMTowMDoxOS4zOTVaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IjUw5YWD5Lmw5pat5Lq65aa777yI5YWoMTTpm4bvvIkiLCJrZXl3b3JsZCI6WyI1MOWFg+S5sOaWreS6uuWmuyIsIuezu+e7n+WkjeS7hyIsIuS6uuWmu+S5sOaWrSIsIjUw5YWD5Lmw5pat5Lq65aa75a6M5pW054mIIiwi5Zyo57q/55yLIiwi5p6X5aSpIiwi546L5by6Iiwi5aiH5aa7Il0sImRlc2NyaXB0aW9uIjoi5p6X5aSp5o6P5b+D5o6P6IK655yf6K+a55u45b6F5LiJ5bm055qE5rex5oOF5aWz5Y+L77yM56uf54S25Zyo6IOM5Zyw6YeM5YG35oOF5pe26L+Y6IKG5peg5b+M5oOu5Zyw6K6p5LuW5Y675Lmw6YG/5a2V5aWX44CC5LiH5b+15L+x54Gw5LmL5LiL77yM5LuW5oSP5aSW6KeJ6YaS5LqG6ZyH5pK85LiW5L+X55qE4oCc5Lq65aa75Lmw5pat57O757uf4oCd44CC6ICM57O757uf6Kej6ZSB55qE56ys5LiA5Liq5Lmw5pat5a+56LGh44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CKNTDlhYPkubDmlq3kurrlprvjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxNOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDYzMywic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOmZhbHNlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTEwLTMwVDA2OjM2OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMTBUMDU6MDg6MDBaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA2VDA4OjI1OjI4WiIsInRoZW1lSWRzIjpbMTI2ODRdLCJ0aGVtZU5hbWVzIjpbIuepv+i2iiJdLCJ0aGVtZVNsdWdzIjpbImNodWFueXVlIl0sImNhdGVnb3J5SWRzIjpbMTExMDFdLCJ0aXRsZSI6IuaXtuWBnOaJi+ihqO+8iOWFqDjpm4bvvIkiLCJwbGF5TmFtZSI6IuaXtuWBnOaJi+ihqCIsImRlc2NyaXB0aW9uIjoi5Y+q6KaB6L276L275oyJ5Yqo6KGo5Yag77yM5pW05Liq5a6i5Y6F556s6Ze06Zm35YWl5q275a+C44CC5oCA5a2V5YWt5Liq5pyI55qE5aeR5aaI5pW05Liq5Lq66KKr5a6a5qC85Zyo5rKZ5Y+R5LiK77yM6aWx5ruh55qE6IO46YOo5a6M5YWo6KKS6Zyy77yM5Lmz5pmV5rex6YKD77yM5aW25aS06L+Y5oyC552A5rip54Ot55qE5Lmz5ru077yM5LuW6L+r5LiN5Y+K5b6F5L+v6Lqr5ZCr5L2P77yM5rWT6YOB55qE5aW25rC0556s6Ze05raM5YWl5ZaJ5ZKZ44CC5LuF5Ymp5YCS6K6h5pe25Y2B56eS44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5pe25YGc5omL6KGo44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysOembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJzaGl0aW5nIiwiZGVzYyI6IuWPquimgei9u+i9u+aMieWKqOihqOWGoO+8jOaVtOS4quWuouWOheeerOmXtOmZt+WFpeatu+WvguOAguaAgOWtleWFreS4quaciOeahOWnkeWmiOaVtOS4quS6uuiiq+WumuagvOWcqOaymeWPkeS4iu+8jOmlsea7oeeahOiDuOmDqOWujOWFqOiikumcsu+8jOS5s+aZlea3semCg++8jOWltuWktOi/mOaMguedgOa4qeeDreeahOS5s+a7tO+8jOS7lui/q+S4jeWPiuW+heS/r+i6q+WQq+S9j++8jOa1k+mDgeeahOWltuawtOeerOmXtOa2jOWFpeWWieWSmeOAguS7heWJqeWAkuiuoeaXtuWNgeenkuOAgiIsImFuY2hvciI6InhpbmdsYW4iLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvbTEvdGgvMTA0OS9wbGF5bGV0X2NvdmVyXzVhZjE2OTc2MWUzMTc5YjUuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS8xby8xNi8xMDQ5L3BsYXlsZXRfY292ZXJfNWFmMTY5NzYxZTMxNzliNS5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NjVdLCJ0YWdOYW1lcyI6WyLml7bpl7TmmoLlgZwiXSwidGFnU2x1Z3MiOlsiU0paVCJdLCJ0b3RhbEVwaXNvZGUiOjksInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjEzMSwiaGVhdFZhbHVlIjoxNTMzMywiY291bnRDb2xsZWN0IjoxLCJjb3VudExpa2UiOjEwLCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ3OjUwLjk3NVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjAyLjkzMloiLCJzZW9JbmZvIjp7InRpdGxlIjoi5pe25YGc5omL6KGo77yI5YWoOOmbhu+8iSIsImtleXdvcmxkIjpbIuaXtuWBnOaJi+ihqCIsIuaXtumXtOaaguWBnCIsIuWnkeWmiOivseaDkSIsIuaXtuWBnOaJi+ihqOWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuWtleacn+WnkeWmiCIsIuWmiOWmiCJdLCJkZXNjcmlwdGlvbiI6IuWPquimgei9u+i9u+aMieWKqOihqOWGoO+8jOaVtOS4quWuouWOheeerOmXtOmZt+WFpeatu+WvguOAguaAgOWtleWFreS4quaciOeahOWnkeWmiOaVtOS4quS6uuiiq+WumuagvOWcqOaymeWPkeS4iu+8jOmlsea7oeeahOiDuOmDqOWujOWFqOiikumcsu+8jOS5s+aZlea3semCg++8jOWltuWktOi/mOaMguedgOa4qeeDreeahOS5s+a7tO+8jOS7lui/q+S4jeWPiuW+heS/r+i6q+WQq+S9j++8jOa1k+mDgeeahOWltuawtOeerOmXtOa2jOWFpeWWieWSmeOAguS7heWJqeWAkuiuoeaXtuWNgeenkuOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuaXtuWBnOaJi+ihqOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDnpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ2MzYsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3IjpmYWxzZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMC0yOVQwNjo1NTozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTA5LTExVDAzOjM1OjA1WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wM1QwNzoyMjo1NloiLCJ0aGVtZUlkcyI6WzEyNjg2XSwidGhlbWVOYW1lcyI6WyLkubHkvKYiXSwidGhlbWVTbHVncyI6WyJsdWFubHVuIl0sImNhdGVnb3J5SWRzIjpbMTExMDQsMTExMDFdLCJ0aXRsZSI6IuaIkeeahOWys+avjeiLj+aym+ecn++8iOWFqDM16ZuG77yJIiwicGxheU5hbWUiOiLmiJHnmoTlsrPmr43oi4/mspvnnJ8iLCJkZXNjcmlwdGlvbiI6Iuael+mBk+aYr+S4qua1kei6q+aVo+WPkeedgOaIkOeGn+eUt+S6uumtheWKm+eahOaZrumAmumdkuW5tO+8jOWNtOWboOS4gOWcuuWRvei/kOeahOmUmeS9jeWNt+WFpeS6huS4gOauteaegeWFtuemgeW/jOeahOeIseaBqOe6oOiRm+S4reOAguW9k+aIkOeGn+S8mOmbheOAgemjjumfteeKueWtmOeahOiLj+aym+ecn+S7peWys+avjei6q+S7veWgguiAjOeah+S5i+WcsOi1sOi/m+S7lueahOeUn+a0u++8jOWOn+acrOW5s+mdmeeahOWutuW6reW6lee6v+iiq+WxguWxguaSleW8gOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuaIkeeahOWys+avjeiLj+aym+ecn+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDM16ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6IndvZGV5dTIiLCJkZXNjIjoi5p6X6YGT5piv5Liq5rWR6Lqr5pWj5Y+R552A5oiQ54af55S35Lq66a2F5Yqb55qE5pmu6YCa6Z2S5bm077yM5Y205Zug5LiA5Zy65ZG96L+Q55qE6ZSZ5L2N5Y235YWl5LqG5LiA5q615p6B5YW256aB5b+M55qE54ix5oGo57qg6JGb5Lit44CC5b2T5oiQ54af5LyY6ZuF44CB6aOO6Z+154q55a2Y55qE6IuP5rKb55yf5Lul5bKz5q+N6Lqr5Lu95aCC6ICM55qH5LmL5Zyw6LWw6L+b5LuW55qE55Sf5rS777yM5Y6f5pys5bmz6Z2Z55qE5a625bqt5bqV57q/6KKr5bGC5bGC5pKV5byA44CCIiwiYW5jaG9yIjoieWUiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2Uvcm4vYjMvMTA0OS9wbGF5bGV0X2NvdmVyXzFlNTdlYTU1YWEwMTNlNWQuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS8xcS9kay8xMDQ5L3BsYXlsZXRfY292ZXJfMWU1N2VhNTVhYTAxM2U1ZC5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NjBdLCJ0YWdOYW1lcyI6WyLkubHkvKYiXSwidGFnU2x1Z3MiOlsibHVhbmx1biJdLCJ0b3RhbEVwaXNvZGUiOjM1LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNTEsImhlYXRWYWx1ZSI6MTYzNzcsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxMSwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0Nzo1Mi40NzJaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDowNS42NVoiLCJzZW9JbmZvIjp7InRpdGxlIjoi5oiR55qE5bKz5q+N6IuP5rKb55yf77yI5YWoMzXpm4bvvIkiLCJrZXl3b3JsZCI6WyLmiJHnmoTlsrPmr43oi4/mspvnnJ8iLCLlrrbluq3kvKbnkIYiLCLlsrPmr43or7Hmg5EiLCLmiJHnmoTlsrPmr43oi4/mspvnnJ/lrozmlbTniYgiLCLlnKjnur/nnIsiLCLmnpfpgZMiLCLoi4/mspvnnJ8iXSwiZGVzY3JpcHRpb24iOiLmnpfpgZPmmK/kuKrmtZHouqvmlaPlj5HnnYDmiJDnhp/nlLfkurrprYXlipvnmoTmma7pgJrpnZLlubTvvIzljbTlm6DkuIDlnLrlkb3ov5DnmoTplJnkvY3ljbflhaXkuobkuIDmrrXmnoHlhbbnpoHlv4znmoTniLHmgajnuqDokZvkuK3jgILlvZPmiJDnhp/kvJjpm4XjgIHpo47pn7XnirnlrZjnmoToi4/mspvnnJ/ku6XlsrPmr43ouqvku73loILogIznmofkuYvlnLDotbDov5vku5bnmoTnlJ/mtLvvvIzljp/mnKzlubPpnZnnmoTlrrbluq3lupXnur/ooqvlsYLlsYLmkpXlvIDjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmiJHnmoTlsrPmr43oi4/mspvnnJ/jgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwzNembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDYyMCwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOmZhbHNlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTEwLTI5VDAyOjMyOjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMDRUMDM6MTI6NTJaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTA5VDAyOjMzOjM3WiIsInRoZW1lSWRzIjpbMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNCwxMTEwMV0sInRpdGxlIjoi5q+N5a2Q5ZCM5qyi77yI5YWoMTLpm4bvvIkiLCJwbGF5TmFtZSI6IuavjeWtkOWQjOasoiIsImRlc2NyaXB0aW9uIjoi5q+N5Lqy6Lqr5Li66L+c6L+R6Ze75ZCN55qE57ud6Imy6Iie6LmI6ICB5biI77yM5LiN5LuF6Lqr5q615aaW5aiG5aSa5ae/77yM5pu05pWj5Y+R552A5oiQ54af5aWz5oCn6Ie05ZG955qE6Iqs6Iqz44CC5bCR5bm06ZW/5pyf5pqX5Lit56ql5o6i552A5q+N5Lqy6YKj5pu85aaZ55qE6Iie5ae/77yM5bCG5YaF5b+D5rex5aSE6ZqQ56eY6ICM55av54uC55qE54ix5oWV5LiO5oOF5oSr5pel5aSc5ruL5YW744CC5b2T5p+Q5Liq5rex5aSc5Lik5Lq654us5aSE5LiA5a6k44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5q+N5a2Q5ZCM5qyi44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTLpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoibXV6aXRvbiIsImRlc2MiOiLmr43kurLouqvkuLrov5zov5Hpl7vlkI3nmoTnu53oibLoiJ7ouYjogIHluIjvvIzkuI3ku4XouqvmrrXlppblqIblpJrlp7/vvIzmm7TmlaPlj5HnnYDmiJDnhp/lpbPmgKfoh7Tlkb3nmoToiqzoirPjgILlsJHlubTplb/mnJ/mmpfkuK3nqqXmjqLnnYDmr43kurLpgqPmm7zlppnnmoToiJ7lp7/vvIzlsIblhoXlv4Pmt7HlpITpmpDnp5jogIznlq/ni4LnmoTniLHmhZXkuI7mg4XmhKvml6XlpJzmu4vlhbvjgILlvZPmn5DkuKrmt7HlpJzkuKTkurrni6zlpITkuIDlrqTjgIIiLCJhbmNob3IiOiJzaGFuaHVvIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3U2LzB4LzEwNDkvcGxheWxldF9jb3Zlcl85OTVjNGY4ZjA4ZTA1NDk0LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvOXAvbWQvMTA0OS9wbGF5bGV0X2NvdmVyXzk5NWM0ZjhmMDhlMDU0OTQuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODYxLDEyODYwLDEyODU2XSwidGFnTmFtZXMiOlsi5q+N5a2QIiwi5Lmx5LymIiwi6IGM5Zy66LCD5pWZIl0sInRhZ1NsdWdzIjpbIm11emkiLCJsdWFubHVuIiwiWkNUSiJdLCJ0b3RhbEVwaXNvZGUiOjEyLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxMzYsImhlYXRWYWx1ZSI6MTc2MTIsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoyMCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0Nzo0My4yMDdaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDowMC4xNDJaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuavjeWtkOWQjOasou+8iOWFqDEy6ZuG77yJIiwia2V5d29ybGQiOlsi5q+N5a2Q5ZCM5qyiIiwi6Iie6LmI6ICB5biIIiwi56aB5b+M5oOF5oSrIiwi5q+N5a2Q5ZCM5qyi5a6M5pW054mIIiwi5Zyo57q/55yLIiwi57ud6Imy5q+N5LqyIiwi5bCR5bm0Il0sImRlc2NyaXB0aW9uIjoi5q+N5Lqy6Lqr5Li66L+c6L+R6Ze75ZCN55qE57ud6Imy6Iie6LmI6ICB5biI77yM5LiN5LuF6Lqr5q615aaW5aiG5aSa5ae/77yM5pu05pWj5Y+R552A5oiQ54af5aWz5oCn6Ie05ZG955qE6Iqs6Iqz44CC5bCR5bm06ZW/5pyf5pqX5Lit56ql5o6i552A5q+N5Lqy6YKj5pu85aaZ55qE6Iie5ae/77yM5bCG5YaF5b+D5rex5aSE6ZqQ56eY6ICM55av54uC55qE54ix5oWV5LiO5oOF5oSr5pel5aSc5ruL5YW744CC5b2T5p+Q5Liq5rex5aSc5Lik5Lq654us5aSE5LiA5a6k44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5q+N5a2Q5ZCM5qyi44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTLpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ2MDEsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3IjpmYWxzZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMC0yN1QxOToyNjozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTA5LTE2VDEyOjA5OjMxWiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMC0wOVQwMjozODowNVoiLCJ0aGVtZUlkcyI6WzEyNjg2XSwidGhlbWVOYW1lcyI6WyLkubHkvKYiXSwidGhlbWVTbHVncyI6WyJsdWFubHVuIl0sImNhdGVnb3J5SWRzIjpbMTExMDQsMTExMDFdLCJ0aXRsZSI6IuS7juWcsOeLseW9kuadpe+8mua3sea4iuiwg+aVme+8iOWFqDEw6ZuG77yJIiwicGxheU5hbWUiOiLku47lnLDni7HlvZLmnaXvvJrmt7HmuIrosIPmlZkiLCJkZXNjcmlwdGlvbiI6IuS4gOWcuuaDqOe7neS6uuWvsOeahOixqumXqOmYtOiwi+WvvOiHtOiwouWutuS4gOWknOS5i+mXtOa7oemXqOimhueBre+8jOavjeS6suabtOaYr+W9k+S8l+mBreWPl+aXoOaDhei9ruWluOWQjuWHhOWOieaDqOatu+OAguWOhue7j+S6lOW5tOaal+aXoOWkqeaXpeeahOihgOiJsumAg+S6oe+8jOS7juaXoOmXtOWcsOeLseS4reW8uuWKv+W9kuadpeeahOiwouWutueLrOWtkOikquWOu+aJgOaciemdkua2qe+8jOWMlui6q+e0ouWRveS/rue9l+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuS7juWcsOeLseW9kuadpe+8mua3sea4iuiwg+aVmeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImNvbmdkaXkiLCJkZXNjIjoi5LiA5Zy65oOo57ud5Lq65a+w55qE6LGq6Zeo6Zi06LCL5a+86Ie06LCi5a625LiA5aSc5LmL6Ze05ruh6Zeo6KaG54Gt77yM5q+N5Lqy5pu05piv5b2T5LyX6YGt5Y+X5peg5oOF6L2u5aW45ZCO5YeE5Y6J5oOo5q2744CC5Y6G57uP5LqU5bm05pqX5peg5aSp5pel55qE6KGA6Imy6YCD5Lqh77yM5LuO5peg6Ze05Zyw54ux5Lit5by65Yq/5b2S5p2l55qE6LCi5a6254us5a2Q6KSq5Y675omA5pyJ6Z2S5rap77yM5YyW6Lqr57Si5ZG95L+u572X44CCIiwiYW5jaG9yIjoieWUiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvaDEvdm4vMTA0OS9wbGF5bGV0X2NvdmVyXzk0YTNhMDI1NDFmODdkOGUuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9ybC9rdS8xMDQ5L3BsYXlsZXRfY292ZXJfOTRhM2EwMjU0MWY4N2Q4ZS5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NjEsMTI4NTYsMTI4NjZdLCJ0YWdOYW1lcyI6WyLmr43lrZAiLCLogYzlnLrosIPmlZkiLCLph43lj6MiXSwidGFnU2x1Z3MiOlsibXV6aSIsIlpDVEoiLCJ6aG9uZ2tvdSJdLCJ0b3RhbEVwaXNvZGUiOjEwLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxMzgsImhlYXRWYWx1ZSI6MTY0MjgsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0NzozMi4zMDhaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMTowMDoxOS4zMTNaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuS7juWcsOeLseW9kuadpe+8mua3sea4iuiwg+aVme+8iOWFqDEw6ZuG77yJIiwia2V5d29ybGQiOlsi5LuO5Zyw54ux5b2S5p2l5rex5riK6LCD5pWZIiwi6LGq6Zeo5aSN5LuHIiwi5p6B6ZmQ6LCD5pWZIiwi5LuO5Zyw54ux5b2S5p2l5rex5riK6LCD5pWZ5a6M5pW054mIIiwi5Zyo57q/55yLIiwi6LCi5a6254us5a2QIiwi5LuH5Lq6Il0sImRlc2NyaXB0aW9uIjoi5LiA5Zy65oOo57ud5Lq65a+w55qE6LGq6Zeo6Zi06LCL5a+86Ie06LCi5a625LiA5aSc5LmL6Ze05ruh6Zeo6KaG54Gt77yM5q+N5Lqy5pu05piv5b2T5LyX6YGt5Y+X5peg5oOF6L2u5aW45ZCO5YeE5Y6J5oOo5q2744CC5Y6G57uP5LqU5bm05pqX5peg5aSp5pel55qE6KGA6Imy6YCD5Lqh77yM5LuO5peg6Ze05Zyw54ux5Lit5by65Yq/5b2S5p2l55qE6LCi5a6254us5a2Q6KSq5Y675omA5pyJ6Z2S5rap77yM5YyW6Lqr57Si5ZG95L+u572X44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5LuO5Zyw54ux5b2S5p2l77ya5rex5riK6LCD5pWZ44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX1dLCJ0b3BpY0xpc3QiOltdfSx7ImlkIjoxMTEwMiwic2x1ZyI6IllDSlgiLCJ0aXRsZSI6IuWOn+WIm+eyvumAiSIsImRlc2MiOiIiLCJrZXl3b3JkIjpbXSwibGFiZWwiOiIiLCJzdHlsZSI6IkIiLCJjYXJkQmFja2dyb3VuZEltYWdlIjoiIiwibW9kdWxlVHlwZSI6MSwiZGF0YVR5cGUiOjEsInJlY29tbWVuZFR5cGUiOjAsImNhdGVnb3J5SWQiOjAsInJhbmsiOjUsImxpbWl0IjoxMiwic2VvSW5mbyI6eyJ0aXRsZSI6IueGn+aenOefreWJp+WOn+WIm+eyvumAieS4k+WMuiAtIOeDremXqEFJ5oiQ5Lq655+t5Ymn5LiO6buE5p6c54iG5qy+55+t5Ymn5ZCI6ZuGIiwia2V5d29ybGQiOlsi5Y6f5Yib57K+6YCJIiwi5Y6f5Yib55+t5YmnIiwi54af5p6c55+t5YmnIiwi6buE5p6c55+t5YmnIiwi6buE5p6cIiwiQUnmiJDkurrnn63liaciLCLmnIDng63nn63liaciLCLniIbmrL7nn63liaciLCLpobbnuqfnp4HljqgiLCLprLzniLbnnJ/kurrniYgiLCLmiJDkurrnn63liadBUFAiXSwiZGVzY3JpcHRpb24iOiLmjqLlr7vnhp/mnpznn63liafljp/liJvnsr7pgInkuJPljLrvvIzpoobnlaXlubPlj7Dni6zlrrbljKDlv4PmiZPpgKDnmoTohJHmtJ7lpKflvIDkuI7mnoHoh7Top4bop4nnm5vlrrTjgILlubPlj7Dmr4/ml6Xkv53mjIHmjIHnu63mm7TmlrDvvIzngavng63mlLblvZXkuobjgIrmnIDlvLrmmL7npLrlmajjgIvjgIHjgIrms6HpnaLnlarjgIvnrYnpq5jkurrmsJTljp/liJvlpKfmiI/jgILov5nph4zliafmg4Xlj43ovazkuI3mlq3jgIHorr7lrprmlrDlpYfov4fnmL7jgILnjrDlnKjlsLHooYzliqjkuIvovb3lrpjmlrnkuJPlsZ7npo/liKlBUFDvvIzluKbmgqjpmo/ml7bpmo/lnLDlsL3mg4XnlYXkuqvml6DlubLmibDnmoTpq5jmuIXmjozkuIrov73liafmlrDkvZPpqozvvIEifSwibGlzdCI6W3siaWQiOjE0OTc3LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOnRydWUsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDEyOjI1OjE0LjMyN1oiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDRUMDk6MDc6NDNaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA1VDA4OjU0OjIyWiIsInRoZW1lSWRzIjpbMTI2ODFdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiJdLCJjYXRlZ29yeUlkcyI6WzExMTAyXSwidGl0bGUiOiLluornrKvvvIjlhag26ZuG77yJIiwicGxheU5hbWUiOiLluornrKsiLCJkZXNjcmlwdGlvbiI6IuW6iuesq+S5i+S4iuWlueS4u+WKqOikquWwveiho+ihq++8jOi6q+S9k+WcqOeDm+WFieS4i+mipOaKlu+8jOS7jeS7peWkjeadguebruWFieeci+edgOWvueaWueOAguS4gOasoeasoea3seWFpeiuqeWlueW9u+W6lei9r+S4i+adpe+8jOa1quWPq+WOi+aKkeS4jeS9j+OAguW6iuesq+eahOemgeW/jOWcqOWknOmHjOW9u+W6leeIhuWPke+8jOWGjeS5n+aXoOazleWbnuWktOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuW6iuesq+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDbpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiY2h1YW5neiIsImRlc2MiOiLluornrKvkuYvkuIrlpbnkuLvliqjopKrlsL3ooaPooavvvIzouqvkvZPlnKjng5vlhYnkuIvpoqTmipbvvIzku43ku6XlpI3mnYLnm67lhYnnnIvnnYDlr7nmlrnjgILkuIDmrKHmrKHmt7HlhaXorqnlpbnlvbvlupXova/kuIvmnaXvvIzmtarlj6vljovmipHkuI3kvY/jgILluornrKvnmoTnpoHlv4zlnKjlpJzph4zlvbvlupXniIblj5HvvIzlho3kuZ/ml6Dms5Xlm57lpLTjgIIiLCJhbmNob3IiOiLpu4TmnpzlrpjmlrkiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvZ3Qva3cvMTA0OS9wbGF5bGV0X2NvdmVyX2MzY2M0NWUyMDdkM2NhODMuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS8yMC84MC8xMDQ5L3BsYXlsZXRfY292ZXJfYzNjYzQ1ZTIwN2QzY2E4My5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTIsMTI4NTddLCJ0YWdOYW1lcyI6WyLpu4TmnpwiLCLlj6Tku6MiXSwidGFnU2x1Z3MiOlsiaHVhbmdndW8iLCJndWRhaSJdLCJ0b3RhbEVwaXNvZGUiOjYsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjIyLCJoZWF0VmFsdWUiOjM5MDksImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNywiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozMy42WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDZUMjI6MDA6MTEuNTA2WiIsInNlb0luZm8iOnsidGl0bGUiOiIiLCJrZXl3b3JsZCI6WyLlsIblhpvkuI7ljaflupUiLCLlj6Too4Xnn63liaciLCLpu4Tmnpzljp/liJsiLCLluornrKvkuYvpl7TnmoTlvbvlupXmsonmsqYiLCLpg73luILluornrKvmg4XoibIiLCLluornrKsiLCLmt7HlhaXlpLHmjqciLCLlrozmlbTniYgiLCLlnKjnur/nnIsiLCLluornrKvlpJznmoTnsr7lh4bmt7HlhaUiLCLluornrKvkuIrnmoTlpLHmjqfpoqTmipYiXSwiZGVzY3JpcHRpb24iOiLluornrKvkuYvkuIrlpbnkuLvliqjopKrlsL3ooaPooavvvIzouqvkvZPlnKjng5vlhYnkuIvpoqTmipbvvIzku43ku6XlpI3mnYLnm67lhYnnnIvnnYDlr7nmlrnjgILkuIDmrKHmrKHmt7HlhaXorqnlpbnlvbvlupXova/kuIvmnaXvvIzmtarlj6vljovmipHkuI3kvY/jgILluornrKvnmoTnpoHlv4zlnKjlpJzph4zlvbvlupXniIblj5HvvIzlho3kuZ/ml6Dms5Xlm57lpLTjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrluornrKvjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw26ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0OTc4LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOnRydWUsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDEyOjIzOjU3LjU1NFoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDRUMDg6NDE6MjdaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA1VDA4OjU0OjIyWiIsInRoZW1lSWRzIjpbMTI2ODFdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiJdLCJjYXRlZ29yeUlkcyI6WzExMTAyXSwidGl0bGUiOiLlpojlpojmiJHniLHkvaDvvIjlhagxMOmbhu+8iSIsInBsYXlOYW1lIjoi5aaI5aaI5oiR54ix5L2gIiwiZGVzY3JpcHRpb24iOiLlpojlpojotbfliJ3lronpnZnpobrku47vvIzlg4/msonpu5jnmoTnvpTnvorjgILlnKjlr4bpl63miL/pl7Tph4zvvIzkvKroo4XooqvkuIDngrnngrnmj63lvIDjgILllpjmga/liLvmhI/ljovkvY7vvIzouqvkvZPljbTlnKjmiJHnmoToioLlpY/kuIvovbvovbvpoqTmipbjgILmr4/kuIDmrKHmt7HlhaXpg73orqnlpbnku47pmpDlv43otbDlkJHlpLHmjqfvvIzmnIDnu4jlvbvlupXmsonmsqbvvIzlronpnZnkuI3lho3vvIzlj6rliankuIvljovmipHkuI3kvY/nmoTlkbvlkJ/vvIznpoHlv4znmoTmr43lrZDlhbPns7vlvbvlupXltKnlnY/jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlpojlpojmiJHniLHkvaDjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJtbXdhbiIsImRlc2MiOiLlpojlpojotbfliJ3lronpnZnpobrku47vvIzlg4/msonpu5jnmoTnvpTnvorjgILlnKjlr4bpl63miL/pl7Tph4zvvIzkvKroo4XooqvkuIDngrnngrnmj63lvIDjgILllpjmga/liLvmhI/ljovkvY7vvIzouqvkvZPljbTlnKjmiJHnmoToioLlpY/kuIvovbvovbvpoqTmipbjgILmr4/kuIDmrKHmt7HlhaXpg73orqnlpbnku47pmpDlv43otbDlkJHlpLHmjqfvvIzmnIDnu4jlvbvlupXmsonmsqbvvIzlronpnZnkuI3lho3vvIzlj6rliankuIvljovmipHkuI3kvY/nmoTlkbvlkJ/vvIznpoHlv4znmoTmr43lrZDlhbPns7vlvbvlupXltKnlnY/jgIIiLCJhbmNob3IiOiLpu4TmnpzlrpjmlrkyIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL200LzFtLzEwNDkvcGxheWxldF9jb3Zlcl8xOTVhYzllZWUzOTQyNTM5LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvODAvc3QvMTA0OS9wbGF5bGV0X2NvdmVyXzE5NWFjOWVlZTM5NDI1MzkuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUyLDEyODYxXSwidGFnTmFtZXMiOlsi6buE5p6cIiwi5q+N5a2QIl0sInRhZ1NsdWdzIjpbImh1YW5nZ3VvIiwibXV6aSJdLCJ0b3RhbEVwaXNvZGUiOjEwLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoyNCwiaGVhdFZhbHVlIjo1MzA0LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTksImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDZUMDU6MDc6MzQuMDRaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMDowMDoxMS40OThaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuavjeWtkOWFs+ezuyIsIum7hOaenOWOn+WImyIsIuWmiOWmiOaIkeeIseS9oCIsIuavjeWtkOemgeW/jOaDheiJsiIsIuWmiOWmiCIsIua3seWknOayieaypiIsIuWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuWmiOWmiOa3seWknOeahOayieaypiIsIuaIkeeIseS9oOWmiOWmiCJdLCJkZXNjcmlwdGlvbiI6IuWmiOWmiOi1t+WIneWuiemdmemhuuS7ju+8jOWDj+ayiem7mOeahOe+lOe+iuOAguWcqOWvhumXreaIv+mXtOmHjO+8jOS8quijheiiq+S4gOeCueeCueaPreW8gOOAguWWmOaBr+WIu+aEj+WOi+S9ju+8jOi6q+S9k+WNtOWcqOaIkeeahOiKguWlj+S4i+i9u+i9u+mipOaKluOAguavj+S4gOasoea3seWFpemDveiuqeWlueS7jumakOW/jei1sOWQkeWkseaOp++8jOacgOe7iOW9u+W6leayieaypu+8jOWuiemdmeS4jeWGje+8jOWPquWJqeS4i+WOi+aKkeS4jeS9j+eahOWRu+WQn++8jOemgeW/jOeahOavjeWtkOWFs+ezu+W9u+W6leW0qeWdj+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWmiOWmiOaIkeeIseS9oOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0OTc5LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOnRydWUsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6dHJ1ZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDZUMTI6MjE6MTguNzM3WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wNFQwODozOTozNFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDVUMDg6NTQ6MjJaIiwidGhlbWVJZHMiOlsxMjY4MV0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIl0sImNhdGVnb3J5SWRzIjpbMTExMDJdLCJ0aXRsZSI6IuaIkeeahOWQiOenn+Wls+WupOWPi+S7rO+8iOWFqDLpm4bvvIkiLCJwbGF5TmFtZSI6IuaIkeeahOWQiOenn+Wls+WupOWPi+S7rCIsImRlc2NyaXB0aW9uIjoi5oiR5ZKM5Yeg5L2N5aWz5a6k5Y+L5ZCI56ef5ZCO77yM5rex5aSc55qE5ZaY5oGv6LaK5p2l6LaK5piO5pi+44CC5p+Q5aSc5aW55Lus5Li75Yqo6Leo5Z2Q5LiK5p2l77yM6Iqx56m057Sn57Sn5ZKs5L2P77yM5LiA6L655ZOt5LiA6L655omt6IWw44CC5LiA55u05YGa5Yiw5aSp5Lqu77yM5rer5rC06aG6552A5Lqk5ZCI5aSE5rWB5LqG5LiA5Zyw44CC5ZCI56ef55qE6YO95biC56aB5b+M5b275bqV5rKJ5rKm77yM5YaN5Lmf5Zue5LiN5Yiw6L+H5Y6744CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5oiR55qE5ZCI56ef5aWz5a6k5Y+L5Lus44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMumbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJoem5zeSIsImRlc2MiOiLmiJHlkozlh6DkvY3lpbPlrqTlj4vlkIjnp5/lkI7vvIzmt7HlpJznmoTllpjmga/otormnaXotormmI7mmL7jgILmn5DlpJzlpbnku6zkuLvliqjot6jlnZDkuIrmnaXvvIzoirHnqbTntKfntKflkqzkvY/vvIzkuIDovrnlk63kuIDovrnmia3ohbDjgILkuIDnm7TlgZrliLDlpKnkuq7vvIzmt6vmsLTpobrnnYDkuqTlkIjlpITmtYHkuobkuIDlnLDjgILlkIjnp5/nmoTpg73luILnpoHlv4zlvbvlupXmsonmsqbvvIzlho3kuZ/lm57kuI3liLDov4fljrvjgIIiLCJhbmNob3IiOiLpu4TmnpzlrpjmlrkiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvZmcva2IvMTA0OS9wbGF5bGV0X2NvdmVyX2VhNzk4MDljMWI2ZjMzODIuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9mbi90OC8xMDQ5L3BsYXlsZXRfY292ZXJfZWE3OTgwOWMxYjZmMzM4Mi5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTIsMTI4NTVdLCJ0YWdOYW1lcyI6WyLpu4TmnpwiLCLpg73luIIiXSwidGFnU2x1Z3MiOlsiaHVhbmdndW8iLCJkdXNoaSJdLCJ0b3RhbEVwaXNvZGUiOjIsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE0LCJoZWF0VmFsdWUiOjYwMzIsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxMiwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozNC43NTJaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoyMi43NVoiLCJzZW9JbmZvIjp7InRpdGxlIjoiIiwia2V5d29ybGQiOlsi5ZCI56ef55Sf5rS7Iiwi6buE5p6c5Y6f5YibIiwi5oiR55qE5ZCI56ef5aWz5a6k5Y+L5LusIiwi6YO95biC5ZCI56ef5oOF6ImyIiwi5aWz5a6k5Y+LIiwi5ZCI56ef56aB5b+MIiwi5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5ZCI56ef5aWz5a6k5Y+L55qE5rex5aSc5aSx5o6nIiwi5aWz5a6k5Y+L5Lus55qE5ZCI56ef5rKm6Zm3Il0sImRlc2NyaXB0aW9uIjoi5oiR5ZKM5Yeg5L2N5aWz5a6k5Y+L5ZCI56ef5ZCO77yM5rex5aSc55qE5ZaY5oGv6LaK5p2l6LaK5piO5pi+44CC5p+Q5aSc5aW55Lus5Li75Yqo6Leo5Z2Q5LiK5p2l77yM6Iqx56m057Sn57Sn5ZKs5L2P77yM5LiA6L655ZOt5LiA6L655omt6IWw44CC5LiA55u05YGa5Yiw5aSp5Lqu77yM5rer5rC06aG6552A5Lqk5ZCI5aSE5rWB5LqG5LiA5Zyw44CC5ZCI56ef55qE6YO95biC56aB5b+M5b275bqV5rKJ5rKm77yM5YaN5Lmf5Zue5LiN5Yiw6L+H5Y6744CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5oiR55qE5ZCI56ef5aWz5a6k5Y+L5Lus44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMumbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDk4MSwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjp0cnVlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOnRydWUsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDEyOjE4OjIzLjU2NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDRUMDg6MjQ6NTBaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA1VDA4OjU0OjIyWiIsInRoZW1lSWRzIjpbMTI2ODFdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiJdLCJjYXRlZ29yeUlkcyI6WzExMTAyXSwidGl0bGUiOiLmnaXoh6rkvoTlpbPmsonph43nmoTniLHvvIjlhag36ZuG77yJIiwicGxheU5hbWUiOiLmnaXoh6rkvoTlpbPmsonph43nmoTniLEiLCJkZXNjcmlwdGlvbiI6IuWfjuW4guWFrOWvk+eahOWknOaZmu+8jOaIkOW5tOS+hOWls+WQkeWPlOWPlOWAvuivieeWsuaDq+OAguS4gOasoeivleaOouiuqeWOn+acrOeGn+aCieeahOS6suaDheWPmOW+l+W+ruWmme+8jOS4pOS6uumDveiiq+i/q+mdouWvuei/meauteWFs+ezu+eahOi+ueeVjOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuadpeiHquS+hOWls+ayiemHjeeahOeIseOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDfpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiem5jemRhIiwiZGVzYyI6IuWfjuW4guWFrOWvk+eahOWknOaZmu+8jOaIkOW5tOS+hOWls+WQkeWPlOWPlOWAvuivieeWsuaDq+OAguS4gOasoeivleaOouiuqeWOn+acrOeGn+aCieeahOS6suaDheWPmOW+l+W+ruWmme+8jOS4pOS6uumDveiiq+i/q+mdouWvuei/meauteWFs+ezu+eahOi+ueeVjOOAgiIsImFuY2hvciI6Ium7hOaenOWumOaWuSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9qei9uNi8xMDQ5L3BsYXlsZXRfY292ZXJfZTRlYzA5Y2JmMzQ4ZjdjNS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3Y2LzBnLzEwNDkvcGxheWxldF9jb3Zlcl9lNGVjMDljYmYzNDhmN2M1LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MiwxMjg2MF0sInRhZ05hbWVzIjpbIum7hOaenCIsIuS5seS8piJdLCJ0YWdTbHVncyI6WyJodWFuZ2d1byIsImx1YW5sdW4iXSwidG90YWxFcGlzb2RlIjo3LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxMywiaGVhdFZhbHVlIjo1MjQwLCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTgsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDZUMDU6MDc6MzUuNzY4WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MjIuNjE2WiIsInNlb0luZm8iOnsidGl0bGUiOiIiLCJrZXl3b3JsZCI6WyLmnaXoh6rkvoTlpbPmsonph43nmoTniLEiLCLlrrbluq3lhbPns7siLCLpu4Tmnpzljp/liJsiXSwiZGVzY3JpcHRpb24iOiLln47luILlhazlr5PnmoTlpJzmmZrvvIzmiJDlubTkvoTlpbPlkJHlj5Tlj5TlgL7or4nnlrLmg6vjgILkuIDmrKHor5XmjqLorqnljp/mnKznhp/mgonnmoTkurLmg4Xlj5jlvpflvq7lppnvvIzkuKTkurrpg73ooqvov6vpnaLlr7nov5nmrrXlhbPns7vnmoTovrnnlYzjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmnaXoh6rkvoTlpbPmsonph43nmoTniLHjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw36ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0OTgyLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOnRydWUsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDEyOjE3OjQ1LjI4NFoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDRUMDg6MTg6MjRaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA1VDA4OjU0OjIyWiIsInRoZW1lSWRzIjpbMTI2ODFdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiJdLCJjYXRlZ29yeUlkcyI6WzExMTAyXSwidGl0bGUiOiLmsonpu5jnmoTnvpTnvorvvIjlhag46ZuG77yJIiwicGxheU5hbWUiOiLmsonpu5jnmoTnvpTnvooiLCJkZXNjcmlwdGlvbiI6IuWSjOiAgeWFrOS6ieWQteWQjuS4jumXuuicnOWOu+mFkuWQp+S5sOmGie+8jOmGkuadpeWNtOWPkeeOsOiHquW3sei1pOijuOi6uuWcqOmZjOeUn+eUt+S6uuW6iuS4iuOAguacrOaDs+mBl+W/mOe7p+e7reeUn+a0u++8jOmZjOeUn+eUteivneS7pemFkuW6l+W8gOaIv+WogeiDgeOAguS7juaLjeaRhOengeWvhueFp+W8gOWni++8jOWGjeWIsOWPmOaAgeWutuS4rea7oei2s+S7lueahOimgeaxguOAguW9k+WcuuaKiuaWh+iDuOWGheijpOiEsee7meS7luWQju+8jOS7lua4kOa4kOaPkOWHuuabtOi/h+WIhueahOimgeaxgu+8jOemgeW/jOW9u+W6leWkseaOp+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuayiem7mOeahOe+lOe+iuOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDjpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiY21kZ3kiLCJkZXNjIjoi5ZKM6ICB5YWs5LqJ5ZC15ZCO5LiO6Ze66Jyc5Y676YWS5ZCn5Lmw6YaJ77yM6YaS5p2l5Y205Y+R546w6Ieq5bex6LWk6KO46Lq65Zyo6ZmM55Sf55S35Lq65bqK5LiK44CC5pys5oOz6YGX5b+Y57un57ut55Sf5rS777yM6ZmM55Sf55S16K+d5Lul6YWS5bqX5byA5oi/5aiB6IOB44CC5LuO5ouN5pGE56eB5a+G54Wn5byA5aeL77yM5YaN5Yiw5Y+Y5oCB5a625Lit5ruh6Laz5LuW55qE6KaB5rGC44CC5b2T5Zy65oqK5paH6IO45YaF6KOk6ISx57uZ5LuW5ZCO77yM5LuW5riQ5riQ5o+Q5Ye65pu06L+H5YiG55qE6KaB5rGC77yM56aB5b+M5b275bqV5aSx5o6n44CCIiwiYW5jaG9yIjoi6buE5p6c5a6Y5pa5IiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3IxLzYwLzEwNDkvcGxheWxldF9jb3Zlcl81ODFkNDE1N2JjZWQ3MmMxLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2Uvd3kvb2UvMTA0OS9wbGF5bGV0X2NvdmVyXzU4MWQ0MTU3YmNlZDcyYzEuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUyXSwidGFnTmFtZXMiOlsi6buE5p6cIl0sInRhZ1NsdWdzIjpbImh1YW5nZ3VvIl0sInRvdGFsRXBpc29kZSI6OCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTEsImhlYXRWYWx1ZSI6Mjk0MSwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjExLCJjcmVhdGVkQXQiOiIyMDI2LTExLTA2VDA1OjA3OjM2LjI0OVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjIyLjQ5WiIsInNlb0luZm8iOnsidGl0bGUiOiIiLCJrZXl3b3JsZCI6WyLmsonpu5jnmoTnvpTnvooiLCLpu4Tmnpzljp/liJsiLCLlr4bpl63nqbrpl7QiLCLphZLlkKfphpLmnaXlkI7nmoTphZLlupflqIHog4EiLCLpg73luILpu5FtYWls5oOF6ImyIiwi5p2o5bCP5aeQIiwi6ZmM55Sf55S16K+dIiwi5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5p2o5bCP5aeQ55qE6YWS5ZCn5aSx5o6n5aScIiwi6YWS5bqX5byA5oi/5aiB6IOB5Y2H57qnIl0sImRlc2NyaXB0aW9uIjoi5ZKM6ICB5YWs5LqJ5ZC15ZCO5LiO6Ze66Jyc5Y676YWS5ZCn5Lmw6YaJ77yM6YaS5p2l5Y205Y+R546w6Ieq5bex6LWk6KO46Lq65Zyo6ZmM55Sf55S35Lq65bqK5LiK44CC5pys5oOz6YGX5b+Y57un57ut55Sf5rS777yM6ZmM55Sf55S16K+d5Lul6YWS5bqX5byA5oi/5aiB6IOB44CC5LuO5ouN5pGE56eB5a+G54Wn5byA5aeL77yM5YaN5Yiw5Y+Y5oCB5a625Lit5ruh6Laz5LuW55qE6KaB5rGC44CC5b2T5Zy65oqK5paH6IO45YaF6KOk6ISx57uZ5LuW5ZCO77yM5LuW5riQ5riQ5o+Q5Ye65pu06L+H5YiG55qE6KaB5rGC77yM56aB5b+M5b275bqV5aSx5o6n44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5rKJ6buY55qE576U576K44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysOOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDk4Mywic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjp0cnVlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wNlQxMjoxNTo0MC43ODdaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTExLTA0VDA4OjE1OjI3WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wNVQwODo1NDoyMloiLCJ0aGVtZUlkcyI6WzEyNjgxXSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMl0sInRpdGxlIjoi6YeN55Sf5ZCO5pON5YS/5aqz5pW06aG/5YWo5a6277yI5YWoM+mbhu+8iSIsInBsYXlOYW1lIjoi6YeN55Sf5ZCO5pON5YS/5aqz5pW06aG/5YWo5a62IiwiZGVzY3JpcHRpb24iOiLnmb7kur/lrrbkuLvlj5HnjrDkuInkuKrlhL/lrZDpg73kuI7oh6rlt7HmsqHmnInooYDnvJjlhbPns7vvvIzliY3kuJblsLHmraTnu4jnu5PjgILph43nlJ/lkI7vvIzku5bop4nphpLns7vnu5/vvIzph43mlrDlrqHop4bouqvovrnkurrnmoTnrpforqHvvIznnYDmiYvmuIXnkIblrrbml4/lhoXnmoTml6fotKbjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrph43nlJ/lkI7mk43lhL/lqrPmlbTpob/lhajlrrbjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwz6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6InpzaGRxaiIsImRlc2MiOiLnmb7kur/lrrbkuLvlj5HnjrDkuInkuKrlhL/lrZDpg73kuI7oh6rlt7HmsqHmnInooYDnvJjlhbPns7vvvIzliY3kuJblsLHmraTnu4jnu5PjgILph43nlJ/lkI7vvIzku5bop4nphpLns7vnu5/vvIzph43mlrDlrqHop4bouqvovrnkurrnmoTnrpforqHvvIznnYDmiYvmuIXnkIblrrbml4/lhoXnmoTml6fotKbjgIIiLCJhbmNob3IiOiLpu4TmnpzlrpjmlrkiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2Uvc2wvMDUvMTA0OS9wbGF5bGV0X2NvdmVyXzA2NDRmN2ZjMmU0NzllNTYuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9kZS9kdi8xMDQ5L3BsYXlsZXRfY292ZXJfMDY0NGY3ZmMyZTQ3OWU1Ni5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTIsMTI4NzIsMTI4NzNdLCJ0YWdOYW1lcyI6WyLpu4TmnpwiLCLph43nlJ8iLCLns7vnu58iXSwidGFnU2x1Z3MiOlsiaHVhbmdndW8iLCJDUyIsInhpdG9uZyJdLCJ0b3RhbEVwaXNvZGUiOjMsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE2LCJoZWF0VmFsdWUiOjM1NDUsImNvdW50Q29sbGVjdCI6MSwiY291bnRMaWtlIjoxOSwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozNi45MjZaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoyMi40MThaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIumHjeeUn+WQjuaTjeWEv+Wqs+aVtOmhv+WFqOWutiIsIumHjeeUn+ezu+e7nyIsIuWutuaXj+a4heeulyJdLCJkZXNjcmlwdGlvbiI6IueZvuS6v+WutuS4u+WPkeeOsOS4ieS4quWEv+WtkOmDveS4juiHquW3seayoeacieihgOe8mOWFs+ezu++8jOWJjeS4luWwseatpOe7iOe7k+OAgumHjeeUn+WQju+8jOS7luiniemGkuezu+e7n++8jOmHjeaWsOWuoeinhui6q+i+ueS6uueahOeul+iuoe+8jOedgOaJi+a4heeQhuWutuaXj+WGheeahOaXp+i0puOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiumHjeeUn+WQjuaTjeWEv+Wqs+aVtOmhv+WFqOWutuOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDPpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ5ODQsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6dHJ1ZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjp0cnVlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wNlQxMjoxNDo0OC44ODlaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTExLTA0VDA4OjAxOjQyWiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wNVQwODo1NDoyMloiLCJ0aGVtZUlkcyI6WzEyNjgxXSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMl0sInRpdGxlIjoi5ZCI5qyi5a6X5LmL5rer5q+N6K6w77yI5YWoOOmbhu+8iSIsInBsYXlOYW1lIjoi5ZCI5qyi5a6X5LmL5rer5q+N6K6wIiwiZGVzY3JpcHRpb24iOiLmnpflh6HmraPmgJ3ntKLlpoLkvZXlupTlr7nlrpfpl6jnurfkuonvvIzmhI/lpJblvpfliLDkuIDmoLnngavngbXlj4LvvIzlkLjmlLblrozngbXlipvlkI7nm7TlpZTnvo7lpbPlrZDmiL/pl7TjgILkuKTkurrpmLTpmLPkuqTlkIjvvIznvo7lpbPlsIbogonmo5LlkKvov5vlmLTph4zoiJTlvITvvIzpmo/lkI7mkoXotbflsYHogqHorqnku5bku47lkI7lpLTnjJvlubLjgILmv4Dmg4Xov4flkI7nqb/lpb3ooaPmnI3vvIzmnpflh6Hov5jkuI3lv5josIPmiI/lpbnkuIDnlarvvIzlrpfpl6jnurfkuonmmoLooqvmipvlnKjohJHlkI7jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlkIjmrKLlrpfkuYvmt6vmr43orrDjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw46ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImhoenltaiIsImRlc2MiOiLmnpflh6HmraPmgJ3ntKLlpoLkvZXlupTlr7nlrpfpl6jnurfkuonvvIzmhI/lpJblvpfliLDkuIDmoLnngavngbXlj4LvvIzlkLjmlLblrozngbXlipvlkI7nm7TlpZTnvo7lpbPlrZDmiL/pl7TjgILkuKTkurrpmLTpmLPkuqTlkIjvvIznvo7lpbPlsIbogonmo5LlkKvov5vlmLTph4zoiJTlvITvvIzpmo/lkI7mkoXotbflsYHogqHorqnku5bku47lkI7lpLTnjJvlubLjgILmv4Dmg4Xov4flkI7nqb/lpb3ooaPmnI3vvIzmnpflh6Hov5jkuI3lv5josIPmiI/lpbnkuIDnlarvvIzlrpfpl6jnurfkuonmmoLooqvmipvlnKjohJHlkI7jgIIiLCJhbmNob3IiOiLpu4TmnpzlrpjmlrkiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvdHMvMmYvMTA0OS9wbGF5bGV0X2NvdmVyX2ZiMzkxZjA3OGI3MDU3ZDEuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9taS91dC8xMDQ5L3BsYXlsZXRfY292ZXJfZmIzOTFmMDc4YjcwNTdkMS5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTIsMTI4NTRdLCJ0YWdOYW1lcyI6WyLpu4TmnpwiLCLku5nkvqAiXSwidGFnU2x1Z3MiOlsiaHVhbmdndW8iLCJ4aWFueGlhIl0sInRvdGFsRXBpc29kZSI6OCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTQsImhlYXRWYWx1ZSI6NDQ0NywiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE5LCJjcmVhdGVkQXQiOiIyMDI2LTExLTA2VDA1OjA3OjM3LjQzMVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjIyLjM0M1oiLCJzZW9JbmZvIjp7InRpdGxlIjoiIiwia2V5d29ybGQiOlsi5ZCI5qyi5a6X5LmL5rer5q+N6K6wIiwi6buE5p6c5Y6f5YibIiwi5L+u5LuZIiwi5p6X5Yeh54Gr54G15Y+C5ZCO55qE6Zi06Ziz5Lqk5ZCIIiwi5LuZ5L6g5a6X6Zeo5oOF6ImyIiwi54Gr54G15Y+CIiwi576O5aWz5a2Q5Y+M5L+uIiwi5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5a6X6Zeo57q35LqJ5ZCO55qE5Y+M5L+u5aScIiwi576O5aWz5a2Q5oi/6Ze055qE6Zi06Ziz5Lqk5ZCIIl0sImRlc2NyaXB0aW9uIjoi5p6X5Yeh5q2j5oCd57Si5aaC5L2V5bqU5a+55a6X6Zeo57q35LqJ77yM5oSP5aSW5b6X5Yiw5LiA5qC554Gr54G15Y+C77yM5ZC45pS25a6M54G15Yqb5ZCO55u05aWU576O5aWz5a2Q5oi/6Ze044CC5Lik5Lq66Zi06Ziz5Lqk5ZCI77yM576O5aWz5bCG6IKJ5qOS5ZCr6L+b5Zi06YeM6IiU5byE77yM6ZqP5ZCO5pKF6LW35bGB6IKh6K6p5LuW5LuO5ZCO5aS054yb5bmy44CC5r+A5oOF6L+H5ZCO56m/5aW96KGj5pyN77yM5p6X5Yeh6L+Y5LiN5b+Y6LCD5oiP5aW55LiA55Wq77yM5a6X6Zeo57q35LqJ5pqC6KKr5oqb5Zyo6ISR5ZCO44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5ZCI5qyi5a6X5LmL5rer5q+N6K6w44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysOOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDk4OCwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjp0cnVlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wNlQxMjowNToyMy43MzVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA5OjQ1OjAwWiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wNFQwMjowMjozNloiLCJ0aGVtZUlkcyI6WzEyNjgzLDEyNjgxXSwidGhlbWVOYW1lcyI6WyLlj6Too4UiLCLljp/liJvnn63liaciXSwidGhlbWVTbHVncyI6WyJndXpodWFuZyIsInlhdW5jaHVhbmdkaiJdLCJjYXRlZ29yeUlkcyI6WzExMTA1LDExMTAyXSwidGl0bGUiOiLlhaXotZjooqvnu7/kuInlubTvvIznnJ/lpKrlrZDlvZLkvY3lhYjmlqnojaHlpoflkI7or5vkuZ3ml48iLCJwbGF5TmFtZSI6IuWFpei1mOiiq+e7v+S4ieW5tO+8jOecn+WkquWtkOW9kuS9jeWFiOaWqeiNoeWmh+WQjuivm+S5neaXjyIsImRlc2NyaXB0aW9uIjoi5rWB6JC95rCR6Ze055qE5aSq5a2Q6ZqQ5aeT5Z+L5ZCN77yM5YWl6LWY5a6Y5a6m5LmL5a6277yM5Y+X5bC95Ya36YGH5Y205aeL57uI5a6I552A5Y2K5Z2X6b6Z57q5546J5L2p44CC546J5L2p6KKr5Lq65Y+Y5Y2W5ZCO77yM5LuW55qE55yf5a6e6Lqr5Lu95oSP5aSW5pud5YWJ44CC6ZKm5beu6K6k5Ye65LuW5pe277yM5LuW57uI5LqO6IO95riF566X5LiJ5bm05p2l55qE5pen6LSm77yM5Lmf5b6X5Lul5Zue5oql5pu+5Zyo5LuW6JC96a2E5pe25ZaE5b6F5LuW55qE5Lq644CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5YWl6LWY6KKr57u/5LiJ5bm077yM55yf5aSq5a2Q5b2S5L2N5YWI5pap6I2h5aaH5ZCO6K+b5Lmd5peP44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJ6enR6Z3ciLCJkZXNjIjoi5rWB6JC95rCR6Ze055qE5aSq5a2Q6ZqQ5aeT5Z+L5ZCN77yM5YWl6LWY5a6Y5a6m5LmL5a6277yM5Y+X5bC95Ya36YGH5Y205aeL57uI5a6I552A5Y2K5Z2X6b6Z57q5546J5L2p44CC546J5L2p6KKr5Lq65Y+Y5Y2W5ZCO77yM5LuW55qE55yf5a6e6Lqr5Lu95oSP5aSW5pud5YWJ44CC6ZKm5beu6K6k5Ye65LuW5pe277yM5LuW57uI5LqO6IO95riF566X5LiJ5bm05p2l55qE5pen6LSm77yM5Lmf5b6X5Lul5Zue5oql5pu+5Zyo5LuW6JC96a2E5pe25ZaE5b6F5LuW55qE5Lq644CCIiwiYW5jaG9yIjoi5Y6f5YibIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3VmL2Z0LzEwNDkvcGxheWxldF9jb3Zlcl9mMjhlNzdmZmE2ZTQzZDI4LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2Uvc28va2wvMTA0OS9wbGF5bGV0X2NvdmVyX2I2YzRhMmI4NTY3YWFkMmUuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODU3LDEyODc1XSwidGFnTmFtZXMiOlsi5Y+k5LujIiwi5aSN5LuHIl0sInRhZ1NsdWdzIjpbImd1ZGFpIiwiRkMiXSwidG90YWxFcGlzb2RlIjoxLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjozLCJoZWF0VmFsdWUiOjIyNTIsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNiwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozOS4xNjVaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoyMi4yMTRaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuecn+WkquWtkOW9kuS9jSIsIum+mee6ueeOieS9qSIsIuWPpOijheWkjeS7hyIsIueGn+aenGFpIiwiQUnmiJDkurrnn63liaciXSwiZGVzY3JpcHRpb24iOiLmtYHokL3msJHpl7TnmoTlpKrlrZDpmpDlp5Pln4vlkI3vvIzlhaXotZjlrpjlrqbkuYvlrrbvvIzlj5flsL3lhrfpgYfljbTlp4vnu4jlrojnnYDljYrlnZfpvpnnurnnjonkvanjgILnjonkvanooqvkurrlj5jljZblkI7vvIzku5bnmoTnnJ/lrp7ouqvku73mhI/lpJbmm53lhYnjgILpkqblt67orqTlh7rku5bml7bvvIzku5bnu4jkuo7og73muIXnrpfkuInlubTmnaXnmoTml6fotKbvvIzkuZ/lvpfku6Xlm57miqXmm77lnKjku5bokL3prYTml7blloTlvoXku5bnmoTkurrjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlhaXotZjooqvnu7/kuInlubTvvIznnJ/lpKrlrZDlvZLkvY3lhYjmlqnojaHlpoflkI7or5vkuZ3ml4/jgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwx6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NTIzLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDEyOjE0OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTJUMjE6NTA6MDVaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAxVDA4OjAzOjE2WiIsInRoZW1lSWRzIjpbMTI2ODEsMTI2ODVdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyIsIumDveW4giJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiIsImR1c2hpIl0sImNhdGVnb3J5SWRzIjpbMTExMDIsMTExMDVdLCJ0aXRsZSI6Iumhtue6p+engeWOqO+8iOWFqDEw6ZuG77yJIiwicGxheU5hbWUiOiLpobbnuqfnp4HljqgiLCJkZXNjcmlwdGlvbiI6IuegtOS6p+WwkeeIt+Wwj+mhvuWcqOS4gOWknOS5i+mXtOWutumBk+S4reiQve+8jOa1geiQveiHs+avlOW8l+WIqeWxseW6hOW9k+i1t+S6huS4iumXqOengeWOqOOAguiwgeaWmeS7lueDueWItueahOmhtue6p+aWmeeQhuern+acieedgOaXoOS4juS8puavlOeahOmtlOWKm++8jOiuqeS4gOS9jeS9jemrmOi0teS8mOmbheeahOixqumXqOi0teWmh+WQg+WujOWQjuS4i+mdouaYpea9ruazm+a7peOAgeW9k+Wcuue+nuiAu+axguasouOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiumhtue6p+engeWOqOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImRpbmdqaXMiLCJkZXNjIjoi56C05Lqn5bCR54i35bCP6aG+5Zyo5LiA5aSc5LmL6Ze05a626YGT5Lit6JC977yM5rWB6JC96Iez5q+U5byX5Yip5bGx5bqE5b2T6LW35LqG5LiK6Zeo56eB5Y6o44CC6LCB5paZ5LuW54O55Yi255qE6aG257qn5paZ55CG56uf5pyJ552A5peg5LiO5Lym5q+U55qE6a2U5Yqb77yM6K6p5LiA5L2N5L2N6auY6LS15LyY6ZuF55qE6LGq6Zeo6LS15aaH5ZCD5a6M5ZCO5LiL6Z2i5pil5r2u5rOb5rul44CB5b2T5Zy6576e6IC75rGC5qyi44CCIiwiYW5jaG9yIjoiIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL21xL2NnLzEwNDkvcGxheWxldF9jb3Zlcl83NTJiOTU5N2FmZWJkOWE4LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvbTMvOTMvMTA0OS9wbGF5bGV0X2NvdmVyX2U2NGQ3OTJlNjI4MjlhNjUuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUxLDEyODUyXSwidGFnTmFtZXMiOlsi5Y6f5YibIiwi6buE5p6cIl0sInRhZ1NsdWdzIjpbIllDIiwiaHVhbmdndW8iXSwidG90YWxFcGlzb2RlIjoxMCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTk5LCJoZWF0VmFsdWUiOjIzMjgwLCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTQsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDY6MjIuMzAxWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MTMuNjQxWiIsInNlb0luZm8iOnsidGl0bGUiOiLpobbnuqfnp4HljqjvvIjlhagxMOmbhu+8iSIsImtleXdvcmxkIjpbIumhtue6p+engeWOqCIsIuixqumXqOengeWOqCIsIui0teWmh+axguasoiIsIumhtue6p+engeWOqOWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuWwj+mhviIsIuWlpeaWr+WNoeW9seWQjiJdLCJkZXNjcmlwdGlvbiI6IuegtOS6p+WwkeeIt+Wwj+mhvuWcqOS4gOWknOS5i+mXtOWutumBk+S4reiQve+8jOa1geiQveiHs+avlOW8l+WIqeWxseW6hOW9k+i1t+S6huS4iumXqOengeWOqOOAguiwgeaWmeS7lueDueWItueahOmhtue6p+aWmeeQhuern+acieedgOaXoOS4juS8puavlOeahOmtlOWKm++8jOiuqeS4gOS9jeS9jemrmOi0teS8mOmbheeahOixqumXqOi0teWmh+WQg+WujOWQjuS4i+mdouaYpea9ruazm+a7peOAgeW9k+Wcuue+nuiAu+axguasouOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiumhtue6p+engeWOqOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NTI5LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDEwOjU2OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTJUMjE6NTA6MDVaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAxVDA4OjAzOjE2WiIsInRoZW1lSWRzIjpbMTI2ODEsMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyIsIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiIsImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMiwxMTEwNCwxMTEwNV0sInRpdGxlIjoi6ay854i255yf5Lq654mI77yI5YWoMTDpm4bvvIkiLCJwbGF5TmFtZSI6IumsvOeItuecn+S6uueJiCIsImRlc2NyaXB0aW9uIjoi55m95aSp5LuW5piv5rip5p+U5L2T6LS044CB54Wn6aG+5a625bqt55qE5qih6IyD57un54i277yM5LiA5Yiw5aSc5bmV6ZmN5Li05L6/5b275bqV5pKV5byA5Lyq6KOF77yM5YWI5piv5Lul57ud5a+555qE5by66ICF5ae/5oCB5by66KGM5Y2g5pyJ5LqG5YKy5aiH5Y+b6YCG55qE5aeQ5aeQ54ix6I6J77yM6ZqP5ZCO5Y+I5bCG5riF57qv5Y+v5Lq655qE5aa55aa557qx5aWI5LiA5q2l5q2l6LCD5pWZ5b6X5b275bqV5rKJ5rKm44CC5LuO5pyA5Yid55qE5YG356ql5YG36Ze75Yiw5YaF5b+D55qE5oqX5ouS5bSp5rqD44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6ay854i255yf5Lq654mI44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiZ3VpZnV6aCIsImRlc2MiOiLnmb3lpKnku5bmmK/muKnmn5TkvZPotLTjgIHnhafpob7lrrbluq3nmoTmqKHojIPnu6fniLbvvIzkuIDliLDlpJzluZXpmY3kuLTkvr/lvbvlupXmkpXlvIDkvKroo4XvvIzlhYjmmK/ku6Xnu53lr7nnmoTlvLrogIXlp7/mgIHlvLrooYzljaDmnInkuoblgrLlqIflj5vpgIbnmoTlp5Dlp5DniLHojonvvIzpmo/lkI7lj4jlsIbmuIXnuq/lj6/kurrnmoTlprnlprnnurHlpYjkuIDmraXmraXosIPmlZnlvpflvbvlupXmsonmsqbjgILku47mnIDliJ3nmoTlgbfnqqXlgbfpl7vliLDlhoXlv4PnmoTmipfmi5LltKnmuoPjgIIiLCJhbmNob3IiOiIiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvdHMvM28vMTA0OS9wbGF5bGV0X2NvdmVyX2FlNWZhNmM3ZDcwNzg4NjAuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS82Mi90NC8xMDQ5L3BsYXlsZXRfY292ZXJfZmJmN2UzY2VlYTU2ZWYzNC5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTEsMTI4NTIsMTI4NTldLCJ0YWdOYW1lcyI6WyLljp/liJsiLCLpu4TmnpwiLCLoibPpgYciXSwidGFnU2x1Z3MiOlsiWUMiLCJodWFuZ2d1byIsInlhbnl1Il0sInRvdGFsRXBpc29kZSI6MTAsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE4MCwiaGVhdFZhbHVlIjoyMTIzNCwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE2LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ2OjI5LjE0NVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjEzLjUyWiIsInNlb0luZm8iOnsidGl0bGUiOiLprLzniLbnnJ/kurrniYjvvIjlhagxMOmbhu+8iSIsImtleXdvcmxkIjpbIumsvOeItuecn+S6uueJiCIsIueVuOW9ouWutuW6rSIsIuWnkOWmueS6ieWuoCIsIumsvOeItuecn+S6uueJiOWujOaVtOeJiCIsIuWcqOe6v+eciyIsIue7p+eItiIsIueIseiOiSIsIue6seWliCJdLCJkZXNjcmlwdGlvbiI6IueZveWkqeS7luaYr+a4qeaflOS9k+i0tOOAgeeFp+mhvuWutuW6reeahOaooeiMg+e7p+eItu+8jOS4gOWIsOWknOW5lemZjeS4tOS+v+W9u+W6leaSleW8gOS8quijhe+8jOWFiOaYr+S7pee7neWvueeahOW8uuiAheWnv+aAgeW8uuihjOWNoOacieS6huWCsuWoh+WPm+mAhueahOWnkOWnkOeIseiOie+8jOmaj+WQjuWPiOWwhua4hee6r+WPr+S6uueahOWmueWmuee6seWliOS4gOatpeatpeiwg+aVmeW+l+W9u+W6leayieaypuOAguS7juacgOWIneeahOWBt+eqpeWBt+mXu+WIsOWGheW/g+eahOaKl+aLkuW0qea6g+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiumsvOeItuecn+S6uueJiOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NTkyLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDA1OjM4OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTJUMjE6NTA6MDdaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAxVDA4OjAwOjU0WiIsInRoZW1lSWRzIjpbMTI2ODEsMTI2ODhdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyIsIua8q+WJpyJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiIsIm1hbmp1Il0sImNhdGVnb3J5SWRzIjpbMTExMDIsMTExMDVdLCJ0aXRsZSI6IuacgOW8uuaYvuekuuWZqO+8iOWFqDEw6ZuG77yJIiwicGxheU5hbWUiOiLmnIDlvLrmmL7npLrlmagiLCJkZXNjcmlwdGlvbiI6IuS4uueVheeOqeiLsembhOiBlOebn++8jOS7luWcqOW6n+WTgeermea3mOWbnuS4gOWPsOazm+edgOivoeW8guiNp+WFieeahOS6jOaJi+aYvuekuuWxj+OAguS4gOe7j+mAmueUteS4jeS7heeUu+i0qOmAvOecn++8jOabtOaLpeacieS6huWwhueOsOWunuiCiei6q+KAnOaVsOS9jeWunuS9k+WMluKAneeahOmAhuWkqeelnuWKm+OAguW8gOacuueerOmXtOS7luebtOaOpeepv+i2iui/m+WFpeeIhuasvue9kea4uOS4lueVjOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuacgOW8uuaYvuekuuWZqOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6Inp1aXFpYW4iLCJkZXNjIjoi5Li655WF546p6Iux6ZuE6IGU55uf77yM5LuW5Zyo5bqf5ZOB56uZ5reY5Zue5LiA5Y+w5rOb552A6K+h5byC6I2n5YWJ55qE5LqM5omL5pi+56S65bGP44CC5LiA57uP6YCa55S15LiN5LuF55S76LSo6YC855yf77yM5pu05oul5pyJ5LqG5bCG546w5a6e6IKJ6Lqr4oCc5pWw5L2N5a6e5L2T5YyW4oCd55qE6YCG5aSp56We5Yqb44CC5byA5py6556s6Ze05LuW55u05o6l56m/6LaK6L+b5YWl54iG5qy+572R5ri45LiW55WM44CCIiwiYW5jaG9yIjoiIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzVjL2xmLzEwNDkvcGxheWxldF9jb3Zlcl8xZjE2NGJkNGI5NTMwYWNhLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvMmUvdWMvMTA0OS9wbGF5bGV0X2NvdmVyXzkwYzk2ZjcxNWQ1NWJiOTcuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUxLDEyODUyLDEyODU3XSwidGFnTmFtZXMiOlsi5Y6f5YibIiwi6buE5p6cIiwi5Y+k5LujIl0sInRhZ1NsdWdzIjpbIllDIiwiaHVhbmdndW8iLCJndWRhaSJdLCJ0b3RhbEVwaXNvZGUiOjEwLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxODgsImhlYXRWYWx1ZSI6MjM0MzcsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0NzoyNi4wMDNaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoxNC4zMTRaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuacgOW8uuaYvuekuuWZqO+8iOWFqDEw6ZuG77yJIiwia2V5d29ybGQiOlsi5pyA5by65pi+56S65ZmoIiwi5ri45oiP56m/6LaKIiwi6Jma5ouf5ZCO5a6rIiwi5pyA5by65pi+56S65Zmo5a6M5pW054mIIiwi5Zyo57q/55yLIiwi55yL5p2/5aiYIiwi5aWz5oiY56WeIl0sImRlc2NyaXB0aW9uIjoi5Li655WF546p6Iux6ZuE6IGU55uf77yM5LuW5Zyo5bqf5ZOB56uZ5reY5Zue5LiA5Y+w5rOb552A6K+h5byC6I2n5YWJ55qE5LqM5omL5pi+56S65bGP44CC5LiA57uP6YCa55S15LiN5LuF55S76LSo6YC855yf77yM5pu05oul5pyJ5LqG5bCG546w5a6e6IKJ6Lqr4oCc5pWw5L2N5a6e5L2T5YyW4oCd55qE6YCG5aSp56We5Yqb44CC5byA5py6556s6Ze05LuW55u05o6l56m/6LaK6L+b5YWl54iG5qy+572R5ri45LiW55WM44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5pyA5by65pi+56S65Zmo44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ1MTQsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOnRydWUsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDNUMDM6Mjg6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0wOS0xMlQyMTo1MDowNFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMDFUMDg6MDM6MTZaIiwidGhlbWVJZHMiOlsxMjY4MSwxMjY4Ml0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIiwi5LuZ5L6gIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIiwieGlhbnhpYSJdLCJjYXRlZ29yeUlkcyI6WzExMTAyXSwidGl0bGUiOiLpgLzoia/kuLrlppbvvIjlhagxMOmbhu+8iSIsInBsYXlOYW1lIjoi6YC86Imv5Li65aaWIiwiZGVzY3JpcHRpb24iOiLkuIDmnJ3ovaznlJ/vvIzku5blubbmnKrokL3lhaXlh6HlsJjkurrpl7TvvIzogIzmmK/lnaDlhaXkuobkuIDkuKrlpKflppbnurXmqKrjgIHlh7blhb3pgY3lnLDnmoTor6HlvILlvILnlYzjgILlnKjov5nniYfkuZ3mrbvkuIDnlJ/nmoTnu53lnLDkuK3vvIzkvJflppbnq5/pmLTlt67pmLPplJnlsIbku5bor6/orqTkuLrkuobkvKDor7TkuK3og73mi6/mlZHkuIflppbnmoToh7Ppq5jigJzmlZHkuJbkuLvigJ3jgILkuLrkuobljZrlj5bku5bnmoTluofmiqTkuI7mganms73jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrpgLzoia/kuLrlppbjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJiaWxpYW5nIiwiZGVzYyI6IuS4gOacnei9rOeUn++8jOS7luW5tuacquiQveWFpeWHoeWwmOS6uumXtO+8jOiAjOaYr+WdoOWFpeS6huS4gOS4quWkp+Wmlue6teaoquOAgeWHtuWFvemBjeWcsOeahOivoeW8guW8gueVjOOAguWcqOi/meeJh+S5neatu+S4gOeUn+eahOe7neWcsOS4re+8jOS8l+Wmluern+mYtOW3rumYs+mUmeWwhuS7luivr+iupOS4uuS6huS8oOivtOS4reiDveaLr+aVkeS4h+WmlueahOiHs+mrmOKAnOaVkeS4luS4u+KAneOAguS4uuS6huWNmuWPluS7lueahOW6h+aKpOS4juaBqeazveOAgiIsImFuY2hvciI6IiIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9xdS9oOS8xMDQ5L3BsYXlsZXRfY292ZXJfZThjMWY1MjViNDY3M2MyZi5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2hkL2YwLzEwNDkvcGxheWxldF9jb3Zlcl82NTRiOTAwYjA2MjY1ODM4LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MSwxMjg1MiwxMjg3MF0sInRhZ05hbWVzIjpbIuWOn+WImyIsIum7hOaenCIsIuW8guS4lueVjCJdLCJ0YWdTbHVncyI6WyJZQyIsImh1YW5nZ3VvIiwiWVNKIl0sInRvdGFsRXBpc29kZSI6MTAsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE1OSwiaGVhdFZhbHVlIjoxNzI0MSwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE1LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ2OjEwLjY1NVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA2VDIyOjAwOjEzLjIzM1oiLCJzZW9JbmZvIjp7InRpdGxlIjoi6YC86Imv5Li65aaW77yI5YWoMTDpm4bvvIkiLCJrZXl3b3JsZCI6WyLpgLzoia/kuLrlppYiLCLlvILnlYzlppblhb0iLCLmlZHkuJbkuLvor7Hmg5EiLCLpgLzoia/kuLrlppblrozmlbTniYgiLCLlnKjnur/nnIsiLCLkuZ3lsL7ni5Dku5kiLCLmlZHkuJbkuLsiXSwiZGVzY3JpcHRpb24iOiLkuIDmnJ3ovaznlJ/vvIzku5blubbmnKrokL3lhaXlh6HlsJjkurrpl7TvvIzogIzmmK/lnaDlhaXkuobkuIDkuKrlpKflppbnurXmqKrjgIHlh7blhb3pgY3lnLDnmoTor6HlvILlvILnlYzjgILlnKjov5nniYfkuZ3mrbvkuIDnlJ/nmoTnu53lnLDkuK3vvIzkvJflppbnq5/pmLTlt67pmLPplJnlsIbku5bor6/orqTkuLrkuobkvKDor7TkuK3og73mi6/mlZHkuIflppbnmoToh7Ppq5jigJzmlZHkuJbkuLvigJ3jgILkuLrkuobljZrlj5bku5bnmoTluofmiqTkuI7mganms73jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrpgLzoia/kuLrlppbjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fV0sInRvcGljTGlzdCI6W119LHsiaWQiOjExMTAzLCJzbHVnIjoiWlhHWCIsInRpdGxlIjoi5pyA5paw5pu05pawIiwiZGVzYyI6IiIsImtleXdvcmQiOltdLCJsYWJlbCI6IiIsInN0eWxlIjoiQiIsImNhcmRCYWNrZ3JvdW5kSW1hZ2UiOiIiLCJtb2R1bGVUeXBlIjoxLCJkYXRhVHlwZSI6MSwicmVjb21tZW5kVHlwZSI6MCwiY2F0ZWdvcnlJZCI6MCwicmFuayI6NCwibGltaXQiOjEyLCJzZW9JbmZvIjp7InRpdGxlIjoi54af5p6c55+t5Ymn5pyA5paw5pu05paw5LiT5Yy6IC0g54Ot6ZeoQUnmiJDkurrnn63liafkuI7pu4TmnpzmlrDliafpgJ/pgJLlkIjpm4YiLCJrZXl3b3JsZCI6WyLmnIDmlrDmm7TmlrAiLCLmlrDkuIrmnrbnn63liaciLCLmiqLlhYjnnIsiLCLnhp/mnpznn63liaciLCLpu4Tmnpznn63liaciLCLpu4TmnpwiLCJBSeaIkOS6uuefreWJpyIsIuacgOaWsOabtOaWsCIsIuaWsOWJp+mAn+mAkiIsIui9rOaAp+WQjuaIkeeluOS5seS/ruS7meeVjCIsIuWFqOePreWcsOmTgeaxgueUnyIsIuaIkOS6uuefreWJp0FQUCJdLCJkZXNjcmlwdGlvbiI6IuiBmueEpueGn+aenOefreWJp+acgOaWsOabtOaWsOS4k+WMuu+8jOesrOS4gOaXtumXtOaOjOaPoeacgOWJjeayv+eahEFJ5oiQ5Lq655+t5Ymn5LiO57K+5b2p5paw5Ymn6YCf6YCS44CC5bmz5Y+w5q+P5pel5L+d5oyB5oyB57ut5pu05paw77yM54Gr54Ot5pS25b2V5LqG44CK6L2s5oCn5ZCO5oiR56W45Lmx5L+u5LuZ55WM44CL44CB44CK5YWo54+t5Zyw6ZOB5rGC55SfIOWPquacieaIkeS4gOS4queUt+eUn+OAi+etiemrmOS6uuawlOacgOaWsOWkp+aIj+OAgui/memHjOWJp+aDheWPjei9rOS4jeaWreOAgeaDiuWWnOWxguWHuuS4jeept+OAguW/q+adpeS4i+i9veWumOaWueS4k+Wxnuemj+WIqUFQUO+8jOW4puaCqOmaj+aXtumaj+WcsOeVheS6q+aXoOW5suaJsOeahOmrmOa4heaOjOS4iui/veWJp+aWsOS9k+mqjO+8gSJ9LCJsaXN0IjpbeyJpZCI6MTQ5NzYsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6dHJ1ZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDZUMTI6Mjg6NDcuMzQ2WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wNVQwMjoyNTowMFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDVUMDQ6MjM6NDJaIiwidGhlbWVJZHMiOlsxMjY4NF0sInRoZW1lTmFtZXMiOlsi56m/6LaKIl0sInRoZW1lU2x1Z3MiOlsiY2h1YW55dWUiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNV0sInRpdGxlIjoi5pyr5LiW77ya55S35aWz5q+U5L6L5aSx6KGh77yM576O5aWz5Lus6YO95Zyo5oqi5oiRIiwicGxheU5hbWUiOiLmnKvkuJbvvJrnlLflpbPmr5TkvovlpLHooaHvvIznvo7lpbPku6zpg73lnKjmiqLmiJEiLCJkZXNjcmlwdGlvbiI6Iuacq+S4lumZjeS4tOWQjueUt+Wls+avlOS+i+S4pemHjeWkseihoe+8jOe+juWls+S7rOmDveWcqOaKouaIkeOAguWlueS7rOS7jumakOW/jei1sOWQkeS4u+WKqO+8jOiho+ihq+iiq+ikquWwveWQjui6q+S9k+WcqOaIkeaJi+S4i+i9u+i9u+mipOaKluOAguS4gOasoeasoeiiq+Whq+a7oeWIsOacgOa3seWkhO+8jOa1quWPq+WOi+aKkeS4jeS9j+OAguWFseaEn+iuqeassuacm+WQjOatpeeIhuWPke+8jOacq+S4lueahOemgeW/jOWcqOWknOmHjOW9u+W6leayieaypu+8jOWGjeS5n+WbnuS4jeWIsOS7juWJjeOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuacq+S4lu+8mueUt+Wls+avlOS+i+Wkseihoe+8jOe+juWls+S7rOmDveWcqOaKouaIkeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6Im1zbm5iIiwiZGVzYyI6Iuacq+S4lumZjeS4tOWQjueUt+Wls+avlOS+i+S4pemHjeWkseihoe+8jOe+juWls+S7rOmDveWcqOaKouaIkeOAguWlueS7rOS7jumakOW/jei1sOWQkeS4u+WKqO+8jOiho+ihq+iiq+ikquWwveWQjui6q+S9k+WcqOaIkeaJi+S4i+i9u+i9u+mipOaKluOAguS4gOasoeasoeiiq+Whq+a7oeWIsOacgOa3seWkhO+8jOa1quWPq+WOi+aKkeS4jeS9j+OAguWFseaEn+iuqeassuacm+WQjOatpeeIhuWPke+8jOacq+S4lueahOemgeW/jOWcqOWknOmHjOW9u+W6leayieaypu+8jOWGjeS5n+WbnuS4jeWIsOS7juWJjeOAgiIsImFuY2hvciI6IuWOn+WImyIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS94cS94dy8xMDQ5L3BsYXlsZXRfY292ZXJfNTc5NTNmMDc3OGQ2NjZlZC5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzZpL25sLzEwNDkvcGxheWxldF9jb3Zlcl85ZTRmOTQyMTFmMDAxNWVmLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg2OF0sInRhZ05hbWVzIjpbIuacq+aXpeW6n+WcnyJdLCJ0YWdTbHVncyI6WyJtb3JpZmVpdHUiXSwidG90YWxFcGlzb2RlIjoxMCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6OCwiaGVhdFZhbHVlIjo0MzAyLCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTksImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDZUMDU6MDc6MzMuMDI2WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDZUMjI6MDA6MTEuODYzWiIsInNlb0luZm8iOnsidGl0bGUiOiIiLCJrZXl3b3JsZCI6WyLmnKvkuJYiLCLnlLflpbPmr5TkvovlpLHooaEiLCLmnKvml6Xnn63liaciLCLmnKvkuJbnlLflpbPmr5TkvovlpLHooaEiLCLmnKvkuJblkI7lrqvmg4XoibIiLCLnvo7lpbPku6zpg73lnKjmiqLmiJEiLCLlrozmlbTniYgiLCLlnKjnur/nnIsiLCLnvo7lpbPmiqLmiJHnmoTmnKvkuJblpJwiLCLmnKvkuJbph4zooqvnvo7lpbPku6zljIXlm7QiXSwiZGVzY3JpcHRpb24iOiLmnKvkuJbpmY3kuLTlkI7nlLflpbPmr5TkvovkuKXph43lpLHooaHvvIznvo7lpbPku6zpg73lnKjmiqLmiJHjgILlpbnku6zku47pmpDlv43otbDlkJHkuLvliqjvvIzooaPooavooqvopKrlsL3lkI7ouqvkvZPlnKjmiJHmiYvkuIvovbvovbvpoqTmipbjgILkuIDmrKHmrKHooqvloavmu6HliLDmnIDmt7HlpITvvIzmtarlj6vljovmipHkuI3kvY/jgILlhbHmhJ/orqnmrLLmnJvlkIzmraXniIblj5HvvIzmnKvkuJbnmoTnpoHlv4zlnKjlpJzph4zlvbvlupXmsonmsqbvvIzlho3kuZ/lm57kuI3liLDku47liY3jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmnKvkuJbvvJrnlLflpbPmr5TkvovlpLHooaHvvIznvo7lpbPku6zpg73lnKjmiqLmiJHjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDk4Nywic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDZUMTI6MjY6MjkuNzQ5WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwOTo0NTo0MVoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDRUMDM6MzY6MzJaIiwidGhlbWVJZHMiOlsxMjY4OF0sInRoZW1lTmFtZXMiOlsi5ryr5YmnIl0sInRoZW1lU2x1Z3MiOlsibWFuanUiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNV0sInRpdGxlIjoi5YWU5a2Q5ZKM5ZOl5ZOl5YWx5oSf5LqGIiwicGxheU5hbWUiOiLlhZTlrZDlkozlk6Xlk6XlhbHmhJ/kuoYiLCJkZXNjcmlwdGlvbiI6IuWFlOWtkOWSjOWTpeWTpeWFseaEn+WQjuassuacm+WQjOatpeeIhuWPkeOAguWlueS4i+i6q+a8j+awtO+8jOWTpeWTpeaJi+aMh+WPiOa3seWPiOWHhuWcsOWIuua/gOOAguS4gOasoeasoeiiq+Whq+a7oeWIsOacgOa3seWkhO+8jOi6q+S9k+W9u+W6lei9r+S4i+adpeOAgua1quWPq+WOi+aKkeS4jeS9j++8jOS4pOS4quS6uueahOW/q+aEn+S6pOe7h+WcqOS4gOi1t++8jOemgeW/jOWQjOWxheWcqOmDveW4guWknOmHjOW9u+W6leW0qeWdj++8jOWGjeS5n+WbnuS4jeWIsOS7juWJjeOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWFlOWtkOWSjOWTpeWTpeWFseaEn+S6huOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDPpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoidHpoZ2ciLCJkZXNjIjoi5YWU5a2Q5ZKM5ZOl5ZOl5YWx5oSf5ZCO5qyy5pyb5ZCM5q2l54iG5Y+R44CC5aW55LiL6Lqr5ryP5rC077yM5ZOl5ZOl5omL5oyH5Y+I5rex5Y+I5YeG5Zyw5Yi65r+A44CC5LiA5qyh5qyh6KKr5aGr5ruh5Yiw5pyA5rex5aSE77yM6Lqr5L2T5b275bqV6L2v5LiL5p2l44CC5rWq5Y+r5Y6L5oqR5LiN5L2P77yM5Lik5Liq5Lq655qE5b+r5oSf5Lqk57uH5Zyo5LiA6LW377yM56aB5b+M5ZCM5bGF5Zyo6YO95biC5aSc6YeM5b275bqV5bSp5Z2P77yM5YaN5Lmf5Zue5LiN5Yiw5LuO5YmN44CCIiwiYW5jaG9yIjoi5pyA5YWo54mH5bqTIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2dyL3A5LzEwNDkvcGxheWxldF9jb3Zlcl83MzIwNmU1NjMzMjVjNzAzLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvbGkvNTAvMTA0OS9wbGF5bGV0X2NvdmVyXzczMjA2ZTU2MzMyNWM3MDMuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODc2XSwidGFnTmFtZXMiOlsiQUnmiJDkurrmvKvliaciXSwidGFnU2x1Z3MiOlsiQ1JNSiJdLCJ0b3RhbEVwaXNvZGUiOjMsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjksImhlYXRWYWx1ZSI6MTk5NiwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE4LCJjcmVhdGVkQXQiOiIyMDI2LTExLTA2VDA1OjA3OjM4LjY3MloiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA2VDIyOjAwOjExLjY5MloiLCJzZW9JbmZvIjp7InRpdGxlIjoiIiwia2V5d29ybGQiOlsi5YWU5a2Q5ZKM5ZOl5ZOl5YWx5oSf5LqGIiwi546p5YG25YWU5a2QIiwi5YWx5oSfIiwi5YWU5a2Q5ZKM5ZOl5ZOl5YWx5oSf5LqGIiwi6YO95biC5ZCM5bGF56aB5b+MIiwi5YWU5a2QIiwi5ZOl5ZOlIiwi5YWx5oSfIiwi5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5YWU5a2Q5ZOl5ZOl55qE5YWx5oSf5aScIiwi5YWx5oSf5ZCO55qE5YWU5a2Q5ZOl5ZOlIl0sImRlc2NyaXB0aW9uIjoi5YWU5a2Q5ZKM5ZOl5ZOl5YWx5oSf5ZCO5qyy5pyb5ZCM5q2l54iG5Y+R44CC5aW55LiL6Lqr5ryP5rC077yM5ZOl5ZOl5omL5oyH5Y+I5rex5Y+I5YeG5Zyw5Yi65r+A44CC5LiA5qyh5qyh6KKr5aGr5ruh5Yiw5pyA5rex5aSE77yM6Lqr5L2T5b275bqV6L2v5LiL5p2l44CC5rWq5Y+r5Y6L5oqR5LiN5L2P77yM5Lik5Liq5Lq655qE5b+r5oSf5Lqk57uH5Zyo5LiA6LW377yM56aB5b+M5ZCM5bGF5Zyo6YO95biC5aSc6YeM5b275bqV5bSp5Z2P77yM5YaN5Lmf5Zue5LiN5Yiw5LuO5YmN44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5YWU5a2Q5ZKM5ZOl5ZOl5YWx5oSf5LqG44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDk3Nywic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjp0cnVlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wNlQxMjoyNToxNC4zMjdaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTExLTA0VDA5OjA3OjQzWiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wNVQwODo1NDoyMloiLCJ0aGVtZUlkcyI6WzEyNjgxXSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMl0sInRpdGxlIjoi5bqK56yr77yI5YWoNumbhu+8iSIsInBsYXlOYW1lIjoi5bqK56yrIiwiZGVzY3JpcHRpb24iOiLluornrKvkuYvkuIrlpbnkuLvliqjopKrlsL3ooaPooavvvIzouqvkvZPlnKjng5vlhYnkuIvpoqTmipbvvIzku43ku6XlpI3mnYLnm67lhYnnnIvnnYDlr7nmlrnjgILkuIDmrKHmrKHmt7HlhaXorqnlpbnlvbvlupXova/kuIvmnaXvvIzmtarlj6vljovmipHkuI3kvY/jgILluornrKvnmoTnpoHlv4zlnKjlpJzph4zlvbvlupXniIblj5HvvIzlho3kuZ/ml6Dms5Xlm57lpLTjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrluornrKvjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw26ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImNodWFuZ3oiLCJkZXNjIjoi5bqK56yr5LmL5LiK5aW55Li75Yqo6KSq5bC96KGj6KGr77yM6Lqr5L2T5Zyo54Ob5YWJ5LiL6aKk5oqW77yM5LuN5Lul5aSN5p2C55uu5YWJ55yL552A5a+55pa544CC5LiA5qyh5qyh5rex5YWl6K6p5aW55b275bqV6L2v5LiL5p2l77yM5rWq5Y+r5Y6L5oqR5LiN5L2P44CC5bqK56yr55qE56aB5b+M5Zyo5aSc6YeM5b275bqV54iG5Y+R77yM5YaN5Lmf5peg5rOV5Zue5aS044CCIiwiYW5jaG9yIjoi6buE5p6c5a6Y5pa5IiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2d0L2t3LzEwNDkvcGxheWxldF9jb3Zlcl9jM2NjNDVlMjA3ZDNjYTgzLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvMjAvODAvMTA0OS9wbGF5bGV0X2NvdmVyX2MzY2M0NWUyMDdkM2NhODMuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUyLDEyODU3XSwidGFnTmFtZXMiOlsi6buE5p6cIiwi5Y+k5LujIl0sInRhZ1NsdWdzIjpbImh1YW5nZ3VvIiwiZ3VkYWkiXSwidG90YWxFcGlzb2RlIjo2LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoyMiwiaGVhdFZhbHVlIjozOTA5LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTcsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDZUMDU6MDc6MzMuNloiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA2VDIyOjAwOjExLjUwNloiLCJzZW9JbmZvIjp7InRpdGxlIjoiIiwia2V5d29ybGQiOlsi5bCG5Yab5LiO5Y2n5bqVIiwi5Y+k6KOF55+t5YmnIiwi6buE5p6c5Y6f5YibIiwi5bqK56yr5LmL6Ze055qE5b275bqV5rKJ5rKmIiwi6YO95biC5bqK56yr5oOF6ImyIiwi5bqK56yrIiwi5rex5YWl5aSx5o6nIiwi5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5bqK56yr5aSc55qE57K+5YeG5rex5YWlIiwi5bqK56yr5LiK55qE5aSx5o6n6aKk5oqWIl0sImRlc2NyaXB0aW9uIjoi5bqK56yr5LmL5LiK5aW55Li75Yqo6KSq5bC96KGj6KGr77yM6Lqr5L2T5Zyo54Ob5YWJ5LiL6aKk5oqW77yM5LuN5Lul5aSN5p2C55uu5YWJ55yL552A5a+55pa544CC5LiA5qyh5qyh5rex5YWl6K6p5aW55b275bqV6L2v5LiL5p2l77yM5rWq5Y+r5Y6L5oqR5LiN5L2P44CC5bqK56yr55qE56aB5b+M5Zyo5aSc6YeM5b275bqV54iG5Y+R77yM5YaN5Lmf5peg5rOV5Zue5aS044CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5bqK56yr44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysNumbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDk3OCwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjp0cnVlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wNlQxMjoyMzo1Ny41NTRaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTExLTA0VDA4OjQxOjI3WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wNVQwODo1NDoyMloiLCJ0aGVtZUlkcyI6WzEyNjgxXSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMl0sInRpdGxlIjoi5aaI5aaI5oiR54ix5L2g77yI5YWoMTDpm4bvvIkiLCJwbGF5TmFtZSI6IuWmiOWmiOaIkeeIseS9oCIsImRlc2NyaXB0aW9uIjoi5aaI5aaI6LW35Yid5a6J6Z2Z6aG65LuO77yM5YOP5rKJ6buY55qE576U576K44CC5Zyo5a+G6Zet5oi/6Ze06YeM77yM5Lyq6KOF6KKr5LiA54K554K55o+t5byA44CC5ZaY5oGv5Yi75oSP5Y6L5L2O77yM6Lqr5L2T5Y205Zyo5oiR55qE6IqC5aWP5LiL6L276L276aKk5oqW44CC5q+P5LiA5qyh5rex5YWl6YO96K6p5aW55LuO6ZqQ5b+N6LWw5ZCR5aSx5o6n77yM5pyA57uI5b275bqV5rKJ5rKm77yM5a6J6Z2Z5LiN5YaN77yM5Y+q5Ymp5LiL5Y6L5oqR5LiN5L2P55qE5ZG75ZCf77yM56aB5b+M55qE5q+N5a2Q5YWz57O75b275bqV5bSp5Z2P44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5aaI5aaI5oiR54ix5L2g44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoibW13YW4iLCJkZXNjIjoi5aaI5aaI6LW35Yid5a6J6Z2Z6aG65LuO77yM5YOP5rKJ6buY55qE576U576K44CC5Zyo5a+G6Zet5oi/6Ze06YeM77yM5Lyq6KOF6KKr5LiA54K554K55o+t5byA44CC5ZaY5oGv5Yi75oSP5Y6L5L2O77yM6Lqr5L2T5Y205Zyo5oiR55qE6IqC5aWP5LiL6L276L276aKk5oqW44CC5q+P5LiA5qyh5rex5YWl6YO96K6p5aW55LuO6ZqQ5b+N6LWw5ZCR5aSx5o6n77yM5pyA57uI5b275bqV5rKJ5rKm77yM5a6J6Z2Z5LiN5YaN77yM5Y+q5Ymp5LiL5Y6L5oqR5LiN5L2P55qE5ZG75ZCf77yM56aB5b+M55qE5q+N5a2Q5YWz57O75b275bqV5bSp5Z2P44CCIiwiYW5jaG9yIjoi6buE5p6c5a6Y5pa5MiIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9tNC8xbS8xMDQ5L3BsYXlsZXRfY292ZXJfMTk1YWM5ZWVlMzk0MjUzOS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzgwL3N0LzEwNDkvcGxheWxldF9jb3Zlcl8xOTVhYzllZWUzOTQyNTM5LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MiwxMjg2MV0sInRhZ05hbWVzIjpbIum7hOaenCIsIuavjeWtkCJdLCJ0YWdTbHVncyI6WyJodWFuZ2d1byIsIm11emkiXSwidG90YWxFcGlzb2RlIjoxMCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MjQsImhlYXRWYWx1ZSI6NTMwNCwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE5LCJjcmVhdGVkQXQiOiIyMDI2LTExLTA2VDA1OjA3OjM0LjA0WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDA6MDA6MTEuNDk4WiIsInNlb0luZm8iOnsidGl0bGUiOiIiLCJrZXl3b3JsZCI6WyLmr43lrZDlhbPns7siLCLpu4Tmnpzljp/liJsiLCLlpojlpojmiJHniLHkvaAiLCLmr43lrZDnpoHlv4zmg4XoibIiLCLlpojlpogiLCLmt7HlpJzmsonmsqYiLCLlrozmlbTniYgiLCLlnKjnur/nnIsiLCLlpojlpojmt7HlpJznmoTmsonmsqYiLCLmiJHniLHkvaDlpojlpogiXSwiZGVzY3JpcHRpb24iOiLlpojlpojotbfliJ3lronpnZnpobrku47vvIzlg4/msonpu5jnmoTnvpTnvorjgILlnKjlr4bpl63miL/pl7Tph4zvvIzkvKroo4XooqvkuIDngrnngrnmj63lvIDjgILllpjmga/liLvmhI/ljovkvY7vvIzouqvkvZPljbTlnKjmiJHnmoToioLlpY/kuIvovbvovbvpoqTmipbjgILmr4/kuIDmrKHmt7HlhaXpg73orqnlpbnku47pmpDlv43otbDlkJHlpLHmjqfvvIzmnIDnu4jlvbvlupXmsonmsqbvvIzlronpnZnkuI3lho3vvIzlj6rliankuIvljovmipHkuI3kvY/nmoTlkbvlkJ/vvIznpoHlv4znmoTmr43lrZDlhbPns7vlvbvlupXltKnlnY/jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlpojlpojmiJHniLHkvaDjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDk3OSwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjp0cnVlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOnRydWUsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDEyOjIxOjE4LjczN1oiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDRUMDg6Mzk6MzRaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA1VDA4OjU0OjIyWiIsInRoZW1lSWRzIjpbMTI2ODFdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiJdLCJjYXRlZ29yeUlkcyI6WzExMTAyXSwidGl0bGUiOiLmiJHnmoTlkIjnp5/lpbPlrqTlj4vku6zvvIjlhagy6ZuG77yJIiwicGxheU5hbWUiOiLmiJHnmoTlkIjnp5/lpbPlrqTlj4vku6wiLCJkZXNjcmlwdGlvbiI6IuaIkeWSjOWHoOS9jeWls+WupOWPi+WQiOenn+WQju+8jOa3seWknOeahOWWmOaBr+i2iuadpei2iuaYjuaYvuOAguafkOWknOWlueS7rOS4u+WKqOi3qOWdkOS4iuadpe+8jOiKseeptOe0p+e0p+WSrOS9j++8jOS4gOi+ueWTreS4gOi+ueaJreiFsOOAguS4gOebtOWBmuWIsOWkqeS6ru+8jOa3q+awtOmhuuedgOS6pOWQiOWkhOa1geS6huS4gOWcsOOAguWQiOenn+eahOmDveW4guemgeW/jOW9u+W6leayieaypu+8jOWGjeS5n+WbnuS4jeWIsOi/h+WOu+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuaIkeeahOWQiOenn+Wls+WupOWPi+S7rOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDLpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiaHpuc3kiLCJkZXNjIjoi5oiR5ZKM5Yeg5L2N5aWz5a6k5Y+L5ZCI56ef5ZCO77yM5rex5aSc55qE5ZaY5oGv6LaK5p2l6LaK5piO5pi+44CC5p+Q5aSc5aW55Lus5Li75Yqo6Leo5Z2Q5LiK5p2l77yM6Iqx56m057Sn57Sn5ZKs5L2P77yM5LiA6L655ZOt5LiA6L655omt6IWw44CC5LiA55u05YGa5Yiw5aSp5Lqu77yM5rer5rC06aG6552A5Lqk5ZCI5aSE5rWB5LqG5LiA5Zyw44CC5ZCI56ef55qE6YO95biC56aB5b+M5b275bqV5rKJ5rKm77yM5YaN5Lmf5Zue5LiN5Yiw6L+H5Y6744CCIiwiYW5jaG9yIjoi6buE5p6c5a6Y5pa5IiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2ZnL2tiLzEwNDkvcGxheWxldF9jb3Zlcl9lYTc5ODA5YzFiNmYzMzgyLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvZm4vdDgvMTA0OS9wbGF5bGV0X2NvdmVyX2VhNzk4MDljMWI2ZjMzODIuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUyLDEyODU1XSwidGFnTmFtZXMiOlsi6buE5p6cIiwi6YO95biCIl0sInRhZ1NsdWdzIjpbImh1YW5nZ3VvIiwiZHVzaGkiXSwidG90YWxFcGlzb2RlIjoyLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNCwiaGVhdFZhbHVlIjo2MDMyLCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTIsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDZUMDU6MDc6MzQuNzUyWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MjIuNzVaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuWQiOenn+eUn+a0uyIsIum7hOaenOWOn+WImyIsIuaIkeeahOWQiOenn+Wls+WupOWPi+S7rCIsIumDveW4guWQiOenn+aDheiJsiIsIuWls+WupOWPiyIsIuWQiOenn+emgeW/jCIsIuWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuWQiOenn+Wls+WupOWPi+eahOa3seWknOWkseaOpyIsIuWls+WupOWPi+S7rOeahOWQiOenn+aypumZtyJdLCJkZXNjcmlwdGlvbiI6IuaIkeWSjOWHoOS9jeWls+WupOWPi+WQiOenn+WQju+8jOa3seWknOeahOWWmOaBr+i2iuadpei2iuaYjuaYvuOAguafkOWknOWlueS7rOS4u+WKqOi3qOWdkOS4iuadpe+8jOiKseeptOe0p+e0p+WSrOS9j++8jOS4gOi+ueWTreS4gOi+ueaJreiFsOOAguS4gOebtOWBmuWIsOWkqeS6ru+8jOa3q+awtOmhuuedgOS6pOWQiOWkhOa1geS6huS4gOWcsOOAguWQiOenn+eahOmDveW4guemgeW/jOW9u+W6leayieaypu+8jOWGjeS5n+WbnuS4jeWIsOi/h+WOu+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuaIkeeahOWQiOenn+Wls+WupOWPi+S7rOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDLpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ5ODAsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDEyOjE5OjU0Ljk0NloiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDRUMDg6MzM6MDNaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA1VDA4OjU0OjIyWiIsInRoZW1lSWRzIjpbMTI2ODVdLCJ0aGVtZU5hbWVzIjpbIumDveW4giJdLCJ0aGVtZVNsdWdzIjpbImR1c2hpIl0sImNhdGVnb3J5SWRzIjpbMTExMDVdLCJ0aXRsZSI6IuW5v+S4nOm4reeOi++8iOWFqDLpm4bvvIkiLCJwbGF5TmFtZSI6IuW5v+S4nOm4reeOiyIsImRlc2NyaXB0aW9uIjoi5bm/5Lic6bit546L5Lul6Lqr5L2T5Li65Lia77yM5Zyo6YO95biC5rex5aSc5LiO5ZCE6Lev5aWz5Lq65Lqk57yg44CC5LuW5omL5rOV5Y+I5rex5Y+I5YeG77yM5LiA5LiL5LiL57K+5YeG5Yi65r+A5pyA5pWP5oSf5aSE44CC5a+55pa56Lqr5L2T5b275bqV6L2v5LiL5p2l77yM5rWq5Y+r5YaN5Lmf5Y6L5LiN5L2P44CC56aB5b+M55qE5Lqk5piT5Zyo5aSc6Imy5Lit5b275bqV5aSx5o6n77yM5b+r5oSf5Lqk57uH77yM5YaN5Lmf5Zue5LiN5Yiw6L+H5Y6744CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5bm/5Lic6bit546L44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMumbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJnZHl3IiwiZGVzYyI6IuW5v+S4nOm4reeOi+S7pei6q+S9k+S4uuS4mu+8jOWcqOmDveW4gua3seWknOS4juWQhOi3r+Wls+S6uuS6pOe8oOOAguS7luaJi+azleWPiOa3seWPiOWHhu+8jOS4gOS4i+S4i+eyvuWHhuWIuua/gOacgOaVj+aEn+WkhOOAguWvueaWuei6q+S9k+W9u+W6lei9r+S4i+adpe+8jOa1quWPq+WGjeS5n+WOi+S4jeS9j+OAguemgeW/jOeahOS6pOaYk+WcqOWknOiJsuS4reW9u+W6leWkseaOp++8jOW/q+aEn+S6pOe7h++8jOWGjeS5n+WbnuS4jeWIsOi/h+WOu+OAgiIsImFuY2hvciI6IuiuuOePqei/nCIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9mcy9ybS8xMDQ5L3BsYXlsZXRfY292ZXJfYjMwNWU2OWVlMTUzMDBhMC5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2NxLzIwLzEwNDkvcGxheWxldF9jb3Zlcl9iMzA1ZTY5ZWUxNTMwMGEwLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1NSwxMjg1OV0sInRhZ05hbWVzIjpbIumDveW4giIsIuiJs+mBhyJdLCJ0YWdTbHVncyI6WyJkdXNoaSIsInlhbnl1Il0sInRvdGFsRXBpc29kZSI6MiwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6OSwiaGVhdFZhbHVlIjo1MDM5LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTEsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDZUMDU6MDc6MzUuMjU0WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MjIuNjc5WiIsInNlb0luZm8iOnsidGl0bGUiOiIiLCJrZXl3b3JsZCI6WyLlkI3mtYHnlJ/mtLsiLCLpg73luILnn63liaciLCLlub/kuJzpuK3njovlpJzlpJzpo47mtYEiLCLpg73luILmg4XoibLpuK3njosiLCLlub/kuJzpuK3njosiLCLphZLlupciLCLlrozmlbTniYgiLCLlnKjnur/nnIsiLCLpg73luILpuK3njovnmoTnpoHlv4zlpJwiLCLpuK3njovphZLlupfmt7HpmbforrAiXSwiZGVzY3JpcHRpb24iOiLlub/kuJzpuK3njovku6XouqvkvZPkuLrkuJrvvIzlnKjpg73luILmt7HlpJzkuI7lkITot6/lpbPkurrkuqTnvKDjgILku5bmiYvms5Xlj4jmt7Hlj4jlh4bvvIzkuIDkuIvkuIvnsr7lh4bliLrmv4DmnIDmlY/mhJ/lpITjgILlr7nmlrnouqvkvZPlvbvlupXova/kuIvmnaXvvIzmtarlj6vlho3kuZ/ljovkuI3kvY/jgILnpoHlv4znmoTkuqTmmJPlnKjlpJzoibLkuK3lvbvlupXlpLHmjqfvvIzlv6vmhJ/kuqTnu4fvvIzlho3kuZ/lm57kuI3liLDov4fljrvjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlub/kuJzpuK3njovjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwy6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0OTgxLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOnRydWUsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6dHJ1ZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDZUMTI6MTg6MjMuNTY1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wNFQwODoyNDo1MFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDVUMDg6NTQ6MjJaIiwidGhlbWVJZHMiOlsxMjY4MV0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIl0sImNhdGVnb3J5SWRzIjpbMTExMDJdLCJ0aXRsZSI6IuadpeiHquS+hOWls+ayiemHjeeahOeIse+8iOWFqDfpm4bvvIkiLCJwbGF5TmFtZSI6IuadpeiHquS+hOWls+ayiemHjeeahOeIsSIsImRlc2NyaXB0aW9uIjoi5Z+O5biC5YWs5a+T55qE5aSc5pma77yM5oiQ5bm05L6E5aWz5ZCR5Y+U5Y+U5YC+6K+J55ay5oOr44CC5LiA5qyh6K+V5o6i6K6p5Y6f5pys54af5oKJ55qE5Lqy5oOF5Y+Y5b6X5b6u5aaZ77yM5Lik5Lq66YO96KKr6L+r6Z2i5a+56L+Z5q615YWz57O755qE6L6555WM44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5p2l6Ieq5L6E5aWz5rKJ6YeN55qE54ix44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysN+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJ6bmN6ZGEiLCJkZXNjIjoi5Z+O5biC5YWs5a+T55qE5aSc5pma77yM5oiQ5bm05L6E5aWz5ZCR5Y+U5Y+U5YC+6K+J55ay5oOr44CC5LiA5qyh6K+V5o6i6K6p5Y6f5pys54af5oKJ55qE5Lqy5oOF5Y+Y5b6X5b6u5aaZ77yM5Lik5Lq66YO96KKr6L+r6Z2i5a+56L+Z5q615YWz57O755qE6L6555WM44CCIiwiYW5jaG9yIjoi6buE5p6c5a6Y5pa5IiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2p6L242LzEwNDkvcGxheWxldF9jb3Zlcl9lNGVjMDljYmYzNDhmN2M1LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvdjYvMGcvMTA0OS9wbGF5bGV0X2NvdmVyX2U0ZWMwOWNiZjM0OGY3YzUuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUyLDEyODYwXSwidGFnTmFtZXMiOlsi6buE5p6cIiwi5Lmx5LymIl0sInRhZ1NsdWdzIjpbImh1YW5nZ3VvIiwibHVhbmx1biJdLCJ0b3RhbEVwaXNvZGUiOjcsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjEzLCJoZWF0VmFsdWUiOjUyNDAsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxOCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozNS43NjhaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoyMi42MTZaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuadpeiHquS+hOWls+ayiemHjeeahOeIsSIsIuWutuW6reWFs+ezuyIsIum7hOaenOWOn+WImyJdLCJkZXNjcmlwdGlvbiI6IuWfjuW4guWFrOWvk+eahOWknOaZmu+8jOaIkOW5tOS+hOWls+WQkeWPlOWPlOWAvuivieeWsuaDq+OAguS4gOasoeivleaOouiuqeWOn+acrOeGn+aCieeahOS6suaDheWPmOW+l+W+ruWmme+8jOS4pOS6uumDveiiq+i/q+mdouWvuei/meauteWFs+ezu+eahOi+ueeVjOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuadpeiHquS+hOWls+ayiemHjeeahOeIseOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDfpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ5ODIsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6dHJ1ZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDZUMTI6MTc6NDUuMjg0WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wNFQwODoxODoyNFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDVUMDg6NTQ6MjJaIiwidGhlbWVJZHMiOlsxMjY4MV0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIl0sImNhdGVnb3J5SWRzIjpbMTExMDJdLCJ0aXRsZSI6Iuayiem7mOeahOe+lOe+iu+8iOWFqDjpm4bvvIkiLCJwbGF5TmFtZSI6Iuayiem7mOeahOe+lOe+iiIsImRlc2NyaXB0aW9uIjoi5ZKM6ICB5YWs5LqJ5ZC15ZCO5LiO6Ze66Jyc5Y676YWS5ZCn5Lmw6YaJ77yM6YaS5p2l5Y205Y+R546w6Ieq5bex6LWk6KO46Lq65Zyo6ZmM55Sf55S35Lq65bqK5LiK44CC5pys5oOz6YGX5b+Y57un57ut55Sf5rS777yM6ZmM55Sf55S16K+d5Lul6YWS5bqX5byA5oi/5aiB6IOB44CC5LuO5ouN5pGE56eB5a+G54Wn5byA5aeL77yM5YaN5Yiw5Y+Y5oCB5a625Lit5ruh6Laz5LuW55qE6KaB5rGC44CC5b2T5Zy65oqK5paH6IO45YaF6KOk6ISx57uZ5LuW5ZCO77yM5LuW5riQ5riQ5o+Q5Ye65pu06L+H5YiG55qE6KaB5rGC77yM56aB5b+M5b275bqV5aSx5o6n44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5rKJ6buY55qE576U576K44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysOOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJjbWRneSIsImRlc2MiOiLlkozogIHlhazkuonlkLXlkI7kuI7pl7ronJzljrvphZLlkKfkubDphonvvIzphpLmnaXljbTlj5HnjrDoh6rlt7HotaToo7jourrlnKjpmYznlJ/nlLfkurrluorkuIrjgILmnKzmg7PpgZflv5jnu6fnu63nlJ/mtLvvvIzpmYznlJ/nlLXor53ku6XphZLlupflvIDmiL/lqIHog4HjgILku47mi43mkYTnp4Hlr4bnhaflvIDlp4vvvIzlho3liLDlj5jmgIHlrrbkuK3mu6HotrPku5bnmoTopoHmsYLjgILlvZPlnLrmiormlofog7jlhoXoo6TohLHnu5nku5blkI7vvIzku5bmuJDmuJDmj5Dlh7rmm7Tov4fliIbnmoTopoHmsYLvvIznpoHlv4zlvbvlupXlpLHmjqfjgIIiLCJhbmNob3IiOiLpu4TmnpzlrpjmlrkiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvcjEvNjAvMTA0OS9wbGF5bGV0X2NvdmVyXzU4MWQ0MTU3YmNlZDcyYzEuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS93eS9vZS8xMDQ5L3BsYXlsZXRfY292ZXJfNTgxZDQxNTdiY2VkNzJjMS5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTJdLCJ0YWdOYW1lcyI6WyLpu4TmnpwiXSwidGFnU2x1Z3MiOlsiaHVhbmdndW8iXSwidG90YWxFcGlzb2RlIjo4LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxMSwiaGVhdFZhbHVlIjoyOTQxLCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTEsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDZUMDU6MDc6MzYuMjQ5WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MjIuNDlaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuayiem7mOeahOe+lOe+iiIsIum7hOaenOWOn+WImyIsIuWvhumXreepuumXtCIsIumFkuWQp+mGkuadpeWQjueahOmFkuW6l+WogeiDgSIsIumDveW4gum7kW1haWzmg4XoibIiLCLmnajlsI/lp5AiLCLpmYznlJ/nlLXor50iLCLlrozmlbTniYgiLCLlnKjnur/nnIsiLCLmnajlsI/lp5DnmoTphZLlkKflpLHmjqflpJwiLCLphZLlupflvIDmiL/lqIHog4HljYfnuqciXSwiZGVzY3JpcHRpb24iOiLlkozogIHlhazkuonlkLXlkI7kuI7pl7ronJzljrvphZLlkKfkubDphonvvIzphpLmnaXljbTlj5HnjrDoh6rlt7HotaToo7jourrlnKjpmYznlJ/nlLfkurrluorkuIrjgILmnKzmg7PpgZflv5jnu6fnu63nlJ/mtLvvvIzpmYznlJ/nlLXor53ku6XphZLlupflvIDmiL/lqIHog4HjgILku47mi43mkYTnp4Hlr4bnhaflvIDlp4vvvIzlho3liLDlj5jmgIHlrrbkuK3mu6HotrPku5bnmoTopoHmsYLjgILlvZPlnLrmiormlofog7jlhoXoo6TohLHnu5nku5blkI7vvIzku5bmuJDmuJDmj5Dlh7rmm7Tov4fliIbnmoTopoHmsYLvvIznpoHlv4zlvbvlupXlpLHmjqfjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmsonpu5jnmoTnvpTnvorjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw46ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0OTgzLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOnRydWUsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDEyOjE1OjQwLjc4N1oiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDRUMDg6MTU6MjdaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA1VDA4OjU0OjIyWiIsInRoZW1lSWRzIjpbMTI2ODFdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiJdLCJjYXRlZ29yeUlkcyI6WzExMTAyXSwidGl0bGUiOiLph43nlJ/lkI7mk43lhL/lqrPmlbTpob/lhajlrrbvvIjlhagz6ZuG77yJIiwicGxheU5hbWUiOiLph43nlJ/lkI7mk43lhL/lqrPmlbTpob/lhajlrrYiLCJkZXNjcmlwdGlvbiI6IueZvuS6v+WutuS4u+WPkeeOsOS4ieS4quWEv+WtkOmDveS4juiHquW3seayoeacieihgOe8mOWFs+ezu++8jOWJjeS4luWwseatpOe7iOe7k+OAgumHjeeUn+WQju+8jOS7luiniemGkuezu+e7n++8jOmHjeaWsOWuoeinhui6q+i+ueS6uueahOeul+iuoe+8jOedgOaJi+a4heeQhuWutuaXj+WGheeahOaXp+i0puOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiumHjeeUn+WQjuaTjeWEv+Wqs+aVtOmhv+WFqOWutuOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDPpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoienNoZHFqIiwiZGVzYyI6IueZvuS6v+WutuS4u+WPkeeOsOS4ieS4quWEv+WtkOmDveS4juiHquW3seayoeacieihgOe8mOWFs+ezu++8jOWJjeS4luWwseatpOe7iOe7k+OAgumHjeeUn+WQju+8jOS7luiniemGkuezu+e7n++8jOmHjeaWsOWuoeinhui6q+i+ueS6uueahOeul+iuoe+8jOedgOaJi+a4heeQhuWutuaXj+WGheeahOaXp+i0puOAgiIsImFuY2hvciI6Ium7hOaenOWumOaWuSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9zbC8wNS8xMDQ5L3BsYXlsZXRfY292ZXJfMDY0NGY3ZmMyZTQ3OWU1Ni5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2RlL2R2LzEwNDkvcGxheWxldF9jb3Zlcl8wNjQ0ZjdmYzJlNDc5ZTU2LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MiwxMjg3MiwxMjg3M10sInRhZ05hbWVzIjpbIum7hOaenCIsIumHjeeUnyIsIuezu+e7nyJdLCJ0YWdTbHVncyI6WyJodWFuZ2d1byIsIkNTIiwieGl0b25nIl0sInRvdGFsRXBpc29kZSI6MywidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTYsImhlYXRWYWx1ZSI6MzU0NSwiY291bnRDb2xsZWN0IjoxLCJjb3VudExpa2UiOjE5LCJjcmVhdGVkQXQiOiIyMDI2LTExLTA2VDA1OjA3OjM2LjkyNloiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjIyLjQxOFoiLCJzZW9JbmZvIjp7InRpdGxlIjoiIiwia2V5d29ybGQiOlsi6YeN55Sf5ZCO5pON5YS/5aqz5pW06aG/5YWo5a62Iiwi6YeN55Sf57O757ufIiwi5a625peP5riF566XIl0sImRlc2NyaXB0aW9uIjoi55m+5Lq/5a625Li75Y+R546w5LiJ5Liq5YS/5a2Q6YO95LiO6Ieq5bex5rKh5pyJ6KGA57yY5YWz57O777yM5YmN5LiW5bCx5q2k57uI57uT44CC6YeN55Sf5ZCO77yM5LuW6KeJ6YaS57O757uf77yM6YeN5paw5a6h6KeG6Lqr6L655Lq655qE566X6K6h77yM552A5omL5riF55CG5a625peP5YaF55qE5pen6LSm44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6YeN55Sf5ZCO5pON5YS/5aqz5pW06aG/5YWo5a6244CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDk4NCwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjp0cnVlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOnRydWUsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDEyOjE0OjQ4Ljg4OVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDRUMDg6MDE6NDJaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA1VDA4OjU0OjIyWiIsInRoZW1lSWRzIjpbMTI2ODFdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiJdLCJjYXRlZ29yeUlkcyI6WzExMTAyXSwidGl0bGUiOiLlkIjmrKLlrpfkuYvmt6vmr43orrDvvIjlhag46ZuG77yJIiwicGxheU5hbWUiOiLlkIjmrKLlrpfkuYvmt6vmr43orrAiLCJkZXNjcmlwdGlvbiI6Iuael+WHoeato+aAnee0ouWmguS9leW6lOWvueWul+mXqOe6t+S6ie+8jOaEj+WkluW+l+WIsOS4gOagueeBq+eBteWPgu+8jOWQuOaUtuWujOeBteWKm+WQjuebtOWllOe+juWls+WtkOaIv+mXtOOAguS4pOS6uumYtOmYs+S6pOWQiO+8jOe+juWls+WwhuiCieajkuWQq+i/m+WYtOmHjOiIlOW8hO+8jOmaj+WQjuaShei1t+WxgeiCoeiuqeS7luS7juWQjuWktOeMm+W5suOAgua/gOaDhei/h+WQjuepv+Wlveiho+acje+8jOael+WHoei/mOS4jeW/mOiwg+aIj+WlueS4gOeVqu+8jOWul+mXqOe6t+S6ieaaguiiq+aKm+WcqOiEkeWQjuOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWQiOasouWul+S5i+a3q+avjeiusOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDjpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiaGh6eW1qIiwiZGVzYyI6Iuael+WHoeato+aAnee0ouWmguS9leW6lOWvueWul+mXqOe6t+S6ie+8jOaEj+WkluW+l+WIsOS4gOagueeBq+eBteWPgu+8jOWQuOaUtuWujOeBteWKm+WQjuebtOWllOe+juWls+WtkOaIv+mXtOOAguS4pOS6uumYtOmYs+S6pOWQiO+8jOe+juWls+WwhuiCieajkuWQq+i/m+WYtOmHjOiIlOW8hO+8jOmaj+WQjuaShei1t+WxgeiCoeiuqeS7luS7juWQjuWktOeMm+W5suOAgua/gOaDhei/h+WQjuepv+Wlveiho+acje+8jOael+WHoei/mOS4jeW/mOiwg+aIj+WlueS4gOeVqu+8jOWul+mXqOe6t+S6ieaaguiiq+aKm+WcqOiEkeWQjuOAgiIsImFuY2hvciI6Ium7hOaenOWumOaWuSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS90cy8yZi8xMDQ5L3BsYXlsZXRfY292ZXJfZmIzOTFmMDc4YjcwNTdkMS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL21pL3V0LzEwNDkvcGxheWxldF9jb3Zlcl9mYjM5MWYwNzhiNzA1N2QxLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MiwxMjg1NF0sInRhZ05hbWVzIjpbIum7hOaenCIsIuS7meS+oCJdLCJ0YWdTbHVncyI6WyJodWFuZ2d1byIsInhpYW54aWEiXSwidG90YWxFcGlzb2RlIjo4LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNCwiaGVhdFZhbHVlIjo0NDQ3LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTksImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDZUMDU6MDc6MzcuNDMxWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MjIuMzQzWiIsInNlb0luZm8iOnsidGl0bGUiOiIiLCJrZXl3b3JsZCI6WyLlkIjmrKLlrpfkuYvmt6vmr43orrAiLCLpu4Tmnpzljp/liJsiLCLkv67ku5kiLCLmnpflh6HngavngbXlj4LlkI7nmoTpmLTpmLPkuqTlkIgiLCLku5nkvqDlrpfpl6jmg4XoibIiLCLngavngbXlj4IiLCLnvo7lpbPlrZDlj4zkv64iLCLlrozmlbTniYgiLCLlnKjnur/nnIsiLCLlrpfpl6jnurfkuonlkI7nmoTlj4zkv67lpJwiLCLnvo7lpbPlrZDmiL/pl7TnmoTpmLTpmLPkuqTlkIgiXSwiZGVzY3JpcHRpb24iOiLmnpflh6HmraPmgJ3ntKLlpoLkvZXlupTlr7nlrpfpl6jnurfkuonvvIzmhI/lpJblvpfliLDkuIDmoLnngavngbXlj4LvvIzlkLjmlLblrozngbXlipvlkI7nm7TlpZTnvo7lpbPlrZDmiL/pl7TjgILkuKTkurrpmLTpmLPkuqTlkIjvvIznvo7lpbPlsIbogonmo5LlkKvov5vlmLTph4zoiJTlvITvvIzpmo/lkI7mkoXotbflsYHogqHorqnku5bku47lkI7lpLTnjJvlubLjgILmv4Dmg4Xov4flkI7nqb/lpb3ooaPmnI3vvIzmnpflh6Hov5jkuI3lv5josIPmiI/lpbnkuIDnlarvvIzlrpfpl6jnurfkuonmmoLooqvmipvlnKjohJHlkI7jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlkIjmrKLlrpfkuYvmt6vmr43orrDjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw46ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0OTg1LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOnRydWUsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDEyOjEyOjQ1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wNFQwNDo1NTowMFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDVUMDQ6MjM6NDJaIiwidGhlbWVJZHMiOlsxMjY4NV0sInRoZW1lTmFtZXMiOlsi6YO95biCIl0sInRoZW1lU2x1Z3MiOlsiZHVzaGkiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNV0sInRpdGxlIjoi6I2S5bKb6LWO5ZG955m+5Lq66IKJ5pCP5aSn5oiYIEVQMSIsInBsYXlOYW1lIjoi6I2S5bKb6LWO5ZG955m+5Lq66IKJ5pCP5aSn5oiYIiwiZGVzY3JpcHRpb24iOiLkuLrkuobmlZHlprnlprnvvIznlLfkuLvlj4LliqDkuobkuIDlnLrpq5jpop3lpZbph5HnmoTojZLlspvnlJ/lrZjotZvvvIzljbTlj5HnjrDmr5TotZvmmK/otKLlm6Lmk43nurXnmoTmnYDlsYDjgILku5bkuI7kuIDlkI3ljaflupXorablr5/ogZTmiYvvvIzlnKjog4zlj5vkuI7ov73mnYDkuK3lr7vmib7nlJ/ot6/jgILnnLznnIvlsLHopoHotaLkuIvmr5TotZvvvIzohJrkuIvnmoTnpZ7np5jmt7HmuIrlj4jlsIbku5bmi5blhaXmlrDnmoTljbHmnLrjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrojZLlspvotY7lkb3nmb7kurrogonmkI/lpKfmiJjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwx6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6Imhkc20iLCJkZXNjIjoi5Li65LqG5pWR5aa55aa577yM55S35Li75Y+C5Yqg5LqG5LiA5Zy66auY6aKd5aWW6YeR55qE6I2S5bKb55Sf5a2Y6LWb77yM5Y205Y+R546w5q+U6LWb5piv6LSi5Zui5pON57q155qE5p2A5bGA44CC5LuW5LiO5LiA5ZCN5Y2n5bqV6K2m5a+f6IGU5omL77yM5Zyo6IOM5Y+b5LiO6L+95p2A5Lit5a+75om+55Sf6Lev44CC55y855yL5bCx6KaB6LWi5LiL5q+U6LWb77yM6ISa5LiL55qE56We56eY5rex5riK5Y+I5bCG5LuW5ouW5YWl5paw55qE5Y2x5py644CCIiwiYW5jaG9yIjoi5Y6f5YibIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzBiL2F6LzEwNDkvcGxheWxldF9jb3Zlcl81NjBkMjBmN2VhNmQzYzEwLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvZjQvczgvMTA0OS9wbGF5bGV0X2NvdmVyX2QyNTEzZDRlYmYzMzUzYjkuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODcwXSwidGFnTmFtZXMiOlsi5byC5LiW55WMIl0sInRhZ1NsdWdzIjpbIllTSiJdLCJ0b3RhbEVwaXNvZGUiOjEsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjksImhlYXRWYWx1ZSI6MzIyMywiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjIwLCJjcmVhdGVkQXQiOiIyMDI2LTExLTA2VDA1OjA3OjM3Ljg4M1oiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjIyLjI3MVoiLCJzZW9JbmZvIjp7InRpdGxlIjoiIiwia2V5d29ybGQiOlsi6I2S5bKb6LWO5ZG9Iiwi6I2S5bKb55Sf5a2Y6LWbIiwi5Y2n5bqV6K2m5a+fIl0sImRlc2NyaXB0aW9uIjoi5Li65LqG5pWR5aa55aa577yM55S35Li75Y+C5Yqg5LqG5LiA5Zy66auY6aKd5aWW6YeR55qE6I2S5bKb55Sf5a2Y6LWb77yM5Y205Y+R546w5q+U6LWb5piv6LSi5Zui5pON57q155qE5p2A5bGA44CC5LuW5LiO5LiA5ZCN5Y2n5bqV6K2m5a+f6IGU5omL77yM5Zyo6IOM5Y+b5LiO6L+95p2A5Lit5a+75om+55Sf6Lev44CC55y855yL5bCx6KaB6LWi5LiL5q+U6LWb77yM6ISa5LiL55qE56We56eY5rex5riK5Y+I5bCG5LuW5ouW5YWl5paw55qE5Y2x5py644CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6I2S5bKb6LWO5ZG955m+5Lq66IKJ5pCP5aSn5oiY44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDk4OCwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjp0cnVlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wNlQxMjowNToyMy43MzVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA5OjQ1OjAwWiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wNFQwMjowMjozNloiLCJ0aGVtZUlkcyI6WzEyNjgzLDEyNjgxXSwidGhlbWVOYW1lcyI6WyLlj6Too4UiLCLljp/liJvnn63liaciXSwidGhlbWVTbHVncyI6WyJndXpodWFuZyIsInlhdW5jaHVhbmdkaiJdLCJjYXRlZ29yeUlkcyI6WzExMTA1LDExMTAyXSwidGl0bGUiOiLlhaXotZjooqvnu7/kuInlubTvvIznnJ/lpKrlrZDlvZLkvY3lhYjmlqnojaHlpoflkI7or5vkuZ3ml48iLCJwbGF5TmFtZSI6IuWFpei1mOiiq+e7v+S4ieW5tO+8jOecn+WkquWtkOW9kuS9jeWFiOaWqeiNoeWmh+WQjuivm+S5neaXjyIsImRlc2NyaXB0aW9uIjoi5rWB6JC95rCR6Ze055qE5aSq5a2Q6ZqQ5aeT5Z+L5ZCN77yM5YWl6LWY5a6Y5a6m5LmL5a6277yM5Y+X5bC95Ya36YGH5Y205aeL57uI5a6I552A5Y2K5Z2X6b6Z57q5546J5L2p44CC546J5L2p6KKr5Lq65Y+Y5Y2W5ZCO77yM5LuW55qE55yf5a6e6Lqr5Lu95oSP5aSW5pud5YWJ44CC6ZKm5beu6K6k5Ye65LuW5pe277yM5LuW57uI5LqO6IO95riF566X5LiJ5bm05p2l55qE5pen6LSm77yM5Lmf5b6X5Lul5Zue5oql5pu+5Zyo5LuW6JC96a2E5pe25ZaE5b6F5LuW55qE5Lq644CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5YWl6LWY6KKr57u/5LiJ5bm077yM55yf5aSq5a2Q5b2S5L2N5YWI5pap6I2h5aaH5ZCO6K+b5Lmd5peP44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJ6enR6Z3ciLCJkZXNjIjoi5rWB6JC95rCR6Ze055qE5aSq5a2Q6ZqQ5aeT5Z+L5ZCN77yM5YWl6LWY5a6Y5a6m5LmL5a6277yM5Y+X5bC95Ya36YGH5Y205aeL57uI5a6I552A5Y2K5Z2X6b6Z57q5546J5L2p44CC546J5L2p6KKr5Lq65Y+Y5Y2W5ZCO77yM5LuW55qE55yf5a6e6Lqr5Lu95oSP5aSW5pud5YWJ44CC6ZKm5beu6K6k5Ye65LuW5pe277yM5LuW57uI5LqO6IO95riF566X5LiJ5bm05p2l55qE5pen6LSm77yM5Lmf5b6X5Lul5Zue5oql5pu+5Zyo5LuW6JC96a2E5pe25ZaE5b6F5LuW55qE5Lq644CCIiwiYW5jaG9yIjoi5Y6f5YibIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3VmL2Z0LzEwNDkvcGxheWxldF9jb3Zlcl9mMjhlNzdmZmE2ZTQzZDI4LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2Uvc28va2wvMTA0OS9wbGF5bGV0X2NvdmVyX2I2YzRhMmI4NTY3YWFkMmUuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODU3LDEyODc1XSwidGFnTmFtZXMiOlsi5Y+k5LujIiwi5aSN5LuHIl0sInRhZ1NsdWdzIjpbImd1ZGFpIiwiRkMiXSwidG90YWxFcGlzb2RlIjoxLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjozLCJoZWF0VmFsdWUiOjIyNTIsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNiwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozOS4xNjVaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoyMi4yMTRaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuecn+WkquWtkOW9kuS9jSIsIum+mee6ueeOieS9qSIsIuWPpOijheWkjeS7hyIsIueGn+aenGFpIiwiQUnmiJDkurrnn63liaciXSwiZGVzY3JpcHRpb24iOiLmtYHokL3msJHpl7TnmoTlpKrlrZDpmpDlp5Pln4vlkI3vvIzlhaXotZjlrpjlrqbkuYvlrrbvvIzlj5flsL3lhrfpgYfljbTlp4vnu4jlrojnnYDljYrlnZfpvpnnurnnjonkvanjgILnjonkvanooqvkurrlj5jljZblkI7vvIzku5bnmoTnnJ/lrp7ouqvku73mhI/lpJbmm53lhYnjgILpkqblt67orqTlh7rku5bml7bvvIzku5bnu4jkuo7og73muIXnrpfkuInlubTmnaXnmoTml6fotKbvvIzkuZ/lvpfku6Xlm57miqXmm77lnKjku5bokL3prYTml7blloTlvoXku5bnmoTkurrjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlhaXotZjooqvnu7/kuInlubTvvIznnJ/lpKrlrZDlvZLkvY3lhYjmlqnojaHlpoflkI7or5vkuZ3ml4/jgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwx6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19XSwidG9waWNMaXN0IjpbXX0seyJpZCI6MTExMDQsInNsdWciOiJscmpjIiwidGl0bGUiOiLkubHkvKbliaflnLoiLCJkZXNjIjoiIiwia2V5d29yZCI6W10sImxhYmVsIjoiIiwic3R5bGUiOiJBIiwiY2FyZEJhY2tncm91bmRJbWFnZSI6IiIsIm1vZHVsZVR5cGUiOjEsImRhdGFUeXBlIjoxLCJyZWNvbW1lbmRUeXBlIjowLCJjYXRlZ29yeUlkIjowLCJyYW5rIjozLCJsaW1pdCI6MTIsInNlb0luZm8iOnsidGl0bGUiOiLnhp/mnpznn63liafni6zlrrbkuJPpopjkuJPljLogLSDng63pl6hBSeaIkOS6uuefreWJp+S4juS5seS8puS4k+mimOWQiOmbhiIsImtleXdvcmxkIjpbIueGn+aenOefreWJpyIsIum7hOaenOefreWJpyIsIum7hOaenCIsIkFJ5oiQ5Lq655+t5YmnIiwi54Ot6Zeo5o6o6I2QIiwi57K+6YCJ5o6o6I2QIiwi6Imz5q+NIiwi5a2Q6LGq55qE56eY5a+G5pWZ5a2mIiwi5oiQ5Lq655+t5YmnQVBQIiwi5Lmx5LymQUnmiJDkurrnn63liaciXSwiZGVzY3JpcHRpb24iOiLmraXlhaXnhp/mnpznn63liafkubHkvKbliaflnLrkuJPljLrvvIznurXop4jlhajnvZHlpIflj5fnnqnnm67nmoTpq5jlj6PnopFBSeaIkOS6uuefreWJp+avjeWtkOS5seS8pueyvumAieOAguW5s+WPsOavj+aXpeS/neaMgeaMgee7reabtOaWsO+8jOeBq+eDreaUtuW9leS6huOAiuiJs+avjeOAi+OAgeOAiuWtkOixqueahOenmOWvhuaVmeWtpuOAi+etiemrmOS6uuawlOaOqOiNkOWkp+aIj+OAgui/memHjOWJp+aDheWPjei9rOS4jeaWreOAgeeci+eCueeyvuW9qee6t+WRiOOAgueOsOWcqOWwseWOu+S4i+i9veWumOaWueS4k+Wxnuemj+WIqUFQUO+8jOW4puaCqOmaj+aXtumaj+WcsOWwveaDheeVheS6q+aXoOW5suaJsOeahOmrmOa4heaOjOS4iui/veWJp+aWsOS9k+mqjO+8gSJ9LCJsaXN0IjpbeyJpZCI6MTQ3OTUsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDA2OjA2OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMTNUMDQ6MDI6MjBaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTE0VDAyOjMyOjI1WiIsInRoZW1lSWRzIjpbMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNF0sInRpdGxlIjoi5Zyo5ZOl5ZOl6Z2i5YmN5auC5a2Q56uf54S26L+Z5qC35a+55oiRIiwicGxheU5hbWUiOiLlnKjlk6Xlk6XpnaLliY3lq4LlrZDnq5/nhLbov5nmoLflr7nmiJEiLCJkZXNjcmlwdGlvbiI6IuW9k+S6suWTpeWTpeavq+aXoOW+geWFhuWcsOaOqOW8gOaIv+mXqOaXtu+8jOWmluWohueahOWrguWtkOato+WNiui3quWcqOW6iuayv++8jOi6q+S4iueahOS4nei0qOedoeiijemhuuedgOmbqueZveiCqeiGgOa7keiQveiHs+ebiOebiOiFsOmZheOAguWlueS4gOi+ueWBh+ijheaFjOS5seWcsOaVtOeQhuiiq+ikpe+8jOS4gOi+ueWNtOaVheaEj+Wwhumlsea7oea1keWchueahOivseS6uuabsue6v+acneedgOaIv+mXqOWPo+eahOaWueWQkeW+ruW+ruaKrOmrmOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWcqOWTpeWTpemdouWJjeWrguWtkOern+eEtui/meagt+WvueaIkeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDPpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiemFpZ2VnZSIsImRlc2MiOiLlvZPkurLlk6Xlk6Xmr6vml6DlvoHlhYblnLDmjqjlvIDmiL/pl6jml7bvvIzlppblqIbnmoTlq4LlrZDmraPljYrot6rlnKjluormsr/vvIzouqvkuIrnmoTkuJ3otKjnnaHooo3pobrnnYDpm6rnmb3ogqnohoDmu5HokL3oh7Pnm4jnm4johbDpmYXjgILlpbnkuIDovrnlgYfoo4XmhYzkubHlnLDmlbTnkIbooqvopKXvvIzkuIDovrnljbTmlYXmhI/lsIbppbHmu6HmtZHlnIbnmoTor7Hkurrmm7Lnur/mnJ3nnYDmiL/pl6jlj6PnmoTmlrnlkJHlvq7lvq7miqzpq5jjgIIiLCJhbmNob3IiOiIiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvaGcveWkvMTA0OS9wbGF5bGV0X2NvdmVyX2JhYjczOWYxYzBmNzJmOWEuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9xay90di8xMDQ5L3BsYXlsZXRfY292ZXJfYmFiNzM5ZjFjMGY3MmY5YS5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NjBdLCJ0YWdOYW1lcyI6WyLkubHkvKYiXSwidGFnU2x1Z3MiOlsibHVhbmx1biJdLCJ0b3RhbEVwaXNvZGUiOjMsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE1MSwiaGVhdFZhbHVlIjoxNzk5MywiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE5LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ5OjIzLjgyM1oiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjE3LjU0MVoiLCJzZW9JbmZvIjp7InRpdGxlIjoi5Zyo5ZOl5ZOl6Z2i5YmN5auC5a2Q56uf54S26L+Z5qC35a+55oiRIiwia2V5d29ybGQiOlsi5Zyo5ZOl5ZOl6Z2i5YmN5auC5a2Q56uf54S26L+Z5qC35a+55oiRIiwi5Y+U5auC5YG35oOFIiwi6Zeo5YmN6K+x5oORIiwi5Zyo5ZOl5ZOl6Z2i5YmN5auC5a2Q56uf54S26L+Z5qC35a+55oiR5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5ZOl5ZOlIiwi5auC5a2QIl0sImRlc2NyaXB0aW9uIjoi5b2T5Lqy5ZOl5ZOl5q+r5peg5b6B5YWG5Zyw5o6o5byA5oi/6Zeo5pe277yM5aaW5aiG55qE5auC5a2Q5q2j5Y2K6Leq5Zyo5bqK5rK/77yM6Lqr5LiK55qE5Lid6LSo552h6KKN6aG6552A6Zuq55m96IKp6IaA5ruR6JC96Iez55uI55uI6IWw6ZmF44CC5aW55LiA6L655YGH6KOF5oWM5Lmx5Zyw5pW055CG6KKr6KSl77yM5LiA6L655Y205pWF5oSP5bCG6aWx5ruh5rWR5ZyG55qE6K+x5Lq65puy57q/5pyd552A5oi/6Zeo5Y+j55qE5pa55ZCR5b6u5b6u5oqs6auY44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5Zyo5ZOl5ZOl6Z2i5YmN5auC5a2Q56uf54S26L+Z5qC35a+55oiR44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDUwMywic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDJUMjE6NDc6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMC0yNFQwNDozNToyMloiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMjhUMDM6Mzc6MzdaIiwidGhlbWVJZHMiOlsxMjY4Nl0sInRoZW1lTmFtZXMiOlsi5Lmx5LymIl0sInRoZW1lU2x1Z3MiOlsibHVhbmx1biJdLCJjYXRlZ29yeUlkcyI6WzExMTA0XSwidGl0bGUiOiLmiJHnmoTlpojlpojmmK/ni5DlpK3lpK3luIjlsIrmmK/oiojmn5TvvIjlhagxMOmbhu+8iSIsInBsYXlOYW1lIjoi5oiR55qE5aaI5aaI5piv54uQ5aSt5aSt5biI5bCK5piv6IqI5p+UIiwiZGVzY3JpcHRpb24iOiLoiojkupHnrJnkuYPmmK/ni5Dlppbni5DlpK3lpK3kuI7nvr3ljJbpo57ljYfnmoTlpKfog73miYDnlJ/kuYvku5nlppbmt7fooYDjgILlvZPlubTlm6Dni5Dml4/mg6jotKXkurrnsbvkuYvmiYvvvIzni5DlpK3lpK3ml6DlpYjlj6rog73lsIblhbbmipvlvIPvvIzlubjlvpflhbbpl7rkuK3lr4blj4vmuIXmn5Tpl6jlnKPlpbPoiojmn5TlsIblhbbmiprlhbvplb/lpKfjgILlpJrlubTlkI7lvZPoiojmn5Tpl63lhbPkv67ngrzkuYvpmYXvvIzni5DlpK3lpK3pqqTnhLbnjrDouqvkurrpl7TjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmiJHnmoTlpojlpojmmK/ni5DlpK3lpK3luIjlsIrmmK/oiojmn5TjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJ3b2RlbWFtIiwiZGVzYyI6IuiKiOS6keesmeS5g+aYr+eLkOWmlueLkOWkreWkreS4jue+veWMlumjnuWNh+eahOWkp+iDveaJgOeUn+S5i+S7meWmlua3t+ihgOOAguW9k+W5tOWboOeLkOaXj+aDqOi0peS6uuexu+S5i+aJi++8jOeLkOWkreWkreaXoOWliOWPquiDveWwhuWFtuaKm+W8g++8jOW5uOW+l+WFtumXuuS4reWvhuWPi+a4heaflOmXqOWco+Wls+iKiOaflOWwhuWFtuaKmuWFu+mVv+Wkp+OAguWkmuW5tOWQjuW9k+iKiOaflOmXreWFs+S/rueCvOS5i+mZhe+8jOeLkOWkreWkremqpOeEtueOsOi6q+S6uumXtOOAgiIsImFuY2hvciI6Ium7hOaenOWumOaWuSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9zci8wdy8xMDQ5L3BsYXlsZXRfY292ZXJfZmJmMTk4M2UzMTdhODk3NS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2toL2oyLzEwNDkvcGxheWxldF9jb3Zlcl9mYmYxOTgzZTMxN2E4OTc1LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg2MSwxMjg2MCwxMjg1NF0sInRhZ05hbWVzIjpbIuavjeWtkCIsIuS5seS8piIsIuS7meS+oCJdLCJ0YWdTbHVncyI6WyJtdXppIiwibHVhbmx1biIsInhpYW54aWEiXSwidG90YWxFcGlzb2RlIjoxMCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTQzLCJoZWF0VmFsdWUiOjE2OTQwLCJjb3VudENvbGxlY3QiOjEsImNvdW50TGlrZSI6MTUsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDM6MjcuODZaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoxNy4wNDNaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuaIkeeahOWmiOWmiOaYr+eLkOWkreWkreW4iOWwiuaYr+iKiOaflO+8iOWFqDEw6ZuG77yJIiwia2V5d29ybGQiOlsi5oiR55qE5aaI5aaI5piv54uQ5aSt5aSt5biI5bCK5piv6IqI5p+UIiwi5LuZ5aaW5re36KGAIiwi5q+N5a2Q6LCD5pWZIiwi5oiR55qE5aaI5aaI5piv54uQ5aSt5aSt5biI5bCK5piv6IqI5p+U5a6M5pW054mIIiwi5Zyo57q/55yLIiwi54uQ5aSt5aStIiwi6IqI5p+UIiwi6IqI5LqR56yZIl0sImRlc2NyaXB0aW9uIjoi6IqI5LqR56yZ5LmD5piv54uQ5aaW54uQ5aSt5aSt5LiO57695YyW6aOe5Y2H55qE5aSn6IO95omA55Sf5LmL5LuZ5aaW5re36KGA44CC5b2T5bm05Zug54uQ5peP5oOo6LSl5Lq657G75LmL5omL77yM54uQ5aSt5aSt5peg5aWI5Y+q6IO95bCG5YW25oqb5byD77yM5bm45b6X5YW26Ze65Lit5a+G5Y+L5riF5p+U6Zeo5Zyj5aWz6IqI5p+U5bCG5YW25oqa5YW76ZW/5aSn44CC5aSa5bm05ZCO5b2T6IqI5p+U6Zet5YWz5L+u54K85LmL6ZmF77yM54uQ5aSt5aSt6aqk54S2546w6Lqr5Lq66Ze044CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5oiR55qE5aaI5aaI5piv54uQ5aSt5aSt5biI5bCK5piv6IqI5p+U44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ2MTgsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOnRydWUsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDJUMDE6MDI6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0wOS0xOVQwMzozNDoyNloiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDRUMTI6MTA6NTRaIiwidGhlbWVJZHMiOlsxMjY4Nl0sInRoZW1lTmFtZXMiOlsi5Lmx5LymIl0sInRoZW1lU2x1Z3MiOlsibHVhbmx1biJdLCJjYXRlZ29yeUlkcyI6WzExMTA0LDExMTA1XSwidGl0bGUiOiLmr43kuIrmlLvnlaXvvIjlhag56ZuG77yJIiwicGxheU5hbWUiOiLmr43kuIrmlLvnlaUiLCJkZXNjcmlwdGlvbiI6Iuato+WkhOS6juihgOawlOaWueWImuW5tOe6queahOWwkeW5tO+8jOWwhueWr+eLgueahOW+geacjeebruagh+aChOeEtumUgeWumuWcqOS6huiHquW3seeahOS6sueUn+avjeS6sui6q+S4iuOAguS7jui1t+WIneaXpeW4uOeUn+a0u+S4reeci+S8vOS4jee7j+aEj+eahOiCouS9k+ivleaOou+8jOWIsOWQjuadpeS4gOatpeatpeeqgeegtOS8pueQhuW6lee6v+eahOa3seW6puayieaypuOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuavjeS4iuaUu+eVpeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDE56ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6Im11c2hhbjIiLCJkZXNjIjoi5q2j5aSE5LqO6KGA5rCU5pa55Yia5bm057qq55qE5bCR5bm077yM5bCG55av54uC55qE5b6B5pyN55uu5qCH5oKE54S26ZSB5a6a5Zyo5LqG6Ieq5bex55qE5Lqy55Sf5q+N5Lqy6Lqr5LiK44CC5LuO6LW35Yid5pel5bi455Sf5rS75Lit55yL5Ly85LiN57uP5oSP55qE6IKi5L2T6K+V5o6i77yM5Yiw5ZCO5p2l5LiA5q2l5q2l56qB56C05Lym55CG5bqV57q/55qE5rex5bqm5rKJ5rKm44CCIiwiYW5jaG9yIjoieWUiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvNjQvam0vMTA0OS9wbGF5bGV0X2NvdmVyX2VmMmY5NTRjNjViNDQ4MjkuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9wbC8wcS8xMDQ5L3BsYXlsZXRfY292ZXJfZWYyZjk1NGM2NWI0NDgyOS5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NjEsMTI4NjBdLCJ0YWdOYW1lcyI6WyLmr43lrZAiLCLkubHkvKYiXSwidGFnU2x1Z3MiOlsibXV6aSIsImx1YW5sdW4iXSwidG90YWxFcGlzb2RlIjoxOSwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MzA4LCJoZWF0VmFsdWUiOjM1MTY2LCJjb3VudENvbGxlY3QiOjEsImNvdW50TGlrZSI6MTcsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDc6NDEuNTk0WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDA6MDA6MTYuODE1WiIsInNlb0luZm8iOnsidGl0bGUiOiLmr43kuIrmlLvnlaXvvIjlhag56ZuG77yJIiwia2V5d29ybGQiOlsi5q+N5LiK5pS755WlIiwi5q+N5a2Q6IOM5b63Iiwi56aB5b+M5rKJ5rKmIiwi5q+N5LiK5pS755Wl5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5bCR5bm0Iiwi5q+N5LiKIl0sImRlc2NyaXB0aW9uIjoi5q2j5aSE5LqO6KGA5rCU5pa55Yia5bm057qq55qE5bCR5bm077yM5bCG55av54uC55qE5b6B5pyN55uu5qCH5oKE54S26ZSB5a6a5Zyo5LqG6Ieq5bex55qE5Lqy55Sf5q+N5Lqy6Lqr5LiK44CC5LuO6LW35Yid5pel5bi455Sf5rS75Lit55yL5Ly85LiN57uP5oSP55qE6IKi5L2T6K+V5o6i77yM5Yiw5ZCO5p2l5LiA5q2l5q2l56qB56C05Lym55CG5bqV57q/55qE5rex5bqm5rKJ5rKm44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5q+N5LiK5pS755Wl44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTnpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ0NzYsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAxVDE2OjE2OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMjhUMDY6NDQ6MDRaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTAyVDA4OjQ2OjI2WiIsInRoZW1lSWRzIjpbMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNF0sInRpdGxlIjoi5oiR55qE5aa55aa55piv6aOO5L+X5aiY77yI5YWoNembhu+8iSIsInBsYXlOYW1lIjoi5oiR55qE5aa55aa55piv6aOO5L+X5aiYIiwiZGVzY3JpcHRpb24iOiLlnKjkurrliY3lpbnmmK/lrp7lipvlvLrmqKrjgIHpq5jlhrfkuKXogoPnmoTmrabpgZPpq5jmiYvvvIzkuI3ku4Xljozmgbblk6Xlk6Xop4LnnIvmiJDkurrlvZXlg4/vvIzmm7TkvJrkuYnmraPovp7kuKXlnLDnmb7oiKzliLbmraLjgILosIHog73mg7PliLDvvIzov5nkvY3nnIvkvLzlhrDmuIXnjonmtIHnmoTlprnlprnog4zlnLDph4znq5/mnInnp5jlr4bouqvku73vvIzov5jmmK/lvZPlnLDosarljY7po47kv5flupfmnIDngpnmiYvlj6/ng63nmoTlpLTniYzlp5HlqJjjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmiJHnmoTlprnlprnmmK/po47kv5flqJjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw16ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6IndvZGVtZWkiLCJkZXNjIjoi5Zyo5Lq65YmN5aW55piv5a6e5Yqb5by65qiq44CB6auY5Ya35Lil6IKD55qE5q2m6YGT6auY5omL77yM5LiN5LuF5Y6M5oG25ZOl5ZOl6KeC55yL5oiQ5Lq65b2V5YOP77yM5pu05Lya5LmJ5q2j6L6e5Lil5Zyw55m+6Iis5Yi25q2i44CC6LCB6IO95oOz5Yiw77yM6L+Z5L2N55yL5Ly85Yaw5riF546J5rSB55qE5aa55aa56IOM5Zyw6YeM56uf5pyJ56eY5a+G6Lqr5Lu977yM6L+Y5piv5b2T5Zyw6LGq5Y2O6aOO5L+X5bqX5pyA54KZ5omL5Y+v54Ot55qE5aS054mM5aeR5aiY44CCIiwiYW5jaG9yIjoieWUiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvMWUvNDAvMTA0OS9wbGF5bGV0X2NvdmVyXzJmYzBkYWEwOWExNDg1YjcuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS84MS9qcy8xMDQ5L3BsYXlsZXRfY292ZXJfMmZjMGRhYTA5YTE0ODViNy5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NjBdLCJ0YWdOYW1lcyI6WyLkubHkvKYiXSwidGFnU2x1Z3MiOlsibHVhbmx1biJdLCJ0b3RhbEVwaXNvZGUiOjUsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE0NiwiaGVhdFZhbHVlIjoxNjMwNSwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE0LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQyOjEwLjQ1MloiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjE3LjE1MVoiLCJzZW9JbmZvIjp7InRpdGxlIjoi5oiR55qE5aa55aa55piv6aOO5L+X5aiY77yI5YWoNembhu+8iSIsImtleXdvcmxkIjpbIuaIkeeahOWmueWmueaYr+mjjuS/l+WomCIsIuWPjOmdoui6q+S7vSIsIumjjuS/l+WktOeJjCIsIuaIkeeahOWmueWmueaYr+mjjuS/l+WomOWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuatpumBk+mrmOaJiyJdLCJkZXNjcmlwdGlvbiI6IuWcqOS6uuWJjeWlueaYr+WunuWKm+W8uuaoquOAgemrmOWGt+S4peiCg+eahOatpumBk+mrmOaJi++8jOS4jeS7heWOjOaBtuWTpeWTpeingueci+aIkOS6uuW9leWDj++8jOabtOS8muS5ieato+i+nuS4peWcsOeZvuiIrOWItuatouOAguiwgeiDveaDs+WIsO+8jOi/meS9jeeci+S8vOWGsOa4heeOiea0geeahOWmueWmueiDjOWcsOmHjOern+acieenmOWvhui6q+S7ve+8jOi/mOaYr+W9k+WcsOixquWNjumjjuS/l+W6l+acgOeCmeaJi+WPr+eDreeahOWktOeJjOWnkeWomOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuaIkeeahOWmueWmueaYr+mjjuS/l+WomOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDXpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ3NTIsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6dHJ1ZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOmZhbHNlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTEwLTMwVDE1OjQ0OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMTJUMTE6Mjk6MTRaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTE0VDAzOjMyOjIxWiIsInRoZW1lSWRzIjpbMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNCwxMTEwNSwxMTEwMSwxMTEwMl0sInRpdGxlIjoi572R6LCD5oiR55qE5Yaw5bGx5aaI5aaI77yI5YWoOOmbhu+8iSIsInBsYXlOYW1lIjoi572R6LCD5oiR55qE5Yaw5bGx5aaI5aaIIiwiZGVzY3JpcHRpb24iOiLnmb3mmLzkuYvkuIvnmoTlpbnvvIzmmK/ljY7ogIDpm4blm6LmnYDkvJDmnpzmlq3jgIHpq5jpq5jlnKjkuIrnmoTlhrDlsbFDRk/vvIzmtZHouqvmlaPlj5HnnYDnlJ/kurrli7/ov5vnmoTnpoHmrLLmsJTmga/vvJvnhLbogIzlvZPmt7HlpJzpmY3kuLTvvIzlpbnljbTovazlj5jkuLrljZHlvq7pobrku47nmoTigJzlhrDonbbigJ3vvIzlnKjkuLvkurrnmoTnu53lr7nlkb3ku6TkuIvliaXlvIDpu5HoibLolb7kuJ3vvIzlj4zohp3ot6rlnLDljZHlvq7msYLmrKLjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrnvZHosIPmiJHnmoTlhrDlsbHlpojlpojjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw46ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6IndhbmdkaWEiLCJkZXNjIjoi55m95pi85LmL5LiL55qE5aW577yM5piv5Y2O6ICA6ZuG5Zui5p2A5LyQ5p6c5pat44CB6auY6auY5Zyo5LiK55qE5Yaw5bGxQ0ZP77yM5rWR6Lqr5pWj5Y+R552A55Sf5Lq65Yu/6L+b55qE56aB5qyy5rCU5oGv77yb54S26ICM5b2T5rex5aSc6ZmN5Li077yM5aW55Y206L2s5Y+Y5Li65Y2R5b6u6aG65LuO55qE4oCc5Yaw6J224oCd77yM5Zyo5Li75Lq655qE57ud5a+55ZG95Luk5LiL5Yml5byA6buR6Imy6JW+5Lid77yM5Y+M6Iad6Leq5Zyw5Y2R5b6u5rGC5qyi44CCIiwiYW5jaG9yIjoi57K+6YCJ576O5aWz5aSn5a2m55SfIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzdjL2l0LzEwNDkvcGxheWxldF9jb3Zlcl8zMTJhMjM4ZWRlOWExM2QwLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvOXovZHcvMTA0OS9wbGF5bGV0X2NvdmVyXzMxMmEyMzhlZGU5YTEzZDAuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODYxLDEyODYwXSwidGFnTmFtZXMiOlsi5q+N5a2QIiwi5Lmx5LymIl0sInRhZ1NsdWdzIjpbIm11emkiLCJsdWFubHVuIl0sInRvdGFsRXBpc29kZSI6OCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTYyLCJoZWF0VmFsdWUiOjE5MjUwLCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTMsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDk6MDMuMzUyWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDA6MDA6MTguMTY3WiIsInNlb0luZm8iOnsidGl0bGUiOiLnvZHosIPmiJHnmoTlhrDlsbHlpojlpojvvIjlhag46ZuG77yJIiwia2V5d29ybGQiOlsi572R6LCD5oiR55qE5Yaw5bGx5aaI5aaIIiwi5q+N5a2Q572R6LCDIiwi5Yaw5bGxQ0ZPIiwi572R6LCD5oiR55qE5Yaw5bGx5aaI5aaI5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5Yaw5bGx5aaI5aaIIiwi5pqX5aSc5ZCb546LIl0sImRlc2NyaXB0aW9uIjoi55m95pi85LmL5LiL55qE5aW577yM5piv5Y2O6ICA6ZuG5Zui5p2A5LyQ5p6c5pat44CB6auY6auY5Zyo5LiK55qE5Yaw5bGxQ0ZP77yM5rWR6Lqr5pWj5Y+R552A55Sf5Lq65Yu/6L+b55qE56aB5qyy5rCU5oGv77yb54S26ICM5b2T5rex5aSc6ZmN5Li077yM5aW55Y206L2s5Y+Y5Li65Y2R5b6u6aG65LuO55qE4oCc5Yaw6J224oCd77yM5Zyo5Li75Lq655qE57ud5a+55ZG95Luk5LiL5Yml5byA6buR6Imy6JW+5Lid77yM5Y+M6Iad6Leq5Zyw5Y2R5b6u5rGC5qyi44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK572R6LCD5oiR55qE5Yaw5bGx5aaI5aaI44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysOOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDUwMiwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6dHJ1ZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6ZmFsc2UsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOnRydWUsImJhbm5lciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvdjMvOG4vMTA0OS8lRTglOEElQjElRTklQUQlODElRTklQTYlOTYlRTclOTklQkMtMyUyMCVFNiVBRiU4RCVFNCVCOCU4QSVFNiU5NCVCQiVFNyU5NSVBNS5qcGciLCJtb2JpbGVCYW5uZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3V3L2F3LzEwNDkvMTEucG5nIiwib25saW5lQXQiOiIyMDI2LTEwLTI4VDAxOjIyOjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMjRUMDQ6NDg6NDZaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTI0VDA1OjI2OjA3WiIsInRoZW1lSWRzIjpbMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNF0sInRpdGxlIjoi5q+N5LiK5pS755WlIEVQMSIsInBsYXlOYW1lIjoi5q+N5LiK5pS755WlIEVQMSIsImRlc2NyaXB0aW9uIjoi5q+N5Lqy5oC75piv5Lmg5oOv6Lqr552A6buR5Lid6KKc6Lip552A57uG6auY6Lef6Z6L5Zyo5a625Lit6LWw5Yqo77yM6L+Z6K6p5oKj5pyJ5Lil6YeN5oGL6KKc55mW55qE5YS/5a2Q5Zyo5LiA5peB55yL5b6X5qyy54Gr5Lit54On44CB6IOv5LiL5rua54Or44CC5L6d5L6d5Li75Yqo5o2i5LiK57Sn6Lqr5aWX6KOZ6Leo5Z2Q5Zyo5LuW6Lqr5LiK77yM5LuW6Zet5LiK5Y+M55y85rKJ5rW45Zyo5bm75oOz5Lit77yM5bC95oOF5Lqr5Y+X552A5q+N5Lqy5Lul5aWz5LiK5L2N6Leo6IS45bim5p2l55qE5p6B6Ie05Yay5Ye744CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5q+N5LiK5pS755WlIEVQMeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDHpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoibXVzaGFuZyIsImRlc2MiOiLmr43kurLmgLvmmK/kuaDmg6/ouqvnnYDpu5HkuJ3oopzouKnnnYDnu4bpq5jot5/pnovlnKjlrrbkuK3otbDliqjvvIzov5norqnmgqPmnInkuKXph43mgYvoopznmZbnmoTlhL/lrZDlnKjkuIDml4HnnIvlvpfmrLLngavkuK3ng6fjgIHog6/kuIvmu5rng6vjgILkvp3kvp3kuLvliqjmjaLkuIrntKfouqvlpZfoo5not6jlnZDlnKjku5bouqvkuIrvvIzku5bpl63kuIrlj4znnLzmsonmtbjlnKjlubvmg7PkuK3vvIzlsL3mg4Xkuqvlj5fnnYDmr43kurLku6XlpbPkuIrkvY3ot6johLjluKbmnaXnmoTmnoHoh7TlhrLlh7vjgIIiLCJhbmNob3IiOiLljp/liJsiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2Uva3YvOGMvMTA0OS9wbGF5bGV0X2NvdmVyXzgzMDc2MzhkNjkzNTRlMzkuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9zNy9qcy8xMDQ5L3BsYXlsZXRfY292ZXJfZmRmYzEzOWIyMzhiNzZjZC5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NjEsMTI4NjBdLCJ0YWdOYW1lcyI6WyLmr43lrZAiLCLkubHkvKYiXSwidGFnU2x1Z3MiOlsibXV6aSIsImx1YW5sdW4iXSwidG90YWxFcGlzb2RlIjoxLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxODEsImhlYXRWYWx1ZSI6MjAyNTcsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNywiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0MzoyNy4xMDJaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoxOS4xNTJaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuavjeS4iuaUu+eVpSBFUDEtIOiKsemtgUFQUOeJiCIsImtleXdvcmxkIjpbIuavjeS4iuaUu+eVpSIsIuaBi+iinOeZliIsIuavjeS6suivseaDkSIsIuavjeS4iuaUu+eVpeWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuS+neS+nSIsIuWEv+WtkCJdLCJkZXNjcmlwdGlvbiI6IuavjeS6suaAu+aYr+S5oOaDr+i6q+edgOm7keS4neiinOi4qeedgOe7humrmOi3n+mei+WcqOWutuS4rei1sOWKqO+8jOi/meiuqeaCo+acieS4pemHjeaBi+iinOeZlueahOWEv+WtkOWcqOS4gOaXgeeci+W+l+assueBq+S4reeDp+OAgeiDr+S4i+a7mueDq+OAguS+neS+neS4u+WKqOaNouS4iue0p+i6q+Wll+ijmei3qOWdkOWcqOS7lui6q+S4iu+8jOS7lumXreS4iuWPjOecvOayiea1uOWcqOW5u+aDs+S4re+8jOWwveaDheS6q+WPl+edgOavjeS6suS7peWls+S4iuS9jei3qOiEuOW4puadpeeahOaegeiHtOWGsuWHu+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuavjeS4iuaUu+eVpSBFUDHjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwx6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NzUxLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6ZmFsc2UsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTAtMjdUMjA6NTk6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMC0wOVQwMzo1MDoyNloiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMTBUMDk6MTY6NThaIiwidGhlbWVJZHMiOlsxMjY4Nl0sInRoZW1lTmFtZXMiOlsi5Lmx5LymIl0sInRoZW1lU2x1Z3MiOlsibHVhbmx1biJdLCJjYXRlZ29yeUlkcyI6WzExMTA0XSwidGl0bGUiOiLlgbfmi43lpojlpojmjaLmuLjmiI/nmq7ogqTvvIjlhagy6ZuG77yJIiwicGxheU5hbWUiOiLlgbfmi43lpojlpojmjaLmuLjmiI/nmq7ogqQiLCJkZXNjcmlwdGlvbiI6IuWknOW5leS9juWegu+8jOixquWNjuWFrOWvk+WGhea1gea3jOedgOa4heWGt+eahOWFieW9se+8jOeGn+Wls+avjeS6suato+WdkOWcqOeUteiEkeahjOWJjeiBmueyvuS8muelnuWcsOW4ruWEv+WtkOabtOaNoua4uOaIj+earuiCpO+8jOeql+WkluWfjuW4gueahOaWkeaWk+mck+iZueWwhuWlueWHueWHuOacieiHtOeahOi6q+auteWujOe+juWLvuWLkuOAguWEv+WtkOmdmemdmei1sOi/ke+8jOa7mueDq+eahOebruWFieS4jeeUseiHquS4u+WcsOatu+elnuiIrOmUgeatu+WcqOWlueW+ruaVnueahOiho+mihumXtOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWBt+aLjeWmiOWmiOaNoua4uOaIj+earuiCpOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDLpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoidG91cGFpbSIsImRlc2MiOiLlpJzluZXkvY7lnoLvvIzosarljY7lhazlr5PlhoXmtYHmt4znnYDmuIXlhrfnmoTlhYnlvbHvvIznhp/lpbPmr43kurLmraPlnZDlnKjnlLXohJHmoYzliY3ogZrnsr7kvJrnpZ7lnLDluK7lhL/lrZDmm7TmjaLmuLjmiI/nmq7ogqTvvIznqpflpJbln47luILnmoTmlpHmlpPpnJPombnlsIblpbnlh7nlh7jmnInoh7TnmoTouqvmrrXlroznvo7li77li5LjgILlhL/lrZDpnZnpnZnotbDov5HvvIzmu5rng6vnmoTnm67lhYnkuI3nlLHoh6rkuLvlnLDmrbvnpZ7oiKzplIHmrbvlnKjlpbnlvq7mlZ7nmoTooaPpoobpl7TjgIIiLCJhbmNob3IiOiLpu4TmnpzlrpjmlrkiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvcWgvNncvMTA0OS9wbGF5bGV0X2NvdmVyXzk0NTY5ZDJmMWM2NzJlM2IuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9jNy9mNi8xMDQ5L3BsYXlsZXRfY292ZXJfOTQ1NjlkMmYxYzY3MmUzYi5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NjEsMTI4NjAsMTI4NTVdLCJ0YWdOYW1lcyI6WyLmr43lrZAiLCLkubHkvKYiLCLpg73luIIiXSwidGFnU2x1Z3MiOlsibXV6aSIsImx1YW5sdW4iLCJkdXNoaSJdLCJ0b3RhbEVwaXNvZGUiOjIsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE0MiwiaGVhdFZhbHVlIjoxODc4OSwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE0LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ5OjAyLjc0MVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjE3LjMyN1oiLCJzZW9JbmZvIjp7InRpdGxlIjoi5YG35ouN5aaI5aaI5o2i5ri45oiP55qu6IKk77yI5YWoMumbhu+8iSIsImtleXdvcmxkIjpbIuWBt+aLjeWmiOWmiOaNoua4uOaIj+earuiCpCIsIuavjeWtkOaap+aYpyIsIueGn+Wls+ivseaDkSIsIuWBt+aLjeWmiOWmiOaNoua4uOaIj+earuiCpOWujOaVtOeJiCIsIuWcqOe6v+eciyIsIueGn+Wls+avjeS6siIsIua4uOaIj+earuiCpCJdLCJkZXNjcmlwdGlvbiI6IuWknOW5leS9juWegu+8jOixquWNjuWFrOWvk+WGhea1gea3jOedgOa4heWGt+eahOWFieW9se+8jOeGn+Wls+avjeS6suato+WdkOWcqOeUteiEkeahjOWJjeiBmueyvuS8muelnuWcsOW4ruWEv+WtkOabtOaNoua4uOaIj+earuiCpO+8jOeql+WkluWfjuW4gueahOaWkeaWk+mck+iZueWwhuWlueWHueWHuOacieiHtOeahOi6q+auteWujOe+juWLvuWLkuOAguWEv+WtkOmdmemdmei1sOi/ke+8jOa7mueDq+eahOebruWFieS4jeeUseiHquS4u+WcsOatu+elnuiIrOmUgeatu+WcqOWlueW+ruaVnueahOiho+mihumXtOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWBt+aLjeWmiOWmiOaNoua4uOaIj+earuiCpOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDLpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ3ODMsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3IjpmYWxzZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMC0yN1QxNToxMTozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTA5LTI0VDA0OjA2OjM3WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMC0wN1QxMjoyMzoyMloiLCJ0aGVtZUlkcyI6WzEyNjg2XSwidGhlbWVOYW1lcyI6WyLkubHkvKYiXSwidGhlbWVTbHVncyI6WyJsdWFubHVuIl0sImNhdGVnb3J5SWRzIjpbMTExMDRdLCJ0aXRsZSI6IuiNr+elnuWHuuS4lu+8iOWFqDXpm4bvvIkiLCJwbGF5TmFtZSI6IuiNr+elnuWHuuS4liIsImRlc2NyaXB0aW9uIjoi5bm06L276Iux5L+K55qE5bCP5LyZ5Zyo5rOi5YWJ57K857K855qE5rKz6L655oSP5aSW5pKe6KeB576O6Imz5auC5a2Q5q2j5Zyo5rKQ5rW05oiP5rC077yM5YG355yL5b2T5Zy66KKr5oqT5YyF5ZCO5byV5Y+R5LqG5LiA5Zy65oOK5aSp6Imz6YGH77ya5aSn576O5Lq65LiN5bm46KKr5q+S6JuH54ug54ug5ZKs5Lyk77yM5bCP5LyZ5oy66Lqr6ICM5Ye65q+r5LiN54q56LGr5Zyw55So5Zi05bCG5Lyk5Y+j5q+S5ray5LiA5Y+j5Y+j5ZC45Ye644CC576O5Lq65YaF5b+D5aW95oSf556s6Ze054iG5qOa44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6I2v56We5Ye65LiW44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysNembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJ5YW9zaGVuIiwiZGVzYyI6IuW5tOi9u+iLseS/iueahOWwj+S8meWcqOazouWFieeyvOeyvOeahOays+i+ueaEj+WkluaSnuingee+juiJs+WrguWtkOato+WcqOaykOa1tOaIj+awtO+8jOWBt+eci+W9k+Wcuuiiq+aKk+WMheWQjuW8leWPkeS6huS4gOWcuuaDiuWkqeiJs+mBh++8muWkp+e+juS6uuS4jeW5uOiiq+avkuibh+eLoOeLoOWSrOS8pO+8jOWwj+S8meaMuui6q+iAjOWHuuavq+S4jeeKueixq+WcsOeUqOWYtOWwhuS8pOWPo+avkua2suS4gOWPo+WPo+WQuOWHuuOAgue+juS6uuWGheW/g+WlveaEn+eerOmXtOeIhuajmuOAgiIsImFuY2hvciI6IiIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9qOS93OS8xMDQ5L3BsYXlsZXRfY292ZXJfMWQyZDBhYTE0MmE1MWMzMC5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2hxL2hnLzEwNDkvcGxheWxldF9jb3Zlcl8xZDJkMGFhMTQyYTUxYzMwLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg2MCwxMjg2NywxMjg1OV0sInRhZ05hbWVzIjpbIuS5seS8piIsIuS5oeadkSIsIuiJs+mBhyJdLCJ0YWdTbHVncyI6WyJsdWFubHVuIiwieGlhbmdjdW4iLCJ5YW55dSJdLCJ0b3RhbEVwaXNvZGUiOjUsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE0NiwiaGVhdFZhbHVlIjoxNjA4NiwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE5LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ5OjE3LjEwNloiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjE3LjQyNFoiLCJzZW9JbmZvIjp7InRpdGxlIjoi6I2v56We5Ye65LiW77yI5YWoNembhu+8iSIsImtleXdvcmxkIjpbIuiNr+elnuWHuuS4liIsIuWrguWtkOWBt+aDhSIsIuibh+avkuaVkeaPtCIsIuiNr+elnuWHuuS4luWujOaVtOeJiCIsIuWcqOe6v+eciyIsIue+juiJs+WrguWtkCIsIuWLh+aVouWwj+S8mSJdLCJkZXNjcmlwdGlvbiI6IuW5tOi9u+iLseS/iueahOWwj+S8meWcqOazouWFieeyvOeyvOeahOays+i+ueaEj+WkluaSnuingee+juiJs+WrguWtkOato+WcqOaykOa1tOaIj+awtO+8jOWBt+eci+W9k+Wcuuiiq+aKk+WMheWQjuW8leWPkeS6huS4gOWcuuaDiuWkqeiJs+mBh++8muWkp+e+juS6uuS4jeW5uOiiq+avkuibh+eLoOeLoOWSrOS8pO+8jOWwj+S8meaMuui6q+iAjOWHuuavq+S4jeeKueixq+WcsOeUqOWYtOWwhuS8pOWPo+avkua2suS4gOWPo+WPo+WQuOWHuuOAgue+juS6uuWGheW/g+WlveaEn+eerOmXtOeIhuajmuOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuiNr+elnuWHuuS4luOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDXpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ5OTAsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDA3OjE5OjQ4LjU2M1oiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDk6MjI6MzNaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTAzVDEyOjE4OjI0WiIsInRoZW1lSWRzIjpbMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNF0sInRpdGxlIjoi5oiR55qE576O6Imz5bKz5q+NIiwicGxheU5hbWUiOiLmiJHnmoTnvo7oibPlsrPmr40iLCJkZXNjcmlwdGlvbiI6IuaWsOWpmueHleWwlO+8jOWys+avjeS4uueFp+aWmeWls+WEv+WFpeS9j+WutuS4reOAguW8r+iFsOmcsuWHuuS6i+S4mue6v+S4juiVvuS4ne+8jOW9u+W6leWHu+epv+S7lueahOeQhuaZuuOAgua3seWknOmYs+WPsOmCo+aKuee0q+iJsuiVvuS4neW4puedgOS9k+mmmeW8leS6uua3seWXheOAgumXqOe8nemHjOWlueato+iHquWose+8jOWPo+S4rei9u+WUpOS7lueahOWQjeWtl+OAgumXqOWkluS7luaUpeedgOWGheijpOiDr+S4i+eBq+i1t++8jOmXqOWGheWlueWoh+WWmOWQgeWQgeOAguS4pOS6uumalOepuuWFsem4o+WQhOiHqumHiuaUvu+8jOemgeW/jOato+W8j+aLieW8gOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuaIkeeahOe+juiJs+Wys+avjeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDXpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoid2RteXltIiwiZGVzYyI6IuaWsOWpmueHleWwlO+8jOWys+avjeS4uueFp+aWmeWls+WEv+WFpeS9j+WutuS4reOAguW8r+iFsOmcsuWHuuS6i+S4mue6v+S4juiVvuS4ne+8jOW9u+W6leWHu+epv+S7lueahOeQhuaZuuOAgua3seWknOmYs+WPsOmCo+aKuee0q+iJsuiVvuS4neW4puedgOS9k+mmmeW8leS6uua3seWXheOAgumXqOe8nemHjOWlueato+iHquWose+8jOWPo+S4rei9u+WUpOS7lueahOWQjeWtl+OAgumXqOWkluS7luaUpeedgOWGheijpOiDr+S4i+eBq+i1t++8jOmXqOWGheWlueWoh+WWmOWQgeWQgeOAguS4pOS6uumalOepuuWFsem4o+WQhOiHqumHiuaUvu+8jOemgeW/jOato+W8j+aLieW8gOOAgiIsImFuY2hvciI6IuacgOWFqOeJh+W6kyIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS92di93ZC8xMDQ5L3BsYXlsZXRfY292ZXJfYTQ3MzgxNWJkZTNmNWFiMS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL21lL3k3LzEwNDkvcGxheWxldF9jb3Zlcl9hNDczODE1YmRlM2Y1YWIxLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg2MF0sInRhZ05hbWVzIjpbIuS5seS8piJdLCJ0YWdTbHVncyI6WyJsdWFubHVuIl0sInRvdGFsRXBpc29kZSI6NSwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6NCwiaGVhdFZhbHVlIjoyMDg2LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTIsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDZUMDU6MDc6MzkuNTYxWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MjIuMDQ0WiIsInNlb0luZm8iOnsidGl0bGUiOiIiLCJrZXl3b3JsZCI6WyLmiJHnmoTnvo7oibPlsrPmr40iLCLlsrPmr43kuI7lpbPlqb8iLCLlrrbluq3nn63liaciLCLmlrDlqZrlsrPmr43mt7HlpJznpoHlv4wiLCLpg73luILnpoHlv4zlsrPmr40iLCLntKvoibLolb7kuJ0iLCLpl6jnvJ3oh6rlqLEiLCLlrozmlbTniYgiLCLlnKjnur/nnIsiLCLlsrPmr43olb7kuJ3lh7vnqb/nkIbmmboiLCLpl6jnvJ3ph4znmoTlsrPmr43oh6rlqLEiXSwiZGVzY3JpcHRpb24iOiLmlrDlqZrnh5XlsJTvvIzlsrPmr43kuLrnhafmlpnlpbPlhL/lhaXkvY/lrrbkuK3jgILlvK/ohbDpnLLlh7rkuovkuJrnur/kuI7olb7kuJ3vvIzlvbvlupXlh7vnqb/ku5bnmoTnkIbmmbrjgILmt7HlpJzpmLPlj7DpgqPmirnntKvoibLolb7kuJ3luKbnnYDkvZPpppnlvJXkurrmt7Hll4XjgILpl6jnvJ3ph4zlpbnmraPoh6rlqLHvvIzlj6PkuK3ovbvllKTku5bnmoTlkI3lrZfjgILpl6jlpJbku5bmlKXnnYDlhoXoo6Tog6/kuIvngavotbfvvIzpl6jlhoXlpbnlqIfllpjlkIHlkIHjgILkuKTkurrpmpTnqbrlhbHpuKPlkIToh6rph4rmlL7vvIznpoHlv4zmraPlvI/mi4nlvIDjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmiJHnmoTnvo7oibPlsrPmr43jgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw16ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NTI5LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDEwOjU2OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTJUMjE6NTA6MDVaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAxVDA4OjAzOjE2WiIsInRoZW1lSWRzIjpbMTI2ODEsMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyIsIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiIsImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMiwxMTEwNCwxMTEwNV0sInRpdGxlIjoi6ay854i255yf5Lq654mI77yI5YWoMTDpm4bvvIkiLCJwbGF5TmFtZSI6IumsvOeItuecn+S6uueJiCIsImRlc2NyaXB0aW9uIjoi55m95aSp5LuW5piv5rip5p+U5L2T6LS044CB54Wn6aG+5a625bqt55qE5qih6IyD57un54i277yM5LiA5Yiw5aSc5bmV6ZmN5Li05L6/5b275bqV5pKV5byA5Lyq6KOF77yM5YWI5piv5Lul57ud5a+555qE5by66ICF5ae/5oCB5by66KGM5Y2g5pyJ5LqG5YKy5aiH5Y+b6YCG55qE5aeQ5aeQ54ix6I6J77yM6ZqP5ZCO5Y+I5bCG5riF57qv5Y+v5Lq655qE5aa55aa557qx5aWI5LiA5q2l5q2l6LCD5pWZ5b6X5b275bqV5rKJ5rKm44CC5LuO5pyA5Yid55qE5YG356ql5YG36Ze75Yiw5YaF5b+D55qE5oqX5ouS5bSp5rqD44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6ay854i255yf5Lq654mI44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiZ3VpZnV6aCIsImRlc2MiOiLnmb3lpKnku5bmmK/muKnmn5TkvZPotLTjgIHnhafpob7lrrbluq3nmoTmqKHojIPnu6fniLbvvIzkuIDliLDlpJzluZXpmY3kuLTkvr/lvbvlupXmkpXlvIDkvKroo4XvvIzlhYjmmK/ku6Xnu53lr7nnmoTlvLrogIXlp7/mgIHlvLrooYzljaDmnInkuoblgrLlqIflj5vpgIbnmoTlp5Dlp5DniLHojonvvIzpmo/lkI7lj4jlsIbmuIXnuq/lj6/kurrnmoTlprnlprnnurHlpYjkuIDmraXmraXosIPmlZnlvpflvbvlupXmsonmsqbjgILku47mnIDliJ3nmoTlgbfnqqXlgbfpl7vliLDlhoXlv4PnmoTmipfmi5LltKnmuoPjgIIiLCJhbmNob3IiOiIiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvdHMvM28vMTA0OS9wbGF5bGV0X2NvdmVyX2FlNWZhNmM3ZDcwNzg4NjAuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS82Mi90NC8xMDQ5L3BsYXlsZXRfY292ZXJfZmJmN2UzY2VlYTU2ZWYzNC5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTEsMTI4NTIsMTI4NTldLCJ0YWdOYW1lcyI6WyLljp/liJsiLCLpu4TmnpwiLCLoibPpgYciXSwidGFnU2x1Z3MiOlsiWUMiLCJodWFuZ2d1byIsInlhbnl1Il0sInRvdGFsRXBpc29kZSI6MTAsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE4MCwiaGVhdFZhbHVlIjoyMTIzNCwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE2LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ2OjI5LjE0NVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjEzLjUyWiIsInNlb0luZm8iOnsidGl0bGUiOiLprLzniLbnnJ/kurrniYjvvIjlhagxMOmbhu+8iSIsImtleXdvcmxkIjpbIumsvOeItuecn+S6uueJiCIsIueVuOW9ouWutuW6rSIsIuWnkOWmueS6ieWuoCIsIumsvOeItuecn+S6uueJiOWujOaVtOeJiCIsIuWcqOe6v+eciyIsIue7p+eItiIsIueIseiOiSIsIue6seWliCJdLCJkZXNjcmlwdGlvbiI6IueZveWkqeS7luaYr+a4qeaflOS9k+i0tOOAgeeFp+mhvuWutuW6reeahOaooeiMg+e7p+eItu+8jOS4gOWIsOWknOW5lemZjeS4tOS+v+W9u+W6leaSleW8gOS8quijhe+8jOWFiOaYr+S7pee7neWvueeahOW8uuiAheWnv+aAgeW8uuihjOWNoOacieS6huWCsuWoh+WPm+mAhueahOWnkOWnkOeIseiOie+8jOmaj+WQjuWPiOWwhua4hee6r+WPr+S6uueahOWmueWmuee6seWliOS4gOatpeatpeiwg+aVmeW+l+W9u+W6leayieaypuOAguS7juacgOWIneeahOWBt+eqpeWBt+mXu+WIsOWGheW/g+eahOaKl+aLkuW0qea6g+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiumsvOeItuecn+S6uueJiOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NjYzLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wM1QwNzoyNzozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTEwLTEyVDA4OjExOjA0WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wMlQxMDowNDoxMFoiLCJ0aGVtZUlkcyI6WzEyNjg2XSwidGhlbWVOYW1lcyI6WyLkubHkvKYiXSwidGhlbWVTbHVncyI6WyJsdWFubHVuIl0sImNhdGVnb3J5SWRzIjpbMTExMDRdLCJ0aXRsZSI6Iuepv+i/h+iWhOmbvueahOaXqeaZqCDnrKzkuozlraPvvIjlhag56ZuG77yJIiwicGxheU5hbWUiOiLnqb/ov4foloTpm77nmoTml6nmmagg56ys5LqM5a2jIiwiZGVzY3JpcHRpb24iOiLouqvlpITlhpzmnZHnjrDlrp7nlJ/mtLvph43ljovkuYvkuIvnmoTlp5DlpKvmnY7lpKfniZvvvIzpnaLlr7nnnYDlp5Dlp5DkuI7lsI/lp6jlrZDlj4zph43lpLnlh7vkuIvnmoTngavng63li77lvJXvvIzlhoXlv4PnmoTmrLLmnJvkuI7pgZPlvrflupXnur/lj5HnlJ/mv4Dng4jnorDmkp7jgILlprnlprnlpoLppaXkvLzmuLTlnLDkuLvliqjmkqnmi6jvvIzlp5Dlp5DliJnku6Xnu53lr7nnmoTlp7/mgIHnlq/ni4LljaDmnInjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrnqb/ov4foloTpm77nmoTml6nmmagg56ys5LqM5a2j44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysOembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJjaHVhbmd1IiwiZGVzYyI6Iui6q+WkhOWGnOadkeeOsOWunueUn+a0u+mHjeWOi+S5i+S4i+eahOWnkOWkq+adjuWkp+eJm++8jOmdouWvueedgOWnkOWnkOS4juWwj+WnqOWtkOWPjOmHjeWkueWHu+S4i+eahOeBq+eDreWLvuW8le+8jOWGheW/g+eahOassuacm+S4jumBk+W+t+W6lee6v+WPkeeUn+a/gOeDiOeisOaSnuOAguWmueWmueWmgumlpeS8vOa4tOWcsOS4u+WKqOaSqeaLqO+8jOWnkOWnkOWImeS7pee7neWvueeahOWnv+aAgeeWr+eLguWNoOacieOAgiIsImFuY2hvciI6IkpWSUTnsr7pgIkiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UveXovM3gvMTA0OS9wbGF5bGV0X2NvdmVyXzg0YTkzMDRhNGQ5ZTRiZDQuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9vZC95Yi8xMDQ5L3BsYXlsZXRfY292ZXJfODRhOTMwNGE0ZDllNGJkNC5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NjcsMTI4NTksMTI4NjBdLCJ0YWdOYW1lcyI6WyLkuaHmnZEiLCLoibPpgYciLCLkubHkvKYiXSwidGFnU2x1Z3MiOlsieGlhbmdjdW4iLCJ5YW55dSIsImx1YW5sdW4iXSwidG90YWxFcGlzb2RlIjo5LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxMzksImhlYXRWYWx1ZSI6MTc2NTcsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoyMCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0ODoxMS43MjhaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wNlQyMzowMDoxNS4zNTJaIiwic2VvSW5mbyI6eyJ0aXRsZSI6Iuepv+i/h+iWhOmbvueahOaXqeaZqCDnrKzkuozlraPvvIjlhag56ZuG77yJIiwia2V5d29ybGQiOlsi56m/6L+H6JaE6Zu+55qE5pep5pmo56ys5LqM5a2jIiwi5Lmh5p2R6aOO5rWBIiwi5aSa5Lq65re35oiYIiwi56m/6L+H6JaE6Zu+55qE5pep5pmo56ys5LqM5a2j5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5p2O5aSn54mbIiwi5aeQ5aeQIiwi5bCP5aeo5a2QIl0sImRlc2NyaXB0aW9uIjoi6Lqr5aSE5Yac5p2R546w5a6e55Sf5rS76YeN5Y6L5LmL5LiL55qE5aeQ5aSr5p2O5aSn54mb77yM6Z2i5a+5552A5aeQ5aeQ5LiO5bCP5aeo5a2Q5Y+M6YeN5aS55Ye75LiL55qE54Gr54Ot5Yu+5byV77yM5YaF5b+D55qE5qyy5pyb5LiO6YGT5b635bqV57q/5Y+R55Sf5r+A54OI56Kw5pKe44CC5aa55aa55aaC6aWl5Ly85ri05Zyw5Li75Yqo5pKp5ouo77yM5aeQ5aeQ5YiZ5Lul57ud5a+555qE5ae/5oCB55av54uC5Y2g5pyJ44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK56m/6L+H6JaE6Zu+55qE5pep5pmoIOesrOS6jOWto+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDnpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ2NTIsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDA1OjU0OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMjhUMDQ6NTY6MzRaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTA5LTI5VDAyOjM1OjM0WiIsInRoZW1lSWRzIjpbMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNF0sInRpdGxlIjoi5a2Q6LGq55qE56eY5a+G5pWZ5a2m77yI5YWoOOmbhu+8iSIsInBsYXlOYW1lIjoi5a2Q6LGq55qE56eY5a+G5pWZ5a2mIiwiZGVzY3JpcHRpb24iOiLntKfpl63nmoTnp4Hlr4bmiL/pl7TlhoXvvIzliKvlvIDnlJ/pnaLnmoTooaXkuaDor77nqIvkuIDnu4/lvIDlnLrkvr/ov4XpgJ/otorov4flupXnur/vvIzku47ln7rnoYDnmoTnkIborrrmjIflr7zlvbvlupXmu5HlkJHmr6vml6Dkv53nlZnnmoTotaToo7jlrp7mk43jgILkv67plb/nmoTnuqTmiYvjgIHmuKnng63nmoTlj6PohZTku6Xlj4rlh7bni6DnmoTmjLrlhaXkuqTmm7/kuIrmvJTjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlrZDosarnmoTnp5jlr4bmlZnlrabjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw46ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6InppaGFvZGUiLCJkZXNjIjoi57Sn6Zet55qE56eB5a+G5oi/6Ze05YaF77yM5Yir5byA55Sf6Z2i55qE6KGl5Lmg6K++56iL5LiA57uP5byA5Zy65L6/6L+F6YCf6LaK6L+H5bqV57q/77yM5LuO5Z+656GA55qE55CG6K665oyH5a+85b275bqV5ruR5ZCR5q+r5peg5L+d55WZ55qE6LWk6KO45a6e5pON44CC5L+u6ZW/55qE57qk5omL44CB5rip54Ot55qE5Y+j6IWU5Lul5Y+K5Ye254ug55qE5oy65YWl5Lqk5pu/5LiK5ryU44CCIiwiYW5jaG9yIjoiMSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9zNC96ZC8xMDQ5L3BsYXlsZXRfY292ZXJfMjY4NGE0YjljMTk0NTdiMS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzh2L2g3LzEwNDkvcGxheWxldF9jb3Zlcl8yNjg0YTRiOWMxOTQ1N2IxLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1Nl0sInRhZ05hbWVzIjpbIuiBjOWcuuiwg+aVmSJdLCJ0YWdTbHVncyI6WyJaQ1RKIl0sInRvdGFsRXBpc29kZSI6OCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTYwLCJoZWF0VmFsdWUiOjE5Nzc5LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTQsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDg6MDMuNDEzWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDZUMjM6MDA6MTUuOTI5WiIsInNlb0luZm8iOnsidGl0bGUiOiLlrZDosarnmoTnp5jlr4bmlZnlrabvvIjlhag46ZuG77yJIiwia2V5d29ybGQiOlsi5a2Q6LGq55qE56eY5a+G5pWZ5a2mIiwi56eB5pWZ6KGl5LmgIiwi5qyy5pyb5a6e5pONIiwi5a2Q6LGq55qE56eY5a+G5pWZ5a2m5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5a2Q6LGqIiwi56eY5a+G5pWZ5a2mIl0sImRlc2NyaXB0aW9uIjoi57Sn6Zet55qE56eB5a+G5oi/6Ze05YaF77yM5Yir5byA55Sf6Z2i55qE6KGl5Lmg6K++56iL5LiA57uP5byA5Zy65L6/6L+F6YCf6LaK6L+H5bqV57q/77yM5LuO5Z+656GA55qE55CG6K665oyH5a+85b275bqV5ruR5ZCR5q+r5peg5L+d55WZ55qE6LWk6KO45a6e5pON44CC5L+u6ZW/55qE57qk5omL44CB5rip54Ot55qE5Y+j6IWU5Lul5Y+K5Ye254ug55qE5oy65YWl5Lqk5pu/5LiK5ryU44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5a2Q6LGq55qE56eY5a+G5pWZ5a2m44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysOOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fV0sInRvcGljTGlzdCI6W119LHsiaWQiOjExMTA1LCJzbHVnIjoicm10aiIsInRpdGxlIjoi54Ot6Zeo5o6o6I2QIiwiZGVzYyI6IiIsImtleXdvcmQiOltdLCJsYWJlbCI6IiIsInN0eWxlIjoiQyIsImNhcmRCYWNrZ3JvdW5kSW1hZ2UiOiIiLCJtb2R1bGVUeXBlIjoxLCJkYXRhVHlwZSI6MSwicmVjb21tZW5kVHlwZSI6MCwiY2F0ZWdvcnlJZCI6MCwicmFuayI6MiwibGltaXQiOjEwLCJzZW9JbmZvIjp7InRpdGxlIjoi54Ot6Zeo55+t5Ymn5o6o6I2QIC0g6auY5Lq65rCU5aW95Ymn5qac5Y2V5LiO57K+5b2p55+t5Ymn5Zyo57q/6KeC55yLIC0g54af5p6c55+t5YmnIiwia2V5d29ybGQiOlsi54Ot6Zeo55+t5Ymn5o6o6I2QIiwi55+t5Ymn5o6S6KGM5qacIiwi54us5a6254i95YmnIiwi6aG257qn56eB5Y6oIiwi6ay854i255yf5Lq654mIIiwi5pyA5by65pi+56S65ZmoIiwi55m+5LiH5aSn5aWWIiwi5Zyo57q/55yL55+t5YmnIiwi54af5p6c55+t5YmnIl0sImRlc2NyaXB0aW9uIjoi5qyi6L+O5p2l5Yiw54af5p6c55+t5Ymn54Ot6Zeo5o6o6I2Q5LiT5Yy677yB54Gr54Ot55uY54K55YWo572R6auY5Lq65rCU54iG5qy+5aW95Ymn77yM5Li65oKo57K+6YCJ44CK6aG257qn56eB5Y6o44CL44CK6ay854i255yf5Lq654mI44CL44CK5pyA5by65pi+56S65Zmo44CL44CK55m+5LiH5aSn5aWW77ya5a625bqt56aB5b+M5oyR5oiY44CL562J54us5a6254i95Ymn44CC5Ymn5oOF6IqC5aWP57Sn5YeR44CB5Y+N6L2s5LiN5pat77yM5q+P5pel5oyB57ut5pu05paw77yM54K55Ye75Y2z5Yi75Zyo57q/55WF5Lqr57K+5b2p6KeG6KeJ55ub5a6077yBIn0sImxpc3QiOlt7ImlkIjoxNDUyMywic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6dHJ1ZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wM1QxMjoxNDozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTA5LTEyVDIxOjUwOjA1WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMC0wMVQwODowMzoxNloiLCJ0aGVtZUlkcyI6WzEyNjgxLDEyNjg1XSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciLCLpg73luIIiXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiLCJkdXNoaSJdLCJjYXRlZ29yeUlkcyI6WzExMTAyLDExMTA1XSwidGl0bGUiOiLpobbnuqfnp4HljqjvvIjlhagxMOmbhu+8iSIsInBsYXlOYW1lIjoi6aG257qn56eB5Y6oIiwiZGVzY3JpcHRpb24iOiLnoLTkuqflsJHniLflsI/pob7lnKjkuIDlpJzkuYvpl7TlrrbpgZPkuK3okL3vvIzmtYHokL3oh7Pmr5TlvJfliKnlsbHluoTlvZPotbfkuobkuIrpl6jnp4HljqjjgILosIHmlpnku5bng7nliLbnmoTpobbnuqfmlpnnkIbnq5/mnInnnYDml6DkuI7kvKbmr5TnmoTprZTlipvvvIzorqnkuIDkvY3kvY3pq5jotLXkvJjpm4XnmoTosarpl6jotLXlpoflkIPlrozlkI7kuIvpnaLmmKXmva7ms5vmu6XjgIHlvZPlnLrnvp7ogLvmsYLmrKLjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrpobbnuqfnp4HljqjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJkaW5namlzIiwiZGVzYyI6IuegtOS6p+WwkeeIt+Wwj+mhvuWcqOS4gOWknOS5i+mXtOWutumBk+S4reiQve+8jOa1geiQveiHs+avlOW8l+WIqeWxseW6hOW9k+i1t+S6huS4iumXqOengeWOqOOAguiwgeaWmeS7lueDueWItueahOmhtue6p+aWmeeQhuern+acieedgOaXoOS4juS8puavlOeahOmtlOWKm++8jOiuqeS4gOS9jeS9jemrmOi0teS8mOmbheeahOixqumXqOi0teWmh+WQg+WujOWQjuS4i+mdouaYpea9ruazm+a7peOAgeW9k+Wcuue+nuiAu+axguasouOAgiIsImFuY2hvciI6IiIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9tcS9jZy8xMDQ5L3BsYXlsZXRfY292ZXJfNzUyYjk1OTdhZmViZDlhOC5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL20zLzkzLzEwNDkvcGxheWxldF9jb3Zlcl9lNjRkNzkyZTYyODI5YTY1LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MSwxMjg1Ml0sInRhZ05hbWVzIjpbIuWOn+WImyIsIum7hOaenCJdLCJ0YWdTbHVncyI6WyJZQyIsImh1YW5nZ3VvIl0sInRvdGFsRXBpc29kZSI6MTAsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE5OSwiaGVhdFZhbHVlIjoyMzI4MCwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE0LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ2OjIyLjMwMVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjEzLjY0MVoiLCJzZW9JbmZvIjp7InRpdGxlIjoi6aG257qn56eB5Y6o77yI5YWoMTDpm4bvvIkiLCJrZXl3b3JsZCI6WyLpobbnuqfnp4HljqgiLCLosarpl6jnp4HljqgiLCLotLXlpofmsYLmrKIiLCLpobbnuqfnp4HljqjlrozmlbTniYgiLCLlnKjnur/nnIsiLCLlsI/pob4iLCLlpaXmlq/ljaHlvbHlkI4iXSwiZGVzY3JpcHRpb24iOiLnoLTkuqflsJHniLflsI/pob7lnKjkuIDlpJzkuYvpl7TlrrbpgZPkuK3okL3vvIzmtYHokL3oh7Pmr5TlvJfliKnlsbHluoTlvZPotbfkuobkuIrpl6jnp4HljqjjgILosIHmlpnku5bng7nliLbnmoTpobbnuqfmlpnnkIbnq5/mnInnnYDml6DkuI7kvKbmr5TnmoTprZTlipvvvIzorqnkuIDkvY3kvY3pq5jotLXkvJjpm4XnmoTosarpl6jotLXlpoflkIPlrozlkI7kuIvpnaLmmKXmva7ms5vmu6XjgIHlvZPlnLrnvp7ogLvmsYLmrKLjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrpobbnuqfnp4HljqjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDUyOSwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6dHJ1ZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wM1QxMDo1NjozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTA5LTEyVDIxOjUwOjA1WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMC0wMVQwODowMzoxNloiLCJ0aGVtZUlkcyI6WzEyNjgxLDEyNjg2XSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciLCLkubHkvKYiXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiLCJsdWFubHVuIl0sImNhdGVnb3J5SWRzIjpbMTExMDIsMTExMDQsMTExMDVdLCJ0aXRsZSI6IumsvOeItuecn+S6uueJiO+8iOWFqDEw6ZuG77yJIiwicGxheU5hbWUiOiLprLzniLbnnJ/kurrniYgiLCJkZXNjcmlwdGlvbiI6IueZveWkqeS7luaYr+a4qeaflOS9k+i0tOOAgeeFp+mhvuWutuW6reeahOaooeiMg+e7p+eItu+8jOS4gOWIsOWknOW5lemZjeS4tOS+v+W9u+W6leaSleW8gOS8quijhe+8jOWFiOaYr+S7pee7neWvueeahOW8uuiAheWnv+aAgeW8uuihjOWNoOacieS6huWCsuWoh+WPm+mAhueahOWnkOWnkOeIseiOie+8jOmaj+WQjuWPiOWwhua4hee6r+WPr+S6uueahOWmueWmuee6seWliOS4gOatpeatpeiwg+aVmeW+l+W9u+W6leayieaypuOAguS7juacgOWIneeahOWBt+eqpeWBt+mXu+WIsOWGheW/g+eahOaKl+aLkuW0qea6g+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiumsvOeItuecn+S6uueJiOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6Imd1aWZ1emgiLCJkZXNjIjoi55m95aSp5LuW5piv5rip5p+U5L2T6LS044CB54Wn6aG+5a625bqt55qE5qih6IyD57un54i277yM5LiA5Yiw5aSc5bmV6ZmN5Li05L6/5b275bqV5pKV5byA5Lyq6KOF77yM5YWI5piv5Lul57ud5a+555qE5by66ICF5ae/5oCB5by66KGM5Y2g5pyJ5LqG5YKy5aiH5Y+b6YCG55qE5aeQ5aeQ54ix6I6J77yM6ZqP5ZCO5Y+I5bCG5riF57qv5Y+v5Lq655qE5aa55aa557qx5aWI5LiA5q2l5q2l6LCD5pWZ5b6X5b275bqV5rKJ5rKm44CC5LuO5pyA5Yid55qE5YG356ql5YG36Ze75Yiw5YaF5b+D55qE5oqX5ouS5bSp5rqD44CCIiwiYW5jaG9yIjoiIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3RzLzNvLzEwNDkvcGxheWxldF9jb3Zlcl9hZTVmYTZjN2Q3MDc4ODYwLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvNjIvdDQvMTA0OS9wbGF5bGV0X2NvdmVyX2ZiZjdlM2NlZWE1NmVmMzQuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUxLDEyODUyLDEyODU5XSwidGFnTmFtZXMiOlsi5Y6f5YibIiwi6buE5p6cIiwi6Imz6YGHIl0sInRhZ1NsdWdzIjpbIllDIiwiaHVhbmdndW8iLCJ5YW55dSJdLCJ0b3RhbEVwaXNvZGUiOjEwLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxODAsImhlYXRWYWx1ZSI6MjEyMzQsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNiwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0NjoyOS4xNDVaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoxMy41MloiLCJzZW9JbmZvIjp7InRpdGxlIjoi6ay854i255yf5Lq654mI77yI5YWoMTDpm4bvvIkiLCJrZXl3b3JsZCI6WyLprLzniLbnnJ/kurrniYgiLCLnlbjlvaLlrrbluq0iLCLlp5DlprnkuonlrqAiLCLprLzniLbnnJ/kurrniYjlrozmlbTniYgiLCLlnKjnur/nnIsiLCLnu6fniLYiLCLniLHojokiLCLnurHlpYgiXSwiZGVzY3JpcHRpb24iOiLnmb3lpKnku5bmmK/muKnmn5TkvZPotLTjgIHnhafpob7lrrbluq3nmoTmqKHojIPnu6fniLbvvIzkuIDliLDlpJzluZXpmY3kuLTkvr/lvbvlupXmkpXlvIDkvKroo4XvvIzlhYjmmK/ku6Xnu53lr7nnmoTlvLrogIXlp7/mgIHlvLrooYzljaDmnInkuoblgrLlqIflj5vpgIbnmoTlp5Dlp5DniLHojonvvIzpmo/lkI7lj4jlsIbmuIXnuq/lj6/kurrnmoTlprnlprnnurHlpYjkuIDmraXmraXosIPmlZnlvpflvbvlupXmsonmsqbjgILku47mnIDliJ3nmoTlgbfnqqXlgbfpl7vliLDlhoXlv4PnmoTmipfmi5LltKnmuoPjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrprLzniLbnnJ/kurrniYjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDU5Miwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6dHJ1ZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wM1QwNTozODozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTA5LTEyVDIxOjUwOjA3WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMC0wMVQwODowMDo1NFoiLCJ0aGVtZUlkcyI6WzEyNjgxLDEyNjg4XSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciLCLmvKvliaciXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiLCJtYW5qdSJdLCJjYXRlZ29yeUlkcyI6WzExMTAyLDExMTA1XSwidGl0bGUiOiLmnIDlvLrmmL7npLrlmajvvIjlhagxMOmbhu+8iSIsInBsYXlOYW1lIjoi5pyA5by65pi+56S65ZmoIiwiZGVzY3JpcHRpb24iOiLkuLrnlYXnjqnoi7Hpm4TogZTnm5/vvIzku5blnKjlup/lk4Hnq5nmt5jlm57kuIDlj7Dms5vnnYDor6HlvILojaflhYnnmoTkuozmiYvmmL7npLrlsY/jgILkuIDnu4/pgJrnlLXkuI3ku4XnlLvotKjpgLznnJ/vvIzmm7Tmi6XmnInkuoblsIbnjrDlrp7ogonouqvigJzmlbDkvY3lrp7kvZPljJbigJ3nmoTpgIblpKnnpZ7lipvjgILlvIDmnLrnnqzpl7Tku5bnm7TmjqXnqb/otorov5vlhaXniIbmrL7nvZHmuLjkuJbnlYzjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmnIDlvLrmmL7npLrlmajjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJ6dWlxaWFuIiwiZGVzYyI6IuS4uueVheeOqeiLsembhOiBlOebn++8jOS7luWcqOW6n+WTgeermea3mOWbnuS4gOWPsOazm+edgOivoeW8guiNp+WFieeahOS6jOaJi+aYvuekuuWxj+OAguS4gOe7j+mAmueUteS4jeS7heeUu+i0qOmAvOecn++8jOabtOaLpeacieS6huWwhueOsOWunuiCiei6q+KAnOaVsOS9jeWunuS9k+WMluKAneeahOmAhuWkqeelnuWKm+OAguW8gOacuueerOmXtOS7luebtOaOpeepv+i2iui/m+WFpeeIhuasvue9kea4uOS4lueVjOOAgiIsImFuY2hvciI6IiIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS81Yy9sZi8xMDQ5L3BsYXlsZXRfY292ZXJfMWYxNjRiZDRiOTUzMGFjYS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzJlL3VjLzEwNDkvcGxheWxldF9jb3Zlcl85MGM5NmY3MTVkNTViYjk3LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MSwxMjg1MiwxMjg1N10sInRhZ05hbWVzIjpbIuWOn+WImyIsIum7hOaenCIsIuWPpOS7oyJdLCJ0YWdTbHVncyI6WyJZQyIsImh1YW5nZ3VvIiwiZ3VkYWkiXSwidG90YWxFcGlzb2RlIjoxMCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTg4LCJoZWF0VmFsdWUiOjIzNDM3LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTQsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDc6MjYuMDAzWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MTQuMzE0WiIsInNlb0luZm8iOnsidGl0bGUiOiLmnIDlvLrmmL7npLrlmajvvIjlhagxMOmbhu+8iSIsImtleXdvcmxkIjpbIuacgOW8uuaYvuekuuWZqCIsIua4uOaIj+epv+i2iiIsIuiZmuaLn+WQjuWuqyIsIuacgOW8uuaYvuekuuWZqOWujOaVtOeJiCIsIuWcqOe6v+eciyIsIueci+adv+WomCIsIuWls+aImOelniJdLCJkZXNjcmlwdGlvbiI6IuS4uueVheeOqeiLsembhOiBlOebn++8jOS7luWcqOW6n+WTgeermea3mOWbnuS4gOWPsOazm+edgOivoeW8guiNp+WFieeahOS6jOaJi+aYvuekuuWxj+OAguS4gOe7j+mAmueUteS4jeS7heeUu+i0qOmAvOecn++8jOabtOaLpeacieS6huWwhueOsOWunuiCiei6q+KAnOaVsOS9jeWunuS9k+WMluKAneeahOmAhuWkqeelnuWKm+OAguW8gOacuueerOmXtOS7luebtOaOpeepv+i2iui/m+WFpeeIhuasvue9kea4uOS4lueVjOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuacgOW8uuaYvuekuuWZqOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NTEyLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAyVDIwOjE2OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTJUMjE6NTA6MDZaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAxVDA4OjAwOjU0WiIsInRoZW1lSWRzIjpbMTI2ODEsMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyIsIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiIsImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMiwxMTEwNCwxMTEwNV0sInRpdGxlIjoi55m+5LiH5aSn5aWW77ya5a625bqt56aB5b+M5oyR5oiY77yI5YWoOOmbhu+8iSIsInBsYXlOYW1lIjoi55m+5LiH5aSn5aWW77ya5a625bqt56aB5b+M5oyR5oiYIiwiZGVzY3JpcHRpb24iOiLkuozljYHlm5vlsoHnmoTmnY7kvJ/nu4jml6XlhbzogYzmiZPlhavku73lt6XvvIznmKbpqqjltpnls4vov57ngpLom4vkuZ/oiI3kuI3lvpflkIPvvIzov5jopoHppbHlj5fkurLlprnlprnlq4zlvIPlj6rkvJrmi7/lm57lh6DkuKrpkqLplZrjgILpnaLlr7novabnpbjouqvkuqHnmoTniLbkurLkuI7og4zotJ/nmb7kuIfmiL/otLfnmoTnu53looPvvIzlhajlrrbllK/mnInku5bkuIDkurrlkqzniZnmrbvmiZvjgILlvZPkuIDlvKDpgZfokL3lnKjkupTmmJ/phZLlupfnmoTng6vph5HljaHniYfmta7njrDnnLzliY3jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrnmb7kuIflpKflpZbvvJrlrrbluq3npoHlv4zmjJHmiJjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw46ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImJhaXdhbmQiLCJkZXNjIjoi5LqM5Y2B5Zub5bKB55qE5p2O5Lyf57uI5pel5YW86IGM5omT5YWr5Lu95bel77yM55im6aqo5baZ5bOL6L+e54KS6JuL5Lmf6IiN5LiN5b6X5ZCD77yM6L+Y6KaB6aWx5Y+X5Lqy5aa55aa55auM5byD5Y+q5Lya5ou/5Zue5Yeg5Liq6ZKi6ZWa44CC6Z2i5a+56L2m56W46Lqr5Lqh55qE54i25Lqy5LiO6IOM6LSf55m+5LiH5oi/6LS355qE57ud5aKD77yM5YWo5a625ZSv5pyJ5LuW5LiA5Lq65ZKs54mZ5q275omb44CC5b2T5LiA5byg6YGX6JC95Zyo5LqU5pif6YWS5bqX55qE54Or6YeR5Y2h54mH5rWu546w55y85YmN44CCIiwiYW5jaG9yIjoiIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzFvL2diLzEwNDkvcGxheWxldF9jb3Zlcl82MGIyNGM3MjE1YTY5Y2E2LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvYXIvbHEvMTA0OS9wbGF5bGV0X2NvdmVyXzQwZjRhZGI1Y2JiNmM3NjQuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUxLDEyODUyLDEyODU5XSwidGFnTmFtZXMiOlsi5Y6f5YibIiwi6buE5p6cIiwi6Imz6YGHIl0sInRhZ1NsdWdzIjpbIllDIiwiaHVhbmdndW8iLCJ5YW55dSJdLCJ0b3RhbEVwaXNvZGUiOjgsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE1OSwiaGVhdFZhbHVlIjoxOTcwOCwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjEzLCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ2OjA4LjgzMVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjE2LjM3OVoiLCJzZW9JbmZvIjp7InRpdGxlIjoi55m+5LiH5aSn5aWW77ya5a625bqt56aB5b+M5oyR5oiY77yI5YWoOOmbhu+8iSIsImtleXdvcmxkIjpbIueZvuS4h+Wkp+WlluWutuW6reemgeW/jOaMkeaImCIsIuS5seS8puaegemZkCIsIueZvuS4h+Wkp+WlluWutuW6reemgeW/jOaMkeaImOWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuadjuS8nyIsIuavjeS6siIsIuWmueWmuSJdLCJkZXNjcmlwdGlvbiI6IuS6jOWNgeWbm+WygeeahOadjuS8n+e7iOaXpeWFvOiBjOaJk+WFq+S7veW3pe+8jOeYpumqqOW2meWzi+i/nueCkuibi+S5n+iIjeS4jeW+l+WQg++8jOi/mOimgemlseWPl+S6suWmueWmueWrjOW8g+WPquS8muaLv+WbnuWHoOS4qumSoumVmuOAgumdouWvuei9pueluOi6q+S6oeeahOeItuS6suS4juiDjOi0n+eZvuS4h+aIv+i0t+eahOe7neWig++8jOWFqOWutuWUr+acieS7luS4gOS6uuWSrOeJmeatu+aJm+OAguW9k+S4gOW8oOmBl+iQveWcqOS6lOaYn+mFkuW6l+eahOeDq+mHkeWNoeeJh+a1rueOsOecvOWJjeOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiueZvuS4h+Wkp+Wllu+8muWutuW6reemgeW/jOaMkeaImOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDjpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ2NjgsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAyVDE3OjQyOjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMDNUMTE6MDA6MDBaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAzVDExOjI0OjI4WiIsInRoZW1lSWRzIjpbMTI2ODRdLCJ0aGVtZU5hbWVzIjpbIuepv+i2iiJdLCJ0aGVtZVNsdWdzIjpbImNodWFueXVlIl0sImNhdGVnb3J5SWRzIjpbMTExMDVdLCJ0aXRsZSI6IuWCrOecoOecvOmVnCIsInBsYXlOYW1lIjoi5YKs55yg55y86ZWcIiwiZGVzY3JpcHRpb24iOiLmhI/lpJbmlLbliLDkuIDkuKrmsqHmnInlr4Tku7blnLDlnYDnmoTnpZ7np5jljIXoo7nvvIzph4zpnaLnq5/nhLbourrnnYDkuIDlia/og73lpJ/mjozmjqfku5bkurrmhI/lv5fnmoTnpZ7nuqflgqznnKDnnLzplZzvvIHku5bmirHnnYDljYrkv6HljYrnlpHnmoTlv4PmgIHmiLTkuIrov5vooYzmtYvor5XvvIzlubPml6Xph4zpq5jpq5jlnKjkuIrjgIHlr7nniLHnrZTkuI3nkIbnmoTkvbPkvbPlp5DlnKjnm67lhYnkuqTmsYfnmoTnnqzpl7Tkvr/lj5jlvpfnmb7kvp3nmb7pobrjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlgqznnKDnnLzplZzjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwz6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImN1aW1pYTMiLCJkZXNjIjoi5oSP5aSW5pS25Yiw5LiA5Liq5rKh5pyJ5a+E5Lu25Zyw5Z2A55qE56We56eY5YyF6KO577yM6YeM6Z2i56uf54S26Lq6552A5LiA5Ymv6IO95aSf5o6M5o6n5LuW5Lq65oSP5b+X55qE56We57qn5YKs55yg55y86ZWc77yB5LuW5oqx552A5Y2K5L+h5Y2K55aR55qE5b+D5oCB5oi05LiK6L+b6KGM5rWL6K+V77yM5bmz5pel6YeM6auY6auY5Zyo5LiK44CB5a+554ix562U5LiN55CG55qE5L2z5L2z5aeQ5Zyo55uu5YWJ5Lqk5rGH55qE556s6Ze05L6/5Y+Y5b6X55m+5L6d55m+6aG644CCIiwiYW5jaG9yIjoiLSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS82bi9vMy8xMDQ5L3BsYXlsZXRfY292ZXJfZGVkNzFiZWU5NjVjYjUxNS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiIiLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NjQsMTI4NTcsMTI4NTldLCJ0YWdOYW1lcyI6WyLlgqznnKAiLCLlj6Tku6MiLCLoibPpgYciXSwidGFnU2x1Z3MiOlsiY3VpbWlhbiIsImd1ZGFpIiwieWFueXUiXSwidG90YWxFcGlzb2RlIjozLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNDksImhlYXRWYWx1ZSI6MTc5NzgsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoyMCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0ODoxNC40MjlaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDowNi4zNFoiLCJzZW9JbmZvIjp7InRpdGxlIjoi5YKs55yg55y86ZWcIiwia2V5d29ybGQiOlsi5YKs55yg55y86ZWcIiwi56We57qn5YKs55ygIiwi5o6M5o6n5qyyIiwi5YKs55yg55y86ZWc5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5L2z5L2z5aeQIl0sImRlc2NyaXB0aW9uIjoi5oSP5aSW5pS25Yiw5LiA5Liq5rKh5pyJ5a+E5Lu25Zyw5Z2A55qE56We56eY5YyF6KO577yM6YeM6Z2i56uf54S26Lq6552A5LiA5Ymv6IO95aSf5o6M5o6n5LuW5Lq65oSP5b+X55qE56We57qn5YKs55yg55y86ZWc77yB5LuW5oqx552A5Y2K5L+h5Y2K55aR55qE5b+D5oCB5oi05LiK6L+b6KGM5rWL6K+V77yM5bmz5pel6YeM6auY6auY5Zyo5LiK44CB5a+554ix562U5LiN55CG55qE5L2z5L2z5aeQ5Zyo55uu5YWJ5Lqk5rGH55qE556s6Ze05L6/5Y+Y5b6X55m+5L6d55m+6aG644CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5YKs55yg55y86ZWc44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDkxMSwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjp0cnVlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjp0cnVlLCJiYW5uZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2ExL2kxLzEwNDkvenliLTAxNy0zJTIwJUU3JTkwJUJDJUU2JTk4JThFJUU3JUE1JTlFJUU1JUE1JUIzJUU1JUJEJTk1JTIwZXAzLndlYnAiLCJtb2JpbGVCYW5uZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzF0L2gzLzEwNDkvNS5wbmciLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDJUMDM6NDE6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMC0wM1QxMTo0NTowMFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMDVUMDM6MDE6MzVaIiwidGhlbWVJZHMiOlsxMjY4MSwxMjY4Ml0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIiwi5LuZ5L6gIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIiwieGlhbnhpYSJdLCJjYXRlZ29yeUlkcyI6WzExMTAyLDExMTA1XSwidGl0bGUiOiLnkLzmmI7npZ7lpbPlvZUgRVAzIOeBq+eDreS4iuaYoOS4re+8gSIsInBsYXlOYW1lIjoi55C85piO56We5aWz5b2VIEVQMyDngavng63kuIrmmKDkuK3vvIEiLCJkZXNjcmlwdGlvbiI6IuiMg+aBkuaenOaWreaMpeWJkeaWqeadgOS6huS4gOebtOasuui+seS4iuWumOaCoOeahOmYtOmBk+S4u++8jOaIkOWKn+WkuuWPlumYtOmYs+S7pOS4juacuuWvhuS/oeS7tu+8jOS7luW9k+WNs+WGs+aEj+S7peaJi+S4remVv+WJkeiqk+atu+WkuuWbnuWJkeWul+WkseWOu+eahOS4gOWIh++8jOW5tuWKv+imgeaLv+S4i+ivlemBk+Wkp+S8mueahOaXoOS4iumtgemmluOAgumZpOWkleS5i+WknO+8jOWPtuWuieWmrueJueaEj+aLieedgOS7lueZu+S4iumrmOiAuOeahOaOpeWkqealvOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiueQvOaYjuelnuWls+W9lSBFUDMg54Gr54Ot5LiK5pig5Lit77yB44CL5YWo6ZuG5Zyo57q/6KeC55yL44CB5Ymn5oOF5LuL57uN5Y+K5a6M5pW06YCJ6ZuG77yM5bm25oyB57ut5pu05paw55u45YWz54Ot6Zeo55+t5Ymn44CCIiwic2x1ZyI6InFpb25nbTMiLCJkZXNjIjoi6IyD5oGS5p6c5pat5oyl5YmR5pap5p2A5LqG5LiA55u05qy66L6x5LiK5a6Y5oKg55qE6Zi06YGT5Li777yM5oiQ5Yqf5aS65Y+W6Zi06Ziz5Luk5LiO5py65a+G5L+h5Lu277yM5LuW5b2T5Y2z5Yaz5oSP5Lul5omL5Lit6ZW/5YmR6KqT5q275aS65Zue5YmR5a6X5aSx5Y6755qE5LiA5YiH77yM5bm25Yq/6KaB5ou/5LiL6K+V6YGT5aSn5Lya55qE5peg5LiK6a2B6aaW44CC6Zmk5aSV5LmL5aSc77yM5Y+25a6J5aau54m55oSP5ouJ552A5LuW55m75LiK6auY6IC455qE5o6l5aSp5qW844CCIiwiYW5jaG9yIjoi5Y6f5YibIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzQ2L3lwLzEwNDkvcGxheWxldF9jb3Zlcl8wMjMyYTc3MGIwMGRhYjY3LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UveWwvd2IvMTA0OS9wbGF5bGV0X2NvdmVyX2VjOTk4Y2UxNjg3NDFiNDcuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUxLDEyODUyLDEyODU0XSwidGFnTmFtZXMiOlsi5Y6f5YibIiwi6buE5p6cIiwi5LuZ5L6gIl0sInRhZ1NsdWdzIjpbIllDIiwiaHVhbmdndW8iLCJ4aWFueGlhIl0sInRvdGFsRXBpc29kZSI6MSwidXBkYXRlU3RhdHVzIjoyLCJjb3VudEJyb3dzZSI6MzA5LCJoZWF0VmFsdWUiOjMyMjg3LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTYsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDk6MDY6NTEuMjUyWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDRUMTA6MDA6NTkuNzEzWiIsInNlb0luZm8iOnsidGl0bGUiOiLnkLzmmI7npZ7lpbPlvZUgRVAzIOeBq+eDreS4iuaYoOS4re+8gSIsImtleXdvcmxkIjpbIueQvOaYjuelnuWls+W9lUVQM+eBq+eDreS4iuaYoOS4rSIsIueQvOaYjuelnuWls+W9lSIsIuWJkeWul+WvueWGsyIsIueQvOaYjuelnuWls+W9lUVQM+eBq+eDreS4iuaYoOS4reWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuiMg+aBkiIsIuS4iuWumOaCoCIsIuWPtuWuieWmriIsIumZhuWYiemdmSJdLCJkZXNjcmlwdGlvbiI6IuiMg+aBkuaenOaWreaMpeWJkeaWqeadgOS6huS4gOebtOasuui+seS4iuWumOaCoOeahOmYtOmBk+S4u++8jOaIkOWKn+WkuuWPlumYtOmYs+S7pOS4juacuuWvhuS/oeS7tu+8jOS7luW9k+WNs+WGs+aEj+S7peaJi+S4remVv+WJkeiqk+atu+WkuuWbnuWJkeWul+WkseWOu+eahOS4gOWIh++8jOW5tuWKv+imgeaLv+S4i+ivlemBk+Wkp+S8mueahOaXoOS4iumtgemmluOAgumZpOWkleS5i+WknO+8jOWPtuWuieWmrueJueaEj+aLieedgOS7lueZu+S4iumrmOiAuOeahOaOpeWkqealvOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiueQvOaYjuelnuWls+W9lSBFUDMg54Gr54Ot5LiK5pig5Lit77yB44CL5YWo6ZuG5Zyo57q/6KeC55yL44CB5Ymn5oOF5LuL57uN5Y+K5a6M5pW06YCJ6ZuG77yM5bm25oyB57ut5pu05paw55u45YWz54Ot6Zeo55+t5Ymn44CCIn19LHsiaWQiOjE0NjE4LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAyVDAxOjAyOjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTlUMDM6MzQ6MjZaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA0VDEyOjEwOjU0WiIsInRoZW1lSWRzIjpbMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNCwxMTEwNV0sInRpdGxlIjoi5q+N5LiK5pS755Wl77yI5YWoOembhu+8iSIsInBsYXlOYW1lIjoi5q+N5LiK5pS755WlIiwiZGVzY3JpcHRpb24iOiLmraPlpITkuo7ooYDmsJTmlrnliJrlubTnuqrnmoTlsJHlubTvvIzlsIbnlq/ni4LnmoTlvoHmnI3nm67moIfmgoTnhLbplIHlrprlnKjkuoboh6rlt7HnmoTkurLnlJ/mr43kurLouqvkuIrjgILku47otbfliJ3ml6XluLjnlJ/mtLvkuK3nnIvkvLzkuI3nu4/mhI/nmoTogqLkvZPor5XmjqLvvIzliLDlkI7mnaXkuIDmraXmraXnqoHnoLTkvKbnkIblupXnur/nmoTmt7HluqbmsonmsqbjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmr43kuIrmlLvnlaXjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxOembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJtdXNoYW4yIiwiZGVzYyI6Iuato+WkhOS6juihgOawlOaWueWImuW5tOe6queahOWwkeW5tO+8jOWwhueWr+eLgueahOW+geacjeebruagh+aChOeEtumUgeWumuWcqOS6huiHquW3seeahOS6sueUn+avjeS6sui6q+S4iuOAguS7jui1t+WIneaXpeW4uOeUn+a0u+S4reeci+S8vOS4jee7j+aEj+eahOiCouS9k+ivleaOou+8jOWIsOWQjuadpeS4gOatpeatpeeqgeegtOS8pueQhuW6lee6v+eahOa3seW6puayieaypuOAgiIsImFuY2hvciI6InllIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzY0L2ptLzEwNDkvcGxheWxldF9jb3Zlcl9lZjJmOTU0YzY1YjQ0ODI5LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvcGwvMHEvMTA0OS9wbGF5bGV0X2NvdmVyX2VmMmY5NTRjNjViNDQ4MjkuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODYxLDEyODYwXSwidGFnTmFtZXMiOlsi5q+N5a2QIiwi5Lmx5LymIl0sInRhZ1NsdWdzIjpbIm11emkiLCJsdWFubHVuIl0sInRvdGFsRXBpc29kZSI6MTksInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjMwOCwiaGVhdFZhbHVlIjozNTE2NiwiY291bnRDb2xsZWN0IjoxLCJjb3VudExpa2UiOjE3LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ3OjQxLjU5NFoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAwOjAwOjE2LjgxNVoiLCJzZW9JbmZvIjp7InRpdGxlIjoi5q+N5LiK5pS755Wl77yI5YWoOembhu+8iSIsImtleXdvcmxkIjpbIuavjeS4iuaUu+eVpSIsIuavjeWtkOiDjOW+tyIsIuemgeW/jOayieaypiIsIuavjeS4iuaUu+eVpeWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuWwkeW5tCIsIuavjeS4iiJdLCJkZXNjcmlwdGlvbiI6Iuato+WkhOS6juihgOawlOaWueWImuW5tOe6queahOWwkeW5tO+8jOWwhueWr+eLgueahOW+geacjeebruagh+aChOeEtumUgeWumuWcqOS6huiHquW3seeahOS6sueUn+avjeS6sui6q+S4iuOAguS7jui1t+WIneaXpeW4uOeUn+a0u+S4reeci+S8vOS4jee7j+aEj+eahOiCouS9k+ivleaOou+8jOWIsOWQjuadpeS4gOatpeatpeeqgeegtOS8pueQhuW6lee6v+eahOa3seW6puayieaypuOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuavjeS4iuaUu+eVpeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDE56ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NTgxLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAxVDE5OjM1OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTJUMjE6NTA6MDVaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAxVDA4OjAwOjU0WiIsInRoZW1lSWRzIjpbMTI2ODEsMTI2ODVdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyIsIumDveW4giJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiIsImR1c2hpIl0sImNhdGVnb3J5SWRzIjpbMTExMDIsMTExMDVdLCJ0aXRsZSI6IuWOi+aKkeeahOS4u+Wmh++8iOWFqDEw6ZuG77yJIiwicGxheU5hbWUiOiLljovmipHnmoTkuLvlpociLCJkZXNjcmlwdGlvbiI6IuWutuW6reS4u+Wmh+mVv+acn+a3semZt+S4p+WBtuW8j+WpmuWnu+eahOazpea9re+8jOS4iOWkq+S4ieW5tOS4jeeisOWlueOAgeS4jee7meeUn+a0u+i0uei/mOWFrOeEtuWGt+a8oOWHuui9qO+8jOWlueWPquiDveS4gOWRs+makOW/jeW6puaXpeOAguebtOWIsOS4gOWcuuaDqOeDiOi9pueluOS4reWlueiiq+eUt+S4u+inkuaJgOaQreaVke+8jOWvueaWueS4gOecvOeci+epv+WlueWGheW/g+eahOaXoOWwveWOi+aKkeOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWOi+aKkeeahOS4u+Wmh+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6InlheWlkZXoiLCJkZXNjIjoi5a625bqt5Li75aaH6ZW/5pyf5rex6Zm35Lin5YG25byP5ama5ae755qE5rOl5r2t77yM5LiI5aSr5LiJ5bm05LiN56Kw5aW544CB5LiN57uZ55Sf5rS76LS56L+Y5YWs54S25Ya35ryg5Ye66L2o77yM5aW55Y+q6IO95LiA5ZGz6ZqQ5b+N5bqm5pel44CC55u05Yiw5LiA5Zy65oOo54OI6L2m56W45Lit5aW56KKr55S35Li76KeS5omA5pCt5pWR77yM5a+55pa55LiA55y855yL56m/5aW55YaF5b+D55qE5peg5bC95Y6L5oqR44CCIiwiYW5jaG9yIjoiIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL216L3VxLzEwNDkvcGxheWxldF9jb3Zlcl84NGY3N2EzZTBiNmQ2ZTVkLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2Uvamsvc2ovMTA0OS9wbGF5bGV0X2NvdmVyXzhlMjg2YzZmMmY5ODE5MTEuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUxLDEyODUyLDEyODYzXSwidGFnTmFtZXMiOlsi5Y6f5YibIiwi6buE5p6cIiwiTlRS57u/5bi9Il0sInRhZ1NsdWdzIjpbIllDIiwiaHVhbmdndW8iLCJudHJsdm1hbyJdLCJ0b3RhbEVwaXNvZGUiOjEwLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNzIsImhlYXRWYWx1ZSI6MTk3MTgsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxMSwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0NzoxNy4wNDFaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoxMy43NDdaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuWOi+aKkeeahOS4u+Wmh++8iOWFqDEw6ZuG77yJIiwia2V5d29ybGQiOlsi5Y6L5oqR55qE5Li75aaHIiwi5Li75aaH6KeJ6YaSIiwi5oOF5oSf5pWR6LWOIiwi5Y6L5oqR55qE5Li75aaH5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5Li75aaHIiwi55S35Li76KeSIl0sImRlc2NyaXB0aW9uIjoi5a625bqt5Li75aaH6ZW/5pyf5rex6Zm35Lin5YG25byP5ama5ae755qE5rOl5r2t77yM5LiI5aSr5LiJ5bm05LiN56Kw5aW544CB5LiN57uZ55Sf5rS76LS56L+Y5YWs54S25Ya35ryg5Ye66L2o77yM5aW55Y+q6IO95LiA5ZGz6ZqQ5b+N5bqm5pel44CC55u05Yiw5LiA5Zy65oOo54OI6L2m56W45Lit5aW56KKr55S35Li76KeS5omA5pCt5pWR77yM5a+55pa55LiA55y855yL56m/5aW55YaF5b+D55qE5peg5bC95Y6L5oqR44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5Y6L5oqR55qE5Li75aaH44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ1MjcsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6dHJ1ZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6dHJ1ZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6ZmFsc2UsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3VzL2c2LzEwNDkvenliLTAwNy01JTIwJUU2JTlFJTgxJUU1JTkzJTgxJUU1JUFFJUI2JUU0JUI4JTgxJTIwZXAxLndlYnAiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDFUMDg6Mzk6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0wOS0xMlQyMTo1MDowNFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMDFUMDg6MDM6MTZaIiwidGhlbWVJZHMiOlsxMjY4MSwxMjY4NCwxMjY4M10sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIiwi56m/6LaKIiwi5Y+k6KOFIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIiwiY2h1YW55dWUiLCJndXpodWFuZyJdLCJjYXRlZ29yeUlkcyI6WzExMTAyLDExMTA1XSwidGl0bGUiOiLlup/mn7TmnYLlvbnvvIjlhagxNembhu+8iSIsInBsYXlOYW1lIjoi5bqf5p+05p2C5b25IiwiZGVzY3JpcHRpb24iOiLnjrDku6PmuLjmiI/lroXokKflsJjmhI/lpJbnqb/otoroh7PmrabkvqDkuJbnlYzvvIzmsqbkuLrlhajlkZjnmoblpbPnmoTnmb7oirHlrqvmnIDlupXlsYLmn7TmiL/mnYLlvbnvvIzmnKzku6XkuLrmraTnlJ/lj6rog73lgZrkupvnspfmtLvjgILnm7TliLDnl4XlgJLlkI7ooqvmnpfmtYXlhL/ku6Xlj4zkv67np5jms5XljJbop6Plr5LlhrDliafmr5LvvIzpobrlir/kuaDlvpfnu53kuJbjgIrnjonlpbPlv4Pnu4/jgIvkuI7jgIrkuZ3pmLTnnJ/nu4/jgIvjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlup/mn7TmnYLlvbnjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxNembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJmZWljaGFpIiwiZGVzYyI6IueOsOS7o+a4uOaIj+WuheiQp+WwmOaEj+Wkluepv+i2iuiHs+atpuS+oOS4lueVjO+8jOaypuS4uuWFqOWRmOeahuWls+eahOeZvuiKseWuq+acgOW6leWxguaftOaIv+adguW9ue+8jOacrOS7peS4uuatpOeUn+WPquiDveWBmuS6m+eyl+a0u+OAguebtOWIsOeXheWAkuWQjuiiq+ael+a1heWEv+S7peWPjOS/ruenmOazleWMluino+WvkuWGsOWJp+avku+8jOmhuuWKv+S5oOW+l+e7neS4luOAiueOieWls+W/g+e7j+OAi+S4juOAiuS5nemYtOecn+e7j+OAi+OAgiIsImFuY2hvciI6IiIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS94Ny96Zy8xMDQ5L3BsYXlsZXRfY292ZXJfYmQ2MTgwZmNkYzJhMDIyOS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzlzL2FsLzEwNDkvcGxheWxldF9jb3Zlcl81MzRmMDZhMDA4NmEwZDIzLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MSwxMjg1MiwxMjg1NF0sInRhZ05hbWVzIjpbIuWOn+WImyIsIum7hOaenCIsIuS7meS+oCJdLCJ0YWdTbHVncyI6WyJZQyIsImh1YW5nZ3VvIiwieGlhbnhpYSJdLCJ0b3RhbEVwaXNvZGUiOjE1LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNTgsImhlYXRWYWx1ZSI6MTkxNDUsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0NjoyNi4xNDJaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoxMi45ODFaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuW6n+aftOadguW9ue+8iOWFqDE16ZuG77yJIiwia2V5d29ybGQiOlsi5bqf5p+05p2C5b25Iiwi5q2m5L6g5Y+M5L+uIiwi55m+6Iqx5a6r5p2C5b25Iiwi5bqf5p+05p2C5b255a6M5pW054mIIiwi5Zyo57q/55yLIiwi6JCn5bCYIiwi5p6X5rWF5YS/Il0sImRlc2NyaXB0aW9uIjoi546w5Luj5ri45oiP5a6F6JCn5bCY5oSP5aSW56m/6LaK6Iez5q2m5L6g5LiW55WM77yM5rKm5Li65YWo5ZGY55qG5aWz55qE55m+6Iqx5a6r5pyA5bqV5bGC5p+05oi/5p2C5b2577yM5pys5Lul5Li65q2k55Sf5Y+q6IO95YGa5Lqb57KX5rS744CC55u05Yiw55eF5YCS5ZCO6KKr5p6X5rWF5YS/5Lul5Y+M5L+u56eY5rOV5YyW6Kej5a+S5Yaw5Ymn5q+S77yM6aG65Yq/5Lmg5b6X57ud5LiW44CK546J5aWz5b+D57uP44CL5LiO44CK5Lmd6Zi055yf57uP44CL44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5bqf5p+05p2C5b2544CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTXpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ1NjksInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOnRydWUsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOmZhbHNlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTEwLTMxVDE3OjM3OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTJUMjE6NTA6MDRaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAxVDA4OjAzOjE2WiIsInRoZW1lSWRzIjpbMTI2ODEsMTI2ODNdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyIsIuWPpOijhSJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiIsImd1emh1YW5nIl0sImNhdGVnb3J5SWRzIjpbMTExMDIsMTExMDVdLCJ0aXRsZSI6IuawtOa1kua3q+S8oCIsInBsYXlOYW1lIjoi5rC05rWS5rer5LygIiwiZGVzY3JpcHRpb24iOiLmooHlsbHms4rotavnhLbmmK/nlLHkuIDluK7ooqvml6fml7bku6Pml6Dmg4XpgZflvIPnmoTng4jmgKflpbPlrZDlu7rnq4vnmoTni6znq4vlm73luqbjgILmrablqIDmgKfmhJ/lhrfoibPjgIHmraboibrotoXnvqTvvIzot6/ov4fpmLPosLfljr/ml7bor6/ppa7kuobng4jmgKfigJzmt6vmrLLlkIjmrKLphZLigJ3vvIzoja/lirLkuIrmtozmtZHouqvlj5Hng6vjgIHog7jopZ/lpKflvIDjgILlpbnni6zpl6/mma/pmb3lhojpga3pgYfkuIDlpLTkv67miJDkurrlvaLnmoTlh7bnjJvomY7lhb3jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmsLTmtZLmt6vkvKDjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwy6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6InNodWlodXkiLCJkZXNjIjoi5qKB5bGx5rOK6LWr54S25piv55Sx5LiA5biu6KKr5pen5pe25Luj5peg5oOF6YGX5byD55qE54OI5oCn5aWz5a2Q5bu656uL55qE54us56uL5Zu95bqm44CC5q2m5aiA5oCn5oSf5Ya36Imz44CB5q2m6Im66LaF576k77yM6Lev6L+H6Ziz6LC35Y6/5pe26K+v6aWu5LqG54OI5oCn4oCc5rer5qyy5ZCI5qyi6YWS4oCd77yM6I2v5Yqy5LiK5raM5rWR6Lqr5Y+R54Or44CB6IO46KWf5aSn5byA44CC5aW554us6Zev5pmv6Zm95YaI6YGt6YGH5LiA5aS05L+u5oiQ5Lq65b2i55qE5Ye254yb6JmO5YW944CCIiwiYW5jaG9yIjoiIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzViL3J0LzEwNDkvcGxheWxldF9jb3Zlcl8yNGFkMTZmMDUyMDg2ODUyLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvenkvenkvMTA0OS9wbGF5bGV0X2NvdmVyX2UzNGI0ZDhiMDFhOWZjYjMuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODUxLDEyODUyLDEyODU3XSwidGFnTmFtZXMiOlsi5Y6f5YibIiwi6buE5p6cIiwi5Y+k5LujIl0sInRhZ1NsdWdzIjpbIllDIiwiaHVhbmdndW8iLCJndWRhaSJdLCJ0b3RhbEVwaXNvZGUiOjIsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE1NCwiaGVhdFZhbHVlIjoxODM4MywiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjEwLCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ3OjA4LjQ0NVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjEzLjI3MVoiLCJzZW9JbmZvIjp7InRpdGxlIjoi5rC05rWS5rer5LygIiwia2V5d29ybGQiOlsi5rC05rWS5rer5LygIiwi5rC05rWS5oG25pS5Iiwi54yb5YW95ZCI5qyiIiwi5rC05rWS5rer5Lyg5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5q2m5aiAIiwi6JmO5YW9Iiwi5a6L5aecIl0sImRlc2NyaXB0aW9uIjoi5qKB5bGx5rOK6LWr54S25piv55Sx5LiA5biu6KKr5pen5pe25Luj5peg5oOF6YGX5byD55qE54OI5oCn5aWz5a2Q5bu656uL55qE54us56uL5Zu95bqm44CC5q2m5aiA5oCn5oSf5Ya36Imz44CB5q2m6Im66LaF576k77yM6Lev6L+H6Ziz6LC35Y6/5pe26K+v6aWu5LqG54OI5oCn4oCc5rer5qyy5ZCI5qyi6YWS4oCd77yM6I2v5Yqy5LiK5raM5rWR6Lqr5Y+R54Or44CB6IO46KWf5aSn5byA44CC5aW554us6Zev5pmv6Zm95YaI6YGt6YGH5LiA5aS05L+u5oiQ5Lq65b2i55qE5Ye254yb6JmO5YW944CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5rC05rWS5rer5Lyg44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMumbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fV0sInRvcGljTGlzdCI6W119LHsiaWQiOjExMTA2LCJzbHVnIjoiZGp6dCIsInRpdGxlIjoi55+t5Ymn5LiT6aKYIiwiZGVzYyI6IiIsImtleXdvcmQiOltdLCJsYWJlbCI6IiIsInN0eWxlIjoiQSIsImNhcmRCYWNrZ3JvdW5kSW1hZ2UiOiIiLCJtb2R1bGVUeXBlIjoyLCJkYXRhVHlwZSI6MSwicmVjb21tZW5kVHlwZSI6MCwiY2F0ZWdvcnlJZCI6MCwicmFuayI6MSwibGltaXQiOjgsInNlb0luZm8iOnsidGl0bGUiOiLnn63liafkuJPpopjlkIjpm4YgLSDng63pl6jnn63liafliIbnsbvmjqjojZDkuI7lnKjnur/op4LnnIsgfCDnhp/mnpznn63liaciLCJrZXl3b3JsZCI6WyLnn63liafkuJPpopgiLCLnn63liafliIbnsbsiLCLng63pl6jnn63liaflkIjpm4YiLCLpg73luILnn63liaciLCLnqb/otornn63liaciLCLku5nkvqDnn63liaciLCLlj6Too4Xnn63liaciLCLmvKvliafmjqjojZAiLCLnhp/mnpznn63liaciXSwiZGVzY3JpcHRpb24iOiLmrKLov47mnaXliLDnhp/mnpznn63liafnn63liafkuJPpopjpobXpnaLvvIHkuLrmgqjmsYfpm4bpg73luILmmpfmtozjgIHprZTmlLnlj43ovazjgIHnqb/otorku5nkvqDjgIHlj6Too4XmvKvliafnrYnmtbfph4/ng63pl6jnn63liafliIbnsbvkuI7nsr7lvanmlYXkuovjgILliafmg4XntKflh5HjgIHlj43ovazlr4bpm4bvvIzngrnlh7vmjJHpgInmgqjllpzniLHnmoTpopjmnZDlnKjnur/ov73liafjgIIifSwibGlzdCI6W10sInRvcGljTGlzdCI6W3siaWQiOjEyNjg1LCJuYW1lIjoi6YO95biCIiwic2x1ZyI6ImR1c2hpIiwiaWNvbiI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2Uvb2YvZWYvMTA0OS8lRTklODMlQkQlRTUlQjglODIlRTUlQjklQkIlRTYlODMlQjMuanBnIiwicmFuayI6NCwicGxheWxldENvdW50IjoxNzEsImxpc3QiOlt7ImlkIjoxNDk4MCwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDZUMTI6MTk6NTQuOTQ2WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wNFQwODozMzowM1oiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDVUMDg6NTQ6MjJaIiwidGhlbWVJZHMiOlsxMjY4NV0sInRoZW1lTmFtZXMiOlsi6YO95biCIl0sInRoZW1lU2x1Z3MiOlsiZHVzaGkiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNV0sInRpdGxlIjoi5bm/5Lic6bit546L77yI5YWoMumbhu+8iSIsInBsYXlOYW1lIjoi5bm/5Lic6bit546LIiwiZGVzY3JpcHRpb24iOiLlub/kuJzpuK3njovku6XouqvkvZPkuLrkuJrvvIzlnKjpg73luILmt7HlpJzkuI7lkITot6/lpbPkurrkuqTnvKDjgILku5bmiYvms5Xlj4jmt7Hlj4jlh4bvvIzkuIDkuIvkuIvnsr7lh4bliLrmv4DmnIDmlY/mhJ/lpITjgILlr7nmlrnouqvkvZPlvbvlupXova/kuIvmnaXvvIzmtarlj6vlho3kuZ/ljovkuI3kvY/jgILnpoHlv4znmoTkuqTmmJPlnKjlpJzoibLkuK3lvbvlupXlpLHmjqfvvIzlv6vmhJ/kuqTnu4fvvIzlho3kuZ/lm57kuI3liLDov4fljrvjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlub/kuJzpuK3njovjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwy6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImdkeXciLCJkZXNjIjoi5bm/5Lic6bit546L5Lul6Lqr5L2T5Li65Lia77yM5Zyo6YO95biC5rex5aSc5LiO5ZCE6Lev5aWz5Lq65Lqk57yg44CC5LuW5omL5rOV5Y+I5rex5Y+I5YeG77yM5LiA5LiL5LiL57K+5YeG5Yi65r+A5pyA5pWP5oSf5aSE44CC5a+55pa56Lqr5L2T5b275bqV6L2v5LiL5p2l77yM5rWq5Y+r5YaN5Lmf5Y6L5LiN5L2P44CC56aB5b+M55qE5Lqk5piT5Zyo5aSc6Imy5Lit5b275bqV5aSx5o6n77yM5b+r5oSf5Lqk57uH77yM5YaN5Lmf5Zue5LiN5Yiw6L+H5Y6744CCIiwiYW5jaG9yIjoi6K6454+p6L+cIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2ZzL3JtLzEwNDkvcGxheWxldF9jb3Zlcl9iMzA1ZTY5ZWUxNTMwMGEwLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvY3EvMjAvMTA0OS9wbGF5bGV0X2NvdmVyX2IzMDVlNjllZTE1MzAwYTAuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODU1LDEyODU5XSwidGFnTmFtZXMiOlsi6YO95biCIiwi6Imz6YGHIl0sInRhZ1NsdWdzIjpbImR1c2hpIiwieWFueXUiXSwidG90YWxFcGlzb2RlIjoyLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjo5LCJoZWF0VmFsdWUiOjUwMzksImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxMSwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozNS4yNTRaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoyMi42NzlaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuWQjea1geeUn+a0uyIsIumDveW4guefreWJpyIsIuW5v+S4nOm4reeOi+WknOWknOmjjua1gSIsIumDveW4guaDheiJsum4reeOiyIsIuW5v+S4nOm4reeOiyIsIumFkuW6lyIsIuWujOaVtOeJiCIsIuWcqOe6v+eciyIsIumDveW4gum4reeOi+eahOemgeW/jOWknCIsIum4reeOi+mFkuW6l+a3semZt+iusCJdLCJkZXNjcmlwdGlvbiI6IuW5v+S4nOm4reeOi+S7pei6q+S9k+S4uuS4mu+8jOWcqOmDveW4gua3seWknOS4juWQhOi3r+Wls+S6uuS6pOe8oOOAguS7luaJi+azleWPiOa3seWPiOWHhu+8jOS4gOS4i+S4i+eyvuWHhuWIuua/gOacgOaVj+aEn+WkhOOAguWvueaWuei6q+S9k+W9u+W6lei9r+S4i+adpe+8jOa1quWPq+WGjeS5n+WOi+S4jeS9j+OAguemgeW/jOeahOS6pOaYk+WcqOWknOiJsuS4reW9u+W6leWkseaOp++8jOW/q+aEn+S6pOe7h++8jOWGjeS5n+WbnuS4jeWIsOi/h+WOu+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuW5v+S4nOm4reeOi+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDLpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ5ODUsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6dHJ1ZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDZUMTI6MTI6NDVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTExLTA0VDA0OjU1OjAwWiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wNVQwNDoyMzo0MloiLCJ0aGVtZUlkcyI6WzEyNjg1XSwidGhlbWVOYW1lcyI6WyLpg73luIIiXSwidGhlbWVTbHVncyI6WyJkdXNoaSJdLCJjYXRlZ29yeUlkcyI6WzExMTA1XSwidGl0bGUiOiLojZLlspvotY7lkb3nmb7kurrogonmkI/lpKfmiJggRVAxIiwicGxheU5hbWUiOiLojZLlspvotY7lkb3nmb7kurrogonmkI/lpKfmiJgiLCJkZXNjcmlwdGlvbiI6IuS4uuS6huaVkeWmueWmue+8jOeUt+S4u+WPguWKoOS6huS4gOWcuumrmOmineWllumHkeeahOiNkuWym+eUn+WtmOi1m++8jOWNtOWPkeeOsOavlOi1m+aYr+i0ouWbouaTjee6teeahOadgOWxgOOAguS7luS4juS4gOWQjeWNp+W6leitpuWvn+iBlOaJi++8jOWcqOiDjOWPm+S4jui/veadgOS4reWvu+aJvueUn+i3r+OAguecvOeci+Wwseimgei1ouS4i+avlOi1m++8jOiEmuS4i+eahOelnuenmOa3sea4iuWPiOWwhuS7luaLluWFpeaWsOeahOWNseacuuOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuiNkuWym+i1juWRveeZvuS6uuiCieaQj+Wkp+aImOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDHpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiaGRzbSIsImRlc2MiOiLkuLrkuobmlZHlprnlprnvvIznlLfkuLvlj4LliqDkuobkuIDlnLrpq5jpop3lpZbph5HnmoTojZLlspvnlJ/lrZjotZvvvIzljbTlj5HnjrDmr5TotZvmmK/otKLlm6Lmk43nurXnmoTmnYDlsYDjgILku5bkuI7kuIDlkI3ljaflupXorablr5/ogZTmiYvvvIzlnKjog4zlj5vkuI7ov73mnYDkuK3lr7vmib7nlJ/ot6/jgILnnLznnIvlsLHopoHotaLkuIvmr5TotZvvvIzohJrkuIvnmoTnpZ7np5jmt7HmuIrlj4jlsIbku5bmi5blhaXmlrDnmoTljbHmnLrjgIIiLCJhbmNob3IiOiLljp/liJsiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvMGIvYXovMTA0OS9wbGF5bGV0X2NvdmVyXzU2MGQyMGY3ZWE2ZDNjMTAuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9mNC9zOC8xMDQ5L3BsYXlsZXRfY292ZXJfZDI1MTNkNGViZjMzNTNiOS5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NzBdLCJ0YWdOYW1lcyI6WyLlvILkuJbnlYwiXSwidGFnU2x1Z3MiOlsiWVNKIl0sInRvdGFsRXBpc29kZSI6MSwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6OSwiaGVhdFZhbHVlIjozMjIzLCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MjAsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDZUMDU6MDc6MzcuODgzWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MjIuMjcxWiIsInNlb0luZm8iOnsidGl0bGUiOiIiLCJrZXl3b3JsZCI6WyLojZLlspvotY7lkb0iLCLojZLlspvnlJ/lrZjotZsiLCLljaflupXorablr58iXSwiZGVzY3JpcHRpb24iOiLkuLrkuobmlZHlprnlprnvvIznlLfkuLvlj4LliqDkuobkuIDlnLrpq5jpop3lpZbph5HnmoTojZLlspvnlJ/lrZjotZvvvIzljbTlj5HnjrDmr5TotZvmmK/otKLlm6Lmk43nurXnmoTmnYDlsYDjgILku5bkuI7kuIDlkI3ljaflupXorablr5/ogZTmiYvvvIzlnKjog4zlj5vkuI7ov73mnYDkuK3lr7vmib7nlJ/ot6/jgILnnLznnIvlsLHopoHotaLkuIvmr5TotZvvvIzohJrkuIvnmoTnpZ7np5jmt7HmuIrlj4jlsIbku5bmi5blhaXmlrDnmoTljbHmnLrjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrojZLlspvotY7lkb3nmb7kurrogonmkI/lpKfmiJjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwx6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0OTg5LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOnRydWUsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDA3OjI4OjQwLjA3NFoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDk6MzY6MTRaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA0VDAzOjI1OjM3WiIsInRoZW1lSWRzIjpbMTI2ODVdLCJ0aGVtZU5hbWVzIjpbIumDveW4giJdLCJ0aGVtZVNsdWdzIjpbImR1c2hpIl0sImNhdGVnb3J5SWRzIjpbMTExMDVdLCJ0aXRsZSI6Ium7hOixhumrmOS4rSIsInBsYXlOYW1lIjoi6buE6LGG6auY5LitIiwiZGVzY3JpcHRpb24iOiLmoKHokaPmiorliJrlhaXogYznmoTlsKTnianlj6vliLDmsaDnlZTvvIzlj6rlh4bnqb/kuIDku7bmub/pgI/nmoTmr5Tln7rlsLzmiqXliLDjgILlpbnot6rlnKjourrmpIXliY3lkKvlvITliLDlj4jnoazlj4jng6vvvIzooqvmjInlgJLlnKjova/lnqvkuIrml7blt7Lnu4/mub/lvpfkuIDloYzns4rmtoLjgILnspflo67nmoTmgKflmajnm7Tnm7TpobblvIDntKfoh7ToirHlvoTvvIzkuIDkuIvkuIvlj4jmt7Hlj4jni6DlnLDmkp7lh7vvvIzmsLTlo7Dmt7fnnYDljovmipHnmoTllpjmga/lnKjljYjlkI7nmoTmsaDovrnkuI3mlq3lm57ojaHjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrpu4TosYbpq5jkuK3jgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw16ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImhkZ3oiLCJkZXNjIjoi5qCh6JGj5oqK5Yia5YWl6IGM55qE5bCk54mp5Y+r5Yiw5rGg55WU77yM5Y+q5YeG56m/5LiA5Lu25rm/6YCP55qE5q+U5Z+65bC85oql5Yiw44CC5aW56Leq5Zyo6Lq65qSF5YmN5ZCr5byE5Yiw5Y+I56Gs5Y+I54Or77yM6KKr5oyJ5YCS5Zyo6L2v5Z6r5LiK5pe25bey57uP5rm/5b6X5LiA5aGM57OK5raC44CC57KX5aOu55qE5oCn5Zmo55u055u06aG25byA57Sn6Ie06Iqx5b6E77yM5LiA5LiL5LiL5Y+I5rex5Y+I54ug5Zyw5pKe5Ye777yM5rC05aOw5re3552A5Y6L5oqR55qE5ZaY5oGv5Zyo5Y2I5ZCO55qE5rGg6L655LiN5pat5Zue6I2h44CCIiwiYW5jaG9yIjoi5pyA5YWo54mH5bqTIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L2sxMnAvYzkyYS82NTEyL2U0NWUvZWU3NWUxZDIzNTI3YzZjZTY3ZGM2NmIyOTk4YTk3MTMuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC9rMTJwL2M5MmEvNjUxMi9lNDVlL2VlNzVlMWQyMzUyN2M2Y2U2N2RjNjZiMjk5OGE5NzEzLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1M10sInRhZ05hbWVzIjpbIkFJ5oiQ5Lq655+t5YmnIl0sInRhZ1NsdWdzIjpbIkNSREoiXSwidG90YWxFcGlzb2RlIjo1LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjozLCJoZWF0VmFsdWUiOjI5NjYsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxOSwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozOS4yNzJaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoxOS4yNDNaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIum7hOixhumrmOS4rSIsIuagoeWbreefreWJpyIsIumrmOS4rSIsIuagoemVv+azs+axoCIsIuavlOWfuuWwvOaKpeWIsCIsIuaymeWPkeakheWPo+S6pCIsIuebtOaNo+m7hOm+mSIsIuWls+aVmeW4iOemgeW/jCIsIuagoemVv+WujOaVtOeJiOWcqOe6v+eciyJdLCJkZXNjcmlwdGlvbiI6IuagoeiRo+aKiuWImuWFpeiBjOeahOWwpOeJqeWPq+WIsOaxoOeVlO+8jOWPquWHhuepv+S4gOS7tua5v+mAj+eahOavlOWfuuWwvOaKpeWIsOOAguWluei3quWcqOi6uuakheWJjeWQq+W8hOWIsOWPiOehrOWPiOeDq++8jOiiq+aMieWAkuWcqOi9r+Weq+S4iuaXtuW3sue7j+a5v+W+l+S4gOWhjOeziua2guOAgueyl+WjrueahOaAp+WZqOebtOebtOmhtuW8gOe0p+iHtOiKseW+hO+8jOS4gOS4i+S4i+WPiOa3seWPiOeLoOWcsOaSnuWHu++8jOawtOWjsOa3t+edgOWOi+aKkeeahOWWmOaBr+WcqOWNiOWQjueahOaxoOi+ueS4jeaWreWbnuiNoeOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAium7hOixhumrmOS4reOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDXpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX1dLCJzZW9JbmZvIjp7InRpdGxlIjoi54af5p6c55+t5Ymn6YO95biC5LiT6aKYIC0g54Ot6ZeoQUnmiJDkurrnn63liafkuI7pu4Tmnpzpg73luILmg4XmhJ/lpKfmiI/lkIjpm4YiLCJrZXl3b3JkcyI6WyLnhp/mnpznn63liaciLCLpu4Tmnpznn63liaciLCLpu4TmnpwiLCJBSeaIkOS6uuefreWJpyIsIumDveW4guS4k+mimCIsIumDveW4guefreWJpyIsIumhtue6p+engeWOqCIsIuWtkOixqueahOenmOWvhuaVmeWtpiIsIuaIkOS6uuefreWJp0FQUCJdLCJkZXNjcmlwdGlvbiI6Iui1sOi/m+eGn+aenOefreWJp+mDveW4guS4k+mimO+8jOayiea1uOS9k+mqjOeOsOS7o+mDveW4guiDjOaZr+S4i+eahOaDheaEn+e6oOiRm+S4juiBjOWcuuivseaDkeOAguW5s+WPsOavj+aXpeWdmuaMgeaMgee7reabtOaWsO+8jOeBq+eDreaUtuW9leS6huOAiumhtue6p+engeWOqOOAi+OAgeOAiuWtkOixqueahOenmOWvhuaVmeWtpuOAi+etiemrmOS6uuawlOmDveW4guWkp+aIj+OAgui/memHjOWJp+aDheWPjei9rOS4jeaWreOAgeS7o+WFpeaEn+aegeW8uuOAgui1tuW/q+eCueWHu+S4i+i9veWumOaWueS4k+Wxnuemj+WIqUFQUO+8jOW4puaCqOmaj+aXtumaj+WcsOeVheS6q+aXoOW5suaJsOeahOmrmOa4heaOjOS4iui/veWJp+aWsOS9k+mqjO+8gSIsIndlYlNpdGVOYW1lIjoi54af5p6c55+t5YmnIiwiY2Fub25pY2FsVXJsIjoiaHR0cHM6Ly9zaHVndW9kai5jb20vdG9waWMtZGV0YWlsL2R1c2hpIn19LHsiaWQiOjEyNjgxLCJuYW1lIjoi5Y6f5Yib55+t5YmnIiwic2x1ZyI6InlhdW5jaHVhbmdkaiIsImljb24iOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzE3L2dpLzEwNDkvJUU5JUJCJTg0JUU2JTlFJTlDJUU3JUIyJUJFJUU5JTgwJTg5LmpwZyIsInJhbmsiOjEwLCJwbGF5bGV0Q291bnQiOjkwLCJsaXN0IjpbeyJpZCI6MTQ5NzcsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6dHJ1ZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDZUMTI6MjU6MTQuMzI3WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wNFQwOTowNzo0M1oiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDVUMDg6NTQ6MjJaIiwidGhlbWVJZHMiOlsxMjY4MV0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIl0sImNhdGVnb3J5SWRzIjpbMTExMDJdLCJ0aXRsZSI6IuW6iuesq++8iOWFqDbpm4bvvIkiLCJwbGF5TmFtZSI6IuW6iuesqyIsImRlc2NyaXB0aW9uIjoi5bqK56yr5LmL5LiK5aW55Li75Yqo6KSq5bC96KGj6KGr77yM6Lqr5L2T5Zyo54Ob5YWJ5LiL6aKk5oqW77yM5LuN5Lul5aSN5p2C55uu5YWJ55yL552A5a+55pa544CC5LiA5qyh5qyh5rex5YWl6K6p5aW55b275bqV6L2v5LiL5p2l77yM5rWq5Y+r5Y6L5oqR5LiN5L2P44CC5bqK56yr55qE56aB5b+M5Zyo5aSc6YeM5b275bqV54iG5Y+R77yM5YaN5Lmf5peg5rOV5Zue5aS044CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5bqK56yr44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysNumbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJjaHVhbmd6IiwiZGVzYyI6IuW6iuesq+S5i+S4iuWlueS4u+WKqOikquWwveiho+ihq++8jOi6q+S9k+WcqOeDm+WFieS4i+mipOaKlu+8jOS7jeS7peWkjeadguebruWFieeci+edgOWvueaWueOAguS4gOasoeasoea3seWFpeiuqeWlueW9u+W6lei9r+S4i+adpe+8jOa1quWPq+WOi+aKkeS4jeS9j+OAguW6iuesq+eahOemgeW/jOWcqOWknOmHjOW9u+W6leeIhuWPke+8jOWGjeS5n+aXoOazleWbnuWktOOAgiIsImFuY2hvciI6Ium7hOaenOWumOaWuSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9ndC9rdy8xMDQ5L3BsYXlsZXRfY292ZXJfYzNjYzQ1ZTIwN2QzY2E4My5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzIwLzgwLzEwNDkvcGxheWxldF9jb3Zlcl9jM2NjNDVlMjA3ZDNjYTgzLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MiwxMjg1N10sInRhZ05hbWVzIjpbIum7hOaenCIsIuWPpOS7oyJdLCJ0YWdTbHVncyI6WyJodWFuZ2d1byIsImd1ZGFpIl0sInRvdGFsRXBpc29kZSI6NiwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MjIsImhlYXRWYWx1ZSI6MzkwOSwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE3LCJjcmVhdGVkQXQiOiIyMDI2LTExLTA2VDA1OjA3OjMzLjZaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wNlQyMjowMDoxMS41MDZaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuWwhuWGm+S4juWNp+W6lSIsIuWPpOijheefreWJpyIsIum7hOaenOWOn+WImyIsIuW6iuesq+S5i+mXtOeahOW9u+W6leayieaypiIsIumDveW4guW6iuesq+aDheiJsiIsIuW6iuesqyIsIua3seWFpeWkseaOpyIsIuWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuW6iuesq+WknOeahOeyvuWHhua3seWFpSIsIuW6iuesq+S4iueahOWkseaOp+mipOaKliJdLCJkZXNjcmlwdGlvbiI6IuW6iuesq+S5i+S4iuWlueS4u+WKqOikquWwveiho+ihq++8jOi6q+S9k+WcqOeDm+WFieS4i+mipOaKlu+8jOS7jeS7peWkjeadguebruWFieeci+edgOWvueaWueOAguS4gOasoeasoea3seWFpeiuqeWlueW9u+W6lei9r+S4i+adpe+8jOa1quWPq+WOi+aKkeS4jeS9j+OAguW6iuesq+eahOemgeW/jOWcqOWknOmHjOW9u+W6leeIhuWPke+8jOWGjeS5n+aXoOazleWbnuWktOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuW6iuesq+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDbpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ5NzgsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6dHJ1ZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDZUMTI6MjM6NTcuNTU0WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wNFQwODo0MToyN1oiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDVUMDg6NTQ6MjJaIiwidGhlbWVJZHMiOlsxMjY4MV0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIl0sImNhdGVnb3J5SWRzIjpbMTExMDJdLCJ0aXRsZSI6IuWmiOWmiOaIkeeIseS9oO+8iOWFqDEw6ZuG77yJIiwicGxheU5hbWUiOiLlpojlpojmiJHniLHkvaAiLCJkZXNjcmlwdGlvbiI6IuWmiOWmiOi1t+WIneWuiemdmemhuuS7ju+8jOWDj+ayiem7mOeahOe+lOe+iuOAguWcqOWvhumXreaIv+mXtOmHjO+8jOS8quijheiiq+S4gOeCueeCueaPreW8gOOAguWWmOaBr+WIu+aEj+WOi+S9ju+8jOi6q+S9k+WNtOWcqOaIkeeahOiKguWlj+S4i+i9u+i9u+mipOaKluOAguavj+S4gOasoea3seWFpemDveiuqeWlueS7jumakOW/jei1sOWQkeWkseaOp++8jOacgOe7iOW9u+W6leayieaypu+8jOWuiemdmeS4jeWGje+8jOWPquWJqeS4i+WOi+aKkeS4jeS9j+eahOWRu+WQn++8jOemgeW/jOeahOavjeWtkOWFs+ezu+W9u+W6leW0qeWdj+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWmiOWmiOaIkeeIseS9oOOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6Im1td2FuIiwiZGVzYyI6IuWmiOWmiOi1t+WIneWuiemdmemhuuS7ju+8jOWDj+ayiem7mOeahOe+lOe+iuOAguWcqOWvhumXreaIv+mXtOmHjO+8jOS8quijheiiq+S4gOeCueeCueaPreW8gOOAguWWmOaBr+WIu+aEj+WOi+S9ju+8jOi6q+S9k+WNtOWcqOaIkeeahOiKguWlj+S4i+i9u+i9u+mipOaKluOAguavj+S4gOasoea3seWFpemDveiuqeWlueS7jumakOW/jei1sOWQkeWkseaOp++8jOacgOe7iOW9u+W6leayieaypu+8jOWuiemdmeS4jeWGje+8jOWPquWJqeS4i+WOi+aKkeS4jeS9j+eahOWRu+WQn++8jOemgeW/jOeahOavjeWtkOWFs+ezu+W9u+W6leW0qeWdj+OAgiIsImFuY2hvciI6Ium7hOaenOWumOaWuTIiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvbTQvMW0vMTA0OS9wbGF5bGV0X2NvdmVyXzE5NWFjOWVlZTM5NDI1MzkuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS84MC9zdC8xMDQ5L3BsYXlsZXRfY292ZXJfMTk1YWM5ZWVlMzk0MjUzOS5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTIsMTI4NjFdLCJ0YWdOYW1lcyI6WyLpu4TmnpwiLCLmr43lrZAiXSwidGFnU2x1Z3MiOlsiaHVhbmdndW8iLCJtdXppIl0sInRvdGFsRXBpc29kZSI6MTAsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjI0LCJoZWF0VmFsdWUiOjUzMDQsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxOSwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozNC4wNFoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAwOjAwOjExLjQ5OFoiLCJzZW9JbmZvIjp7InRpdGxlIjoiIiwia2V5d29ybGQiOlsi5q+N5a2Q5YWz57O7Iiwi6buE5p6c5Y6f5YibIiwi5aaI5aaI5oiR54ix5L2gIiwi5q+N5a2Q56aB5b+M5oOF6ImyIiwi5aaI5aaIIiwi5rex5aSc5rKJ5rKmIiwi5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5aaI5aaI5rex5aSc55qE5rKJ5rKmIiwi5oiR54ix5L2g5aaI5aaIIl0sImRlc2NyaXB0aW9uIjoi5aaI5aaI6LW35Yid5a6J6Z2Z6aG65LuO77yM5YOP5rKJ6buY55qE576U576K44CC5Zyo5a+G6Zet5oi/6Ze06YeM77yM5Lyq6KOF6KKr5LiA54K554K55o+t5byA44CC5ZaY5oGv5Yi75oSP5Y6L5L2O77yM6Lqr5L2T5Y205Zyo5oiR55qE6IqC5aWP5LiL6L276L276aKk5oqW44CC5q+P5LiA5qyh5rex5YWl6YO96K6p5aW55LuO6ZqQ5b+N6LWw5ZCR5aSx5o6n77yM5pyA57uI5b275bqV5rKJ5rKm77yM5a6J6Z2Z5LiN5YaN77yM5Y+q5Ymp5LiL5Y6L5oqR5LiN5L2P55qE5ZG75ZCf77yM56aB5b+M55qE5q+N5a2Q5YWz57O75b275bqV5bSp5Z2P44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5aaI5aaI5oiR54ix5L2g44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ5NzksInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6dHJ1ZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjp0cnVlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wNlQxMjoyMToxOC43MzdaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTExLTA0VDA4OjM5OjM0WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wNVQwODo1NDoyMloiLCJ0aGVtZUlkcyI6WzEyNjgxXSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMl0sInRpdGxlIjoi5oiR55qE5ZCI56ef5aWz5a6k5Y+L5Lus77yI5YWoMumbhu+8iSIsInBsYXlOYW1lIjoi5oiR55qE5ZCI56ef5aWz5a6k5Y+L5LusIiwiZGVzY3JpcHRpb24iOiLmiJHlkozlh6DkvY3lpbPlrqTlj4vlkIjnp5/lkI7vvIzmt7HlpJznmoTllpjmga/otormnaXotormmI7mmL7jgILmn5DlpJzlpbnku6zkuLvliqjot6jlnZDkuIrmnaXvvIzoirHnqbTntKfntKflkqzkvY/vvIzkuIDovrnlk63kuIDovrnmia3ohbDjgILkuIDnm7TlgZrliLDlpKnkuq7vvIzmt6vmsLTpobrnnYDkuqTlkIjlpITmtYHkuobkuIDlnLDjgILlkIjnp5/nmoTpg73luILnpoHlv4zlvbvlupXmsonmsqbvvIzlho3kuZ/lm57kuI3liLDov4fljrvjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmiJHnmoTlkIjnp5/lpbPlrqTlj4vku6zjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwy6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6Imh6bnN5IiwiZGVzYyI6IuaIkeWSjOWHoOS9jeWls+WupOWPi+WQiOenn+WQju+8jOa3seWknOeahOWWmOaBr+i2iuadpei2iuaYjuaYvuOAguafkOWknOWlueS7rOS4u+WKqOi3qOWdkOS4iuadpe+8jOiKseeptOe0p+e0p+WSrOS9j++8jOS4gOi+ueWTreS4gOi+ueaJreiFsOOAguS4gOebtOWBmuWIsOWkqeS6ru+8jOa3q+awtOmhuuedgOS6pOWQiOWkhOa1geS6huS4gOWcsOOAguWQiOenn+eahOmDveW4guemgeW/jOW9u+W6leayieaypu+8jOWGjeS5n+WbnuS4jeWIsOi/h+WOu+OAgiIsImFuY2hvciI6Ium7hOaenOWumOaWuSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9mZy9rYi8xMDQ5L3BsYXlsZXRfY292ZXJfZWE3OTgwOWMxYjZmMzM4Mi5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2ZuL3Q4LzEwNDkvcGxheWxldF9jb3Zlcl9lYTc5ODA5YzFiNmYzMzgyLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MiwxMjg1NV0sInRhZ05hbWVzIjpbIum7hOaenCIsIumDveW4giJdLCJ0YWdTbHVncyI6WyJodWFuZ2d1byIsImR1c2hpIl0sInRvdGFsRXBpc29kZSI6MiwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTQsImhlYXRWYWx1ZSI6NjAzMiwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjEyLCJjcmVhdGVkQXQiOiIyMDI2LTExLTA2VDA1OjA3OjM0Ljc1MloiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjIyLjc1WiIsInNlb0luZm8iOnsidGl0bGUiOiIiLCJrZXl3b3JsZCI6WyLlkIjnp5/nlJ/mtLsiLCLpu4Tmnpzljp/liJsiLCLmiJHnmoTlkIjnp5/lpbPlrqTlj4vku6wiLCLpg73luILlkIjnp5/mg4XoibIiLCLlpbPlrqTlj4siLCLlkIjnp5/npoHlv4wiLCLlrozmlbTniYgiLCLlnKjnur/nnIsiLCLlkIjnp5/lpbPlrqTlj4vnmoTmt7HlpJzlpLHmjqciLCLlpbPlrqTlj4vku6znmoTlkIjnp5/msqbpmbciXSwiZGVzY3JpcHRpb24iOiLmiJHlkozlh6DkvY3lpbPlrqTlj4vlkIjnp5/lkI7vvIzmt7HlpJznmoTllpjmga/otormnaXotormmI7mmL7jgILmn5DlpJzlpbnku6zkuLvliqjot6jlnZDkuIrmnaXvvIzoirHnqbTntKfntKflkqzkvY/vvIzkuIDovrnlk63kuIDovrnmia3ohbDjgILkuIDnm7TlgZrliLDlpKnkuq7vvIzmt6vmsLTpobrnnYDkuqTlkIjlpITmtYHkuobkuIDlnLDjgILlkIjnp5/nmoTpg73luILnpoHlv4zlvbvlupXmsonmsqbvvIzlho3kuZ/lm57kuI3liLDov4fljrvjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmiJHnmoTlkIjnp5/lpbPlrqTlj4vku6zjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwy6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19XSwic2VvSW5mbyI6eyJ0aXRsZSI6IueGn+aenOefreWJp+WOn+WIm+efreWJp+S4k+mimCAtIOeDremXqEFJ5oiQ5Lq655+t5Ymn5LiO6buE5p6c54us5a625Y6f5Yib5aSn5oiP5ZCI6ZuGIiwia2V5d29yZHMiOlsi54af5p6c55+t5YmnIiwi6buE5p6c55+t5YmnIiwi6buE5p6cIiwiQUnmiJDkurrnn63liaciLCLljp/liJvnn63liafkuJPpopgiLCLni6zlrrbljp/liJsiLCLmnIDlvLrmmL7npLrlmagiLCLms6HpnaLnlaoiLCLmiJDkurrnn63liadBUFAiLCLljp/liJvnn63liaciXSwiZGVzY3JpcHRpb24iOiLmjqLntKLnhp/mnpznn63liafljp/liJvnn63liafkuJPpopjvvIzpoobnlaXlubPlj7DljKDlv4Pni6zlhbfnmoTohJHmtJ7lpKflvIDkuI7mnoHoh7Top4bop4nlvKDlipvjgILlubPlj7Dmr4/ml6Xkv53mjIHmjIHnu63mm7TmlrDvvIzngavng63mlLblvZXkuobjgIrmnIDlvLrmmL7npLrlmajjgIvjgIHjgIrms6HpnaLnlarjgIvnrYnpq5jkurrmsJTljp/liJvlpKfmiI/jgILov5nph4zliafmg4Xlj43ovazkuI3mlq3jgIHorr7lrprmlrDlpYfov4fnmL7jgILnjrDlnKjlsLHooYzliqjkuIvovb3lrpjmlrnkuJPlsZ7npo/liKlBUFDvvIzluKbmgqjpmo/ml7bpmo/lnLDlsL3mg4XnlYXkuqvml6DlubLmibDnmoTpq5jmuIXmjozkuIrov73liafmlrDkvZPpqozvvIEiLCJ3ZWJTaXRlTmFtZSI6IueGn+aenOefreWJpyIsImNhbm9uaWNhbFVybCI6Imh0dHBzOi8vc2h1Z3VvZGouY29tL3RvcGljLWRldGFpbC95YXVuY2h1YW5nZGoifX0seyJpZCI6MTI2ODcsIm5hbWUiOiLprZTmlLkiLCJzbHVnIjoibW9nYWkiLCJpY29uIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS91YS91Ny8xMDQ5LyVFNyU5NCVCNSVFNSVCRCVCMSVFOSVBRCU5NCVFNiU5NCVCOS5qcGciLCJyYW5rIjoyLCJwbGF5bGV0Q291bnQiOjg2LCJsaXN0IjpbeyJpZCI6MTQ4NzAsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDExOjMyOjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMDRUMTY6MzA6MTNaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTA5LTExVDAyOjEzOjUyWiIsInRoZW1lSWRzIjpbMTI2ODddLCJ0aGVtZU5hbWVzIjpbIumtlOaUuSJdLCJ0aGVtZVNsdWdzIjpbIm1vZ2FpIl0sImNhdGVnb3J5SWRzIjpbMTExMDVdLCJ0aXRsZSI6IkFJ6a2U5pS5LUFJ6a2U5pS5572R57qi5pa55ZyGIOWOu+iho+i3s+ijuOiInu+8iOWFqDHpm4bvvIkiLCJwbGF5TmFtZSI6IkFJ6a2U5pS5LUFJ6a2U5pS5572R57qi5pa55ZyGIOWOu+iho+i3s+ijuOiIniIsImRlc2NyaXB0aW9uIjoi57Sg5pyJ57qv5qyy5aSp6Iqx5p2/5LmL56ew55qE572R57qi5pa55ZyG5Zyo5rex5aSc56m65pe355qE5oi/6Ze06YeM6IKG5oSP54Ot6Iie77yM5Ly06ZqP552A6Z+z5LmQ6KGj6KGr5bC96KSq77yM6aWx5ruh6Zuq55m955qE6YWl6IO45q+r5peg5L+d55WZ5Zyw5pq06Zyy5Zyo56m65rCU5Lit44CC5aW56IKG5oSP5pKp5ouo552A6ZW/5Y+R55av54uC5omt5Yqo57qk57uG6IWw6IKi77yM5Lik5Zui56GV5aSn5Y+M5Lmz6ZqP552A6IqC5aWP5Ymn54OI6L276aKk44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CKQUnprZTmlLktQUnprZTmlLnnvZHnuqLmlrnlnIYg5Y676KGj6Lez6KO46Iie44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJhaW1vZzQ4IiwiZGVzYyI6Iue0oOaciee6r+assuWkqeiKseadv+S5i+ensOeahOe9kee6ouaWueWchuWcqOa3seWknOepuuaXt+eahOaIv+mXtOmHjOiChuaEj+eDreiInu+8jOS8tOmaj+edgOmfs+S5kOiho+ihq+Wwveikqu+8jOmlsea7oembqueZveeahOmFpeiDuOavq+aXoOS/neeVmeWcsOaatOmcsuWcqOepuuawlOS4reOAguWlueiChuaEj+aSqeaLqOedgOmVv+WPkeeWr+eLguaJreWKqOe6pOe7huiFsOiCou+8jOS4pOWbouehleWkp+WPjOS5s+maj+edgOiKguWlj+WJp+eDiOi9u+mipOOAgiIsImFuY2hvciI6Ium7hOaenEFJ5bCP5a2QIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2p5LzdiLzEwNDkvcGxheWxldF9jb3Zlcl81N2IyMzU1OWJiM2QwZjY3LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvNGMvNWovMTA0OS9wbGF5bGV0X2NvdmVyXzU3YjIzNTU5YmIzZDBmNjcuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODc3LDEyODc5XSwidGFnTmFtZXMiOlsiQUnmiJDkurrprZTmlLkiLCLmmI7mmJ/nvZHnuqLmlLnnvJYiXSwidGFnU2x1Z3MiOlsiQ1JNRyIsIk1YIl0sInRvdGFsRXBpc29kZSI6MSwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTMxLCJoZWF0VmFsdWUiOjE1NzMzLCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTQsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NTA6MTAuMzgxWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDE6MDA6MDYuNjU1WiIsInNlb0luZm8iOnsidGl0bGUiOiJBSemtlOaUuS1BSemtlOaUuee9kee6ouaWueWchiDljrvooaPot7Poo7joiJ7vvIjlhagx6ZuG77yJIiwia2V5d29ybGQiOlsiQUnprZTmlLnnvZHnuqLmlrnlnIbljrvooaPot7Poo7joiJ4iLCLnuq/mrLLlpKnoirHmnb8iLCLljrvooaPng63oiJ4iLCJBSemtlOaUuee9kee6ouaWueWchuWOu+iho+i3s+ijuOiInuWujOaVtOeJiCIsIuWcqOe6v+eciyIsIue9kee6ouaWueWchiIsIumbqueZvemFpeiDuCJdLCJkZXNjcmlwdGlvbiI6Iue0oOaciee6r+assuWkqeiKseadv+S5i+ensOeahOe9kee6ouaWueWchuWcqOa3seWknOepuuaXt+eahOaIv+mXtOmHjOiChuaEj+eDreiInu+8jOS8tOmaj+edgOmfs+S5kOiho+ihq+Wwveikqu+8jOmlsea7oembqueZveeahOmFpeiDuOavq+aXoOS/neeVmeWcsOaatOmcsuWcqOepuuawlOS4reOAguWlueiChuaEj+aSqeaLqOedgOmVv+WPkeeWr+eLguaJreWKqOe6pOe7huiFsOiCou+8jOS4pOWbouehleWkp+WPjOS5s+maj+edgOiKguWlj+WJp+eDiOi9u+mipOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAikFJ6a2U5pS5LUFJ6a2U5pS5572R57qi5pa55ZyGIOWOu+iho+i3s+ijuOiInuOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDHpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ4ODksInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDA5OjQ0OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMDRUMTc6NDQ6MzRaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTA5LTExVDAyOjEzOjUyWiIsInRoZW1lSWRzIjpbMTI2ODddLCJ0aGVtZU5hbWVzIjpbIumtlOaUuSJdLCJ0aGVtZVNsdWdzIjpbIm1vZ2FpIl0sImNhdGVnb3J5SWRzIjpbMTExMDVdLCJ0aXRsZSI6IkFJ6a2U5pS5LUFJ6a2U5pS5IOW8oOWpp+S7qiDlvZPmuIXlhrflsI/lp5Dlp5Dot6rkvI/lnKjkvaDpnaLliY0g6Zyy5Ye65b6I5oOz6KaB55qE6KGo5oOFIOS9oOehruWumuS4jee7meWlueeCuei1j+i1kO+8iOWFqDHpm4bvvIkiLCJwbGF5TmFtZSI6IkFJ6a2U5pS5LUFJ6a2U5pS5IOW8oOWpp+S7qiDlvZPmuIXlhrflsI/lp5Dlp5Dot6rkvI/lnKjkvaDpnaLliY0g6Zyy5Ye65b6I5oOz6KaB55qE6KGo5oOFIOS9oOehruWumuS4jee7meWlueeCuei1j+i1kCIsImRlc2NyaXB0aW9uIjoi5Zyo5Ymn57uE5a6J6Z2Z55qE5LyR5oGv5Yy65YaF77yM5byg5amn5Luq6YKj5LiA5Y+M6KKr6buR6Imy5Lid6KKc5YyF6KO555qE5L+u6ZW/576O6IW/5q275q275bm25oui6Leq5LyP5Zyo5Zyw5LiK77yM5aaG5a6557K+6Ie055qE6Z2i6aKK5b6u5b6u5LiK5oms77yM5riF57qv55qE55uu5YWJ6YeM5rWu5Yqo552A5pi+6ICM5piT6KeB55qE5p6B5bqm5ri05pyb44CC6L+Z5L2N6auY6aKc5YC85aWz5pif5q2k5Yi76L+Z5Ymv5Y2R5b6u55qE5ae/5oCB44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CKQUnprZTmlLktQUnprZTmlLkg5byg5amn5LuqIOW9k+a4heWGt+Wwj+WnkOWnkOi3quS8j+WcqOS9oOmdouWJjSDpnLLlh7rlvojmg7PopoHnmoTooajmg4Ug5L2g56Gu5a6a5LiN57uZ5aW554K56LWP6LWQ44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJhaW1vZzY3IiwiZGVzYyI6IuWcqOWJp+e7hOWuiemdmeeahOS8keaBr+WMuuWGhe+8jOW8oOWpp+S7qumCo+S4gOWPjOiiq+m7keiJsuS4neiinOWMheijueeahOS/rumVv+e+juiFv+atu+atu+W5tuaLoui3quS8j+WcqOWcsOS4iu+8jOWmhuWuueeyvuiHtOeahOmdoumiiuW+ruW+ruS4iuaJrO+8jOa4hee6r+eahOebruWFiemHjOa1ruWKqOedgOaYvuiAjOaYk+ingeeahOaegeW6pua4tOacm+OAgui/meS9jemrmOminOWAvOWls+aYn+atpOWIu+i/meWJr+WNkeW+rueahOWnv+aAgeOAgiIsImFuY2hvciI6Ium7hOaenEFJ5aSn5biIIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3o1L3Z2LzEwNDkvcGxheWxldF9jb3Zlcl9jMDAyYmQxYTkyZDdlOTVlLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvMnovZHovMTA0OS9wbGF5bGV0X2NvdmVyX2MwMDJiZDFhOTJkN2U5NWUuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODc3XSwidGFnTmFtZXMiOlsiQUnmiJDkurrprZTmlLkiXSwidGFnU2x1Z3MiOlsiQ1JNRyJdLCJ0b3RhbEVwaXNvZGUiOjEsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjEyNCwiaGVhdFZhbHVlIjoxNjU3NSwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjEyLCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjUwOjIyLjc0OVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAxOjAwOjAwLjk5OFoiLCJzZW9JbmZvIjp7InRpdGxlIjoiQUnprZTmlLktQUnprZTmlLkg5byg5amn5LuqIOW9k+a4heWGt+Wwj+WnkOWnkOi3quS8j+WcqOS9oOmdouWJjSDpnLLlh7rlvojmg7PopoHnmoTooajmg4Ug5L2g56Gu5a6a5LiN57uZ5aW554K56LWP6LWQ77yI5YWoMembhu+8iSIsImtleXdvcmxkIjpbIkFJ6a2U5pS55byg5amn5Luq5b2T5riF5Ya35bCP5aeQ5aeQ6Leq5LyP5Zyo5L2g6Z2i5YmN6Zyy5Ye65b6I5oOz6KaB55qE6KGo5oOF5L2g56Gu5a6a5LiN57uZ5aW554K56LWP6LWQIiwi5riF5Ya35bCP5aeQ5aeQIiwi6Leq5LyP5ri05pybIiwiQUnprZTmlLnlvKDlqafku6rlvZPmuIXlhrflsI/lp5Dlp5Dot6rkvI/lnKjkvaDpnaLliY3pnLLlh7rlvojmg7PopoHnmoTooajmg4XkvaDnoa7lrprkuI3nu5nlpbnngrnotY/otZDlrozmlbTniYgiLCLlnKjnur/nnIsiLCLlvKDlqafku6oiLCLpu5HkuJ3ot6rkvI8iXSwiZGVzY3JpcHRpb24iOiLlnKjliafnu4TlronpnZnnmoTkvJHmga/ljLrlhoXvvIzlvKDlqafku6rpgqPkuIDlj4zooqvpu5HoibLkuJ3oopzljIXoo7nnmoTkv67plb/nvo7ohb/mrbvmrbvlubbmi6Lot6rkvI/lnKjlnLDkuIrvvIzlpoblrrnnsr7oh7TnmoTpnaLpoorlvq7lvq7kuIrmiazvvIzmuIXnuq/nmoTnm67lhYnph4zmta7liqjnnYDmmL7ogIzmmJPop4HnmoTmnoHluqbmuLTmnJvjgILov5nkvY3pq5jpopzlgLzlpbPmmJ/mraTliLvov5nlia/ljZHlvq7nmoTlp7/mgIHjgILnhp/mnpznn63liadXRULmj5DkvpvjgIpBSemtlOaUuS1BSemtlOaUuSDlvKDlqafku6og5b2T5riF5Ya35bCP5aeQ5aeQ6Leq5LyP5Zyo5L2g6Z2i5YmNIOmcsuWHuuW+iOaDs+imgeeahOihqOaDhSDkvaDnoa7lrprkuI3nu5nlpbnngrnotY/otZDjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwx6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0OTA4LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wM1QwNzo1ODozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTA5LTA0VDE3OjAyOjQ1WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0wOS0xMVQwMjoxMzo1MloiLCJ0aGVtZUlkcyI6WzEyNjg3XSwidGhlbWVOYW1lcyI6WyLprZTmlLkiXSwidGhlbWVTbHVncyI6WyJtb2dhaSJdLCJjYXRlZ29yeUlkcyI6WzExMTA1XSwidGl0bGUiOiJBSemtlOaUuS1BSemtlOaUuSDluoTovr7oj7LvvIjlhagx6ZuG77yJIiwicGxheU5hbWUiOiJBSemtlOaUuS1BSemtlOaUuSDluoTovr7oj7IiLCJkZXNjcmlwdGlvbiI6IuWcqOaYj+m7hOaap+aYp+eahOWNp+WupOeBr+WFieS4i++8jOW6hOi+vuiPsumlsea7oeeahOi6q+S9k+absue6v+iiq+WFieW9semHjeaWsOWLvuWLkuOAguWlueaUvuiNoeWcsOi3qOWdkOiAjOS4iu+8jOS7peagh+WHhueahOmqkeS5mOWnv+aAgeWFqOadg+aOjOaOp+edgOavj+S4gOasoei1t+S8j+eahOiKguWlj++8jOe6pOe7hueahOiFsOiCoui9u+aJremXtOiChuaEj+mHiuaUvuWHuua1k+eDiOeahOWOn+Wni+assuacm+OAgumaj+WQjuWlueeerOmXtOi9rOWQkeWPpuS4gOS+p+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAikFJ6a2U5pS5LUFJ6a2U5pS5IOW6hOi+vuiPsuOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDHpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiYWltb2c4NSIsImRlc2MiOiLlnKjmmI/pu4TmmqfmmKfnmoTljaflrqTnga/lhYnkuIvvvIzluoTovr7oj7LppbHmu6HnmoTouqvkvZPmm7Lnur/ooqvlhYnlvbHph43mlrDli77li5LjgILlpbnmlL7ojaHlnLDot6jlnZDogIzkuIrvvIzku6XmoIflh4bnmoTpqpHkuZjlp7/mgIHlhajmnYPmjozmjqfnnYDmr4/kuIDmrKHotbfkvI/nmoToioLlpY/vvIznuqTnu4bnmoTohbDogqLovbvmia3pl7TogobmhI/ph4rmlL7lh7rmtZPng4jnmoTljp/lp4vmrLLmnJvjgILpmo/lkI7lpbnnnqzpl7TovazlkJHlj6bkuIDkvqfjgIIiLCJhbmNob3IiOiLpu4TmnpxBSeWwj+WtkCIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS95Zi92Ni8xMDQ5L3BsYXlsZXRfY292ZXJfZjBlMmFlNzdiZTk4ODA5Zi5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzFvLzM3LzEwNDkvcGxheWxldF9jb3Zlcl9mMGUyYWU3N2JlOTg4MDlmLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg3N10sInRhZ05hbWVzIjpbIkFJ5oiQ5Lq66a2U5pS5Il0sInRhZ1NsdWdzIjpbIkNSTUciXSwidG90YWxFcGlzb2RlIjoxLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxMzQsImhlYXRWYWx1ZSI6MTQ5MTEsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxOCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo1MDo0MC43NzNaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMDowMDoxNS43NzdaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IkFJ6a2U5pS5LUFJ6a2U5pS5IOW6hOi+vuiPsu+8iOWFqDHpm4bvvIkiLCJrZXl3b3JsZCI6WyJBSemtlOaUueW6hOi+vuiPsiIsIumqkeS5mOWQjuWFpSIsIuWNp+WupOeBr+WFiSIsIkFJ6a2U5pS55bqE6L6+6I+y5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5bqE6L6+6I+yIiwi6aqR5LmY5ae/5oCBIl0sImRlc2NyaXB0aW9uIjoi5Zyo5piP6buE5pqn5pin55qE5Y2n5a6k54Gv5YWJ5LiL77yM5bqE6L6+6I+y6aWx5ruh55qE6Lqr5L2T5puy57q/6KKr5YWJ5b2x6YeN5paw5Yu+5YuS44CC5aW55pS+6I2h5Zyw6Leo5Z2Q6ICM5LiK77yM5Lul5qCH5YeG55qE6aqR5LmY5ae/5oCB5YWo5p2D5o6M5o6n552A5q+P5LiA5qyh6LW35LyP55qE6IqC5aWP77yM57qk57uG55qE6IWw6IKi6L275omt6Ze06IKG5oSP6YeK5pS+5Ye65rWT54OI55qE5Y6f5aeL5qyy5pyb44CC6ZqP5ZCO5aW5556s6Ze06L2s5ZCR5Y+m5LiA5L6n44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CKQUnprZTmlLktQUnprZTmlLkg5bqE6L6+6I+y44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fV0sInNlb0luZm8iOnsidGl0bGUiOiLnhp/mnpznn63liafprZTmlLnkuJPpopggLSDng63pl6hBSeaIkOS6uuefreWJp+S4jum7hOaenOiEkea0numtlOaUueWkp+aIj+WQiOmbhiIsImtleXdvcmRzIjpbIueGn+aenOefreWJpyIsIum7hOaenOefreWJpyIsIum7hOaenCIsIkFJ5oiQ5Lq655+t5YmnIiwi6a2U5pS55LiT6aKYIiwi6a2U5pS555+t5YmnIiwi6L2s5oCn5ZCO5oiR56W45Lmx5L+u5LuZ55WMIiwi5pyA5by65pi+56S65ZmoIiwi5oiQ5Lq655+t5YmnQVBQIl0sImRlc2NyaXB0aW9uIjoi5ryr5q2l54af5p6c55+t5Ymn6a2U5pS55LiT6aKY77yM5L2T6aqM6ISR5rSe5aSn5byA5LiO57uP5YW46aKg6KaG5Lqk57uH55qE5aWH5aaZ6KeG6KeJ55ub5a6044CC5bmz5Y+w5q+P5pel5L+d5oyB5oyB57ut5pu05paw77yM54Gr54Ot5pS25b2V5LqG44CK6L2s5oCn5ZCO5oiR56W45Lmx5L+u5LuZ55WM44CL44CB44CK5pyA5by65pi+56S65Zmo44CL562J6auY5Lq65rCU6a2U5pS55aSn5oiP44CC6L+Z6YeM5Ymn5oOF5Y+N6L2s5a+G6ZuG44CB6K6+5a6a5paw5aWH6L+H55i+44CC5b+r5p2l5LiL6L295a6Y5pa55LiT5bGe56aP5YipQVBQ77yM5bim5oKo6ZqP5pe26ZqP5Zyw5bC95oOF55WF5Lqr5peg5bmy5omw55qE6auY5riF5o6M5LiK6L+95Ymn5paw5L2T6aqM77yBIiwid2ViU2l0ZU5hbWUiOiLnhp/mnpznn63liaciLCJjYW5vbmljYWxVcmwiOiJodHRwczovL3NodWd1b2RqLmNvbS90b3BpYy1kZXRhaWwvbW9nYWkifX0seyJpZCI6MTI2ODYsIm5hbWUiOiLkubHkvKYiLCJzbHVnIjoibHVhbmx1biIsImljb24iOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2FmL2c4LzEwNDkvJUU0JUI5JUIxJUU0JUJDJUE2LmpwZyIsInJhbmsiOjMsInBsYXlsZXRDb3VudCI6NTQsImxpc3QiOlt7ImlkIjoxNDk5MCwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDZUMDc6MTk6NDguNTYzWiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwOToyMjozM1oiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDNUMTI6MTg6MjRaIiwidGhlbWVJZHMiOlsxMjY4Nl0sInRoZW1lTmFtZXMiOlsi5Lmx5LymIl0sInRoZW1lU2x1Z3MiOlsibHVhbmx1biJdLCJjYXRlZ29yeUlkcyI6WzExMTA0XSwidGl0bGUiOiLmiJHnmoTnvo7oibPlsrPmr40iLCJwbGF5TmFtZSI6IuaIkeeahOe+juiJs+Wys+avjSIsImRlc2NyaXB0aW9uIjoi5paw5ama54eV5bCU77yM5bKz5q+N5Li654Wn5paZ5aWz5YS/5YWl5L2P5a625Lit44CC5byv6IWw6Zyy5Ye65LqL5Lia57q/5LiO6JW+5Lid77yM5b275bqV5Ye756m/5LuW55qE55CG5pm644CC5rex5aSc6Ziz5Y+w6YKj5oq557Sr6Imy6JW+5Lid5bim552A5L2T6aaZ5byV5Lq65rex5ZeF44CC6Zeo57yd6YeM5aW55q2j6Ieq5aix77yM5Y+j5Lit6L275ZSk5LuW55qE5ZCN5a2X44CC6Zeo5aSW5LuW5pSl552A5YaF6KOk6IOv5LiL54Gr6LW377yM6Zeo5YaF5aW55aiH5ZaY5ZCB5ZCB44CC5Lik5Lq66ZqU56m65YWx6bij5ZCE6Ieq6YeK5pS+77yM56aB5b+M5q2j5byP5ouJ5byA44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5oiR55qE576O6Imz5bKz5q+N44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysNembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJ3ZG15eW0iLCJkZXNjIjoi5paw5ama54eV5bCU77yM5bKz5q+N5Li654Wn5paZ5aWz5YS/5YWl5L2P5a625Lit44CC5byv6IWw6Zyy5Ye65LqL5Lia57q/5LiO6JW+5Lid77yM5b275bqV5Ye756m/5LuW55qE55CG5pm644CC5rex5aSc6Ziz5Y+w6YKj5oq557Sr6Imy6JW+5Lid5bim552A5L2T6aaZ5byV5Lq65rex5ZeF44CC6Zeo57yd6YeM5aW55q2j6Ieq5aix77yM5Y+j5Lit6L275ZSk5LuW55qE5ZCN5a2X44CC6Zeo5aSW5LuW5pSl552A5YaF6KOk6IOv5LiL54Gr6LW377yM6Zeo5YaF5aW55aiH5ZaY5ZCB5ZCB44CC5Lik5Lq66ZqU56m65YWx6bij5ZCE6Ieq6YeK5pS+77yM56aB5b+M5q2j5byP5ouJ5byA44CCIiwiYW5jaG9yIjoi5pyA5YWo54mH5bqTIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3Z2L3dkLzEwNDkvcGxheWxldF9jb3Zlcl9hNDczODE1YmRlM2Y1YWIxLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvbWUveTcvMTA0OS9wbGF5bGV0X2NvdmVyX2E0NzM4MTViZGUzZjVhYjEuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODYwXSwidGFnTmFtZXMiOlsi5Lmx5LymIl0sInRhZ1NsdWdzIjpbImx1YW5sdW4iXSwidG90YWxFcGlzb2RlIjo1LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjo0LCJoZWF0VmFsdWUiOjIwODYsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxMiwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozOS41NjFaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoyMi4wNDRaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuaIkeeahOe+juiJs+Wys+avjSIsIuWys+avjeS4juWls+WpvyIsIuWutuW6reefreWJpyIsIuaWsOWpmuWys+avjea3seWknOemgeW/jCIsIumDveW4guemgeW/jOWys+avjSIsIue0q+iJsuiVvuS4nSIsIumXqOe8neiHquWosSIsIuWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuWys+avjeiVvuS4neWHu+epv+eQhuaZuiIsIumXqOe8nemHjOeahOWys+avjeiHquWosSJdLCJkZXNjcmlwdGlvbiI6IuaWsOWpmueHleWwlO+8jOWys+avjeS4uueFp+aWmeWls+WEv+WFpeS9j+WutuS4reOAguW8r+iFsOmcsuWHuuS6i+S4mue6v+S4juiVvuS4ne+8jOW9u+W6leWHu+epv+S7lueahOeQhuaZuuOAgua3seWknOmYs+WPsOmCo+aKuee0q+iJsuiVvuS4neW4puedgOS9k+mmmeW8leS6uua3seWXheOAgumXqOe8nemHjOWlueato+iHquWose+8jOWPo+S4rei9u+WUpOS7lueahOWQjeWtl+OAgumXqOWkluS7luaUpeedgOWGheijpOiDr+S4i+eBq+i1t++8jOmXqOWGheWlueWoh+WWmOWQgeWQgeOAguS4pOS6uumalOepuuWFsem4o+WQhOiHqumHiuaUvu+8jOemgeW/jOato+W8j+aLieW8gOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuaIkeeahOe+juiJs+Wys+avjeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDXpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ1MjksInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOnRydWUsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDNUMTA6NTY6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0wOS0xMlQyMTo1MDowNVoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMDFUMDg6MDM6MTZaIiwidGhlbWVJZHMiOlsxMjY4MSwxMjY4Nl0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIiwi5Lmx5LymIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIiwibHVhbmx1biJdLCJjYXRlZ29yeUlkcyI6WzExMTAyLDExMTA0LDExMTA1XSwidGl0bGUiOiLprLzniLbnnJ/kurrniYjvvIjlhagxMOmbhu+8iSIsInBsYXlOYW1lIjoi6ay854i255yf5Lq654mIIiwiZGVzY3JpcHRpb24iOiLnmb3lpKnku5bmmK/muKnmn5TkvZPotLTjgIHnhafpob7lrrbluq3nmoTmqKHojIPnu6fniLbvvIzkuIDliLDlpJzluZXpmY3kuLTkvr/lvbvlupXmkpXlvIDkvKroo4XvvIzlhYjmmK/ku6Xnu53lr7nnmoTlvLrogIXlp7/mgIHlvLrooYzljaDmnInkuoblgrLlqIflj5vpgIbnmoTlp5Dlp5DniLHojonvvIzpmo/lkI7lj4jlsIbmuIXnuq/lj6/kurrnmoTlprnlprnnurHlpYjkuIDmraXmraXosIPmlZnlvpflvbvlupXmsonmsqbjgILku47mnIDliJ3nmoTlgbfnqqXlgbfpl7vliLDlhoXlv4PnmoTmipfmi5LltKnmuoPjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrprLzniLbnnJ/kurrniYjjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiIsInNsdWciOiJndWlmdXpoIiwiZGVzYyI6IueZveWkqeS7luaYr+a4qeaflOS9k+i0tOOAgeeFp+mhvuWutuW6reeahOaooeiMg+e7p+eItu+8jOS4gOWIsOWknOW5lemZjeS4tOS+v+W9u+W6leaSleW8gOS8quijhe+8jOWFiOaYr+S7pee7neWvueeahOW8uuiAheWnv+aAgeW8uuihjOWNoOacieS6huWCsuWoh+WPm+mAhueahOWnkOWnkOeIseiOie+8jOmaj+WQjuWPiOWwhua4hee6r+WPr+S6uueahOWmueWmuee6seWliOS4gOatpeatpeiwg+aVmeW+l+W9u+W6leayieaypuOAguS7juacgOWIneeahOWBt+eqpeWBt+mXu+WIsOWGheW/g+eahOaKl+aLkuW0qea6g+OAgiIsImFuY2hvciI6IiIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS90cy8zby8xMDQ5L3BsYXlsZXRfY292ZXJfYWU1ZmE2YzdkNzA3ODg2MC5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlLzYyL3Q0LzEwNDkvcGxheWxldF9jb3Zlcl9mYmY3ZTNjZWVhNTZlZjM0LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg1MSwxMjg1MiwxMjg1OV0sInRhZ05hbWVzIjpbIuWOn+WImyIsIum7hOaenCIsIuiJs+mBhyJdLCJ0YWdTbHVncyI6WyJZQyIsImh1YW5nZ3VvIiwieWFueXUiXSwidG90YWxFcGlzb2RlIjoxMCwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTgwLCJoZWF0VmFsdWUiOjIxMjM0LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTYsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDY6MjkuMTQ1WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDI6MDA6MTMuNTJaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IumsvOeItuecn+S6uueJiO+8iOWFqDEw6ZuG77yJIiwia2V5d29ybGQiOlsi6ay854i255yf5Lq654mIIiwi55W45b2i5a625bqtIiwi5aeQ5aa55LqJ5a6gIiwi6ay854i255yf5Lq654mI5a6M5pW054mIIiwi5Zyo57q/55yLIiwi57un54i2Iiwi54ix6I6JIiwi57qx5aWIIl0sImRlc2NyaXB0aW9uIjoi55m95aSp5LuW5piv5rip5p+U5L2T6LS044CB54Wn6aG+5a625bqt55qE5qih6IyD57un54i277yM5LiA5Yiw5aSc5bmV6ZmN5Li05L6/5b275bqV5pKV5byA5Lyq6KOF77yM5YWI5piv5Lul57ud5a+555qE5by66ICF5ae/5oCB5by66KGM5Y2g5pyJ5LqG5YKy5aiH5Y+b6YCG55qE5aeQ5aeQ54ix6I6J77yM6ZqP5ZCO5Y+I5bCG5riF57qv5Y+v5Lq655qE5aa55aa557qx5aWI5LiA5q2l5q2l6LCD5pWZ5b6X5b275bqV5rKJ5rKm44CC5LuO5pyA5Yid55qE5YG356ql5YG36Ze75Yiw5YaF5b+D55qE5oqX5ouS5bSp5rqD44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6ay854i255yf5Lq654mI44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ2NjMsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDA3OjI3OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMTJUMDg6MTE6MDRaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTAyVDEwOjA0OjEwWiIsInRoZW1lSWRzIjpbMTI2ODZdLCJ0aGVtZU5hbWVzIjpbIuS5seS8piJdLCJ0aGVtZVNsdWdzIjpbImx1YW5sdW4iXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNF0sInRpdGxlIjoi56m/6L+H6JaE6Zu+55qE5pep5pmoIOesrOS6jOWto++8iOWFqDnpm4bvvIkiLCJwbGF5TmFtZSI6Iuepv+i/h+iWhOmbvueahOaXqeaZqCDnrKzkuozlraMiLCJkZXNjcmlwdGlvbiI6Iui6q+WkhOWGnOadkeeOsOWunueUn+a0u+mHjeWOi+S5i+S4i+eahOWnkOWkq+adjuWkp+eJm++8jOmdouWvueedgOWnkOWnkOS4juWwj+WnqOWtkOWPjOmHjeWkueWHu+S4i+eahOeBq+eDreWLvuW8le+8jOWGheW/g+eahOassuacm+S4jumBk+W+t+W6lee6v+WPkeeUn+a/gOeDiOeisOaSnuOAguWmueWmueWmgumlpeS8vOa4tOWcsOS4u+WKqOaSqeaLqO+8jOWnkOWnkOWImeS7pee7neWvueeahOWnv+aAgeeWr+eLguWNoOacieOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuepv+i/h+iWhOmbvueahOaXqeaZqCDnrKzkuozlraPjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw56ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImNodWFuZ3UiLCJkZXNjIjoi6Lqr5aSE5Yac5p2R546w5a6e55Sf5rS76YeN5Y6L5LmL5LiL55qE5aeQ5aSr5p2O5aSn54mb77yM6Z2i5a+5552A5aeQ5aeQ5LiO5bCP5aeo5a2Q5Y+M6YeN5aS55Ye75LiL55qE54Gr54Ot5Yu+5byV77yM5YaF5b+D55qE5qyy5pyb5LiO6YGT5b635bqV57q/5Y+R55Sf5r+A54OI56Kw5pKe44CC5aa55aa55aaC6aWl5Ly85ri05Zyw5Li75Yqo5pKp5ouo77yM5aeQ5aeQ5YiZ5Lul57ud5a+555qE5ae/5oCB55av54uC5Y2g5pyJ44CCIiwiYW5jaG9yIjoiSlZJROeyvumAiSIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS95ei8zeC8xMDQ5L3BsYXlsZXRfY292ZXJfODRhOTMwNGE0ZDllNGJkNC5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL29kL3liLzEwNDkvcGxheWxldF9jb3Zlcl84NGE5MzA0YTRkOWU0YmQ0LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg2NywxMjg1OSwxMjg2MF0sInRhZ05hbWVzIjpbIuS5oeadkSIsIuiJs+mBhyIsIuS5seS8piJdLCJ0YWdTbHVncyI6WyJ4aWFuZ2N1biIsInlhbnl1IiwibHVhbmx1biJdLCJ0b3RhbEVwaXNvZGUiOjksInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjEzOSwiaGVhdFZhbHVlIjoxNzY1NywiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjIwLCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ4OjExLjcyOFoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA2VDIzOjAwOjE1LjM1MloiLCJzZW9JbmZvIjp7InRpdGxlIjoi56m/6L+H6JaE6Zu+55qE5pep5pmoIOesrOS6jOWto++8iOWFqDnpm4bvvIkiLCJrZXl3b3JsZCI6WyLnqb/ov4foloTpm77nmoTml6nmmajnrKzkuozlraMiLCLkuaHmnZHpo47mtYEiLCLlpJrkurrmt7fmiJgiLCLnqb/ov4foloTpm77nmoTml6nmmajnrKzkuozlraPlrozmlbTniYgiLCLlnKjnur/nnIsiLCLmnY7lpKfniZsiLCLlp5Dlp5AiLCLlsI/lp6jlrZAiXSwiZGVzY3JpcHRpb24iOiLouqvlpITlhpzmnZHnjrDlrp7nlJ/mtLvph43ljovkuYvkuIvnmoTlp5DlpKvmnY7lpKfniZvvvIzpnaLlr7nnnYDlp5Dlp5DkuI7lsI/lp6jlrZDlj4zph43lpLnlh7vkuIvnmoTngavng63li77lvJXvvIzlhoXlv4PnmoTmrLLmnJvkuI7pgZPlvrflupXnur/lj5HnlJ/mv4Dng4jnorDmkp7jgILlprnlprnlpoLppaXkvLzmuLTlnLDkuLvliqjmkqnmi6jvvIzlp5Dlp5DliJnku6Xnu53lr7nnmoTlp7/mgIHnlq/ni4LljaDmnInjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrnqb/ov4foloTpm77nmoTml6nmmagg56ys5LqM5a2j44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysOembhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fV0sInNlb0luZm8iOnsidGl0bGUiOiLnhp/mnpznn63liafkubHkvKbkuJPpopggLSDng63pl6hBSeaIkOS6uuefreWJp+S4jum7hOaenOemgeW/jOS8pueQhuWkp+aIj+WQiOmbhiIsImtleXdvcmRzIjpbIueGn+aenOefreWJpyIsIum7hOaenOefreWJpyIsIum7hOaenCIsIkFJ5oiQ5Lq655+t5YmnIiwi5Lmx5Lym5LiT6aKYIiwi56aB5b+M55+t5YmnIiwi5a625peP56eY5LqLIiwi6ay854i255yf5Lq654mIIiwi5oiQ5Lq655+t5YmnQVBQIiwi5Lmx5Lym55+t5YmnIl0sImRlc2NyaXB0aW9uIjoi5o6i57Si54af5p6c55+t5Ymn5Lmx5Lym5LiT6aKY77yM6aKG55Wl5omT56C05Lyg57uf5Lym55CG6YGT5b635p2f57ya55qE5p6B6Ie056aB5b+M5ouJ5omv44CC5bmz5Y+w5q+P5pel5L+d5oyB5oyB57ut5pu05paw77yM54Gr54Ot5pS25b2V5LqG44CK5a625peP56eY5LqL44CL44CB44CK6ay854i255yf5Lq654mI44CL562J6auY5Lq65rCU5Lmx5Lym6aKY5p2Q5aSn5oiP44CC6L+Z6YeM5Ymn5oOF5Y+N6L2s5LiN5pat44CB5oOF5oSf5byg5Yqb5Y2B6Laz44CC546w5Zyo5bCx5LiL6L295a6Y5pa55LiT5bGe56aP5YipQVBQ77yM5bim5oKo6ZqP5pe26ZqP5Zyw55WF5Lqr5peg5bmy5omw55qE6auY5riF5o6M5LiK6L+95Ymn5paw5L2T6aqM77yBIiwid2ViU2l0ZU5hbWUiOiLnhp/mnpznn63liaciLCJjYW5vbmljYWxVcmwiOiJodHRwczovL3NodWd1b2RqLmNvbS90b3BpYy1kZXRhaWwvbHVhbmx1biJ9fSx7ImlkIjoxMjY4NCwibmFtZSI6Iuepv+i2iiIsInNsdWciOiJjaHVhbnl1ZSIsImljb24iOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3hoL2dsLzEwNDkvJUU1JTkwJThFJUU1JUFFJUFCLmpwZyIsInJhbmsiOjUsInBsYXlsZXRDb3VudCI6NDcsImxpc3QiOlt7ImlkIjoxNDk3Niwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjp0cnVlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wNlQxMjoyODo0Ny4zNDZaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTExLTA1VDAyOjI1OjAwWiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wNVQwNDoyMzo0MloiLCJ0aGVtZUlkcyI6WzEyNjg0XSwidGhlbWVOYW1lcyI6WyLnqb/otooiXSwidGhlbWVTbHVncyI6WyJjaHVhbnl1ZSJdLCJjYXRlZ29yeUlkcyI6WzExMTA1XSwidGl0bGUiOiLmnKvkuJbvvJrnlLflpbPmr5TkvovlpLHooaHvvIznvo7lpbPku6zpg73lnKjmiqLmiJEiLCJwbGF5TmFtZSI6Iuacq+S4lu+8mueUt+Wls+avlOS+i+Wkseihoe+8jOe+juWls+S7rOmDveWcqOaKouaIkSIsImRlc2NyaXB0aW9uIjoi5pyr5LiW6ZmN5Li05ZCO55S35aWz5q+U5L6L5Lil6YeN5aSx6KGh77yM576O5aWz5Lus6YO95Zyo5oqi5oiR44CC5aW55Lus5LuO6ZqQ5b+N6LWw5ZCR5Li75Yqo77yM6KGj6KGr6KKr6KSq5bC95ZCO6Lqr5L2T5Zyo5oiR5omL5LiL6L276L276aKk5oqW44CC5LiA5qyh5qyh6KKr5aGr5ruh5Yiw5pyA5rex5aSE77yM5rWq5Y+r5Y6L5oqR5LiN5L2P44CC5YWx5oSf6K6p5qyy5pyb5ZCM5q2l54iG5Y+R77yM5pyr5LiW55qE56aB5b+M5Zyo5aSc6YeM5b275bqV5rKJ5rKm77yM5YaN5Lmf5Zue5LiN5Yiw5LuO5YmN44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5pyr5LiW77ya55S35aWz5q+U5L6L5aSx6KGh77yM576O5aWz5Lus6YO95Zyo5oqi5oiR44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoibXNubmIiLCJkZXNjIjoi5pyr5LiW6ZmN5Li05ZCO55S35aWz5q+U5L6L5Lil6YeN5aSx6KGh77yM576O5aWz5Lus6YO95Zyo5oqi5oiR44CC5aW55Lus5LuO6ZqQ5b+N6LWw5ZCR5Li75Yqo77yM6KGj6KGr6KKr6KSq5bC95ZCO6Lqr5L2T5Zyo5oiR5omL5LiL6L276L276aKk5oqW44CC5LiA5qyh5qyh6KKr5aGr5ruh5Yiw5pyA5rex5aSE77yM5rWq5Y+r5Y6L5oqR5LiN5L2P44CC5YWx5oSf6K6p5qyy5pyb5ZCM5q2l54iG5Y+R77yM5pyr5LiW55qE56aB5b+M5Zyo5aSc6YeM5b275bqV5rKJ5rKm77yM5YaN5Lmf5Zue5LiN5Yiw5LuO5YmN44CCIiwiYW5jaG9yIjoi5Y6f5YibIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3hxL3h3LzEwNDkvcGxheWxldF9jb3Zlcl81Nzk1M2YwNzc4ZDY2NmVkLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvNmkvbmwvMTA0OS9wbGF5bGV0X2NvdmVyXzllNGY5NDIxMWYwMDE1ZWYuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODY4XSwidGFnTmFtZXMiOlsi5pyr5pel5bqf5ZyfIl0sInRhZ1NsdWdzIjpbIm1vcmlmZWl0dSJdLCJ0b3RhbEVwaXNvZGUiOjEwLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjo4LCJoZWF0VmFsdWUiOjQzMDIsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxOSwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozMy4wMjZaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wNlQyMjowMDoxMS44NjNaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuacq+S4liIsIueUt+Wls+avlOS+i+WkseihoSIsIuacq+aXpeefreWJpyIsIuacq+S4lueUt+Wls+avlOS+i+WkseihoSIsIuacq+S4luWQjuWuq+aDheiJsiIsIue+juWls+S7rOmDveWcqOaKouaIkSIsIuWujOaVtOeJiCIsIuWcqOe6v+eciyIsIue+juWls+aKouaIkeeahOacq+S4luWknCIsIuacq+S4lumHjOiiq+e+juWls+S7rOWMheWbtCJdLCJkZXNjcmlwdGlvbiI6Iuacq+S4lumZjeS4tOWQjueUt+Wls+avlOS+i+S4pemHjeWkseihoe+8jOe+juWls+S7rOmDveWcqOaKouaIkeOAguWlueS7rOS7jumakOW/jei1sOWQkeS4u+WKqO+8jOiho+ihq+iiq+ikquWwveWQjui6q+S9k+WcqOaIkeaJi+S4i+i9u+i9u+mipOaKluOAguS4gOasoeasoeiiq+Whq+a7oeWIsOacgOa3seWkhO+8jOa1quWPq+WOi+aKkeS4jeS9j+OAguWFseaEn+iuqeassuacm+WQjOatpeeIhuWPke+8jOacq+S4lueahOemgeW/jOWcqOWknOmHjOW9u+W6leayieaypu+8jOWGjeS5n+WbnuS4jeWIsOS7juWJjeOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuacq+S4lu+8mueUt+Wls+avlOS+i+Wkseihoe+8jOe+juWls+S7rOmDveWcqOaKouaIkeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NjY0LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wM1QwOTozNTozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTEwLTEyVDA3OjE0OjMwWiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMS0wMlQxMDowMzo1MVoiLCJ0aGVtZUlkcyI6WzEyNjg0XSwidGhlbWVOYW1lcyI6WyLnqb/otooiXSwidGhlbWVTbHVncyI6WyJjaHVhbnl1ZSJdLCJjYXRlZ29yeUlkcyI6WzExMTA1XSwidGl0bGUiOiLnqb/otormiJDkuobmm7nmk43vvIjlhag26ZuG77yJIiwicGxheU5hbWUiOiLnqb/otormiJDkuobmm7nmk40iLCJkZXNjcmlwdGlvbiI6IuS4gOiniemGkuadpe+8jOeOsOS7o+S6uuern+aEj+Wkluepv+i2iuaIkOS6huS5seS4luaerembhOabueaTjeOAguabtOiuqeS6uuihgOiEieWBvuW8oOeahOaYr+KAlOKAlOW5veaal+eahOWvneWupOmHjOaXqeWwseiiq+WFs+aKvOedgOS4ieS9jeWQjeWKqOWkqeS4i+eahOe7neiJsuS6uuWmu++8muiyguidieOAgeWkp+S5lOS4juWwj+S5lOOAguacrOaDs+WcqOS5seS4luS4reWBmuS4qumBtee6quWuiOazleeahOWlveS6uu+8jOWPr+W9k+WOmumHjeeahOWvneWupOWkp+mXqOi9sOeEtuWFs+S4iumCo+S4gOWIu+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuepv+i2iuaIkOS6huabueaTjeOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDbpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiY2h1YW55MiIsImRlc2MiOiLkuIDop4nphpLmnaXvvIznjrDku6Pkurrnq5/mhI/lpJbnqb/otormiJDkuobkubHkuJbmnq3pm4Tmm7nmk43jgILmm7TorqnkurrooYDohInlgb7lvKDnmoTmmK/igJTigJTlub3mmpfnmoTlr53lrqTph4zml6nlsLHooqvlhbPmirznnYDkuInkvY3lkI3liqjlpKnkuIvnmoTnu53oibLkurrlprvvvJrosoLonYnjgIHlpKfkuZTkuI7lsI/kuZTjgILmnKzmg7PlnKjkubHkuJbkuK3lgZrkuKrpgbXnuqrlrojms5XnmoTlpb3kurrvvIzlj6/lvZPljprph43nmoTlr53lrqTlpKfpl6jovbDnhLblhbPkuIrpgqPkuIDliLvjgIIiLCJhbmNob3IiOiLmmJ/lrqvkuIDoirEiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvNDcvYWIvMTA0OS9wbGF5bGV0X2NvdmVyX2YwZWM2YzQwYzI1ZTIwMDEuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9xZy82OC8xMDQ5L3BsYXlsZXRfY292ZXJfZjBlYzZjNDBjMjVlMjAwMS5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTcsMTI4NTksMTI4NTVdLCJ0YWdOYW1lcyI6WyLlj6Tku6MiLCLoibPpgYciLCLpg73luIIiXSwidGFnU2x1Z3MiOlsiZ3VkYWkiLCJ5YW55dSIsImR1c2hpIl0sInRvdGFsRXBpc29kZSI6NiwidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTQwLCJoZWF0VmFsdWUiOjE3NDQ5LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTcsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDg6MTEuOTU2WiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDZUMjM6MDA6MTUuNTYzWiIsInNlb0luZm8iOnsidGl0bGUiOiLnqb/otormiJDkuobmm7nmk43vvIjlhag26ZuG77yJIiwia2V5d29ybGQiOlsi56m/6LaK5oiQ5LqG5pu55pONIiwi5pu55pON5Lq65aa7Iiwi56m/6LaK5Lmx5LiWIiwi56m/6LaK5oiQ5LqG5pu55pON5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5pu55pONIiwi6LKC6J2JIiwi5aSn5LmUIiwi5bCP5LmUIl0sImRlc2NyaXB0aW9uIjoi5LiA6KeJ6YaS5p2l77yM546w5Luj5Lq656uf5oSP5aSW56m/6LaK5oiQ5LqG5Lmx5LiW5p6t6ZuE5pu55pON44CC5pu06K6p5Lq66KGA6ISJ5YG+5byg55qE5piv4oCU4oCU5bm95pqX55qE5a+d5a6k6YeM5pep5bCx6KKr5YWz5oq8552A5LiJ5L2N5ZCN5Yqo5aSp5LiL55qE57ud6Imy5Lq65aa777ya6LKC6J2J44CB5aSn5LmU5LiO5bCP5LmU44CC5pys5oOz5Zyo5Lmx5LiW5Lit5YGa5Liq6YG157qq5a6I5rOV55qE5aW95Lq677yM5Y+v5b2T5Y6a6YeN55qE5a+d5a6k5aSn6Zeo6L2w54S25YWz5LiK6YKj5LiA5Yi744CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK56m/6LaK5oiQ5LqG5pu55pON44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysNumbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDcyOCwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6ZmFsc2UsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDNUMDY6MTM6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0wOS0xMlQyMTo1MDowOVoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMDFUMDg6MDA6NTRaIiwidGhlbWVJZHMiOlsxMjY4NF0sInRoZW1lTmFtZXMiOlsi56m/6LaKIl0sInRoZW1lU2x1Z3MiOlsiY2h1YW55dWUiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNV0sInRpdGxlIjoi5YWo54+t5Zyw6ZOB5rGC55SfIOWPquacieaIkeS4gOS4queUt+eUnyIsInBsYXlOYW1lIjoi5YWo54+t5Zyw6ZOB5rGC55SfIOWPquacieaIkeS4gOS4queUt+eUnyIsImRlc2NyaXB0aW9uIjoi54yb54S2552B5byA5Y+M55y877yM5LiJ5Y2B5aSa5YW36LWk5p2h5p2h55qE5bm06L275aWz5L2T5qiq6ZmI5Zyo5bCB6Zet55qE6ZOB55qu6L2m5Y6i5YaF77yM6ICM5YGM5aSn55qE54+t57qn6YeM56uf54S25Y+q5Ymp5LiL5oiR6L+Z5ZSv5LiA55qE54us6IuX55S355Sf44CC56We56eY5Yaw5Ya355qE57O757uf5Zyo6ISR5rW35Lit5a6j5ZGK77ya6L+Z5piv5LiA5Zy65peg5oOF55qE5pyr5pel5rGC55Sf77yM5Y+q6KaB55av54uC5Lqk5ZCI5bCx6IO96I635b6X5Yqb6YeP5LiN5pat5Y+Y5by644CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5YWo54+t5Zyw6ZOB5rGC55SfIOWPquacieaIkeS4gOS4queUt+eUn+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDPpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoicXVhbmJhbiIsImRlc2MiOiLnjJvnhLbnnYHlvIDlj4znnLzvvIzkuInljYHlpJrlhbfotaTmnaHmnaHnmoTlubTovbvlpbPkvZPmqKrpmYjlnKjlsIHpl63nmoTpk4Hnmq7ovabljqLlhoXvvIzogIzlgYzlpKfnmoTnj63nuqfph4znq5/nhLblj6rliankuIvmiJHov5nllK/kuIDnmoTni6zoi5fnlLfnlJ/jgILnpZ7np5jlhrDlhrfnmoTns7vnu5/lnKjohJHmtbfkuK3lrqPlkYrvvJrov5nmmK/kuIDlnLrml6Dmg4XnmoTmnKvml6XmsYLnlJ/vvIzlj6ropoHnlq/ni4LkuqTlkIjlsLHog73ojrflvpflipvph4/kuI3mlq3lj5jlvLrjgIIiLCJhbmNob3IiOiItIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2hkLzc5LzEwNDkvcGxheWxldF9jb3Zlcl8yNjA1OGUyMzY0M2EzYjQxLmpwZyIsImhvcml6b250YWxDb3ZlciI6IiIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg2OCwxMjg3M10sInRhZ05hbWVzIjpbIuacq+aXpeW6n+WcnyIsIuezu+e7nyJdLCJ0YWdTbHVncyI6WyJtb3JpZmVpdHUiLCJ4aXRvbmciXSwidG90YWxFcGlzb2RlIjozLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxMzcsImhlYXRWYWx1ZSI6MTc4ODksImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxMSwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0ODo0OC40NzNaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMTowMDoxOC43MjhaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuWFqOePreWcsOmTgeaxgueUnyDlj6rmnInmiJHkuIDkuKrnlLfnlJ8iLCJrZXl3b3JsZCI6WyLlhajnj63lnLDpk4HmsYLnlJ/lj6rmnInmiJHkuIDkuKrnlLfnlJ8iLCLlnLDpk4HmsYLnlJ8iLCLnu53lnLDkuqTlkIgiLCLlhajnj63lnLDpk4HmsYLnlJ/lj6rmnInmiJHkuIDkuKrnlLfnlJ/lrozmlbTniYgiLCLlnKjnur/nnIsiLCLmnKvml6XmsYLnlJ8iLCLlpbPkvZPovabljqIiXSwiZGVzY3JpcHRpb24iOiLnjJvnhLbnnYHlvIDlj4znnLzvvIzkuInljYHlpJrlhbfotaTmnaHmnaHnmoTlubTovbvlpbPkvZPmqKrpmYjlnKjlsIHpl63nmoTpk4Hnmq7ovabljqLlhoXvvIzogIzlgYzlpKfnmoTnj63nuqfph4znq5/nhLblj6rliankuIvmiJHov5nllK/kuIDnmoTni6zoi5fnlLfnlJ/jgILnpZ7np5jlhrDlhrfnmoTns7vnu5/lnKjohJHmtbfkuK3lrqPlkYrvvJrov5nmmK/kuIDlnLrml6Dmg4XnmoTmnKvml6XmsYLnlJ/vvIzlj6ropoHnlq/ni4LkuqTlkIjlsLHog73ojrflvpflipvph4/kuI3mlq3lj5jlvLrjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlhajnj63lnLDpk4HmsYLnlJ8g5Y+q5pyJ5oiR5LiA5Liq55S355Sf44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fV0sInNlb0luZm8iOnsidGl0bGUiOiLnhp/mnpznn63liafnqb/otorkuJPpopggLSDng63pl6hBSeaIkOS6uuefreWJp+S4jum7hOaenOaXtuepuuepv+i2iuWkp+aIj+WQiOmbhiIsImtleXdvcmRzIjpbIueGn+aenOefreWJpyIsIum7hOaenOefreWJpyIsIum7hOaenCIsIkFJ5oiQ5Lq655+t5YmnIiwi56m/6LaK5LiT6aKYIiwi56m/6LaK55+t5YmnIiwi6L2s5oCn5ZCO5oiR56W45Lmx5L+u5LuZ55WMIiwi5YWo54+t5Zyw6ZOB5rGC55SfIiwi5oiQ5Lq655+t5YmnQVBQIl0sImRlc2NyaXB0aW9uIjoi5o6i57Si54af5p6c55+t5Ymn56m/6LaK5LiT6aKY77yM5L2T6aqM56m/5qKt5LqO5LiN5ZCM5pe256m65LmL6Ze055qE5aWH5bm75YaS6Zmp5LiO5a6/5ZG957qg6JGb44CC5bmz5Y+w5q+P5pel5L+d5oyB5oyB57ut5pu05paw77yM54Gr54Ot5pS25b2V5LqG44CK6L2s5oCn5ZCO5oiR56W45Lmx5L+u5LuZ55WM44CL44CB44CK5YWo54+t5Zyw6ZOB5rGC55SfIOWPquacieaIkeS4gOS4queUt+eUn+OAi+etiemrmOS6uuawlOepv+i2iuWkp+aIj+OAgui/memHjOWJp+aDheWPjei9rOS4jeaWreOAgeiEkea0nuWkp+W8gOWIuua/gOOAgueOsOWcqOWwseS4i+i9veWumOaWueS4k+Wxnuemj+WIqUFQUO+8jOW4puaCqOmaj+aXtumaj+WcsOWwveaDheeVheS6q+aXoOW5suaJsOeahOmrmOa4heaOjOS4iui/veWJp+aWsOS9k+mqjO+8gSIsIndlYlNpdGVOYW1lIjoi54af5p6c55+t5YmnIiwiY2Fub25pY2FsVXJsIjoiaHR0cHM6Ly9zaHVndW9kai5jb20vdG9waWMtZGV0YWlsL2NodWFueXVlIn19LHsiaWQiOjEyNjgyLCJuYW1lIjoi5LuZ5L6gIiwic2x1ZyI6InhpYW54aWEiLCJpY29uIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9ibC9hZi8xMDQ5LyVFNCVCRiVBRSVFNCVCQiU5OSVFOCU4OSVCMyVFOSU4MSU4Ny5qcGciLCJyYW5rIjo3LCJwbGF5bGV0Q291bnQiOjM5LCJsaXN0IjpbeyJpZCI6MTQ3NjAsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDA0OjI0OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMjJUMDM6Mjc6MzBaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTA5LTIyVDA3OjE0OjAzWiIsInRoZW1lSWRzIjpbMTI2ODJdLCJ0aGVtZU5hbWVzIjpbIuS7meS+oCJdLCJ0aGVtZVNsdWdzIjpbInhpYW54aWEiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNV0sInRpdGxlIjoi5oiR5ZKM5LiJ5Liq5aW25aaI5LiL5Ymv5pys77yI5YWoNumbhu+8iSIsInBsYXlOYW1lIjoi5oiR5ZKM5LiJ5Liq5aW25aaI5LiL5Ymv5pysIiwiZGVzY3JpcHRpb24iOiLmiYvmjIHljYfku5nku6TnmoTmnpfpgLjmhI/lpJbnqb/otorliLDkuoblhYnmgKrpmYbnprvnmoTkv67ku5nkuJbnlYzvvIzkuIDnnYHnnLzkvr/ov47pnaLmkp7op4HkuobkuInkvY3ouqvmnZDppbHmu6HniIbkubPnmoTnu53oibLnvo7lpbPjgILnu4/ov4fkuInlpbPlqIfmu7Tmu7TnmoToh6rmiJHku4vnu43miY3lvpfnn6XvvIzku5blh63lgJ/ku6TniYznm7TmjqXouI/lhaXkuobpobbnuqfkv67ku5nlrpfpl6jmuIXpn7PpmIHjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmiJHlkozkuInkuKrlpbblpojkuIvlia/mnKzjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw26ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6IndvaGVzYW4iLCJkZXNjIjoi5omL5oyB5Y2H5LuZ5Luk55qE5p6X6YC45oSP5aSW56m/6LaK5Yiw5LqG5YWJ5oCq6ZmG56a755qE5L+u5LuZ5LiW55WM77yM5LiA552B55y85L6/6L+O6Z2i5pKe6KeB5LqG5LiJ5L2N6Lqr5p2Q6aWx5ruh54iG5Lmz55qE57ud6Imy576O5aWz44CC57uP6L+H5LiJ5aWz5aiH5ru05ru055qE6Ieq5oiR5LuL57uN5omN5b6X55+l77yM5LuW5Yet5YCf5Luk54mM55u05o6l6LiP5YWl5LqG6aG257qn5L+u5LuZ5a6X6Zeo5riF6Z+z6ZiB44CCIiwiYW5jaG9yIjoiIiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3RxL2dtLzEwNDkvcGxheWxldF9jb3Zlcl84OWUzMWU0ZTI5MjkzZGM4LmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2Uvc24vNGovMTA0OS9wbGF5bGV0X2NvdmVyXzg5ZTMxZTRlMjkyOTNkYzguanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODYxLDEyODU0LDEyODU3XSwidGFnTmFtZXMiOlsi5q+N5a2QIiwi5LuZ5L6gIiwi5Y+k5LujIl0sInRhZ1NsdWdzIjpbIm11emkiLCJ4aWFueGlhIiwiZ3VkYWkiXSwidG90YWxFcGlzb2RlIjo2LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNDksImhlYXRWYWx1ZSI6MTY0MTAsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0OTowNy41MDJaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wNlQyMjowMDoyMC44MzZaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IuaIkeWSjOS4ieS4quWltuWmiOS4i+WJr+acrO+8iOWFqDbpm4bvvIkiLCJrZXl3b3JsZCI6WyLmiJHlkozkuInkuKrlpbblpojkuIvlia/mnKwiLCLkv67ku5nnqb/otooiLCLlt6jkubPnvo7lpbMiLCLmiJHlkozkuInkuKrlpbblpojkuIvlia/mnKzlrozmlbTniYgiLCLlnKjnur/nnIsiLCLmnpfpgLgiLCLmuIXpn7PpmIEiXSwiZGVzY3JpcHRpb24iOiLmiYvmjIHljYfku5nku6TnmoTmnpfpgLjmhI/lpJbnqb/otorliLDkuoblhYnmgKrpmYbnprvnmoTkv67ku5nkuJbnlYzvvIzkuIDnnYHnnLzkvr/ov47pnaLmkp7op4HkuobkuInkvY3ouqvmnZDppbHmu6HniIbkubPnmoTnu53oibLnvo7lpbPjgILnu4/ov4fkuInlpbPlqIfmu7Tmu7TnmoToh6rmiJHku4vnu43miY3lvpfnn6XvvIzku5blh63lgJ/ku6TniYznm7TmjqXouI/lhaXkuobpobbnuqfkv67ku5nlrpfpl6jmuIXpn7PpmIHjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmiJHlkozkuInkuKrlpbblpojkuIvlia/mnKzjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw26ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NTE0LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjp0cnVlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAzVDAzOjI4OjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMDktMTJUMjE6NTA6MDRaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTAxVDA4OjAzOjE2WiIsInRoZW1lSWRzIjpbMTI2ODEsMTI2ODJdLCJ0aGVtZU5hbWVzIjpbIuWOn+WIm+efreWJpyIsIuS7meS+oCJdLCJ0aGVtZVNsdWdzIjpbInlhdW5jaHVhbmdkaiIsInhpYW54aWEiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMl0sInRpdGxlIjoi6YC86Imv5Li65aaW77yI5YWoMTDpm4bvvIkiLCJwbGF5TmFtZSI6IumAvOiJr+S4uuWmliIsImRlc2NyaXB0aW9uIjoi5LiA5pyd6L2s55Sf77yM5LuW5bm25pyq6JC95YWl5Yeh5bCY5Lq66Ze077yM6ICM5piv5Z2g5YWl5LqG5LiA5Liq5aSn5aaW57q15qiq44CB5Ye25YW96YGN5Zyw55qE6K+h5byC5byC55WM44CC5Zyo6L+Z54mH5Lmd5q275LiA55Sf55qE57ud5Zyw5Lit77yM5LyX5aaW56uf6Zi05beu6Ziz6ZSZ5bCG5LuW6K+v6K6k5Li65LqG5Lyg6K+05Lit6IO95ouv5pWR5LiH5aaW55qE6Iez6auY4oCc5pWR5LiW5Li74oCd44CC5Li65LqG5Y2a5Y+W5LuW55qE5bqH5oqk5LiO5oGp5rO944CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6YC86Imv5Li65aaW44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoiYmlsaWFuZyIsImRlc2MiOiLkuIDmnJ3ovaznlJ/vvIzku5blubbmnKrokL3lhaXlh6HlsJjkurrpl7TvvIzogIzmmK/lnaDlhaXkuobkuIDkuKrlpKflppbnurXmqKrjgIHlh7blhb3pgY3lnLDnmoTor6HlvILlvILnlYzjgILlnKjov5nniYfkuZ3mrbvkuIDnlJ/nmoTnu53lnLDkuK3vvIzkvJflppbnq5/pmLTlt67pmLPplJnlsIbku5bor6/orqTkuLrkuobkvKDor7TkuK3og73mi6/mlZHkuIflppbnmoToh7Ppq5jigJzmlZHkuJbkuLvigJ3jgILkuLrkuobljZrlj5bku5bnmoTluofmiqTkuI7mganms73jgIIiLCJhbmNob3IiOiIiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvcXUvaDkvMTA0OS9wbGF5bGV0X2NvdmVyX2U4YzFmNTI1YjQ2NzNjMmYuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9oZC9mMC8xMDQ5L3BsYXlsZXRfY292ZXJfNjU0YjkwMGIwNjI2NTgzOC5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTEsMTI4NTIsMTI4NzBdLCJ0YWdOYW1lcyI6WyLljp/liJsiLCLpu4TmnpwiLCLlvILkuJbnlYwiXSwidGFnU2x1Z3MiOlsiWUMiLCJodWFuZ2d1byIsIllTSiJdLCJ0b3RhbEVwaXNvZGUiOjEwLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxNTksImhlYXRWYWx1ZSI6MTcyNDEsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNSwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0NjoxMC42NTVaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wNlQyMjowMDoxMy4yMzNaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IumAvOiJr+S4uuWmlu+8iOWFqDEw6ZuG77yJIiwia2V5d29ybGQiOlsi6YC86Imv5Li65aaWIiwi5byC55WM5aaW5YW9Iiwi5pWR5LiW5Li76K+x5oORIiwi6YC86Imv5Li65aaW5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5Lmd5bC+54uQ5LuZIiwi5pWR5LiW5Li7Il0sImRlc2NyaXB0aW9uIjoi5LiA5pyd6L2s55Sf77yM5LuW5bm25pyq6JC95YWl5Yeh5bCY5Lq66Ze077yM6ICM5piv5Z2g5YWl5LqG5LiA5Liq5aSn5aaW57q15qiq44CB5Ye25YW96YGN5Zyw55qE6K+h5byC5byC55WM44CC5Zyo6L+Z54mH5Lmd5q275LiA55Sf55qE57ud5Zyw5Lit77yM5LyX5aaW56uf6Zi05beu6Ziz6ZSZ5bCG5LuW6K+v6K6k5Li65LqG5Lyg6K+05Lit6IO95ouv5pWR5LiH5aaW55qE6Iez6auY4oCc5pWR5LiW5Li74oCd44CC5Li65LqG5Y2a5Y+W5LuW55qE5bqH5oqk5LiO5oGp5rO944CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK6YC86Imv5Li65aaW44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ4MDMsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTAyVDIzOjAxOjM1LjM4NVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTAtMTBUMDQ6MTE6MzhaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTEwLTEwVDA3OjQ2OjU1WiIsInRoZW1lSWRzIjpbMTI2ODJdLCJ0aGVtZU5hbWVzIjpbIuS7meS+oCJdLCJ0aGVtZVNsdWdzIjpbInhpYW54aWEiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNV0sInRpdGxlIjoi6L2s5oCn5ZCO5oiR56W45Lmx5L+u5LuZ55WM77yI5YWoNumbhu+8iSIsInBsYXlOYW1lIjoi6L2s5oCn5ZCO5oiR56W45Lmx5L+u5LuZ55WMIiwiZGVzY3JpcHRpb24iOiLok6zojrHku5nlrpfnmoTlpKnmiY3lnKPlrZDlh4zpnZLmnKzor6Xpo47lhYnml6DpmZDvvIzljbTlm6Dor6/mnI3kupToibLpgZPmnpzlubbkv67ngrzjgIrpvpnlh6Tln7nlhYPlip/jgIvlr7zoh7TpmLTpmLPlvbvlupXpgIbovazvvIzlnKjkuIDniYfmg4rmgZDkuK3ku47kv4rnvo7nlLflrZDljJbkuLrouqvmrrXlppblqIbnmoTnu53oibLnvo7lqIflqJjjgILotbDmipXml6Dot6/kuYvpmYXvvIzllK/mnInku5bmnIDkv6Hku7vnmoTlv4PohbnlsI/lvJ/mrKfpmLPmmI7nn6XmmZPov5nkuKrlpKnlpKfnp5jlr4bjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrovazmgKflkI7miJHnpbjkubHkv67ku5nnlYzjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw26ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6InpodWFueGkiLCJkZXNjIjoi6JOs6I6x5LuZ5a6X55qE5aSp5omN5Zyj5a2Q5YeM6Z2S5pys6K+l6aOO5YWJ5peg6ZmQ77yM5Y205Zug6K+v5pyN5LqU6Imy6YGT5p6c5bm25L+u54K844CK6b6Z5Yek5Z+55YWD5Yqf44CL5a+86Ie06Zi06Ziz5b275bqV6YCG6L2s77yM5Zyo5LiA54mH5oOK5oGQ5Lit5LuO5L+K576O55S35a2Q5YyW5Li66Lqr5q615aaW5aiG55qE57ud6Imy576O5aiH5aiY44CC6LWw5oqV5peg6Lev5LmL6ZmF77yM5ZSv5pyJ5LuW5pyA5L+h5Lu755qE5b+D6IW55bCP5byf5qyn6Ziz5piO55+l5pmT6L+Z5Liq5aSp5aSn56eY5a+G44CCIiwiYW5jaG9yIjoi6buE5p6c5a6Y5pa5IiwiY292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3A3L2g4LzEwNDkvcGxheWxldF9jb3Zlcl9mZDg4N2VhOTVhOWRkMGVkLmpwZyIsImhvcml6b250YWxDb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvM20vbHIvMTA0OS9wbGF5bGV0X2NvdmVyX2ZkODg3ZWE5NWE5ZGQwZWQuanBnIiwicHJldmlldyI6IiIsInRhZ0lkcyI6WzEyODU0XSwidGFnTmFtZXMiOlsi5LuZ5L6gIl0sInRhZ1NsdWdzIjpbInhpYW54aWEiXSwidG90YWxFcGlzb2RlIjo2LCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxMjgsImhlYXRWYWx1ZSI6MTU1ODEsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNywiY3JlYXRlZEF0IjoiMjAyNi0xMS0wM1QwODo0OToyNy42NjRaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wNlQyMjowMDoxNi43MjlaIiwic2VvSW5mbyI6eyJ0aXRsZSI6Iui9rOaAp+WQjuaIkeeluOS5seS/ruS7meeVjO+8iOWFqDbpm4bvvIkiLCJrZXl3b3JsZCI6WyLovazmgKflkI7miJHnpbjkubHkv67ku5nnlYwiLCLmgKfliKvpgIbovawiLCLkv67ku5nnpoHlv4wiLCLovazmgKflkI7miJHnpbjkubHkv67ku5nnlYzlrozmlbTniYgiLCLlnKjnur/nnIsiLCLlh4zpnZIiLCLmrKfpmLPmmI4iXSwiZGVzY3JpcHRpb24iOiLok6zojrHku5nlrpfnmoTlpKnmiY3lnKPlrZDlh4zpnZLmnKzor6Xpo47lhYnml6DpmZDvvIzljbTlm6Dor6/mnI3kupToibLpgZPmnpzlubbkv67ngrzjgIrpvpnlh6Tln7nlhYPlip/jgIvlr7zoh7TpmLTpmLPlvbvlupXpgIbovazvvIzlnKjkuIDniYfmg4rmgZDkuK3ku47kv4rnvo7nlLflrZDljJbkuLrouqvmrrXlppblqIbnmoTnu53oibLnvo7lqIflqJjjgILotbDmipXml6Dot6/kuYvpmYXvvIzllK/mnInku5bmnIDkv6Hku7vnmoTlv4PohbnlsI/lvJ/mrKfpmLPmmI7nn6XmmZPov5nkuKrlpKnlpKfnp5jlr4bjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrovazmgKflkI7miJHnpbjkubHkv67ku5nnlYzjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKw26ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19XSwic2VvSW5mbyI6eyJ0aXRsZSI6IueGn+aenOefreWJp+S7meS+oOS4k+mimCAtIOeDremXqEFJ5oiQ5Lq655+t5Ymn5LiO6buE5p6c5LuZ5L6g5L+u55yf5aSn5oiP5ZCI6ZuGIiwia2V5d29yZHMiOlsi54af5p6c55+t5YmnIiwi6buE5p6c55+t5YmnIiwi6buE5p6cIiwiQUnmiJDkurrnn63liaciLCLku5nkvqDkuJPpopgiLCLkv67nnJ/nn63liaciLCLovazmgKflkI7miJHnpbjkubHkv67ku5nnlYwiLCLpgLzoia/kuLrlppYiLCLmiJDkurrnn63liadBUFAiLCLku5nkvqDnn63liaciXSwiZGVzY3JpcHRpb24iOiLmvKvmraXnhp/mnpznn63liafku5nkvqDkuJPpopjvvIzmsonmtbjkvZPpqozlhYnmgKrpmYbnprvnmoTkv67nnJ/kuJbnlYzkuI7ku5nmgYvmg4XnvJjkuqTnu4fnmoTop4bop4nlpYfop4LjgILlubPlj7Dmr4/ml6Xkv53mjIHmjIHnu63mm7TmlrDvvIzngavng63mlLblvZXkuobjgIrovazmgKflkI7miJHnpbjkubHkv67ku5nnlYzjgIvjgIHjgIrpgLzoia/kuLrlppbjgIvnrYnpq5jkurrmsJTku5nkvqDlpKfmiI/jgILov5nph4zliafmg4Xlj43ovazkuI3mlq3jgIHkv67nnJ/msJvlm7Tmi4nmu6HjgILlv6vmnaXkuIvovb3lrpjmlrnkuJPlsZ7npo/liKlBUFDvvIzluKbmgqjpmo/ml7bpmo/lnLDlsL3mg4XnlYXkuqvml6DlubLmibDnmoTpq5jmuIXmjozkuIrov73liafmlrDkvZPpqozvvIEiLCJ3ZWJTaXRlTmFtZSI6IueGn+aenOefreWJpyIsImNhbm9uaWNhbFVybCI6Imh0dHBzOi8vc2h1Z3VvZGouY29tL3RvcGljLWRldGFpbC94aWFueGlhIn19LHsiaWQiOjEyNjgzLCJuYW1lIjoi5Y+k6KOFIiwic2x1ZyI6Imd1emh1YW5nIiwiaWNvbiI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvNTMvZHUvMTA0OS8lRTUlOEYlQTQlRTQlQkIlQTMlRTUlOTAlOEUlRTUlQUUlQUIuanBnIiwicmFuayI6NiwicGxheWxldENvdW50IjozNCwibGlzdCI6W3siaWQiOjE0OTg4LCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOnRydWUsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDEyOjA1OjIzLjczNVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDk6NDU6MDBaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA0VDAyOjAyOjM2WiIsInRoZW1lSWRzIjpbMTI2ODMsMTI2ODFdLCJ0aGVtZU5hbWVzIjpbIuWPpOijhSIsIuWOn+WIm+efreWJpyJdLCJ0aGVtZVNsdWdzIjpbImd1emh1YW5nIiwieWF1bmNodWFuZ2RqIl0sImNhdGVnb3J5SWRzIjpbMTExMDUsMTExMDJdLCJ0aXRsZSI6IuWFpei1mOiiq+e7v+S4ieW5tO+8jOecn+WkquWtkOW9kuS9jeWFiOaWqeiNoeWmh+WQjuivm+S5neaXjyIsInBsYXlOYW1lIjoi5YWl6LWY6KKr57u/5LiJ5bm077yM55yf5aSq5a2Q5b2S5L2N5YWI5pap6I2h5aaH5ZCO6K+b5Lmd5pePIiwiZGVzY3JpcHRpb24iOiLmtYHokL3msJHpl7TnmoTlpKrlrZDpmpDlp5Pln4vlkI3vvIzlhaXotZjlrpjlrqbkuYvlrrbvvIzlj5flsL3lhrfpgYfljbTlp4vnu4jlrojnnYDljYrlnZfpvpnnurnnjonkvanjgILnjonkvanooqvkurrlj5jljZblkI7vvIzku5bnmoTnnJ/lrp7ouqvku73mhI/lpJbmm53lhYnjgILpkqblt67orqTlh7rku5bml7bvvIzku5bnu4jkuo7og73muIXnrpfkuInlubTmnaXnmoTml6fotKbvvIzkuZ/lvpfku6Xlm57miqXmm77lnKjku5bokL3prYTml7blloTlvoXku5bnmoTkurrjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlhaXotZjooqvnu7/kuInlubTvvIznnJ/lpKrlrZDlvZLkvY3lhYjmlqnojaHlpoflkI7or5vkuZ3ml4/jgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwx6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6Inp6dHpndyIsImRlc2MiOiLmtYHokL3msJHpl7TnmoTlpKrlrZDpmpDlp5Pln4vlkI3vvIzlhaXotZjlrpjlrqbkuYvlrrbvvIzlj5flsL3lhrfpgYfljbTlp4vnu4jlrojnnYDljYrlnZfpvpnnurnnjonkvanjgILnjonkvanooqvkurrlj5jljZblkI7vvIzku5bnmoTnnJ/lrp7ouqvku73mhI/lpJbmm53lhYnjgILpkqblt67orqTlh7rku5bml7bvvIzku5bnu4jkuo7og73muIXnrpfkuInlubTmnaXnmoTml6fotKbvvIzkuZ/lvpfku6Xlm57miqXmm77lnKjku5bokL3prYTml7blloTlvoXku5bnmoTkurrjgIIiLCJhbmNob3IiOiLljp/liJsiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvdWYvZnQvMTA0OS9wbGF5bGV0X2NvdmVyX2YyOGU3N2ZmYTZlNDNkMjguanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9zby9rbC8xMDQ5L3BsYXlsZXRfY292ZXJfYjZjNGEyYjg1NjdhYWQyZS5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTcsMTI4NzVdLCJ0YWdOYW1lcyI6WyLlj6Tku6MiLCLlpI3ku4ciXSwidGFnU2x1Z3MiOlsiZ3VkYWkiLCJGQyJdLCJ0b3RhbEVwaXNvZGUiOjEsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjMsImhlYXRWYWx1ZSI6MjI1MiwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE2LCJjcmVhdGVkQXQiOiIyMDI2LTExLTA2VDA1OjA3OjM5LjE2NVoiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjIyLjIxNFoiLCJzZW9JbmZvIjp7InRpdGxlIjoiIiwia2V5d29ybGQiOlsi55yf5aSq5a2Q5b2S5L2NIiwi6b6Z57q5546J5L2pIiwi5Y+k6KOF5aSN5LuHIiwi54af5p6cYWkiLCJBSeaIkOS6uuefreWJpyJdLCJkZXNjcmlwdGlvbiI6Iua1geiQveawkemXtOeahOWkquWtkOmakOWnk+Wfi+WQje+8jOWFpei1mOWumOWupuS5i+Wutu+8jOWPl+WwveWGt+mBh+WNtOWni+e7iOWuiOedgOWNiuWdl+m+mee6ueeOieS9qeOAgueOieS9qeiiq+S6uuWPmOWNluWQju+8jOS7lueahOecn+Wunui6q+S7veaEj+WkluabneWFieOAgumSpuW3ruiupOWHuuS7luaXtu+8jOS7lue7iOS6juiDvea4heeul+S4ieW5tOadpeeahOaXp+i0pu+8jOS5n+W+l+S7peWbnuaKpeabvuWcqOS7luiQvemthOaXtuWWhOW+heS7lueahOS6uuOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWFpei1mOiiq+e7v+S4ieW5tO+8jOecn+WkquWtkOW9kuS9jeWFiOaWqeiNoeWmh+WQjuivm+S5neaXj+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDHpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ5ODYsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6dHJ1ZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDZUMTI6MDM6MDcuMzAzWiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0xMS0wNFQwMzoxNTowMFoiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTEtMDVUMDQ6MjM6NDJaIiwidGhlbWVJZHMiOlsxMjY4M10sInRoZW1lTmFtZXMiOlsi5Y+k6KOFIl0sInRoZW1lU2x1Z3MiOlsiZ3V6aHVhbmciXSwiY2F0ZWdvcnlJZHMiOlsxMTEwNV0sInRpdGxlIjoi5Y2K55Sf57yY5pyq5LqGIiwicGxheU5hbWUiOiLljYrnlJ/nvJjmnKrkuoYiLCJkZXNjcmlwdGlvbiI6IuawkeWbveaXtuacn++8jOS4gOWQjeWls+WtpueUn+WPl+WnkOWnkOmCgOivt+WIsOWutuS4reWBmuWuou+8jOWNtOiQveWFpeWnkOWnkOS4juWnkOWkq+iuvuS4i+eahOWciOWll+OAguWOn+acrOeGn+aCieeahOS6suS6uueqgeeEtuWPmOW+l+mavuS7peS/oeS7u++8jOi/meWcuueci+S8vOWvu+W4uOeahOaOouiuv+S5n+eUseatpOaUueWPmOS6huWlueeahOWkhOWig+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWNiueUn+e8mOacquS6huOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6ImJzeXdsIiwiZGVzYyI6IuawkeWbveaXtuacn++8jOS4gOWQjeWls+WtpueUn+WPl+WnkOWnkOmCgOivt+WIsOWutuS4reWBmuWuou+8jOWNtOiQveWFpeWnkOWnkOS4juWnkOWkq+iuvuS4i+eahOWciOWll+OAguWOn+acrOeGn+aCieeahOS6suS6uueqgeeEtuWPmOW+l+mavuS7peS/oeS7u++8jOi/meWcuueci+S8vOWvu+W4uOeahOaOouiuv+S5n+eUseatpOaUueWPmOS6huWlueeahOWkhOWig+OAgiIsImFuY2hvciI6IuWOn+WImyIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS96dC94aS8xMDQ5L3BsYXlsZXRfY292ZXJfNmY0ZWMyZDA2MzM0Y2UzZS5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL3V0L3lqLzEwNDkvcGxheWxldF9jb3Zlcl9jMGJmOGY1NGJjZDZmMGQ3LmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg3NV0sInRhZ05hbWVzIjpbIuWkjeS7hyJdLCJ0YWdTbHVncyI6WyJGQyJdLCJ0b3RhbEVwaXNvZGUiOjEwLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjoxLCJoZWF0VmFsdWUiOjMyNDcsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxNywiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozOC40MjlaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wN1QwMjowMDoyMi4xMTlaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuWNiueUn+e8mOacquS6hiIsIuawkeWbveefreWJpyIsIuS6suaDhemZt+mYsSJdLCJkZXNjcmlwdGlvbiI6IuawkeWbveaXtuacn++8jOS4gOWQjeWls+WtpueUn+WPl+WnkOWnkOmCgOivt+WIsOWutuS4reWBmuWuou+8jOWNtOiQveWFpeWnkOWnkOS4juWnkOWkq+iuvuS4i+eahOWciOWll+OAguWOn+acrOeGn+aCieeahOS6suS6uueqgeeEtuWPmOW+l+mavuS7peS/oeS7u++8jOi/meWcuueci+S8vOWvu+W4uOeahOaOouiuv+S5n+eUseatpOaUueWPmOS6huWlueeahOWkhOWig+OAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWNiueUn+e8mOacquS6huOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDEw6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIn19LHsiaWQiOjE0NDcyLCJzdGF0dXMiOjEsImlzRmVhdHVyZWQiOmZhbHNlLCJpc09yaWdpbmFsIjpmYWxzZSwic2hvd09yaWdpbmFsIjpmYWxzZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wM1QxMTo0ODozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTEwLTI5VDExOjA0OjA5WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMC0zMFQwODo1Mzo1MVoiLCJ0aGVtZUlkcyI6WzEyNjgzXSwidGhlbWVOYW1lcyI6WyLlj6Too4UiXSwidGhlbWVTbHVncyI6WyJndXpodWFuZyJdLCJjYXRlZ29yeUlkcyI6WzExMTA1XSwidGl0bGUiOiLnpZ7pm5XvvJrph43nlJ/kuYvmnajov4fvvIjlhagz6ZuG77yJIiwicGxheU5hbWUiOiLnpZ7pm5XvvJrph43nlJ/kuYvmnajov4ciLCJkZXNjcmlwdGlvbiI6Iui6q+aAgOS5neWNgeS5neS4lua1qeeAmuS/ruS7meiusOW/huS4juelnuenmOmVv+eUn+ezu+e7n+eahOepv+i2iuiAhe+8jOaEj+WklumZjeS4tOelnumbleS4lueVjOW5tumZhOi6q+S6juWNgeWFq+WygeeahOadqOi/h+i6q+S4iuOAguatpOaXtuW/g+aAgOS4jei9qOeahOW8oOWutuaBtumcuOato+W8uuihjOmAvOWAuuephuW/teaFiO+8jOWmhOWbvuWbvuiwi+S4jei9qOaWveaatOOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuelnumble+8mumHjeeUn+S5i+adqOi/h+OAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDPpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoic2hlbmRpYSIsImRlc2MiOiLouqvmgIDkuZ3ljYHkuZ3kuJbmtanngJrkv67ku5norrDlv4bkuI7npZ7np5jplb/nlJ/ns7vnu5/nmoTnqb/otorogIXvvIzmhI/lpJbpmY3kuLTnpZ7pm5XkuJbnlYzlubbpmYTouqvkuo7ljYHlhavlsoHnmoTmnajov4fouqvkuIrjgILmraTml7blv4PmgIDkuI3ovajnmoTlvKDlrrbmgbbpnLjmraPlvLrooYzpgLzlgLrnqYblv7XmhYjvvIzlpoTlm77lm77osIvkuI3ovajmlr3mmrTjgIIiLCJhbmNob3IiOiLpu4TmnpzlrpjmlrkiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvaTEvd3AvMTA0OS9wbGF5bGV0X2NvdmVyX2Y1MDAwYWQ3NjIzNWM1NWYuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS92OS83bS8xMDQ5L3BsYXlsZXRfY292ZXJfZjUwMDBhZDc2MjM1YzU1Zi5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTQsMTI4NzIsMTI4NzNdLCJ0YWdOYW1lcyI6WyLku5nkvqAiLCLph43nlJ8iLCLns7vnu58iXSwidGFnU2x1Z3MiOlsieGlhbnhpYSIsIkNTIiwieGl0b25nIl0sInRvdGFsRXBpc29kZSI6MywidXBkYXRlU3RhdHVzIjoxLCJjb3VudEJyb3dzZSI6MTYyLCJoZWF0VmFsdWUiOjIwMzY0LCJjb3VudENvbGxlY3QiOjAsImNvdW50TGlrZSI6MTUsImNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDg6NDE6NTcuNzMyWiIsInVwZGF0ZWRBdCI6IjIwMjYtMTEtMDdUMDA6MDA6MTMuMTA4WiIsInNlb0luZm8iOnsidGl0bGUiOiLnpZ7pm5XvvJrph43nlJ/kuYvmnajov4fvvIjlhagz6ZuG77yJIiwia2V5d29ybGQiOlsi56We6ZuV6YeN55Sf5LmL5p2o6L+HIiwi57O757uf5L+u5LuZIiwi6Iux6ZuE5pWR576OIiwi56We6ZuV6YeN55Sf5LmL5p2o6L+H5a6M5pW054mIIiwi5Zyo57q/55yLIiwi5p2o6L+HIiwi56mG5b+15oWIIl0sImRlc2NyaXB0aW9uIjoi6Lqr5oCA5Lmd5Y2B5Lmd5LiW5rWp54Ca5L+u5LuZ6K6w5b+G5LiO56We56eY6ZW/55Sf57O757uf55qE56m/6LaK6ICF77yM5oSP5aSW6ZmN5Li056We6ZuV5LiW55WM5bm26ZmE6Lqr5LqO5Y2B5YWr5bKB55qE5p2o6L+H6Lqr5LiK44CC5q2k5pe25b+D5oCA5LiN6L2o55qE5byg5a625oG26Zy45q2j5by66KGM6YC85YC656mG5b+15oWI77yM5aaE5Zu+5Zu+6LCL5LiN6L2o5pa95pq044CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK56We6ZuV77ya6YeN55Sf5LmL5p2o6L+H44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysM+mbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fV0sInNlb0luZm8iOnsidGl0bGUiOiLnhp/mnpznn63liaflj6Too4XkuJPpopggLSDng63pl6hBSeaIkOS6uuefreWJp+S4jum7hOaenOWPpOmjjuiZkOaBi+Wkp+aIj+WQiOmbhiIsImtleXdvcmRzIjpbIueGn+aenOefreWJpyIsIum7hOaenOefreWJpyIsIum7hOaenCIsIkFJ5oiQ5Lq655+t5YmnIiwi5Y+k6KOF5LiT6aKYIiwi5Y+k6aOO55+t5YmnIiwi5a625peP56eY5LqLIiwi6Zuq5bGx5pWR54uQ54u4Iiwi5oiQ5Lq655+t5YmnQVBQIiwi5Y+k6KOF55+t5YmnIl0sImRlc2NyaXB0aW9uIjoi6LWw6L+b54af5p6c55+t5Ymn5Y+k6KOF5LiT6aKY77yM6aKG55Wl5Y+k5YW46Z+15ZGz5LiO54ix5oGo57qg6JGb5Lqk57uH55qE5Y+k6aOO5oOF5LuH5aSn5oiP44CC5bmz5Y+w5q+P5pel5L+d5oyB5oyB57ut5pu05paw77yM54Gr54Ot5pS25b2V5LqG44CK5a625peP56eY5LqL44CL44CB44CK6Zuq5bGx5pWR54uQ54u444CL562J6auY5Lq65rCU5Y+k6KOF5aSn5oiP44CC6L+Z6YeM5Ymn5oOF5Y+N6L2s5LiN5pat44CB5Y+k6Z+15ZSv576O5Yqo5Lq644CC6LW25b+r54K55Ye75LiL6L295a6Y5pa55LiT5bGe56aP5YipQVBQ77yM5bim5oKo6ZqP5pe26ZqP5Zyw55WF5Lqr5peg5bmy5omw55qE6auY5riF5o6M5LiK6L+95Ymn5paw5L2T6aqM77yBIiwid2ViU2l0ZU5hbWUiOiLnhp/mnpznn63liaciLCJjYW5vbmljYWxVcmwiOiJodHRwczovL3NodWd1b2RqLmNvbS90b3BpYy1kZXRhaWwvZ3V6aHVhbmcifX0seyJpZCI6MTI2ODgsIm5hbWUiOiLmvKvliaciLCJzbHVnIjoibWFuanUiLCJpY29uIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9yci94NC8xMDQ5LyVFNiVCQyVBQiVFNiU5NCVCOSVFNyU5RiVBRCVFNSU4OSVBNy5qcGciLCJyYW5rIjoxLCJwbGF5bGV0Q291bnQiOjE5LCJsaXN0IjpbeyJpZCI6MTQ5ODcsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOmZhbHNlLCJpc1JlY29tbWVuZCI6ZmFsc2UsImlzTmV3Ijp0cnVlLCJvcGVyYXRlVHlwZSI6MSwic2hvd09uQmFubmVyIjpmYWxzZSwiYmFubmVyIjoiIiwibW9iaWxlQmFubmVyIjoiIiwib25saW5lQXQiOiIyMDI2LTExLTA2VDEyOjI2OjI5Ljc0OVoiLCJtZWRpYUNyZWF0ZWRBdCI6IjIwMjYtMTEtMDNUMDk6NDU6NDFaIiwibWVkaWFVcGRhdGVkQXQiOiIyMDI2LTExLTA0VDAzOjM2OjMyWiIsInRoZW1lSWRzIjpbMTI2ODhdLCJ0aGVtZU5hbWVzIjpbIua8q+WJpyJdLCJ0aGVtZVNsdWdzIjpbIm1hbmp1Il0sImNhdGVnb3J5SWRzIjpbMTExMDVdLCJ0aXRsZSI6IuWFlOWtkOWSjOWTpeWTpeWFseaEn+S6hiIsInBsYXlOYW1lIjoi5YWU5a2Q5ZKM5ZOl5ZOl5YWx5oSf5LqGIiwiZGVzY3JpcHRpb24iOiLlhZTlrZDlkozlk6Xlk6XlhbHmhJ/lkI7mrLLmnJvlkIzmraXniIblj5HjgILlpbnkuIvouqvmvI/msLTvvIzlk6Xlk6XmiYvmjIflj4jmt7Hlj4jlh4blnLDliLrmv4DjgILkuIDmrKHmrKHooqvloavmu6HliLDmnIDmt7HlpITvvIzouqvkvZPlvbvlupXova/kuIvmnaXjgILmtarlj6vljovmipHkuI3kvY/vvIzkuKTkuKrkurrnmoTlv6vmhJ/kuqTnu4flnKjkuIDotbfvvIznpoHlv4zlkIzlsYXlnKjpg73luILlpJzph4zlvbvlupXltKnlnY/vvIzlho3kuZ/lm57kuI3liLDku47liY3jgILnhp/mnpznn63liadXRULmj5DkvpvjgIrlhZTlrZDlkozlk6Xlk6XlhbHmhJ/kuobjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwz6ZuG77yM5ZCO57ut5YaF5a655oyB57ut5pu05paw44CCIiwic2x1ZyI6InR6aGdnIiwiZGVzYyI6IuWFlOWtkOWSjOWTpeWTpeWFseaEn+WQjuassuacm+WQjOatpeeIhuWPkeOAguWlueS4i+i6q+a8j+awtO+8jOWTpeWTpeaJi+aMh+WPiOa3seWPiOWHhuWcsOWIuua/gOOAguS4gOasoeasoeiiq+Whq+a7oeWIsOacgOa3seWkhO+8jOi6q+S9k+W9u+W6lei9r+S4i+adpeOAgua1quWPq+WOi+aKkeS4jeS9j++8jOS4pOS4quS6uueahOW/q+aEn+S6pOe7h+WcqOS4gOi1t++8jOemgeW/jOWQjOWxheWcqOmDveW4guWknOmHjOW9u+W6leW0qeWdj++8jOWGjeS5n+WbnuS4jeWIsOS7juWJjeOAgiIsImFuY2hvciI6IuacgOWFqOeJh+W6kyIsImNvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS9nci9wOS8xMDQ5L3BsYXlsZXRfY292ZXJfNzMyMDZlNTYzMzI1YzcwMy5qcGciLCJob3Jpem9udGFsQ292ZXIiOiJodHRwczovL2QzbjhxeDRydnk0dm9sLmNsb3VkZnJvbnQubmV0L3YzL2ltYWdlL2xpLzUwLzEwNDkvcGxheWxldF9jb3Zlcl83MzIwNmU1NjMzMjVjNzAzLmpwZyIsInByZXZpZXciOiIiLCJ0YWdJZHMiOlsxMjg3Nl0sInRhZ05hbWVzIjpbIkFJ5oiQ5Lq65ryr5YmnIl0sInRhZ1NsdWdzIjpbIkNSTUoiXSwidG90YWxFcGlzb2RlIjozLCJ1cGRhdGVTdGF0dXMiOjEsImNvdW50QnJvd3NlIjo5LCJoZWF0VmFsdWUiOjE5OTYsImNvdW50Q29sbGVjdCI6MCwiY291bnRMaWtlIjoxOCwiY3JlYXRlZEF0IjoiMjAyNi0xMS0wNlQwNTowNzozOC42NzJaIiwidXBkYXRlZEF0IjoiMjAyNi0xMS0wNlQyMjowMDoxMS42OTJaIiwic2VvSW5mbyI6eyJ0aXRsZSI6IiIsImtleXdvcmxkIjpbIuWFlOWtkOWSjOWTpeWTpeWFseaEn+S6hiIsIueOqeWBtuWFlOWtkCIsIuWFseaEnyIsIuWFlOWtkOWSjOWTpeWTpeWFseaEn+S6hiIsIumDveW4guWQjOWxheemgeW/jCIsIuWFlOWtkCIsIuWTpeWTpSIsIuWFseaEnyIsIuWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuWFlOWtkOWTpeWTpeeahOWFseaEn+WknCIsIuWFseaEn+WQjueahOWFlOWtkOWTpeWTpSJdLCJkZXNjcmlwdGlvbiI6IuWFlOWtkOWSjOWTpeWTpeWFseaEn+WQjuassuacm+WQjOatpeeIhuWPkeOAguWlueS4i+i6q+a8j+awtO+8jOWTpeWTpeaJi+aMh+WPiOa3seWPiOWHhuWcsOWIuua/gOOAguS4gOasoeasoeiiq+Whq+a7oeWIsOacgOa3seWkhO+8jOi6q+S9k+W9u+W6lei9r+S4i+adpeOAgua1quWPq+WOi+aKkeS4jeS9j++8jOS4pOS4quS6uueahOW/q+aEn+S6pOe7h+WcqOS4gOi1t++8jOemgeW/jOWQjOWxheWcqOmDveW4guWknOmHjOW9u+W6leW0qeWdj++8jOWGjeS5n+WbnuS4jeWIsOS7juWJjeOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuWFlOWtkOWSjOWTpeWTpeWFseaEn+S6huOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDPpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX0seyJpZCI6MTQ1OTIsInN0YXR1cyI6MSwiaXNGZWF0dXJlZCI6ZmFsc2UsImlzT3JpZ2luYWwiOmZhbHNlLCJzaG93T3JpZ2luYWwiOnRydWUsImlzUmVjb21tZW5kIjpmYWxzZSwiaXNOZXciOnRydWUsIm9wZXJhdGVUeXBlIjoxLCJzaG93T25CYW5uZXIiOmZhbHNlLCJiYW5uZXIiOiIiLCJtb2JpbGVCYW5uZXIiOiIiLCJvbmxpbmVBdCI6IjIwMjYtMTEtMDNUMDU6Mzg6MzUuMzg1WiIsIm1lZGlhQ3JlYXRlZEF0IjoiMjAyNi0wOS0xMlQyMTo1MDowN1oiLCJtZWRpYVVwZGF0ZWRBdCI6IjIwMjYtMTAtMDFUMDg6MDA6NTRaIiwidGhlbWVJZHMiOlsxMjY4MSwxMjY4OF0sInRoZW1lTmFtZXMiOlsi5Y6f5Yib55+t5YmnIiwi5ryr5YmnIl0sInRoZW1lU2x1Z3MiOlsieWF1bmNodWFuZ2RqIiwibWFuanUiXSwiY2F0ZWdvcnlJZHMiOlsxMTEwMiwxMTEwNV0sInRpdGxlIjoi5pyA5by65pi+56S65Zmo77yI5YWoMTDpm4bvvIkiLCJwbGF5TmFtZSI6IuacgOW8uuaYvuekuuWZqCIsImRlc2NyaXB0aW9uIjoi5Li655WF546p6Iux6ZuE6IGU55uf77yM5LuW5Zyo5bqf5ZOB56uZ5reY5Zue5LiA5Y+w5rOb552A6K+h5byC6I2n5YWJ55qE5LqM5omL5pi+56S65bGP44CC5LiA57uP6YCa55S15LiN5LuF55S76LSo6YC855yf77yM5pu05oul5pyJ5LqG5bCG546w5a6e6IKJ6Lqr4oCc5pWw5L2N5a6e5L2T5YyW4oCd55qE6YCG5aSp56We5Yqb44CC5byA5py6556s6Ze05LuW55u05o6l56m/6LaK6L+b5YWl54iG5qy+572R5ri45LiW55WM44CC54af5p6c55+t5YmnV0VC5o+Q5L6b44CK5pyA5by65pi+56S65Zmo44CL5pyA5paw5Ymn6ZuG44CB5Ymn5oOF5LuL57uN5Y+K5Zyo57q/6KeC55yL77yM5b2T5YmN5pu05paw6Iez56ysMTDpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoienVpcWlhbiIsImRlc2MiOiLkuLrnlYXnjqnoi7Hpm4TogZTnm5/vvIzku5blnKjlup/lk4Hnq5nmt5jlm57kuIDlj7Dms5vnnYDor6HlvILojaflhYnnmoTkuozmiYvmmL7npLrlsY/jgILkuIDnu4/pgJrnlLXkuI3ku4XnlLvotKjpgLznnJ/vvIzmm7Tmi6XmnInkuoblsIbnjrDlrp7ogonouqvigJzmlbDkvY3lrp7kvZPljJbigJ3nmoTpgIblpKnnpZ7lipvjgILlvIDmnLrnnqzpl7Tku5bnm7TmjqXnqb/otorov5vlhaXniIbmrL7nvZHmuLjkuJbnlYzjgIIiLCJhbmNob3IiOiIiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UvNWMvbGYvMTA0OS9wbGF5bGV0X2NvdmVyXzFmMTY0YmQ0Yjk1MzBhY2EuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS8yZS91Yy8xMDQ5L3BsYXlsZXRfY292ZXJfOTBjOTZmNzE1ZDU1YmI5Ny5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTEsMTI4NTIsMTI4NTddLCJ0YWdOYW1lcyI6WyLljp/liJsiLCLpu4TmnpwiLCLlj6Tku6MiXSwidGFnU2x1Z3MiOlsiWUMiLCJodWFuZ2d1byIsImd1ZGFpIl0sInRvdGFsRXBpc29kZSI6MTAsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE4OCwiaGVhdFZhbHVlIjoyMzQzNywiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE0LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ3OjI2LjAwM1oiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjE0LjMxNFoiLCJzZW9JbmZvIjp7InRpdGxlIjoi5pyA5by65pi+56S65Zmo77yI5YWoMTDpm4bvvIkiLCJrZXl3b3JsZCI6WyLmnIDlvLrmmL7npLrlmagiLCLmuLjmiI/nqb/otooiLCLomZrmi5/lkI7lrqsiLCLmnIDlvLrmmL7npLrlmajlrozmlbTniYgiLCLlnKjnur/nnIsiLCLnnIvmnb/lqJgiLCLlpbPmiJjnpZ4iXSwiZGVzY3JpcHRpb24iOiLkuLrnlYXnjqnoi7Hpm4TogZTnm5/vvIzku5blnKjlup/lk4Hnq5nmt5jlm57kuIDlj7Dms5vnnYDor6HlvILojaflhYnnmoTkuozmiYvmmL7npLrlsY/jgILkuIDnu4/pgJrnlLXkuI3ku4XnlLvotKjpgLznnJ/vvIzmm7Tmi6XmnInkuoblsIbnjrDlrp7ogonouqvigJzmlbDkvY3lrp7kvZPljJbigJ3nmoTpgIblpKnnpZ7lipvjgILlvIDmnLrnnqzpl7Tku5bnm7TmjqXnqb/otorov5vlhaXniIbmrL7nvZHmuLjkuJbnlYzjgILnhp/mnpznn63liadXRULmj5DkvpvjgIrmnIDlvLrmmL7npLrlmajjgIvmnIDmlrDliafpm4bjgIHliafmg4Xku4vnu43lj4rlnKjnur/op4LnnIvvvIzlvZPliY3mm7TmlrDoh7PnrKwxMOmbhu+8jOWQjue7reWGheWuueaMgee7reabtOaWsOOAgiJ9fSx7ImlkIjoxNDU1Miwic3RhdHVzIjoxLCJpc0ZlYXR1cmVkIjpmYWxzZSwiaXNPcmlnaW5hbCI6ZmFsc2UsInNob3dPcmlnaW5hbCI6dHJ1ZSwiaXNSZWNvbW1lbmQiOmZhbHNlLCJpc05ldyI6dHJ1ZSwib3BlcmF0ZVR5cGUiOjEsInNob3dPbkJhbm5lciI6ZmFsc2UsImJhbm5lciI6IiIsIm1vYmlsZUJhbm5lciI6IiIsIm9ubGluZUF0IjoiMjAyNi0xMS0wM1QwMzowMTozNS4zODVaIiwibWVkaWFDcmVhdGVkQXQiOiIyMDI2LTA5LTEyVDIxOjUwOjA2WiIsIm1lZGlhVXBkYXRlZEF0IjoiMjAyNi0xMC0wMVQwODowMDo1NFoiLCJ0aGVtZUlkcyI6WzEyNjgxLDEyNjg4XSwidGhlbWVOYW1lcyI6WyLljp/liJvnn63liaciLCLmvKvliaciXSwidGhlbWVTbHVncyI6WyJ5YXVuY2h1YW5nZGoiLCJtYW5qdSJdLCJjYXRlZ29yeUlkcyI6WzExMTAyXSwidGl0bGUiOiLms6HpnaLnlarvvIjlhag16ZuG77yJIiwicGxheU5hbWUiOiLms6HpnaLnlaoiLCJkZXNjcmlwdGlvbiI6IuWvgumdmea3seWknOeahOe7v+earueBq+i9puS4iu+8jOa7oeWNgeWFq+WygeeahOael+aZk+aflOiiq+WIl+i9pumVv+S7peWNh+etieS4uuWAn+WPo+W8uuihjOaLieWFpeeLreeqhOi9pumVv+WupO+8jOeUn+aXpeicoeeDm+WImueGhOeBre+8jOegtOWkhOS4juaypuiQveWwseWcqOWQjOS4gOaZmumZjeS4tOOAguegtOS6p+Wls+ekvumVv+eZveW6reWFsOiiq+iuqOiWquWRmOW3peWbtOWgteWcqOS8muiuruWupO+8jOe0p+e7t+eahOihrOihq+S4juebmOWPkeWxguWxguW0qeiQveOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuazoemdoueVquOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDXpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIiLCJzbHVnIjoicGFvbWlhbiIsImRlc2MiOiLlr4LpnZnmt7HlpJznmoTnu7/nmq7ngavovabkuIrvvIzmu6HljYHlhavlsoHnmoTmnpfmmZPmn5TooqvliJfovabplb/ku6XljYfnrYnkuLrlgJ/lj6PlvLrooYzmi4nlhaXni63nqoTovabplb/lrqTvvIznlJ/ml6XonKHng5vliJrnhoTnga3vvIznoLTlpITkuI7msqbokL3lsLHlnKjlkIzkuIDmmZrpmY3kuLTjgILnoLTkuqflpbPnpL7plb/nmb3luq3lhbDooqvorqjolqrlkZjlt6Xlm7TloLXlnKjkvJrorq7lrqTvvIzntKfnu7fnmoTooazooavkuI7nm5jlj5HlsYLlsYLltKnokL3jgIIiLCJhbmNob3IiOiIiLCJjb3ZlciI6Imh0dHBzOi8vZDNuOHF4NHJ2eTR2b2wuY2xvdWRmcm9udC5uZXQvdjMvaW1hZ2UveDAvY20vMTA0OS9wbGF5bGV0X2NvdmVyX2YyYWNjMTA3NzJlOGM5OWMuanBnIiwiaG9yaXpvbnRhbENvdmVyIjoiaHR0cHM6Ly9kM244cXg0cnZ5NHZvbC5jbG91ZGZyb250Lm5ldC92My9pbWFnZS94cS95cC8xMDQ5L3BsYXlsZXRfY292ZXJfYWIwMmQwN2M3YTE3MzhkZS5qcGciLCJwcmV2aWV3IjoiIiwidGFnSWRzIjpbMTI4NTEsMTI4NTJdLCJ0YWdOYW1lcyI6WyLljp/liJsiLCLpu4TmnpwiXSwidGFnU2x1Z3MiOlsiWUMiLCJodWFuZ2d1byJdLCJ0b3RhbEVwaXNvZGUiOjUsInVwZGF0ZVN0YXR1cyI6MSwiY291bnRCcm93c2UiOjE1NiwiaGVhdFZhbHVlIjoxODk5MiwiY291bnRDb2xsZWN0IjowLCJjb3VudExpa2UiOjE4LCJjcmVhdGVkQXQiOiIyMDI2LTExLTAzVDA4OjQ2OjU1LjA2M1oiLCJ1cGRhdGVkQXQiOiIyMDI2LTExLTA3VDAyOjAwOjIxLjMwN1oiLCJzZW9JbmZvIjp7InRpdGxlIjoi5rOh6Z2i55Wq77yI5YWoNembhu+8iSIsImtleXdvcmxkIjpbIuazoemdoueVqiIsIuWvhumXreepuumXtCIsIuadg+WKm+WAvui9pyIsIuazoemdoueVquWujOaVtOeJiCIsIuWcqOe6v+eciyIsIuael+aZk+aflCIsIueZveW6reWFsCJdLCJkZXNjcmlwdGlvbiI6IuWvgumdmea3seWknOeahOe7v+earueBq+i9puS4iu+8jOa7oeWNgeWFq+WygeeahOael+aZk+aflOiiq+WIl+i9pumVv+S7peWNh+etieS4uuWAn+WPo+W8uuihjOaLieWFpeeLreeqhOi9pumVv+WupO+8jOeUn+aXpeicoeeDm+WImueGhOeBre+8jOegtOWkhOS4juaypuiQveWwseWcqOWQjOS4gOaZmumZjeS4tOOAguegtOS6p+Wls+ekvumVv+eZveW6reWFsOiiq+iuqOiWquWRmOW3peWbtOWgteWcqOS8muiuruWupO+8jOe0p+e7t+eahOihrOihq+S4juebmOWPkeWxguWxguW0qeiQveOAgueGn+aenOefreWJp1dFQuaPkOS+m+OAiuazoemdoueVquOAi+acgOaWsOWJp+mbhuOAgeWJp+aDheS7i+e7jeWPiuWcqOe6v+ingueci++8jOW9k+WJjeabtOaWsOiHs+esrDXpm4bvvIzlkI7nu63lhoXlrrnmjIHnu63mm7TmlrDjgIIifX1dLCJzZW9JbmZvIjp7InRpdGxlIjoi54af5p6c55+t5Ymn5ryr5Ymn5LiT6aKYIC0g54Ot6ZeoQUnmiJDkurrnn63liafkuI7pu4TmnpzmvKvnlLvmlLnnvJblpKfmiI/lkIjpm4YiLCJrZXl3b3JkcyI6WyLnhp/mnpznn63liaciLCLpu4Tmnpznn63liaciLCLpu4TmnpwiLCJBSeaIkOS6uuefreWJpyIsIua8q+WJp+S4k+mimCIsIua8q+aUueefreWJpyIsIuecn+S6uuWltOWPr+aipuiuree7g+Wkp+W4iCIsIuazoemdoueVqiIsIuaIkOS6uuefreWJp0FQUCIsIkFJ5ryr5YmnIl0sImRlc2NyaXB0aW9uIjoi6LWw6L+b54af5p6c55+t5Ymn5ryr5Ymn5LiT6aKY77yM6aKG55Wl5qyh5YWD5aOB56C06KOC5bim5p2l55qE5p6B6Ie06KeG6KeJ5byg5Yqb5LiO55Sf5Yqo5Ymn5oOF44CC5bmz5Y+w5q+P5pel5L+d5oyB5oyB57ut5pu05paw77yM54Gr54Ot5pS25b2V5LqG44CK55yf5Lq65aW05Y+v5qKm6K6t57uD5aSn5biI44CL44CB44CK5rOh6Z2i55Wq44CL562J6auY5Lq65rCU5ryr5pS55aSn5oiP44CC6L+Z6YeM5Ymn5oOF5Y+N6L2s5LiN5pat44CB55S76Z2i57K+5b2p6L+H55i+44CC6LW25b+r54K55Ye75LiL6L295a6Y5pa55LiT5bGe56aP5YipQVBQ77yM5bim5oKo6ZqP5pe26ZqP5Zyw55WF5Lqr5peg5bmy5omw55qE6auY5riF5o6M5LiK6L+95Ymn5paw5L2T6aqM77yBIiwid2ViU2l0ZU5hbWUiOiLnhp/mnpznn63liaciLCJjYW5vbmljYWxVcmwiOiJodHRwczovL3NodWd1b2RqLmNvbS90b3BpYy1kZXRhaWwvbWFuanUifX1dfV0sImFubm91bmNlbWVudHMiOlt7ImlkIjoxMTc4MSwidGl0bGUiOiLnhp/mnpznn63liaciLCJjb250ZW50IjoiICAgICAgICAg8J+ToiAg5pS26JeP54af5p6c55+t5Ymn4oCc5Zue5a6255qE6Lev4oCdIO+9nCDwn4+gIOWFpeWPo+WPmOabtOS5n+S4jeWkseiBlCJ9LHsiaWQiOjExNzgzLCJ0aXRsZSI6IueGn+aenOefreWJpyIsImNvbnRlbnQiOiIgICAgICAgICDwn5OiIOWOn+WIm0FJ5oiQ5Lq655+t5Ymn5q+P5pel5pu05pawIO+9nCDwn4aVIOacgOaWsOWJp+mbhuaMgee7reS4iue6vyJ9LHsiaWQiOjExNzgyLCJ0aXRsZSI6IueGn+aenOefreWJpyIsImNvbnRlbnQiOiIgICAgICAgICDwn5OiIOe6v+i3r+iuv+mXruS4jeeos+Wumu+8nyDvvZwg4p6cIOi/m+WFpeWvvOiIquW/q+mAn+WIh+aNouWkh+eUqOWcsOWdgCJ9LHsiaWQiOjExNzg0LCJ0aXRsZSI6IueGn+aenOefreWJpyIsImNvbnRlbnQiOiIgICAgICAgICDwn5OiIOS4i+i9veeGn+aenOefreWJp0FQUCDvvZwg4q2Q77iPIOeDremXqOWlveWJp+maj+i6q+ingueciyJ9XSwiYWR2aXRpc2UiOnsiZGlhbG9nTGlzdCI6bnVsbCwiaG9tZUxpc3QiOm51bGwsInZpZGVvVG9wTGlzdCI6W3siaWQiOiIxMTM4MjAwMDAzIiwibG9jYXRpb24iOjMsInRpdGxlIjoi5YWo5Zu957qm54KuIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlL2I0LzF2Yi8ycTIvMW4vNWM2YTk3ZGNlY2FjZWUwNWUyZGI3YjQ0YjhmYjA4MGIuZ2lmIiwibGluayI6Imh0dHBzOi8veWs2ZWI5cS50b3A6NDU4MiJ9LHsiaWQiOiIxMTM4NzAwMDAzIiwibG9jYXRpb24iOjMsInRpdGxlIjoi56m66ZmN5aup5qihIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzF0cC9yaC8xenIvODUvZTA3NTI3NmVkYzYzZDgxMWQzYzU3MTFmMmZkOTBkMGIuR0lGIiwibGluayI6Imh0dHBzOi8vMTcwMS51d3hieWwuY24vbGFvcGFuL2luZGV4Lmh0bWwifSx7ImlkIjoiMTEzODgwMDAwMyIsImxvY2F0aW9uIjozLCJ0aXRsZSI6IuaYpeiNryIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yNG8vMXovMW9pL2IyL2I2OGYyOGQ0ZDRmODUzMmY1ZjliZjgzNjBmMDY1ZTEyLkdJRiIsImxpbmsiOiJodHRwczovL3U1cThxNS50b3AifSx7ImlkIjoiMTEzODMwMDAwMyIsImxvY2F0aW9uIjozLCJ0aXRsZSI6IuaYpeiNr+i/t+iNryIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8xeXMvMjdqLzE3Yi8yaG4vMjU0YmI4MGY4MjFlY2E3MDE5NzA4NmFmNGY1MTU5MjkuZ2lmIiwibGluayI6Imh0dHBzOi8vcG14NWdoZS50b3A6MjkyMCJ9XSwidmlkZW9Eb3duTGlzdCI6W3siaWQiOiIxMTM4MjAwMDAzIiwibG9jYXRpb24iOjMsInRpdGxlIjoi5YWo5Zu957qm54KuIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlL2I0LzF2Yi8ycTIvMW4vNWM2YTk3ZGNlY2FjZWUwNWUyZGI3YjQ0YjhmYjA4MGIuZ2lmIiwibGluayI6Imh0dHBzOi8veWs2ZWI5cS50b3A6NDU4MiJ9LHsiaWQiOiIxMTM4NzAwMDAzIiwibG9jYXRpb24iOjMsInRpdGxlIjoi56m66ZmN5aup5qihIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzF0cC9yaC8xenIvODUvZTA3NTI3NmVkYzYzZDgxMWQzYzU3MTFmMmZkOTBkMGIuR0lGIiwibGluayI6Imh0dHBzOi8vMTcwMS51d3hieWwuY24vbGFvcGFuL2luZGV4Lmh0bWwifSx7ImlkIjoiMTEzODgwMDAwMyIsImxvY2F0aW9uIjozLCJ0aXRsZSI6IuaYpeiNryIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yNG8vMXovMW9pL2IyL2I2OGYyOGQ0ZDRmODUzMmY1ZjliZjgzNjBmMDY1ZTEyLkdJRiIsImxpbmsiOiJodHRwczovL3U1cThxNS50b3AifSx7ImlkIjoiMTEzODMwMDAwMyIsImxvY2F0aW9uIjozLCJ0aXRsZSI6IuaYpeiNr+i/t+iNryIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8xeXMvMjdqLzE3Yi8yaG4vMjU0YmI4MGY4MjFlY2E3MDE5NzA4NmFmNGY1MTU5MjkuZ2lmIiwibGluayI6Imh0dHBzOi8vcG14NWdoZS50b3A6MjkyMCJ9XSwiaG90QXBwTGlzdCI6bnVsbCwibmV3QXBwTGlzdCI6bnVsbCwibXVzdEFwcExpc3QiOm51bGwsInRpdGxlQXBwTGlzdCI6bnVsbCwiZnJpZW5kTGlzdCI6bnVsbCwibmluZUdyaWRMaXN0IjpbeyJpZCI6IjExMzgyMDAwMDIiLCJsb2NhdGlvbiI6MiwidGl0bGUiOiLlhajlm73nuqbngq4iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjN1L3g5L2s3LzFwMC83YWU2NmY4MGE2YjM4OTNmZDQxOTk5MWMzY2Q5ODFiOC5naWYiLCJsaW5rIjoiaHR0cHM6Ly95azZlYjlxLnRvcDo0NTgyIn0seyJpZCI6IjExMzg3MDAwMDIiLCJsb2NhdGlvbiI6MiwidGl0bGUiOiLnqbrpmY3lq6nmqKEiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMzA3LzJodC8ycTAvMmtqL2QxZGJhMWFmMTE0NDUxN2Y1NzI0NDRiZTVkYTdhODBjLkdJRiIsImxpbmsiOiJodHRwczovLzE3MDEudXd4YnlsLmNuL2xhb3Bhbi9pbmRleC5odG1sIn0seyJpZCI6IjExMzg4MDAwMDIiLCJsb2NhdGlvbiI6MiwidGl0bGUiOiLmmKXoja8iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjhuLzI2ci8ybnEvaTEvMTY3YTViMzFiMDc3NjMxMzFkOTFjMThiNzEyNTcwMDIuR0lGIiwibGluayI6Imh0dHBzOi8vdTVxOHE1LnRvcCJ9LHsiaWQiOiIxMTM4MzAwMDAyIiwibG9jYXRpb24iOjIsInRpdGxlIjoi5pil6I2v6L+36I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzIwdC8ycHgvejYvMmw1LzA1MWRhNTM2M2E1OGM1ZGExNGYzMmVkMmE4OTVlMTA5LmdpZiIsImxpbmsiOiJodHRwczovL3BteDVnaGUudG9wOjI5MjAifSx7ImlkIjoiMTE2MzgwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6Iua1t+inkuekvuWMuiIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yMDgvMmwyLzFzbS8ycHUvMDIzYjJmMmRhMmM1MWFkNjJiYWU1YjIwNDE0OWE2ZDYud2VicCIsImxpbmsiOiJodHRwczovL2QxbXAyb3FrMzFwMGRhLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzOTAwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6Ium7hOaenOefreWJpyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS91aS8zNTQvcDkvcXgvNTUwMWMxZGNlZmZmODcxYWY3OGMwZGJmMzJiNzViZTQuanBnIiwibGluayI6Imh0dHBzOi8vZG93cjJ2cnpyMGZvby5jbG91ZGZyb250Lm5ldD9kYz1oZ3MwMDAxIn0seyJpZCI6IjExMzg5MDAwMDIiLCJsb2NhdGlvbiI6MiwidGl0bGUiOiI5MWZhbnMiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMnM5LzFtbS8yaHcvMzNqLzAyMzBlMDRlYzRlN2QzMWFmNzUxNGNlYTA0M2QzNmRiLndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMTI4OTBhcHR1bDFkMC5jbG91ZGZyb250Lm5ldD9kYz1oZ3MwMDAxIn0seyJpZCI6IjExMzg2MDAwMDIiLCJsb2NhdGlvbiI6MiwidGl0bGUiOiLpu4TmnpznpoHmvKsiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMXVlLzJ5ci9uOS8yMDUvNzYyZmQ2NWZiMzE3NjhhNzZmMTY3NGM3ZWEyMmIzNTEud2VicCIsImxpbmsiOiJodHRwczovL2QyODcxZ2ZiMGs1dDFlLmNsb3VkZnJvbnQubmV0L2Rvd25sb2FkLzUvaGdzMDAwMSJ9LHsiaWQiOiIxMTM4NTAwMDAyIiwibG9jYXRpb24iOjIsInRpdGxlIjoiNTHnn63liaciLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjc2LzIwMi8yajcvZ2cvZjA1M2ZiNTNjMjIzZTNlODdhNDBmMjM2ODA5YWYzOTMud2VicCIsImxpbmsiOiJodHRwczovL2QxYXZzMHBvcnM4OWZmLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzODQwMDAwMiIsImxvY2F0aW9uIjoyLCJ0aXRsZSI6Iue6ouaenOefreWJpyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8zMXEvMmQxL2NtLzZ5L2RiYjczOTA2NTVjMzQ0YzU0OGQ3NTQxZDMyMTEzZTQ4LndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMjg3MWdmYjBrNXQxZS5jbG91ZGZyb250Lm5ldC9kb3dubG9hZC80L2hnczAwMDEifV0sInZpZGVvTGlzdCI6bnVsbCwic3RvcExpc3QiOm51bGwsImZvcmNlZEp1bXBMaXN0IjpudWxsLCJhcHBJbmZvQUxpc3QiOlt7ImlkIjoiMTEzODIwMDAxMiIsImxvY2F0aW9uIjoxMiwidGl0bGUiOiLlhajlm73nuqbngq4iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjN1L3g5L2s3LzFwMC83YWU2NmY4MGE2YjM4OTNmZDQxOTk5MWMzY2Q5ODFiOC5naWYiLCJsaW5rIjoiaHR0cHM6Ly95azZlYjlxLnRvcDo0NTgyIn0seyJpZCI6IjExMzg3MDAwMTIiLCJsb2NhdGlvbiI6MTIsInRpdGxlIjoi56m66ZmN5aup5qihIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzMwNy8yaHQvMnEwLzJrai9kMWRiYTFhZjExNDQ1MTdmNTcyNDQ0YmU1ZGE3YTgwYy5HSUYiLCJsaW5rIjoiaHR0cHM6Ly8xNzAxLnV3eGJ5bC5jbi9sYW9wYW4vaW5kZXguaHRtbCJ9LHsiaWQiOiIxMTM4ODAwMDEyIiwibG9jYXRpb24iOjEyLCJ0aXRsZSI6IuaYpeiNryIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yOG4vMjZyLzJucS9pMS8xNjdhNWIzMWIwNzc2MzEzMWQ5MWMxOGI3MTI1NzAwMi5HSUYiLCJsaW5rIjoiaHR0cHM6Ly91NXE4cTUudG9wIn0seyJpZCI6IjExMzgzMDAwMTIiLCJsb2NhdGlvbiI6MTIsInRpdGxlIjoi5pil6I2v6L+36I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzIwdC8ycHgvejYvMmw1LzA1MWRhNTM2M2E1OGM1ZGExNGYzMmVkMmE4OTVlMTA5LmdpZiIsImxpbmsiOiJodHRwczovL3BteDVnaGUudG9wOjI5MjAifSx7ImlkIjoiMTE2MzgwMDAxMiIsImxvY2F0aW9uIjoxMiwidGl0bGUiOiLmtbfop5LnpL7ljLoiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjA4LzJsMi8xc20vMnB1LzAyM2IyZjJkYTJjNTFhZDYyYmFlNWIyMDQxNDlhNmQ2LndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMW1wMm9xazMxcDBkYS5jbG91ZGZyb250Lm5ldD9kYz1oZ3MwMDAxIn0seyJpZCI6IjExMzkwMDAwMTIiLCJsb2NhdGlvbiI6MTIsInRpdGxlIjoi6buE5p6c55+t5YmnIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlL3VpLzM1NC9wOS9xeC81NTAxYzFkY2VmZmY4NzFhZjc4YzBkYmYzMmI3NWJlNC5qcGciLCJsaW5rIjoiaHR0cHM6Ly9kb3dyMnZyenIwZm9vLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzODkwMDAxMiIsImxvY2F0aW9uIjoxMiwidGl0bGUiOiI5MWZhbnMiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMnM5LzFtbS8yaHcvMzNqLzAyMzBlMDRlYzRlN2QzMWFmNzUxNGNlYTA0M2QzNmRiLndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMTI4OTBhcHR1bDFkMC5jbG91ZGZyb250Lm5ldD9kYz1oZ3MwMDAxIn0seyJpZCI6IjExMzg2MDAwMTIiLCJsb2NhdGlvbiI6MTIsInRpdGxlIjoi6buE5p6c56aB5ryrIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzF1ZS8yeXIvbjkvMjA1Lzc2MmZkNjVmYjMxNzY4YTc2ZjE2NzRjN2VhMjJiMzUxLndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMjg3MWdmYjBrNXQxZS5jbG91ZGZyb250Lm5ldC9kb3dubG9hZC81L2hnczAwMDEifSx7ImlkIjoiMTEzODUwMDAxMiIsImxvY2F0aW9uIjoxMiwidGl0bGUiOiI1MeefreWJpyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yNzYvMjAyLzJqNy9nZy9mMDUzZmI1M2MyMjNlM2U4N2E0MGYyMzY4MDlhZjM5My53ZWJwIiwibGluayI6Imh0dHBzOi8vZDFhdnMwcG9yczg5ZmYuY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM4NDAwMDEyIiwibG9jYXRpb24iOjEyLCJ0aXRsZSI6Iue6ouaenOefreWJpyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8zMXEvMmQxL2NtLzZ5L2RiYjczOTA2NTVjMzQ0YzU0OGQ3NTQxZDMyMTEzZTQ4LndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMjg3MWdmYjBrNXQxZS5jbG91ZGZyb250Lm5ldC9kb3dubG9hZC80L2hnczAwMDEifV0sImFwcEluZm9CTGlzdCI6W3siaWQiOiIxMTM4MjAwMDEzIiwibG9jYXRpb24iOjEzLCJ0aXRsZSI6IuWFqOWbvee6pueCriIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yM3UveDkvazcvMXAwLzdhZTY2ZjgwYTZiMzg5M2ZkNDE5OTkxYzNjZDk4MWI4LmdpZiIsImxpbmsiOiJodHRwczovL3lrNmViOXEudG9wOjQ1ODIifSx7ImlkIjoiMTEzODcwMDAxMyIsImxvY2F0aW9uIjoxMywidGl0bGUiOiLnqbrpmY3lq6nmqKEiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMzA3LzJodC8ycTAvMmtqL2QxZGJhMWFmMTE0NDUxN2Y1NzI0NDRiZTVkYTdhODBjLkdJRiIsImxpbmsiOiJodHRwczovLzE3MDEudXd4YnlsLmNuL2xhb3Bhbi9pbmRleC5odG1sIn0seyJpZCI6IjExMzg4MDAwMTMiLCJsb2NhdGlvbiI6MTMsInRpdGxlIjoi5pil6I2vIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzI4bi8yNnIvMm5xL2kxLzE2N2E1YjMxYjA3NzYzMTMxZDkxYzE4YjcxMjU3MDAyLkdJRiIsImxpbmsiOiJodHRwczovL3U1cThxNS50b3AifSx7ImlkIjoiMTEzODMwMDAxMyIsImxvY2F0aW9uIjoxMywidGl0bGUiOiLmmKXoja/ov7foja8iLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMjB0LzJweC96Ni8ybDUvMDUxZGE1MzYzYTU4YzVkYTE0ZjMyZWQyYTg5NWUxMDkuZ2lmIiwibGluayI6Imh0dHBzOi8vcG14NWdoZS50b3A6MjkyMCJ9LHsiaWQiOiIxMTYzODAwMDEzIiwibG9jYXRpb24iOjEzLCJ0aXRsZSI6Iua1t+inkuekvuWMuiIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yMDgvMmwyLzFzbS8ycHUvMDIzYjJmMmRhMmM1MWFkNjJiYWU1YjIwNDE0OWE2ZDYud2VicCIsImxpbmsiOiJodHRwczovL2QxbXAyb3FrMzFwMGRhLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzOTAwMDAxMyIsImxvY2F0aW9uIjoxMywidGl0bGUiOiLpu4Tmnpznn63liaciLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvdWkvMzU0L3A5L3F4LzU1MDFjMWRjZWZmZjg3MWFmNzhjMGRiZjMyYjc1YmU0LmpwZyIsImxpbmsiOiJodHRwczovL2Rvd3IydnJ6cjBmb28uY2xvdWRmcm9udC5uZXQ/ZGM9aGdzMDAwMSJ9LHsiaWQiOiIxMTM4OTAwMDEzIiwibG9jYXRpb24iOjEzLCJ0aXRsZSI6IjkxZmFucyIsImltYWdlcyI6Imh0dHBzOi8vd2ViaW1nLnJsa2Z1cy5jbi9jZjIzMDcwNS9pbWFnZS8yczkvMW1tLzJody8zM2ovMDIzMGUwNGVjNGU3ZDMxYWY3NTE0Y2VhMDQzZDM2ZGIud2VicCIsImxpbmsiOiJodHRwczovL2QxMjg5MGFwdHVsMWQwLmNsb3VkZnJvbnQubmV0P2RjPWhnczAwMDEifSx7ImlkIjoiMTEzODYwMDAxMyIsImxvY2F0aW9uIjoxMywidGl0bGUiOiLpu4TmnpznpoHmvKsiLCJpbWFnZXMiOiJodHRwczovL3dlYmltZy5ybGtmdXMuY24vY2YyMzA3MDUvaW1hZ2UvMXVlLzJ5ci9uOS8yMDUvNzYyZmQ2NWZiMzE3NjhhNzZmMTY3NGM3ZWEyMmIzNTEud2VicCIsImxpbmsiOiJodHRwczovL2QyODcxZ2ZiMGs1dDFlLmNsb3VkZnJvbnQubmV0L2Rvd25sb2FkLzUvaGdzMDAwMSJ9LHsiaWQiOiIxMTM4NTAwMDEzIiwibG9jYXRpb24iOjEzLCJ0aXRsZSI6IjUx55+t5YmnIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzI3Ni8yMDIvMmo3L2dnL2YwNTNmYjUzYzIyM2UzZTg3YTQwZjIzNjgwOWFmMzkzLndlYnAiLCJsaW5rIjoiaHR0cHM6Ly9kMWF2czBwb3JzODlmZi5jbG91ZGZyb250Lm5ldD9kYz1oZ3MwMDAxIn0seyJpZCI6IjExMzg0MDAwMTMiLCJsb2NhdGlvbiI6MTMsInRpdGxlIjoi57qi5p6c55+t5YmnIiwiaW1hZ2VzIjoiaHR0cHM6Ly93ZWJpbWcucmxrZnVzLmNuL2NmMjMwNzA1L2ltYWdlLzMxcS8yZDEvY20vNnkvZGJiNzM5MDY1NWMzNDRjNTQ4ZDc1NDFkMzIxMTNlNDgud2VicCIsImxpbmsiOiJodHRwczovL2QyODcxZ2ZiMGs1dDFlLmNsb3VkZnJvbnQubmV0L2Rvd25sb2FkLzQvaGdzMDAwMSJ9XX0sInNlb0luZm8iOnsidGl0bGUiOiLnhp/mnpznn63liaflrpjnvZEgLSDng63pl6hBSeaIkOS6uuefreWJp+S4jum7hOaenOeyvuWTgUFJ5oiQ5Lq655+t5Ymn5ZCI6ZuGIiwia2V5d29yZHMiOlsi54af5p6c55+t5YmnIiwi6buE5p6c55+t5YmnIiwi6buE5p6cIiwiQUnmiJDkurrnn63liaciLCLnsr7lk4Hnn63liaciLCLnn63liadBUFAiLCLpu4TosYbnn63liaciLCLnhp/mnpzlrpjnvZEiLCLnhp/mnpxBUFDkuIvovb0iLCJBSeaIkOS6uuefreWJp+ingueci+e9keermSIsIkFJ5oiQ5Lq655+t5YmnYXBw5LiL6L29IiwiQUnmiJDkurrnn63liaflnKjnur/nnIsiXSwiZGVzY3JpcHRpb24iOiLnhp/mnpznn63liafkvZzkuLrpooblhYjnmoRBSeaIkOS6uuefreWJp+S4jueyvuWTgeefreinhumikee7vOWQiOW5s+WPsO+8jOaxh+mbhuWFqOe9keWOn+WIm+mrmOiDvUlQ5LiO5Y+N6L2s54i95Ymn44CC56uZ5YaF54us5a6254Ot5pKt44CK6aOO5Y2O56We5aWz5b2V44CL44CK55C85piO56We5aWz5b2V44CL44CK5q+N5LiK5pS755Wl44CL44CK5LuZ5a2Q55qE5L+u6KGM44CL44CK5p6B5ZOB5a625LiB44CL562J5aSa6aKY5p2Q5Yqb5L2c77yM5ra155uW5LuZ5L6g5aWH5bm744CB6YO95biC5Lmx5Lym44CB6IGM5Zy65LiO56m/6LaK44CC5YWo56uZ55S76LSo6LaF5riF5peg5Yig5YeP44CB5q+P5pel5pu05paw5pyA5paw6ZuG77yM5pSv5oyB572R6aG15Y2z54K55Y2z5pKt5LiO5a6Y5pa5QVBQ5o6M5LiK6KeC5b2x77yM5byA5ZCv5p6B6Ie05rKJ5rW455qE6KeG5ZCs55ub5a6044CCIiwid2ViU2l0ZU5hbWUiOiLnhp/mnpznn63liaciLCJjYW5vbmljYWxVcmwiOiJodHRwczovL3NodWd1b2RqLmNvbSJ9fSwiaGFzaCI6ZmFsc2UsIm1zZyI6InN1Y2Nlc3MiLCJ0aW1lIjoiMjAyNi0xMS0wN1QwNDoxMzoxNC43MTRaIiwidGlwIjoi5oiQ5YqfIn0=","status":200,"url":"https://webhgbapi.mfcg.me/api/app/playlet/home"},"revalidate":60,"tags":["playlet-home"]} \ No newline at end of file diff --git a/.next-dev/dev/cache/fetch-cache/d2b309c2a1389bd30f85f47807c4a942f7fe144bb77f2975958437921fa00858 b/.next-dev/dev/cache/fetch-cache/d2b309c2a1389bd30f85f47807c4a942f7fe144bb77f2975958437921fa00858 new file mode 100644 index 0000000..da5cb1d --- /dev/null +++ b/.next-dev/dev/cache/fetch-cache/d2b309c2a1389bd30f85f47807c4a942f7fe144bb77f2975958437921fa00858 @@ -0,0 +1 @@ +{"kind":"FETCH","data":{"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"Content-Disposition,Refresh-Authorization","connection":"keep-alive","content-encoding":"gzip","content-type":"application/json; charset=utf-8","date":"Sat, 07 Nov 2026 04:13:14 GMT","server":"nginx/1.24.0 (Ubuntu)","transfer-encoding":"chunked"},"body":"eyJjb2RlIjoyMDAsImRhdGEiOnsiY2F0ZWdvcnlMaXN0IjpbeyJpZCI6MTI3MDEsIm5hbWUiOiLpppbpobUiLCJpY29uIjoiIiwidHJhbnNsYXRpb25MaXN0IjpbXSwidXJsVmFsdWUiOiIvIiwiY2F0ZWdvcnlUeXBlIjoxLCJzZW9JbmZvIjp7InRpdGxlIjoi54af5p6c55+t5Ymn5a6Y572RIC0g54Ot6ZeoQUnmiJDkurrnn63liafkuI7nsr7lk4Hnn63liaflnKjnur/op4LnnIsiLCJrZXl3b3JsZCI6WyLnhp/mnpznn63liaciLCLnhp/mnpznn63liaflrpjnvZEiLCJBSeaIkOS6uuefreWJpyIsIuefreWJp+aOqOiNkCIsIumjjuWNjuelnuWls+W9lSIsIueQvOaYjuelnuWls+W9lSIsIuavjeS4iuaUu+eVpSIsIuaegeWTgeWutuS4gSIsIuWcqOe6v+eci+efreWJpyIsIuemj+WIqeefreWJp0FQUCJdLCJkZXNjcmlwdGlvbiI6IuWFqOe9keWOn+WIm0FJ5oiQ5Lq655+t5Ymn5LiO54Ot6Zeo55+t5Ymn6ZuG5pWj5Zyw77yM5LiT5Li65oeC5L2g55qE5oSf5a6Y5L2T6aqM6ICM55Sf44CC5LiN5LuF6L+e6L2944CK6aOO5Y2O56We5aWz5b2V44CL44CK55C85piO56We5aWz5b2V44CL44CK5q+N5LiK5pS755Wl44CL44CK5p6B5ZOB5a625LiB44CL562J5aS06YOo54Ot6ZeoSVDvvIzmm7Tlm4rmi6zpg73luILjgIHku5nkvqDnqb/otorkuI7npoHlv4zmi4nmia/nrYnlhajpopjmnZDniL3liafjgILnlLvotKjmi4nmu6HjgIHmr4/ml6Xmm7TmlrDvvIzml6DorrrmmK/nvZHpobXpmo/lvIDpmo/nnIvov5jmmK/mkK3phY3lrpjmlrlBUFDmjozkuIrov73liafvvIzpg73og73nlYXkuqvml6DliKDlh4/nmoTmnoHpgJ/op4blkKzkvZPpqozjgIIifX0seyJpZCI6MTI3MDIsIm5hbWUiOiJBSeaIkOS6uuefreWJpyIsImljb24iOiIiLCJ0cmFuc2xhdGlvbkxpc3QiOltdLCJ1cmxWYWx1ZSI6Ii9zaG9ydHMiLCJjYXRlZ29yeVR5cGUiOjEsInNlb0luZm8iOnsidGl0bGUiOiJBSeaIkOS6uuefreWJp+Wkp+WFqCAtIOa1t+mHj+eDremXqEFJ5oiQ5Lq655+t5Ymn5Zyo57q/6KeC55yLIHwg54af5p6c55+t5YmnIiwia2V5d29ybGQiOlsiQUnmiJDkurrnn63liaciLCLnn63liaflpKflhagiLCLng63pl6jnn63liafmjqjojZAiLCLpo47ljY7npZ7lpbPlvZUiLCLnkLzmmI7npZ7lpbPlvZUiLCLmr43kuIrmlLvnlaUiLCLpobbnuqfnp4HljqgiLCLni6zlrrbnn63liaciLCLlnKjnur/nnIvnn63liaciLCLnhp/mnpznn63liaciXSwiZGVzY3JpcHRpb24iOiLnhp/mnpznn63liaflhajnq5nnn63liafotYTmupDlpKfmsYfmgLvvvIHkuIDnq5nlvI/nvZHnvZfku5nkvqDlpYflubvjgIHpg73luILnpoHlv4zjgIHlj43ovazpgIbooq3nrYnlhajlk4HnsbvpopjmnZDvvIzngavng63mlLblvZXjgIrpo47ljY7npZ7lpbPlvZXjgIvjgIrnkLzmmI7npZ7lpbPlvZXjgIvjgIrmr43kuIrmlLvnlaXjgIvjgIrpobbnuqfnp4HljqjjgIvnrYnlhajnvZHpq5jliIblipvkvZzjgILmr4/ml6Xpq5jpgJ/mm7TmlrDvvIznlLvotKjpq5jmuIXml6DliKDlh4/vvIzmg7PnnIvnmoTov5nph4zlhajpg73mnInjgIIifX0seyJpZCI6MTI3MDMsIm5hbWUiOiLnn63liafkuJPpopgiLCJpY29uIjoiIiwidHJhbnNsYXRpb25MaXN0IjpbXSwidXJsVmFsdWUiOiIvdG9waWNzIiwiY2F0ZWdvcnlUeXBlIjoxLCJzZW9JbmZvIjp7InRpdGxlIjoi55+t5Ymn5LiT6aKY5aSn5YWoIC0g54Ot6Zeo6aKY5p2Q5ZCI6ZuG5LiO57K+5ZOB55+t5Ymn5Zyo57q/6KeC55yLIHwg54af5p6c55+t5YmnIiwia2V5d29ybGQiOlsi55+t5Ymn5LiT6aKYIiwi55+t5Ymn5ZCI6ZuGIiwi5Y6f5Yib55+t5YmnIiwi6YO95biC55+t5YmnIiwi6a2U5pS555+t5YmnIiwi5LuZ5L6g55+t5YmnIiwi56m/6LaK55+t5YmnIiwi57K+6YCJ6aKY5p2QIiwi5Zyo57q/55yL55+t5YmnIiwi54af5p6c55+t5YmnIl0sImRlc2NyaXB0aW9uIjoi5Zu057uV5qC45b+D5Li76aKY77yM5LiA5Y+j5rCU6L+95a6M5ZCM5qy+5aW95pWF5LqL77yB54af5p6c55+t5Ymn57K+6YCJ6YO95biC54i95paH44CB6a2U5pS55Y+N6L2s44CB54us5a625Y6f5Yib44CB56m/6LaK5LuZ5L6g562J6auY5Lq65rCU55+t5Ymn5LiT6aKY44CC5oyJ6aKY5p2Q6IGa5ZCI5rex5bqm5aW95Ymn77yM5LiN55So5Yiw5aSE57+75om+77yM54K55Ye75b+D5Luq5LiT6aKY5Y2z5Yi755WF55yL5pW057uE57K+5b2p5Ymn6ZuG44CCIn19LHsiaWQiOjEyNzA0LCJuYW1lIjoi55+t5Ymn54Ot5qacIiwiaWNvbiI6IiIsInRyYW5zbGF0aW9uTGlzdCI6W10sInVybFZhbHVlIjoiL3JhbmsiLCJjYXRlZ29yeVR5cGUiOjEsInNlb0luZm8iOnsidGl0bGUiOiLnn63liafmjpLooYzmppwgLSDng63mkq0g5paw5Ymn5qac6auY5Lq65rCU5Y6f5Yib55+t5Ymn5o6S6KGM5qac5Y2VIHwg54af5p6c55+t5YmnIiwia2V5d29ybGQiOlsi55+t5Ymn5o6S6KGM5qacIiwi55+t5Ymn54Ot5qacIiwi54Ot5pKt55+t5YmnIiwi5paw5Ymn5o6o6I2QIiwi5Y6f5Yib55+t5Ymn5o6S6KGM5qacIiwi5a2Y5Zyo5oSf6Zu2Iiwi5pyA5by65pi+56S65ZmoIiwi6Zeq5ama5aSn5L2s5o6J6ams5ZCOIiwi5Zyo57q/55yL55+t5YmnIiwi54af5p6c55+t5YmnIl0sImRlc2NyaXB0aW9uIjoi5YWo56uZ54Ot5bqm5LiO5Y+j56KR6aOO5ZCR5qCH77yB54af5p6c55+t5Ymn5o6S6KGM5qac5a6e5pe25ZCM5q2l54Ot5pKt5qac44CB5paw5Ymn5qac5LiO6L+95Ymn5qac77yM5aSa57u05bqm5p2D5aiB55uY54K544CK5a2Y5Zyo5oSf77ya6Zu244CL44CK5pyA5by65pi+56S65Zmo44CL44CK6Zeq5ama5aSn5L2s5o6J6ams5ZCO44CL562J6Zy45qac5L2z5L2c44CC6Lef5qac6L+95Ymn5LiN6Lip6Zu377yM57K+5b2p6auY5YiG54i954mH5LiA572R5omT5bC944CCIn19LHsiaWQiOjEyNzA1LCJuYW1lIjoi5Zue5a6255qE6LevIiwiaWNvbiI6IiIsInRyYW5zbGF0aW9uTGlzdCI6W10sInVybFZhbHVlIjoiL2hvbWUtcm9hZCIsImNhdGVnb3J5VHlwZSI6MSwic2VvSW5mbyI6eyJ0aXRsZSI6IuWbnuWutueahOi3ryAtIOeGn+aenOefreWJp+acgOaWsOWkh+eUqOWcsOWdgOWPkeW4g+S4juawuOS5heiuv+mXruWFpeWPoyB8IOeGn+aenOefreWJpyIsImtleXdvcmxkIjpbIueGn+aenOefreWJp+Wkh+eUqOWcsOWdgCIsIueGn+aenOefreWJp+acgOaWsOWfn+WQjSIsIuWbnuWutueahOi3ryIsIueGn+aenOefreWJp+WPkeW4g+mhtSIsIuawuOS5heiuv+mXruWFpeWPoyIsIueGn+aenOefreWJp0FQUOS4i+i9vSIsIuWumOaWueS6pOa1gee+pCIsIumYsuWkseiBlOWvvOiIqiJdLCJkZXNjcmlwdGlvbiI6IuaKiuWbnuWutueahOi3r+eVmeWcqOi6q+i+ue+8geeGn+aenOefreWJp+WumOaWueWPkeW4g+mhteWunuaXtuWQjOatpeacgOaWsOWkh+eUqOiuv+mXruWcsOWdgOOAgeawuOS5heWumOe9keWFpeWPo+S4jkFQUOS4i+i9vemTvuaOpeOAguaPkOS+m+WkmuiuvuWkh+S4gOmUruaUtuiXj+aMh+WNl+S4juWumOaWueS6pOa1geekvuWMuu+8jOWRiuWIq+i/t+i3r+WkseiBlO+8jOmaj+aXtueos+WumumhuueVheiuv+mXruOAgiJ9fSx7ImlkIjoxMjcwNiwibmFtZSI6Iuemj+WIqeW6lOeUqCIsImljb24iOiIiLCJ0cmFuc2xhdGlvbkxpc3QiOltdLCJ1cmxWYWx1ZSI6Ii9hcHBzIiwiY2F0ZWdvcnlUeXBlIjoxLCJzZW9JbmZvIjp7InRpdGxlIjoi56aP5Yip5bqU55So5a+86IiqIC0g57K+6YCJ54Ot6Zeo5oiQ5Lq6QVBQ5LiO5LyY6LSo5aW956uZ5o6o6I2QIHwg54af5p6c55+t5YmnIiwia2V5d29ybGQiOlsi5oiQ5Lq6QVBQ5o6o6I2QIiwiOTHnn63liaciLCLnpoHmnpznn63liaciLCLpu4Tmnpznn63liaciLCLmtbfop5LnpL7ljLoiLCLmiJDkurrnn63liadBUFAiLCLnsr7lk4Hlpb3nq5nlr7zoiKoiLCLlhY3otLnnpo/liKlBUFAiLCLnhp/mnpznn63liaciXSwiZGVzY3JpcHRpb24iOiLotoXkurrmsJTnpo/liKnlupTnlKjkuI7nsr7lk4Hlpb3nq5npm4bkuK3okKXvvIHnhp/mnpznn63liafkuLrkvaDnsr7pgInjgIo5MeefreWJp+OAi+OAiuemgeaenOefreWJp+OAi+OAium7hOaenOefreWJp+OAi+OAiua1t+inkuekvuWMuuOAi+etiemrmOWPo+eikeW6lOeUqO+8jOa2teebluWFjei0uei/veWJp+OAgea2qea8q+eyvumAieS4juWQg+eTnOm7keaWmeOAguWuieijheWNs+eUqOOAgeeCueWHu+WNs+eci++8jOW4puS9oOW8gOWQr+WFqOaWueS9jeeahOinhuWQrOWoseS5kOaWsOS9k+mqjOOAgiJ9fV19LCJoYXNoIjpmYWxzZSwibXNnIjoic3VjY2VzcyIsInRpbWUiOiIyMDI2LTExLTA3VDA0OjEzOjE0LjcyMVoiLCJ0aXAiOiLmiJDlip8ifQ==","status":200,"url":"https://webhgbapi.mfcg.me/api/app/translation/category/list"},"revalidate":60,"tags":["translation-category"]} \ No newline at end of file diff --git a/.next-dev/dev/cache/fetch-cache/da55c8f7949721071c60f53a5b3e4a91e4391f9a654354acfc8fbbfd927e8373 b/.next-dev/dev/cache/fetch-cache/da55c8f7949721071c60f53a5b3e4a91e4391f9a654354acfc8fbbfd927e8373 new file mode 100644 index 0000000..82affc5 --- /dev/null +++ b/.next-dev/dev/cache/fetch-cache/da55c8f7949721071c60f53a5b3e4a91e4391f9a654354acfc8fbbfd927e8373 @@ -0,0 +1 @@ +{"kind":"FETCH","data":{"headers":{"access-control-allow-origin":"*","access-control-expose-headers":"Content-Disposition,Refresh-Authorization","connection":"keep-alive","content-encoding":"gzip","content-type":"application/json; charset=utf-8","date":"Sat, 07 Nov 2026 04:13:14 GMT","server":"nginx/1.24.0 (Ubuntu)","transfer-encoding":"chunked"},"body":"eyJjb2RlIjoyMDAsImRhdGEiOnsiZm9vdGVySW5mbyI6eyJicmFuZCI6eyJ0aXRsZSI6IueGn+aenOefreWJpyIsImNvbnRlbnQiOiLnhp/mnpznn63liafkvZzkuLrpooblhYjnmoRBSeaIkOS6uuefreWJp+S4jueyvuWTgeefreinhumikee7vOWQiOW5s+WPsO+8jOaxh+mbhuWFqOe9keWOn+WIm+mrmOiDvUlQ5LiO5Y+N6L2s54i95Ymn44CC56uZ5YaF54us5a6254Ot5pKt44CK6aOO5Y2O56We5aWz5b2V44CL44CK55C85piO56We5aWz5b2V44CL44CK5q+N5LiK5pS755Wl44CL44CK5LuZ5a2Q55qE5L+u6KGM44CL44CK5p6B5ZOB5a625LiB44CL562J5aSa6aKY5p2Q5Yqb5L2c77yM5ra155uW5LuZ5L6g5aWH5bm744CB6YO95biC5Lmx5Lym44CB6IGM5Zy65LiO56m/6LaK44CC5YWo56uZ55S76LSo6LaF5riF5peg5Yig5YeP44CB5q+P5pel5pu05paw5pyA5paw6ZuG77yM5pSv5oyB572R6aG15Y2z54K55Y2z5pKt5LiO5a6Y5pa5QVBQ5o6M5LiK6KeC5b2x77yM5byA5ZCv5p6B6Ie05rKJ5rW455qE6KeG5ZCs55ub5a6044CCIn0sIm5hdkxpc3QiOlt7ImlkIjoxMjcwNywibmFtZSI6IuW6lemDqOWvvOiIqiIsImljb24iOiIiLCJ0cmFuc2xhdGlvbkxpc3QiOlt7ImlkIjoxMjY3MSwibmFtZSI6IuWFs+S6juaIkeS7rCIsImlzRnJpZW5kQWRzIjpmYWxzZSwidXJsVmFsdWUiOiIvcmljaHRleHQv5YWz5LqO5oiR5LusIn0seyJpZCI6MTI2NzMsIm5hbWUiOiLpmpDnp4HmlL/nrZYiLCJpc0ZyaWVuZEFkcyI6ZmFsc2UsInVybFZhbHVlIjoiL3JpY2h0ZXh0L+makOengeaUv+etliJ9LHsiaWQiOjEyNjc0LCJuYW1lIjoi572R56uZ55aR6ZeuIiwiaXNGcmllbmRBZHMiOmZhbHNlLCJ1cmxWYWx1ZSI6Ii9yaWNodGV4dC/nvZHnq5nnlpHpl64ifSx7ImlkIjoxMjY3NSwibmFtZSI6IuaEj+ingeWPjemmiCIsImlzRnJpZW5kQWRzIjpmYWxzZSwidXJsVmFsdWUiOiIvZmVlZGJhY2sifSx7ImlkIjoxMjY3NiwibmFtZSI6IjIyNTciLCJpc0ZyaWVuZEFkcyI6ZmFsc2UsInVybFZhbHVlIjoiL3JpY2hldGV4dC8yMjU3In0seyJpZCI6MTI2NzcsIm5hbWUiOiJETUNBIiwiaXNGcmllbmRBZHMiOmZhbHNlLCJ1cmxWYWx1ZSI6Ii9yaWNoZXRleHQvRE1DQSJ9XSwidXJsVmFsdWUiOiIiLCJjYXRlZ29yeVR5cGUiOjMsInNlb0luZm8iOnsidGl0bGUiOiIiLCJrZXl3b3JsZCI6W10sImRlc2NyaXB0aW9uIjoiIn19XSwiY29udGFjdExpc3QiOlt7Im5hbWUiOiJFLW1haWwiLCJ2YWx1ZSI6Imh0dHBzOi8vY2hlbmdyZW52aWRlb0Bwcm90b24ubWUifSx7Im5hbWUiOiLllYbliqHlkIjkvZzvvJrnq4vljbPogZTns7siLCJ2YWx1ZSI6IiJ9LHsibmFtZSI6IuWumOaWuee+pO+8mueri+WNs+WKoOWFpSIsInZhbHVlIjoiaHR0cHM6Ly90Lm1lL1NodUd1b0FJMDEifV19fSwiaGFzaCI6ZmFsc2UsIm1zZyI6InN1Y2Nlc3MiLCJ0aW1lIjoiMjAyNi0xMS0wN1QwNDoxMzoxNC42OTRaIiwidGlwIjoi5oiQ5YqfIn0=","status":200,"url":"https://webhgbapi.mfcg.me/api/app/config/footer/info"},"revalidate":60,"tags":["footer-info"]} \ No newline at end of file diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000156.meta b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000156.meta deleted file mode 100644 index 9b15a36..0000000 Binary files a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000156.meta and /dev/null differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000158.sst b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000158.sst deleted file mode 100644 index b2f4470..0000000 Binary files a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000158.sst and /dev/null differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000160.sst b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000160.sst deleted file mode 100644 index 6c2142e..0000000 Binary files a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000160.sst and /dev/null differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000165.meta b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000165.meta deleted file mode 100644 index 49dd1eb..0000000 Binary files a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000165.meta and /dev/null differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000168.sst b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000168.sst deleted file mode 100644 index 2f9a956..0000000 Binary files a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000168.sst and /dev/null differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000173.meta b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000173.meta deleted file mode 100644 index 6462c4a..0000000 Binary files a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000173.meta and /dev/null differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000179.del b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000179.del deleted file mode 100644 index 618924f..0000000 Binary files a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000179.del and /dev/null differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000180.sst b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000180.sst deleted file mode 100644 index 6cb84ec..0000000 Binary files a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000180.sst and /dev/null differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000184.meta b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000184.meta deleted file mode 100644 index d0c658c..0000000 Binary files a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000184.meta and /dev/null differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000187.sst b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000187.sst deleted file mode 100644 index 13888a7..0000000 Binary files a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000187.sst and /dev/null differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000188.meta b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000188.meta deleted file mode 100644 index 72c9575..0000000 Binary files a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000188.meta and /dev/null differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000189.del b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000189.del deleted file mode 100644 index a3697df..0000000 Binary files a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000189.del and /dev/null differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000191.sst b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000191.sst new file mode 100644 index 0000000..1611c7b Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000191.sst differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000193.sst b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000193.sst new file mode 100644 index 0000000..d33bbc8 Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000193.sst differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000194.meta b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000194.meta new file mode 100644 index 0000000..f757507 Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000194.meta differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000195.meta b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000195.meta new file mode 100644 index 0000000..49ab286 Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000195.meta differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000198.sst b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000198.sst new file mode 100644 index 0000000..1e3a344 Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000198.sst differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000201.sst b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000201.sst new file mode 100644 index 0000000..d4a1d4d Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000201.sst differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000202.meta b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000202.meta new file mode 100644 index 0000000..502a25b Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000202.meta differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000203.meta b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000203.meta new file mode 100644 index 0000000..2fac6aa Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000203.meta differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000155.sst b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000206.sst similarity index 61% rename from .next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000155.sst rename to .next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000206.sst index d1f3e5a..3798a93 100644 Binary files a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000155.sst and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000206.sst differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000186.sst b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000207.sst similarity index 61% rename from .next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000186.sst rename to .next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000207.sst index e77db5b..57de80c 100644 Binary files a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000186.sst and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000207.sst differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000208.sst b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000208.sst new file mode 100644 index 0000000..6574f9f Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000208.sst differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000209.meta b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000209.meta new file mode 100644 index 0000000..57c826c Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000209.meta differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000210.meta b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000210.meta new file mode 100644 index 0000000..9d36e5b Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000210.meta differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000211.del b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000211.del new file mode 100644 index 0000000..1d71649 Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000211.del differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000212.sst b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000212.sst new file mode 100644 index 0000000..f2438ab Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000212.sst differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000213.sst b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000213.sst new file mode 100644 index 0000000..f3429e6 Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000213.sst differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000214.sst b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000214.sst new file mode 100644 index 0000000..21f1918 Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000214.sst differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000215.sst b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000215.sst new file mode 100644 index 0000000..4b15779 Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000215.sst differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000216.meta b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000216.meta new file mode 100644 index 0000000..ecb695c Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000216.meta differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000217.meta b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000217.meta new file mode 100644 index 0000000..4ad8b87 Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000217.meta differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000218.meta b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000218.meta new file mode 100644 index 0000000..2c576ca Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000218.meta differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000219.meta b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000219.meta new file mode 100644 index 0000000..c071e0b Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000219.meta differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000220.sst b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000220.sst new file mode 100644 index 0000000..26e6be2 Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000220.sst differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000221.sst b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000221.sst new file mode 100644 index 0000000..1591d3a Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000221.sst differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000222.sst b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000222.sst new file mode 100644 index 0000000..c04d1f0 Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000222.sst differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000223.sst b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000223.sst new file mode 100644 index 0000000..f8beecd Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000223.sst differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000224.meta b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000224.meta new file mode 100644 index 0000000..9a87c8d Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000224.meta differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000225.meta b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000225.meta new file mode 100644 index 0000000..d2a9d30 Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000225.meta differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000226.meta b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000226.meta new file mode 100644 index 0000000..baa6369 Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000226.meta differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000227.meta b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000227.meta new file mode 100644 index 0000000..56be186 Binary files /dev/null and b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/00000227.meta differ diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/CURRENT b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/CURRENT index 5e17f69..10429ba 100644 --- a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/CURRENT +++ b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/CURRENT @@ -1 +1 @@ -{"max_sequence_number":189,"commit_time":"2026-11-05T17:06:11.956948Z"} +{"max_sequence_number":227,"commit_time":"2026-11-07T04:13:42.436926Z"} diff --git a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/LOG b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/LOG index 922133d..1442977 100644 --- a/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/LOG +++ b/.next-dev/dev/cache/turbopack/v16.4.1-7217011a/LOG @@ -376,3 +376,60 @@ FAM | META SEQ | SST SEQ | RANGE 1 | 00000188 | 00000143 00000144 00000149 00000161 00000169 00000181 OBSOLETE SST | | 00000143 00000144 00000149 00000161 00000169 00000181 SST DELETED | | 00000145 00000154 00000166 00000174 00000185 META DELETED +Time 2026-11-07T04:09:23.562661Z +Commit 00000197 25607 keys in 22ms 772µs +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000194 | 00000193 SST | O | c44bdff4074eecdb-c44bdff4074eecdb (0 MiB, fresh, 38 bytes, 1 entries, 0 tombstones) + 3 | 00000195 | 00000191 SST | [==================================================================================================] | 00074e2d5e1aef87-fffc639dc1876c17 (0 MiB, fresh, 26529 bytes, 2201 entries, 0 tombstones) + 2 | 00000196 | 00000190 SST | [==================================================================================================] | 0006918236657861-fff3c034418ba0e5 (3 MiB, fresh, 3335775 bytes, 4580 entries, 0 tombstones) + 1 | 00000197 | 00000192 SST | [==================================================================================================] | 0003356ded434e7f-fffd6fbd2229df8a (6 MiB, fresh, 6415690 bytes, 18825 entries, 0 tombstones) +Time 2026-11-07T04:11:54.939554Z +Commit 00000205 53030 keys in 25ms 871µs +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000202 | 00000201 SST | O | c44bdff4074eecdb-c44bdff4074eecdb (0 MiB, fresh, 38 bytes, 1 entries, 0 tombstones) + 3 | 00000203 | 00000198 SST | [==================================================================================================] | 004687eb627740df-ffd92fcebb948480 (0 MiB, fresh, 27873 bytes, 2313 entries, 0 tombstones) + 2 | 00000204 | 00000199 SST | [==================================================================================================] | 00013daa2e97875e-fffe1000326d5b11 (5 MiB, fresh, 6153672 bytes, 15292 entries, 0 tombstones) + 1 | 00000205 | 00000200 SST | [==================================================================================================] | 00013daa2e97875e-fffe1000326d5b11 (7 MiB, fresh, 7875402 bytes, 35424 entries, 0 tombstones) + 2 | 00000209 | Compaction: + 2 | 00000209 | MERGE (33172 keys): + 2 | 00000209 | 00000155 INPUT | [==================================================================================================] | 00013daa2e97875e-fffccbe9625d2d11 + 2 | 00000209 | 00000158 INPUT | [==================================================================================================] | 00013daa2e97875e-fffccbe9625d2d11 + 2 | 00000209 | 00000160 INPUT | [==================================================================================================] | 0008ca2a8bf0c07d-fff3c034418ba0e5 + 2 | 00000209 | 00000168 INPUT | [==================================================================================================] | 0006918236657861-ffa66562c90d408a + 2 | 00000209 | 00000180 INPUT | [==================================================================================================] | 0006918236657861-ffebd49f0ef4bfdb + 2 | 00000209 | 00000190 INPUT | [==================================================================================================] | 0006918236657861-fff3c034418ba0e5 + 2 | 00000209 | 00000199 INPUT | [==================================================================================================] | 00013daa2e97875e-fffe1000326d5b11 + 2 | 00000209 | 00000206 OUTPUT | [==================================================================================================] | 00013daa2e97875e-fffe1000326d5b11 (compacted) + 1 | 00000210 | Compaction: + 1 | 00000210 | MERGE (381465 keys): + 1 | 00000210 | 00000186 INPUT | [==================================================================================================] | 00001b5ec0be92f9-ffffa6219f6e8533 + 1 | 00000210 | 00000187 INPUT | [==================================================================================================] | 0003356ded434e7f-fffdbf7d578e72a9 + 1 | 00000210 | 00000192 INPUT | [==================================================================================================] | 0003356ded434e7f-fffd6fbd2229df8a + 1 | 00000210 | 00000200 INPUT | [==================================================================================================] | 00013daa2e97875e-fffe1000326d5b11 + 1 | 00000210 | 00000207 OUTPUT | [==================================================================================================] | 00001b5ec0be92f9-ffffa6219f6e8533 (cold bottom) + 1 | 00000210 | 00000208 OUTPUT | [==================================================================================================] | 00013daa2e97875e-fffddf739e16297d (hot bottom) +Time 2026-11-07T04:11:55.243174Z +Commit 00000211 414637 keys in 22ms 156µs +FAM | META SEQ | SST SEQ | RANGE + 2 | 00000209 | 00000206 SST | [==================================================================================================] | 00013daa2e97875e-fffe1000326d5b11 (33 MiB, compacted, 34778157 bytes, 33172 entries, 0 tombstones) + 2 | 00000209 | 00000155 00000158 00000160 00000168 00000180 00000190 00000199 OBSOLETE SST + 1 | 00000210 | 00000207 SST | [==================================================================================================] | 00001b5ec0be92f9-ffffa6219f6e8533 (16 MiB, cold bottom, 17041762 bytes, 315138 entries, 0 tombstones) + 1 | 00000210 | 00000208 SST | [==================================================================================================] | 00013daa2e97875e-fffddf739e16297d (10 MiB, hot bottom, 10949030 bytes, 66327 entries, 0 tombstones) + 1 | 00000210 | 00000186 00000187 00000192 00000200 OBSOLETE SST + | | 00000155 00000158 00000160 00000168 00000180 00000186 00000187 00000190 00000192 00000199 00000200 SST DELETED + | | 00000188 00000197 00000205 META DELETED + | | 00000156 00000165 00000173 00000184 00000196 00000204 META DELETED +Time 2026-11-07T04:13:16.262145Z +Commit 00000219 15491 keys in 27ms 815µs +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000216 | 00000215 SST | O | c44bdff4074eecdb-c44bdff4074eecdb (0 MiB, fresh, 38 bytes, 1 entries, 0 tombstones) + 3 | 00000217 | 00000212 SST | [==================================================================================================] | 0044374e39240467-ffaf63c9f0fbf2ed (0 MiB, fresh, 6321 bytes, 524 entries, 0 tombstones) + 2 | 00000218 | 00000213 SST | [==================================================================================================] | 000d0c97c75ad9ad-fff3c034418ba0e5 (2 MiB, fresh, 2947771 bytes, 4256 entries, 0 tombstones) + 1 | 00000219 | 00000214 SST | [==================================================================================================] | 0003356ded434e7f-fff8d995d4bba353 (4 MiB, fresh, 4581354 bytes, 10710 entries, 0 tombstones) +Time 2026-11-07T04:13:42.405517Z +Commit 00000227 14386 keys in 37ms 370µs +FAM | META SEQ | SST SEQ | RANGE + 0 | 00000224 | 00000223 SST | O | c44bdff4074eecdb-c44bdff4074eecdb (0 MiB, fresh, 38 bytes, 1 entries, 0 tombstones) + 3 | 00000225 | 00000220 SST | [==================================================================================================] | 00a5f2839d52062a-ff31b2ec1283c990 (0 MiB, fresh, 5901 bytes, 489 entries, 0 tombstones) + 1 | 00000226 | 00000222 SST | [==================================================================================================] | 0004dceb9b3a19a9-fff8d995d4bba353 (3 MiB, fresh, 3538081 bytes, 9830 entries, 0 tombstones) + 2 | 00000227 | 00000221 SST | [==================================================================================================] | 0004dceb9b3a19a9-fff3c034418ba0e5 (1 MiB, fresh, 1937235 bytes, 4066 entries, 0 tombstones) diff --git a/.next-dev/dev/lock b/.next-dev/dev/lock new file mode 100644 index 0000000..ff905dc --- /dev/null +++ b/.next-dev/dev/lock @@ -0,0 +1 @@ +{"pid":58626,"port":26149,"hostname":"localhost","appUrl":"http://localhost:26149","startedAt":1794024464267} \ No newline at end of file diff --git a/.next-dev/dev/routes-manifest.json b/.next-dev/dev/routes-manifest.json index 4585f8f..fc7d113 100644 --- a/.next-dev/dev/routes-manifest.json +++ b/.next-dev/dev/routes-manifest.json @@ -1 +1 @@ -{"version":3,"caseSensitive":false,"basePath":"","rewrites":{"beforeFiles":[],"afterFiles":[],"fallback":[{"source":"/api/:path*","destination":"https://sgdj-h5.80sygtm.com/api/:path*","regex":"^\\/api(?:\\/((?:[^\\/]+?)(?:\\/(?:[^\\/]+?))*))?(?:\\/)?$","check":true}]},"redirects":[{"source":"/:path+/","destination":"/:path+","permanent":true,"internal":true,"priority":true,"regex":"^(?:\\/((?:[^\\/]+?)(?:\\/(?:[^\\/]+?))*))\\/$"}],"headers":[],"onMatchHeaders":[]} \ No newline at end of file +{"version":3,"caseSensitive":false,"basePath":"","rewrites":{"beforeFiles":[],"afterFiles":[],"fallback":[{"source":"/api/:path*","destination":"https://webhgbapi.mfcg.me/api/:path*","regex":"^\\/api(?:\\/((?:[^\\/]+?)(?:\\/(?:[^\\/]+?))*))?(?:\\/)?$","check":true}]},"redirects":[{"source":"/:path+/","destination":"/:path+","permanent":true,"internal":true,"priority":true,"regex":"^(?:\\/((?:[^\\/]+?)(?:\\/(?:[^\\/]+?))*))\\/$"}],"headers":[],"onMatchHeaders":[]} \ No newline at end of file diff --git a/.next-dev/dev/server/app-paths-manifest.json b/.next-dev/dev/server/app-paths-manifest.json index 5c8442b..0938a9e 100644 --- a/.next-dev/dev/server/app-paths-manifest.json +++ b/.next-dev/dev/server/app-paths-manifest.json @@ -1,8 +1,11 @@ { - "/_not-found/page": "app/_not-found/page.js", "/api/[...path]/route": "app/api/[...path]/route.js", - "/nav/page": "app/nav/page.js", + "/drama/[id]/page": "app/drama/[id]/page.js", + "/enkey/route": "app/enkey/route.js", + "/h5/chapter-detail/route": "app/h5/chapter-detail/route.js", + "/h5/m3u8/[...path]/route": "app/h5/m3u8/[...path]/route.js", + "/home-road/page": "app/home-road/page.js", "/page": "app/page.js", "/play/[id]/[episode]/page": "app/play/[id]/[episode]/page.js", - "/robots.txt/route": "app/robots.txt/route.js" + "/search/[[...parts]]/page": "app/search/[[...parts]]/page.js" } \ No newline at end of file diff --git a/.next-dev/dev/server/app/drama/[id]/page.js b/.next-dev/dev/server/app/drama/[id]/page.js index ad14aa3..1a86d8f 100644 --- a/.next-dev/dev/server/app/drama/[id]/page.js +++ b/.next-dev/dev/server/app/drama/[id]/page.js @@ -1,5 +1,5 @@ var R=require("../../../chunks/ssr/[turbopack]_runtime.js")("server/app/drama/[id]/page.js") -R.c("server/chunks/ssr/[root-of-the-server]__1_rmksccog9y3._.js") +R.c("server/chunks/ssr/[root-of-the-server]__0_19tjch_mrfx._.js") R.c("server/chunks/ssr/node_modules_next_dist_06htj7u026hps._.js") R.c("server/chunks/ssr/node_modules_next_dist_esm_server_0i519_x_u947b._.js") R.c("server/chunks/ssr/node_modules_next_dist_esm_shared_lib_110_pvnwn9uqh._.js") @@ -8,7 +8,7 @@ R.c("server/chunks/ssr/node_modules_next_dist_esm_0_65u7e78e6h9._.js") R.c("server/chunks/ssr/node_modules_next_dist_compiled_00yj_1pr91zo-._.js") R.c("server/chunks/ssr/node_modules_next_dist_server_route-modules_app-page_0qo_rmcihhsx5._.js") R.c("server/chunks/ssr/[externals]__1cacbhfx2nbuk._.js") -R.c("server/chunks/ssr/[root-of-the-server]__1w0ppiu6oha67._.js") +R.c("server/chunks/ssr/[root-of-the-server]__1r_ycdo5ggf5t._.js") R.c("server/chunks/ssr/node_modules_0n2q5m2nq0yi9._.js") R.c("server/chunks/ssr/src_0hsbhz7n16r_g._.js") R.c("server/chunks/ssr/src_app_not-found_tsx_1863-sqmkh7ny._.js") diff --git a/.next-dev/dev/server/app/drama/[id]/page_client-reference-manifest.js b/.next-dev/dev/server/app/drama/[id]/page_client-reference-manifest.js index 760a19e..42e6d00 100644 --- a/.next-dev/dev/server/app/drama/[id]/page_client-reference-manifest.js +++ b/.next-dev/dev/server/app/drama/[id]/page_client-reference-manifest.js @@ -1,3 +1,3 @@ globalThis.__RSC_MANIFEST = globalThis.__RSC_MANIFEST || {}; -globalThis.__RSC_MANIFEST["/drama/[id]/page"] = {"moduleLoading":{"prefix":""},"clientModules":{"[project]/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/client-page.js":{"id":"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/client-segment.js":{"id":"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js":{"id":"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js":{"id":"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/client/script.js":{"id":"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/startup-ad-dialog.tsx":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/entry-route-chrome.tsx":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/header-scroll.tsx":{"id":"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/page-tools.tsx":{"id":"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/client/app-dir/link.js":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/decrypted-image.tsx":{"id":"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/category-link.tsx":{"id":"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/header-search.tsx":{"id":"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/mobile-menu.tsx":{"id":"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/app-download.tsx":{"id":"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/sidebar-toggle.tsx":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/auth/GuestAuthBootstrap.tsx":{"id":"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/startup-ad-source.tsx":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/toast.tsx":{"id":"[project]/src/components/common/toast.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/toast-host.tsx":{"id":"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/ListLoading.tsx":{"id":"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1wppmbwp-_2wc._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/node_modules/next/dist/client/components/builtin/global-error.js":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/drama/card-tags.tsx":{"id":"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1wppmbwp-_2wc._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/src/components/play/EpisodeBoard.tsx":{"id":"[project]/src/components/play/EpisodeBoard.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1wppmbwp-_2wc._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/src/components/play/play-detail-actions.tsx":{"id":"[project]/src/components/play/play-detail-actions.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1wppmbwp-_2wc._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/src/components/play/PlayScreen.tsx":{"id":"[project]/src/components/play/PlayScreen.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1wppmbwp-_2wc._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/src/components/play/series-description.tsx":{"id":"[project]/src/components/play/series-description.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1wppmbwp-_2wc._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/src/components/common/promo-marquee.tsx":{"id":"[project]/src/components/common/promo-marquee.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1wppmbwp-_2wc._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false}},"ssrModuleMapping":{"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/layout-router.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-page.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-segment.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/script.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-scroll.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/page-tools.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/decrypted-image.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/category-link.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-search.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/mobile-menu.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/app-download.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/toast.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast-host.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/ListLoading.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_1d_32-15nuhuo._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_next_dist_client_components_0bew68i643j53._.js"],"async":false}},"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/drama/card-tags.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_1d_32-15nuhuo._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/src/components/play/EpisodeBoard.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/EpisodeBoard.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_1d_32-15nuhuo._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/src/components/play/play-detail-actions.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/play-detail-actions.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_1d_32-15nuhuo._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/src/components/play/PlayScreen.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/PlayScreen.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_1d_32-15nuhuo._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/src/components/play/series-description.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/series-description.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_1d_32-15nuhuo._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/src/components/common/promo-marquee.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/promo-marquee.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_1d_32-15nuhuo._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}}},"edgeSSRModuleMapping":{},"rscModuleMapping":{"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/layout-router.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-page.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-segment.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/script.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-scroll.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/page-tools.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/decrypted-image.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/category-link.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-search.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/mobile-menu.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/app-download.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/toast.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast-host.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/ListLoading.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/drama/card-tags.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/play/EpisodeBoard.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/EpisodeBoard.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/play/play-detail-actions.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/play-detail-actions.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/play/PlayScreen.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/PlayScreen.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/play/series-description.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/series-description.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/promo-marquee.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/promo-marquee.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{},"entryCSSFiles":{"[project]/src/app/layout":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/src/app/loading":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/node_modules/next/dist/client/components/builtin/global-error":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/src/app/drama/[id]/page":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false},{"path":"static/chunks/node_modules_xgplayer_dist_index_min_css_133k4e2i_djjm.css","inlined":false}]},"entryJSFiles":{"[project]/src/app/layout":["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/src/app/loading":["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/node_modules/next/dist/client/components/builtin/global-error":["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/src/app/drama/[id]/page":["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js","static/chunks/node_modules_1wppmbwp-_2wc._.js","static/chunks/src_1f3ifnztulvuh._.js"]}}; +globalThis.__RSC_MANIFEST["/drama/[id]/page"] = {"moduleLoading":{"prefix":""},"clientModules":{"[project]/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/client-page.js":{"id":"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/client-segment.js":{"id":"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js":{"id":"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js":{"id":"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/client/script.js":{"id":"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/startup-ad-dialog.tsx":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/entry-route-chrome.tsx":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/header-scroll.tsx":{"id":"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/page-tools.tsx":{"id":"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/client/app-dir/link.js":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/decrypted-image.tsx":{"id":"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/category-link.tsx":{"id":"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/header-search.tsx":{"id":"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/mobile-menu.tsx":{"id":"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/app-download.tsx":{"id":"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/sidebar-toggle.tsx":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/startup-ad-source.tsx":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/toast.tsx":{"id":"[project]/src/components/common/toast.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/toast-host.tsx":{"id":"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/ListLoading.tsx":{"id":"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1krh5f60-_0ky._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/node_modules/next/dist/client/components/builtin/global-error.js":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/drama/card-tags.tsx":{"id":"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1krh5f60-_0ky._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/src/components/play/EpisodeBoard.tsx":{"id":"[project]/src/components/play/EpisodeBoard.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1krh5f60-_0ky._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/src/components/play/play-detail-actions.tsx":{"id":"[project]/src/components/play/play-detail-actions.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1krh5f60-_0ky._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/src/components/play/PlayScreen.tsx":{"id":"[project]/src/components/play/PlayScreen.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1krh5f60-_0ky._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/src/components/play/series-description.tsx":{"id":"[project]/src/components/play/series-description.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1krh5f60-_0ky._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/src/components/common/promo-marquee.tsx":{"id":"[project]/src/components/common/promo-marquee.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1krh5f60-_0ky._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false}},"ssrModuleMapping":{"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/layout-router.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-page.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-segment.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/script.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-scroll.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/page-tools.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/decrypted-image.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/category-link.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-search.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/mobile-menu.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/app-download.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/toast.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast-host.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/ListLoading.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_0odgv2cb044f3._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_next_dist_client_components_0bew68i643j53._.js"],"async":false}},"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/drama/card-tags.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_0odgv2cb044f3._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/src/components/play/EpisodeBoard.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/EpisodeBoard.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_0odgv2cb044f3._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/src/components/play/play-detail-actions.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/play-detail-actions.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_0odgv2cb044f3._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/src/components/play/PlayScreen.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/PlayScreen.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_0odgv2cb044f3._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/src/components/play/series-description.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/series-description.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_0odgv2cb044f3._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/src/components/common/promo-marquee.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/promo-marquee.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_0odgv2cb044f3._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}}},"edgeSSRModuleMapping":{},"rscModuleMapping":{"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/layout-router.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-page.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-segment.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/script.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-scroll.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/page-tools.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/decrypted-image.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/category-link.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-search.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/mobile-menu.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/app-download.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/toast.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast-host.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/ListLoading.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/drama/card-tags.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/play/EpisodeBoard.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/EpisodeBoard.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/play/play-detail-actions.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/play-detail-actions.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/play/PlayScreen.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/PlayScreen.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/play/series-description.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/series-description.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/promo-marquee.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/promo-marquee.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{},"entryCSSFiles":{"[project]/src/app/layout":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/src/app/loading":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/node_modules/next/dist/client/components/builtin/global-error":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/src/app/drama/[id]/page":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false},{"path":"static/chunks/node_modules_xgplayer_dist_index_min_css_133k4e2i_djjm.css","inlined":false}]},"entryJSFiles":{"[project]/src/app/layout":["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/src/app/loading":["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/node_modules/next/dist/client/components/builtin/global-error":["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/src/app/drama/[id]/page":["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js","static/chunks/node_modules_1krh5f60-_0ky._.js","static/chunks/src_1f3ifnztulvuh._.js"]}}; diff --git a/.next-dev/dev/server/app/enkey/route.js b/.next-dev/dev/server/app/enkey/route.js new file mode 100644 index 0000000..55a409d --- /dev/null +++ b/.next-dev/dev/server/app/enkey/route.js @@ -0,0 +1,6 @@ +var R=require("../../chunks/[turbopack]_runtime.js")("server/app/enkey/route.js") +R.c("server/chunks/node_modules_next_dist_1gu--yty9067e._.js") +R.c("server/chunks/[root-of-the-server]__1y_dny-cu_otu._.js") +R.c("server/chunks/_next-internal_server_app_enkey_route_actions_0jqwrpk0x1_pi.js") +R.m("[project]/node_modules/next/dist/esm/build/templates/app-route.js { INNER_APP_ROUTE => \"[project]/src/app/enkey/route.ts [app-route] (ecmascript)\" } [app-route] (ecmascript)") +module.exports=R.m("[project]/node_modules/next/dist/esm/build/templates/app-route.js { INNER_APP_ROUTE => \"[project]/src/app/enkey/route.ts [app-route] (ecmascript)\" } [app-route] (ecmascript)").exports diff --git a/.next-dev/dev/server/app/enkey/route.js.map b/.next-dev/dev/server/app/enkey/route.js.map new file mode 100644 index 0000000..c15d7ec --- /dev/null +++ b/.next-dev/dev/server/app/enkey/route.js.map @@ -0,0 +1,5 @@ +{ + "version": 3, + "sources": [], + "sections": [] +} \ No newline at end of file diff --git a/.next-dev/dev/server/app/enkey/route/app-paths-manifest.json b/.next-dev/dev/server/app/enkey/route/app-paths-manifest.json new file mode 100644 index 0000000..afe435e --- /dev/null +++ b/.next-dev/dev/server/app/enkey/route/app-paths-manifest.json @@ -0,0 +1,3 @@ +{ + "/enkey/route": "app/enkey/route.js" +} \ No newline at end of file diff --git a/.next-dev/dev/server/app/enkey/route/build-manifest.json b/.next-dev/dev/server/app/enkey/route/build-manifest.json new file mode 100644 index 0000000..f2caaf6 --- /dev/null +++ b/.next-dev/dev/server/app/enkey/route/build-manifest.json @@ -0,0 +1,12 @@ +{ + "devFiles": [], + "ampDevFiles": [], + "polyfillFiles": [], + "lowPriorityFiles": [], + "rootMainFiles": [], + "pages": {}, + "ampFirstPages": [], + "rootMainFilesTree": {}, + "pagesChunkGroupBootstrapParams": {}, + "chunkLoadingGlobal": "TURBOPACK" +} \ No newline at end of file diff --git a/.next-dev/dev/server/app/enkey/route/server-reference-manifest.json b/.next-dev/dev/server/app/enkey/route/server-reference-manifest.json new file mode 100644 index 0000000..27a92af --- /dev/null +++ b/.next-dev/dev/server/app/enkey/route/server-reference-manifest.json @@ -0,0 +1,4 @@ +{ + "node": {}, + "edge": {} +} \ No newline at end of file diff --git a/.next-dev/dev/server/app/enkey/route_client-reference-manifest.js b/.next-dev/dev/server/app/enkey/route_client-reference-manifest.js new file mode 100644 index 0000000..242e64a --- /dev/null +++ b/.next-dev/dev/server/app/enkey/route_client-reference-manifest.js @@ -0,0 +1,3 @@ +globalThis.__RSC_MANIFEST = globalThis.__RSC_MANIFEST || {}; +globalThis.__RSC_MANIFEST["/enkey/route"] = {"moduleLoading":{"prefix":""},"clientModules":{},"ssrModuleMapping":{},"edgeSSRModuleMapping":{},"rscModuleMapping":{},"edgeRscModuleMapping":{},"entryCSSFiles":{},"entryJSFiles":{}}; + diff --git a/.next-dev/dev/server/app/h5/chapter-detail/route.js b/.next-dev/dev/server/app/h5/chapter-detail/route.js new file mode 100644 index 0000000..c1b5cdf --- /dev/null +++ b/.next-dev/dev/server/app/h5/chapter-detail/route.js @@ -0,0 +1,6 @@ +var R=require("../../../chunks/[turbopack]_runtime.js")("server/app/h5/chapter-detail/route.js") +R.c("server/chunks/node_modules_next_0fizghk6jc8ls._.js") +R.c("server/chunks/[root-of-the-server]__0a8xmgadn_opt._.js") +R.c("server/chunks/_next-internal_server_app_h5_chapter-detail_route_actions_1xc2wcl27dmcm.js") +R.m("[project]/node_modules/next/dist/esm/build/templates/app-route.js { INNER_APP_ROUTE => \"[project]/src/app/h5/chapter-detail/route.ts [app-route] (ecmascript)\" } [app-route] (ecmascript)") +module.exports=R.m("[project]/node_modules/next/dist/esm/build/templates/app-route.js { INNER_APP_ROUTE => \"[project]/src/app/h5/chapter-detail/route.ts [app-route] (ecmascript)\" } [app-route] (ecmascript)").exports diff --git a/.next-dev/dev/server/app/h5/chapter-detail/route.js.map b/.next-dev/dev/server/app/h5/chapter-detail/route.js.map new file mode 100644 index 0000000..c15d7ec --- /dev/null +++ b/.next-dev/dev/server/app/h5/chapter-detail/route.js.map @@ -0,0 +1,5 @@ +{ + "version": 3, + "sources": [], + "sections": [] +} \ No newline at end of file diff --git a/.next-dev/dev/server/app/h5/chapter-detail/route/app-paths-manifest.json b/.next-dev/dev/server/app/h5/chapter-detail/route/app-paths-manifest.json new file mode 100644 index 0000000..a7133cd --- /dev/null +++ b/.next-dev/dev/server/app/h5/chapter-detail/route/app-paths-manifest.json @@ -0,0 +1,3 @@ +{ + "/h5/chapter-detail/route": "app/h5/chapter-detail/route.js" +} \ No newline at end of file diff --git a/.next-dev/dev/server/app/h5/chapter-detail/route/build-manifest.json b/.next-dev/dev/server/app/h5/chapter-detail/route/build-manifest.json new file mode 100644 index 0000000..f2caaf6 --- /dev/null +++ b/.next-dev/dev/server/app/h5/chapter-detail/route/build-manifest.json @@ -0,0 +1,12 @@ +{ + "devFiles": [], + "ampDevFiles": [], + "polyfillFiles": [], + "lowPriorityFiles": [], + "rootMainFiles": [], + "pages": {}, + "ampFirstPages": [], + "rootMainFilesTree": {}, + "pagesChunkGroupBootstrapParams": {}, + "chunkLoadingGlobal": "TURBOPACK" +} \ No newline at end of file diff --git a/.next-dev/dev/server/app/h5/chapter-detail/route/server-reference-manifest.json b/.next-dev/dev/server/app/h5/chapter-detail/route/server-reference-manifest.json new file mode 100644 index 0000000..27a92af --- /dev/null +++ b/.next-dev/dev/server/app/h5/chapter-detail/route/server-reference-manifest.json @@ -0,0 +1,4 @@ +{ + "node": {}, + "edge": {} +} \ No newline at end of file diff --git a/.next-dev/dev/server/app/h5/chapter-detail/route_client-reference-manifest.js b/.next-dev/dev/server/app/h5/chapter-detail/route_client-reference-manifest.js new file mode 100644 index 0000000..50683a2 --- /dev/null +++ b/.next-dev/dev/server/app/h5/chapter-detail/route_client-reference-manifest.js @@ -0,0 +1,3 @@ +globalThis.__RSC_MANIFEST = globalThis.__RSC_MANIFEST || {}; +globalThis.__RSC_MANIFEST["/h5/chapter-detail/route"] = {"moduleLoading":{"prefix":""},"clientModules":{},"ssrModuleMapping":{},"edgeSSRModuleMapping":{},"rscModuleMapping":{},"edgeRscModuleMapping":{},"entryCSSFiles":{},"entryJSFiles":{}}; + diff --git a/.next-dev/dev/server/app/h5/m3u8/[...path]/route.js b/.next-dev/dev/server/app/h5/m3u8/[...path]/route.js new file mode 100644 index 0000000..e140958 --- /dev/null +++ b/.next-dev/dev/server/app/h5/m3u8/[...path]/route.js @@ -0,0 +1,6 @@ +var R=require("../../../../chunks/[turbopack]_runtime.js")("server/app/h5/m3u8/[...path]/route.js") +R.c("server/chunks/node_modules_next_dist_1ogzfy-d5327p._.js") +R.c("server/chunks/[root-of-the-server]__1dpw5ck2p-gjg._.js") +R.c("server/chunks/_next-internal_server_app_h5_m3u8_[___path]_route_actions_1-5tcp3v1fddu.js") +R.m("[project]/node_modules/next/dist/esm/build/templates/app-route.js { INNER_APP_ROUTE => \"[project]/src/app/h5/m3u8/[...path]/route.ts [app-route] (ecmascript)\" } [app-route] (ecmascript)") +module.exports=R.m("[project]/node_modules/next/dist/esm/build/templates/app-route.js { INNER_APP_ROUTE => \"[project]/src/app/h5/m3u8/[...path]/route.ts [app-route] (ecmascript)\" } [app-route] (ecmascript)").exports diff --git a/.next-dev/dev/server/app/h5/m3u8/[...path]/route.js.map b/.next-dev/dev/server/app/h5/m3u8/[...path]/route.js.map new file mode 100644 index 0000000..c15d7ec --- /dev/null +++ b/.next-dev/dev/server/app/h5/m3u8/[...path]/route.js.map @@ -0,0 +1,5 @@ +{ + "version": 3, + "sources": [], + "sections": [] +} \ No newline at end of file diff --git a/.next-dev/dev/server/app/h5/m3u8/[...path]/route/app-paths-manifest.json b/.next-dev/dev/server/app/h5/m3u8/[...path]/route/app-paths-manifest.json new file mode 100644 index 0000000..827d92d --- /dev/null +++ b/.next-dev/dev/server/app/h5/m3u8/[...path]/route/app-paths-manifest.json @@ -0,0 +1,3 @@ +{ + "/h5/m3u8/[...path]/route": "app/h5/m3u8/[...path]/route.js" +} \ No newline at end of file diff --git a/.next-dev/dev/server/app/h5/m3u8/[...path]/route/build-manifest.json b/.next-dev/dev/server/app/h5/m3u8/[...path]/route/build-manifest.json new file mode 100644 index 0000000..f2caaf6 --- /dev/null +++ b/.next-dev/dev/server/app/h5/m3u8/[...path]/route/build-manifest.json @@ -0,0 +1,12 @@ +{ + "devFiles": [], + "ampDevFiles": [], + "polyfillFiles": [], + "lowPriorityFiles": [], + "rootMainFiles": [], + "pages": {}, + "ampFirstPages": [], + "rootMainFilesTree": {}, + "pagesChunkGroupBootstrapParams": {}, + "chunkLoadingGlobal": "TURBOPACK" +} \ No newline at end of file diff --git a/.next-dev/dev/server/app/h5/m3u8/[...path]/route/server-reference-manifest.json b/.next-dev/dev/server/app/h5/m3u8/[...path]/route/server-reference-manifest.json new file mode 100644 index 0000000..27a92af --- /dev/null +++ b/.next-dev/dev/server/app/h5/m3u8/[...path]/route/server-reference-manifest.json @@ -0,0 +1,4 @@ +{ + "node": {}, + "edge": {} +} \ No newline at end of file diff --git a/.next-dev/dev/server/app/h5/m3u8/[...path]/route_client-reference-manifest.js b/.next-dev/dev/server/app/h5/m3u8/[...path]/route_client-reference-manifest.js new file mode 100644 index 0000000..d8e532c --- /dev/null +++ b/.next-dev/dev/server/app/h5/m3u8/[...path]/route_client-reference-manifest.js @@ -0,0 +1,3 @@ +globalThis.__RSC_MANIFEST = globalThis.__RSC_MANIFEST || {}; +globalThis.__RSC_MANIFEST["/h5/m3u8/[...path]/route"] = {"moduleLoading":{"prefix":""},"clientModules":{},"ssrModuleMapping":{},"edgeSSRModuleMapping":{},"rscModuleMapping":{},"edgeRscModuleMapping":{},"entryCSSFiles":{},"entryJSFiles":{}}; + diff --git a/.next-dev/dev/server/app/home-road/page.js b/.next-dev/dev/server/app/home-road/page.js index ef4e2e0..3c411ae 100644 --- a/.next-dev/dev/server/app/home-road/page.js +++ b/.next-dev/dev/server/app/home-road/page.js @@ -1,5 +1,5 @@ var R=require("../../chunks/ssr/[turbopack]_runtime.js")("server/app/home-road/page.js") -R.c("server/chunks/ssr/[root-of-the-server]__0ippu_ubd11jy._.js") +R.c("server/chunks/ssr/[root-of-the-server]__06u--2ju43-zu._.js") R.c("server/chunks/ssr/node_modules_next_dist_1-4jhhtr3ossi._.js") R.c("server/chunks/ssr/node_modules_next_dist_esm_server_0i519_x_u947b._.js") R.c("server/chunks/ssr/node_modules_next_dist_esm_shared_lib_110_pvnwn9uqh._.js") @@ -8,7 +8,7 @@ R.c("server/chunks/ssr/node_modules_next_dist_esm_0_65u7e78e6h9._.js") R.c("server/chunks/ssr/node_modules_next_dist_compiled_00yj_1pr91zo-._.js") R.c("server/chunks/ssr/node_modules_next_dist_server_route-modules_app-page_0qo_rmcihhsx5._.js") R.c("server/chunks/ssr/[externals]__1cacbhfx2nbuk._.js") -R.c("server/chunks/ssr/[root-of-the-server]__1w0ppiu6oha67._.js") +R.c("server/chunks/ssr/[root-of-the-server]__1r_ycdo5ggf5t._.js") R.c("server/chunks/ssr/node_modules_0n2q5m2nq0yi9._.js") R.c("server/chunks/ssr/src_0hsbhz7n16r_g._.js") R.c("server/chunks/ssr/src_app_not-found_tsx_1863-sqmkh7ny._.js") diff --git a/.next-dev/dev/server/app/home-road/page_client-reference-manifest.js b/.next-dev/dev/server/app/home-road/page_client-reference-manifest.js index fc198dd..f3ee9e2 100644 --- a/.next-dev/dev/server/app/home-road/page_client-reference-manifest.js +++ b/.next-dev/dev/server/app/home-road/page_client-reference-manifest.js @@ -1,3 +1,3 @@ globalThis.__RSC_MANIFEST = globalThis.__RSC_MANIFEST || {}; -globalThis.__RSC_MANIFEST["/home-road/page"] = {"moduleLoading":{"prefix":""},"clientModules":{"[project]/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/client-page.js":{"id":"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/client-segment.js":{"id":"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js":{"id":"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js":{"id":"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/client/script.js":{"id":"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/startup-ad-dialog.tsx":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/entry-route-chrome.tsx":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/header-scroll.tsx":{"id":"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/page-tools.tsx":{"id":"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/client/app-dir/link.js":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/decrypted-image.tsx":{"id":"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/category-link.tsx":{"id":"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/header-search.tsx":{"id":"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/mobile-menu.tsx":{"id":"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/app-download.tsx":{"id":"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/sidebar-toggle.tsx":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/auth/GuestAuthBootstrap.tsx":{"id":"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/startup-ad-source.tsx":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/toast.tsx":{"id":"[project]/src/components/common/toast.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/toast-host.tsx":{"id":"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/ListLoading.tsx":{"id":"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1tt3dkub452cm._.js"],"async":false},"[project]/node_modules/next/dist/client/components/builtin/global-error.js":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/drama/card-tags.tsx":{"id":"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1tt3dkub452cm._.js"],"async":false},"[project]/src/components/ui/pagination.tsx":{"id":"[project]/src/components/ui/pagination.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1tt3dkub452cm._.js"],"async":false},"[project]/src/components/site/copy-button.tsx":{"id":"[project]/src/components/site/copy-button.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1tt3dkub452cm._.js"],"async":false}},"ssrModuleMapping":{"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/layout-router.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-page.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-segment.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/script.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-scroll.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/page-tools.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/decrypted-image.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/category-link.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-search.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/mobile-menu.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/app-download.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/toast.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast-host.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/ListLoading.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_01o-zy3bcl9xl._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_next_dist_client_components_0bew68i643j53._.js"],"async":false}},"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/drama/card-tags.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_01o-zy3bcl9xl._.js"],"async":false}},"[project]/src/components/ui/pagination.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/ui/pagination.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_01o-zy3bcl9xl._.js"],"async":false}},"[project]/src/components/site/copy-button.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/copy-button.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_01o-zy3bcl9xl._.js"],"async":false}}},"edgeSSRModuleMapping":{},"rscModuleMapping":{"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/layout-router.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-page.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-segment.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/script.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-scroll.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/page-tools.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/decrypted-image.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/category-link.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-search.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/mobile-menu.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/app-download.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/toast.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast-host.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/ListLoading.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/drama/card-tags.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/ui/pagination.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/ui/pagination.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/copy-button.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/copy-button.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{},"entryCSSFiles":{"[project]/src/app/layout":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/src/app/loading":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/node_modules/next/dist/client/components/builtin/global-error":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/src/app/home-road/page":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}]},"entryJSFiles":{"[project]/src/app/layout":["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/src/app/loading":["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/node_modules/next/dist/client/components/builtin/global-error":["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/src/app/home-road/page":["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js","static/chunks/src_1tt3dkub452cm._.js"]}}; +globalThis.__RSC_MANIFEST["/home-road/page"] = {"moduleLoading":{"prefix":""},"clientModules":{"[project]/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/client-page.js":{"id":"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/client-segment.js":{"id":"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js":{"id":"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js":{"id":"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/client/script.js":{"id":"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/startup-ad-dialog.tsx":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/entry-route-chrome.tsx":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/header-scroll.tsx":{"id":"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/page-tools.tsx":{"id":"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/client/app-dir/link.js":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/decrypted-image.tsx":{"id":"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/category-link.tsx":{"id":"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/header-search.tsx":{"id":"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/mobile-menu.tsx":{"id":"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/app-download.tsx":{"id":"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/sidebar-toggle.tsx":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/startup-ad-source.tsx":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/toast.tsx":{"id":"[project]/src/components/common/toast.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/toast-host.tsx":{"id":"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/ListLoading.tsx":{"id":"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1tt3dkub452cm._.js"],"async":false},"[project]/node_modules/next/dist/client/components/builtin/global-error.js":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/drama/card-tags.tsx":{"id":"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1tt3dkub452cm._.js"],"async":false},"[project]/src/components/ui/pagination.tsx":{"id":"[project]/src/components/ui/pagination.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1tt3dkub452cm._.js"],"async":false},"[project]/src/components/site/copy-button.tsx":{"id":"[project]/src/components/site/copy-button.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1tt3dkub452cm._.js"],"async":false}},"ssrModuleMapping":{"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/layout-router.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-page.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-segment.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/script.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-scroll.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/page-tools.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/decrypted-image.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/category-link.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-search.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/mobile-menu.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/app-download.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/toast.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast-host.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/ListLoading.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_01o-zy3bcl9xl._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_next_dist_client_components_0bew68i643j53._.js"],"async":false}},"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/drama/card-tags.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_01o-zy3bcl9xl._.js"],"async":false}},"[project]/src/components/ui/pagination.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/ui/pagination.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_01o-zy3bcl9xl._.js"],"async":false}},"[project]/src/components/site/copy-button.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/copy-button.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_01o-zy3bcl9xl._.js"],"async":false}}},"edgeSSRModuleMapping":{},"rscModuleMapping":{"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/layout-router.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-page.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-segment.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/script.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-scroll.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/page-tools.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/decrypted-image.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/category-link.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-search.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/mobile-menu.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/app-download.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/toast.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast-host.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/ListLoading.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/drama/card-tags.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/ui/pagination.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/ui/pagination.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/copy-button.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/copy-button.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{},"entryCSSFiles":{"[project]/src/app/layout":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/src/app/loading":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/node_modules/next/dist/client/components/builtin/global-error":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/src/app/home-road/page":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}]},"entryJSFiles":{"[project]/src/app/layout":["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/src/app/loading":["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/node_modules/next/dist/client/components/builtin/global-error":["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/src/app/home-road/page":["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js","static/chunks/src_1tt3dkub452cm._.js"]}}; diff --git a/.next-dev/dev/server/app/page.js b/.next-dev/dev/server/app/page.js index e9dfd28..063514f 100644 --- a/.next-dev/dev/server/app/page.js +++ b/.next-dev/dev/server/app/page.js @@ -1,5 +1,5 @@ var R=require("../chunks/ssr/[turbopack]_runtime.js")("server/app/page.js") -R.c("server/chunks/ssr/[root-of-the-server]__039oh1dcvo4v2._.js") +R.c("server/chunks/ssr/[root-of-the-server]__067m3twdyxcop._.js") R.c("server/chunks/ssr/node_modules_next_dist_087ejwjk1qamh._.js") R.c("server/chunks/ssr/node_modules_next_dist_esm_server_0i519_x_u947b._.js") R.c("server/chunks/ssr/node_modules_next_dist_esm_shared_lib_110_pvnwn9uqh._.js") @@ -8,7 +8,7 @@ R.c("server/chunks/ssr/node_modules_next_dist_esm_0_65u7e78e6h9._.js") R.c("server/chunks/ssr/node_modules_next_dist_compiled_00yj_1pr91zo-._.js") R.c("server/chunks/ssr/node_modules_next_dist_server_route-modules_app-page_0qo_rmcihhsx5._.js") R.c("server/chunks/ssr/[externals]__1cacbhfx2nbuk._.js") -R.c("server/chunks/ssr/[root-of-the-server]__1w0ppiu6oha67._.js") +R.c("server/chunks/ssr/[root-of-the-server]__1r_ycdo5ggf5t._.js") R.c("server/chunks/ssr/node_modules_0n2q5m2nq0yi9._.js") R.c("server/chunks/ssr/src_0hsbhz7n16r_g._.js") R.c("server/chunks/ssr/src_app_not-found_tsx_1863-sqmkh7ny._.js") diff --git a/.next-dev/dev/server/app/page_client-reference-manifest.js b/.next-dev/dev/server/app/page_client-reference-manifest.js index 9a5baf0..489e770 100644 --- a/.next-dev/dev/server/app/page_client-reference-manifest.js +++ b/.next-dev/dev/server/app/page_client-reference-manifest.js @@ -1,3 +1,3 @@ globalThis.__RSC_MANIFEST = globalThis.__RSC_MANIFEST || {}; -globalThis.__RSC_MANIFEST["/page"] = {"moduleLoading":{"prefix":""},"clientModules":{"[project]/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/client-page.js":{"id":"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/client-segment.js":{"id":"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js":{"id":"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js":{"id":"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/client/script.js":{"id":"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/startup-ad-dialog.tsx":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/entry-route-chrome.tsx":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/header-scroll.tsx":{"id":"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/page-tools.tsx":{"id":"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/client/app-dir/link.js":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/decrypted-image.tsx":{"id":"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/category-link.tsx":{"id":"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/header-search.tsx":{"id":"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/mobile-menu.tsx":{"id":"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/app-download.tsx":{"id":"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/sidebar-toggle.tsx":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/auth/GuestAuthBootstrap.tsx":{"id":"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/startup-ad-source.tsx":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/toast.tsx":{"id":"[project]/src/components/common/toast.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/toast-host.tsx":{"id":"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/ListLoading.tsx":{"id":"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1-8qwjw2nq0gn._.js"],"async":false},"[project]/node_modules/next/dist/client/components/builtin/global-error.js":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/drama/card-tags.tsx":{"id":"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1-8qwjw2nq0gn._.js"],"async":false},"[project]/src/components/home/home-hero.tsx":{"id":"[project]/src/components/home/home-hero.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1-8qwjw2nq0gn._.js"],"async":false},"[project]/src/components/home/ranking-rail.tsx":{"id":"[project]/src/components/home/ranking-rail.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1-8qwjw2nq0gn._.js"],"async":false},"[project]/src/components/site/home-flag.tsx":{"id":"[project]/src/components/site/home-flag.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1-8qwjw2nq0gn._.js"],"async":false},"[project]/src/components/common/promo-marquee.tsx":{"id":"[project]/src/components/common/promo-marquee.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1-8qwjw2nq0gn._.js"],"async":false}},"ssrModuleMapping":{"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/layout-router.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-page.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-segment.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/script.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-scroll.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/page-tools.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/decrypted-image.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/category-link.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-search.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/mobile-menu.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/app-download.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/toast.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast-host.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/ListLoading.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_1dzy-lymwnms1._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_next_dist_client_components_0bew68i643j53._.js"],"async":false}},"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/drama/card-tags.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_1dzy-lymwnms1._.js"],"async":false}},"[project]/src/components/home/home-hero.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/home/home-hero.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_1dzy-lymwnms1._.js"],"async":false}},"[project]/src/components/home/ranking-rail.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/home/ranking-rail.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_1dzy-lymwnms1._.js"],"async":false}},"[project]/src/components/site/home-flag.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/home-flag.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_1dzy-lymwnms1._.js"],"async":false}},"[project]/src/components/common/promo-marquee.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/promo-marquee.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_1dzy-lymwnms1._.js"],"async":false}}},"edgeSSRModuleMapping":{},"rscModuleMapping":{"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/layout-router.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-page.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-segment.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/script.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-scroll.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/page-tools.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/decrypted-image.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/category-link.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-search.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/mobile-menu.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/app-download.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/toast.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast-host.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/ListLoading.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/drama/card-tags.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/home/home-hero.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/home/home-hero.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/home/ranking-rail.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/home/ranking-rail.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/home-flag.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/home-flag.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/promo-marquee.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/promo-marquee.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{},"entryCSSFiles":{"[project]/src/app/layout":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/src/app/loading":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/node_modules/next/dist/client/components/builtin/global-error":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/src/app/page":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}]},"entryJSFiles":{"[project]/src/app/layout":["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/src/app/loading":["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/node_modules/next/dist/client/components/builtin/global-error":["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/src/app/page":["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js","static/chunks/src_1-8qwjw2nq0gn._.js"]}}; +globalThis.__RSC_MANIFEST["/page"] = {"moduleLoading":{"prefix":""},"clientModules":{"[project]/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/client-page.js":{"id":"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/client-segment.js":{"id":"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js":{"id":"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js":{"id":"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/client/script.js":{"id":"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/startup-ad-dialog.tsx":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/entry-route-chrome.tsx":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/header-scroll.tsx":{"id":"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/page-tools.tsx":{"id":"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/client/app-dir/link.js":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/decrypted-image.tsx":{"id":"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/category-link.tsx":{"id":"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/header-search.tsx":{"id":"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/mobile-menu.tsx":{"id":"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/app-download.tsx":{"id":"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/sidebar-toggle.tsx":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/startup-ad-source.tsx":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/toast.tsx":{"id":"[project]/src/components/common/toast.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/toast-host.tsx":{"id":"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/ListLoading.tsx":{"id":"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1-8qwjw2nq0gn._.js"],"async":false},"[project]/node_modules/next/dist/client/components/builtin/global-error.js":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/drama/card-tags.tsx":{"id":"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1-8qwjw2nq0gn._.js"],"async":false},"[project]/src/components/home/home-hero.tsx":{"id":"[project]/src/components/home/home-hero.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1-8qwjw2nq0gn._.js"],"async":false},"[project]/src/components/home/ranking-rail.tsx":{"id":"[project]/src/components/home/ranking-rail.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1-8qwjw2nq0gn._.js"],"async":false},"[project]/src/components/site/home-flag.tsx":{"id":"[project]/src/components/site/home-flag.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1-8qwjw2nq0gn._.js"],"async":false},"[project]/src/components/common/promo-marquee.tsx":{"id":"[project]/src/components/common/promo-marquee.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1-8qwjw2nq0gn._.js"],"async":false}},"ssrModuleMapping":{"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/layout-router.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-page.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-segment.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/script.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-scroll.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/page-tools.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/decrypted-image.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/category-link.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-search.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/mobile-menu.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/app-download.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/toast.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast-host.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/ListLoading.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_1dzy-lymwnms1._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_next_dist_client_components_0bew68i643j53._.js"],"async":false}},"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/drama/card-tags.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_1dzy-lymwnms1._.js"],"async":false}},"[project]/src/components/home/home-hero.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/home/home-hero.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_1dzy-lymwnms1._.js"],"async":false}},"[project]/src/components/home/ranking-rail.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/home/ranking-rail.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_1dzy-lymwnms1._.js"],"async":false}},"[project]/src/components/site/home-flag.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/home-flag.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_1dzy-lymwnms1._.js"],"async":false}},"[project]/src/components/common/promo-marquee.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/promo-marquee.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_1dzy-lymwnms1._.js"],"async":false}}},"edgeSSRModuleMapping":{},"rscModuleMapping":{"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/layout-router.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-page.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-segment.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/script.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-scroll.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/page-tools.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/decrypted-image.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/category-link.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-search.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/mobile-menu.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/app-download.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/toast.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast-host.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/ListLoading.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/drama/card-tags.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/home/home-hero.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/home/home-hero.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/home/ranking-rail.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/home/ranking-rail.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/home-flag.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/home-flag.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/promo-marquee.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/promo-marquee.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{},"entryCSSFiles":{"[project]/src/app/layout":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/src/app/loading":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/node_modules/next/dist/client/components/builtin/global-error":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/src/app/page":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}]},"entryJSFiles":{"[project]/src/app/layout":["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/src/app/loading":["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/node_modules/next/dist/client/components/builtin/global-error":["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/src/app/page":["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js","static/chunks/src_1-8qwjw2nq0gn._.js"]}}; diff --git a/.next-dev/dev/server/app/play/[id]/[episode]/page.js b/.next-dev/dev/server/app/play/[id]/[episode]/page.js index 01250e0..3e50ead 100644 --- a/.next-dev/dev/server/app/play/[id]/[episode]/page.js +++ b/.next-dev/dev/server/app/play/[id]/[episode]/page.js @@ -1,5 +1,5 @@ var R=require("../../../../chunks/ssr/[turbopack]_runtime.js")("server/app/play/[id]/[episode]/page.js") -R.c("server/chunks/ssr/[root-of-the-server]__0zbexg5uovxbr._.js") +R.c("server/chunks/ssr/[root-of-the-server]__1trcdg5d06d62._.js") R.c("server/chunks/ssr/node_modules_next_dist_091c9w7_pnh6a._.js") R.c("server/chunks/ssr/node_modules_next_dist_esm_server_0i519_x_u947b._.js") R.c("server/chunks/ssr/node_modules_next_dist_esm_shared_lib_110_pvnwn9uqh._.js") @@ -8,7 +8,7 @@ R.c("server/chunks/ssr/node_modules_next_dist_esm_0_65u7e78e6h9._.js") R.c("server/chunks/ssr/node_modules_next_dist_compiled_00yj_1pr91zo-._.js") R.c("server/chunks/ssr/node_modules_next_dist_server_route-modules_app-page_0qo_rmcihhsx5._.js") R.c("server/chunks/ssr/[externals]__1cacbhfx2nbuk._.js") -R.c("server/chunks/ssr/[root-of-the-server]__1w0ppiu6oha67._.js") +R.c("server/chunks/ssr/[root-of-the-server]__1r_ycdo5ggf5t._.js") R.c("server/chunks/ssr/node_modules_0n2q5m2nq0yi9._.js") R.c("server/chunks/ssr/src_0hsbhz7n16r_g._.js") R.c("server/chunks/ssr/src_app_not-found_tsx_1863-sqmkh7ny._.js") diff --git a/.next-dev/dev/server/app/play/[id]/[episode]/page_client-reference-manifest.js b/.next-dev/dev/server/app/play/[id]/[episode]/page_client-reference-manifest.js index 4a8c79c..45cd6ae 100644 --- a/.next-dev/dev/server/app/play/[id]/[episode]/page_client-reference-manifest.js +++ b/.next-dev/dev/server/app/play/[id]/[episode]/page_client-reference-manifest.js @@ -1,3 +1,3 @@ globalThis.__RSC_MANIFEST = globalThis.__RSC_MANIFEST || {}; -globalThis.__RSC_MANIFEST["/play/[id]/[episode]/page"] = {"moduleLoading":{"prefix":""},"clientModules":{"[project]/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/client-page.js":{"id":"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/client-segment.js":{"id":"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js":{"id":"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js":{"id":"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/client/script.js":{"id":"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/startup-ad-dialog.tsx":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/entry-route-chrome.tsx":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/header-scroll.tsx":{"id":"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/page-tools.tsx":{"id":"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/client/app-dir/link.js":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/decrypted-image.tsx":{"id":"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/category-link.tsx":{"id":"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/header-search.tsx":{"id":"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/mobile-menu.tsx":{"id":"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/app-download.tsx":{"id":"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/sidebar-toggle.tsx":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/auth/GuestAuthBootstrap.tsx":{"id":"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/startup-ad-source.tsx":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/toast.tsx":{"id":"[project]/src/components/common/toast.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/toast-host.tsx":{"id":"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/ListLoading.tsx":{"id":"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1wppmbwp-_2wc._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/node_modules/next/dist/client/components/builtin/global-error.js":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/drama/card-tags.tsx":{"id":"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1wppmbwp-_2wc._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/src/components/play/EpisodeBoard.tsx":{"id":"[project]/src/components/play/EpisodeBoard.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1wppmbwp-_2wc._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/src/components/play/play-detail-actions.tsx":{"id":"[project]/src/components/play/play-detail-actions.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1wppmbwp-_2wc._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/src/components/play/PlayScreen.tsx":{"id":"[project]/src/components/play/PlayScreen.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1wppmbwp-_2wc._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/src/components/play/series-description.tsx":{"id":"[project]/src/components/play/series-description.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1wppmbwp-_2wc._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/src/components/common/promo-marquee.tsx":{"id":"[project]/src/components/common/promo-marquee.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1wppmbwp-_2wc._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false}},"ssrModuleMapping":{"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/layout-router.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-page.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-segment.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/script.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-scroll.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/page-tools.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/decrypted-image.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/category-link.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-search.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/mobile-menu.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/app-download.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/toast.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast-host.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/ListLoading.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_1d_32-15nuhuo._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_next_dist_client_components_0bew68i643j53._.js"],"async":false}},"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/drama/card-tags.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_1d_32-15nuhuo._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/src/components/play/EpisodeBoard.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/EpisodeBoard.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_1d_32-15nuhuo._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/src/components/play/play-detail-actions.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/play-detail-actions.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_1d_32-15nuhuo._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/src/components/play/PlayScreen.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/PlayScreen.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_1d_32-15nuhuo._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/src/components/play/series-description.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/series-description.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_1d_32-15nuhuo._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/src/components/common/promo-marquee.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/promo-marquee.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_1d_32-15nuhuo._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}}},"edgeSSRModuleMapping":{},"rscModuleMapping":{"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/layout-router.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-page.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-segment.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/script.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-scroll.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/page-tools.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/decrypted-image.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/category-link.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-search.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/mobile-menu.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/app-download.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/toast.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast-host.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/ListLoading.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/drama/card-tags.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/play/EpisodeBoard.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/EpisodeBoard.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/play/play-detail-actions.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/play-detail-actions.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/play/PlayScreen.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/PlayScreen.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/play/series-description.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/series-description.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/promo-marquee.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/promo-marquee.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{},"entryCSSFiles":{"[project]/src/app/layout":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/src/app/loading":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/node_modules/next/dist/client/components/builtin/global-error":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/src/app/play/[id]/[episode]/page":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false},{"path":"static/chunks/node_modules_xgplayer_dist_index_min_css_133k4e2i_djjm.css","inlined":false}]},"entryJSFiles":{"[project]/src/app/layout":["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/src/app/loading":["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/node_modules/next/dist/client/components/builtin/global-error":["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/src/app/play/[id]/[episode]/page":["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js","static/chunks/node_modules_1wppmbwp-_2wc._.js","static/chunks/src_1f3ifnztulvuh._.js"]}}; +globalThis.__RSC_MANIFEST["/play/[id]/[episode]/page"] = {"moduleLoading":{"prefix":""},"clientModules":{"[project]/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/client-page.js":{"id":"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/client-segment.js":{"id":"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js":{"id":"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js":{"id":"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/client/script.js":{"id":"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/startup-ad-dialog.tsx":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/entry-route-chrome.tsx":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/header-scroll.tsx":{"id":"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/page-tools.tsx":{"id":"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/client/app-dir/link.js":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/decrypted-image.tsx":{"id":"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/category-link.tsx":{"id":"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/header-search.tsx":{"id":"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/mobile-menu.tsx":{"id":"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/app-download.tsx":{"id":"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/sidebar-toggle.tsx":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/startup-ad-source.tsx":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/toast.tsx":{"id":"[project]/src/components/common/toast.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/toast-host.tsx":{"id":"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/ListLoading.tsx":{"id":"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1krh5f60-_0ky._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/node_modules/next/dist/client/components/builtin/global-error.js":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/drama/card-tags.tsx":{"id":"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1krh5f60-_0ky._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/src/components/play/EpisodeBoard.tsx":{"id":"[project]/src/components/play/EpisodeBoard.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1krh5f60-_0ky._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/src/components/play/play-detail-actions.tsx":{"id":"[project]/src/components/play/play-detail-actions.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1krh5f60-_0ky._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/src/components/play/PlayScreen.tsx":{"id":"[project]/src/components/play/PlayScreen.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1krh5f60-_0ky._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/src/components/play/series-description.tsx":{"id":"[project]/src/components/play/series-description.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1krh5f60-_0ky._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false},"[project]/src/components/common/promo-marquee.tsx":{"id":"[project]/src/components/common/promo-marquee.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/node_modules_1krh5f60-_0ky._.js","/_next/static/chunks/src_1f3ifnztulvuh._.js"],"async":false}},"ssrModuleMapping":{"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/layout-router.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-page.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-segment.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/script.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-scroll.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/page-tools.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/decrypted-image.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/category-link.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-search.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/mobile-menu.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/app-download.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/toast.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast-host.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/ListLoading.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_0odgv2cb044f3._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_next_dist_client_components_0bew68i643j53._.js"],"async":false}},"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/drama/card-tags.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_0odgv2cb044f3._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/src/components/play/EpisodeBoard.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/EpisodeBoard.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_0odgv2cb044f3._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/src/components/play/play-detail-actions.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/play-detail-actions.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_0odgv2cb044f3._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/src/components/play/PlayScreen.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/PlayScreen.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_0odgv2cb044f3._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/src/components/play/series-description.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/series-description.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_0odgv2cb044f3._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}},"[project]/src/components/common/promo-marquee.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/promo-marquee.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_0odgv2cb044f3._.js","server/chunks/ssr/[root-of-the-server]__0t47jqfm83lyl._.js"],"async":false}}},"edgeSSRModuleMapping":{},"rscModuleMapping":{"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/layout-router.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-page.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-segment.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/script.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-scroll.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/page-tools.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/decrypted-image.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/category-link.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-search.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/mobile-menu.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/app-download.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/toast.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast-host.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/ListLoading.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/drama/card-tags.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/play/EpisodeBoard.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/EpisodeBoard.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/play/play-detail-actions.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/play-detail-actions.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/play/PlayScreen.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/PlayScreen.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/play/series-description.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/play/series-description.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/promo-marquee.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/promo-marquee.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{},"entryCSSFiles":{"[project]/src/app/layout":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/src/app/loading":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/node_modules/next/dist/client/components/builtin/global-error":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/src/app/play/[id]/[episode]/page":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false},{"path":"static/chunks/node_modules_xgplayer_dist_index_min_css_133k4e2i_djjm.css","inlined":false}]},"entryJSFiles":{"[project]/src/app/layout":["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/src/app/loading":["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/node_modules/next/dist/client/components/builtin/global-error":["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/src/app/play/[id]/[episode]/page":["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js","static/chunks/node_modules_1krh5f60-_0ky._.js","static/chunks/src_1f3ifnztulvuh._.js"]}}; diff --git a/.next-dev/dev/server/app/search/[[...parts]]/page.js b/.next-dev/dev/server/app/search/[[...parts]]/page.js index a5d3874..6ffafc0 100644 --- a/.next-dev/dev/server/app/search/[[...parts]]/page.js +++ b/.next-dev/dev/server/app/search/[[...parts]]/page.js @@ -1,5 +1,5 @@ var R=require("../../../chunks/ssr/[turbopack]_runtime.js")("server/app/search/[[...parts]]/page.js") -R.c("server/chunks/ssr/[root-of-the-server]__1p78lu1ompxz4._.js") +R.c("server/chunks/ssr/[root-of-the-server]__1ao6i5v9mu7h2._.js") R.c("server/chunks/ssr/node_modules_next_dist_1041i6l4sgy8u._.js") R.c("server/chunks/ssr/node_modules_next_dist_esm_server_0i519_x_u947b._.js") R.c("server/chunks/ssr/node_modules_next_dist_esm_shared_lib_110_pvnwn9uqh._.js") @@ -8,7 +8,7 @@ R.c("server/chunks/ssr/node_modules_next_dist_esm_0_65u7e78e6h9._.js") R.c("server/chunks/ssr/node_modules_next_dist_compiled_00yj_1pr91zo-._.js") R.c("server/chunks/ssr/node_modules_next_dist_server_route-modules_app-page_0qo_rmcihhsx5._.js") R.c("server/chunks/ssr/[externals]__1cacbhfx2nbuk._.js") -R.c("server/chunks/ssr/[root-of-the-server]__1w0ppiu6oha67._.js") +R.c("server/chunks/ssr/[root-of-the-server]__1r_ycdo5ggf5t._.js") R.c("server/chunks/ssr/node_modules_0n2q5m2nq0yi9._.js") R.c("server/chunks/ssr/src_0hsbhz7n16r_g._.js") R.c("server/chunks/ssr/src_app_not-found_tsx_1863-sqmkh7ny._.js") diff --git a/.next-dev/dev/server/app/search/[[...parts]]/page_client-reference-manifest.js b/.next-dev/dev/server/app/search/[[...parts]]/page_client-reference-manifest.js index 964e59d..8e1342a 100644 --- a/.next-dev/dev/server/app/search/[[...parts]]/page_client-reference-manifest.js +++ b/.next-dev/dev/server/app/search/[[...parts]]/page_client-reference-manifest.js @@ -1,3 +1,3 @@ globalThis.__RSC_MANIFEST = globalThis.__RSC_MANIFEST || {}; -globalThis.__RSC_MANIFEST["/search/[[...parts]]/page"] = {"moduleLoading":{"prefix":""},"clientModules":{"[project]/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/client-page.js":{"id":"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/client-segment.js":{"id":"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js":{"id":"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js":{"id":"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/client/script.js":{"id":"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/startup-ad-dialog.tsx":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/entry-route-chrome.tsx":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/header-scroll.tsx":{"id":"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/page-tools.tsx":{"id":"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/client/app-dir/link.js":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/decrypted-image.tsx":{"id":"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/category-link.tsx":{"id":"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/header-search.tsx":{"id":"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/mobile-menu.tsx":{"id":"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/app-download.tsx":{"id":"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/sidebar-toggle.tsx":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/auth/GuestAuthBootstrap.tsx":{"id":"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/startup-ad-source.tsx":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/toast.tsx":{"id":"[project]/src/components/common/toast.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/toast-host.tsx":{"id":"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/ListLoading.tsx":{"id":"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1tm80q5b-38hs._.js"],"async":false},"[project]/node_modules/next/dist/client/components/builtin/global-error.js":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/drama/card-tags.tsx":{"id":"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1tm80q5b-38hs._.js"],"async":false},"[project]/src/components/ui/pagination.tsx":{"id":"[project]/src/components/ui/pagination.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_1fapn5h3r0s0-._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1tm80q5b-38hs._.js"],"async":false}},"ssrModuleMapping":{"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/layout-router.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-page.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-segment.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/script.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-scroll.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/page-tools.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/decrypted-image.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/category-link.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-search.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/mobile-menu.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/app-download.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/toast.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast-host.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/ListLoading.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_1agjn3iaq0dpm._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_next_dist_client_components_0bew68i643j53._.js"],"async":false}},"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/drama/card-tags.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_1agjn3iaq0dpm._.js"],"async":false}},"[project]/src/components/ui/pagination.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/ui/pagination.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1itc4lovz7vlz._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_1agjn3iaq0dpm._.js"],"async":false}}},"edgeSSRModuleMapping":{},"rscModuleMapping":{"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/layout-router.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-page.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-segment.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/script.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-scroll.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/page-tools.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/decrypted-image.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/category-link.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-search.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/mobile-menu.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/app-download.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/auth/GuestAuthBootstrap.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/toast.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast-host.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/ListLoading.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/drama/card-tags.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/ui/pagination.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/ui/pagination.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{},"entryCSSFiles":{"[project]/src/app/layout":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/src/app/loading":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/node_modules/next/dist/client/components/builtin/global-error":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/src/app/search/[[...parts]]/page":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}]},"entryJSFiles":{"[project]/src/app/layout":["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/src/app/loading":["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/node_modules/next/dist/client/components/builtin/global-error":["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/src/app/search/[[...parts]]/page":["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js","static/chunks/src_1tm80q5b-38hs._.js"]}}; +globalThis.__RSC_MANIFEST["/search/[[...parts]]/page"] = {"moduleLoading":{"prefix":""},"clientModules":{"[project]/node_modules/next/dist/esm/client/components/layout-router.js":{"id":"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/client-page.js":{"id":"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/client-segment.js":{"id":"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js":{"id":"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js":{"id":"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/client/script.js":{"id":"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/startup-ad-dialog.tsx":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/entry-route-chrome.tsx":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/header-scroll.tsx":{"id":"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/page-tools.tsx":{"id":"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/node_modules/next/dist/client/app-dir/link.js":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/decrypted-image.tsx":{"id":"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/category-link.tsx":{"id":"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/header-search.tsx":{"id":"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/mobile-menu.tsx":{"id":"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/app-download.tsx":{"id":"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/site/sidebar-toggle.tsx":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/startup-ad-source.tsx":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/toast.tsx":{"id":"[project]/src/components/common/toast.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/toast-host.tsx":{"id":"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/common/ListLoading.tsx":{"id":"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1tm80q5b-38hs._.js"],"async":false},"[project]/node_modules/next/dist/client/components/builtin/global-error.js":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js"],"async":false},"[project]/src/components/drama/card-tags.tsx":{"id":"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1tm80q5b-38hs._.js"],"async":false},"[project]/src/components/ui/pagination.tsx":{"id":"[project]/src/components/ui/pagination.tsx [app-client] (ecmascript)","name":"*","chunks":["/_next/static/chunks/src_03nh1ny_1upyk._.js","/_next/static/chunks/node_modules_1mqpzaajz52kk._.js","/_next/static/chunks/src_1tm80q5b-38hs._.js"],"async":false}},"ssrModuleMapping":{"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/layout-router.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-page.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-segment.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/script.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-scroll.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/page-tools.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/decrypted-image.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/category-link.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-search.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/mobile-menu.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/app-download.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/toast.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast-host.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js"],"async":false}},"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/ListLoading.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_1agjn3iaq0dpm._.js"],"async":false}},"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/node_modules_next_dist_client_components_0bew68i643j53._.js"],"async":false}},"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/drama/card-tags.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_1agjn3iaq0dpm._.js"],"async":false}},"[project]/src/components/ui/pagination.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/ui/pagination.tsx [app-ssr] (ecmascript)","name":"*","chunks":["server/chunks/ssr/[root-of-the-server]__1k0t32pw8gt08._.js","server/chunks/ssr/node_modules_next_dist_server_0leter8dei-0j._.js","server/chunks/ssr/node_modules_next_dist_client_1a1oq1io3hw7y._.js","server/chunks/ssr/node_modules_next_dist_esm_client_05u9qnbj7nunx._.js","server/chunks/ssr/node_modules_next_dist_esm_server_0b6z-0s2aj0ab._.js","server/chunks/ssr/node_modules_next_dist_esm_138y36z21vxe9._.js","server/chunks/ssr/node_modules_next_dist_1gcc95q5ayma1._.js","server/chunks/ssr/node_modules_next_navigation_0frorwwrai-2z.js","server/chunks/ssr/node_modules_tailwind-variants_dist_0wo__vv6ph-1p._.js","server/chunks/ssr/node_modules_react-aria_dist_private_1laump7hirt64._.js","server/chunks/ssr/node_modules_@heroui_react_dist_030whmzx827ef._.js","server/chunks/ssr/node_modules_219qrqpwjby0w._.js","server/chunks/ssr/src_1agjn3iaq0dpm._.js"],"async":false}}},"edgeSSRModuleMapping":{},"rscModuleMapping":{"[project]/node_modules/next/dist/client/components/layout-router.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/layout-router.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/render-from-template-context.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/render-from-template-context.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/client-page.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-page.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/client-segment.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/client-segment.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/lib/framework/boundary-components.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/framework/boundary-components.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/lib/metadata/generate/icon-mark.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/instant-validation/boundary.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/client/components/instant-validation/boundary.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/esm/next-devtools/userspace/app/segment-explorer-node.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/script.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/script.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-dialog.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/entry-route-chrome.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-scroll.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/page-tools.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/app-dir/link.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/decrypted-image.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/category-link.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/header-search.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/mobile-menu.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/app-download.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/site/sidebar-toggle.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/startup-ad-source.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/toast.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/toast-host.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/common/ListLoading.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-client] (ecmascript)":{"*":{"id":"[project]/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/drama/card-tags.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/drama/card-tags.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}},"[project]/src/components/ui/pagination.tsx [app-client] (ecmascript)":{"*":{"id":"[project]/src/components/ui/pagination.tsx [app-rsc] (client reference proxy)","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{},"entryCSSFiles":{"[project]/src/app/layout":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/src/app/loading":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/node_modules/next/dist/client/components/builtin/global-error":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}],"[project]/src/app/search/[[...parts]]/page":[{"path":"static/chunks/src_1hgxmgbnmdhh-._.css","inlined":false}]},"entryJSFiles":{"[project]/src/app/layout":["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/src/app/loading":["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/node_modules/next/dist/client/components/builtin/global-error":["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js"],"[project]/src/app/search/[[...parts]]/page":["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js","static/chunks/src_1tm80q5b-38hs._.js"]}}; diff --git a/.next-dev/dev/server/chunks/[root-of-the-server]__0a8xmgadn_opt._.js b/.next-dev/dev/server/chunks/[root-of-the-server]__0a8xmgadn_opt._.js new file mode 100644 index 0000000..e85ef53 --- /dev/null +++ b/.next-dev/dev/server/chunks/[root-of-the-server]__0a8xmgadn_opt._.js @@ -0,0 +1,570 @@ +module.exports = [ +(()=>{"use strict";return[ +"[project]/src/app/h5/chapter-detail/route.ts [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "GET", + ()=>GET +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/server.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2d$headers$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/client-headers.ts [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/server-fetch.ts [app-route] (ecmascript)"); +; +; +; +async function GET(request) { + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["connection"])(); + const incoming = new URL(request.url); + const chapterId = incoming.searchParams.get("chapterId")?.trim() || ""; + if (!chapterId) { + return Response.json({ + code: 1001, + data: null, + tip: "缺少剧集 chapterId", + msg: "", + hash: false + }, { + status: 200, + headers: { + "cache-control": "no-store" + } + }); + } + const query = new URLSearchParams({ + chapterId + }); + const playletSlug = incoming.searchParams.get("playletSlug")?.trim(); + const playletId = incoming.searchParams.get("playletId")?.trim(); + if (playletSlug) query.set("playletSlug", playletSlug); + else if (playletId) query.set("playletId", playletId); + const path = `/api/app/playlet/chapter/detail?${query}`; + try { + const data = await fetchChapterForPlay(path, request); + return Response.json({ + code: 200, + data, + tip: "成功", + msg: "", + hash: false + }, { + status: 200, + headers: { + "cache-control": "no-store" + } + }); + } catch (error) { + const tip = error instanceof Error ? error.message : "剧集详情加载失败"; + return Response.json({ + code: 500, + data: null, + tip, + msg: "", + hash: false + }, { + status: 200, + headers: { + "cache-control": "no-store" + } + }); + } +} +async function fetchChapterForPlay(pathWithQuery, request) { + const internal = process.env.API_INTERNAL_ORIGIN?.trim().replace(/\/$/, ""); + const ticketXff = process.env.MEDIA_TICKET_FORWARDED_FOR?.trim(); + // 测试/预发:直连本机 Go,并用出站公网 IP 作为 XFF,与 /enkey 同源。 + if (internal && ticketXff) { + const headers = { + Accept: "application/json", + ...(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2d$headers$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["clientHeaders"])(request.headers), + "X-Forwarded-For": ticketXff, + "X-Real-IP": ticketXff + }; + const response = await fetch(`${internal}${pathWithQuery}`, { + headers, + cache: "no-store", + signal: AbortSignal.timeout(10_000) + }); + const text = await response.text(); + let payload = null; + try { + payload = text ? JSON.parse(text) : null; + } catch { + payload = null; + } + if (!payload || typeof payload.code !== "number") { + throw new Error(response.ok ? "接口响应格式异常" : `接口暂时不可用 (${response.status})`); + } + if (!response.ok || payload.code !== 200) { + throw new Error(payload.tip || payload.msg || "请求失败"); + } + return payload.data; + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["serverFetchJson"])(pathWithQuery, { + maxAttempts: 2, + timeoutMs: 10_000, + revalidate: 0 + }); +} +}), +"[project]/src/lib/api/client-headers.ts [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "buildBrowserApiHeaders", + ()=>buildBrowserApiHeaders, + "clientHeaders", + ()=>clientHeaders, + "clientIp", + ()=>clientIp +]); +const APP_VER = ("TURBOPACK compile-time value", "1.0.0")?.trim() || "1.0.0"; +function clean(value) { + return value.replace(/[^\x20-\x7E]|[;=]/g, " ").trim(); +} +/** 不依赖 node:net,避免被浏览器端打包。 */ function isIP(value) { + if (/^(?:\d{1,3}\.){3}\d{1,3}$/.test(value)) { + return value.split(".").every((part)=>{ + const n = Number(part); + return String(n) === part && n >= 0 && n <= 255; + }); + } + // 宽松校验 IPv6,够用来转发 X-Real-IP。 + return value.includes(":") && /^[0-9a-fA-F:.]+$/.test(value); +} +function sysType(ua) { + const value = ua.toLowerCase(); + if (value.includes("android")) return "h5_android"; + if (value.includes("iphone") || value.includes("ipad") || value.includes("ipod")) return "h5_ios"; + return "h5_pc"; +} +function guessAndroidBrand(model, ua) { + const value = `${model} ${ua}`; + const brands = [ + [ + /Build\/HONOR|\bHONOR\b/i, + "Honor" + ], + [ + /Build\/HUAWEI|HUAWEI|HW-/i, + "Huawei" + ], + [ + /SM-|samsung|Galaxy/i, + "Samsung" + ], + [ + /Pixel/i, + "Google" + ], + [ + /Redmi|POCO|XiaoMi|\bMi\b/i, + "Xiaomi" + ], + [ + /OPPO|\bCPH\d{3,4}/i, + "OPPO" + ], + [ + /vivo|\bV\d{4}/i, + "vivo" + ], + [ + /OnePlus|ONEPLUS/i, + "OnePlus" + ], + [ + /realme|\bRMX\d{3,4}/i, + "realme" + ] + ]; + return brands.find(([pattern])=>pattern.test(value))?.[1] || ""; +} +function parseBrowser(ua) { + const edge = ua.match(/Edg\/([\d.]+)/i); + if (edge) return `Edge ${edge[1]}`; + const opera = ua.match(/(?:OPR|Opera)\/([\d.]+)/i); + if (opera) return `Opera ${opera[1]}`; + const chrome = ua.match(/Chrome\/([\d.]+)/i); + if (chrome && !/Edg\//i.test(ua)) return `Chrome ${chrome[1]}`; + const safari = ua.match(/Version\/([\d.]+).*Safari/i); + if (safari) return `Safari ${safari[1]}`; + const firefox = ua.match(/Firefox\/([\d.]+)/i); + if (firefox) return `Firefox ${firefox[1]}`; + const ie = ua.match(/(?:MSIE\s|Trident.*rv:)([\d.]+)/i); + if (ie) return `IE ${ie[1]}`; + return ""; +} +/** 从浏览器 User-Agent 解析设备公共字段,口径对齐 jha-1040 useragent.ParseDeviceFromUA。 */ function parseDeviceFromUA(ua) { + const raw = ua.trim(); + let deviceBrand = ""; + let deviceModel = ""; + let deviceType = "desktop"; + let systemName = "Other"; + let systemVersion = ""; + if (/iPhone|iPad|iPod/i.test(raw)) { + systemName = "iOS"; + deviceBrand = "Apple"; + const ios = raw.match(/OS (\d+[_\d]*) like Mac OS X/i); + if (ios) systemVersion = ios[1].replace(/_/g, "."); + if (/iPad/i.test(raw)) { + deviceModel = "iPad"; + deviceType = "tablet"; + } else if (/iPod/i.test(raw)) { + deviceModel = "iPod"; + deviceType = "mobile"; + } else { + deviceModel = "iPhone"; + deviceType = "mobile"; + } + } else if (/Android/i.test(raw)) { + systemName = "Android"; + const version = raw.match(/Android ([\d.]+)/i); + if (version) systemVersion = version[1]; + const model = raw.match(/Android\s+[\d.]+;\s*([^;)]+?)(?:\s+Build\/|\))/i); + if (model?.[1]) deviceModel = model[1].trim(); + deviceBrand = guessAndroidBrand(deviceModel, raw); + deviceType = /Mobile/i.test(raw) ? "mobile" : "tablet"; + } else if (/Windows/i.test(raw)) { + systemName = "Windows"; + const win = raw.match(/Windows NT ([\d.]+)/i); + if (win) systemVersion = win[1]; + } else if (/Mac OS X|Macintosh/i.test(raw)) { + systemName = "macOS"; + deviceBrand = "Apple"; + deviceModel = "Mac"; + const mac = raw.match(/Mac OS X ([\d_]+)/i); + if (mac) systemVersion = mac[1].replace(/_/g, "."); + } else if (/Linux/i.test(raw)) { + systemName = "Linux"; + } + const devType = [ + deviceBrand, + deviceModel, + deviceType + ].map((part)=>part.trim()).filter(Boolean).join(" "); + return { + devType: devType || "desktop", + sysType: sysType(raw), + buildID: clean(parseBrowser(raw)) || "web", + deviceBrand, + deviceModel, + systemName, + systemVersion + }; +} +function xUserAgent(ua, extra = {}) { + const info = parseDeviceFromUA(ua); + return [ + extra.devID ? `DevID=${clean(extra.devID)}` : "", + `DevType=${clean(info.devType)}`, + `SysType=${info.sysType}`, + `Ver=${clean(APP_VER)}`, + `BuildID=${clean(info.buildID) || "web"}`, + `device_brand=${clean(info.deviceBrand)}`, + `device_model=${clean(info.deviceModel)}`, + `system_name=${clean(info.systemName)}`, + `system_version=${clean(info.systemVersion)}`, + `sid=${clean(extra.sid || "")}` + ].filter((part)=>part !== "").join(";"); +} +function sessionId(source) { + const cookies = new Map((source.get("cookie") || "").split(";").map((value)=>{ + const index = value.indexOf("="); + if (index < 0) return [ + "", + "" + ]; + return [ + value.slice(0, index).trim(), + value.slice(index + 1).trim() + ]; + })); + const sid = cookies.get("sid"); + if (sid) return sid; + const token = cookies.get("_s_token_") || ""; + if (token.startsWith("{")) { + try { + return String(JSON.parse(token).sid || ""); + } catch { + /* ignore */ } + } + return token; +} +function buildBrowserApiHeaders(devID = "", sid = "") { + const ua = typeof navigator !== "undefined" ? navigator.userAgent : ""; + return { + "X-User-Agent": xUserAgent(ua, { + devID, + sid + }) + }; +} +function clientIp(source, fallback = "") { + const candidates = [ + source.get("x-real-ip"), + source.get("x-forwarded-for")?.split(",")[0], + fallback + ]; + for (const value of candidates){ + const ip = value?.trim() || ""; + if (ip && isIP(ip)) return ip; + } + return ""; +} +function clientHeaders(source, overrides = {}) { + const result = {}; + const ua = (overrides.userAgent || source?.get("user-agent") || "").trim(); + if (ua) result["User-Agent"] = ua; + const incomingXua = source?.get("x-user-agent")?.trim() || ""; + if (incomingXua) { + result["X-User-Agent"] = incomingXua; + } else if (ua) { + result["X-User-Agent"] = xUserAgent(ua, { + sid: source ? sessionId(source) : "" + }); + } else { + Object.assign(result, buildBrowserApiHeaders(overrides.devID || "web-ssr")); + } + const ip = overrides.clientIp || (source ? clientIp(source) : ""); + if (ip) result["X-Real-IP"] = ip; + return result; +} +}), +"[project]/src/lib/api/config.ts [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "API_BASE_URL", + ()=>API_BASE_URL, + "getServerApiBaseUrl", + ()=>getServerApiBaseUrl, + "pointsAtThisServer", + ()=>pointsAtThisServer +]); +/** + * 浏览器接口根地址。 + * 留空时走同域 `/api/*`,由服务端转到 API_PROXY_TARGET。 + */ const DEFAULT_UPSTREAM = "https://webhgbapi.mfcg.me"; +const raw = ("TURBOPACK compile-time value", ""); +const API_BASE_URL = (raw ?? "").replace(/\/$/, ""); +function pointsAtThisServer(base) { + try { + const url = new URL(base); + const loopback = url.hostname === "127.0.0.1" || url.hostname === "localhost" || url.hostname === "::1"; + if (!loopback) return false; + const port = url.port || (url.protocol === "https:" ? "443" : "80"); + const listen = process.env.PORT?.trim(); + return !listen || port === listen; + } catch { + return false; + } +} +function getServerApiBaseUrl() { + const proxy = process.env.API_PROXY_TARGET?.trim().replace(/\/$/, ""); + const configured = proxy || raw?.trim().replace(/\/$/, "") || ""; + if (configured && !pointsAtThisServer(configured)) return configured; + return DEFAULT_UPSTREAM; +} +}), +"[project]/src/lib/api/server-fetch.ts [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "isRequestAborted", + ()=>isRequestAborted, + "serverFetchJson", + ()=>serverFetchJson +]); +var __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$dns__$5b$external$5d$__$28$node$3a$dns$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/node:dns [external] (node:dns, cjs)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$headers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/headers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2d$headers$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/client-headers.ts [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$config$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/config.ts [app-route] (ecmascript)"); +; +; +; +; +(0, __TURBOPACK__imported__module__$5b$externals$5d2f$node$3a$dns__$5b$external$5d$__$28$node$3a$dns$2c$__cjs$29$__["setDefaultResultOrder"])("ipv4first"); +const MAX_ATTEMPTS = 3; +const RETRY_BASE_MS = 400; +function networkErrorCode(error) { + if (!(error instanceof Error)) return ""; + const withCode = error; + if (withCode.code) return withCode.code; + if (withCode.cause?.code) return withCode.cause.code; + const nested = withCode.cause?.errors?.[0]; + return nested?.code || ""; +} +function isRequestAborted(error) { + if (!(error instanceof Error)) return false; + if (error.name === "TimeoutError") return false; + return error.name === "AbortError" || /this operation was aborted/i.test(error.message); +} +function isRetryableNetworkError(error) { + if (!(error instanceof Error)) return false; + if (isRequestAborted(error)) return false; + if (error.name === "TimeoutError" || error.name === "AbortError") return true; + const message = error.message.toLowerCase(); + if (message.includes("fetch failed") || message.includes("network")) return true; + const code = networkErrorCode(error); + if (/ENETUNREACH|ECONNRESET|ECONNREFUSED|ETIMEDOUT|EAI_AGAIN|ENOTFOUND|UND_ERR/i.test(code)) { + return true; + } + const cause = error.cause; + if (Array.isArray(cause?.errors)) return true; + return false; +} +function wait(ms) { + return new Promise((resolve)=>setTimeout(resolve, ms)); +} +function networkMessage(error) { + const code = networkErrorCode(error); + const message = error instanceof Error ? error.message : ""; + if (error instanceof Error && (error.name === "TimeoutError" || /aborted due to timeout/i.test(message))) { + return "接口暂时不可用(服务端网络超时)"; + } + if (/ETIMEDOUT|ENETUNREACH|ECONNREFUSED|fetch failed/i.test(`${code} ${message}`)) { + return "接口暂时不可用(服务端网络超时)"; + } + return message || "请求失败"; +} +async function requestIdentityHeaders() { + try { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2d$headers$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["clientHeaders"])(await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$headers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["headers"])()); + } catch { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2d$headers$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["buildBrowserApiHeaders"])("web-ssr"); + } +} +async function serverFetchJson(pathWithQuery, options) { + const base = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$config$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerApiBaseUrl"])(); + const url = `${base}${pathWithQuery}`; + const timeoutMs = options?.timeoutMs ?? 12_000; + const maxAttempts = options?.maxAttempts ?? MAX_ATTEMPTS; + const identity = await requestIdentityHeaders(); + const nextInit = options?.revalidate !== undefined || options?.tags?.length ? { + ...options.revalidate !== undefined ? { + revalidate: options.revalidate + } : {}, + ...options.tags?.length ? { + tags: options.tags + } : {} + } : undefined; + let lastError; + for(let attempt = 1; attempt <= maxAttempts; attempt++){ + try { + const response = await fetch(url, { + headers: { + Accept: "application/json", + ...identity, + ...options?.headers + }, + signal: AbortSignal.timeout(timeoutMs), + ...nextInit ? { + next: nextInit + } : {} + }); + const text = await response.text(); + let payload = null; + try { + payload = text ? JSON.parse(text) : null; + } catch { + payload = null; + } + if (!payload || typeof payload.code !== "number") { + throw new Error(response.ok ? "接口响应格式异常" : `接口暂时不可用 (${response.status})`); + } + if (!response.ok || payload.code !== 200) { + throw new Error(payload.tip || payload.msg || "请求失败"); + } + return payload.data; + } catch (error) { + lastError = error; + if (attempt >= maxAttempts || !isRetryableNetworkError(error)) break; + await wait(RETRY_BASE_MS * attempt); + } + } + throw new Error(networkMessage(lastError)); +} +}), +]})(), +"[externals]/crypto [external] (crypto, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("crypto", () => require("crypto")); + +module.exports = mod; +}), +"[externals]/next/dist/compiled/@opentelemetry/api [external] (next/dist/compiled/@opentelemetry/api, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/compiled/@opentelemetry/api", () => require("next/dist/compiled/@opentelemetry/api")); + +module.exports = mod; +}), +"[externals]/next/dist/compiled/next-server/app-page-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-page-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js")); + +module.exports = mod; +}), +"[externals]/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-route-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/compiled/next-server/app-route-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-route-turbo.runtime.dev.js")); + +module.exports = mod; +}), +"[externals]/next/dist/server/app-render/action-async-storage.external.js [external] (next/dist/server/app-render/action-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/server/app-render/action-async-storage.external.js", () => require("next/dist/server/app-render/action-async-storage.external.js")); + +module.exports = mod; +}), +"[externals]/next/dist/server/app-render/after-task-async-storage.external.js [external] (next/dist/server/app-render/after-task-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/server/app-render/after-task-async-storage.external.js", () => require("next/dist/server/app-render/after-task-async-storage.external.js")); + +module.exports = mod; +}), +"[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/server/app-render/work-async-storage.external.js", () => require("next/dist/server/app-render/work-async-storage.external.js")); + +module.exports = mod; +}), +"[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/server/app-render/work-unit-async-storage.external.js", () => require("next/dist/server/app-render/work-unit-async-storage.external.js")); + +module.exports = mod; +}), +"[externals]/next/dist/server/runtime-reacts.external.js [external] (next/dist/server/runtime-reacts.external.js, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/server/runtime-reacts.external.js", () => require("next/dist/server/runtime-reacts.external.js")); + +module.exports = mod; +}), +"[externals]/next/dist/shared/lib/no-fallback-error.external.js [external] (next/dist/shared/lib/no-fallback-error.external.js, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/shared/lib/no-fallback-error.external.js", () => require("next/dist/shared/lib/no-fallback-error.external.js")); + +module.exports = mod; +}), +"[externals]/node:dns [external] (node:dns, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("node:dns", () => require("node:dns")); + +module.exports = mod; +}), +"[externals]/node:stream [external] (node:stream, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("node:stream", () => require("node:stream")); + +module.exports = mod; +}), +"[externals]/path [external] (path, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("path", () => require("path")); + +module.exports = mod; +}), +]; + +//# sourceMappingURL=%5Broot-of-the-server%5D__0a8xmgadn_opt._.js.map \ No newline at end of file diff --git a/.next-dev/dev/server/chunks/[root-of-the-server]__0a8xmgadn_opt._.js.map b/.next-dev/dev/server/chunks/[root-of-the-server]__0a8xmgadn_opt._.js.map new file mode 100644 index 0000000..51a817e --- /dev/null +++ b/.next-dev/dev/server/chunks/[root-of-the-server]__0a8xmgadn_opt._.js.map @@ -0,0 +1,9 @@ +{ + "version": 3, + "sources": [], + "sections": [ + {"offset": {"line": 5, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/app/h5/chapter-detail/route.ts"],"sourcesContent":["import { connection } from \"next/server\";\n\nimport { clientHeaders } from \"@/lib/api/client-headers\";\nimport { serverFetchJson } from \"@/lib/api/server-fetch\";\nimport type { ApiEnvelope, PlayletChapterInfoResp } from \"@/lib/api/types\";\n\n/**\n * 播放用剧集详情 BFF。\n *\n * 浏览器不能直打 nginx → Go(/api → 21025):上游用客户端 X-Forwarded-For 签 ticket,\n * 而 /enkey 由本机出站去换密钥,IP 对不上会 6020,表现为有 m3u8 但播不了。\n * 这里由 Node 出站拉 chapter/detail(必要时强制 XFF=出站 IP),签出的 ticket 才能解开 AES。\n */\nexport async function GET(request: Request) {\n await connection();\n const incoming = new URL(request.url);\n const chapterId = incoming.searchParams.get(\"chapterId\")?.trim() || \"\";\n if (!chapterId) {\n return Response.json(\n { code: 1001, data: null, tip: \"缺少剧集 chapterId\", msg: \"\", hash: false },\n { status: 200, headers: { \"cache-control\": \"no-store\" } },\n );\n }\n\n const query = new URLSearchParams({ chapterId });\n const playletSlug = incoming.searchParams.get(\"playletSlug\")?.trim();\n const playletId = incoming.searchParams.get(\"playletId\")?.trim();\n if (playletSlug) query.set(\"playletSlug\", playletSlug);\n else if (playletId) query.set(\"playletId\", playletId);\n\n const path = `/api/app/playlet/chapter/detail?${query}`;\n\n try {\n const data = (await fetchChapterForPlay(path, request)) as PlayletChapterInfoResp;\n return Response.json(\n { code: 200, data, tip: \"成功\", msg: \"\", hash: false },\n { status: 200, headers: { \"cache-control\": \"no-store\" } },\n );\n } catch (error) {\n const tip = error instanceof Error ? error.message : \"剧集详情加载失败\";\n return Response.json(\n { code: 500, data: null, tip, msg: \"\", hash: false },\n { status: 200, headers: { \"cache-control\": \"no-store\" } },\n );\n }\n}\n\nasync function fetchChapterForPlay(pathWithQuery: string, request: Request) {\n const internal = process.env.API_INTERNAL_ORIGIN?.trim().replace(/\\/$/, \"\");\n const ticketXff = process.env.MEDIA_TICKET_FORWARDED_FOR?.trim();\n\n // 测试/预发:直连本机 Go,并用出站公网 IP 作为 XFF,与 /enkey 同源。\n if (internal && ticketXff) {\n const headers: Record = {\n Accept: \"application/json\",\n ...clientHeaders(request.headers),\n \"X-Forwarded-For\": ticketXff,\n \"X-Real-IP\": ticketXff,\n };\n\n const response = await fetch(`${internal}${pathWithQuery}`, {\n headers,\n cache: \"no-store\",\n signal: AbortSignal.timeout(10_000),\n });\n const text = await response.text();\n let payload: ApiEnvelope | null = null;\n try {\n payload = text ? (JSON.parse(text) as ApiEnvelope) : null;\n } catch {\n payload = null;\n }\n if (!payload || typeof payload.code !== \"number\") {\n throw new Error(response.ok ? \"接口响应格式异常\" : `接口暂时不可用 (${response.status})`);\n }\n if (!response.ok || payload.code !== 200) {\n throw new Error(payload.tip || payload.msg || \"请求失败\");\n }\n return payload.data;\n }\n\n return serverFetchJson(pathWithQuery, {\n maxAttempts: 2,\n timeoutMs: 10_000,\n revalidate: 0,\n });\n}\n"],"names":["GET","request","incoming","URL","url","chapterId","searchParams","get","trim","Response","json","code","data","tip","msg","hash","status","headers","query","URLSearchParams","playletSlug","playletId","set","path","fetchChapterForPlay","error","Error","message","pathWithQuery","internal","process","env","API_INTERNAL_ORIGIN","replace","ticketXff","MEDIA_TICKET_FORWARDED_FOR","Accept","response","fetch","cache","signal","AbortSignal","timeout","text","payload","JSON","parse","ok","maxAttempts","timeoutMs","revalidate"],"mappings":";;;;AAAA;AAEA;AACA;;;;AAUO,eAAeA,IAAIC,OAAgB;IACxC,MAAM,IAAA,8IAAU;IAChB,MAAMC,WAAW,IAAIC,IAAIF,QAAQG,GAAG;IACpC,MAAMC,YAAYH,SAASI,YAAY,CAACC,GAAG,CAAC,cAAcC,UAAU;IACpE,IAAI,CAACH,WAAW;QACd,OAAOI,SAASC,IAAI,CAClB;YAAEC,MAAM;YAAMC,MAAM;YAAMC,KAAK;YAAkBC,KAAK;YAAIC,MAAM;QAAM,GACtE;YAAEC,QAAQ;YAAKC,SAAS;gBAAE,iBAAiB;YAAW;QAAE;IAE5D;IAEA,MAAMC,QAAQ,IAAIC,gBAAgB;QAAEd;IAAU;IAC9C,MAAMe,cAAclB,SAASI,YAAY,CAACC,GAAG,CAAC,gBAAgBC;IAC9D,MAAMa,YAAYnB,SAASI,YAAY,CAACC,GAAG,CAAC,cAAcC;IAC1D,IAAIY,aAAaF,MAAMI,GAAG,CAAC,eAAeF;SACrC,IAAIC,WAAWH,MAAMI,GAAG,CAAC,aAAaD;IAE3C,MAAME,OAAO,CAAC,gCAAgC,EAAEL,OAAO;IAEvD,IAAI;QACF,MAAMN,OAAQ,MAAMY,oBAAoBD,MAAMtB;QAC9C,OAAOQ,SAASC,IAAI,CAClB;YAAEC,MAAM;YAAKC;YAAMC,KAAK;YAAMC,KAAK;YAAIC,MAAM;QAAM,GACnD;YAAEC,QAAQ;YAAKC,SAAS;gBAAE,iBAAiB;YAAW;QAAE;IAE5D,EAAE,OAAOQ,OAAO;QACd,MAAMZ,MAAMY,iBAAiBC,QAAQD,MAAME,OAAO,GAAG;QACrD,OAAOlB,SAASC,IAAI,CAClB;YAAEC,MAAM;YAAKC,MAAM;YAAMC;YAAKC,KAAK;YAAIC,MAAM;QAAM,GACnD;YAAEC,QAAQ;YAAKC,SAAS;gBAAE,iBAAiB;YAAW;QAAE;IAE5D;AACF;AAEA,eAAeO,oBAAoBI,aAAqB,EAAE3B,OAAgB;IACxE,MAAM4B,WAAWC,QAAQC,GAAG,CAACC,mBAAmB,EAAExB,OAAOyB,QAAQ,OAAO;IACxE,MAAMC,YAAYJ,QAAQC,GAAG,CAACI,0BAA0B,EAAE3B;IAE1D,8CAA8C;IAC9C,IAAIqB,YAAYK,WAAW;QACzB,MAAMjB,UAAkC;YACtCmB,QAAQ;YACR,GAAG,IAAA,yJAAa,EAACnC,QAAQgB,OAAO,CAAC;YACjC,mBAAmBiB;YACnB,aAAaA;QACf;QAEA,MAAMG,WAAW,MAAMC,MAAM,GAAGT,WAAWD,eAAe,EAAE;YAC1DX;YACAsB,OAAO;YACPC,QAAQC,YAAYC,OAAO,CAAC;QAC9B;QACA,MAAMC,OAAO,MAAMN,SAASM,IAAI;QAChC,IAAIC,UAAsD;QAC1D,IAAI;YACFA,UAAUD,OAAQE,KAAKC,KAAK,CAACH,QAAgD;QAC/E,EAAE,OAAM;YACNC,UAAU;QACZ;QACA,IAAI,CAACA,WAAW,OAAOA,QAAQjC,IAAI,KAAK,UAAU;YAChD,MAAM,IAAIe,MAAMW,SAASU,EAAE,GAAG,aAAa,CAAC,SAAS,EAAEV,SAASrB,MAAM,CAAC,CAAC,CAAC;QAC3E;QACA,IAAI,CAACqB,SAASU,EAAE,IAAIH,QAAQjC,IAAI,KAAK,KAAK;YACxC,MAAM,IAAIe,MAAMkB,QAAQ/B,GAAG,IAAI+B,QAAQ9B,GAAG,IAAI;QAChD;QACA,OAAO8B,QAAQhC,IAAI;IACrB;IAEA,OAAO,IAAA,yJAAe,EAAyBgB,eAAe;QAC5DoB,aAAa;QACbC,WAAW;QACXC,YAAY;IACd;AACF"}}, + {"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/client-headers.ts"],"sourcesContent":["const APP_VER = process.env.NEXT_PUBLIC_APP_VERSION?.trim() || \"1.0.0\";\n\ntype HeaderSource = Pick;\n\nfunction clean(value: string) {\n return value.replace(/[^\\x20-\\x7E]|[;=]/g, \" \").trim();\n}\n\n/** 不依赖 node:net,避免被浏览器端打包。 */\nfunction isIP(value: string) {\n if (/^(?:\\d{1,3}\\.){3}\\d{1,3}$/.test(value)) {\n return value.split(\".\").every((part) => {\n const n = Number(part);\n return String(n) === part && n >= 0 && n <= 255;\n });\n }\n // 宽松校验 IPv6,够用来转发 X-Real-IP。\n return value.includes(\":\") && /^[0-9a-fA-F:.]+$/.test(value);\n}\n\nfunction sysType(ua: string) {\n const value = ua.toLowerCase();\n if (value.includes(\"android\")) return \"h5_android\";\n if (value.includes(\"iphone\") || value.includes(\"ipad\") || value.includes(\"ipod\")) return \"h5_ios\";\n return \"h5_pc\";\n}\n\nfunction guessAndroidBrand(model: string, ua: string) {\n const value = `${model} ${ua}`;\n const brands: Array<[RegExp, string]> = [\n [/Build\\/HONOR|\\bHONOR\\b/i, \"Honor\"],\n [/Build\\/HUAWEI|HUAWEI|HW-/i, \"Huawei\"],\n [/SM-|samsung|Galaxy/i, \"Samsung\"],\n [/Pixel/i, \"Google\"],\n [/Redmi|POCO|XiaoMi|\\bMi\\b/i, \"Xiaomi\"],\n [/OPPO|\\bCPH\\d{3,4}/i, \"OPPO\"],\n [/vivo|\\bV\\d{4}/i, \"vivo\"],\n [/OnePlus|ONEPLUS/i, \"OnePlus\"],\n [/realme|\\bRMX\\d{3,4}/i, \"realme\"],\n ];\n return brands.find(([pattern]) => pattern.test(value))?.[1] || \"\";\n}\n\nfunction parseBrowser(ua: string) {\n const edge = ua.match(/Edg\\/([\\d.]+)/i);\n if (edge) return `Edge ${edge[1]}`;\n const opera = ua.match(/(?:OPR|Opera)\\/([\\d.]+)/i);\n if (opera) return `Opera ${opera[1]}`;\n const chrome = ua.match(/Chrome\\/([\\d.]+)/i);\n if (chrome && !/Edg\\//i.test(ua)) return `Chrome ${chrome[1]}`;\n const safari = ua.match(/Version\\/([\\d.]+).*Safari/i);\n if (safari) return `Safari ${safari[1]}`;\n const firefox = ua.match(/Firefox\\/([\\d.]+)/i);\n if (firefox) return `Firefox ${firefox[1]}`;\n const ie = ua.match(/(?:MSIE\\s|Trident.*rv:)([\\d.]+)/i);\n if (ie) return `IE ${ie[1]}`;\n return \"\";\n}\n\ntype DeviceProfile = {\n devType: string;\n sysType: \"h5_ios\" | \"h5_android\" | \"h5_pc\";\n buildID: string;\n deviceBrand: string;\n deviceModel: string;\n systemName: string;\n systemVersion: string;\n};\n\n/** 从浏览器 User-Agent 解析设备公共字段,口径对齐 jha-1040 useragent.ParseDeviceFromUA。 */\nfunction parseDeviceFromUA(ua: string): DeviceProfile {\n const raw = ua.trim();\n let deviceBrand = \"\";\n let deviceModel = \"\";\n let deviceType = \"desktop\";\n let systemName = \"Other\";\n let systemVersion = \"\";\n\n if (/iPhone|iPad|iPod/i.test(raw)) {\n systemName = \"iOS\";\n deviceBrand = \"Apple\";\n const ios = raw.match(/OS (\\d+[_\\d]*) like Mac OS X/i);\n if (ios) systemVersion = ios[1].replace(/_/g, \".\");\n if (/iPad/i.test(raw)) {\n deviceModel = \"iPad\";\n deviceType = \"tablet\";\n } else if (/iPod/i.test(raw)) {\n deviceModel = \"iPod\";\n deviceType = \"mobile\";\n } else {\n deviceModel = \"iPhone\";\n deviceType = \"mobile\";\n }\n } else if (/Android/i.test(raw)) {\n systemName = \"Android\";\n const version = raw.match(/Android ([\\d.]+)/i);\n if (version) systemVersion = version[1];\n const model = raw.match(/Android\\s+[\\d.]+;\\s*([^;)]+?)(?:\\s+Build\\/|\\))/i);\n if (model?.[1]) deviceModel = model[1].trim();\n deviceBrand = guessAndroidBrand(deviceModel, raw);\n deviceType = /Mobile/i.test(raw) ? \"mobile\" : \"tablet\";\n } else if (/Windows/i.test(raw)) {\n systemName = \"Windows\";\n const win = raw.match(/Windows NT ([\\d.]+)/i);\n if (win) systemVersion = win[1];\n } else if (/Mac OS X|Macintosh/i.test(raw)) {\n systemName = \"macOS\";\n deviceBrand = \"Apple\";\n deviceModel = \"Mac\";\n const mac = raw.match(/Mac OS X ([\\d_]+)/i);\n if (mac) systemVersion = mac[1].replace(/_/g, \".\");\n } else if (/Linux/i.test(raw)) {\n systemName = \"Linux\";\n }\n\n const devType = [deviceBrand, deviceModel, deviceType].map((part) => part.trim()).filter(Boolean).join(\" \");\n return {\n devType: devType || \"desktop\",\n sysType: sysType(raw),\n buildID: clean(parseBrowser(raw)) || \"web\",\n deviceBrand,\n deviceModel,\n systemName,\n systemVersion,\n };\n}\n\nfunction xUserAgent(ua: string, extra: { devID?: string; sid?: string } = {}) {\n const info = parseDeviceFromUA(ua);\n return [\n extra.devID ? `DevID=${clean(extra.devID)}` : \"\",\n `DevType=${clean(info.devType)}`,\n `SysType=${info.sysType}`,\n `Ver=${clean(APP_VER)}`,\n `BuildID=${clean(info.buildID) || \"web\"}`,\n `device_brand=${clean(info.deviceBrand)}`,\n `device_model=${clean(info.deviceModel)}`,\n `system_name=${clean(info.systemName)}`,\n `system_version=${clean(info.systemVersion)}`,\n `sid=${clean(extra.sid || \"\")}`,\n ]\n .filter((part) => part !== \"\")\n .join(\";\");\n}\n\nfunction sessionId(source: HeaderSource) {\n const cookies = new Map(\n (source.get(\"cookie\") || \"\").split(\";\").map((value) => {\n const index = value.indexOf(\"=\");\n if (index < 0) return [\"\", \"\"];\n return [value.slice(0, index).trim(), value.slice(index + 1).trim()];\n }),\n );\n const sid = cookies.get(\"sid\");\n if (sid) return sid;\n const token = cookies.get(\"_s_token_\") || \"\";\n if (token.startsWith(\"{\")) {\n try {\n return String(JSON.parse(token).sid || \"\");\n } catch {\n /* ignore */\n }\n }\n return token;\n}\n\n/** 浏览器请求只带 X-User-Agent。User-Agent 由浏览器自己发,不在前端伪造。 */\nexport function buildBrowserApiHeaders(devID = \"\", sid = \"\") {\n const ua = typeof navigator !== \"undefined\" ? navigator.userAgent : \"\";\n return { \"X-User-Agent\": xUserAgent(ua, { devID, sid }) };\n}\n\n/** 从请求头解析客户端 IP,优先 X-Real-IP,其次 X-Forwarded-For 第一段。 */\nexport function clientIp(source: HeaderSource, fallback = \"\") {\n const candidates = [source.get(\"x-real-ip\"), source.get(\"x-forwarded-for\")?.split(\",\")[0], fallback];\n for (const value of candidates) {\n const ip = value?.trim() || \"\";\n if (ip && isIP(ip)) return ip;\n }\n return \"\";\n}\n\n/**\n * 服务端转给上游的身份头:保留浏览器 User-Agent / X-User-Agent,并补上 X-Real-IP。\n * 没有浏览器上下文时回退到合成 X-User-Agent。\n */\nexport function clientHeaders(\n source?: HeaderSource,\n overrides: { userAgent?: string; clientIp?: string; devID?: string } = {},\n): Record {\n const result: Record = {};\n const ua = (overrides.userAgent || source?.get(\"user-agent\") || \"\").trim();\n if (ua) result[\"User-Agent\"] = ua;\n\n const incomingXua = source?.get(\"x-user-agent\")?.trim() || \"\";\n if (incomingXua) {\n result[\"X-User-Agent\"] = incomingXua;\n } else if (ua) {\n result[\"X-User-Agent\"] = xUserAgent(ua, { sid: source ? sessionId(source) : \"\" });\n } else {\n Object.assign(result, buildBrowserApiHeaders(overrides.devID || \"web-ssr\"));\n }\n\n const ip = overrides.clientIp || (source ? clientIp(source) : \"\");\n if (ip) result[\"X-Real-IP\"] = ip;\n\n return result;\n}\n"],"names":["APP_VER","trim","clean","value","replace","isIP","test","split","every","part","n","Number","String","includes","sysType","ua","toLowerCase","guessAndroidBrand","model","brands","find","pattern","parseBrowser","edge","match","opera","chrome","safari","firefox","ie","parseDeviceFromUA","raw","deviceBrand","deviceModel","deviceType","systemName","systemVersion","ios","version","win","mac","devType","map","filter","Boolean","join","buildID","xUserAgent","extra","info","devID","sid","sessionId","source","cookies","Map","get","index","indexOf","slice","token","startsWith","JSON","parse","buildBrowserApiHeaders","navigator","userAgent","clientIp","fallback","candidates","ip","clientHeaders","overrides","result","incomingXua","Object","assign"],"mappings":";;;;;;;;AAAA,MAAMA,UAAU,2CAAqCC,UAAU;AAI/D,SAASC,MAAMC,KAAa;IAC1B,OAAOA,MAAMC,OAAO,CAAC,sBAAsB,KAAKH,IAAI;AACtD;AAEA,4BAA4B,GAC5B,SAASI,KAAKF,KAAa;IACzB,IAAI,4BAA4BG,IAAI,CAACH,QAAQ;QAC3C,OAAOA,MAAMI,KAAK,CAAC,KAAKC,KAAK,CAAC,CAACC;YAC7B,MAAMC,IAAIC,OAAOF;YACjB,OAAOG,OAAOF,OAAOD,QAAQC,KAAK,KAAKA,KAAK;QAC9C;IACF;IACA,6BAA6B;IAC7B,OAAOP,MAAMU,QAAQ,CAAC,QAAQ,mBAAmBP,IAAI,CAACH;AACxD;AAEA,SAASW,QAAQC,EAAU;IACzB,MAAMZ,QAAQY,GAAGC,WAAW;IAC5B,IAAIb,MAAMU,QAAQ,CAAC,YAAY,OAAO;IACtC,IAAIV,MAAMU,QAAQ,CAAC,aAAaV,MAAMU,QAAQ,CAAC,WAAWV,MAAMU,QAAQ,CAAC,SAAS,OAAO;IACzF,OAAO;AACT;AAEA,SAASI,kBAAkBC,KAAa,EAAEH,EAAU;IAClD,MAAMZ,QAAQ,GAAGe,MAAM,CAAC,EAAEH,IAAI;IAC9B,MAAMI,SAAkC;QACtC;YAAC;YAA2B;SAAQ;QACpC;YAAC;YAA6B;SAAS;QACvC;YAAC;YAAuB;SAAU;QAClC;YAAC;YAAU;SAAS;QACpB;YAAC;YAA6B;SAAS;QACvC;YAAC;YAAsB;SAAO;QAC9B;YAAC;YAAkB;SAAO;QAC1B;YAAC;YAAoB;SAAU;QAC/B;YAAC;YAAwB;SAAS;KACnC;IACD,OAAOA,OAAOC,IAAI,CAAC,CAAC,CAACC,QAAQ,GAAKA,QAAQf,IAAI,CAACH,SAAS,CAAC,EAAE,IAAI;AACjE;AAEA,SAASmB,aAAaP,EAAU;IAC9B,MAAMQ,OAAOR,GAAGS,KAAK,CAAC;IACtB,IAAID,MAAM,OAAO,CAAC,KAAK,EAAEA,IAAI,CAAC,EAAE,EAAE;IAClC,MAAME,QAAQV,GAAGS,KAAK,CAAC;IACvB,IAAIC,OAAO,OAAO,CAAC,MAAM,EAAEA,KAAK,CAAC,EAAE,EAAE;IACrC,MAAMC,SAASX,GAAGS,KAAK,CAAC;IACxB,IAAIE,UAAU,CAAC,SAASpB,IAAI,CAACS,KAAK,OAAO,CAAC,OAAO,EAAEW,MAAM,CAAC,EAAE,EAAE;IAC9D,MAAMC,SAASZ,GAAGS,KAAK,CAAC;IACxB,IAAIG,QAAQ,OAAO,CAAC,OAAO,EAAEA,MAAM,CAAC,EAAE,EAAE;IACxC,MAAMC,UAAUb,GAAGS,KAAK,CAAC;IACzB,IAAII,SAAS,OAAO,CAAC,QAAQ,EAAEA,OAAO,CAAC,EAAE,EAAE;IAC3C,MAAMC,KAAKd,GAAGS,KAAK,CAAC;IACpB,IAAIK,IAAI,OAAO,CAAC,GAAG,EAAEA,EAAE,CAAC,EAAE,EAAE;IAC5B,OAAO;AACT;AAYA,wEAAwE,GACxE,SAASC,kBAAkBf,EAAU;IACnC,MAAMgB,MAAMhB,GAAGd,IAAI;IACnB,IAAI+B,cAAc;IAClB,IAAIC,cAAc;IAClB,IAAIC,aAAa;IACjB,IAAIC,aAAa;IACjB,IAAIC,gBAAgB;IAEpB,IAAI,oBAAoB9B,IAAI,CAACyB,MAAM;QACjCI,aAAa;QACbH,cAAc;QACd,MAAMK,MAAMN,IAAIP,KAAK,CAAC;QACtB,IAAIa,KAAKD,gBAAgBC,GAAG,CAAC,EAAE,CAACjC,OAAO,CAAC,MAAM;QAC9C,IAAI,QAAQE,IAAI,CAACyB,MAAM;YACrBE,cAAc;YACdC,aAAa;QACf,OAAO,IAAI,QAAQ5B,IAAI,CAACyB,MAAM;YAC5BE,cAAc;YACdC,aAAa;QACf,OAAO;YACLD,cAAc;YACdC,aAAa;QACf;IACF,OAAO,IAAI,WAAW5B,IAAI,CAACyB,MAAM;QAC/BI,aAAa;QACb,MAAMG,UAAUP,IAAIP,KAAK,CAAC;QAC1B,IAAIc,SAASF,gBAAgBE,OAAO,CAAC,EAAE;QACvC,MAAMpB,QAAQa,IAAIP,KAAK,CAAC;QACxB,IAAIN,OAAO,CAAC,EAAE,EAAEe,cAAcf,KAAK,CAAC,EAAE,CAACjB,IAAI;QAC3C+B,cAAcf,kBAAkBgB,aAAaF;QAC7CG,aAAa,UAAU5B,IAAI,CAACyB,OAAO,WAAW;IAChD,OAAO,IAAI,WAAWzB,IAAI,CAACyB,MAAM;QAC/BI,aAAa;QACb,MAAMI,MAAMR,IAAIP,KAAK,CAAC;QACtB,IAAIe,KAAKH,gBAAgBG,GAAG,CAAC,EAAE;IACjC,OAAO,IAAI,sBAAsBjC,IAAI,CAACyB,MAAM;QAC1CI,aAAa;QACbH,cAAc;QACdC,cAAc;QACd,MAAMO,MAAMT,IAAIP,KAAK,CAAC;QACtB,IAAIgB,KAAKJ,gBAAgBI,GAAG,CAAC,EAAE,CAACpC,OAAO,CAAC,MAAM;IAChD,OAAO,IAAI,SAASE,IAAI,CAACyB,MAAM;QAC7BI,aAAa;IACf;IAEA,MAAMM,UAAU;QAACT;QAAaC;QAAaC;KAAW,CAACQ,GAAG,CAAC,CAACjC,OAASA,KAAKR,IAAI,IAAI0C,MAAM,CAACC,SAASC,IAAI,CAAC;IACvG,OAAO;QACLJ,SAASA,WAAW;QACpB3B,SAASA,QAAQiB;QACjBe,SAAS5C,MAAMoB,aAAaS,SAAS;QACrCC;QACAC;QACAE;QACAC;IACF;AACF;AAEA,SAASW,WAAWhC,EAAU,EAAEiC,QAA0C,CAAC,CAAC;IAC1E,MAAMC,OAAOnB,kBAAkBf;IAC/B,OAAO;QACLiC,MAAME,KAAK,GAAG,CAAC,MAAM,EAAEhD,MAAM8C,MAAME,KAAK,GAAG,GAAG;QAC9C,CAAC,QAAQ,EAAEhD,MAAM+C,KAAKR,OAAO,GAAG;QAChC,CAAC,QAAQ,EAAEQ,KAAKnC,OAAO,EAAE;QACzB,CAAC,IAAI,EAAEZ,MAAMF,UAAU;QACvB,CAAC,QAAQ,EAAEE,MAAM+C,KAAKH,OAAO,KAAK,OAAO;QACzC,CAAC,aAAa,EAAE5C,MAAM+C,KAAKjB,WAAW,GAAG;QACzC,CAAC,aAAa,EAAE9B,MAAM+C,KAAKhB,WAAW,GAAG;QACzC,CAAC,YAAY,EAAE/B,MAAM+C,KAAKd,UAAU,GAAG;QACvC,CAAC,eAAe,EAAEjC,MAAM+C,KAAKb,aAAa,GAAG;QAC7C,CAAC,IAAI,EAAElC,MAAM8C,MAAMG,GAAG,IAAI,KAAK;KAChC,CACER,MAAM,CAAC,CAAClC,OAASA,SAAS,IAC1BoC,IAAI,CAAC;AACV;AAEA,SAASO,UAAUC,MAAoB;IACrC,MAAMC,UAAU,IAAIC,IAClB,CAACF,OAAOG,GAAG,CAAC,aAAa,EAAE,EAAEjD,KAAK,CAAC,KAAKmC,GAAG,CAAC,CAACvC;QAC3C,MAAMsD,QAAQtD,MAAMuD,OAAO,CAAC;QAC5B,IAAID,QAAQ,GAAG,OAAO;YAAC;YAAI;SAAG;QAC9B,OAAO;YAACtD,MAAMwD,KAAK,CAAC,GAAGF,OAAOxD,IAAI;YAAIE,MAAMwD,KAAK,CAACF,QAAQ,GAAGxD,IAAI;SAAG;IACtE;IAEF,MAAMkD,MAAMG,QAAQE,GAAG,CAAC;IACxB,IAAIL,KAAK,OAAOA;IAChB,MAAMS,QAAQN,QAAQE,GAAG,CAAC,gBAAgB;IAC1C,IAAII,MAAMC,UAAU,CAAC,MAAM;QACzB,IAAI;YACF,OAAOjD,OAAOkD,KAAKC,KAAK,CAACH,OAAOT,GAAG,IAAI;QACzC,EAAE,OAAM;QACN,UAAU,GACZ;IACF;IACA,OAAOS;AACT;AAGO,SAASI,uBAAuBd,QAAQ,EAAE,EAAEC,MAAM,EAAE;IACzD,MAAMpC,KAAK,OAAOkD,cAAc,cAAcA,UAAUC,SAAS,GAAG;IACpE,OAAO;QAAE,gBAAgBnB,WAAWhC,IAAI;YAAEmC;YAAOC;QAAI;IAAG;AAC1D;AAGO,SAASgB,SAASd,MAAoB,EAAEe,WAAW,EAAE;IAC1D,MAAMC,aAAa;QAAChB,OAAOG,GAAG,CAAC;QAAcH,OAAOG,GAAG,CAAC,oBAAoBjD,MAAM,IAAI,CAAC,EAAE;QAAE6D;KAAS;IACpG,KAAK,MAAMjE,SAASkE,WAAY;QAC9B,MAAMC,KAAKnE,OAAOF,UAAU;QAC5B,IAAIqE,MAAMjE,KAAKiE,KAAK,OAAOA;IAC7B;IACA,OAAO;AACT;AAMO,SAASC,cACdlB,MAAqB,EACrBmB,YAAuE,CAAC,CAAC;IAEzE,MAAMC,SAAiC,CAAC;IACxC,MAAM1D,KAAK,CAACyD,UAAUN,SAAS,IAAIb,QAAQG,IAAI,iBAAiB,EAAE,EAAEvD,IAAI;IACxE,IAAIc,IAAI0D,MAAM,CAAC,aAAa,GAAG1D;IAE/B,MAAM2D,cAAcrB,QAAQG,IAAI,iBAAiBvD,UAAU;IAC3D,IAAIyE,aAAa;QACfD,MAAM,CAAC,eAAe,GAAGC;IAC3B,OAAO,IAAI3D,IAAI;QACb0D,MAAM,CAAC,eAAe,GAAG1B,WAAWhC,IAAI;YAAEoC,KAAKE,SAASD,UAAUC,UAAU;QAAG;IACjF,OAAO;QACLsB,OAAOC,MAAM,CAACH,QAAQT,uBAAuBQ,UAAUtB,KAAK,IAAI;IAClE;IAEA,MAAMoB,KAAKE,UAAUL,QAAQ,IAAI,CAACd,SAASc,SAASd,UAAU,EAAE;IAChE,IAAIiB,IAAIG,MAAM,CAAC,YAAY,GAAGH;IAE9B,OAAOG;AACT"}}, + {"offset": {"line": 336, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/config.ts"],"sourcesContent":["/**\n * 浏览器接口根地址。\n * 留空时走同域 `/api/*`,由服务端转到 API_PROXY_TARGET。\n */\nconst DEFAULT_UPSTREAM = \"https://webhgbapi.mfcg.me\";\nconst raw = process.env.NEXT_PUBLIC_API_BASE_URL;\nexport const API_BASE_URL = (raw ?? \"\").replace(/\\/$/, \"\");\n\n/** 代理目标指回当前 Node 进程时,请求会打到自己,发布后接口表现为不通。 */\nexport function pointsAtThisServer(base: string) {\n try {\n const url = new URL(base);\n const loopback = url.hostname === \"127.0.0.1\" || url.hostname === \"localhost\" || url.hostname === \"::1\";\n if (!loopback) return false;\n const port = url.port || (url.protocol === \"https:\" ? \"443\" : \"80\");\n const listen = process.env.PORT?.trim();\n return !listen || port === listen;\n } catch {\n return false;\n }\n}\n\n/** 服务端直连上游(相对路径在 Node fetch 中不可用) */\nexport function getServerApiBaseUrl() {\n const proxy = process.env.API_PROXY_TARGET?.trim().replace(/\\/$/, \"\");\n const configured = proxy || raw?.trim().replace(/\\/$/, \"\") || \"\";\n if (configured && !pointsAtThisServer(configured)) return configured;\n return DEFAULT_UPSTREAM;\n}\n"],"names":["DEFAULT_UPSTREAM","raw","API_BASE_URL","replace","pointsAtThisServer","base","url","URL","loopback","hostname","port","protocol","listen","process","env","PORT","trim","getServerApiBaseUrl","proxy","API_PROXY_TARGET","configured"],"mappings":";;;;;;;;AAAA;;;CAGC,GACD,MAAMA,mBAAmB;AACzB,MAAMC;AACC,MAAMC,eAAe,CAACD,OAAO,EAAE,EAAEE,OAAO,CAAC,OAAO;AAGhD,SAASC,mBAAmBC,IAAY;IAC7C,IAAI;QACF,MAAMC,MAAM,IAAIC,IAAIF;QACpB,MAAMG,WAAWF,IAAIG,QAAQ,KAAK,eAAeH,IAAIG,QAAQ,KAAK,eAAeH,IAAIG,QAAQ,KAAK;QAClG,IAAI,CAACD,UAAU,OAAO;QACtB,MAAME,OAAOJ,IAAII,IAAI,IAAI,CAACJ,IAAIK,QAAQ,KAAK,WAAW,QAAQ,IAAI;QAClE,MAAMC,SAASC,QAAQC,GAAG,CAACC,IAAI,EAAEC;QACjC,OAAO,CAACJ,UAAUF,SAASE;IAC7B,EAAE,OAAM;QACN,OAAO;IACT;AACF;AAGO,SAASK;IACd,MAAMC,QAAQL,QAAQC,GAAG,CAACK,gBAAgB,EAAEH,OAAOb,QAAQ,OAAO;IAClE,MAAMiB,aAAaF,SAASjB,KAAKe,OAAOb,QAAQ,OAAO,OAAO;IAC9D,IAAIiB,cAAc,CAAChB,mBAAmBgB,aAAa,OAAOA;IAC1D,OAAOpB;AACT"}}, + {"offset": {"line": 372, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/server-fetch.ts"],"sourcesContent":["import { setDefaultResultOrder } from \"node:dns\";\nimport { headers as nextHeaders } from \"next/headers\";\n\nimport { buildBrowserApiHeaders, clientHeaders } from \"./client-headers\";\nimport { getServerApiBaseUrl } from \"./config\";\nimport type { ApiEnvelope } from \"./types\";\n\nsetDefaultResultOrder(\"ipv4first\");\n\nconst MAX_ATTEMPTS = 3;\nconst RETRY_BASE_MS = 400;\n\nexport type ServerFetchOptions = {\n timeoutMs?: number;\n maxAttempts?: number;\n revalidate?: number | false;\n tags?: string[];\n headers?: Record;\n};\n\nfunction networkErrorCode(error: unknown): string {\n if (!(error instanceof Error)) return \"\";\n const withCode = error as Error & { code?: string; cause?: { code?: string; errors?: unknown[] } };\n if (withCode.code) return withCode.code;\n if (withCode.cause?.code) return withCode.cause.code;\n const nested = withCode.cause?.errors?.[0] as { code?: string } | undefined;\n return nested?.code || \"\";\n}\n\n/** 渲染被取消时的中断,不是接口超时。 */\nexport function isRequestAborted(error: unknown) {\n if (!(error instanceof Error)) return false;\n if (error.name === \"TimeoutError\") return false;\n return error.name === \"AbortError\" || /this operation was aborted/i.test(error.message);\n}\n\nfunction isRetryableNetworkError(error: unknown) {\n if (!(error instanceof Error)) return false;\n if (isRequestAborted(error)) return false;\n if (error.name === \"TimeoutError\" || error.name === \"AbortError\") return true;\n const message = error.message.toLowerCase();\n if (message.includes(\"fetch failed\") || message.includes(\"network\")) return true;\n const code = networkErrorCode(error);\n if (/ENETUNREACH|ECONNRESET|ECONNREFUSED|ETIMEDOUT|EAI_AGAIN|ENOTFOUND|UND_ERR/i.test(code)) {\n return true;\n }\n const cause = (error as Error & { cause?: { errors?: unknown[] } }).cause;\n if (Array.isArray(cause?.errors)) return true;\n return false;\n}\n\nfunction wait(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction networkMessage(error: unknown) {\n const code = networkErrorCode(error);\n const message = error instanceof Error ? error.message : \"\";\n if (error instanceof Error && (error.name === \"TimeoutError\" || /aborted due to timeout/i.test(message))) {\n return \"接口暂时不可用(服务端网络超时)\";\n }\n if (/ETIMEDOUT|ENETUNREACH|ECONNREFUSED|fetch failed/i.test(`${code} ${message}`)) {\n return \"接口暂时不可用(服务端网络超时)\";\n }\n return message || \"请求失败\";\n}\n\nasync function requestIdentityHeaders() {\n try {\n return clientHeaders(await nextHeaders());\n } catch {\n return buildBrowserApiHeaders(\"web-ssr\");\n }\n}\n\n/** 服务端直连上游 JSON;网络抖动自动重试。带上当前请求的 UA / IP。 */\nexport async function serverFetchJson(pathWithQuery: string, options?: ServerFetchOptions): Promise {\n const base = getServerApiBaseUrl();\n const url = `${base}${pathWithQuery}`;\n const timeoutMs = options?.timeoutMs ?? 12_000;\n const maxAttempts = options?.maxAttempts ?? MAX_ATTEMPTS;\n const identity = await requestIdentityHeaders();\n const nextInit =\n options?.revalidate !== undefined || options?.tags?.length\n ? {\n ...(options.revalidate !== undefined ? { revalidate: options.revalidate } : {}),\n ...(options.tags?.length ? { tags: options.tags } : {}),\n }\n : undefined;\n\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n const response = await fetch(url, {\n headers: {\n Accept: \"application/json\",\n ...identity,\n ...options?.headers,\n },\n signal: AbortSignal.timeout(timeoutMs),\n ...(nextInit ? { next: nextInit } : {}),\n });\n\n const text = await response.text();\n let payload: ApiEnvelope | null = null;\n try {\n payload = text ? (JSON.parse(text) as ApiEnvelope) : null;\n } catch {\n payload = null;\n }\n\n if (!payload || typeof payload.code !== \"number\") {\n throw new Error(response.ok ? \"接口响应格式异常\" : `接口暂时不可用 (${response.status})`);\n }\n if (!response.ok || payload.code !== 200) {\n throw new Error(payload.tip || payload.msg || \"请求失败\");\n }\n\n return payload.data;\n } catch (error) {\n lastError = error;\n if (attempt >= maxAttempts || !isRetryableNetworkError(error)) break;\n await wait(RETRY_BASE_MS * attempt);\n }\n }\n\n throw new Error(networkMessage(lastError));\n}\n"],"names":["MAX_ATTEMPTS","RETRY_BASE_MS","networkErrorCode","error","Error","withCode","code","cause","nested","errors","isRequestAborted","name","test","message","isRetryableNetworkError","toLowerCase","includes","Array","isArray","wait","ms","Promise","resolve","setTimeout","networkMessage","requestIdentityHeaders","serverFetchJson","pathWithQuery","options","base","url","timeoutMs","maxAttempts","identity","nextInit","revalidate","undefined","tags","length","lastError","attempt","response","fetch","headers","Accept","signal","AbortSignal","timeout","next","text","payload","JSON","parse","ok","status","tip","msg","data"],"mappings":"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"}}] +} \ No newline at end of file diff --git a/.next-dev/dev/server/chunks/[root-of-the-server]__1dpw5ck2p-gjg._.js b/.next-dev/dev/server/chunks/[root-of-the-server]__1dpw5ck2p-gjg._.js new file mode 100644 index 0000000..f9f6c16 --- /dev/null +++ b/.next-dev/dev/server/chunks/[root-of-the-server]__1dpw5ck2p-gjg._.js @@ -0,0 +1,625 @@ +module.exports = [ +(()=>{"use strict";return[ +"[project]/src/app/h5/m3u8/[...path]/route.ts [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "GET", + ()=>GET +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$media$2f$proxy$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/media/proxy.ts [app-route] (ecmascript)"); +; +function GET(request) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$media$2f$proxy$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["proxyHls"])(request); +} +}), +"[project]/src/lib/api/client-headers.ts [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "buildBrowserApiHeaders", + ()=>buildBrowserApiHeaders, + "clientHeaders", + ()=>clientHeaders, + "clientIp", + ()=>clientIp +]); +const APP_VER = ("TURBOPACK compile-time value", "1.0.0")?.trim() || "1.0.0"; +function clean(value) { + return value.replace(/[^\x20-\x7E]|[;=]/g, " ").trim(); +} +/** 不依赖 node:net,避免被浏览器端打包。 */ function isIP(value) { + if (/^(?:\d{1,3}\.){3}\d{1,3}$/.test(value)) { + return value.split(".").every((part)=>{ + const n = Number(part); + return String(n) === part && n >= 0 && n <= 255; + }); + } + // 宽松校验 IPv6,够用来转发 X-Real-IP。 + return value.includes(":") && /^[0-9a-fA-F:.]+$/.test(value); +} +function sysType(ua) { + const value = ua.toLowerCase(); + if (value.includes("android")) return "h5_android"; + if (value.includes("iphone") || value.includes("ipad") || value.includes("ipod")) return "h5_ios"; + return "h5_pc"; +} +function guessAndroidBrand(model, ua) { + const value = `${model} ${ua}`; + const brands = [ + [ + /Build\/HONOR|\bHONOR\b/i, + "Honor" + ], + [ + /Build\/HUAWEI|HUAWEI|HW-/i, + "Huawei" + ], + [ + /SM-|samsung|Galaxy/i, + "Samsung" + ], + [ + /Pixel/i, + "Google" + ], + [ + /Redmi|POCO|XiaoMi|\bMi\b/i, + "Xiaomi" + ], + [ + /OPPO|\bCPH\d{3,4}/i, + "OPPO" + ], + [ + /vivo|\bV\d{4}/i, + "vivo" + ], + [ + /OnePlus|ONEPLUS/i, + "OnePlus" + ], + [ + /realme|\bRMX\d{3,4}/i, + "realme" + ] + ]; + return brands.find(([pattern])=>pattern.test(value))?.[1] || ""; +} +function parseBrowser(ua) { + const edge = ua.match(/Edg\/([\d.]+)/i); + if (edge) return `Edge ${edge[1]}`; + const opera = ua.match(/(?:OPR|Opera)\/([\d.]+)/i); + if (opera) return `Opera ${opera[1]}`; + const chrome = ua.match(/Chrome\/([\d.]+)/i); + if (chrome && !/Edg\//i.test(ua)) return `Chrome ${chrome[1]}`; + const safari = ua.match(/Version\/([\d.]+).*Safari/i); + if (safari) return `Safari ${safari[1]}`; + const firefox = ua.match(/Firefox\/([\d.]+)/i); + if (firefox) return `Firefox ${firefox[1]}`; + const ie = ua.match(/(?:MSIE\s|Trident.*rv:)([\d.]+)/i); + if (ie) return `IE ${ie[1]}`; + return ""; +} +/** 从浏览器 User-Agent 解析设备公共字段,口径对齐 jha-1040 useragent.ParseDeviceFromUA。 */ function parseDeviceFromUA(ua) { + const raw = ua.trim(); + let deviceBrand = ""; + let deviceModel = ""; + let deviceType = "desktop"; + let systemName = "Other"; + let systemVersion = ""; + if (/iPhone|iPad|iPod/i.test(raw)) { + systemName = "iOS"; + deviceBrand = "Apple"; + const ios = raw.match(/OS (\d+[_\d]*) like Mac OS X/i); + if (ios) systemVersion = ios[1].replace(/_/g, "."); + if (/iPad/i.test(raw)) { + deviceModel = "iPad"; + deviceType = "tablet"; + } else if (/iPod/i.test(raw)) { + deviceModel = "iPod"; + deviceType = "mobile"; + } else { + deviceModel = "iPhone"; + deviceType = "mobile"; + } + } else if (/Android/i.test(raw)) { + systemName = "Android"; + const version = raw.match(/Android ([\d.]+)/i); + if (version) systemVersion = version[1]; + const model = raw.match(/Android\s+[\d.]+;\s*([^;)]+?)(?:\s+Build\/|\))/i); + if (model?.[1]) deviceModel = model[1].trim(); + deviceBrand = guessAndroidBrand(deviceModel, raw); + deviceType = /Mobile/i.test(raw) ? "mobile" : "tablet"; + } else if (/Windows/i.test(raw)) { + systemName = "Windows"; + const win = raw.match(/Windows NT ([\d.]+)/i); + if (win) systemVersion = win[1]; + } else if (/Mac OS X|Macintosh/i.test(raw)) { + systemName = "macOS"; + deviceBrand = "Apple"; + deviceModel = "Mac"; + const mac = raw.match(/Mac OS X ([\d_]+)/i); + if (mac) systemVersion = mac[1].replace(/_/g, "."); + } else if (/Linux/i.test(raw)) { + systemName = "Linux"; + } + const devType = [ + deviceBrand, + deviceModel, + deviceType + ].map((part)=>part.trim()).filter(Boolean).join(" "); + return { + devType: devType || "desktop", + sysType: sysType(raw), + buildID: clean(parseBrowser(raw)) || "web", + deviceBrand, + deviceModel, + systemName, + systemVersion + }; +} +function xUserAgent(ua, extra = {}) { + const info = parseDeviceFromUA(ua); + return [ + extra.devID ? `DevID=${clean(extra.devID)}` : "", + `DevType=${clean(info.devType)}`, + `SysType=${info.sysType}`, + `Ver=${clean(APP_VER)}`, + `BuildID=${clean(info.buildID) || "web"}`, + `device_brand=${clean(info.deviceBrand)}`, + `device_model=${clean(info.deviceModel)}`, + `system_name=${clean(info.systemName)}`, + `system_version=${clean(info.systemVersion)}`, + `sid=${clean(extra.sid || "")}` + ].filter((part)=>part !== "").join(";"); +} +function sessionId(source) { + const cookies = new Map((source.get("cookie") || "").split(";").map((value)=>{ + const index = value.indexOf("="); + if (index < 0) return [ + "", + "" + ]; + return [ + value.slice(0, index).trim(), + value.slice(index + 1).trim() + ]; + })); + const sid = cookies.get("sid"); + if (sid) return sid; + const token = cookies.get("_s_token_") || ""; + if (token.startsWith("{")) { + try { + return String(JSON.parse(token).sid || ""); + } catch { + /* ignore */ } + } + return token; +} +function buildBrowserApiHeaders(devID = "", sid = "") { + const ua = typeof navigator !== "undefined" ? navigator.userAgent : ""; + return { + "X-User-Agent": xUserAgent(ua, { + devID, + sid + }) + }; +} +function clientIp(source, fallback = "") { + const candidates = [ + source.get("x-real-ip"), + source.get("x-forwarded-for")?.split(",")[0], + fallback + ]; + for (const value of candidates){ + const ip = value?.trim() || ""; + if (ip && isIP(ip)) return ip; + } + return ""; +} +function clientHeaders(source, overrides = {}) { + const result = {}; + const ua = (overrides.userAgent || source?.get("user-agent") || "").trim(); + if (ua) result["User-Agent"] = ua; + const incomingXua = source?.get("x-user-agent")?.trim() || ""; + if (incomingXua) { + result["X-User-Agent"] = incomingXua; + } else if (ua) { + result["X-User-Agent"] = xUserAgent(ua, { + sid: source ? sessionId(source) : "" + }); + } else { + Object.assign(result, buildBrowserApiHeaders(overrides.devID || "web-ssr")); + } + const ip = overrides.clientIp || (source ? clientIp(source) : ""); + if (ip) result["X-Real-IP"] = ip; + return result; +} +}), +"[project]/src/lib/api/config.ts [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "API_BASE_URL", + ()=>API_BASE_URL, + "getServerApiBaseUrl", + ()=>getServerApiBaseUrl, + "pointsAtThisServer", + ()=>pointsAtThisServer +]); +/** + * 浏览器接口根地址。 + * 留空时走同域 `/api/*`,由服务端转到 API_PROXY_TARGET。 + */ const DEFAULT_UPSTREAM = "https://webhgbapi.mfcg.me"; +const raw = ("TURBOPACK compile-time value", ""); +const API_BASE_URL = (raw ?? "").replace(/\/$/, ""); +function pointsAtThisServer(base) { + try { + const url = new URL(base); + const loopback = url.hostname === "127.0.0.1" || url.hostname === "localhost" || url.hostname === "::1"; + if (!loopback) return false; + const port = url.port || (url.protocol === "https:" ? "443" : "80"); + const listen = process.env.PORT?.trim(); + return !listen || port === listen; + } catch { + return false; + } +} +function getServerApiBaseUrl() { + const proxy = process.env.API_PROXY_TARGET?.trim().replace(/\/$/, ""); + const configured = proxy || raw?.trim().replace(/\/$/, "") || ""; + if (configured && !pointsAtThisServer(configured)) return configured; + return DEFAULT_UPSTREAM; +} +}), +"[project]/src/lib/media/proxy.ts [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "proxyHls", + ()=>proxyHls, + "proxyKey", + ()=>proxyKey, + "stripEnkeySlash", + ()=>stripEnkeySlash +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2d$headers$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/client-headers.ts [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$config$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/config.ts [app-route] (ecmascript)"); +; +; +const FORWARD_HEADERS = [ + "range", + "if-range", + "accept", + "cookie" +]; +/** 正式服 app;H5 自指时代理会 508,密钥/媒资回退到这里。 */ const DEFAULT_MEDIA_API = "http://139.162.49.252:21036"; +/** config/info.mediaAppUsCdn;Go 未配 cdnDomain 时用它拉原始 m3u8 / 分片。 */ const DEFAULT_MEDIA_CDN = "https://dyum53hre43nj.cloudfront.net"; +function stripEnkeySlash(playlist) { + return playlist.replace(/enkey\/\?/g, "enkey?"); +} +function uniqBases(...values) { + const bases = []; + for (const value of values){ + const base = value?.trim().replace(/\/$/, "") || ""; + if (base && !bases.includes(base)) bases.push(base); + } + return bases; +} +/** + * 测试/预发常把 API_PROXY_TARGET 写成公开 H5 自身。 + * 媒资若再 fetch 该域名会打回本进程,请求挂死(线上表现为 /h5/m3u8 一直转圈)。 + */ function isSelfHostedMediaOrigin(base) { + try { + const host = new URL(base).hostname.toLowerCase(); + if (host === "127.0.0.1" || host === "localhost" || host === "::1") return true; + const site = ("TURBOPACK compile-time value", "http://localhost:26149")?.trim(); + if (site) { + try { + if (new URL(site).hostname.toLowerCase() === host) return true; + } catch { + /* ignore */ } + } + // 未配 SITE_URL 时,仍避开本项目常见公开 H5 域名 + if (host === "huangguoduanju.im" || host === "www.huangguoduanju.im") return true; + return false; + } catch { + return true; + } +} +/** 可安全直连的媒资 API(排除 H5 自指)。 */ function mediaApiOrigin() { + const dedicated = process.env.MEDIA_API_PROXY_TARGET?.trim().replace(/\/$/, ""); + if (dedicated && !isSelfHostedMediaOrigin(dedicated)) return dedicated; + const fromApi = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$config$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerApiBaseUrl"])(); + if (fromApi && !isSelfHostedMediaOrigin(fromApi)) return fromApi; + return DEFAULT_MEDIA_API; +} +/** 播放列表上游:只走 app 媒资 API,失败再 CDN 改写(绝不打回本站 H5)。 */ function mediaPlaylistBases() { + return uniqBases(mediaApiOrigin()); +} +/** 密钥上游:app 缺 m3u8.key 时可额外回退其它 H5(仍排除本站)。 */ function mediaKeyBases() { + const extras = (process.env.MEDIA_KEY_FALLBACK_ORIGINS || // app 缺 m3u8.key 时的临时回退;与 config/*.env 中 MEDIA_KEY_FALLBACK_ORIGINS 一致 + "https://91dj-h5.80sygtm.com").split(",").map((value)=>value.trim().replace(/\/$/, "")).filter((value)=>value && !isSelfHostedMediaOrigin(value)); + return uniqBases(mediaApiOrigin(), ...extras); +} +function mediaCdnOrigin() { + return (process.env.MEDIA_CDN_ORIGIN || DEFAULT_MEDIA_CDN).replace(/\/$/, ""); +} +function upstreamUrl(base, pathname, search) { + const target = new URL(base); + target.pathname = pathname; + target.search = search; + return target; +} +function forwardHeaders(request) { + const headers = new Headers(); + for (const name of FORWARD_HEADERS){ + const value = request.headers.get(name); + if (value) headers.set(name, value); + } + for (const [name, value] of Object.entries((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2d$headers$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["clientHeaders"])(request.headers))){ + headers.set(name, value); + } + if (!headers.has("accept")) headers.set("accept", "*/*"); + return headers; +} +function noStore(response) { + const headers = new Headers({ + "cache-control": "no-store" + }); + for (const name of [ + "content-type", + "content-length", + "content-range", + "accept-ranges" + ]){ + const value = response.headers.get(name); + if (value) headers.set(name, value); + } + return headers; +} +function isUnusableUpstream(status, body, contentType) { + if (status === 508) return true; + if (status >= 500) return true; + if (!body.startsWith("{")) return false; + if (!/json/i.test(contentType) && status === 200) return false; + try { + const payload = JSON.parse(body); + const code = payload.code ?? 0; + if (code && code !== 200) return true; + const msg = `${payload.data?.msg || ""} ${payload.msg || ""} ${payload.tip || ""}`; + return /cdnDomain|origDomain|文件服务器|代理回环/i.test(msg); + } catch { + return false; + } +} +function joinUrl(base, ...parts) { + const path = parts.map((part)=>part.replace(/^\/+|\/+$/g, "")).filter(Boolean).join("/"); + return `${base.replace(/\/$/, "")}/${path}`; +} +/** 上游 m3u8 不可用时:从媒资 CDN 拉原始列表,改写密钥与分片为同域可播地址。 */ async function transformPlaylistFromCdn(request) { + const incoming = new URL(request.url); + const rel = incoming.pathname.replace(/^\/h5\/m3u8\/?/i, "").replace(/^\/+/, ""); + if (!rel) return new Response("缺少媒资路径", { + status: 400, + headers: { + "cache-control": "no-store" + } + }); + const cdn = mediaCdnOrigin(); + const rawUrl = joinUrl(cdn, rel.split("?")[0]); + try { + const response = await fetch(rawUrl, { + headers: { + accept: "*/*", + "user-agent": request.headers.get("user-agent") || "Mozilla/5.0" + }, + cache: "no-store", + redirect: "follow", + signal: AbortSignal.timeout(20_000) + }); + if (!response.ok) { + return new Response("视频资源请求失败", { + status: 502, + headers: { + "cache-control": "no-store" + } + }); + } + const raw = await response.text(); + if (!raw.includes("#EXTM3U")) { + return new Response("视频资源格式错误", { + status: 502, + headers: { + "cache-control": "no-store" + } + }); + } + const keyUri = `/enkey${incoming.search || ""}`; + const dir = rel.includes("/") ? rel.slice(0, rel.lastIndexOf("/")) : ""; + const lines = raw.split(/\r?\n/).map((line)=>{ + const trimmed = line.trim(); + if (!trimmed) return line; + if (trimmed.startsWith("#EXT-X-KEY:")) { + return `#EXT-X-KEY:METHOD=AES-128,URI="${keyUri}"`; + } + if (trimmed.startsWith("#")) return line; + if (/^https?:\/\//i.test(trimmed)) return line; + const segment = trimmed.split("?")[0].replace(/^\/+/, ""); + return joinUrl(cdn, dir, segment); + }); + return new Response(stripEnkeySlash(lines.join("\n")), { + status: 200, + headers: { + "cache-control": "no-store", + "content-type": "application/vnd.apple.mpegurl" + } + }); + } catch { + return new Response("视频资源请求失败", { + status: 502, + headers: { + "cache-control": "no-store" + } + }); + } +} +async function proxyKey(request, pathname) { + const incoming = new URL(request.url); + const keyHeaders = new Headers({ + accept: "*/*" + }); + const ua = request.headers.get("user-agent"); + if (ua) keyHeaders.set("user-agent", ua); + for (const [name, value] of Object.entries((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2d$headers$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["clientHeaders"])(request.headers))){ + if (name === "User-Agent" || name === "X-User-Agent" || name === "X-Real-IP") { + keyHeaders.set(name, value); + } + } + for (const base of mediaKeyBases()){ + // 直接打带尾斜杠路径,避免 301 在部分运行时丢 query + const pathWithSlash = pathname.endsWith("/") ? pathname : `${pathname}/`; + const candidates = [ + pathWithSlash, + pathname + ]; + let gotKey = false; + for (const path of candidates){ + const target = upstreamUrl(base, path, incoming.search); + try { + const response = await fetch(target.href, { + headers: keyHeaders, + cache: "no-store", + redirect: "follow", + signal: AbortSignal.timeout(15_000) + }); + const type = response.headers.get("content-type") || ""; + const buffer = await response.arrayBuffer(); + if (response.ok && buffer.byteLength > 0 && !/json/i.test(type) && response.status !== 508) { + gotKey = true; + return new Response(buffer, { + status: 200, + headers: { + "cache-control": "no-store", + "content-type": type || "application/octet-stream" + } + }); + } + const text = new TextDecoder().decode(buffer); + if (!isUnusableUpstream(response.status, text, type) && /json/i.test(type)) { + // 明确业务错误且非「可换源」时仍试下一个源 + } + } catch { + /* try next path / base */ } + } + if (gotKey) break; + } + return new Response("视频密钥暂不可用", { + status: 502, + headers: { + "cache-control": "no-store" + } + }); +} +async function proxyHls(request) { + const incoming = new URL(request.url); + for (const base of mediaPlaylistBases()){ + const target = upstreamUrl(base, incoming.pathname, incoming.search); + try { + const response = await fetch(target, { + headers: forwardHeaders(request), + cache: "no-store", + redirect: "follow", + signal: AbortSignal.timeout(20_000) + }); + const type = response.headers.get("content-type") || ""; + const playlist = /\.m3u8$/i.test(incoming.pathname) || /mpegurl|m3u8/i.test(type); + if (!playlist) { + if (response.status === 508) continue; + return new Response(response.body, { + status: response.status, + headers: noStore(response) + }); + } + const text = await response.text(); + if (isUnusableUpstream(response.status, text, type) || !text.includes("#EXTM3U")) { + continue; + } + const headers = noStore(response); + headers.delete("content-length"); + if (!headers.has("content-type")) headers.set("content-type", "application/vnd.apple.mpegurl"); + return new Response(stripEnkeySlash(text), { + status: response.status, + headers + }); + } catch { + /* try next base / CDN fallback */ } + } + return transformPlaylistFromCdn(request); +} +}), +]})(), +"[externals]/crypto [external] (crypto, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("crypto", () => require("crypto")); + +module.exports = mod; +}), +"[externals]/next/dist/compiled/@opentelemetry/api [external] (next/dist/compiled/@opentelemetry/api, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/compiled/@opentelemetry/api", () => require("next/dist/compiled/@opentelemetry/api")); + +module.exports = mod; +}), +"[externals]/next/dist/compiled/next-server/app-page-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-page-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js")); + +module.exports = mod; +}), +"[externals]/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-route-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/compiled/next-server/app-route-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-route-turbo.runtime.dev.js")); + +module.exports = mod; +}), +"[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/server/app-render/work-async-storage.external.js", () => require("next/dist/server/app-render/work-async-storage.external.js")); + +module.exports = mod; +}), +"[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/server/app-render/work-unit-async-storage.external.js", () => require("next/dist/server/app-render/work-unit-async-storage.external.js")); + +module.exports = mod; +}), +"[externals]/next/dist/server/runtime-reacts.external.js [external] (next/dist/server/runtime-reacts.external.js, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/server/runtime-reacts.external.js", () => require("next/dist/server/runtime-reacts.external.js")); + +module.exports = mod; +}), +"[externals]/next/dist/shared/lib/no-fallback-error.external.js [external] (next/dist/shared/lib/no-fallback-error.external.js, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/shared/lib/no-fallback-error.external.js", () => require("next/dist/shared/lib/no-fallback-error.external.js")); + +module.exports = mod; +}), +"[externals]/node:stream [external] (node:stream, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("node:stream", () => require("node:stream")); + +module.exports = mod; +}), +"[externals]/path [external] (path, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("path", () => require("path")); + +module.exports = mod; +}), +]; + +//# sourceMappingURL=%5Broot-of-the-server%5D__1dpw5ck2p-gjg._.js.map \ No newline at end of file diff --git a/.next-dev/dev/server/chunks/[root-of-the-server]__1dpw5ck2p-gjg._.js.map b/.next-dev/dev/server/chunks/[root-of-the-server]__1dpw5ck2p-gjg._.js.map new file mode 100644 index 0000000..b271b9a --- /dev/null +++ b/.next-dev/dev/server/chunks/[root-of-the-server]__1dpw5ck2p-gjg._.js.map @@ -0,0 +1,9 @@ +{ + "version": 3, + "sources": [], + "sections": [ + {"offset": {"line": 5, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/app/h5/m3u8/[...path]/route.ts"],"sourcesContent":["import { proxyHls } from \"@/lib/media/proxy\";\n\n/** 同域 HLS 代理;上游不可用时回退 CDN 改写播放列表。 */\nexport function GET(request: Request) {\n return proxyHls(request);\n}\n"],"names":["GET","request"],"mappings":";;;;AAAA;;AAGO,SAASA,IAAIC,OAAgB;IAClC,OAAO,IAAA,0IAAQ,EAACA;AAClB"}}, + {"offset": {"line": 18, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/client-headers.ts"],"sourcesContent":["const APP_VER = process.env.NEXT_PUBLIC_APP_VERSION?.trim() || \"1.0.0\";\n\ntype HeaderSource = Pick;\n\nfunction clean(value: string) {\n return value.replace(/[^\\x20-\\x7E]|[;=]/g, \" \").trim();\n}\n\n/** 不依赖 node:net,避免被浏览器端打包。 */\nfunction isIP(value: string) {\n if (/^(?:\\d{1,3}\\.){3}\\d{1,3}$/.test(value)) {\n return value.split(\".\").every((part) => {\n const n = Number(part);\n return String(n) === part && n >= 0 && n <= 255;\n });\n }\n // 宽松校验 IPv6,够用来转发 X-Real-IP。\n return value.includes(\":\") && /^[0-9a-fA-F:.]+$/.test(value);\n}\n\nfunction sysType(ua: string) {\n const value = ua.toLowerCase();\n if (value.includes(\"android\")) return \"h5_android\";\n if (value.includes(\"iphone\") || value.includes(\"ipad\") || value.includes(\"ipod\")) return \"h5_ios\";\n return \"h5_pc\";\n}\n\nfunction guessAndroidBrand(model: string, ua: string) {\n const value = `${model} ${ua}`;\n const brands: Array<[RegExp, string]> = [\n [/Build\\/HONOR|\\bHONOR\\b/i, \"Honor\"],\n [/Build\\/HUAWEI|HUAWEI|HW-/i, \"Huawei\"],\n [/SM-|samsung|Galaxy/i, \"Samsung\"],\n [/Pixel/i, \"Google\"],\n [/Redmi|POCO|XiaoMi|\\bMi\\b/i, \"Xiaomi\"],\n [/OPPO|\\bCPH\\d{3,4}/i, \"OPPO\"],\n [/vivo|\\bV\\d{4}/i, \"vivo\"],\n [/OnePlus|ONEPLUS/i, \"OnePlus\"],\n [/realme|\\bRMX\\d{3,4}/i, \"realme\"],\n ];\n return brands.find(([pattern]) => pattern.test(value))?.[1] || \"\";\n}\n\nfunction parseBrowser(ua: string) {\n const edge = ua.match(/Edg\\/([\\d.]+)/i);\n if (edge) return `Edge ${edge[1]}`;\n const opera = ua.match(/(?:OPR|Opera)\\/([\\d.]+)/i);\n if (opera) return `Opera ${opera[1]}`;\n const chrome = ua.match(/Chrome\\/([\\d.]+)/i);\n if (chrome && !/Edg\\//i.test(ua)) return `Chrome ${chrome[1]}`;\n const safari = ua.match(/Version\\/([\\d.]+).*Safari/i);\n if (safari) return `Safari ${safari[1]}`;\n const firefox = ua.match(/Firefox\\/([\\d.]+)/i);\n if (firefox) return `Firefox ${firefox[1]}`;\n const ie = ua.match(/(?:MSIE\\s|Trident.*rv:)([\\d.]+)/i);\n if (ie) return `IE ${ie[1]}`;\n return \"\";\n}\n\ntype DeviceProfile = {\n devType: string;\n sysType: \"h5_ios\" | \"h5_android\" | \"h5_pc\";\n buildID: string;\n deviceBrand: string;\n deviceModel: string;\n systemName: string;\n systemVersion: string;\n};\n\n/** 从浏览器 User-Agent 解析设备公共字段,口径对齐 jha-1040 useragent.ParseDeviceFromUA。 */\nfunction parseDeviceFromUA(ua: string): DeviceProfile {\n const raw = ua.trim();\n let deviceBrand = \"\";\n let deviceModel = \"\";\n let deviceType = \"desktop\";\n let systemName = \"Other\";\n let systemVersion = \"\";\n\n if (/iPhone|iPad|iPod/i.test(raw)) {\n systemName = \"iOS\";\n deviceBrand = \"Apple\";\n const ios = raw.match(/OS (\\d+[_\\d]*) like Mac OS X/i);\n if (ios) systemVersion = ios[1].replace(/_/g, \".\");\n if (/iPad/i.test(raw)) {\n deviceModel = \"iPad\";\n deviceType = \"tablet\";\n } else if (/iPod/i.test(raw)) {\n deviceModel = \"iPod\";\n deviceType = \"mobile\";\n } else {\n deviceModel = \"iPhone\";\n deviceType = \"mobile\";\n }\n } else if (/Android/i.test(raw)) {\n systemName = \"Android\";\n const version = raw.match(/Android ([\\d.]+)/i);\n if (version) systemVersion = version[1];\n const model = raw.match(/Android\\s+[\\d.]+;\\s*([^;)]+?)(?:\\s+Build\\/|\\))/i);\n if (model?.[1]) deviceModel = model[1].trim();\n deviceBrand = guessAndroidBrand(deviceModel, raw);\n deviceType = /Mobile/i.test(raw) ? \"mobile\" : \"tablet\";\n } else if (/Windows/i.test(raw)) {\n systemName = \"Windows\";\n const win = raw.match(/Windows NT ([\\d.]+)/i);\n if (win) systemVersion = win[1];\n } else if (/Mac OS X|Macintosh/i.test(raw)) {\n systemName = \"macOS\";\n deviceBrand = \"Apple\";\n deviceModel = \"Mac\";\n const mac = raw.match(/Mac OS X ([\\d_]+)/i);\n if (mac) systemVersion = mac[1].replace(/_/g, \".\");\n } else if (/Linux/i.test(raw)) {\n systemName = \"Linux\";\n }\n\n const devType = [deviceBrand, deviceModel, deviceType].map((part) => part.trim()).filter(Boolean).join(\" \");\n return {\n devType: devType || \"desktop\",\n sysType: sysType(raw),\n buildID: clean(parseBrowser(raw)) || \"web\",\n deviceBrand,\n deviceModel,\n systemName,\n systemVersion,\n };\n}\n\nfunction xUserAgent(ua: string, extra: { devID?: string; sid?: string } = {}) {\n const info = parseDeviceFromUA(ua);\n return [\n extra.devID ? `DevID=${clean(extra.devID)}` : \"\",\n `DevType=${clean(info.devType)}`,\n `SysType=${info.sysType}`,\n `Ver=${clean(APP_VER)}`,\n `BuildID=${clean(info.buildID) || \"web\"}`,\n `device_brand=${clean(info.deviceBrand)}`,\n `device_model=${clean(info.deviceModel)}`,\n `system_name=${clean(info.systemName)}`,\n `system_version=${clean(info.systemVersion)}`,\n `sid=${clean(extra.sid || \"\")}`,\n ]\n .filter((part) => part !== \"\")\n .join(\";\");\n}\n\nfunction sessionId(source: HeaderSource) {\n const cookies = new Map(\n (source.get(\"cookie\") || \"\").split(\";\").map((value) => {\n const index = value.indexOf(\"=\");\n if (index < 0) return [\"\", \"\"];\n return [value.slice(0, index).trim(), value.slice(index + 1).trim()];\n }),\n );\n const sid = cookies.get(\"sid\");\n if (sid) return sid;\n const token = cookies.get(\"_s_token_\") || \"\";\n if (token.startsWith(\"{\")) {\n try {\n return String(JSON.parse(token).sid || \"\");\n } catch {\n /* ignore */\n }\n }\n return token;\n}\n\n/** 浏览器请求只带 X-User-Agent。User-Agent 由浏览器自己发,不在前端伪造。 */\nexport function buildBrowserApiHeaders(devID = \"\", sid = \"\") {\n const ua = typeof navigator !== \"undefined\" ? navigator.userAgent : \"\";\n return { \"X-User-Agent\": xUserAgent(ua, { devID, sid }) };\n}\n\n/** 从请求头解析客户端 IP,优先 X-Real-IP,其次 X-Forwarded-For 第一段。 */\nexport function clientIp(source: HeaderSource, fallback = \"\") {\n const candidates = [source.get(\"x-real-ip\"), source.get(\"x-forwarded-for\")?.split(\",\")[0], fallback];\n for (const value of candidates) {\n const ip = value?.trim() || \"\";\n if (ip && isIP(ip)) return ip;\n }\n return \"\";\n}\n\n/**\n * 服务端转给上游的身份头:保留浏览器 User-Agent / X-User-Agent,并补上 X-Real-IP。\n * 没有浏览器上下文时回退到合成 X-User-Agent。\n */\nexport function clientHeaders(\n source?: HeaderSource,\n overrides: { userAgent?: string; clientIp?: string; devID?: string } = {},\n): Record {\n const result: Record = {};\n const ua = (overrides.userAgent || source?.get(\"user-agent\") || \"\").trim();\n if (ua) result[\"User-Agent\"] = ua;\n\n const incomingXua = source?.get(\"x-user-agent\")?.trim() || \"\";\n if (incomingXua) {\n result[\"X-User-Agent\"] = incomingXua;\n } else if (ua) {\n result[\"X-User-Agent\"] = xUserAgent(ua, { sid: source ? sessionId(source) : \"\" });\n } else {\n Object.assign(result, buildBrowserApiHeaders(overrides.devID || \"web-ssr\"));\n }\n\n const ip = overrides.clientIp || (source ? clientIp(source) : \"\");\n if (ip) result[\"X-Real-IP\"] = ip;\n\n return result;\n}\n"],"names":["APP_VER","trim","clean","value","replace","isIP","test","split","every","part","n","Number","String","includes","sysType","ua","toLowerCase","guessAndroidBrand","model","brands","find","pattern","parseBrowser","edge","match","opera","chrome","safari","firefox","ie","parseDeviceFromUA","raw","deviceBrand","deviceModel","deviceType","systemName","systemVersion","ios","version","win","mac","devType","map","filter","Boolean","join","buildID","xUserAgent","extra","info","devID","sid","sessionId","source","cookies","Map","get","index","indexOf","slice","token","startsWith","JSON","parse","buildBrowserApiHeaders","navigator","userAgent","clientIp","fallback","candidates","ip","clientHeaders","overrides","result","incomingXua","Object","assign"],"mappings":"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"}}, + {"offset": {"line": 242, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/config.ts"],"sourcesContent":["/**\n * 浏览器接口根地址。\n * 留空时走同域 `/api/*`,由服务端转到 API_PROXY_TARGET。\n */\nconst DEFAULT_UPSTREAM = \"https://webhgbapi.mfcg.me\";\nconst raw = process.env.NEXT_PUBLIC_API_BASE_URL;\nexport const API_BASE_URL = (raw ?? \"\").replace(/\\/$/, \"\");\n\n/** 代理目标指回当前 Node 进程时,请求会打到自己,发布后接口表现为不通。 */\nexport function pointsAtThisServer(base: string) {\n try {\n const url = new URL(base);\n const loopback = url.hostname === \"127.0.0.1\" || url.hostname === \"localhost\" || url.hostname === \"::1\";\n if (!loopback) return false;\n const port = url.port || (url.protocol === \"https:\" ? \"443\" : \"80\");\n const listen = process.env.PORT?.trim();\n return !listen || port === listen;\n } catch {\n return false;\n }\n}\n\n/** 服务端直连上游(相对路径在 Node fetch 中不可用) */\nexport function getServerApiBaseUrl() {\n const proxy = process.env.API_PROXY_TARGET?.trim().replace(/\\/$/, \"\");\n const configured = proxy || raw?.trim().replace(/\\/$/, \"\") || \"\";\n if (configured && !pointsAtThisServer(configured)) return configured;\n return DEFAULT_UPSTREAM;\n}\n"],"names":["DEFAULT_UPSTREAM","raw","API_BASE_URL","replace","pointsAtThisServer","base","url","URL","loopback","hostname","port","protocol","listen","process","env","PORT","trim","getServerApiBaseUrl","proxy","API_PROXY_TARGET","configured"],"mappings":";;;;;;;;AAAA;;;CAGC,GACD,MAAMA,mBAAmB;AACzB,MAAMC;AACC,MAAMC,eAAe,CAACD,OAAO,EAAE,EAAEE,OAAO,CAAC,OAAO;AAGhD,SAASC,mBAAmBC,IAAY;IAC7C,IAAI;QACF,MAAMC,MAAM,IAAIC,IAAIF;QACpB,MAAMG,WAAWF,IAAIG,QAAQ,KAAK,eAAeH,IAAIG,QAAQ,KAAK,eAAeH,IAAIG,QAAQ,KAAK;QAClG,IAAI,CAACD,UAAU,OAAO;QACtB,MAAME,OAAOJ,IAAII,IAAI,IAAI,CAACJ,IAAIK,QAAQ,KAAK,WAAW,QAAQ,IAAI;QAClE,MAAMC,SAASC,QAAQC,GAAG,CAACC,IAAI,EAAEC;QACjC,OAAO,CAACJ,UAAUF,SAASE;IAC7B,EAAE,OAAM;QACN,OAAO;IACT;AACF;AAGO,SAASK;IACd,MAAMC,QAAQL,QAAQC,GAAG,CAACK,gBAAgB,EAAEH,OAAOb,QAAQ,OAAO;IAClE,MAAMiB,aAAaF,SAASjB,KAAKe,OAAOb,QAAQ,OAAO,OAAO;IAC9D,IAAIiB,cAAc,CAAChB,mBAAmBgB,aAAa,OAAOA;IAC1D,OAAOpB;AACT"}}, + {"offset": {"line": 278, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/media/proxy.ts"],"sourcesContent":["import { clientHeaders } from \"@/lib/api/client-headers\";\nimport { getServerApiBaseUrl } from \"@/lib/api/config\";\n\nconst FORWARD_HEADERS = [\"range\", \"if-range\", \"accept\", \"cookie\"];\n\n/** 正式服 app;H5 自指时代理会 508,密钥/媒资回退到这里。 */\nconst DEFAULT_MEDIA_API = \"http://139.162.49.252:21036\";\n/** config/info.mediaAppUsCdn;Go 未配 cdnDomain 时用它拉原始 m3u8 / 分片。 */\nconst DEFAULT_MEDIA_CDN = \"https://dyum53hre43nj.cloudfront.net\";\n\n/** 密钥地址去掉 enkey 与查询串之间的斜杠:enkey/?id= → enkey?id=(newenkey 同样适用)。 */\nexport function stripEnkeySlash(playlist: string) {\n return playlist.replace(/enkey\\/\\?/g, \"enkey?\");\n}\n\nfunction uniqBases(...values: Array) {\n const bases: string[] = [];\n for (const value of values) {\n const base = value?.trim().replace(/\\/$/, \"\") || \"\";\n if (base && !bases.includes(base)) bases.push(base);\n }\n return bases;\n}\n\n/**\n * 测试/预发常把 API_PROXY_TARGET 写成公开 H5 自身。\n * 媒资若再 fetch 该域名会打回本进程,请求挂死(线上表现为 /h5/m3u8 一直转圈)。\n */\nfunction isSelfHostedMediaOrigin(base: string) {\n try {\n const host = new URL(base).hostname.toLowerCase();\n if (host === \"127.0.0.1\" || host === \"localhost\" || host === \"::1\") return true;\n\n const site = process.env.NEXT_PUBLIC_SITE_URL?.trim();\n if (site) {\n try {\n if (new URL(site).hostname.toLowerCase() === host) return true;\n } catch {\n /* ignore */\n }\n }\n\n // 未配 SITE_URL 时,仍避开本项目常见公开 H5 域名\n if (host === \"huangguoduanju.im\" || host === \"www.huangguoduanju.im\") return true;\n return false;\n } catch {\n return true;\n }\n}\n\n/** 可安全直连的媒资 API(排除 H5 自指)。 */\nfunction mediaApiOrigin() {\n const dedicated = process.env.MEDIA_API_PROXY_TARGET?.trim().replace(/\\/$/, \"\");\n if (dedicated && !isSelfHostedMediaOrigin(dedicated)) return dedicated;\n\n const fromApi = getServerApiBaseUrl();\n if (fromApi && !isSelfHostedMediaOrigin(fromApi)) return fromApi;\n\n return DEFAULT_MEDIA_API;\n}\n\n/** 播放列表上游:只走 app 媒资 API,失败再 CDN 改写(绝不打回本站 H5)。 */\nfunction mediaPlaylistBases() {\n return uniqBases(mediaApiOrigin());\n}\n\n/** 密钥上游:app 缺 m3u8.key 时可额外回退其它 H5(仍排除本站)。 */\nfunction mediaKeyBases() {\n const extras = (\n process.env.MEDIA_KEY_FALLBACK_ORIGINS ||\n // app 缺 m3u8.key 时的临时回退;与 config/*.env 中 MEDIA_KEY_FALLBACK_ORIGINS 一致\n \"https://91dj-h5.80sygtm.com\"\n )\n .split(\",\")\n .map((value) => value.trim().replace(/\\/$/, \"\"))\n .filter((value) => value && !isSelfHostedMediaOrigin(value));\n return uniqBases(mediaApiOrigin(), ...extras);\n}\n\nfunction mediaCdnOrigin() {\n return (process.env.MEDIA_CDN_ORIGIN || DEFAULT_MEDIA_CDN).replace(/\\/$/, \"\");\n}\n\nfunction upstreamUrl(base: string, pathname: string, search: string) {\n const target = new URL(base);\n target.pathname = pathname;\n target.search = search;\n return target;\n}\n\nfunction forwardHeaders(request: Request) {\n const headers = new Headers();\n for (const name of FORWARD_HEADERS) {\n const value = request.headers.get(name);\n if (value) headers.set(name, value);\n }\n for (const [name, value] of Object.entries(clientHeaders(request.headers))) {\n headers.set(name, value);\n }\n if (!headers.has(\"accept\")) headers.set(\"accept\", \"*/*\");\n return headers;\n}\n\nfunction noStore(response: Response) {\n const headers = new Headers({ \"cache-control\": \"no-store\" });\n for (const name of [\"content-type\", \"content-length\", \"content-range\", \"accept-ranges\"]) {\n const value = response.headers.get(name);\n if (value) headers.set(name, value);\n }\n return headers;\n}\n\nfunction isUnusableUpstream(status: number, body: string, contentType: string) {\n if (status === 508) return true;\n if (status >= 500) return true;\n if (!body.startsWith(\"{\")) return false;\n if (!/json/i.test(contentType) && status === 200) return false;\n try {\n const payload = JSON.parse(body) as {\n code?: number;\n data?: { msg?: string; code?: number };\n msg?: string;\n tip?: string;\n };\n const code = payload.code ?? 0;\n if (code && code !== 200) return true;\n const msg = `${payload.data?.msg || \"\"} ${payload.msg || \"\"} ${payload.tip || \"\"}`;\n return /cdnDomain|origDomain|文件服务器|代理回环/i.test(msg);\n } catch {\n return false;\n }\n}\n\nfunction joinUrl(base: string, ...parts: string[]) {\n const path = parts\n .map((part) => part.replace(/^\\/+|\\/+$/g, \"\"))\n .filter(Boolean)\n .join(\"/\");\n return `${base.replace(/\\/$/, \"\")}/${path}`;\n}\n\n/** 上游 m3u8 不可用时:从媒资 CDN 拉原始列表,改写密钥与分片为同域可播地址。 */\nasync function transformPlaylistFromCdn(request: Request) {\n const incoming = new URL(request.url);\n const rel = incoming.pathname.replace(/^\\/h5\\/m3u8\\/?/i, \"\").replace(/^\\/+/, \"\");\n if (!rel) return new Response(\"缺少媒资路径\", { status: 400, headers: { \"cache-control\": \"no-store\" } });\n\n const cdn = mediaCdnOrigin();\n const rawUrl = joinUrl(cdn, rel.split(\"?\")[0]);\n try {\n const response = await fetch(rawUrl, {\n headers: { accept: \"*/*\", \"user-agent\": request.headers.get(\"user-agent\") || \"Mozilla/5.0\" },\n cache: \"no-store\",\n redirect: \"follow\",\n signal: AbortSignal.timeout(20_000),\n });\n if (!response.ok) {\n return new Response(\"视频资源请求失败\", { status: 502, headers: { \"cache-control\": \"no-store\" } });\n }\n const raw = await response.text();\n if (!raw.includes(\"#EXTM3U\")) {\n return new Response(\"视频资源格式错误\", { status: 502, headers: { \"cache-control\": \"no-store\" } });\n }\n\n const keyUri = `/enkey${incoming.search || \"\"}`;\n const dir = rel.includes(\"/\") ? rel.slice(0, rel.lastIndexOf(\"/\")) : \"\";\n const lines = raw.split(/\\r?\\n/).map((line) => {\n const trimmed = line.trim();\n if (!trimmed) return line;\n if (trimmed.startsWith(\"#EXT-X-KEY:\")) {\n return `#EXT-X-KEY:METHOD=AES-128,URI=\"${keyUri}\"`;\n }\n if (trimmed.startsWith(\"#\")) return line;\n if (/^https?:\\/\\//i.test(trimmed)) return line;\n const segment = trimmed.split(\"?\")[0].replace(/^\\/+/, \"\");\n return joinUrl(cdn, dir, segment);\n });\n\n return new Response(stripEnkeySlash(lines.join(\"\\n\")), {\n status: 200,\n headers: {\n \"cache-control\": \"no-store\",\n \"content-type\": \"application/vnd.apple.mpegurl\",\n },\n });\n } catch {\n return new Response(\"视频资源请求失败\", { status: 502, headers: { \"cache-control\": \"no-store\" } });\n }\n}\n\n/** 密钥:浏览器始终访问 /enkey?id=;服务端跟随上游尾斜杠重定向。 */\nexport async function proxyKey(request: Request, pathname: \"/enkey\" | \"/newenkey\") {\n const incoming = new URL(request.url);\n const keyHeaders = new Headers({ accept: \"*/*\" });\n const ua = request.headers.get(\"user-agent\");\n if (ua) keyHeaders.set(\"user-agent\", ua);\n for (const [name, value] of Object.entries(clientHeaders(request.headers))) {\n if (name === \"User-Agent\" || name === \"X-User-Agent\" || name === \"X-Real-IP\") {\n keyHeaders.set(name, value);\n }\n }\n\n for (const base of mediaKeyBases()) {\n // 直接打带尾斜杠路径,避免 301 在部分运行时丢 query\n const pathWithSlash = pathname.endsWith(\"/\") ? pathname : `${pathname}/`;\n const candidates = [pathWithSlash, pathname];\n let gotKey = false;\n for (const path of candidates) {\n const target = upstreamUrl(base, path, incoming.search);\n try {\n const response = await fetch(target.href, {\n headers: keyHeaders,\n cache: \"no-store\",\n redirect: \"follow\",\n signal: AbortSignal.timeout(15_000),\n });\n const type = response.headers.get(\"content-type\") || \"\";\n const buffer = await response.arrayBuffer();\n if (response.ok && buffer.byteLength > 0 && !/json/i.test(type) && response.status !== 508) {\n gotKey = true;\n return new Response(buffer, {\n status: 200,\n headers: {\n \"cache-control\": \"no-store\",\n \"content-type\": type || \"application/octet-stream\",\n },\n });\n }\n const text = new TextDecoder().decode(buffer);\n if (!isUnusableUpstream(response.status, text, type) && /json/i.test(type)) {\n // 明确业务错误且非「可换源」时仍试下一个源\n }\n } catch {\n /* try next path / base */\n }\n }\n if (gotKey) break;\n }\n\n return new Response(\"视频密钥暂不可用\", { status: 502, headers: { \"cache-control\": \"no-store\" } });\n}\n\n/** 同域 HLS。优先上游;H5 自指 508 / Go 未配域名时回退 CDN 改写。 */\nexport async function proxyHls(request: Request) {\n const incoming = new URL(request.url);\n for (const base of mediaPlaylistBases()) {\n const target = upstreamUrl(base, incoming.pathname, incoming.search);\n try {\n const response = await fetch(target, {\n headers: forwardHeaders(request),\n cache: \"no-store\",\n redirect: \"follow\",\n signal: AbortSignal.timeout(20_000),\n });\n const type = response.headers.get(\"content-type\") || \"\";\n const playlist = /\\.m3u8$/i.test(incoming.pathname) || /mpegurl|m3u8/i.test(type);\n if (!playlist) {\n if (response.status === 508) continue;\n return new Response(response.body, { status: response.status, headers: noStore(response) });\n }\n const text = await response.text();\n if (isUnusableUpstream(response.status, text, type) || !text.includes(\"#EXTM3U\")) {\n continue;\n }\n const headers = noStore(response);\n headers.delete(\"content-length\");\n if (!headers.has(\"content-type\")) headers.set(\"content-type\", \"application/vnd.apple.mpegurl\");\n return new Response(stripEnkeySlash(text), { status: response.status, headers });\n } catch {\n /* try next base / CDN fallback */\n }\n }\n\n return transformPlaylistFromCdn(request);\n}\n"],"names":["FORWARD_HEADERS","DEFAULT_MEDIA_API","DEFAULT_MEDIA_CDN","stripEnkeySlash","playlist","replace","uniqBases","values","bases","value","base","trim","includes","push","isSelfHostedMediaOrigin","host","URL","hostname","toLowerCase","site","mediaApiOrigin","dedicated","process","env","MEDIA_API_PROXY_TARGET","fromApi","mediaPlaylistBases","mediaKeyBases","extras","MEDIA_KEY_FALLBACK_ORIGINS","split","map","filter","mediaCdnOrigin","MEDIA_CDN_ORIGIN","upstreamUrl","pathname","search","target","forwardHeaders","request","headers","Headers","name","get","set","Object","entries","has","noStore","response","isUnusableUpstream","status","body","contentType","startsWith","test","payload","JSON","parse","code","msg","data","tip","joinUrl","parts","path","part","Boolean","join","transformPlaylistFromCdn","incoming","url","rel","Response","cdn","rawUrl","fetch","accept","cache","redirect","signal","AbortSignal","timeout","ok","raw","text","keyUri","dir","slice","lastIndexOf","lines","line","trimmed","segment","proxyKey","keyHeaders","ua","pathWithSlash","endsWith","candidates","gotKey","href","type","buffer","arrayBuffer","byteLength","TextDecoder","decode","proxyHls","delete"],"mappings":"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"}}] +} \ No newline at end of file diff --git a/.next-dev/dev/server/chunks/[root-of-the-server]__1uwtrlk1gqp4t._.js b/.next-dev/dev/server/chunks/[root-of-the-server]__1uwtrlk1gqp4t._.js index 2e4e0fd..eedd842 100644 --- a/.next-dev/dev/server/chunks/[root-of-the-server]__1uwtrlk1gqp4t._.js +++ b/.next-dev/dev/server/chunks/[root-of-the-server]__1uwtrlk1gqp4t._.js @@ -259,7 +259,7 @@ __turbopack_context__.s([ /** * 浏览器接口根地址。 * 留空时走同域 `/api/*`,由服务端转到 API_PROXY_TARGET。 - */ const DEFAULT_UPSTREAM = "https://sgdj-h5.80sygtm.com"; + */ const DEFAULT_UPSTREAM = "https://webhgbapi.mfcg.me"; const raw = ("TURBOPACK compile-time value", ""); const API_BASE_URL = (raw ?? "").replace(/\/$/, ""); function pointsAtThisServer(base) { diff --git a/.next-dev/dev/server/chunks/[root-of-the-server]__1uwtrlk1gqp4t._.js.map b/.next-dev/dev/server/chunks/[root-of-the-server]__1uwtrlk1gqp4t._.js.map index e2c51aa..f5aac6d 100644 --- a/.next-dev/dev/server/chunks/[root-of-the-server]__1uwtrlk1gqp4t._.js.map +++ b/.next-dev/dev/server/chunks/[root-of-the-server]__1uwtrlk1gqp4t._.js.map @@ -4,6 +4,6 @@ "sections": [ {"offset": {"line": 5, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/app/api/[...path]/route.ts"],"sourcesContent":["import { createUpstreamHandlers } from \"@/lib/api/upstream-proxy\";\n\nexport const { GET, POST, PUT, PATCH, DELETE, HEAD } = createUpstreamHandlers(\"/api\");\n"],"names":["GET","POST","PUT","PATCH","DELETE","HEAD"],"mappings":";;;;;;;;;;;;;;AAAA;;AAEO,MAAM,EAAEA,GAAG,EAAEC,IAAI,EAAEC,GAAG,EAAEC,KAAK,EAAEC,MAAM,EAAEC,IAAI,EAAE,GAAG,IAAA,kKAAsB,EAAC"}}, {"offset": {"line": 26, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/client-headers.ts"],"sourcesContent":["const APP_VER = process.env.NEXT_PUBLIC_APP_VERSION?.trim() || \"1.0.0\";\n\ntype HeaderSource = Pick;\n\nfunction clean(value: string) {\n return value.replace(/[^\\x20-\\x7E]|[;=]/g, \" \").trim();\n}\n\n/** 不依赖 node:net,避免被浏览器端打包。 */\nfunction isIP(value: string) {\n if (/^(?:\\d{1,3}\\.){3}\\d{1,3}$/.test(value)) {\n return value.split(\".\").every((part) => {\n const n = Number(part);\n return String(n) === part && n >= 0 && n <= 255;\n });\n }\n // 宽松校验 IPv6,够用来转发 X-Real-IP。\n return value.includes(\":\") && /^[0-9a-fA-F:.]+$/.test(value);\n}\n\nfunction sysType(ua: string) {\n const value = ua.toLowerCase();\n if (value.includes(\"android\")) return \"h5_android\";\n if (value.includes(\"iphone\") || value.includes(\"ipad\") || value.includes(\"ipod\")) return \"h5_ios\";\n return \"h5_pc\";\n}\n\nfunction guessAndroidBrand(model: string, ua: string) {\n const value = `${model} ${ua}`;\n const brands: Array<[RegExp, string]> = [\n [/Build\\/HONOR|\\bHONOR\\b/i, \"Honor\"],\n [/Build\\/HUAWEI|HUAWEI|HW-/i, \"Huawei\"],\n [/SM-|samsung|Galaxy/i, \"Samsung\"],\n [/Pixel/i, \"Google\"],\n [/Redmi|POCO|XiaoMi|\\bMi\\b/i, \"Xiaomi\"],\n [/OPPO|\\bCPH\\d{3,4}/i, \"OPPO\"],\n [/vivo|\\bV\\d{4}/i, \"vivo\"],\n [/OnePlus|ONEPLUS/i, \"OnePlus\"],\n [/realme|\\bRMX\\d{3,4}/i, \"realme\"],\n ];\n return brands.find(([pattern]) => pattern.test(value))?.[1] || \"\";\n}\n\nfunction parseBrowser(ua: string) {\n const edge = ua.match(/Edg\\/([\\d.]+)/i);\n if (edge) return `Edge ${edge[1]}`;\n const opera = ua.match(/(?:OPR|Opera)\\/([\\d.]+)/i);\n if (opera) return `Opera ${opera[1]}`;\n const chrome = ua.match(/Chrome\\/([\\d.]+)/i);\n if (chrome && !/Edg\\//i.test(ua)) return `Chrome ${chrome[1]}`;\n const safari = ua.match(/Version\\/([\\d.]+).*Safari/i);\n if (safari) return `Safari ${safari[1]}`;\n const firefox = ua.match(/Firefox\\/([\\d.]+)/i);\n if (firefox) return `Firefox ${firefox[1]}`;\n const ie = ua.match(/(?:MSIE\\s|Trident.*rv:)([\\d.]+)/i);\n if (ie) return `IE ${ie[1]}`;\n return \"\";\n}\n\ntype DeviceProfile = {\n devType: string;\n sysType: \"h5_ios\" | \"h5_android\" | \"h5_pc\";\n buildID: string;\n deviceBrand: string;\n deviceModel: string;\n systemName: string;\n systemVersion: string;\n};\n\n/** 从浏览器 User-Agent 解析设备公共字段,口径对齐 jha-1040 useragent.ParseDeviceFromUA。 */\nfunction parseDeviceFromUA(ua: string): DeviceProfile {\n const raw = ua.trim();\n let deviceBrand = \"\";\n let deviceModel = \"\";\n let deviceType = \"desktop\";\n let systemName = \"Other\";\n let systemVersion = \"\";\n\n if (/iPhone|iPad|iPod/i.test(raw)) {\n systemName = \"iOS\";\n deviceBrand = \"Apple\";\n const ios = raw.match(/OS (\\d+[_\\d]*) like Mac OS X/i);\n if (ios) systemVersion = ios[1].replace(/_/g, \".\");\n if (/iPad/i.test(raw)) {\n deviceModel = \"iPad\";\n deviceType = \"tablet\";\n } else if (/iPod/i.test(raw)) {\n deviceModel = \"iPod\";\n deviceType = \"mobile\";\n } else {\n deviceModel = \"iPhone\";\n deviceType = \"mobile\";\n }\n } else if (/Android/i.test(raw)) {\n systemName = \"Android\";\n const version = raw.match(/Android ([\\d.]+)/i);\n if (version) systemVersion = version[1];\n const model = raw.match(/Android\\s+[\\d.]+;\\s*([^;)]+?)(?:\\s+Build\\/|\\))/i);\n if (model?.[1]) deviceModel = model[1].trim();\n deviceBrand = guessAndroidBrand(deviceModel, raw);\n deviceType = /Mobile/i.test(raw) ? \"mobile\" : \"tablet\";\n } else if (/Windows/i.test(raw)) {\n systemName = \"Windows\";\n const win = raw.match(/Windows NT ([\\d.]+)/i);\n if (win) systemVersion = win[1];\n } else if (/Mac OS X|Macintosh/i.test(raw)) {\n systemName = \"macOS\";\n deviceBrand = \"Apple\";\n deviceModel = \"Mac\";\n const mac = raw.match(/Mac OS X ([\\d_]+)/i);\n if (mac) systemVersion = mac[1].replace(/_/g, \".\");\n } else if (/Linux/i.test(raw)) {\n systemName = \"Linux\";\n }\n\n const devType = [deviceBrand, deviceModel, deviceType].map((part) => part.trim()).filter(Boolean).join(\" \");\n return {\n devType: devType || \"desktop\",\n sysType: sysType(raw),\n buildID: clean(parseBrowser(raw)) || \"web\",\n deviceBrand,\n deviceModel,\n systemName,\n systemVersion,\n };\n}\n\nfunction xUserAgent(ua: string, extra: { devID?: string; sid?: string } = {}) {\n const info = parseDeviceFromUA(ua);\n return [\n extra.devID ? `DevID=${clean(extra.devID)}` : \"\",\n `DevType=${clean(info.devType)}`,\n `SysType=${info.sysType}`,\n `Ver=${clean(APP_VER)}`,\n `BuildID=${clean(info.buildID) || \"web\"}`,\n `device_brand=${clean(info.deviceBrand)}`,\n `device_model=${clean(info.deviceModel)}`,\n `system_name=${clean(info.systemName)}`,\n `system_version=${clean(info.systemVersion)}`,\n `sid=${clean(extra.sid || \"\")}`,\n ]\n .filter((part) => part !== \"\")\n .join(\";\");\n}\n\nfunction sessionId(source: HeaderSource) {\n const cookies = new Map(\n (source.get(\"cookie\") || \"\").split(\";\").map((value) => {\n const index = value.indexOf(\"=\");\n if (index < 0) return [\"\", \"\"];\n return [value.slice(0, index).trim(), value.slice(index + 1).trim()];\n }),\n );\n const sid = cookies.get(\"sid\");\n if (sid) return sid;\n const token = cookies.get(\"_s_token_\") || \"\";\n if (token.startsWith(\"{\")) {\n try {\n return String(JSON.parse(token).sid || \"\");\n } catch {\n /* ignore */\n }\n }\n return token;\n}\n\n/** 浏览器请求只带 X-User-Agent。User-Agent 由浏览器自己发,不在前端伪造。 */\nexport function buildBrowserApiHeaders(devID = \"\", sid = \"\") {\n const ua = typeof navigator !== \"undefined\" ? navigator.userAgent : \"\";\n return { \"X-User-Agent\": xUserAgent(ua, { devID, sid }) };\n}\n\n/** 从请求头解析客户端 IP,优先 X-Real-IP,其次 X-Forwarded-For 第一段。 */\nexport function clientIp(source: HeaderSource, fallback = \"\") {\n const candidates = [source.get(\"x-real-ip\"), source.get(\"x-forwarded-for\")?.split(\",\")[0], fallback];\n for (const value of candidates) {\n const ip = value?.trim() || \"\";\n if (ip && isIP(ip)) return ip;\n }\n return \"\";\n}\n\n/**\n * 服务端转给上游的身份头:保留浏览器 User-Agent / X-User-Agent,并补上 X-Real-IP。\n * 没有浏览器上下文时回退到合成 X-User-Agent。\n */\nexport function clientHeaders(\n source?: HeaderSource,\n overrides: { userAgent?: string; clientIp?: string; devID?: string } = {},\n): Record {\n const result: Record = {};\n const ua = (overrides.userAgent || source?.get(\"user-agent\") || \"\").trim();\n if (ua) result[\"User-Agent\"] = ua;\n\n const incomingXua = source?.get(\"x-user-agent\")?.trim() || \"\";\n if (incomingXua) {\n result[\"X-User-Agent\"] = incomingXua;\n } else if (ua) {\n result[\"X-User-Agent\"] = xUserAgent(ua, { sid: source ? sessionId(source) : \"\" });\n } else {\n Object.assign(result, buildBrowserApiHeaders(overrides.devID || \"web-ssr\"));\n }\n\n const ip = overrides.clientIp || (source ? clientIp(source) : \"\");\n if (ip) result[\"X-Real-IP\"] = ip;\n\n return result;\n}\n"],"names":["APP_VER","trim","clean","value","replace","isIP","test","split","every","part","n","Number","String","includes","sysType","ua","toLowerCase","guessAndroidBrand","model","brands","find","pattern","parseBrowser","edge","match","opera","chrome","safari","firefox","ie","parseDeviceFromUA","raw","deviceBrand","deviceModel","deviceType","systemName","systemVersion","ios","version","win","mac","devType","map","filter","Boolean","join","buildID","xUserAgent","extra","info","devID","sid","sessionId","source","cookies","Map","get","index","indexOf","slice","token","startsWith","JSON","parse","buildBrowserApiHeaders","navigator","userAgent","clientIp","fallback","candidates","ip","clientHeaders","overrides","result","incomingXua","Object","assign"],"mappings":"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"}}, - {"offset": {"line": 250, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/config.ts"],"sourcesContent":["/**\n * 浏览器接口根地址。\n * 留空时走同域 `/api/*`,由服务端转到 API_PROXY_TARGET。\n */\nconst DEFAULT_UPSTREAM = \"https://sgdj-h5.80sygtm.com\";\nconst raw = process.env.NEXT_PUBLIC_API_BASE_URL;\nexport const API_BASE_URL = (raw ?? \"\").replace(/\\/$/, \"\");\n\n/** 代理目标指回当前 Node 进程时,请求会打到自己,发布后接口表现为不通。 */\nexport function pointsAtThisServer(base: string) {\n try {\n const url = new URL(base);\n const loopback = url.hostname === \"127.0.0.1\" || url.hostname === \"localhost\" || url.hostname === \"::1\";\n if (!loopback) return false;\n const port = url.port || (url.protocol === \"https:\" ? \"443\" : \"80\");\n const listen = process.env.PORT?.trim();\n return !listen || port === listen;\n } catch {\n return false;\n }\n}\n\n/** 服务端直连上游(相对路径在 Node fetch 中不可用) */\nexport function getServerApiBaseUrl() {\n const proxy = process.env.API_PROXY_TARGET?.trim().replace(/\\/$/, \"\");\n const configured = proxy || raw?.trim().replace(/\\/$/, \"\") || \"\";\n if (configured && !pointsAtThisServer(configured)) return configured;\n return DEFAULT_UPSTREAM;\n}\n"],"names":["DEFAULT_UPSTREAM","raw","API_BASE_URL","replace","pointsAtThisServer","base","url","URL","loopback","hostname","port","protocol","listen","process","env","PORT","trim","getServerApiBaseUrl","proxy","API_PROXY_TARGET","configured"],"mappings":";;;;;;;;AAAA;;;CAGC,GACD,MAAMA,mBAAmB;AACzB,MAAMC;AACC,MAAMC,eAAe,CAACD,OAAO,EAAE,EAAEE,OAAO,CAAC,OAAO;AAGhD,SAASC,mBAAmBC,IAAY;IAC7C,IAAI;QACF,MAAMC,MAAM,IAAIC,IAAIF;QACpB,MAAMG,WAAWF,IAAIG,QAAQ,KAAK,eAAeH,IAAIG,QAAQ,KAAK,eAAeH,IAAIG,QAAQ,KAAK;QAClG,IAAI,CAACD,UAAU,OAAO;QACtB,MAAME,OAAOJ,IAAII,IAAI,IAAI,CAACJ,IAAIK,QAAQ,KAAK,WAAW,QAAQ,IAAI;QAClE,MAAMC,SAASC,QAAQC,GAAG,CAACC,IAAI,EAAEC;QACjC,OAAO,CAACJ,UAAUF,SAASE;IAC7B,EAAE,OAAM;QACN,OAAO;IACT;AACF;AAGO,SAASK;IACd,MAAMC,QAAQL,QAAQC,GAAG,CAACK,gBAAgB,EAAEH,OAAOb,QAAQ,OAAO;IAClE,MAAMiB,aAAaF,SAASjB,KAAKe,OAAOb,QAAQ,OAAO,OAAO;IAC9D,IAAIiB,cAAc,CAAChB,mBAAmBgB,aAAa,OAAOA;IAC1D,OAAOpB;AACT"}}, + {"offset": {"line": 250, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/config.ts"],"sourcesContent":["/**\n * 浏览器接口根地址。\n * 留空时走同域 `/api/*`,由服务端转到 API_PROXY_TARGET。\n */\nconst DEFAULT_UPSTREAM = \"https://webhgbapi.mfcg.me\";\nconst raw = process.env.NEXT_PUBLIC_API_BASE_URL;\nexport const API_BASE_URL = (raw ?? \"\").replace(/\\/$/, \"\");\n\n/** 代理目标指回当前 Node 进程时,请求会打到自己,发布后接口表现为不通。 */\nexport function pointsAtThisServer(base: string) {\n try {\n const url = new URL(base);\n const loopback = url.hostname === \"127.0.0.1\" || url.hostname === \"localhost\" || url.hostname === \"::1\";\n if (!loopback) return false;\n const port = url.port || (url.protocol === \"https:\" ? \"443\" : \"80\");\n const listen = process.env.PORT?.trim();\n return !listen || port === listen;\n } catch {\n return false;\n }\n}\n\n/** 服务端直连上游(相对路径在 Node fetch 中不可用) */\nexport function getServerApiBaseUrl() {\n const proxy = process.env.API_PROXY_TARGET?.trim().replace(/\\/$/, \"\");\n const configured = proxy || raw?.trim().replace(/\\/$/, \"\") || \"\";\n if (configured && !pointsAtThisServer(configured)) return configured;\n return DEFAULT_UPSTREAM;\n}\n"],"names":["DEFAULT_UPSTREAM","raw","API_BASE_URL","replace","pointsAtThisServer","base","url","URL","loopback","hostname","port","protocol","listen","process","env","PORT","trim","getServerApiBaseUrl","proxy","API_PROXY_TARGET","configured"],"mappings":";;;;;;;;AAAA;;;CAGC,GACD,MAAMA,mBAAmB;AACzB,MAAMC;AACC,MAAMC,eAAe,CAACD,OAAO,EAAE,EAAEE,OAAO,CAAC,OAAO;AAGhD,SAASC,mBAAmBC,IAAY;IAC7C,IAAI;QACF,MAAMC,MAAM,IAAIC,IAAIF;QACpB,MAAMG,WAAWF,IAAIG,QAAQ,KAAK,eAAeH,IAAIG,QAAQ,KAAK,eAAeH,IAAIG,QAAQ,KAAK;QAClG,IAAI,CAACD,UAAU,OAAO;QACtB,MAAME,OAAOJ,IAAII,IAAI,IAAI,CAACJ,IAAIK,QAAQ,KAAK,WAAW,QAAQ,IAAI;QAClE,MAAMC,SAASC,QAAQC,GAAG,CAACC,IAAI,EAAEC;QACjC,OAAO,CAACJ,UAAUF,SAASE;IAC7B,EAAE,OAAM;QACN,OAAO;IACT;AACF;AAGO,SAASK;IACd,MAAMC,QAAQL,QAAQC,GAAG,CAACK,gBAAgB,EAAEH,OAAOb,QAAQ,OAAO;IAClE,MAAMiB,aAAaF,SAASjB,KAAKe,OAAOb,QAAQ,OAAO,OAAO;IAC9D,IAAIiB,cAAc,CAAChB,mBAAmBgB,aAAa,OAAOA;IAC1D,OAAOpB;AACT"}}, {"offset": {"line": 286, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/upstream-proxy.ts"],"sourcesContent":["import { connection } from \"next/server\";\nimport { setDefaultResultOrder } from \"node:dns\";\n\nimport { clientHeaders } from \"./client-headers\";\nimport { getServerApiBaseUrl } from \"./config\";\n\nsetDefaultResultOrder(\"ipv4first\");\n\nconst DROP_REQUEST_HEADERS = new Set([\n \"host\",\n \"connection\",\n \"content-length\",\n \"transfer-encoding\",\n \"keep-alive\",\n \"accept-encoding\",\n // 由 clientHeaders 重新写入,避免把代理链原样带给上游。\n \"x-real-ip\",\n \"x-forwarded-for\",\n \"x-forwarded-host\",\n \"x-forwarded-proto\",\n \"user-agent\",\n \"x-user-agent\",\n]);\nconst DROP_RESPONSE_HEADERS = new Set([\"content-encoding\", \"content-length\", \"transfer-encoding\", \"connection\"]);\n\n/** 把同域 /api、媒资路径转到 API_PROXY_TARGET。目标在请求时读取,并带上 UA / IP。 */\nexport async function proxyUpstream(request: Request, pathname: string) {\n await connection();\n if (request.headers.get(\"x-sgdj-proxy\") === \"1\") {\n return new Response(\"接口代理回环\", { status: 508 });\n }\n\n const base = getServerApiBaseUrl();\n const incoming = new URL(request.url);\n const target = `${base}${pathname}${incoming.search}`;\n const headers = new Headers();\n for (const [key, value] of request.headers) {\n if (DROP_REQUEST_HEADERS.has(key.toLowerCase())) continue;\n headers.set(key, value);\n }\n for (const [name, value] of Object.entries(clientHeaders(request.headers))) {\n headers.set(name, value);\n }\n headers.set(\"x-sgdj-proxy\", \"1\");\n\n const method = request.method.toUpperCase();\n const hasBody = method !== \"GET\" && method !== \"HEAD\";\n let upstream: Response;\n try {\n upstream = await fetch(target, {\n method,\n headers,\n body: hasBody ? await request.arrayBuffer() : undefined,\n redirect: \"manual\",\n cache: \"no-store\",\n signal: AbortSignal.timeout(20_000),\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : \"请求失败\";\n return new Response(message, { status: 502, headers: { \"cache-control\": \"no-store\" } });\n }\n\n const outgoing = new Headers(upstream.headers);\n for (const name of DROP_RESPONSE_HEADERS) outgoing.delete(name);\n outgoing.set(\"cache-control\", \"no-store\");\n return new Response(upstream.body, {\n status: upstream.status,\n statusText: upstream.statusText,\n headers: outgoing,\n });\n}\n\nexport function createUpstreamHandlers(prefix: string) {\n async function handle(request: Request, context: { params: Promise<{ path?: string[] }> }) {\n const { path = [] } = await context.params;\n const suffix = path.map((segment) => encodeURIComponent(segment)).join(\"/\");\n return proxyUpstream(request, suffix ? `${prefix}/${suffix}` : prefix);\n }\n return {\n GET: handle,\n POST: handle,\n PUT: handle,\n PATCH: handle,\n DELETE: handle,\n HEAD: handle,\n };\n}\n"],"names":["DROP_REQUEST_HEADERS","Set","DROP_RESPONSE_HEADERS","proxyUpstream","request","pathname","headers","get","Response","status","base","incoming","URL","url","target","search","Headers","key","value","has","toLowerCase","set","name","Object","entries","method","toUpperCase","hasBody","upstream","fetch","body","arrayBuffer","undefined","redirect","cache","signal","AbortSignal","timeout","error","message","Error","outgoing","delete","statusText","createUpstreamHandlers","prefix","handle","context","path","params","suffix","map","segment","encodeURIComponent","join","GET","POST","PUT","PATCH","DELETE","HEAD"],"mappings":";;;;;;AAAA;AACA;AAEA;AACA;;;;;AAEA,IAAA,wIAAqB,EAAC;AAEtB,MAAMA,uBAAuB,IAAIC,IAAI;IACnC;IACA;IACA;IACA;IACA;IACA;IACA,qCAAqC;IACrC;IACA;IACA;IACA;IACA;IACA;CACD;AACD,MAAMC,wBAAwB,IAAID,IAAI;IAAC;IAAoB;IAAkB;IAAqB;CAAa;AAGxG,eAAeE,cAAcC,OAAgB,EAAEC,QAAgB;IACpE,MAAM,IAAA,8IAAU;IAChB,IAAID,QAAQE,OAAO,CAACC,GAAG,CAAC,oBAAoB,KAAK;QAC/C,OAAO,IAAIC,SAAS,UAAU;YAAEC,QAAQ;QAAI;IAC9C;IAEA,MAAMC,OAAO,IAAA,oJAAmB;IAChC,MAAMC,WAAW,IAAIC,IAAIR,QAAQS,GAAG;IACpC,MAAMC,SAAS,GAAGJ,OAAOL,WAAWM,SAASI,MAAM,EAAE;IACrD,MAAMT,UAAU,IAAIU;IACpB,KAAK,MAAM,CAACC,KAAKC,MAAM,IAAId,QAAQE,OAAO,CAAE;QAC1C,IAAIN,qBAAqBmB,GAAG,CAACF,IAAIG,WAAW,KAAK;QACjDd,QAAQe,GAAG,CAACJ,KAAKC;IACnB;IACA,KAAK,MAAM,CAACI,MAAMJ,MAAM,IAAIK,OAAOC,OAAO,CAAC,IAAA,yJAAa,EAACpB,QAAQE,OAAO,GAAI;QAC1EA,QAAQe,GAAG,CAACC,MAAMJ;IACpB;IACAZ,QAAQe,GAAG,CAAC,gBAAgB;IAE5B,MAAMI,SAASrB,QAAQqB,MAAM,CAACC,WAAW;IACzC,MAAMC,UAAUF,WAAW,SAASA,WAAW;IAC/C,IAAIG;IACJ,IAAI;QACFA,WAAW,MAAMC,MAAMf,QAAQ;YAC7BW;YACAnB;YACAwB,MAAMH,UAAU,MAAMvB,QAAQ2B,WAAW,KAAKC;YAC9CC,UAAU;YACVC,OAAO;YACPC,QAAQC,YAAYC,OAAO,CAAC;QAC9B;IACF,EAAE,OAAOC,OAAO;QACd,MAAMC,UAAUD,iBAAiBE,QAAQF,MAAMC,OAAO,GAAG;QACzD,OAAO,IAAI/B,SAAS+B,SAAS;YAAE9B,QAAQ;YAAKH,SAAS;gBAAE,iBAAiB;YAAW;QAAE;IACvF;IAEA,MAAMmC,WAAW,IAAIzB,QAAQY,SAAStB,OAAO;IAC7C,KAAK,MAAMgB,QAAQpB,sBAAuBuC,SAASC,MAAM,CAACpB;IAC1DmB,SAASpB,GAAG,CAAC,iBAAiB;IAC9B,OAAO,IAAIb,SAASoB,SAASE,IAAI,EAAE;QACjCrB,QAAQmB,SAASnB,MAAM;QACvBkC,YAAYf,SAASe,UAAU;QAC/BrC,SAASmC;IACX;AACF;AAEO,SAASG,uBAAuBC,MAAc;IACnD,eAAeC,OAAO1C,OAAgB,EAAE2C,OAAiD;QACvF,MAAM,EAAEC,OAAO,EAAE,EAAE,GAAG,MAAMD,QAAQE,MAAM;QAC1C,MAAMC,SAASF,KAAKG,GAAG,CAAC,CAACC,UAAYC,mBAAmBD,UAAUE,IAAI,CAAC;QACvE,OAAOnD,cAAcC,SAAS8C,SAAS,GAAGL,OAAO,CAAC,EAAEK,QAAQ,GAAGL;IACjE;IACA,OAAO;QACLU,KAAKT;QACLU,MAAMV;QACNW,KAAKX;QACLY,OAAOZ;QACPa,QAAQb;QACRc,MAAMd;IACR;AACF"}}] } \ No newline at end of file diff --git a/.next-dev/dev/server/chunks/[root-of-the-server]__1y_dny-cu_otu._.js b/.next-dev/dev/server/chunks/[root-of-the-server]__1y_dny-cu_otu._.js new file mode 100644 index 0000000..c638d63 --- /dev/null +++ b/.next-dev/dev/server/chunks/[root-of-the-server]__1y_dny-cu_otu._.js @@ -0,0 +1,625 @@ +module.exports = [ +(()=>{"use strict";return[ +"[project]/src/app/enkey/route.ts [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "GET", + ()=>GET +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$media$2f$proxy$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/media/proxy.ts [app-route] (ecmascript)"); +; +function GET(request) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$media$2f$proxy$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["proxyKey"])(request, "/enkey"); +} +}), +"[project]/src/lib/api/client-headers.ts [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "buildBrowserApiHeaders", + ()=>buildBrowserApiHeaders, + "clientHeaders", + ()=>clientHeaders, + "clientIp", + ()=>clientIp +]); +const APP_VER = ("TURBOPACK compile-time value", "1.0.0")?.trim() || "1.0.0"; +function clean(value) { + return value.replace(/[^\x20-\x7E]|[;=]/g, " ").trim(); +} +/** 不依赖 node:net,避免被浏览器端打包。 */ function isIP(value) { + if (/^(?:\d{1,3}\.){3}\d{1,3}$/.test(value)) { + return value.split(".").every((part)=>{ + const n = Number(part); + return String(n) === part && n >= 0 && n <= 255; + }); + } + // 宽松校验 IPv6,够用来转发 X-Real-IP。 + return value.includes(":") && /^[0-9a-fA-F:.]+$/.test(value); +} +function sysType(ua) { + const value = ua.toLowerCase(); + if (value.includes("android")) return "h5_android"; + if (value.includes("iphone") || value.includes("ipad") || value.includes("ipod")) return "h5_ios"; + return "h5_pc"; +} +function guessAndroidBrand(model, ua) { + const value = `${model} ${ua}`; + const brands = [ + [ + /Build\/HONOR|\bHONOR\b/i, + "Honor" + ], + [ + /Build\/HUAWEI|HUAWEI|HW-/i, + "Huawei" + ], + [ + /SM-|samsung|Galaxy/i, + "Samsung" + ], + [ + /Pixel/i, + "Google" + ], + [ + /Redmi|POCO|XiaoMi|\bMi\b/i, + "Xiaomi" + ], + [ + /OPPO|\bCPH\d{3,4}/i, + "OPPO" + ], + [ + /vivo|\bV\d{4}/i, + "vivo" + ], + [ + /OnePlus|ONEPLUS/i, + "OnePlus" + ], + [ + /realme|\bRMX\d{3,4}/i, + "realme" + ] + ]; + return brands.find(([pattern])=>pattern.test(value))?.[1] || ""; +} +function parseBrowser(ua) { + const edge = ua.match(/Edg\/([\d.]+)/i); + if (edge) return `Edge ${edge[1]}`; + const opera = ua.match(/(?:OPR|Opera)\/([\d.]+)/i); + if (opera) return `Opera ${opera[1]}`; + const chrome = ua.match(/Chrome\/([\d.]+)/i); + if (chrome && !/Edg\//i.test(ua)) return `Chrome ${chrome[1]}`; + const safari = ua.match(/Version\/([\d.]+).*Safari/i); + if (safari) return `Safari ${safari[1]}`; + const firefox = ua.match(/Firefox\/([\d.]+)/i); + if (firefox) return `Firefox ${firefox[1]}`; + const ie = ua.match(/(?:MSIE\s|Trident.*rv:)([\d.]+)/i); + if (ie) return `IE ${ie[1]}`; + return ""; +} +/** 从浏览器 User-Agent 解析设备公共字段,口径对齐 jha-1040 useragent.ParseDeviceFromUA。 */ function parseDeviceFromUA(ua) { + const raw = ua.trim(); + let deviceBrand = ""; + let deviceModel = ""; + let deviceType = "desktop"; + let systemName = "Other"; + let systemVersion = ""; + if (/iPhone|iPad|iPod/i.test(raw)) { + systemName = "iOS"; + deviceBrand = "Apple"; + const ios = raw.match(/OS (\d+[_\d]*) like Mac OS X/i); + if (ios) systemVersion = ios[1].replace(/_/g, "."); + if (/iPad/i.test(raw)) { + deviceModel = "iPad"; + deviceType = "tablet"; + } else if (/iPod/i.test(raw)) { + deviceModel = "iPod"; + deviceType = "mobile"; + } else { + deviceModel = "iPhone"; + deviceType = "mobile"; + } + } else if (/Android/i.test(raw)) { + systemName = "Android"; + const version = raw.match(/Android ([\d.]+)/i); + if (version) systemVersion = version[1]; + const model = raw.match(/Android\s+[\d.]+;\s*([^;)]+?)(?:\s+Build\/|\))/i); + if (model?.[1]) deviceModel = model[1].trim(); + deviceBrand = guessAndroidBrand(deviceModel, raw); + deviceType = /Mobile/i.test(raw) ? "mobile" : "tablet"; + } else if (/Windows/i.test(raw)) { + systemName = "Windows"; + const win = raw.match(/Windows NT ([\d.]+)/i); + if (win) systemVersion = win[1]; + } else if (/Mac OS X|Macintosh/i.test(raw)) { + systemName = "macOS"; + deviceBrand = "Apple"; + deviceModel = "Mac"; + const mac = raw.match(/Mac OS X ([\d_]+)/i); + if (mac) systemVersion = mac[1].replace(/_/g, "."); + } else if (/Linux/i.test(raw)) { + systemName = "Linux"; + } + const devType = [ + deviceBrand, + deviceModel, + deviceType + ].map((part)=>part.trim()).filter(Boolean).join(" "); + return { + devType: devType || "desktop", + sysType: sysType(raw), + buildID: clean(parseBrowser(raw)) || "web", + deviceBrand, + deviceModel, + systemName, + systemVersion + }; +} +function xUserAgent(ua, extra = {}) { + const info = parseDeviceFromUA(ua); + return [ + extra.devID ? `DevID=${clean(extra.devID)}` : "", + `DevType=${clean(info.devType)}`, + `SysType=${info.sysType}`, + `Ver=${clean(APP_VER)}`, + `BuildID=${clean(info.buildID) || "web"}`, + `device_brand=${clean(info.deviceBrand)}`, + `device_model=${clean(info.deviceModel)}`, + `system_name=${clean(info.systemName)}`, + `system_version=${clean(info.systemVersion)}`, + `sid=${clean(extra.sid || "")}` + ].filter((part)=>part !== "").join(";"); +} +function sessionId(source) { + const cookies = new Map((source.get("cookie") || "").split(";").map((value)=>{ + const index = value.indexOf("="); + if (index < 0) return [ + "", + "" + ]; + return [ + value.slice(0, index).trim(), + value.slice(index + 1).trim() + ]; + })); + const sid = cookies.get("sid"); + if (sid) return sid; + const token = cookies.get("_s_token_") || ""; + if (token.startsWith("{")) { + try { + return String(JSON.parse(token).sid || ""); + } catch { + /* ignore */ } + } + return token; +} +function buildBrowserApiHeaders(devID = "", sid = "") { + const ua = typeof navigator !== "undefined" ? navigator.userAgent : ""; + return { + "X-User-Agent": xUserAgent(ua, { + devID, + sid + }) + }; +} +function clientIp(source, fallback = "") { + const candidates = [ + source.get("x-real-ip"), + source.get("x-forwarded-for")?.split(",")[0], + fallback + ]; + for (const value of candidates){ + const ip = value?.trim() || ""; + if (ip && isIP(ip)) return ip; + } + return ""; +} +function clientHeaders(source, overrides = {}) { + const result = {}; + const ua = (overrides.userAgent || source?.get("user-agent") || "").trim(); + if (ua) result["User-Agent"] = ua; + const incomingXua = source?.get("x-user-agent")?.trim() || ""; + if (incomingXua) { + result["X-User-Agent"] = incomingXua; + } else if (ua) { + result["X-User-Agent"] = xUserAgent(ua, { + sid: source ? sessionId(source) : "" + }); + } else { + Object.assign(result, buildBrowserApiHeaders(overrides.devID || "web-ssr")); + } + const ip = overrides.clientIp || (source ? clientIp(source) : ""); + if (ip) result["X-Real-IP"] = ip; + return result; +} +}), +"[project]/src/lib/api/config.ts [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "API_BASE_URL", + ()=>API_BASE_URL, + "getServerApiBaseUrl", + ()=>getServerApiBaseUrl, + "pointsAtThisServer", + ()=>pointsAtThisServer +]); +/** + * 浏览器接口根地址。 + * 留空时走同域 `/api/*`,由服务端转到 API_PROXY_TARGET。 + */ const DEFAULT_UPSTREAM = "https://webhgbapi.mfcg.me"; +const raw = ("TURBOPACK compile-time value", ""); +const API_BASE_URL = (raw ?? "").replace(/\/$/, ""); +function pointsAtThisServer(base) { + try { + const url = new URL(base); + const loopback = url.hostname === "127.0.0.1" || url.hostname === "localhost" || url.hostname === "::1"; + if (!loopback) return false; + const port = url.port || (url.protocol === "https:" ? "443" : "80"); + const listen = process.env.PORT?.trim(); + return !listen || port === listen; + } catch { + return false; + } +} +function getServerApiBaseUrl() { + const proxy = process.env.API_PROXY_TARGET?.trim().replace(/\/$/, ""); + const configured = proxy || raw?.trim().replace(/\/$/, "") || ""; + if (configured && !pointsAtThisServer(configured)) return configured; + return DEFAULT_UPSTREAM; +} +}), +"[project]/src/lib/media/proxy.ts [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "proxyHls", + ()=>proxyHls, + "proxyKey", + ()=>proxyKey, + "stripEnkeySlash", + ()=>stripEnkeySlash +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2d$headers$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/client-headers.ts [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$config$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/config.ts [app-route] (ecmascript)"); +; +; +const FORWARD_HEADERS = [ + "range", + "if-range", + "accept", + "cookie" +]; +/** 正式服 app;H5 自指时代理会 508,密钥/媒资回退到这里。 */ const DEFAULT_MEDIA_API = "http://139.162.49.252:21036"; +/** config/info.mediaAppUsCdn;Go 未配 cdnDomain 时用它拉原始 m3u8 / 分片。 */ const DEFAULT_MEDIA_CDN = "https://dyum53hre43nj.cloudfront.net"; +function stripEnkeySlash(playlist) { + return playlist.replace(/enkey\/\?/g, "enkey?"); +} +function uniqBases(...values) { + const bases = []; + for (const value of values){ + const base = value?.trim().replace(/\/$/, "") || ""; + if (base && !bases.includes(base)) bases.push(base); + } + return bases; +} +/** + * 测试/预发常把 API_PROXY_TARGET 写成公开 H5 自身。 + * 媒资若再 fetch 该域名会打回本进程,请求挂死(线上表现为 /h5/m3u8 一直转圈)。 + */ function isSelfHostedMediaOrigin(base) { + try { + const host = new URL(base).hostname.toLowerCase(); + if (host === "127.0.0.1" || host === "localhost" || host === "::1") return true; + const site = ("TURBOPACK compile-time value", "http://localhost:26149")?.trim(); + if (site) { + try { + if (new URL(site).hostname.toLowerCase() === host) return true; + } catch { + /* ignore */ } + } + // 未配 SITE_URL 时,仍避开本项目常见公开 H5 域名 + if (host === "huangguoduanju.im" || host === "www.huangguoduanju.im") return true; + return false; + } catch { + return true; + } +} +/** 可安全直连的媒资 API(排除 H5 自指)。 */ function mediaApiOrigin() { + const dedicated = process.env.MEDIA_API_PROXY_TARGET?.trim().replace(/\/$/, ""); + if (dedicated && !isSelfHostedMediaOrigin(dedicated)) return dedicated; + const fromApi = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$config$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerApiBaseUrl"])(); + if (fromApi && !isSelfHostedMediaOrigin(fromApi)) return fromApi; + return DEFAULT_MEDIA_API; +} +/** 播放列表上游:只走 app 媒资 API,失败再 CDN 改写(绝不打回本站 H5)。 */ function mediaPlaylistBases() { + return uniqBases(mediaApiOrigin()); +} +/** 密钥上游:app 缺 m3u8.key 时可额外回退其它 H5(仍排除本站)。 */ function mediaKeyBases() { + const extras = (process.env.MEDIA_KEY_FALLBACK_ORIGINS || // app 缺 m3u8.key 时的临时回退;与 config/*.env 中 MEDIA_KEY_FALLBACK_ORIGINS 一致 + "https://91dj-h5.80sygtm.com").split(",").map((value)=>value.trim().replace(/\/$/, "")).filter((value)=>value && !isSelfHostedMediaOrigin(value)); + return uniqBases(mediaApiOrigin(), ...extras); +} +function mediaCdnOrigin() { + return (process.env.MEDIA_CDN_ORIGIN || DEFAULT_MEDIA_CDN).replace(/\/$/, ""); +} +function upstreamUrl(base, pathname, search) { + const target = new URL(base); + target.pathname = pathname; + target.search = search; + return target; +} +function forwardHeaders(request) { + const headers = new Headers(); + for (const name of FORWARD_HEADERS){ + const value = request.headers.get(name); + if (value) headers.set(name, value); + } + for (const [name, value] of Object.entries((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2d$headers$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["clientHeaders"])(request.headers))){ + headers.set(name, value); + } + if (!headers.has("accept")) headers.set("accept", "*/*"); + return headers; +} +function noStore(response) { + const headers = new Headers({ + "cache-control": "no-store" + }); + for (const name of [ + "content-type", + "content-length", + "content-range", + "accept-ranges" + ]){ + const value = response.headers.get(name); + if (value) headers.set(name, value); + } + return headers; +} +function isUnusableUpstream(status, body, contentType) { + if (status === 508) return true; + if (status >= 500) return true; + if (!body.startsWith("{")) return false; + if (!/json/i.test(contentType) && status === 200) return false; + try { + const payload = JSON.parse(body); + const code = payload.code ?? 0; + if (code && code !== 200) return true; + const msg = `${payload.data?.msg || ""} ${payload.msg || ""} ${payload.tip || ""}`; + return /cdnDomain|origDomain|文件服务器|代理回环/i.test(msg); + } catch { + return false; + } +} +function joinUrl(base, ...parts) { + const path = parts.map((part)=>part.replace(/^\/+|\/+$/g, "")).filter(Boolean).join("/"); + return `${base.replace(/\/$/, "")}/${path}`; +} +/** 上游 m3u8 不可用时:从媒资 CDN 拉原始列表,改写密钥与分片为同域可播地址。 */ async function transformPlaylistFromCdn(request) { + const incoming = new URL(request.url); + const rel = incoming.pathname.replace(/^\/h5\/m3u8\/?/i, "").replace(/^\/+/, ""); + if (!rel) return new Response("缺少媒资路径", { + status: 400, + headers: { + "cache-control": "no-store" + } + }); + const cdn = mediaCdnOrigin(); + const rawUrl = joinUrl(cdn, rel.split("?")[0]); + try { + const response = await fetch(rawUrl, { + headers: { + accept: "*/*", + "user-agent": request.headers.get("user-agent") || "Mozilla/5.0" + }, + cache: "no-store", + redirect: "follow", + signal: AbortSignal.timeout(20_000) + }); + if (!response.ok) { + return new Response("视频资源请求失败", { + status: 502, + headers: { + "cache-control": "no-store" + } + }); + } + const raw = await response.text(); + if (!raw.includes("#EXTM3U")) { + return new Response("视频资源格式错误", { + status: 502, + headers: { + "cache-control": "no-store" + } + }); + } + const keyUri = `/enkey${incoming.search || ""}`; + const dir = rel.includes("/") ? rel.slice(0, rel.lastIndexOf("/")) : ""; + const lines = raw.split(/\r?\n/).map((line)=>{ + const trimmed = line.trim(); + if (!trimmed) return line; + if (trimmed.startsWith("#EXT-X-KEY:")) { + return `#EXT-X-KEY:METHOD=AES-128,URI="${keyUri}"`; + } + if (trimmed.startsWith("#")) return line; + if (/^https?:\/\//i.test(trimmed)) return line; + const segment = trimmed.split("?")[0].replace(/^\/+/, ""); + return joinUrl(cdn, dir, segment); + }); + return new Response(stripEnkeySlash(lines.join("\n")), { + status: 200, + headers: { + "cache-control": "no-store", + "content-type": "application/vnd.apple.mpegurl" + } + }); + } catch { + return new Response("视频资源请求失败", { + status: 502, + headers: { + "cache-control": "no-store" + } + }); + } +} +async function proxyKey(request, pathname) { + const incoming = new URL(request.url); + const keyHeaders = new Headers({ + accept: "*/*" + }); + const ua = request.headers.get("user-agent"); + if (ua) keyHeaders.set("user-agent", ua); + for (const [name, value] of Object.entries((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2d$headers$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["clientHeaders"])(request.headers))){ + if (name === "User-Agent" || name === "X-User-Agent" || name === "X-Real-IP") { + keyHeaders.set(name, value); + } + } + for (const base of mediaKeyBases()){ + // 直接打带尾斜杠路径,避免 301 在部分运行时丢 query + const pathWithSlash = pathname.endsWith("/") ? pathname : `${pathname}/`; + const candidates = [ + pathWithSlash, + pathname + ]; + let gotKey = false; + for (const path of candidates){ + const target = upstreamUrl(base, path, incoming.search); + try { + const response = await fetch(target.href, { + headers: keyHeaders, + cache: "no-store", + redirect: "follow", + signal: AbortSignal.timeout(15_000) + }); + const type = response.headers.get("content-type") || ""; + const buffer = await response.arrayBuffer(); + if (response.ok && buffer.byteLength > 0 && !/json/i.test(type) && response.status !== 508) { + gotKey = true; + return new Response(buffer, { + status: 200, + headers: { + "cache-control": "no-store", + "content-type": type || "application/octet-stream" + } + }); + } + const text = new TextDecoder().decode(buffer); + if (!isUnusableUpstream(response.status, text, type) && /json/i.test(type)) { + // 明确业务错误且非「可换源」时仍试下一个源 + } + } catch { + /* try next path / base */ } + } + if (gotKey) break; + } + return new Response("视频密钥暂不可用", { + status: 502, + headers: { + "cache-control": "no-store" + } + }); +} +async function proxyHls(request) { + const incoming = new URL(request.url); + for (const base of mediaPlaylistBases()){ + const target = upstreamUrl(base, incoming.pathname, incoming.search); + try { + const response = await fetch(target, { + headers: forwardHeaders(request), + cache: "no-store", + redirect: "follow", + signal: AbortSignal.timeout(20_000) + }); + const type = response.headers.get("content-type") || ""; + const playlist = /\.m3u8$/i.test(incoming.pathname) || /mpegurl|m3u8/i.test(type); + if (!playlist) { + if (response.status === 508) continue; + return new Response(response.body, { + status: response.status, + headers: noStore(response) + }); + } + const text = await response.text(); + if (isUnusableUpstream(response.status, text, type) || !text.includes("#EXTM3U")) { + continue; + } + const headers = noStore(response); + headers.delete("content-length"); + if (!headers.has("content-type")) headers.set("content-type", "application/vnd.apple.mpegurl"); + return new Response(stripEnkeySlash(text), { + status: response.status, + headers + }); + } catch { + /* try next base / CDN fallback */ } + } + return transformPlaylistFromCdn(request); +} +}), +]})(), +"[externals]/crypto [external] (crypto, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("crypto", () => require("crypto")); + +module.exports = mod; +}), +"[externals]/next/dist/compiled/@opentelemetry/api [external] (next/dist/compiled/@opentelemetry/api, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/compiled/@opentelemetry/api", () => require("next/dist/compiled/@opentelemetry/api")); + +module.exports = mod; +}), +"[externals]/next/dist/compiled/next-server/app-page-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-page-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js")); + +module.exports = mod; +}), +"[externals]/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-route-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/compiled/next-server/app-route-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-route-turbo.runtime.dev.js")); + +module.exports = mod; +}), +"[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/server/app-render/work-async-storage.external.js", () => require("next/dist/server/app-render/work-async-storage.external.js")); + +module.exports = mod; +}), +"[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/server/app-render/work-unit-async-storage.external.js", () => require("next/dist/server/app-render/work-unit-async-storage.external.js")); + +module.exports = mod; +}), +"[externals]/next/dist/server/runtime-reacts.external.js [external] (next/dist/server/runtime-reacts.external.js, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/server/runtime-reacts.external.js", () => require("next/dist/server/runtime-reacts.external.js")); + +module.exports = mod; +}), +"[externals]/next/dist/shared/lib/no-fallback-error.external.js [external] (next/dist/shared/lib/no-fallback-error.external.js, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/shared/lib/no-fallback-error.external.js", () => require("next/dist/shared/lib/no-fallback-error.external.js")); + +module.exports = mod; +}), +"[externals]/node:stream [external] (node:stream, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("node:stream", () => require("node:stream")); + +module.exports = mod; +}), +"[externals]/path [external] (path, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("path", () => require("path")); + +module.exports = mod; +}), +]; + +//# sourceMappingURL=%5Broot-of-the-server%5D__1y_dny-cu_otu._.js.map \ No newline at end of file diff --git a/.next-dev/dev/server/chunks/[root-of-the-server]__1y_dny-cu_otu._.js.map b/.next-dev/dev/server/chunks/[root-of-the-server]__1y_dny-cu_otu._.js.map new file mode 100644 index 0000000..f8a8fef --- /dev/null +++ b/.next-dev/dev/server/chunks/[root-of-the-server]__1y_dny-cu_otu._.js.map @@ -0,0 +1,9 @@ +{ + "version": 3, + "sources": [], + "sections": [ + {"offset": {"line": 5, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/app/enkey/route.ts"],"sourcesContent":["import { proxyKey } from \"@/lib/media/proxy\";\n\n/** GET /enkey?id= ,路径不带尾斜杠。 */\nexport function GET(request: Request) {\n return proxyKey(request, \"/enkey\");\n}\n"],"names":["GET","request"],"mappings":";;;;AAAA;;AAGO,SAASA,IAAIC,OAAgB;IAClC,OAAO,IAAA,0IAAQ,EAACA,SAAS;AAC3B"}}, + {"offset": {"line": 18, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/client-headers.ts"],"sourcesContent":["const APP_VER = process.env.NEXT_PUBLIC_APP_VERSION?.trim() || \"1.0.0\";\n\ntype HeaderSource = Pick;\n\nfunction clean(value: string) {\n return value.replace(/[^\\x20-\\x7E]|[;=]/g, \" \").trim();\n}\n\n/** 不依赖 node:net,避免被浏览器端打包。 */\nfunction isIP(value: string) {\n if (/^(?:\\d{1,3}\\.){3}\\d{1,3}$/.test(value)) {\n return value.split(\".\").every((part) => {\n const n = Number(part);\n return String(n) === part && n >= 0 && n <= 255;\n });\n }\n // 宽松校验 IPv6,够用来转发 X-Real-IP。\n return value.includes(\":\") && /^[0-9a-fA-F:.]+$/.test(value);\n}\n\nfunction sysType(ua: string) {\n const value = ua.toLowerCase();\n if (value.includes(\"android\")) return \"h5_android\";\n if (value.includes(\"iphone\") || value.includes(\"ipad\") || value.includes(\"ipod\")) return \"h5_ios\";\n return \"h5_pc\";\n}\n\nfunction guessAndroidBrand(model: string, ua: string) {\n const value = `${model} ${ua}`;\n const brands: Array<[RegExp, string]> = [\n [/Build\\/HONOR|\\bHONOR\\b/i, \"Honor\"],\n [/Build\\/HUAWEI|HUAWEI|HW-/i, \"Huawei\"],\n [/SM-|samsung|Galaxy/i, \"Samsung\"],\n [/Pixel/i, \"Google\"],\n [/Redmi|POCO|XiaoMi|\\bMi\\b/i, \"Xiaomi\"],\n [/OPPO|\\bCPH\\d{3,4}/i, \"OPPO\"],\n [/vivo|\\bV\\d{4}/i, \"vivo\"],\n [/OnePlus|ONEPLUS/i, \"OnePlus\"],\n [/realme|\\bRMX\\d{3,4}/i, \"realme\"],\n ];\n return brands.find(([pattern]) => pattern.test(value))?.[1] || \"\";\n}\n\nfunction parseBrowser(ua: string) {\n const edge = ua.match(/Edg\\/([\\d.]+)/i);\n if (edge) return `Edge ${edge[1]}`;\n const opera = ua.match(/(?:OPR|Opera)\\/([\\d.]+)/i);\n if (opera) return `Opera ${opera[1]}`;\n const chrome = ua.match(/Chrome\\/([\\d.]+)/i);\n if (chrome && !/Edg\\//i.test(ua)) return `Chrome ${chrome[1]}`;\n const safari = ua.match(/Version\\/([\\d.]+).*Safari/i);\n if (safari) return `Safari ${safari[1]}`;\n const firefox = ua.match(/Firefox\\/([\\d.]+)/i);\n if (firefox) return `Firefox ${firefox[1]}`;\n const ie = ua.match(/(?:MSIE\\s|Trident.*rv:)([\\d.]+)/i);\n if (ie) return `IE ${ie[1]}`;\n return \"\";\n}\n\ntype DeviceProfile = {\n devType: string;\n sysType: \"h5_ios\" | \"h5_android\" | \"h5_pc\";\n buildID: string;\n deviceBrand: string;\n deviceModel: string;\n systemName: string;\n systemVersion: string;\n};\n\n/** 从浏览器 User-Agent 解析设备公共字段,口径对齐 jha-1040 useragent.ParseDeviceFromUA。 */\nfunction parseDeviceFromUA(ua: string): DeviceProfile {\n const raw = ua.trim();\n let deviceBrand = \"\";\n let deviceModel = \"\";\n let deviceType = \"desktop\";\n let systemName = \"Other\";\n let systemVersion = \"\";\n\n if (/iPhone|iPad|iPod/i.test(raw)) {\n systemName = \"iOS\";\n deviceBrand = \"Apple\";\n const ios = raw.match(/OS (\\d+[_\\d]*) like Mac OS X/i);\n if (ios) systemVersion = ios[1].replace(/_/g, \".\");\n if (/iPad/i.test(raw)) {\n deviceModel = \"iPad\";\n deviceType = \"tablet\";\n } else if (/iPod/i.test(raw)) {\n deviceModel = \"iPod\";\n deviceType = \"mobile\";\n } else {\n deviceModel = \"iPhone\";\n deviceType = \"mobile\";\n }\n } else if (/Android/i.test(raw)) {\n systemName = \"Android\";\n const version = raw.match(/Android ([\\d.]+)/i);\n if (version) systemVersion = version[1];\n const model = raw.match(/Android\\s+[\\d.]+;\\s*([^;)]+?)(?:\\s+Build\\/|\\))/i);\n if (model?.[1]) deviceModel = model[1].trim();\n deviceBrand = guessAndroidBrand(deviceModel, raw);\n deviceType = /Mobile/i.test(raw) ? \"mobile\" : \"tablet\";\n } else if (/Windows/i.test(raw)) {\n systemName = \"Windows\";\n const win = raw.match(/Windows NT ([\\d.]+)/i);\n if (win) systemVersion = win[1];\n } else if (/Mac OS X|Macintosh/i.test(raw)) {\n systemName = \"macOS\";\n deviceBrand = \"Apple\";\n deviceModel = \"Mac\";\n const mac = raw.match(/Mac OS X ([\\d_]+)/i);\n if (mac) systemVersion = mac[1].replace(/_/g, \".\");\n } else if (/Linux/i.test(raw)) {\n systemName = \"Linux\";\n }\n\n const devType = [deviceBrand, deviceModel, deviceType].map((part) => part.trim()).filter(Boolean).join(\" \");\n return {\n devType: devType || \"desktop\",\n sysType: sysType(raw),\n buildID: clean(parseBrowser(raw)) || \"web\",\n deviceBrand,\n deviceModel,\n systemName,\n systemVersion,\n };\n}\n\nfunction xUserAgent(ua: string, extra: { devID?: string; sid?: string } = {}) {\n const info = parseDeviceFromUA(ua);\n return [\n extra.devID ? `DevID=${clean(extra.devID)}` : \"\",\n `DevType=${clean(info.devType)}`,\n `SysType=${info.sysType}`,\n `Ver=${clean(APP_VER)}`,\n `BuildID=${clean(info.buildID) || \"web\"}`,\n `device_brand=${clean(info.deviceBrand)}`,\n `device_model=${clean(info.deviceModel)}`,\n `system_name=${clean(info.systemName)}`,\n `system_version=${clean(info.systemVersion)}`,\n `sid=${clean(extra.sid || \"\")}`,\n ]\n .filter((part) => part !== \"\")\n .join(\";\");\n}\n\nfunction sessionId(source: HeaderSource) {\n const cookies = new Map(\n (source.get(\"cookie\") || \"\").split(\";\").map((value) => {\n const index = value.indexOf(\"=\");\n if (index < 0) return [\"\", \"\"];\n return [value.slice(0, index).trim(), value.slice(index + 1).trim()];\n }),\n );\n const sid = cookies.get(\"sid\");\n if (sid) return sid;\n const token = cookies.get(\"_s_token_\") || \"\";\n if (token.startsWith(\"{\")) {\n try {\n return String(JSON.parse(token).sid || \"\");\n } catch {\n /* ignore */\n }\n }\n return token;\n}\n\n/** 浏览器请求只带 X-User-Agent。User-Agent 由浏览器自己发,不在前端伪造。 */\nexport function buildBrowserApiHeaders(devID = \"\", sid = \"\") {\n const ua = typeof navigator !== \"undefined\" ? navigator.userAgent : \"\";\n return { \"X-User-Agent\": xUserAgent(ua, { devID, sid }) };\n}\n\n/** 从请求头解析客户端 IP,优先 X-Real-IP,其次 X-Forwarded-For 第一段。 */\nexport function clientIp(source: HeaderSource, fallback = \"\") {\n const candidates = [source.get(\"x-real-ip\"), source.get(\"x-forwarded-for\")?.split(\",\")[0], fallback];\n for (const value of candidates) {\n const ip = value?.trim() || \"\";\n if (ip && isIP(ip)) return ip;\n }\n return \"\";\n}\n\n/**\n * 服务端转给上游的身份头:保留浏览器 User-Agent / X-User-Agent,并补上 X-Real-IP。\n * 没有浏览器上下文时回退到合成 X-User-Agent。\n */\nexport function clientHeaders(\n source?: HeaderSource,\n overrides: { userAgent?: string; clientIp?: string; devID?: string } = {},\n): Record {\n const result: Record = {};\n const ua = (overrides.userAgent || source?.get(\"user-agent\") || \"\").trim();\n if (ua) result[\"User-Agent\"] = ua;\n\n const incomingXua = source?.get(\"x-user-agent\")?.trim() || \"\";\n if (incomingXua) {\n result[\"X-User-Agent\"] = incomingXua;\n } else if (ua) {\n result[\"X-User-Agent\"] = xUserAgent(ua, { sid: source ? sessionId(source) : \"\" });\n } else {\n Object.assign(result, buildBrowserApiHeaders(overrides.devID || \"web-ssr\"));\n }\n\n const ip = overrides.clientIp || (source ? clientIp(source) : \"\");\n if (ip) result[\"X-Real-IP\"] = ip;\n\n return result;\n}\n"],"names":["APP_VER","trim","clean","value","replace","isIP","test","split","every","part","n","Number","String","includes","sysType","ua","toLowerCase","guessAndroidBrand","model","brands","find","pattern","parseBrowser","edge","match","opera","chrome","safari","firefox","ie","parseDeviceFromUA","raw","deviceBrand","deviceModel","deviceType","systemName","systemVersion","ios","version","win","mac","devType","map","filter","Boolean","join","buildID","xUserAgent","extra","info","devID","sid","sessionId","source","cookies","Map","get","index","indexOf","slice","token","startsWith","JSON","parse","buildBrowserApiHeaders","navigator","userAgent","clientIp","fallback","candidates","ip","clientHeaders","overrides","result","incomingXua","Object","assign"],"mappings":"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"}}, + {"offset": {"line": 242, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/config.ts"],"sourcesContent":["/**\n * 浏览器接口根地址。\n * 留空时走同域 `/api/*`,由服务端转到 API_PROXY_TARGET。\n */\nconst DEFAULT_UPSTREAM = \"https://webhgbapi.mfcg.me\";\nconst raw = process.env.NEXT_PUBLIC_API_BASE_URL;\nexport const API_BASE_URL = (raw ?? \"\").replace(/\\/$/, \"\");\n\n/** 代理目标指回当前 Node 进程时,请求会打到自己,发布后接口表现为不通。 */\nexport function pointsAtThisServer(base: string) {\n try {\n const url = new URL(base);\n const loopback = url.hostname === \"127.0.0.1\" || url.hostname === \"localhost\" || url.hostname === \"::1\";\n if (!loopback) return false;\n const port = url.port || (url.protocol === \"https:\" ? \"443\" : \"80\");\n const listen = process.env.PORT?.trim();\n return !listen || port === listen;\n } catch {\n return false;\n }\n}\n\n/** 服务端直连上游(相对路径在 Node fetch 中不可用) */\nexport function getServerApiBaseUrl() {\n const proxy = process.env.API_PROXY_TARGET?.trim().replace(/\\/$/, \"\");\n const configured = proxy || raw?.trim().replace(/\\/$/, \"\") || \"\";\n if (configured && !pointsAtThisServer(configured)) return configured;\n return DEFAULT_UPSTREAM;\n}\n"],"names":["DEFAULT_UPSTREAM","raw","API_BASE_URL","replace","pointsAtThisServer","base","url","URL","loopback","hostname","port","protocol","listen","process","env","PORT","trim","getServerApiBaseUrl","proxy","API_PROXY_TARGET","configured"],"mappings":";;;;;;;;AAAA;;;CAGC,GACD,MAAMA,mBAAmB;AACzB,MAAMC;AACC,MAAMC,eAAe,CAACD,OAAO,EAAE,EAAEE,OAAO,CAAC,OAAO;AAGhD,SAASC,mBAAmBC,IAAY;IAC7C,IAAI;QACF,MAAMC,MAAM,IAAIC,IAAIF;QACpB,MAAMG,WAAWF,IAAIG,QAAQ,KAAK,eAAeH,IAAIG,QAAQ,KAAK,eAAeH,IAAIG,QAAQ,KAAK;QAClG,IAAI,CAACD,UAAU,OAAO;QACtB,MAAME,OAAOJ,IAAII,IAAI,IAAI,CAACJ,IAAIK,QAAQ,KAAK,WAAW,QAAQ,IAAI;QAClE,MAAMC,SAASC,QAAQC,GAAG,CAACC,IAAI,EAAEC;QACjC,OAAO,CAACJ,UAAUF,SAASE;IAC7B,EAAE,OAAM;QACN,OAAO;IACT;AACF;AAGO,SAASK;IACd,MAAMC,QAAQL,QAAQC,GAAG,CAACK,gBAAgB,EAAEH,OAAOb,QAAQ,OAAO;IAClE,MAAMiB,aAAaF,SAASjB,KAAKe,OAAOb,QAAQ,OAAO,OAAO;IAC9D,IAAIiB,cAAc,CAAChB,mBAAmBgB,aAAa,OAAOA;IAC1D,OAAOpB;AACT"}}, + {"offset": {"line": 278, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/media/proxy.ts"],"sourcesContent":["import { clientHeaders } from \"@/lib/api/client-headers\";\nimport { getServerApiBaseUrl } from \"@/lib/api/config\";\n\nconst FORWARD_HEADERS = [\"range\", \"if-range\", \"accept\", \"cookie\"];\n\n/** 正式服 app;H5 自指时代理会 508,密钥/媒资回退到这里。 */\nconst DEFAULT_MEDIA_API = \"http://139.162.49.252:21036\";\n/** config/info.mediaAppUsCdn;Go 未配 cdnDomain 时用它拉原始 m3u8 / 分片。 */\nconst DEFAULT_MEDIA_CDN = \"https://dyum53hre43nj.cloudfront.net\";\n\n/** 密钥地址去掉 enkey 与查询串之间的斜杠:enkey/?id= → enkey?id=(newenkey 同样适用)。 */\nexport function stripEnkeySlash(playlist: string) {\n return playlist.replace(/enkey\\/\\?/g, \"enkey?\");\n}\n\nfunction uniqBases(...values: Array) {\n const bases: string[] = [];\n for (const value of values) {\n const base = value?.trim().replace(/\\/$/, \"\") || \"\";\n if (base && !bases.includes(base)) bases.push(base);\n }\n return bases;\n}\n\n/**\n * 测试/预发常把 API_PROXY_TARGET 写成公开 H5 自身。\n * 媒资若再 fetch 该域名会打回本进程,请求挂死(线上表现为 /h5/m3u8 一直转圈)。\n */\nfunction isSelfHostedMediaOrigin(base: string) {\n try {\n const host = new URL(base).hostname.toLowerCase();\n if (host === \"127.0.0.1\" || host === \"localhost\" || host === \"::1\") return true;\n\n const site = process.env.NEXT_PUBLIC_SITE_URL?.trim();\n if (site) {\n try {\n if (new URL(site).hostname.toLowerCase() === host) return true;\n } catch {\n /* ignore */\n }\n }\n\n // 未配 SITE_URL 时,仍避开本项目常见公开 H5 域名\n if (host === \"huangguoduanju.im\" || host === \"www.huangguoduanju.im\") return true;\n return false;\n } catch {\n return true;\n }\n}\n\n/** 可安全直连的媒资 API(排除 H5 自指)。 */\nfunction mediaApiOrigin() {\n const dedicated = process.env.MEDIA_API_PROXY_TARGET?.trim().replace(/\\/$/, \"\");\n if (dedicated && !isSelfHostedMediaOrigin(dedicated)) return dedicated;\n\n const fromApi = getServerApiBaseUrl();\n if (fromApi && !isSelfHostedMediaOrigin(fromApi)) return fromApi;\n\n return DEFAULT_MEDIA_API;\n}\n\n/** 播放列表上游:只走 app 媒资 API,失败再 CDN 改写(绝不打回本站 H5)。 */\nfunction mediaPlaylistBases() {\n return uniqBases(mediaApiOrigin());\n}\n\n/** 密钥上游:app 缺 m3u8.key 时可额外回退其它 H5(仍排除本站)。 */\nfunction mediaKeyBases() {\n const extras = (\n process.env.MEDIA_KEY_FALLBACK_ORIGINS ||\n // app 缺 m3u8.key 时的临时回退;与 config/*.env 中 MEDIA_KEY_FALLBACK_ORIGINS 一致\n \"https://91dj-h5.80sygtm.com\"\n )\n .split(\",\")\n .map((value) => value.trim().replace(/\\/$/, \"\"))\n .filter((value) => value && !isSelfHostedMediaOrigin(value));\n return uniqBases(mediaApiOrigin(), ...extras);\n}\n\nfunction mediaCdnOrigin() {\n return (process.env.MEDIA_CDN_ORIGIN || DEFAULT_MEDIA_CDN).replace(/\\/$/, \"\");\n}\n\nfunction upstreamUrl(base: string, pathname: string, search: string) {\n const target = new URL(base);\n target.pathname = pathname;\n target.search = search;\n return target;\n}\n\nfunction forwardHeaders(request: Request) {\n const headers = new Headers();\n for (const name of FORWARD_HEADERS) {\n const value = request.headers.get(name);\n if (value) headers.set(name, value);\n }\n for (const [name, value] of Object.entries(clientHeaders(request.headers))) {\n headers.set(name, value);\n }\n if (!headers.has(\"accept\")) headers.set(\"accept\", \"*/*\");\n return headers;\n}\n\nfunction noStore(response: Response) {\n const headers = new Headers({ \"cache-control\": \"no-store\" });\n for (const name of [\"content-type\", \"content-length\", \"content-range\", \"accept-ranges\"]) {\n const value = response.headers.get(name);\n if (value) headers.set(name, value);\n }\n return headers;\n}\n\nfunction isUnusableUpstream(status: number, body: string, contentType: string) {\n if (status === 508) return true;\n if (status >= 500) return true;\n if (!body.startsWith(\"{\")) return false;\n if (!/json/i.test(contentType) && status === 200) return false;\n try {\n const payload = JSON.parse(body) as {\n code?: number;\n data?: { msg?: string; code?: number };\n msg?: string;\n tip?: string;\n };\n const code = payload.code ?? 0;\n if (code && code !== 200) return true;\n const msg = `${payload.data?.msg || \"\"} ${payload.msg || \"\"} ${payload.tip || \"\"}`;\n return /cdnDomain|origDomain|文件服务器|代理回环/i.test(msg);\n } catch {\n return false;\n }\n}\n\nfunction joinUrl(base: string, ...parts: string[]) {\n const path = parts\n .map((part) => part.replace(/^\\/+|\\/+$/g, \"\"))\n .filter(Boolean)\n .join(\"/\");\n return `${base.replace(/\\/$/, \"\")}/${path}`;\n}\n\n/** 上游 m3u8 不可用时:从媒资 CDN 拉原始列表,改写密钥与分片为同域可播地址。 */\nasync function transformPlaylistFromCdn(request: Request) {\n const incoming = new URL(request.url);\n const rel = incoming.pathname.replace(/^\\/h5\\/m3u8\\/?/i, \"\").replace(/^\\/+/, \"\");\n if (!rel) return new Response(\"缺少媒资路径\", { status: 400, headers: { \"cache-control\": \"no-store\" } });\n\n const cdn = mediaCdnOrigin();\n const rawUrl = joinUrl(cdn, rel.split(\"?\")[0]);\n try {\n const response = await fetch(rawUrl, {\n headers: { accept: \"*/*\", \"user-agent\": request.headers.get(\"user-agent\") || \"Mozilla/5.0\" },\n cache: \"no-store\",\n redirect: \"follow\",\n signal: AbortSignal.timeout(20_000),\n });\n if (!response.ok) {\n return new Response(\"视频资源请求失败\", { status: 502, headers: { \"cache-control\": \"no-store\" } });\n }\n const raw = await response.text();\n if (!raw.includes(\"#EXTM3U\")) {\n return new Response(\"视频资源格式错误\", { status: 502, headers: { \"cache-control\": \"no-store\" } });\n }\n\n const keyUri = `/enkey${incoming.search || \"\"}`;\n const dir = rel.includes(\"/\") ? rel.slice(0, rel.lastIndexOf(\"/\")) : \"\";\n const lines = raw.split(/\\r?\\n/).map((line) => {\n const trimmed = line.trim();\n if (!trimmed) return line;\n if (trimmed.startsWith(\"#EXT-X-KEY:\")) {\n return `#EXT-X-KEY:METHOD=AES-128,URI=\"${keyUri}\"`;\n }\n if (trimmed.startsWith(\"#\")) return line;\n if (/^https?:\\/\\//i.test(trimmed)) return line;\n const segment = trimmed.split(\"?\")[0].replace(/^\\/+/, \"\");\n return joinUrl(cdn, dir, segment);\n });\n\n return new Response(stripEnkeySlash(lines.join(\"\\n\")), {\n status: 200,\n headers: {\n \"cache-control\": \"no-store\",\n \"content-type\": \"application/vnd.apple.mpegurl\",\n },\n });\n } catch {\n return new Response(\"视频资源请求失败\", { status: 502, headers: { \"cache-control\": \"no-store\" } });\n }\n}\n\n/** 密钥:浏览器始终访问 /enkey?id=;服务端跟随上游尾斜杠重定向。 */\nexport async function proxyKey(request: Request, pathname: \"/enkey\" | \"/newenkey\") {\n const incoming = new URL(request.url);\n const keyHeaders = new Headers({ accept: \"*/*\" });\n const ua = request.headers.get(\"user-agent\");\n if (ua) keyHeaders.set(\"user-agent\", ua);\n for (const [name, value] of Object.entries(clientHeaders(request.headers))) {\n if (name === \"User-Agent\" || name === \"X-User-Agent\" || name === \"X-Real-IP\") {\n keyHeaders.set(name, value);\n }\n }\n\n for (const base of mediaKeyBases()) {\n // 直接打带尾斜杠路径,避免 301 在部分运行时丢 query\n const pathWithSlash = pathname.endsWith(\"/\") ? pathname : `${pathname}/`;\n const candidates = [pathWithSlash, pathname];\n let gotKey = false;\n for (const path of candidates) {\n const target = upstreamUrl(base, path, incoming.search);\n try {\n const response = await fetch(target.href, {\n headers: keyHeaders,\n cache: \"no-store\",\n redirect: \"follow\",\n signal: AbortSignal.timeout(15_000),\n });\n const type = response.headers.get(\"content-type\") || \"\";\n const buffer = await response.arrayBuffer();\n if (response.ok && buffer.byteLength > 0 && !/json/i.test(type) && response.status !== 508) {\n gotKey = true;\n return new Response(buffer, {\n status: 200,\n headers: {\n \"cache-control\": \"no-store\",\n \"content-type\": type || \"application/octet-stream\",\n },\n });\n }\n const text = new TextDecoder().decode(buffer);\n if (!isUnusableUpstream(response.status, text, type) && /json/i.test(type)) {\n // 明确业务错误且非「可换源」时仍试下一个源\n }\n } catch {\n /* try next path / base */\n }\n }\n if (gotKey) break;\n }\n\n return new Response(\"视频密钥暂不可用\", { status: 502, headers: { \"cache-control\": \"no-store\" } });\n}\n\n/** 同域 HLS。优先上游;H5 自指 508 / Go 未配域名时回退 CDN 改写。 */\nexport async function proxyHls(request: Request) {\n const incoming = new URL(request.url);\n for (const base of mediaPlaylistBases()) {\n const target = upstreamUrl(base, incoming.pathname, incoming.search);\n try {\n const response = await fetch(target, {\n headers: forwardHeaders(request),\n cache: \"no-store\",\n redirect: \"follow\",\n signal: AbortSignal.timeout(20_000),\n });\n const type = response.headers.get(\"content-type\") || \"\";\n const playlist = /\\.m3u8$/i.test(incoming.pathname) || /mpegurl|m3u8/i.test(type);\n if (!playlist) {\n if (response.status === 508) continue;\n return new Response(response.body, { status: response.status, headers: noStore(response) });\n }\n const text = await response.text();\n if (isUnusableUpstream(response.status, text, type) || !text.includes(\"#EXTM3U\")) {\n continue;\n }\n const headers = noStore(response);\n headers.delete(\"content-length\");\n if (!headers.has(\"content-type\")) headers.set(\"content-type\", \"application/vnd.apple.mpegurl\");\n return new Response(stripEnkeySlash(text), { status: response.status, headers });\n } catch {\n /* try next base / CDN fallback */\n }\n }\n\n return transformPlaylistFromCdn(request);\n}\n"],"names":["FORWARD_HEADERS","DEFAULT_MEDIA_API","DEFAULT_MEDIA_CDN","stripEnkeySlash","playlist","replace","uniqBases","values","bases","value","base","trim","includes","push","isSelfHostedMediaOrigin","host","URL","hostname","toLowerCase","site","mediaApiOrigin","dedicated","process","env","MEDIA_API_PROXY_TARGET","fromApi","mediaPlaylistBases","mediaKeyBases","extras","MEDIA_KEY_FALLBACK_ORIGINS","split","map","filter","mediaCdnOrigin","MEDIA_CDN_ORIGIN","upstreamUrl","pathname","search","target","forwardHeaders","request","headers","Headers","name","get","set","Object","entries","has","noStore","response","isUnusableUpstream","status","body","contentType","startsWith","test","payload","JSON","parse","code","msg","data","tip","joinUrl","parts","path","part","Boolean","join","transformPlaylistFromCdn","incoming","url","rel","Response","cdn","rawUrl","fetch","accept","cache","redirect","signal","AbortSignal","timeout","ok","raw","text","keyUri","dir","slice","lastIndexOf","lines","line","trimmed","segment","proxyKey","keyHeaders","ua","pathWithSlash","endsWith","candidates","gotKey","href","type","buffer","arrayBuffer","byteLength","TextDecoder","decode","proxyHls","delete"],"mappings":"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"}}] +} \ No newline at end of file diff --git a/.next-dev/dev/server/chunks/_next-internal_server_app_enkey_route_actions_0jqwrpk0x1_pi.js b/.next-dev/dev/server/chunks/_next-internal_server_app_enkey_route_actions_0jqwrpk0x1_pi.js new file mode 100644 index 0000000..c734b70 --- /dev/null +++ b/.next-dev/dev/server/chunks/_next-internal_server_app_enkey_route_actions_0jqwrpk0x1_pi.js @@ -0,0 +1,9 @@ +module.exports = [ +"[project]/.next-internal/server/app/enkey/route/actions.js [app-rsc] (server actions loader, ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([]); +}), +]; + +//# sourceMappingURL=_next-internal_server_app_enkey_route_actions_0jqwrpk0x1_pi.js.map \ No newline at end of file diff --git a/.next-dev/dev/server/chunks/_next-internal_server_app_enkey_route_actions_0jqwrpk0x1_pi.js.map b/.next-dev/dev/server/chunks/_next-internal_server_app_enkey_route_actions_0jqwrpk0x1_pi.js.map new file mode 100644 index 0000000..ec80008 --- /dev/null +++ b/.next-dev/dev/server/chunks/_next-internal_server_app_enkey_route_actions_0jqwrpk0x1_pi.js.map @@ -0,0 +1,6 @@ +{ + "version": 3, + "sources": [], + "sections": [ + {"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}] +} \ No newline at end of file diff --git a/.next-dev/dev/server/chunks/_next-internal_server_app_h5_chapter-detail_route_actions_1xc2wcl27dmcm.js b/.next-dev/dev/server/chunks/_next-internal_server_app_h5_chapter-detail_route_actions_1xc2wcl27dmcm.js new file mode 100644 index 0000000..157c85a --- /dev/null +++ b/.next-dev/dev/server/chunks/_next-internal_server_app_h5_chapter-detail_route_actions_1xc2wcl27dmcm.js @@ -0,0 +1,9 @@ +module.exports = [ +"[project]/.next-internal/server/app/h5/chapter-detail/route/actions.js [app-rsc] (server actions loader, ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([]); +}), +]; + +//# sourceMappingURL=_next-internal_server_app_h5_chapter-detail_route_actions_1xc2wcl27dmcm.js.map \ No newline at end of file diff --git a/.next-dev/dev/server/chunks/_next-internal_server_app_h5_chapter-detail_route_actions_1xc2wcl27dmcm.js.map b/.next-dev/dev/server/chunks/_next-internal_server_app_h5_chapter-detail_route_actions_1xc2wcl27dmcm.js.map new file mode 100644 index 0000000..ec80008 --- /dev/null +++ b/.next-dev/dev/server/chunks/_next-internal_server_app_h5_chapter-detail_route_actions_1xc2wcl27dmcm.js.map @@ -0,0 +1,6 @@ +{ + "version": 3, + "sources": [], + "sections": [ + {"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}] +} \ No newline at end of file diff --git a/.next-dev/dev/server/chunks/_next-internal_server_app_h5_m3u8_[___path]_route_actions_1-5tcp3v1fddu.js b/.next-dev/dev/server/chunks/_next-internal_server_app_h5_m3u8_[___path]_route_actions_1-5tcp3v1fddu.js new file mode 100644 index 0000000..911a3cf --- /dev/null +++ b/.next-dev/dev/server/chunks/_next-internal_server_app_h5_m3u8_[___path]_route_actions_1-5tcp3v1fddu.js @@ -0,0 +1,9 @@ +module.exports = [ +"[project]/.next-internal/server/app/h5/m3u8/[...path]/route/actions.js [app-rsc] (server actions loader, ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([]); +}), +]; + +//# sourceMappingURL=_next-internal_server_app_h5_m3u8_%5B___path%5D_route_actions_1-5tcp3v1fddu.js.map \ No newline at end of file diff --git a/.next-dev/dev/server/chunks/_next-internal_server_app_h5_m3u8_[___path]_route_actions_1-5tcp3v1fddu.js.map b/.next-dev/dev/server/chunks/_next-internal_server_app_h5_m3u8_[___path]_route_actions_1-5tcp3v1fddu.js.map new file mode 100644 index 0000000..ec80008 --- /dev/null +++ b/.next-dev/dev/server/chunks/_next-internal_server_app_h5_m3u8_[___path]_route_actions_1-5tcp3v1fddu.js.map @@ -0,0 +1,6 @@ +{ + "version": 3, + "sources": [], + "sections": [ + {"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}] +} \ No newline at end of file diff --git a/.next-dev/dev/server/chunks/node_modules_next_0fizghk6jc8ls._.js b/.next-dev/dev/server/chunks/node_modules_next_0fizghk6jc8ls._.js new file mode 100644 index 0000000..02730ae --- /dev/null +++ b/.next-dev/dev/server/chunks/node_modules_next_0fizghk6jc8ls._.js @@ -0,0 +1,21610 @@ +module.exports = [ +(()=>{"use strict";return[ +"[project]/node_modules/next/dist/client/components/hooks-server-context.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + DynamicServerError: null, + isDynamicServerError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + DynamicServerError: function() { + return DynamicServerError; + }, + isDynamicServerError: function() { + return isDynamicServerError; + } +}); +const DYNAMIC_ERROR_CODE = 'DYNAMIC_SERVER_USAGE'; +class DynamicServerError extends Error { + constructor(description){ + super(`Dynamic server usage: ${description}`), this.description = description, this.digest = DYNAMIC_ERROR_CODE; + } +} +function isDynamicServerError(err) { + if (typeof err !== 'object' || err === null || !('digest' in err) || typeof err.digest !== 'string') { + return false; + } + return err.digest === DYNAMIC_ERROR_CODE; +} +if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { + value: true + }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} +}), +"[project]/node_modules/next/dist/client/components/static-generation-bailout.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + StaticGenBailoutError: null, + isStaticGenBailoutError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + StaticGenBailoutError: function() { + return StaticGenBailoutError; + }, + isStaticGenBailoutError: function() { + return isStaticGenBailoutError; + } +}); +const NEXT_STATIC_GEN_BAILOUT = 'NEXT_STATIC_GEN_BAILOUT'; +class StaticGenBailoutError extends Error { + constructor(...args){ + super(...args), this.code = NEXT_STATIC_GEN_BAILOUT; + } +} +function isStaticGenBailoutError(error) { + if (typeof error !== 'object' || error === null || !('code' in error)) { + return false; + } + return error.code === NEXT_STATIC_GEN_BAILOUT; +} +if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') { + Object.defineProperty(exports.default, '__esModule', { + value: true + }); + Object.assign(exports.default, exports); + module.exports = exports.default; +} +}), +"[project]/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all)=>{ + for(var name in all)__defProp(target, name, { + get: all[name], + enumerable: true + }); +}; +var __copyProps = (to, from, except, desc)=>{ + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from))if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { + get: ()=>from[key], + enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable + }); + } + return to; +}; +var __toCommonJS = (mod)=>__copyProps(__defProp({}, "__esModule", { + value: true + }), mod); +// src/index.ts +var src_exports = {}; +__export(src_exports, { + RequestCookies: ()=>RequestCookies, + ResponseCookies: ()=>ResponseCookies, + parseCookie: ()=>parseCookie, + parseSetCookie: ()=>parseSetCookie, + stringifyCookie: ()=>stringifyCookie +}); +module.exports = __toCommonJS(src_exports); +// src/serialize.ts +function stringifyCookie(c) { + var _a; + const attrs = [ + "path" in c && c.path && `Path=${c.path}`, + "expires" in c && (c.expires || c.expires === 0) && `Expires=${(typeof c.expires === "number" ? new Date(c.expires) : c.expires).toUTCString()}`, + "maxAge" in c && typeof c.maxAge === "number" && `Max-Age=${c.maxAge}`, + "domain" in c && c.domain && `Domain=${c.domain}`, + "secure" in c && c.secure && "Secure", + "httpOnly" in c && c.httpOnly && "HttpOnly", + "sameSite" in c && c.sameSite && `SameSite=${c.sameSite}`, + "partitioned" in c && c.partitioned && "Partitioned", + "priority" in c && c.priority && `Priority=${c.priority}` + ].filter(Boolean); + const stringified = `${c.name}=${encodeURIComponent((_a = c.value) != null ? _a : "")}`; + return attrs.length === 0 ? stringified : `${stringified}; ${attrs.join("; ")}`; +} +function parseCookie(cookie) { + const map = /* @__PURE__ */ new Map(); + for (const pair of cookie.split(/; */)){ + if (!pair) continue; + const splitAt = pair.indexOf("="); + if (splitAt === -1) { + map.set(pair, "true"); + continue; + } + const [key, value] = [ + pair.slice(0, splitAt), + pair.slice(splitAt + 1) + ]; + try { + map.set(key, decodeURIComponent(value != null ? value : "true")); + } catch {} + } + return map; +} +function parseSetCookie(setCookie) { + if (!setCookie) { + return void 0; + } + const [[name, value], ...attributes] = parseCookie(setCookie); + const { domain, expires, httponly, maxage, path, samesite, secure, partitioned, priority } = Object.fromEntries(attributes.map(([key, value2])=>[ + key.toLowerCase().replace(/-/g, ""), + value2 + ])); + const cookie = { + name, + value: decodeURIComponent(value), + domain, + ...expires && { + expires: new Date(expires) + }, + ...httponly && { + httpOnly: true + }, + ...typeof maxage === "string" && { + maxAge: Number(maxage) + }, + path, + ...samesite && { + sameSite: parseSameSite(samesite) + }, + ...secure && { + secure: true + }, + ...priority && { + priority: parsePriority(priority) + }, + ...partitioned && { + partitioned: true + } + }; + return compact(cookie); +} +function compact(t) { + const newT = {}; + for(const key in t){ + if (t[key]) { + newT[key] = t[key]; + } + } + return newT; +} +var SAME_SITE = [ + "strict", + "lax", + "none" +]; +function parseSameSite(string) { + string = string.toLowerCase(); + return SAME_SITE.includes(string) ? string : void 0; +} +var PRIORITY = [ + "low", + "medium", + "high" +]; +function parsePriority(string) { + string = string.toLowerCase(); + return PRIORITY.includes(string) ? string : void 0; +} +function splitCookiesString(cookiesString) { + if (!cookiesString) return []; + var cookiesStrings = []; + var pos = 0; + var start; + var ch; + var lastComma; + var nextStart; + var cookiesSeparatorFound; + function skipWhitespace() { + while(pos < cookiesString.length && /\s/.test(cookiesString.charAt(pos))){ + pos += 1; + } + return pos < cookiesString.length; + } + function notSpecialChar() { + ch = cookiesString.charAt(pos); + return ch !== "=" && ch !== ";" && ch !== ","; + } + while(pos < cookiesString.length){ + start = pos; + cookiesSeparatorFound = false; + while(skipWhitespace()){ + ch = cookiesString.charAt(pos); + if (ch === ",") { + lastComma = pos; + pos += 1; + skipWhitespace(); + nextStart = pos; + while(pos < cookiesString.length && notSpecialChar()){ + pos += 1; + } + if (pos < cookiesString.length && cookiesString.charAt(pos) === "=") { + cookiesSeparatorFound = true; + pos = nextStart; + cookiesStrings.push(cookiesString.substring(start, lastComma)); + start = pos; + } else { + pos = lastComma + 1; + } + } else { + pos += 1; + } + } + if (!cookiesSeparatorFound || pos >= cookiesString.length) { + cookiesStrings.push(cookiesString.substring(start, cookiesString.length)); + } + } + return cookiesStrings; +} +// src/request-cookies.ts +var RequestCookies = class { + constructor(requestHeaders){ + /** @internal */ this._parsed = /* @__PURE__ */ new Map(); + this._headers = requestHeaders; + const header = requestHeaders.get("cookie"); + if (header) { + const parsed = parseCookie(header); + for (const [name, value] of parsed){ + this._parsed.set(name, { + name, + value + }); + } + } + } + [Symbol.iterator]() { + return this._parsed[Symbol.iterator](); + } + /** + * The amount of cookies received from the client + */ get size() { + return this._parsed.size; + } + get(...args) { + const name = typeof args[0] === "string" ? args[0] : args[0].name; + return this._parsed.get(name); + } + getAll(...args) { + var _a; + const all = Array.from(this._parsed); + if (!args.length) { + return all.map(([_, value])=>value); + } + const name = typeof args[0] === "string" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name; + return all.filter(([n])=>n === name).map(([_, value])=>value); + } + has(name) { + return this._parsed.has(name); + } + set(...args) { + const [name, value] = args.length === 1 ? [ + args[0].name, + args[0].value + ] : args; + const map = this._parsed; + map.set(name, { + name, + value + }); + this._headers.set("cookie", Array.from(map).map(([_, value2])=>stringifyCookie(value2)).join("; ")); + return this; + } + /** + * Delete the cookies matching the passed name or names in the request. + */ delete(names) { + const map = this._parsed; + const result = !Array.isArray(names) ? map.delete(names) : names.map((name)=>map.delete(name)); + this._headers.set("cookie", Array.from(map).map(([_, value])=>stringifyCookie(value)).join("; ")); + return result; + } + /** + * Delete all the cookies in the cookies in the request. + */ clear() { + this.delete(Array.from(this._parsed.keys())); + return this; + } + /** + * Format the cookies in the request as a string for logging + */ [Symbol.for("edge-runtime.inspect.custom")]() { + return `RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`; + } + toString() { + return [ + ...this._parsed.values() + ].map((v)=>`${v.name}=${encodeURIComponent(v.value)}`).join("; "); + } +}; +// src/response-cookies.ts +var ResponseCookies = class { + constructor(responseHeaders){ + /** @internal */ this._parsed = /* @__PURE__ */ new Map(); + var _a, _b, _c; + this._headers = responseHeaders; + const setCookie = (_c = (_b = (_a = responseHeaders.getSetCookie) == null ? void 0 : _a.call(responseHeaders)) != null ? _b : responseHeaders.get("set-cookie")) != null ? _c : []; + const cookieStrings = Array.isArray(setCookie) ? setCookie : splitCookiesString(setCookie); + for (const cookieString of cookieStrings){ + const parsed = parseSetCookie(cookieString); + if (parsed) this._parsed.set(parsed.name, parsed); + } + } + /** + * {@link https://wicg.github.io/cookie-store/#CookieStore-get CookieStore#get} without the Promise. + */ get(...args) { + const key = typeof args[0] === "string" ? args[0] : args[0].name; + return this._parsed.get(key); + } + /** + * {@link https://wicg.github.io/cookie-store/#CookieStore-getAll CookieStore#getAll} without the Promise. + */ getAll(...args) { + var _a; + const all = Array.from(this._parsed.values()); + if (!args.length) { + return all; + } + const key = typeof args[0] === "string" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name; + return all.filter((c)=>c.name === key); + } + has(name) { + return this._parsed.has(name); + } + /** + * {@link https://wicg.github.io/cookie-store/#CookieStore-set CookieStore#set} without the Promise. + */ set(...args) { + const [name, value, cookie] = args.length === 1 ? [ + args[0].name, + args[0].value, + args[0] + ] : args; + const map = this._parsed; + map.set(name, normalizeCookie({ + name, + value, + ...cookie + })); + replace(map, this._headers); + return this; + } + /** + * {@link https://wicg.github.io/cookie-store/#CookieStore-delete CookieStore#delete} without the Promise. + */ delete(...args) { + const [name, options] = typeof args[0] === "string" ? [ + args[0] + ] : [ + args[0].name, + args[0] + ]; + return this.set({ + ...options, + name, + value: "", + expires: /* @__PURE__ */ new Date(0) + }); + } + [Symbol.for("edge-runtime.inspect.custom")]() { + return `ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`; + } + toString() { + return [ + ...this._parsed.values() + ].map(stringifyCookie).join("; "); + } +}; +function replace(bag, headers) { + headers.delete("set-cookie"); + for (const [, value] of bag){ + const serialized = stringifyCookie(value); + headers.append("set-cookie", serialized); + } +} +function normalizeCookie(cookie = { + name: "", + value: "" +}) { + if (typeof cookie.expires === "number") { + cookie.expires = new Date(cookie.expires); + } + if (cookie.maxAge) { + cookie.expires = new Date(Date.now() + cookie.maxAge * 1e3); + } + if (cookie.path === null || cookie.path === void 0) { + cookie.path = "/"; + } + return cookie; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + RequestCookies, + ResponseCookies, + parseCookie, + parseSetCookie, + stringifyCookie +}); +}), +"[project]/node_modules/next/dist/esm/build/output/log.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "bootstrap", + ()=>bootstrap, + "error", + ()=>error, + "errorOnce", + ()=>errorOnce, + "event", + ()=>event, + "info", + ()=>info, + "prefixes", + ()=>prefixes, + "ready", + ()=>ready, + "trace", + ()=>trace, + "wait", + ()=>wait, + "warn", + ()=>warn, + "warnOnce", + ()=>warnOnce +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/picocolors.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/lru-cache.js [app-route] (ecmascript)"); +; +; +const prefixes = { + wait: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["white"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["bold"])('○')), + error: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["red"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["bold"])('⨯')), + warn: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["yellow"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["bold"])('⚠')), + ready: '▲', + info: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["white"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["bold"])(' ')), + event: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["green"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["bold"])('✓')), + trace: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["magenta"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["bold"])('»')) +}; +const LOGGING_METHOD = { + log: 'log', + warn: 'warn', + error: 'error' +}; +function prefixedLog(prefixType, ...message) { + if ((message[0] === '' || message[0] === undefined) && message.length === 1) { + message.shift(); + } + const consoleMethod = prefixType in LOGGING_METHOD ? LOGGING_METHOD[prefixType] : 'log'; + const prefix = prefixes[prefixType]; + // If there's no message, don't print the prefix but a new line + if (message.length === 0) { + console[consoleMethod](''); + } else { + // Ensure if there's ANSI escape codes it's concatenated into one string. + // Chrome DevTool can only handle color if it's in one string. + if (message.length === 1 && typeof message[0] === 'string') { + console[consoleMethod](prefix + ' ' + message[0]); + } else { + console[consoleMethod](prefix, ...message); + } + } +} +function bootstrap(message) { + console.log(message); +} +function wait(...message) { + prefixedLog('wait', ...message); +} +function error(...message) { + prefixedLog('error', ...message); +} +function warn(...message) { + prefixedLog('warn', ...message); +} +function ready(...message) { + prefixedLog('ready', ...message); +} +function info(...message) { + prefixedLog('info', ...message); +} +function event(...message) { + prefixedLog('event', ...message); +} +function trace(...message) { + prefixedLog('trace', ...message); +} +const warnOnceCache = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["LRUCache"](10000, (value)=>value.length); +function warnOnce(...message) { + const key = message.join(' '); + if (!warnOnceCache.has(key)) { + warnOnceCache.set(key, key); + warn(...message); + } +} +const errorOnceCache = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["LRUCache"](10000, (value)=>value.length); +function errorOnce(...message) { + const key = message.join(' '); + if (!errorOnceCache.has(key)) { + errorOnceCache.set(key, key); + error(...message); + } +} +}), +"[project]/node_modules/next/dist/esm/build/templates/app-route.js { INNER_APP_ROUTE => \"[project]/src/app/h5/chapter-detail/route.ts [app-route] (ecmascript)\" } [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "handler", + ()=>handler, + "patchFetch", + ()=>patchFetch, + "routeModule", + ()=>routeModule, + "serverHooks", + ()=>serverHooks, + "workAsyncStorage", + ()=>workAsyncStorage, + "workUnitAsyncStorage", + ()=>workUnitAsyncStorage +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$modules$2f$app$2d$route$2f$module$2e$compiled$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/route-modules/app-route/module.compiled.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/route-kind.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$patch$2d$fetch$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/patch-fetch.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/request-meta.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$manifests$2d$singleton$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/manifests-singleton.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$node$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/base-http/node.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/next-request.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$instrumentation$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/instrumentation/utils.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/send-response.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/utils.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$cache$2d$control$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/cache-control.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/shared/lib/no-fallback-error.external.js [external] (next/dist/shared/lib/no-fallback-error.external.js, cjs)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$route$2d$cache$2d$key$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/route-cache-key.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/index.js [app-route] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/types.js [app-route] (ecmascript)"); +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +// We inject the nextConfigOutput here so that we can use them in the route +// module. +const nextConfigOutput = "standalone"; +const routeModule = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$modules$2f$app$2d$route$2f$module$2e$compiled$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["AppRouteRouteModule"]({ + definition: { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].APP_ROUTE, + page: "/h5/chapter-detail/route", + pathname: "/h5/chapter-detail", + filename: "route", + bundlePath: "" + }, + distDir: ("TURBOPACK compile-time value", ".next-dev/dev") || '', + relativeProjectDir: ("TURBOPACK compile-time value", "") || '', + resolvedPagePath: "[project]/src/app/h5/chapter-detail/route.ts", + nextConfigOutput, + // The lazy require factory ensures that: + // - In dev: devRequestTimingInternalsEnd is set before userland executes, + // correctly attributing module load time to application-code rather than + // framework internals. + // - In all modes: async modules (route files with top-level await) are + // handled correctly — require() returns a Promise for such modules, which + // ensureUserland() awaits before the first request is handled. + userland: ()=>__turbopack_context__.r("[project]/src/app/h5/chapter-detail/route.ts [app-route] (ecmascript)"), + // In Turbopack dev mode, also provide a synchronous per-request getter so + // server HMR updates are picked up without re-executing the entry chunk. + // Using require() (synchronous) avoids adding async overhead that would be + // incorrectly attributed to application-code time in devRequestTiming. + ...("TURBOPACK compile-time truthy", 1) ? { + getUserland: ()=>__turbopack_context__.r("[project]/src/app/h5/chapter-detail/route.ts [app-route] (ecmascript)") + } : "TURBOPACK unreachable" +}); +// Pull out the exports that we need to expose from the module. This should +// be eliminated when we've moved the other routes to the new format. These +// are used to hook into the route. +const { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule; +function patchFetch() { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$patch$2d$fetch$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["patchFetch"])({ + workAsyncStorage, + workUnitAsyncStorage + }); +} +; +async function handler(req, res, ctx) { + if (ctx.requestMeta) { + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["setRequestMeta"])(req, ctx.requestMeta); + } + if (routeModule.isDev) { + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["addRequestMeta"])(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint()); + } + let srcPage = "/h5/chapter-detail/route"; + // turbopack doesn't normalize `/index` in the page name + // so we need to to process dynamic routes properly + // TODO: fix turbopack providing differing value from webpack + if ("TURBOPACK compile-time truthy", 1) { + srcPage = srcPage.replace(/\/index$/, '') || '/'; + } else if (srcPage === '/index') { + // we always normalize /index specifically + srcPage = '/'; + } + const multiZoneDraftMode = ("TURBOPACK compile-time value", false); + const prepareResult = await routeModule.prepare(req, res, { + srcPage, + multiZoneDraftMode + }); + if (!prepareResult) { + res.statusCode = 400; + res.end('Bad Request'); + ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve()); + return null; + } + const { buildId, deploymentId, params, nextConfig, parsedUrl, isDraftMode, prerenderManifest, routerServerContext, isOnDemandRevalidate, revalidateOnlyGenerated, resolvedPathname, clientReferenceManifest, serverActionsManifest, previewProps } = prepareResult; + const normalizedSrcPage = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeAppPath"])(srcPage); + // Only this route's prerenders can establish ISR or admit generated params. + const isPrerendered = Boolean(prerenderManifest.routes[resolvedPathname]) && (routeModule.isDev || (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$route$2d$cache$2d$key$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isRouteCacheOwner"])(resolvedPathname, routeModule.cacheOwner, prerenderManifest.routes[resolvedPathname])); + let isIsr = Boolean(prerenderManifest.dynamicRoutes[normalizedSrcPage] || isPrerendered); + const render404 = async ()=>{ + // TODO: should route-module itself handle rendering the 404 + if (routerServerContext == null ? void 0 : routerServerContext.render404) { + await routerServerContext.render404(req, res, parsedUrl, false); + } else { + res.end('This page could not be found'); + } + return null; + }; + if (isIsr && !isDraftMode) { + const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage]; + if (prerenderInfo) { + if (prerenderInfo.fallback === false && !isPrerendered) { + if (nextConfig.adapterPath) { + return await render404(); + } + throw new __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js$2c$__cjs$29$__["NoFallbackError"](); + } + } + } + let cacheKey = null; + if (isIsr && !routeModule.isDev && !isDraftMode) { + cacheKey = resolvedPathname; + // ensure /index and / is normalized to one key + cacheKey = cacheKey === '/index' ? '/' : cacheKey; + } + // Before rendering (which initializes component tree modules), we have to + // set the reference manifests to our global store so Server Action's + // encryption util can access to them at the top level of the page module. + if (serverActionsManifest && clientReferenceManifest) { + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$manifests$2d$singleton$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["setManifestsSingleton"])({ + page: srcPage, + clientReferenceManifest, + serverActionsManifest + }); + } + const method = req.method || 'GET'; + const tracer = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])(); + const activeSpan = tracer.getActiveScopeSpan(); + const isWrappedByNextServer = Boolean(routerServerContext == null ? void 0 : routerServerContext.isWrappedByNextServer); + const isMinimalMode = Boolean((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'minimalMode')); + const incrementalCache = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'incrementalCache') || await routeModule.getIncrementalCache(req, nextConfig, previewProps, prerenderManifest, isMinimalMode); + incrementalCache == null ? void 0 : incrementalCache.resetRequestCache(); + globalThis.__incrementalCache = incrementalCache; + const context = { + params, + previewProps, + renderOpts: { + experimental: { + authInterrupts: Boolean(nextConfig.experimental.authInterrupts), + useCacheTimeout: nextConfig.experimental.useCacheTimeout, + durableUseCacheEntries: Boolean(nextConfig.experimental.durableUseCacheEntries) + }, + cacheComponents: Boolean(nextConfig.cacheComponents), + validationLevel: nextConfig.experimental.instantInsights.validationLevel, + isDraftMode, + incrementalCache, + hmrRefreshHash: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'hmrRefreshHash'), + cacheLifeProfiles: nextConfig.cacheLife, + staticPageGenerationTimeout: nextConfig.staticPageGenerationTimeout, + waitUntil: ctx.waitUntil, + onClose: (cb)=>{ + res.on('close', cb); + }, + onAfterTaskError: undefined + }, + sharedContext: { + buildId, + deploymentId + } + }; + const nodeNextReq = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$node$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NodeNextRequest"](req); + const nodeNextRes = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$node$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NodeNextResponse"](res); + const nextReq = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextRequestAdapter"].fromNodeNextRequest(nodeNextReq, (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["signalFromNodeResponse"])(res)); + const responseGenerator = async ({ previousCacheEntry })=>{ + try { + if (!isMinimalMode && isOnDemandRevalidate && revalidateOnlyGenerated && !previousCacheEntry) { + res.statusCode = 404; + // on-demand revalidate always sets this header + res.setHeader('x-nextjs-cache', 'REVALIDATED'); + res.end('This page could not be found'); + return null; + } + const response = cacheKey === null ? await routeModule.handle(nextReq, context) : await routeModule.prerender(nextReq, context); + req.fetchMetrics = context.renderOpts.fetchMetrics; + let pendingWaitUntil = context.renderOpts.pendingWaitUntil; + // Attempt using provided waitUntil if available + // if it's not we fallback to sendResponse's handling + if (pendingWaitUntil) { + if (ctx.waitUntil) { + ctx.waitUntil(pendingWaitUntil); + pendingWaitUntil = undefined; + } + } + const cacheTags = context.renderOpts.collectedTags; + // If the request is for a static response, we can cache it so long + // as it's not edge. + if (isIsr) { + const blob = await response.blob(); + // Copy the headers from the response. + const headers = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["toNodeOutgoingHttpHeaders"])(response.headers); + if (cacheTags) { + headers[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAGS_HEADER"]] = cacheTags; + } + if (!headers['content-type'] && blob.type) { + headers['content-type'] = blob.type; + } + const revalidate = typeof context.renderOpts.collectedRevalidate === 'undefined' || context.renderOpts.collectedRevalidate >= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"] ? false : context.renderOpts.collectedRevalidate; + const expire = typeof context.renderOpts.collectedExpire === 'undefined' || context.renderOpts.collectedExpire >= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"] ? // explicit `expire` (e.g. via `cacheLife`). This mirrors the + // build-time fallback in `build/index.ts` so cache entries + // and the response Cache-Control header agree on the route's + // effective expire. Routes that opt out of revalidation + // (`revalidate: false`) or that are dynamic (`revalidate: 0`) + // keep `expire: undefined`. + revalidate !== false && revalidate > 0 ? nextConfig.expireTime : undefined : context.renderOpts.collectedExpire; + // Create the cache entry for the response. + const cacheEntry = { + value: { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_ROUTE, + status: response.status, + body: Buffer.from(await blob.arrayBuffer()), + headers + }, + cacheControl: { + revalidate, + expire + } + }; + return cacheEntry; + } else { + // send response without caching if not ISR + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["sendResponse"])(nodeNextReq, nodeNextRes, response, pendingWaitUntil); + return null; + } + } catch (err) { + // if this is a background revalidate we need to report + // the request error here as it won't be bubbled + if (previousCacheEntry == null ? void 0 : previousCacheEntry.isStale) { + const silenceLog = false; + await routeModule.onRequestError(req, err, { + routerKind: 'App Router', + routePath: srcPage, + routeType: 'route', + revalidateReason: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$instrumentation$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRevalidateReason"])({ + isStaticGeneration: cacheKey !== null, + isOnDemandRevalidate + }) + }, silenceLog, routerServerContext); + } + throw err; + } + }; + const handleResponse = async (currentSpan, parentSpan)=>{ + try { + var _cacheEntry_value; + const cacheEntry = await routeModule.handleResponse({ + req, + nextConfig, + cacheKey, + routeKind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].APP_ROUTE, + isFallback: false, + previewProps, + prerenderManifest, + isRoutePPREnabled: false, + isOnDemandRevalidate, + revalidateOnlyGenerated, + responseGenerator, + waitUntil: ctx.waitUntil, + isMinimalMode + }); + if (cacheEntry !== null && 'error' in cacheEntry) { + throw cacheEntry.error; + } + // we don't create a cacheEntry for ISR + if (!isIsr) { + return; + } + if ((cacheEntry == null ? void 0 : (_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_ROUTE) { + var _cacheEntry_value1; + throw new Error(`Invariant: app-route received invalid cache entry ${cacheEntry == null ? void 0 : (_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`); + } + if (!isMinimalMode) { + res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT'); + } + // Draft mode should never be cached + if (isDraftMode) { + res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate'); + } + const headers = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["fromNodeOutgoingHttpHeaders"])(cacheEntry.value.headers); + if (!(isMinimalMode && isIsr)) { + headers.delete(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAGS_HEADER"]); + } + // If cache control is already set on the response we don't + // override it to allow users to customize it via next.config + if (cacheEntry.cacheControl && !res.getHeader('Cache-Control') && !headers.get('Cache-Control')) { + headers.set('Cache-Control', (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$cache$2d$control$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getCacheControlHeader"])(cacheEntry.cacheControl)); + } + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["sendResponse"])(nodeNextReq, nodeNextRes, new Response(cacheEntry.value.body, { + headers, + status: cacheEntry.value.status || 200 + })); + return; + } catch (err) { + if (!(err instanceof __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js$2c$__cjs$29$__["NoFallbackError"])) { + const silenceLog = false; + await routeModule.onRequestError(req, err, { + routerKind: 'App Router', + routePath: normalizedSrcPage, + routeType: 'route', + revalidateReason: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$instrumentation$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRevalidateReason"])({ + isStaticGeneration: cacheKey !== null, + isOnDemandRevalidate + }) + }, silenceLog, routerServerContext); + } + // rethrow so that we can handle serving error page + // If this is during static generation, throw the error again. + if (isIsr) throw err; + // Otherwise, send a 500 response unless the original response has + // already committed. In that case, preserve its status code for + // telemetry while still recording the failure and terminating a response + // that the failed pipeline left open. + if (res.headersSent) { + if (currentSpan) { + const error = err instanceof Error ? err : new Error('Unknown app route error'); + currentSpan.recordException(error); + currentSpan.setStatus({ + code: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SpanStatusCode"].ERROR, + message: error.message + }); + currentSpan.setAttribute('error.type', error.name); + } + if (!res.writableEnded && !res.destroyed) { + res.end(); + } + } else { + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["sendResponse"])(nodeNextReq, nodeNextRes, new Response(null, { + status: 500 + })); + } + return; + } finally{ + ; + (()=>{ + if (!currentSpan) { + return; + } + let statusCode = res.statusCode; + currentSpan.setAttributes({ + 'http.status_code': statusCode, + 'next.rsc': false + }); + if (statusCode && statusCode >= 500) { + // For 5xx status codes: SHOULD be set to 'Error' span status. + // x-ref: https://opentelemetry.io/docs/specs/semconv/http/http-spans/#status + currentSpan.setStatus({ + code: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SpanStatusCode"].ERROR + }); + // For span status 'Error', SHOULD set 'error.type' attribute. + currentSpan.setAttribute('error.type', statusCode.toString()); + } + const rootSpanAttributes = tracer.getRootSpanAttributes(); + // We were unable to get attributes, probably OTEL is not enabled + if (!rootSpanAttributes) { + return; + } + if (rootSpanAttributes.get('next.span_type') !== __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["BaseServerSpan"].handleRequest) { + console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`); + return; + } + const route = rootSpanAttributes.get('next.route') || normalizedSrcPage; + const name = `${method} ${route}`; + currentSpan.setAttributes({ + 'next.route': route, + 'http.route': route, + 'next.span_name': name + }); + currentSpan.updateName(name); + // Propagate http.route to the parent span if one exists (e.g. + // a platform-created HTTP span in adapter deployments). + if (parentSpan && parentSpan !== currentSpan) { + parentSpan.setAttribute('http.route', route); + parentSpan.updateName(name); + } + })(); + } + }; + // TODO: activeSpan code path is for when wrapped by + // next-server can be removed when this is no longer used + if (isWrappedByNextServer && activeSpan) { + await handleResponse(activeSpan, undefined); + } else { + let parentSpan = tracer.getActiveScopeSpan(); + await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["BaseServerSpan"].handleRequest, { + spanName: `${method} ${srcPage}`, + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SpanKind"].SERVER, + attributes: { + 'http.method': method, + 'http.target': req.url + } + }, (span)=>handleResponse(span, parentSpan)), undefined, !isWrappedByNextServer); + } +} +}), +"[project]/node_modules/next/dist/esm/client/components/app-router-headers.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ACTION_HEADER", + ()=>ACTION_HEADER, + "FLIGHT_HEADERS", + ()=>FLIGHT_HEADERS, + "NEXT_ACTION_NOT_FOUND_HEADER", + ()=>NEXT_ACTION_NOT_FOUND_HEADER, + "NEXT_ACTION_REVALIDATED_HEADER", + ()=>NEXT_ACTION_REVALIDATED_HEADER, + "NEXT_DID_POSTPONE_HEADER", + ()=>NEXT_DID_POSTPONE_HEADER, + "NEXT_HMR_REFRESH_HEADER", + ()=>NEXT_HMR_REFRESH_HEADER, + "NEXT_HTML_REQUEST_ID_HEADER", + ()=>NEXT_HTML_REQUEST_ID_HEADER, + "NEXT_INSTANT_TEST_COOKIE", + ()=>NEXT_INSTANT_TEST_COOKIE, + "NEXT_IS_PRERENDER_HEADER", + ()=>NEXT_IS_PRERENDER_HEADER, + "NEXT_REQUEST_ID_HEADER", + ()=>NEXT_REQUEST_ID_HEADER, + "NEXT_REWRITTEN_PATH_HEADER", + ()=>NEXT_REWRITTEN_PATH_HEADER, + "NEXT_REWRITTEN_QUERY_HEADER", + ()=>NEXT_REWRITTEN_QUERY_HEADER, + "NEXT_ROUTER_PREFETCH_HEADER", + ()=>NEXT_ROUTER_PREFETCH_HEADER, + "NEXT_ROUTER_SEGMENT_PREFETCH_HEADER", + ()=>NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, + "NEXT_ROUTER_STALE_TIME_HEADER", + ()=>NEXT_ROUTER_STALE_TIME_HEADER, + "NEXT_ROUTER_STATE_TREE_HEADER", + ()=>NEXT_ROUTER_STATE_TREE_HEADER, + "NEXT_RSC_UNION_QUERY", + ()=>NEXT_RSC_UNION_QUERY, + "NEXT_URL", + ()=>NEXT_URL, + "RSC_CONTENT_TYPE_HEADER", + ()=>RSC_CONTENT_TYPE_HEADER, + "RSC_HEADER", + ()=>RSC_HEADER +]); +const RSC_HEADER = 'rsc'; +const ACTION_HEADER = 'next-action'; +const NEXT_ROUTER_STATE_TREE_HEADER = 'next-router-state-tree'; +const NEXT_ROUTER_PREFETCH_HEADER = 'next-router-prefetch'; +const NEXT_ROUTER_SEGMENT_PREFETCH_HEADER = 'next-router-segment-prefetch'; +const NEXT_HMR_REFRESH_HEADER = 'next-hmr-refresh'; +const NEXT_URL = 'next-url'; +const RSC_CONTENT_TYPE_HEADER = 'text/x-component'; +const NEXT_INSTANT_TEST_COOKIE = 'next-instant-navigation-testing'; +const FLIGHT_HEADERS = [ + RSC_HEADER, + NEXT_ROUTER_STATE_TREE_HEADER, + NEXT_ROUTER_PREFETCH_HEADER, + NEXT_HMR_REFRESH_HEADER, + NEXT_ROUTER_SEGMENT_PREFETCH_HEADER +]; +const NEXT_RSC_UNION_QUERY = '_rsc'; +const NEXT_ROUTER_STALE_TIME_HEADER = 'x-nextjs-stale-time'; +const NEXT_DID_POSTPONE_HEADER = 'x-nextjs-postponed'; +const NEXT_REWRITTEN_PATH_HEADER = 'x-nextjs-rewritten-path'; +const NEXT_REWRITTEN_QUERY_HEADER = 'x-nextjs-rewritten-query'; +const NEXT_IS_PRERENDER_HEADER = 'x-nextjs-prerender'; +const NEXT_ACTION_NOT_FOUND_HEADER = 'x-nextjs-action-not-found'; +const NEXT_REQUEST_ID_HEADER = 'x-nextjs-request-id'; +const NEXT_HTML_REQUEST_ID_HEADER = 'x-nextjs-html-request-id'; +const NEXT_ACTION_REVALIDATED_HEADER = 'x-action-revalidated'; +}), +"[project]/node_modules/next/dist/esm/client/components/hooks-server-context.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "DynamicServerError", + ()=>DynamicServerError, + "isDynamicServerError", + ()=>isDynamicServerError +]); +const DYNAMIC_ERROR_CODE = 'DYNAMIC_SERVER_USAGE'; +class DynamicServerError extends Error { + constructor(description){ + super(`Dynamic server usage: ${description}`), this.description = description, this.digest = DYNAMIC_ERROR_CODE; + } +} +function isDynamicServerError(err) { + if (typeof err !== 'object' || err === null || !('digest' in err) || typeof err.digest !== 'string') { + return false; + } + return err.digest === DYNAMIC_ERROR_CODE; +} +}), +"[project]/node_modules/next/dist/esm/client/components/redirect-status-code.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "RedirectStatusCode", + ()=>RedirectStatusCode +]); +var RedirectStatusCode = /*#__PURE__*/ function(RedirectStatusCode) { + RedirectStatusCode[RedirectStatusCode["SeeOther"] = 303] = "SeeOther"; + RedirectStatusCode[RedirectStatusCode["TemporaryRedirect"] = 307] = "TemporaryRedirect"; + RedirectStatusCode[RedirectStatusCode["PermanentRedirect"] = 308] = "PermanentRedirect"; + return RedirectStatusCode; +}({}); +}), +"[project]/node_modules/next/dist/esm/client/components/static-generation-bailout.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "StaticGenBailoutError", + ()=>StaticGenBailoutError, + "isStaticGenBailoutError", + ()=>isStaticGenBailoutError +]); +const NEXT_STATIC_GEN_BAILOUT = 'NEXT_STATIC_GEN_BAILOUT'; +class StaticGenBailoutError extends Error { + constructor(...args){ + super(...args), this.code = NEXT_STATIC_GEN_BAILOUT; + } +} +function isStaticGenBailoutError(error) { + if (typeof error !== 'object' || error === null || !('code' in error)) { + return false; + } + return error.code === NEXT_STATIC_GEN_BAILOUT; +} +}), +"[project]/node_modules/next/dist/esm/lib/batcher.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "Batcher", + ()=>Batcher +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)"); +; +class Batcher { + constructor(cacheKeyFn, /** + * A function that will be called to schedule the wrapped function to be + * executed. This defaults to a function that will execute the function + * immediately. + */ schedulerFn = (fn)=>fn()){ + this.cacheKeyFn = cacheKeyFn; + this.schedulerFn = schedulerFn; + this.pending = new Map(); + } + static create(options) { + return new Batcher(options == null ? void 0 : options.cacheKeyFn, options == null ? void 0 : options.schedulerFn); + } + /** + * Wraps a function in a promise that will be resolved or rejected only once + * for a given key. This will allow multiple calls to the function to be + * made, but only one will be executed at a time. The result of the first + * call will be returned to all callers. + * + * @param key the key to use for the cache + * @param fn the function to wrap + * @returns a promise that resolves to the result of the function + */ async batch(key, fn) { + const cacheKey = this.cacheKeyFn ? await this.cacheKeyFn(key) : key; + if (cacheKey === null) { + return fn({ + resolve: (value)=>Promise.resolve(value), + key + }); + } + const pending = this.pending.get(cacheKey); + if (pending) return pending; + const { promise, resolve, reject } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + this.pending.set(cacheKey, promise); + this.schedulerFn(async ()=>{ + try { + const result = await fn({ + resolve, + key + }); + // Resolving a promise multiple times is a no-op, so we can safely + // resolve all pending promises with the same result. + resolve(result); + } catch (err) { + reject(err); + } finally{ + this.pending.delete(cacheKey); + } + }); + return promise; + } +} +}), +"[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ACTION_SUFFIX", + ()=>ACTION_SUFFIX, + "APP_DIR_ALIAS", + ()=>APP_DIR_ALIAS, + "CACHE_ONE_YEAR_SECONDS", + ()=>CACHE_ONE_YEAR_SECONDS, + "DOT_NEXT_ALIAS", + ()=>DOT_NEXT_ALIAS, + "ESLINT_DEFAULT_DIRS", + ()=>ESLINT_DEFAULT_DIRS, + "GSP_NO_RETURNED_VALUE", + ()=>GSP_NO_RETURNED_VALUE, + "GSSP_COMPONENT_MEMBER_ERROR", + ()=>GSSP_COMPONENT_MEMBER_ERROR, + "GSSP_NO_RETURNED_VALUE", + ()=>GSSP_NO_RETURNED_VALUE, + "HTML_CONTENT_TYPE_HEADER", + ()=>HTML_CONTENT_TYPE_HEADER, + "INFINITE_CACHE", + ()=>INFINITE_CACHE, + "INSTRUMENTATION_HOOK_FILENAME", + ()=>INSTRUMENTATION_HOOK_FILENAME, + "JSON_CONTENT_TYPE_HEADER", + ()=>JSON_CONTENT_TYPE_HEADER, + "MATCHED_PATH_HEADER", + ()=>MATCHED_PATH_HEADER, + "MIDDLEWARE_FILENAME", + ()=>MIDDLEWARE_FILENAME, + "MIDDLEWARE_LOCATION_REGEXP", + ()=>MIDDLEWARE_LOCATION_REGEXP, + "NEXT_BODY_SUFFIX", + ()=>NEXT_BODY_SUFFIX, + "NEXT_CACHE_IMPLICIT_TAG_ID", + ()=>NEXT_CACHE_IMPLICIT_TAG_ID, + "NEXT_CACHE_REVALIDATED_TAGS_HEADER", + ()=>NEXT_CACHE_REVALIDATED_TAGS_HEADER, + "NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER", + ()=>NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER, + "NEXT_CACHE_ROOT_PARAM_TAG_ID", + ()=>NEXT_CACHE_ROOT_PARAM_TAG_ID, + "NEXT_CACHE_SOFT_TAG_MAX_LENGTH", + ()=>NEXT_CACHE_SOFT_TAG_MAX_LENGTH, + "NEXT_CACHE_TAGS_HEADER", + ()=>NEXT_CACHE_TAGS_HEADER, + "NEXT_CACHE_TAG_MAX_ITEMS", + ()=>NEXT_CACHE_TAG_MAX_ITEMS, + "NEXT_CACHE_TAG_MAX_LENGTH", + ()=>NEXT_CACHE_TAG_MAX_LENGTH, + "NEXT_DATA_SUFFIX", + ()=>NEXT_DATA_SUFFIX, + "NEXT_INTERCEPTION_MARKER_PREFIX", + ()=>NEXT_INTERCEPTION_MARKER_PREFIX, + "NEXT_META_SUFFIX", + ()=>NEXT_META_SUFFIX, + "NEXT_NAV_DEPLOYMENT_ID_HEADER", + ()=>NEXT_NAV_DEPLOYMENT_ID_HEADER, + "NEXT_QUERY_PARAM_PREFIX", + ()=>NEXT_QUERY_PARAM_PREFIX, + "NEXT_RESUME_HEADER", + ()=>NEXT_RESUME_HEADER, + "NEXT_RESUME_STATE_LENGTH_HEADER", + ()=>NEXT_RESUME_STATE_LENGTH_HEADER, + "NON_STANDARD_NODE_ENV", + ()=>NON_STANDARD_NODE_ENV, + "PAGES_DIR_ALIAS", + ()=>PAGES_DIR_ALIAS, + "PRERENDER_REVALIDATE_HEADER", + ()=>PRERENDER_REVALIDATE_HEADER, + "PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER", + ()=>PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER, + "PROXY_FILENAME", + ()=>PROXY_FILENAME, + "PROXY_LOCATION_REGEXP", + ()=>PROXY_LOCATION_REGEXP, + "PUBLIC_DIR_MIDDLEWARE_CONFLICT", + ()=>PUBLIC_DIR_MIDDLEWARE_CONFLICT, + "ROOT_DIR_ALIAS", + ()=>ROOT_DIR_ALIAS, + "RSC_ACTION_CLIENT_WRAPPER_ALIAS", + ()=>RSC_ACTION_CLIENT_WRAPPER_ALIAS, + "RSC_ACTION_ENCRYPTION_ALIAS", + ()=>RSC_ACTION_ENCRYPTION_ALIAS, + "RSC_ACTION_PROXY_ALIAS", + ()=>RSC_ACTION_PROXY_ALIAS, + "RSC_ACTION_VALIDATE_ALIAS", + ()=>RSC_ACTION_VALIDATE_ALIAS, + "RSC_CACHE_WRAPPER_ALIAS", + ()=>RSC_CACHE_WRAPPER_ALIAS, + "RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS", + ()=>RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS, + "RSC_MOD_REF_PROXY_ALIAS", + ()=>RSC_MOD_REF_PROXY_ALIAS, + "RSC_SEGMENTS_DIR_SUFFIX", + ()=>RSC_SEGMENTS_DIR_SUFFIX, + "RSC_SEGMENT_SUFFIX", + ()=>RSC_SEGMENT_SUFFIX, + "RSC_SUFFIX", + ()=>RSC_SUFFIX, + "SERVER_PROPS_EXPORT_ERROR", + ()=>SERVER_PROPS_EXPORT_ERROR, + "SERVER_PROPS_GET_INIT_PROPS_CONFLICT", + ()=>SERVER_PROPS_GET_INIT_PROPS_CONFLICT, + "SERVER_PROPS_SSG_CONFLICT", + ()=>SERVER_PROPS_SSG_CONFLICT, + "SERVER_RUNTIME", + ()=>SERVER_RUNTIME, + "SSG_FALLBACK_EXPORT_ERROR", + ()=>SSG_FALLBACK_EXPORT_ERROR, + "SSG_GET_INITIAL_PROPS_CONFLICT", + ()=>SSG_GET_INITIAL_PROPS_CONFLICT, + "STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR", + ()=>STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR, + "TEXT_PLAIN_CONTENT_TYPE_HEADER", + ()=>TEXT_PLAIN_CONTENT_TYPE_HEADER, + "UNSTABLE_REVALIDATE_RENAME_ERROR", + ()=>UNSTABLE_REVALIDATE_RENAME_ERROR, + "WEBPACK_LAYERS", + ()=>WEBPACK_LAYERS, + "WEBPACK_RESOURCE_QUERIES", + ()=>WEBPACK_RESOURCE_QUERIES, + "WEB_SOCKET_MAX_RECONNECTIONS", + ()=>WEB_SOCKET_MAX_RECONNECTIONS +]); +const TEXT_PLAIN_CONTENT_TYPE_HEADER = 'text/plain'; +const HTML_CONTENT_TYPE_HEADER = 'text/html; charset=utf-8'; +const JSON_CONTENT_TYPE_HEADER = 'application/json; charset=utf-8'; +const NEXT_QUERY_PARAM_PREFIX = 'nxtP'; +const NEXT_INTERCEPTION_MARKER_PREFIX = 'nxtI'; +const MATCHED_PATH_HEADER = 'x-matched-path'; +const PRERENDER_REVALIDATE_HEADER = 'x-prerender-revalidate'; +const PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER = 'x-prerender-revalidate-if-generated'; +const RSC_SEGMENTS_DIR_SUFFIX = '.segments'; +const RSC_SEGMENT_SUFFIX = '.segment.rsc'; +const RSC_SUFFIX = '.rsc'; +const ACTION_SUFFIX = '.action'; +const NEXT_DATA_SUFFIX = '.json'; +const NEXT_META_SUFFIX = '.meta'; +const NEXT_BODY_SUFFIX = '.body'; +const NEXT_NAV_DEPLOYMENT_ID_HEADER = 'x-nextjs-deployment-id'; +const NEXT_CACHE_TAGS_HEADER = 'x-next-cache-tags'; +const NEXT_CACHE_REVALIDATED_TAGS_HEADER = 'x-next-revalidated-tags'; +const NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER = 'x-next-revalidate-tag-token'; +const NEXT_RESUME_HEADER = 'next-resume'; +const NEXT_RESUME_STATE_LENGTH_HEADER = 'x-next-resume-state-length'; +const NEXT_CACHE_TAG_MAX_ITEMS = 128; +const NEXT_CACHE_TAG_MAX_LENGTH = 256; +const NEXT_CACHE_SOFT_TAG_MAX_LENGTH = 1024; +const NEXT_CACHE_IMPLICIT_TAG_ID = '_N_T_'; +const NEXT_CACHE_ROOT_PARAM_TAG_ID = '_N_RP_'; +const CACHE_ONE_YEAR_SECONDS = 31536000; +const INFINITE_CACHE = 0xfffffffe; +const MIDDLEWARE_FILENAME = 'middleware'; +const MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}`; +const PROXY_FILENAME = 'proxy'; +const PROXY_LOCATION_REGEXP = `(?:src/)?${PROXY_FILENAME}`; +const INSTRUMENTATION_HOOK_FILENAME = 'instrumentation'; +const PAGES_DIR_ALIAS = 'private-next-pages'; +const DOT_NEXT_ALIAS = 'private-dot-next'; +const ROOT_DIR_ALIAS = 'private-next-root-dir'; +const APP_DIR_ALIAS = 'private-next-app-dir'; +const RSC_MOD_REF_PROXY_ALIAS = 'private-next-rsc-mod-ref-proxy'; +const RSC_ACTION_VALIDATE_ALIAS = 'private-next-rsc-action-validate'; +const RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-server-reference'; +const RSC_CACHE_WRAPPER_ALIAS = 'private-next-rsc-cache-wrapper'; +const RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS = 'private-next-rsc-track-dynamic-import'; +const RSC_ACTION_ENCRYPTION_ALIAS = 'private-next-rsc-action-encryption'; +const RSC_ACTION_CLIENT_WRAPPER_ALIAS = 'private-next-rsc-action-client-wrapper'; +const PUBLIC_DIR_MIDDLEWARE_CONFLICT = `You can not have a '_next' folder inside of your public folder. This conflicts with the internal '/_next' route. https://nextjs.org/docs/messages/public-next-folder-conflict`; +const SSG_GET_INITIAL_PROPS_CONFLICT = `You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps`; +const SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.`; +const SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps`; +const STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR = `can not have getInitialProps/getServerSideProps, https://nextjs.org/docs/messages/404-get-initial-props`; +const SERVER_PROPS_EXPORT_ERROR = `pages with \`getServerSideProps\` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export`; +const GSP_NO_RETURNED_VALUE = 'Your `getStaticProps` function did not return an object. Did you forget to add a `return`?'; +const GSSP_NO_RETURNED_VALUE = 'Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?'; +const UNSTABLE_REVALIDATE_RENAME_ERROR = 'The `unstable_revalidate` property is available for general use.\n' + 'Please use `revalidate` instead.'; +const GSSP_COMPONENT_MEMBER_ERROR = `can not be attached to a page's component and must be exported from the page. See more info here: https://nextjs.org/docs/messages/gssp-component-member`; +const NON_STANDARD_NODE_ENV = `You are using a non-standard "NODE_ENV" value in your environment. This creates inconsistencies in the project and is strongly advised against. Read more: https://nextjs.org/docs/messages/non-standard-node-env`; +const SSG_FALLBACK_EXPORT_ERROR = `Pages with \`fallback\` enabled in \`getStaticPaths\` can not be exported. See more info here: https://nextjs.org/docs/messages/ssg-fallback-true-export`; +const ESLINT_DEFAULT_DIRS = [ + 'app', + 'pages', + 'components', + 'lib', + 'src' +]; +const SERVER_RUNTIME = { + edge: 'edge', + experimentalEdge: 'experimental-edge', + nodejs: 'nodejs' +}; +const WEB_SOCKET_MAX_RECONNECTIONS = 12; +/** + * The names of the webpack layers. These layers are the primitives for the + * webpack chunks. + */ const WEBPACK_LAYERS_NAMES = { + /** + * The layer for the shared code between the client and server bundles. + */ shared: 'shared', + /** + * The layer for server-only runtime and picking up `react-server` export conditions. + * Including app router RSC pages and app router custom routes and metadata routes. + */ reactServerComponents: 'rsc', + /** + * Server Side Rendering layer for app (ssr). + */ serverSideRendering: 'ssr', + /** + * The browser client bundle layer for actions. + */ actionBrowser: 'action-browser', + /** + * The Node.js bundle layer for the API routes. + */ apiNode: 'api-node', + /** + * The Edge Lite bundle layer for the API routes. + */ apiEdge: 'api-edge', + /** + * The layer for the middleware code. + */ middleware: 'middleware', + /** + * The layer for the instrumentation hooks. + */ instrument: 'instrument', + /** + * The layer for assets on the edge. + */ edgeAsset: 'edge-asset', + /** + * The browser client bundle layer for App directory. + */ appPagesBrowser: 'app-pages-browser', + /** + * The browser client bundle layer for Pages directory. + */ pagesDirBrowser: 'pages-dir-browser', + /** + * The Edge Lite bundle layer for Pages directory. + */ pagesDirEdge: 'pages-dir-edge', + /** + * The Node.js bundle layer for Pages directory. + */ pagesDirNode: 'pages-dir-node' +}; +const WEBPACK_LAYERS = { + ...WEBPACK_LAYERS_NAMES, + GROUP: { + builtinReact: [ + WEBPACK_LAYERS_NAMES.reactServerComponents, + WEBPACK_LAYERS_NAMES.actionBrowser + ], + serverOnly: [ + WEBPACK_LAYERS_NAMES.reactServerComponents, + WEBPACK_LAYERS_NAMES.actionBrowser, + WEBPACK_LAYERS_NAMES.instrument, + WEBPACK_LAYERS_NAMES.middleware + ], + neutralTarget: [ + // pages api + WEBPACK_LAYERS_NAMES.apiNode, + WEBPACK_LAYERS_NAMES.apiEdge + ], + clientOnly: [ + WEBPACK_LAYERS_NAMES.serverSideRendering, + WEBPACK_LAYERS_NAMES.appPagesBrowser + ], + bundled: [ + WEBPACK_LAYERS_NAMES.reactServerComponents, + WEBPACK_LAYERS_NAMES.actionBrowser, + WEBPACK_LAYERS_NAMES.serverSideRendering, + WEBPACK_LAYERS_NAMES.appPagesBrowser, + WEBPACK_LAYERS_NAMES.shared, + WEBPACK_LAYERS_NAMES.instrument, + WEBPACK_LAYERS_NAMES.middleware + ], + appPages: [ + // app router pages and layouts + WEBPACK_LAYERS_NAMES.reactServerComponents, + WEBPACK_LAYERS_NAMES.serverSideRendering, + WEBPACK_LAYERS_NAMES.appPagesBrowser, + WEBPACK_LAYERS_NAMES.actionBrowser + ] + } +}; +const WEBPACK_RESOURCE_QUERIES = { + edgeSSREntry: '__next_edge_ssr_entry__', + metadata: '__next_metadata__', + metadataRoute: '__next_metadata_route__', + metadataImageMeta: '__next_metadata_image_meta__' +}; +; +}), +"[project]/node_modules/next/dist/esm/lib/framework/boundary-constants.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "METADATA_BOUNDARY_NAME", + ()=>METADATA_BOUNDARY_NAME, + "OUTLET_BOUNDARY_NAME", + ()=>OUTLET_BOUNDARY_NAME, + "ROOT_LAYOUT_BOUNDARY_NAME", + ()=>ROOT_LAYOUT_BOUNDARY_NAME, + "VIEWPORT_BOUNDARY_NAME", + ()=>VIEWPORT_BOUNDARY_NAME +]); +const METADATA_BOUNDARY_NAME = '__next_metadata_boundary__'; +const VIEWPORT_BOUNDARY_NAME = '__next_viewport_boundary__'; +const OUTLET_BOUNDARY_NAME = '__next_outlet_boundary__'; +const ROOT_LAYOUT_BOUNDARY_NAME = '__next_root_layout_boundary__'; +}), +"[project]/node_modules/next/dist/esm/lib/picocolors.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "bgBlack", + ()=>bgBlack, + "bgBlue", + ()=>bgBlue, + "bgCyan", + ()=>bgCyan, + "bgGreen", + ()=>bgGreen, + "bgMagenta", + ()=>bgMagenta, + "bgRed", + ()=>bgRed, + "bgWhite", + ()=>bgWhite, + "bgYellow", + ()=>bgYellow, + "black", + ()=>black, + "blue", + ()=>blue, + "bold", + ()=>bold, + "cyan", + ()=>cyan, + "dim", + ()=>dim, + "gray", + ()=>gray, + "green", + ()=>green, + "hidden", + ()=>hidden, + "inverse", + ()=>inverse, + "isColorSupported", + ()=>isColorSupported, + "italic", + ()=>italic, + "magenta", + ()=>magenta, + "purple", + ()=>purple, + "red", + ()=>red, + "reset", + ()=>reset, + "stdoutIsTerminal", + ()=>stdoutIsTerminal, + "strikethrough", + ()=>strikethrough, + "underline", + ()=>underline, + "white", + ()=>white, + "yellow", + ()=>yellow +]); +// ISC License +// Copyright (c) 2021 Alexey Raspopov, Kostiantyn Denysov, Anton Verinov +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// +// https://github.com/alexeyraspopov/picocolors/blob/b6261487e7b81aaab2440e397a356732cad9e342/picocolors.js#L1 +var _globalThis; +const { env, stdout } = ((_globalThis = globalThis) == null ? void 0 : _globalThis.process) ?? {}; +const enabled = env && !env.NO_COLOR && (env.FORCE_COLOR || (stdout == null ? void 0 : stdout.isTTY) && !env.CI && env.TERM !== 'dumb'); +const isColorSupported = Boolean(enabled); +const stdoutIsTerminal = Boolean(stdout == null ? void 0 : stdout.isTTY) || env.NEXT_PRIVATE_PROMPT_OUTPUT === '1'; +const replaceClose = (str, close, replace, index)=>{ + const start = str.substring(0, index) + replace; + const end = str.substring(index + close.length); + const nextIndex = end.indexOf(close); + return ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end; +}; +const formatter = (open, close, replace = open)=>{ + if (!enabled) return String; + return (input)=>{ + const string = '' + input; + const index = string.indexOf(close, open.length); + return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close; + }; +}; +const reset = enabled ? (s)=>`\x1b[0m${s}\x1b[0m` : String; +const bold = formatter('\x1b[1m', '\x1b[22m', '\x1b[22m\x1b[1m'); +const dim = formatter('\x1b[2m', '\x1b[22m', '\x1b[22m\x1b[2m'); +const italic = formatter('\x1b[3m', '\x1b[23m'); +const underline = formatter('\x1b[4m', '\x1b[24m'); +const inverse = formatter('\x1b[7m', '\x1b[27m'); +const hidden = formatter('\x1b[8m', '\x1b[28m'); +const strikethrough = formatter('\x1b[9m', '\x1b[29m'); +const black = formatter('\x1b[30m', '\x1b[39m'); +const red = formatter('\x1b[31m', '\x1b[39m'); +const green = formatter('\x1b[32m', '\x1b[39m'); +const yellow = formatter('\x1b[33m', '\x1b[39m'); +const blue = formatter('\x1b[34m', '\x1b[39m'); +const magenta = formatter('\x1b[35m', '\x1b[39m'); +const purple = formatter('\x1b[38;2;173;127;168m', '\x1b[39m'); +const cyan = formatter('\x1b[36m', '\x1b[39m'); +const white = formatter('\x1b[37m', '\x1b[39m'); +const gray = formatter('\x1b[90m', '\x1b[39m'); +const bgBlack = formatter('\x1b[40m', '\x1b[49m'); +const bgRed = formatter('\x1b[41m', '\x1b[49m'); +const bgGreen = formatter('\x1b[42m', '\x1b[49m'); +const bgYellow = formatter('\x1b[43m', '\x1b[49m'); +const bgBlue = formatter('\x1b[44m', '\x1b[49m'); +const bgMagenta = formatter('\x1b[45m', '\x1b[49m'); +const bgCyan = formatter('\x1b[46m', '\x1b[49m'); +const bgWhite = formatter('\x1b[47m', '\x1b[49m'); +}), +"[project]/node_modules/next/dist/esm/lib/scheduler.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Schedules a function to be called on the next tick after the other promises + * have been resolved. + * + * @param cb the function to schedule + */ __turbopack_context__.s([ + "atLeastOneTask", + ()=>atLeastOneTask, + "scheduleImmediate", + ()=>scheduleImmediate, + "scheduleOnNextTick", + ()=>scheduleOnNextTick, + "waitAtLeastOneReactRenderTask", + ()=>waitAtLeastOneReactRenderTask +]); +const scheduleOnNextTick = (cb)=>{ + // We use Promise.resolve().then() here so that the operation is scheduled at + // the end of the promise job queue, we then add it to the next process tick + // to ensure it's evaluated afterwards. + // + // This was inspired by the implementation of the DataLoader interface: https://github.com/graphql/dataloader/blob/d336bd15282664e0be4b4a657cb796f09bafbc6b/src/index.js#L213-L255 + // + Promise.resolve().then(()=>{ + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + process.nextTick(cb); + } + }); +}; +const scheduleImmediate = (cb)=>{ + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + setImmediate(cb); + } +}; +function atLeastOneTask() { + return new Promise((resolve)=>scheduleImmediate(resolve)); +} +function waitAtLeastOneReactRenderTask() { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + return new Promise((r)=>setImmediate(r)); + } +} +}), +"[project]/node_modules/next/dist/esm/server/api-utils/get-cookie-parser.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Parse cookies from the `headers` of request + * @param req request object + */ __turbopack_context__.s([ + "getCookieParser", + ()=>getCookieParser +]); +function getCookieParser(headers) { + return function parseCookie() { + const { cookie } = headers; + if (!cookie) { + return {}; + } + const { parse: parseCookieFn } = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/cookie/index.js [app-route] (ecmascript)"); + return parseCookieFn(Array.isArray(cookie) ? cookie.join('; ') : cookie); + }; +} +}), +"[project]/node_modules/next/dist/esm/server/api-utils/index.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ApiError", + ()=>ApiError, + "COOKIE_NAME_PRERENDER_BYPASS", + ()=>COOKIE_NAME_PRERENDER_BYPASS, + "COOKIE_NAME_PRERENDER_DATA", + ()=>COOKIE_NAME_PRERENDER_DATA, + "RESPONSE_LIMIT_DEFAULT", + ()=>RESPONSE_LIMIT_DEFAULT, + "SYMBOL_CLEARED_COOKIES", + ()=>SYMBOL_CLEARED_COOKIES, + "SYMBOL_PREVIEW_DATA", + ()=>SYMBOL_PREVIEW_DATA, + "checkIsOnDemandRevalidate", + ()=>checkIsOnDemandRevalidate, + "clearPreviewData", + ()=>clearPreviewData, + "redirect", + ()=>redirect, + "sendError", + ()=>sendError, + "sendStatusCode", + ()=>sendStatusCode, + "setLazyProp", + ()=>setLazyProp, + "wrapApiHandler", + ()=>wrapApiHandler +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$headers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/headers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)"); +; +; +; +; +function wrapApiHandler(page, handler) { + return (...args)=>{ + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])().setRootSpanAttribute('next.route', page); + // Call API route method + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])().trace(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NodeSpan"].runHandler, { + spanName: `executing api route (pages) ${page}` + }, ()=>handler(...args)); + }; +} +function sendStatusCode(res, statusCode) { + res.statusCode = statusCode; + return res; +} +function redirect(res, statusOrUrl, url) { + if (typeof statusOrUrl === 'string') { + url = statusOrUrl; + statusOrUrl = 307; + } + if (typeof statusOrUrl !== 'number' || typeof url !== 'string') { + throw new Error(`Invalid redirect arguments. Please use a single argument URL, e.g. res.redirect('/destination') or use a status code and URL, e.g. res.redirect(307, '/destination').`); + } + res.writeHead(statusOrUrl, { + Location: url + }); + res.write(url); + res.end(); + return res; +} +function checkIsOnDemandRevalidate(rawHeaders, previewProps) { + // Headers is a plain object for Node.js, Headers object in Edge runtime + if (typeof rawHeaders.get === 'function') { + const headers = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$headers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["HeadersAdapter"].from(rawHeaders); + const previewModeId = headers.get(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["PRERENDER_REVALIDATE_HEADER"]); + const isOnDemandRevalidate = previewModeId === previewProps.previewModeId; + const revalidateOnlyGenerated = headers.has(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER"]); + return { + isOnDemandRevalidate, + revalidateOnlyGenerated + }; + } + const headers = rawHeaders; + const previewModeId = headers[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["PRERENDER_REVALIDATE_HEADER"]]; + const isOnDemandRevalidate = previewModeId === previewProps.previewModeId; + const revalidateOnlyGenerated = headers.hasOwnProperty(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER"]); + return { + isOnDemandRevalidate, + revalidateOnlyGenerated + }; +} +const COOKIE_NAME_PRERENDER_BYPASS = `__prerender_bypass`; +const COOKIE_NAME_PRERENDER_DATA = `__next_preview_data`; +const RESPONSE_LIMIT_DEFAULT = 4 * 1024 * 1024; +const SYMBOL_PREVIEW_DATA = Symbol(COOKIE_NAME_PRERENDER_DATA); +const SYMBOL_CLEARED_COOKIES = Symbol(COOKIE_NAME_PRERENDER_BYPASS); +function clearPreviewData(res, options = {}) { + if (SYMBOL_CLEARED_COOKIES in res) { + return res; + } + const { serialize } = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/cookie/index.js [app-route] (ecmascript)"); + const previous = res.getHeader('Set-Cookie'); + res.setHeader(`Set-Cookie`, [ + ...typeof previous === 'string' ? [ + previous + ] : Array.isArray(previous) ? previous : [], + serialize(COOKIE_NAME_PRERENDER_BYPASS, '', { + // To delete a cookie, set `expires` to a date in the past: + // https://tools.ietf.org/html/rfc6265#section-4.1.1 + // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted. + expires: new Date(0), + httpOnly: true, + sameSite: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'lax', + secure: ("TURBOPACK compile-time value", "development") !== 'development', + path: '/', + ...options.path !== undefined ? { + path: options.path + } : undefined + }), + serialize(COOKIE_NAME_PRERENDER_DATA, '', { + // To delete a cookie, set `expires` to a date in the past: + // https://tools.ietf.org/html/rfc6265#section-4.1.1 + // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted. + expires: new Date(0), + httpOnly: true, + sameSite: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'lax', + secure: ("TURBOPACK compile-time value", "development") !== 'development', + path: '/', + ...options.path !== undefined ? { + path: options.path + } : undefined + }) + ]); + Object.defineProperty(res, SYMBOL_CLEARED_COOKIES, { + value: true, + enumerable: false + }); + return res; +} +class ApiError extends Error { + constructor(statusCode, message){ + super(message); + this.statusCode = statusCode; + } +} +function sendError(res, statusCode, message) { + res.statusCode = statusCode; + res.statusMessage = message; + res.end(message); +} +function setLazyProp({ req }, prop, getter) { + const opts = { + configurable: true, + enumerable: true + }; + const optsReset = { + ...opts, + writable: true + }; + Object.defineProperty(req, prop, { + ...opts, + get: ()=>{ + const value = getter(); + // we set the property on the object to avoid recalculating it + Object.defineProperty(req, prop, { + ...optsReset, + value + }); + return value; + }, + set: (value)=>{ + Object.defineProperty(req, prop, { + ...optsReset, + value + }); + } + }); +} +}), +"[project]/node_modules/next/dist/esm/server/app-render/async-local-storage.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "bindSnapshot", + ()=>bindSnapshot, + "createAsyncLocalStorage", + ()=>createAsyncLocalStorage, + "createSnapshot", + ()=>createSnapshot, + "getOrCreateGlobalAsyncLocalStorage", + ()=>getOrCreateGlobalAsyncLocalStorage +]); +const sharedAsyncLocalStorageNotAvailableError = new Error('Invariant: AsyncLocalStorage accessed in runtime where it is not available'); +class FakeAsyncLocalStorage { + disable() { + throw sharedAsyncLocalStorageNotAvailableError; + } + getStore() { + // This fake implementation of AsyncLocalStorage always returns `undefined`. + return undefined; + } + run() { + throw sharedAsyncLocalStorageNotAvailableError; + } + exit() { + throw sharedAsyncLocalStorageNotAvailableError; + } + enterWith() { + throw sharedAsyncLocalStorageNotAvailableError; + } + static bind(fn) { + return fn; + } +} +const maybeGlobalAsyncLocalStorage = typeof globalThis !== 'undefined' && globalThis.AsyncLocalStorage; +function createAsyncLocalStorage() { + if (maybeGlobalAsyncLocalStorage) { + return new maybeGlobalAsyncLocalStorage(); + } + return new FakeAsyncLocalStorage(); +} +function getOrCreateGlobalAsyncLocalStorage(name) { + const key = Symbol.for(`@next/${name}@${"16.4.1"}`); + const globalStore = globalThis; + return globalStore[key] ??= createAsyncLocalStorage(); +} +function bindSnapshot(fn) { + if (maybeGlobalAsyncLocalStorage) { + return maybeGlobalAsyncLocalStorage.bind(fn); + } + return FakeAsyncLocalStorage.bind(fn); +} +function createSnapshot() { + if (maybeGlobalAsyncLocalStorage) { + return maybeGlobalAsyncLocalStorage.snapshot(); + } + return function(fn, ...args) { + return fn(...args); + }; +} +}), +"[project]/node_modules/next/dist/esm/server/app-render/blocking-route-messages.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "createDynamicBodyError", + ()=>createDynamicBodyError, + "createDynamicBodyErrorInNavigation", + ()=>createDynamicBodyErrorInNavigation, + "createDynamicBodyErrorInStaticRoute", + ()=>createDynamicBodyErrorInStaticRoute, + "createDynamicMetadataError", + ()=>createDynamicMetadataError, + "createDynamicMetadataErrorInStaticRoute", + ()=>createDynamicMetadataErrorInStaticRoute, + "createDynamicOrRuntimeBodyError", + ()=>createDynamicOrRuntimeBodyError, + "createDynamicOrRuntimeMetadataError", + ()=>createDynamicOrRuntimeMetadataError, + "createDynamicOrRuntimeViewportError", + ()=>createDynamicOrRuntimeViewportError, + "createDynamicViewportError", + ()=>createDynamicViewportError, + "createDynamicViewportErrorInStaticRoute", + ()=>createDynamicViewportErrorInStaticRoute, + "createLinkBodyErrorInNavigation", + ()=>createLinkBodyErrorInNavigation, + "createLinkMetadataError", + ()=>createLinkMetadataError, + "createLinkViewportError", + ()=>createLinkViewportError, + "createNavigationBodyErrorInNavigation", + ()=>createNavigationBodyErrorInNavigation, + "createNavigationMetadataError", + ()=>createNavigationMetadataError, + "createNavigationViewportError", + ()=>createNavigationViewportError, + "createNonPrerenderableBodyErrorInStaticRoute", + ()=>createNonPrerenderableBodyErrorInStaticRoute, + "createNonPrerenderableMetadataErrorInStaticRoute", + ()=>createNonPrerenderableMetadataErrorInStaticRoute, + "createNonPrerenderableViewportErrorInStaticRoute", + ()=>createNonPrerenderableViewportErrorInStaticRoute, + "createPrefetchBodyErrorInNavigation", + ()=>createPrefetchBodyErrorInNavigation, + "createPrefetchMetadataError", + ()=>createPrefetchMetadataError, + "createPrefetchViewportError", + ()=>createPrefetchViewportError, + "createRuntimeBodyError", + ()=>createRuntimeBodyError, + "createRuntimeBodyErrorInNavigation", + ()=>createRuntimeBodyErrorInNavigation, + "createRuntimeBodyErrorInStaticRoute", + ()=>createRuntimeBodyErrorInStaticRoute, + "createRuntimeMetadataError", + ()=>createRuntimeMetadataError, + "createRuntimeMetadataErrorInStaticRoute", + ()=>createRuntimeMetadataErrorInStaticRoute, + "createRuntimeViewportError", + ()=>createRuntimeViewportError, + "createRuntimeViewportErrorInStaticRoute", + ()=>createRuntimeViewportErrorInStaticRoute, + "logBuildDebugHint", + ()=>logBuildDebugHint +]); +function createRuntimeBodyError(route) { + return new Error(`Route "${route}": Next.js encountered runtime data during prerendering.\n\n` + `\`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` accessed outside of \`\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-runtime`); +} +function createDynamicBodyError(route) { + return new Error(`Route "${route}": Next.js encountered uncached data during prerendering.\n\n` + `\`fetch(...)\` or \`connection()\` accessed outside of \`\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [cache] Cache the data access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`); +} +function createRuntimeBodyErrorInNavigation(route) { + return new Error(`Route "${route}": Next.js encountered runtime data during prerendering or a navigation.\n\n` + `\`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` accessed outside of \`\` prevents the route from being prerendered or the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-runtime`); +} +function createLinkBodyErrorInNavigation(route) { + return new Error(`Route "${route}": Next.js encountered URL data during prerendering or a navigation.\n\n` + `\`params\` or \`searchParams\` accessed outside of \`\` may prevent the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-shell-url-data`); +} +function createNavigationBodyErrorInNavigation(route) { + return new Error(`Route "${route}": Next.js encountered \`navigation()\` during prerendering or a navigation.\n\n` + `\`navigation()\` called outside of \`\` may prevent the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the component that calls \`navigation()\`\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage`); +} +function createPrefetchBodyErrorInNavigation(route) { + return new Error(`Route "${route}": Next.js encountered \`prefetch()\` during prerendering or a navigation.\n\n` + `\`prefetch()\` called outside of \`\` may prevent the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the component that calls \`prefetch()\`\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage`); +} +function createDynamicBodyErrorInNavigation(route) { + return new Error(`Route "${route}": Next.js encountered uncached data during prerendering or a navigation.\n\n` + `\`fetch(...)\` or \`connection()\` accessed outside of \`\` prevents the route from being prerendered or the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [cache] Cache the data access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`); +} +function createDynamicOrRuntimeBodyError(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data during prerendering.\n\n` + `\`fetch(...)\`, \`cookies()\`, \`headers()\`, \`params\`, \`searchParams\`, or \`connection()\` accessed outside of \`\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [cache] For uncached data (\`fetch\`, database calls): cache the access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`); +} +function createLinkMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered URL data in \`generateMetadata()\`.\n\n` + `This route's metadata is blocked, but the rest of its content can be prefetched. \`params\` or \`searchParams\` accessed in \`generateMetadata()\` prevent it from being prefetched.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static metadata export instead of \`generateMetadata()\`\n` + ` - [dynamic] Render a marker component that calls \`await connection()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`); +} +function createRuntimeMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered runtime data in \`generateMetadata()\`.\n\n` + `This route's metadata is blocked, but the rest of its content can be prerendered. \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` accessed in \`generateMetadata()\` cause it to run dynamically.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static metadata export instead of \`generateMetadata()\`\n` + ` - [dynamic] Render a marker component that calls \`await connection()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`); +} +function createNavigationMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered \`navigation()\` in \`generateMetadata()\`.\n\n` + `Metadata can already stream without blocking the route's UI, so delaying it until navigation may be unintentional.\n\n` + `Ways to fix this:\n` + ` - [remove] Remove \`navigation()\` from \`generateMetadata()\`\n` + ` - [mark] Render a marker component that calls \`await navigation()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-metadata`); +} +function createPrefetchMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered \`prefetch()\` in \`generateMetadata()\`.\n\n` + `Metadata can already stream without blocking the route's UI, so delaying it until a per-link prefetch or navigation may be unintentional.\n\n` + `Ways to fix this:\n` + ` - [remove] Remove \`prefetch()\` from \`generateMetadata()\`\n` + ` - [mark] Render a marker component that calls \`await prefetch()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-metadata`); +} +function createDynamicMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered uncached data in \`generateMetadata()\`.\n\n` + `This route's metadata is blocked, but the rest of its content can be prerendered. \`fetch(...)\` or \`connection()\` accessed in \`generateMetadata()\` cause it to run dynamically.\n\n` + `Ways to fix this:\n` + ` - [cache] Cache the metadata with \`"use cache"\` in \`generateMetadata()\` (does not apply to \`connection()\`)\n` + ` - [dynamic] Render a marker component that calls \`await connection()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-dynamic`); +} +function createLinkViewportError(route) { + return new Error(`Route "${route}": Next.js encountered URL data in \`generateViewport()\`.\n\n` + `\`params\` or \`searchParams\` in \`generateViewport()\` prevents the page from being prerendered, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static viewport export instead of \`generateViewport()\`\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`); +} +function createRuntimeViewportError(route) { + return new Error(`Route "${route}": Next.js encountered runtime data in \`generateViewport()\`.\n\n` + `\`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` in \`generateViewport()\` prevents the page from being prerendered, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static viewport export instead of \`generateViewport()\`\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`); +} +function createNavigationViewportError(route) { + return new Error(`Route "${route}": Next.js encountered \`navigation()\` in \`generateViewport()\`.\n\n` + `This prevents Next.js from creating the App Shell, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [remove] Remove \`navigation()\` from \`generateViewport()\`\n` + ` - [ignore] Set \`export const instant = false\` to disable validation for this segment\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-viewport`); +} +function createPrefetchViewportError(route) { + return new Error(`Route "${route}": Next.js encountered \`prefetch()\` in \`generateViewport()\`.\n\n` + `This prevents Next.js from creating the App Shell, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [remove] Remove \`prefetch()\` from \`generateViewport()\`\n` + ` - [ignore] Set \`export const instant = false\` to disable validation for this segment\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-viewport`); +} +function createDynamicViewportError(route) { + return new Error(`Route "${route}": Next.js encountered uncached data in \`generateViewport()\`.\n\n` + `\`fetch(...)\` or \`connection()\` in \`generateViewport()\` prevents the page from being prerendered, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [cache] Cache the viewport data with \`"use cache"\` in \`generateViewport()\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-dynamic`); +} +function createDynamicOrRuntimeViewportError(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data in \`generateViewport()\`.\n\n` + `This prevents the page from being prerendered, leading to a slower user experience. Unlike metadata, viewport cannot be streamed behind \`\` because it affects the initial page load.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static viewport export instead of \`generateViewport()\`\n` + ` - [cache] For uncached data (\`fetch\`, database calls): cache the viewport with \`"use cache"\` in \`generateViewport()\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`); +} +function createDynamicOrRuntimeMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data in \`generateMetadata()\`.\n\n` + `This route's metadata is blocked, but the rest of its content can be prerendered.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static metadata export instead of \`generateMetadata()\`\n` + ` - [cache] Cache the metadata with \`"use cache"\` in \`generateMetadata()\` (does not apply to \`connection()\`)\n` + ` - [dynamic] Render a marker component that calls \`await connection()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`); +} +function createRuntimeBodyErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered runtime data on a route that must be fully static.\n\n` + `This route is configured to be fully static, but runtime data from \`cookies()\`, \`headers()\`, \`params\`, \`searchParams\`, or a short-lived cache requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [remove] Remove the data access\n` + ` - [client] Read the data on the client\n\n` + `Learn more: https://nextjs.org/docs/messages/static-route-runtime`); +} +function createDynamicBodyErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached data on a route that must be fully static.\n\n` + `This route is configured to be fully static, but an uncached \`fetch(...)\`, database call, or \`connection()\` requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] Cache the data access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [remove] Remove the data access\n` + ` - [client] Read the data on the client\n\n` + `Learn more: https://nextjs.org/docs/messages/static-route-dynamic`); +} +function createNonPrerenderableBodyErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data on a route that must be fully static.\n\n` + `This route is configured to be fully static, but some data requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] For uncached data (\`fetch\`, database calls): cache the access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [remove] Remove the data access\n` + ` - [client] Read the data on the client\n\n` + `Learn more: https://nextjs.org/docs/messages/static-route-dynamic`); +} +function createRuntimeMetadataErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered runtime data in \`generateMetadata()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but runtime data from \`cookies()\`, \`headers()\`, \`params\`, \`searchParams\`, or a short-lived cache requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [static] Replace the dynamic data used by \`generateMetadata()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-metadata-runtime`); +} +function createDynamicMetadataErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached data in \`generateMetadata()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but an uncached \`fetch(...)\`, database call, or \`connection()\` requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] Cache the data used by \`generateMetadata()\` with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [static] Replace the dynamic data used by \`generateMetadata()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-metadata-dynamic`); +} +function createNonPrerenderableMetadataErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data in \`generateMetadata()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but some data requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] For uncached data: cache the data used by \`generateMetadata()\` with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [static] Replace the dynamic data used by \`generateMetadata()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-metadata-dynamic`); +} +function createRuntimeViewportErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered runtime data in \`generateViewport()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but runtime data from \`cookies()\`, \`headers()\`, \`params\`, \`searchParams\`, or a short-lived cache requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [static] Replace the dynamic data used by \`generateViewport()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-viewport-runtime`); +} +function createDynamicViewportErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached data in \`generateViewport()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but an uncached \`fetch(...)\`, database call, or \`connection()\` requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] Cache the data used by \`generateViewport()\` with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [static] Replace the dynamic data used by \`generateViewport()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-viewport-dynamic`); +} +function createNonPrerenderableViewportErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data in \`generateViewport()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but some data requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] For uncached data: cache the data used by \`generateViewport()\` with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [static] Replace the dynamic data used by \`generateViewport()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-viewport-dynamic`); +} +function logBuildDebugHint(route) { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; +} +}), +"[project]/node_modules/next/dist/esm/server/app-render/dynamic-rendering.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "DynamicHoleKind", + ()=>DynamicHoleKind, + "PreludeState", + ()=>PreludeState, + "abortAndThrowOnSynchronousRequestDataAccess", + ()=>abortAndThrowOnSynchronousRequestDataAccess, + "abortOnSynchronousPlatformIOAccess", + ()=>abortOnSynchronousPlatformIOAccess, + "accessedDynamicData", + ()=>accessedDynamicData, + "annotateDynamicAccess", + ()=>annotateDynamicAccess, + "consumeDynamicAccess", + ()=>consumeDynamicAccess, + "createDynamicTrackingState", + ()=>createDynamicTrackingState, + "createDynamicValidationState", + ()=>createDynamicValidationState, + "createHangingInputAbortSignal", + ()=>createHangingInputAbortSignal, + "createInstantValidationState", + ()=>createInstantValidationState, + "formatDynamicAPIAccesses", + ()=>formatDynamicAPIAccesses, + "getDisallowedReasonsInStaticRoute", + ()=>getDisallowedReasonsInStaticRoute, + "getFirstDynamicReason", + ()=>getFirstDynamicReason, + "getNavigationDisallowedDynamicReasons", + ()=>getNavigationDisallowedDynamicReasons, + "getStaticShellDisallowedDynamicReasons", + ()=>getStaticShellDisallowedDynamicReasons, + "isPrerenderInterruptedError", + ()=>isPrerenderInterruptedError, + "logDisallowedDynamicError", + ()=>logDisallowedDynamicError, + "markCurrentScopeAsDynamic", + ()=>markCurrentScopeAsDynamic, + "throwIfDisallowedDynamic", + ()=>throwIfDisallowedDynamic, + "throwIfDisallowedDynamicInStaticRoute", + ()=>throwIfDisallowedDynamicInStaticRoute, + "throwIfSyncIOUsed", + ()=>throwIfSyncIOUsed, + "throwToInterruptStaticGeneration", + ()=>throwToInterruptStaticGeneration, + "trackAllowedDynamicAccess", + ()=>trackAllowedDynamicAccess, + "trackDynamicAccessInStaticRoute", + ()=>trackDynamicAccessInStaticRoute, + "trackDynamicDataInDynamicRender", + ()=>trackDynamicDataInDynamicRender, + "trackDynamicHoleInNavigation", + ()=>trackDynamicHoleInNavigation, + "trackDynamicHoleInStaticShell", + ()=>trackDynamicHoleInStaticShell, + "trackThrownErrorInNavigation", + ()=>trackThrownErrorInNavigation +]); +/** + * The functions provided by this module are used to communicate certain properties + * about the currently running code so that Next.js can make decisions on how to handle + * the current execution in different rendering modes such as pre-rendering, resuming, and SSR. + * + * Today Next.js treats all code as potentially static. Certain APIs may only make sense when dynamically rendering. + * Traditionally this meant deopting the entire render to dynamic however with PPR we can now deopt parts + * of a React tree as dynamic while still keeping other parts static. There are really two different kinds of + * Dynamic indications. + * + * The first is simply an intention to be dynamic. unstable_noStore is an example of this where + * the currently executing code simply declares that the current scope is dynamic but if you use it + * inside unstable_cache it can still be cached. This type of indication can be removed if we ever + * make the default dynamic to begin with because the only way you would ever be static is inside + * a cache scope which this indication does not affect. + * + * The second is an indication that a dynamic data source was read. This is a stronger form of dynamic + * because it means that it is inappropriate to cache this at all. using a dynamic data source inside + * unstable_cache should error. If you want to use some dynamic data inside unstable_cache you should + * read that data outside the cache and pass it in as an argument to the cached function. + */ // Once postpone is in stable we should switch to importing the postpone export directly +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$hooks$2d$server$2d$context$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/hooks-server-context.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/static-generation-bailout.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/dynamic-rendering-utils.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$framework$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/framework/boundary-constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/scheduler.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/blocking-route-messages.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/instant-validation/boundary-constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$tracking$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/instant-validation/boundary-tracking.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$instant$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/instant-messages.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$lazy$2d$dynamic$2f$react$2d$browser$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/lazy-dynamic/react-browser-bailout.js [app-route] (ecmascript)"); +; +; +; +; +; +; +; +; +; +; +; +; +; +function createDynamicTrackingState(isDebugDynamicAccesses) { + return { + isDebugDynamicAccesses, + dynamicAccesses: [], + syncDynamicErrorWithStack: null, + syncDynamicErrorWithStackPostMicrotask: false + }; +} +function createDynamicValidationState() { + return { + hasSuspenseAboveBody: false, + hasDynamicMetadata: false, + dynamicMetadata: null, + hasDynamicViewport: false, + hasAllowedDynamic: false, + dynamicErrors: [] + }; +} +function getPendingClientSyncDynamicError(clientDynamic) { + return clientDynamic.syncDynamicErrorWithStackPostMicrotask ? null : clientDynamic.syncDynamicErrorWithStack; +} +function getFirstDynamicReason(trackingState) { + var _trackingState_dynamicAccesses_; + return (_trackingState_dynamicAccesses_ = trackingState.dynamicAccesses[0]) == null ? void 0 : _trackingState_dynamicAccesses_.expression; +} +function markCurrentScopeAsDynamic(store, workUnitStore, expression) { + if (workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + case 'unstable-cache': + // Inside cache scopes, marking a scope as dynamic has no effect, + // because the outer cache scope creates a cache boundary. This is + // subtly different from reading a dynamic data source, which is + // forbidden inside a cache scope. + return; + case 'private-cache': + // A private cache scope is already dynamic by definition. + return; + case 'prerender-legacy': + case 'request': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + // If we're forcing dynamic rendering or we're forcing static rendering, we + // don't need to do anything here because the entire page is already dynamic + // or it's static and it should not throw or postpone here. + if (store.forceDynamic || store.forceStatic) return; + if (store.dynamicShouldError) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"](`Route ${store.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`); + } + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender-legacy': + workUnitStore.revalidate = 0; + // We aren't prerendering, but we are generating a static page. We need + // to bail out of static generation. + const err = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$hooks$2d$server$2d$context$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["DynamicServerError"](`Route ${store.route} couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`); + store.dynamicUsageDescription = expression; + store.dynamicUsageStack = err.stack; + throw err; + case 'request': + markRequestStoreAsDynamic(workUnitStore); + break; + case 'build-time-generator': + break; + default: + workUnitStore; + } + } +} +function throwToInterruptStaticGeneration(expression, store, prerenderStore) { + // We aren't prerendering but we are generating a static page. We need to bail out of static generation + const err = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$hooks$2d$server$2d$context$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["DynamicServerError"](`Route ${store.route} couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`); + prerenderStore.revalidate = 0; + store.dynamicUsageDescription = expression; + store.dynamicUsageStack = err.stack; + throw err; +} +function trackDynamicDataInDynamicRender(workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + case 'unstable-cache': + // Inside cache scopes, marking a scope as dynamic has no effect, + // because the outer cache scope creates a cache boundary. This is + // subtly different from reading a dynamic data source, which is + // forbidden inside a cache scope. + return; + case 'private-cache': + // A private cache scope is already dynamic by definition. + return; + case 'prerender': + case 'prerender-runtime': + case 'prerender-legacy': + case 'prerender-client': + case 'validation-client': + case 'build-time-generator': + break; + case 'request': + markRequestStoreAsDynamic(workUnitStore); + break; + default: + workUnitStore; + } +} +function markRequestStoreAsDynamic(requestStore) { + if (("TURBOPACK compile-time value", "1") && requestStore.phase === 'render') { + requestStore.usedDynamic = true; + } +} +function abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore) { + const reason = `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`; + const error = createPrerenderInterruptedError(reason); + prerenderStore.controller.abort(error); + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking) { + dynamicTracking.dynamicAccesses.push({ + // When we aren't debugging, we don't need to create another error for the + // stack trace. + stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined, + expression + }); + } +} +function abortOnSynchronousPlatformIOAccess(route, expression, errorWithStack, prerenderStore) { + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking && dynamicTracking.syncDynamicErrorWithStack === null) { + dynamicTracking.syncDynamicErrorWithStack = errorWithStack; + // React completes the task that is currently rendering before scheduled + // abort cleanup. Client tracking can attribute the sync IO only during + // that current task; server tracking keeps the error regardless. + queueMicrotask(()=>{ + dynamicTracking.syncDynamicErrorWithStackPostMicrotask = true; + }); + } + abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore); +} +function abortAndThrowOnSynchronousRequestDataAccess(route, expression, errorWithStack, prerenderStore) { + const prerenderSignal = prerenderStore.controller.signal; + if (prerenderSignal.aborted === false) { + // TODO it would be better to move this aborted check into the callsite so we can avoid making + // the error object when it isn't relevant to the aborting of the prerender however + // since we need the throw semantics regardless of whether we abort it is easier to land + // this way. See how this was handled with `abortOnSynchronousPlatformIOAccess` for a closer + // to ideal implementation + abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore); + // Preserve the exact server-side dynamic access for final validation after + // interrupting this render. + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking) { + if (dynamicTracking.syncDynamicErrorWithStack === null) { + dynamicTracking.syncDynamicErrorWithStack = errorWithStack; + } + } + } + throw createPrerenderInterruptedError(`Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`); +} +const NEXT_PRERENDER_INTERRUPTED = 'NEXT_PRERENDER_INTERRUPTED'; +function createPrerenderInterruptedError(message) { + const error = new Error(message); + error.digest = NEXT_PRERENDER_INTERRUPTED; + return error; +} +function isPrerenderInterruptedError(error) { + return typeof error === 'object' && error !== null && error.digest === NEXT_PRERENDER_INTERRUPTED && 'name' in error && 'message' in error && error instanceof Error; +} +function accessedDynamicData(dynamicAccesses) { + return dynamicAccesses.length > 0; +} +function consumeDynamicAccess(serverDynamic, clientDynamic) { + // We mutate because we only call this once we are no longer writing + // to the dynamicTrackingState and it's more efficient than creating a new + // array. + serverDynamic.dynamicAccesses.push(...clientDynamic.dynamicAccesses); + return serverDynamic.dynamicAccesses; +} +function formatDynamicAPIAccesses(dynamicAccesses) { + return dynamicAccesses.filter((access)=>typeof access.stack === 'string' && access.stack.length > 0).map(({ expression, stack })=>{ + stack = stack.split('\n') // Remove the "Error: " prefix from the first line of the stack trace as + // well as the first 4 lines of the stack trace which is the distance + // from the user code and the `new Error().stack` call. + .slice(4).filter((line)=>{ + // Exclude Next.js internals from the stack trace. + if (line.includes('node_modules/next/')) { + return false; + } + // Exclude anonymous functions from the stack trace. + if (line.includes(' ()')) { + return false; + } + // Exclude Node.js internals from the stack trace. + if (line.includes(' (node:')) { + return false; + } + return true; + }).join('\n'); + return `Dynamic API Usage Debug - ${expression}:\n${stack}`; + }); +} +function createHangingInputAbortSignal(workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + const controller = new AbortController(); + if (workUnitStore.cacheSignal) { + // If we have a cacheSignal it means we're in a prospective render. If + // the input we're waiting on is coming from another cache, we do want + // to wait for it so that we can resolve this cache entry too. + workUnitStore.cacheSignal.inputReady().then(()=>{ + controller.abort(); + }); + } else { + // Otherwise we're in the final render and we should already have all + // our caches filled. + // If the prerender uses stages, we have wait until the final stage. + // if an input didn't resolve at that point, then we can assume it never will. + // + // We might still be waiting on some microtasks so we + // wait one tick before giving up. When we give up, we still want to + // render the content of this cache as deeply as we can so that we can + // suspend as deeply as possible in the tree or not at all if we don't + // end up waiting for the input. + const stagedRendering = (0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["getStagedRenderingController"])(workUnitStore); + if (stagedRendering && stagedRendering.finalStage !== null) { + stagedRendering.waitForStage(stagedRendering.finalStage).then(()=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["scheduleOnNextTick"])(()=>controller.abort()), noop); + } else { + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["scheduleOnNextTick"])(()=>controller.abort()); + } + } + return controller.signal; + case 'prerender-client': + case 'validation-client': + case 'prerender-legacy': + case 'request': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + return undefined; + default: + workUnitStore; + } +} +function noop() {} +function annotateDynamicAccess(expression, prerenderStore) { + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking) { + dynamicTracking.dynamicAccesses.push({ + stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined, + expression + }); + } +} +const hasSuspenseRegex = /\n\s+at Suspense \(\)/; +// Common implicit body tags that React will treat as body when placed directly in html +const bodyAndImplicitTags = 'body|div|main|section|article|aside|header|footer|nav|form|p|span|h1|h2|h3|h4|h5|h6'; +// Detects when RootLayoutBoundary (our framework marker component) appears +// after Suspense in the component stack, indicating the root layout is wrapped +// within a Suspense boundary. Ensures no body/html/implicit-body components are in between. +// +// Example matches: +// at Suspense () +// at __next_root_layout_boundary__ () +// +// Or with other components in between (but not body/html/implicit-body): +// at Suspense () +// at SomeComponent () +// at __next_root_layout_boundary__ () +const hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex = new RegExp(`\\n\\s+at Suspense \\(\\)(?:(?!\\n\\s+at (?:${bodyAndImplicitTags}) \\(\\))[\\s\\S])*?\\n\\s+at ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$framework$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ROOT_LAYOUT_BOUNDARY_NAME"]} \\([^\\n]*\\)`); +const hasMetadataRegex = new RegExp(`\\n\\s+at ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$framework$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["METADATA_BOUNDARY_NAME"]}[\\n\\s]`); +const hasViewportRegex = new RegExp(`\\n\\s+at ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$framework$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["VIEWPORT_BOUNDARY_NAME"]}[\\n\\s]`); +const hasOutletRegex = new RegExp(`\\n\\s+at ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$framework$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["OUTLET_BOUNDARY_NAME"]}[\\n\\s]`); +const hasInstantValidationBoundaryRegex = new RegExp(`\\n\\s+at ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INSTANT_VALIDATION_BOUNDARY_NAME"]}[\\n\\s]`); +const slotMarkerRegex = new RegExp(`\\n\\s+at ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INSTANT_SLOT_MARKER_PREFIX"]}(\\d+)${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INSTANT_SLOT_MARKER_SUFFIX"]}[\\n\\s]`); +/** Look up the config factory for the slot this error belongs to. + * Checks the component stack for a slot marker (__next_instant_slot_N__) + * and returns the config at that index. Falls back to index 0 (root + * config) when no slot marker is found or the slot has no config. */ function resolveInstantStack(componentStack, dynamicValidation) { + const { slotStacks } = dynamicValidation; + if (slotStacks.length > 1) { + const match = slotMarkerRegex.exec(componentStack); + if (match) { + // Slot markers are 0-indexed in the component name but + // slotStacks is 1-indexed (index 0 is the root config). + const slotIndex = parseInt(match[1], 10) + 1; + const slotStack = slotStacks[slotIndex]; + if (slotStack != null) { + return slotStack; + } + } + } + // Fall back to root config (index 0) + return slotStacks[0] ?? null; +} +/** + * Inspects the component stack of an outlet boundary to discover whether the + * user placed a Suspense boundary above the document body, and records the + * opt-in on `dynamicValidation.hasSuspenseAboveBody` if so. + * + * The outlet itself isn't a meaningful source of dynamic — it only resolves + * when metadata/viewport are dynamic, which we track via their own boundaries. + * However, the outlet renders alongside the page content, so its stack passes + * through the user's layout chain (typically reaching into `` via the + * root layout). That makes the outlet stack our best opportunity to spot a + * Suspense boundary above the body, even when no real body content is dynamic. + * Without this, a route whose only dynamic source is `generateViewport()` would + * miss the Suspense-above-body opt-in, because the viewport's stack lives in + * the head and never sees the user's root layout. + * + * We deliberately only set `hasSuspenseAboveBody`, not `hasAllowedDynamic`. The + * latter tracks whether the body has dynamic content that's been wrapped in + * Suspense (i.e., the page is partially dynamic). The outlet rendering tells us + * about the structural opt-in for an empty shell, not about the body being + * partially dynamic. The distinction matters because dynamic metadata is only + * acceptable when the page is partially dynamic (via real body holes), and we + * don't want this outlet-based detection to mask that case. + */ function trackOutletSuspenseAboveBody(componentStack, dynamicValidation) { + if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + dynamicValidation.hasSuspenseAboveBody = true; + } +} +function trackDynamicAccessInStaticRoute(dynamicReason, workStore, componentStack, dynamicValidation, clientDynamic, isServerPartial, kind) { + const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic); + if (hasOutletRegex.test(componentStack)) { + trackOutletSuspenseAboveBody(componentStack, dynamicValidation); + return; + } + if (hasMetadataRegex.test(componentStack)) { + dynamicValidation.dynamicErrors.push(addErrorContext(createMetadataErrorInStaticRoute(kind, workStore.route), componentStack, null)); + return; + } + if (hasViewportRegex.test(componentStack)) { + dynamicValidation.dynamicErrors.push(addErrorContext(createViewportErrorInStaticRoute(kind, workStore.route), componentStack, null)); + return; + } + let hasSuspense = false; + if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + // this error had a Suspense boundary above it, and it's above the body as well. + dynamicValidation.hasSuspenseAboveBody = true; + hasSuspense = true; + } else if (hasSuspenseRegex.test(componentStack)) { + // this error had a Suspense boundary above it. + hasSuspense = true; + } + if (hasSuspense) { + if (!isServerPartial) { + // If we don't have holes caused by server data, then any holes must be caused + // by client-only code, which is allowed. + dynamicValidation.hasAllowedDynamic = true; + return; + } + // We have holes that may be caused by server data. + if (syncDynamicError || (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isClientHookDynamicError"])(dynamicReason)) { + // We know this hole wasn't caused by server data, so it's allowed + // (because it's wrapped in a Suspense) + dynamicValidation.hasAllowedDynamic = true; + return; + } + // Any remaining hole may be caused by a server hole. + // These are not allowed even with Suspense. + // (NOTE: this may misreport valid client dynamic holes as server holes) + dynamicValidation.dynamicErrors.push(addErrorContext(createBodyErrorInStaticRoute(kind, workStore.route), componentStack, null)); + return; + } + if (syncDynamicError) { + dynamicValidation.dynamicErrors.push(syncDynamicError); + return; + } + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isClientHookDynamicError"])(dynamicReason)) { + dynamicValidation.dynamicErrors.push(addErrorContext(dynamicReason, componentStack, null)); + return; + } + const error = addErrorContext(isServerPartial ? createBodyErrorInStaticRoute(kind, workStore.route) : createBodyError(kind, workStore.route), componentStack, null); + dynamicValidation.dynamicErrors.push(error); +} +function trackAllowedDynamicAccess(dynamicReason, workStore, componentStack, dynamicValidation, clientDynamic) { + const dynamicHoleKind = 6; + const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic); + if (hasOutletRegex.test(componentStack)) { + trackOutletSuspenseAboveBody(componentStack, dynamicValidation); + return; + } else if (hasMetadataRegex.test(componentStack)) { + dynamicValidation.hasDynamicMetadata = true; + return; + } else if (hasViewportRegex.test(componentStack)) { + dynamicValidation.hasDynamicViewport = true; + return; + } else if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule. + // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense + // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering. + dynamicValidation.hasAllowedDynamic = true; + dynamicValidation.hasSuspenseAboveBody = true; + return; + } else if (hasSuspenseRegex.test(componentStack)) { + // this error had a Suspense boundary above it so we don't need to report it as a source + // of disallowed + dynamicValidation.hasAllowedDynamic = true; + return; + } else if (syncDynamicError) { + dynamicValidation.dynamicErrors.push(syncDynamicError); + return; + } + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isClientHookDynamicError"])(dynamicReason)) { + dynamicValidation.dynamicErrors.push(addErrorContext(dynamicReason, componentStack, null)); + return; + } + const error = addErrorContext(createBodyError(dynamicHoleKind, workStore.route), componentStack, null); + dynamicValidation.dynamicErrors.push(error); + return; +} +var DynamicHoleKind = /*#__PURE__*/ function(DynamicHoleKind) { + /** We know that this hole is caused by runtime data. */ DynamicHoleKind[DynamicHoleKind["Runtime"] = 1] = "Runtime"; + /** We know that this hole is caused by link data. */ DynamicHoleKind[DynamicHoleKind["Link"] = 2] = "Link"; + /** We know that this hole is caused by navigation(). */ DynamicHoleKind[DynamicHoleKind["Navigation"] = 3] = "Navigation"; + /** We know that this hole is caused by prefetch(). */ DynamicHoleKind[DynamicHoleKind["Prefetch"] = 4] = "Prefetch"; + /** We know that this hole is caused by dynamic data. */ DynamicHoleKind[DynamicHoleKind["Dynamic"] = 5] = "Dynamic"; + /** We know that this hole is caused by runtime or dynamic data, but don't know which. */ DynamicHoleKind[DynamicHoleKind["RuntimeOrDynamic"] = 6] = "RuntimeOrDynamic"; + return DynamicHoleKind; +}({}); +function createInstantValidationState(slotStacks) { + return { + hasDynamicMetadata: false, + hasAllowedClientDynamicAboveBoundary: false, + dynamicMetadata: null, + hasDynamicViewport: false, + hasAllowedDynamic: false, + dynamicErrors: [], + validationPreventingErrors: [], + thrownErrorsOutsideBoundary: [], + slotStacks + }; +} +function trackDynamicHoleInNavigation(dynamicReason, workStore, componentStack, dynamicValidation, clientDynamic, kind, boundaryState) { + const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic); + if (hasOutletRegex.test(componentStack)) { + // We don't need to track that this is dynamic. It is only so when something else is also dynamic. + return; + } + // Resolve the config stack for this specific error. If the error + // is inside a slot marker, use that slot's config. Otherwise fall + // back to the default. + const effectiveCreateInstantStack = resolveInstantStack(componentStack, dynamicValidation); + if (hasMetadataRegex.test(componentStack)) { + const error = addErrorContext(createMetadataError(kind, workStore.route), componentStack, effectiveCreateInstantStack); + dynamicValidation.dynamicMetadata = error; + return; + } + if (hasViewportRegex.test(componentStack)) { + const error = addErrorContext(createViewportError(kind, workStore.route), componentStack, effectiveCreateInstantStack); + dynamicValidation.dynamicErrors.push(error); + return; + } + const boundaryLocation = hasInstantValidationBoundaryRegex.exec(componentStack); + if (!boundaryLocation) { + // We don't see the validation boundary in the component stack, + // so this hole must be coming from a shared parent. + // Shared parents are fully resolved and don't have RSC holes, + // but they can still suspend in a client component during SSR. + // If we managed to render all the validation boundaries, that means + // that the client holes aren't blocking validation and we can disregard them. + // Note that we don't even care whether they have suspense or not. + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$tracking$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["allRequiredBoundariesRendered"])(boundaryState)) { + dynamicValidation.hasAllowedClientDynamicAboveBoundary = true; + dynamicValidation.hasAllowedDynamic = true // Holes outside the boundary contribute to allowing dynamic metadata + ; + return; + } else { + // TODO(instant-validation) TODO(NAR-787) + // If shared parents blocked us from validating, we should only log + // the errors from the innermost (segments), i.e. omit layouts whose + // slots managed to render (because clearly they didn't block validation) + const message = `Route "${workStore.route}": Could not validate \`instant\` because a Client Component in a parent segment prevented the page from rendering.`; + const error = addErrorContext(new Error(message), componentStack, effectiveCreateInstantStack); + dynamicValidation.validationPreventingErrors.push(error); + return; + } + } else { + // The hole originates inside the validation boundary. + // + // Check if we have a Suspense above the hole, but below the validation boundary. + // If we do, then this dynamic usage wouldn't block a navigation to this subtree. + // Conversely, if the nearest suspense is above the validation boundary, then this subtree would block. + // + // Note that in the component stack, children come before parents. + // + // Valid: + // ... + // at Suspense + // ... + // at __next_prefetch_validation_boundary__ + // + // Invalid: + // ... + // at __next_prefetch_validation_boundary__ + // ... + // at Suspense + // + const suspenseLocation = hasSuspenseRegex.exec(componentStack); + if (suspenseLocation) { + if (suspenseLocation.index < boundaryLocation.index) { + dynamicValidation.hasAllowedDynamic = true; + return; + } else { + // invalid - fallthrough + } + } + } + if (syncDynamicError) { + if (effectiveCreateInstantStack !== null && syncDynamicError.cause === undefined) { + syncDynamicError.cause = effectiveCreateInstantStack(); + } + dynamicValidation.dynamicErrors.push(syncDynamicError); + return; + } + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isClientHookDynamicError"])(dynamicReason)) { + dynamicValidation.dynamicErrors.push(addErrorContext(dynamicReason, componentStack, effectiveCreateInstantStack)); + return; + } + const error = addErrorContext(createBodyErrorInNavigation(kind, workStore.route), componentStack, effectiveCreateInstantStack); + dynamicValidation.dynamicErrors.push(error); + return; +} +function createBodyError(kind, route) { + switch(kind){ + case 1: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeBodyError"])(route); + case 5: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicBodyError"])(route); + case 6: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicOrRuntimeBodyError"])(route); + } +} +function createBodyErrorInNavigation(kind, route) { + switch(kind){ + case 1: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeBodyErrorInNavigation"])(route); + case 2: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createLinkBodyErrorInNavigation"])(route); + case 3: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createNavigationBodyErrorInNavigation"])(route); + case 4: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPrefetchBodyErrorInNavigation"])(route); + case 5: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicBodyErrorInNavigation"])(route); + } +} +function createMetadataError(kind, route) { + switch(kind){ + case 1: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeMetadataError"])(route); + case 2: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createLinkMetadataError"])(route); + case 3: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createNavigationMetadataError"])(route); + case 4: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPrefetchMetadataError"])(route); + case 5: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicMetadataError"])(route); + case 6: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicOrRuntimeMetadataError"])(route); + } +} +function createViewportError(kind, route) { + switch(kind){ + case 1: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeViewportError"])(route); + case 2: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createLinkViewportError"])(route); + case 3: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createNavigationViewportError"])(route); + case 4: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPrefetchViewportError"])(route); + case 5: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicViewportError"])(route); + case 6: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicOrRuntimeViewportError"])(route); + } +} +function createBodyErrorInStaticRoute(kind, route) { + switch(kind){ + case 1: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeBodyErrorInStaticRoute"])(route); + case 5: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicBodyErrorInStaticRoute"])(route); + case 6: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createNonPrerenderableBodyErrorInStaticRoute"])(route); + } +} +function createMetadataErrorInStaticRoute(kind, route) { + switch(kind){ + case 1: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeMetadataErrorInStaticRoute"])(route); + case 5: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicMetadataErrorInStaticRoute"])(route); + case 6: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createNonPrerenderableMetadataErrorInStaticRoute"])(route); + } +} +function createViewportErrorInStaticRoute(kind, route) { + switch(kind){ + case 1: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeViewportErrorInStaticRoute"])(route); + case 5: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicViewportErrorInStaticRoute"])(route); + case 6: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createNonPrerenderableViewportErrorInStaticRoute"])(route); + } +} +function trackThrownErrorInNavigation(workStore, dynamicValidation, thrownValue, componentStack, reactBrowserBailout) { + const boundaryLocation = hasInstantValidationBoundaryRegex.exec(componentStack); + if (!boundaryLocation) { + // There's no validation boundary on the component stack. + // This error may have blocked a boundary from rendering. + // Wrap the error to provide component context. + // This helps for errors from node_modules which would otherwise + // have no useful stack information due to ignore-listing, + // e.g. next/dynamic with `ssr: false`. + if (reactBrowserBailout) { + // React preserves Next's branded bailout reason as the error cause. + // Replace the internal wrapper before storing the user-facing diagnostic. + const browserBailoutReason = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$lazy$2d$dynamic$2f$react$2d$browser$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getReactBrowserBailoutReason"])(thrownValue); + if (browserBailoutReason !== undefined) { + const browserBailoutError = thrownValue; + browserBailoutError.cause = browserBailoutReason; + } + } + const error = addErrorContext(new Error('An error occurred while attempting to validate instant UI. This error may be preventing the validation from completing.', { + cause: thrownValue + }), componentStack, null); + dynamicValidation.thrownErrorsOutsideBoundary.push(error); + } else { + // There's validation boundary on the component stack, + // so we know this error didn't block a validation boundary from rendering. + // However, this error might be hiding be hiding dynamic content that would + // cause validation to fail. + const suspenseLocation = hasSuspenseRegex.exec(componentStack); + if (suspenseLocation) { + if (suspenseLocation.index < boundaryLocation.index) { + // There's a Suspense below the validation boundary but above this error's location. + // This subtree can't fail instant validation because any potential + // dynamic holes would be guarded by the Suspense anyway, + // so we can allow this. + return; + } else { + // invalid - fallthrough + } + } + if (reactBrowserBailout) { + // React preserves Next's branded bailout reason as the error cause. + // Replace the internal wrapper before storing the user-facing diagnostic. + const browserBailoutReason = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$lazy$2d$dynamic$2f$react$2d$browser$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getReactBrowserBailoutReason"])(thrownValue); + if (browserBailoutReason !== undefined) { + const browserBailoutError = thrownValue; + browserBailoutError.cause = browserBailoutReason; + } + } + const message = `Route "${workStore.route}": Could not validate \`instant\` because an error prevented the target segment from rendering.`; + const error = addErrorContext(new Error(message, { + cause: thrownValue + }), componentStack, null // TODO(instant-validation-build): conflicting use of cause + ); + dynamicValidation.validationPreventingErrors.push(error); + } +} +function trackDynamicHoleInStaticShell(dynamicReason, workStore, componentStack, dynamicValidation, clientDynamic, kind) { + const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic); + if (hasOutletRegex.test(componentStack)) { + trackOutletSuspenseAboveBody(componentStack, dynamicValidation); + return; + } else if (hasMetadataRegex.test(componentStack)) { + const error = addErrorContext(createMetadataError(kind, workStore.route), componentStack, null); + dynamicValidation.dynamicMetadata = error; + return; + } else if (hasViewportRegex.test(componentStack)) { + const error = addErrorContext(createViewportError(kind, workStore.route), componentStack, null); + dynamicValidation.dynamicErrors.push(error); + return; + } else if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule. + // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense + // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering. + dynamicValidation.hasAllowedDynamic = true; + dynamicValidation.hasSuspenseAboveBody = true; + return; + } else if (hasSuspenseRegex.test(componentStack)) { + // this error had a Suspense boundary above it so we don't need to report it as a source + // of disallowed + dynamicValidation.hasAllowedDynamic = true; + return; + } else if (syncDynamicError) { + dynamicValidation.dynamicErrors.push(syncDynamicError); + return; + } + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isClientHookDynamicError"])(dynamicReason)) { + dynamicValidation.dynamicErrors.push(addErrorContext(dynamicReason, componentStack, null)); + return; + } + const error = addErrorContext(kind === 1 ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeBodyError"])(workStore.route) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicBodyError"])(workStore.route), componentStack, null); + dynamicValidation.dynamicErrors.push(error); + return; +} +/** + * In dev mode, we prefer using the owner stack, otherwise the provided + * component stack is used. + */ function addErrorContext(error, componentStack, createInstantStack) { + const ownerStack = ("TURBOPACK compile-time value", "development") !== 'production' && __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].captureOwnerStack ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].captureOwnerStack() : null; + if (createInstantStack !== null) { + error.cause = createInstantStack(); + } + // TODO go back to owner stack here if available. This is temporarily using componentStack to get the right + // + error.stack = error.name + ': ' + error.message + (ownerStack || componentStack); + return error; +} +var PreludeState = /*#__PURE__*/ function(PreludeState) { + PreludeState[PreludeState["Full"] = 0] = "Full"; + PreludeState[PreludeState["Empty"] = 1] = "Empty"; + PreludeState[PreludeState["Errored"] = 2] = "Errored"; + return PreludeState; +}({}); +function logDisallowedDynamicError(workStore, error) { + console.error(error); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["logBuildDebugHint"])(workStore.route); +} +function throwIfSyncIOUsed(workStore, serverDynamic) { + if (serverDynamic.syncDynamicErrorWithStack) { + logDisallowedDynamicError(workStore, serverDynamic.syncDynamicErrorWithStack); + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"](); + } +} +function throwIfDisallowedDynamic(workStore, prelude, dynamicValidation, serverDynamic, allowEmptyStaticShell) { + const dynamicHoleKind = 6; + throwIfSyncIOUsed(workStore, serverDynamic); + // The dynamic metadata error is a mistake-detection signal. It fires when the + // rest of the shell is otherwise fully static apart from metadata, suggesting + // the dynamic data access in `generateMetadata` was probably unintentional. + // That condition is independent of whether the user or build phase accepted + // an empty shell, so we surface it before any opt-in bypass. + if (prelude === 0 && dynamicValidation.hasAllowedDynamic === false && dynamicValidation.hasDynamicMetadata) { + console.error(createMetadataError(dynamicHoleKind, workStore.route).message); + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"](); + } + // Either flag expresses "this shell is allowed to be empty/blocking": + // - `allowEmptyStaticShell` covers `instant = false` (user opt-in) + // and the build-phase fallback-shell case. + // - `hasSuspenseAboveBody` is the structural opt-in inside the user's root + // layout. + // Treat them as synonyms for the purpose of bypassing shell-failure errors. + if (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody) { + return; + } + if (prelude !== 0) { + // We didn't have any sync bailouts but there may be user code which + // blocked the root. We would have captured these during the prerender + // and can log them here and then terminate the build/validating render + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + for(let i = 0; i < dynamicErrors.length; i++){ + logDisallowedDynamicError(workStore, dynamicErrors[i]); + } + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"](); + } + // If we got this far then the only other thing that could be blocking + // the root is dynamic Viewport. If this is dynamic then + // you need to opt into that by adding a Suspense boundary above the body + // to indicate your are ok with fully dynamic rendering. + if (dynamicValidation.hasDynamicViewport) { + console.error(createViewportError(dynamicHoleKind, workStore.route).message); + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"](); + } + if (prelude === 1) { + // If we ever get this far then we messed up the tracking of invalid dynamic. + // We still adhere to the constraint that you must produce a shell but invite the + // user to report this as a bug in Next.js. + console.error(`Route "${workStore.route}" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`); + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"](); + } + } +} +function throwIfDisallowedDynamicInStaticRoute(workStore, prelude, dynamicValidation, serverDynamic, isFallbackShell, allowEmptyStaticShell, isServerPartial) { + const reasons = getDisallowedReasonsInStaticRoute(workStore, prelude, dynamicValidation, serverDynamic, isFallbackShell, allowEmptyStaticShell, isServerPartial); + if (reasons.length > 0) { + for (const reason of reasons){ + logDisallowedDynamicError(workStore, reason); + } + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"](); + } +} +function getDisallowedReasonsInStaticRoute(workStore, prelude, dynamicValidation, serverDynamic, isFallbackShell, allowEmptyStaticShell, isServerPartial) { + if (serverDynamic && serverDynamic.syncDynamicErrorWithStack) { + return [ + serverDynamic.syncDynamicErrorWithStack + ]; + } + // We do a fallback shell prerender, but it's not meant to be validated -- + // we just need it to create the relevant prerender outputs. + if (isFallbackShell) { + return []; + } + // Suspense-above-body and `instant = false` bypass reporting + // that the shell is blocked. However, if we have non-prerenderable server + // data, we still have to error, regardless of those two. + if (!isServerPartial && (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody)) { + return []; + } + const { dynamicErrors } = dynamicValidation; + if (dynamicErrors.length > 0) { + return dynamicErrors; + } + // Dynamic data may have been passed into a client component without calling `use()`, + // in which case we wouldn't see it during the prerender, but still need to error. + // Fall back to a generic error message. + if (isServerPartial) { + return [ + new Error(`Route "${workStore.route}": Next.js encountered data that is not available during a static prerender, but is unable to provide a location.`) + ]; + } + if (prelude === 1 || prelude === 2) { + // We've somehow ended up with an empty prelude but no dynamic errors. + // We must've messed up the tracking somehow. + return [ + new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`Route "${workStore.route}" did not produce a static shell and Next.js was unable to determine a reason.`) + ]; + } + return []; +} +function getStaticShellDisallowedDynamicReasons(workStore, prelude, dynamicValidation, allowEmptyStaticShell) { + // The dynamic metadata error is a mistake-detection signal. It fires when the + // rest of the shell is otherwise fully static apart from metadata, suggesting + // the dynamic data access in `generateMetadata` was probably unintentional. + // That condition is independent of whether the user or build phase accepted + // an empty shell, so we surface it before any opt-in bypass. + if (prelude === 0 && dynamicValidation.hasAllowedDynamic === false && dynamicValidation.dynamicErrors.length === 0 && dynamicValidation.dynamicMetadata) { + return [ + dynamicValidation.dynamicMetadata + ]; + } + // Either flag expresses "this shell is allowed to be empty/blocking": + // - `allowEmptyStaticShell` covers `instant = false` (user opt-in) + // and the build-phase fallback-shell case. + // - `hasSuspenseAboveBody` is the structural opt-in inside the user's root + // layout. + // Treat them as synonyms for the purpose of bypassing shell-failure errors. + if (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody) { + return []; + } + if (prelude !== 0) { + // We didn't have any sync bailouts but there may be user code which + // blocked the root. We would have captured these during the prerender + // and can log them here and then terminate the build/validating render + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + return dynamicErrors; + } + if (prelude === 1) { + // If we ever get this far then we messed up the tracking of invalid dynamic. + // We still adhere to the constraint that you must produce a shell but invite the + // user to report this as a bug in Next.js. + return [ + new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`Route "${workStore.route}" did not produce a static shell and Next.js was unable to determine a reason.`) + ]; + } + } + // We had a non-empty prelude and there are no dynamic holes + return []; +} +function getNavigationDisallowedDynamicReasons(workStore, prelude, dynamicValidation, validationSampleTracking, boundaryState, devRenderDidError) { + // If we have errors related to missing samples, those should take precedence over everything else. + if (validationSampleTracking) { + const { missingSampleErrors } = validationSampleTracking; + if (missingSampleErrors.length > 0) { + return missingSampleErrors; + } + } + const { validationPreventingErrors } = dynamicValidation; + if (validationPreventingErrors.length > 0) { + if (("TURBOPACK compile-time value", "1") && devRenderDidError) { + // The dev render already surfaced server errors to the user. + // The same errors likely caused validation to be inconclusive, + // so reporting them again as validation failures would be noisy. + return []; + } + return validationPreventingErrors; + } + // NOTE: We don't care about Suspense above body here, + // we're only concerned with the validation boundary + if (prelude !== 0) { + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + return dynamicErrors; + } + if (prelude === 1 && !dynamicValidation.hasAllowedClientDynamicAboveBoundary && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$tracking$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["allRequiredBoundariesRendered"])(boundaryState)) { + // If we ever get this far then we messed up the tracking of invalid + // dynamic. (When boundaries are missing the deferred fallback below + // will surface a more useful error.) + return new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`Route "${workStore.route}" failed to render during instant validation and Next.js was unable to determine a reason.`); + } + } else { + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + return dynamicErrors; + } + if (dynamicValidation.hasAllowedDynamic === false && dynamicValidation.dynamicMetadata) { + return [ + dynamicValidation.dynamicMetadata + ]; + } + } + // Missing boundaries on their own aren't a strong signal — a parent + // layout may legitimately omit a slot. Defer this so the caller can + // try shallower validation depths first; if every depth comes up + // empty we still want to surface this so the user is made aware that + // validation didn't complete. When we add a markers API, the + // marker-based variant of this check can become strict again. + if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$tracking$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["allRequiredBoundariesRendered"])(boundaryState)) { + const { thrownErrorsOutsideBoundary } = dynamicValidation; + const rootInstantStack = dynamicValidation.slotStacks[0]; + if (thrownErrorsOutsideBoundary.length === 0) { + const missingFiles = []; + for (const [id, filePaths] of boundaryState.requiredIds){ + if (!boundaryState.renderedIds.has(id)) { + for (const filePath of filePaths){ + let normalized = filePath.replace(/^\[project\][\\/]?/, '').replace(process.cwd() + '/', '').replace(process.cwd() + '\\', ''); + missingFiles.push(normalized); + } + } + } + missingFiles.sort(); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$instant$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createUnrenderedSegmentError"])(workStore.route, missingFiles); + } else if (("TURBOPACK compile-time value", "1") && devRenderDidError) { + // Errors outside the boundary likely blocked it from rendering, + // but they're already being reported to the user via the dev + // render. Suppress the validation failure to avoid noise. + return []; + } else if (thrownErrorsOutsideBoundary.length === 1) { + const message = `Route "${workStore.route}": Could not validate \`instant\` because the target segment was prevented from rendering, likely due to the following error.`; + const error = rootInstantStack !== null ? rootInstantStack() : new Error(); + error.name = 'Error'; + error.message = message; + return new AggregateError([ + error, + thrownErrorsOutsideBoundary[0] + ]); + } else { + const message = `Route "${workStore.route}": Could not validate \`instant\` because the target segment was prevented from rendering, likely due to one of the following errors.`; + const error = rootInstantStack !== null ? rootInstantStack() : new Error(); + error.name = 'Error'; + error.message = message; + return new AggregateError([ + error, + ...thrownErrorsOutsideBoundary + ]); + } + } + // We had a non-empty prelude and there are no dynamic holes + return []; +} +}), +"[project]/node_modules/next/dist/esm/server/app-render/instant-validation/boundary-constants.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "INSTANT_SLOT_MARKER_PREFIX", + ()=>INSTANT_SLOT_MARKER_PREFIX, + "INSTANT_SLOT_MARKER_SUFFIX", + ()=>INSTANT_SLOT_MARKER_SUFFIX, + "INSTANT_VALIDATION_BOUNDARY_NAME", + ()=>INSTANT_VALIDATION_BOUNDARY_NAME +]); +const INSTANT_VALIDATION_BOUNDARY_NAME = '__next_instant_validation_boundary__'; +const INSTANT_SLOT_MARKER_PREFIX = '__next_instant_slot_'; +const INSTANT_SLOT_MARKER_SUFFIX = '__'; +}), +"[project]/node_modules/next/dist/esm/server/app-render/instant-validation/boundary-tracking.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "allRequiredBoundariesRendered", + ()=>allRequiredBoundariesRendered, + "createValidationBoundaryTracking", + ()=>createValidationBoundaryTracking +]); +function createValidationBoundaryTracking(/** Pass if the render is expected to render the same IDs as a previous one. */ matchPrevious) { + return { + requiredIds: matchPrevious ? new Map(matchPrevious.requiredIds) : new Map(), + renderedIds: new Set() + }; +} +function allRequiredBoundariesRendered(state) { + for (const id of state.requiredIds.keys()){ + if (!state.renderedIds.has(id)) { + return false; + } + } + return true; +} +}), +"[project]/node_modules/next/dist/esm/server/app-render/manifests-singleton.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getActionNotFoundError", + ()=>getActionNotFoundError, + "getClientReferenceManifest", + ()=>getClientReferenceManifest, + "getInvalidServerReferenceIdError", + ()=>getInvalidServerReferenceIdError, + "getRscModuleMappingForUseCache", + ()=>getRscModuleMappingForUseCache, + "getServerActionsManifest", + ()=>getServerActionsManifest, + "getServerModuleMap", + ()=>getServerModuleMap, + "normalizeWorkerPageName", + ()=>normalizeWorkerPageName, + "selectWorkerForForwarding", + ()=>selectWorkerForForwarding, + "setManifestsSingleton", + ()=>setManifestsSingleton +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$server$2d$reference$2d$info$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/server-reference-info.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2f$reflect$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/utils/reflect-utils.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)"); +; +; +; +; +; +; +; +; +function getActionNotFoundError(actionId) { + return new Error(`Failed to find Server Action${actionId ? ` "${actionId}"` : ''}. This request might be from an older or newer deployment.\nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action`); +} +function getInvalidServerReferenceIdError(id) { + // `id` is arbitrary client-provided input. Unlike the not-found case, it has + // not passed the length gate and can reach this error via a malformed server + // reference in an action payload, so it may be of any length and contain + // control characters. `JSON.stringify` escapes newlines and quotes so it + // can't forge log lines, and truncating overly long ids prevents log + // flooding. Ids at or below the cap are logged in full so that we only add an + // ellipsis to ids that are meaningfully longer than the truncated length. + const encoded = JSON.stringify(id.length > MAX_LOGGED_SERVER_REFERENCE_ID_LENGTH ? id.slice(0, TRUNCATED_SERVER_REFERENCE_ID_LENGTH) + '…' : id); + return new Error(`The Server Reference ID did not match the expected format. Received ${encoded}.\nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action`); +} +// Ids at or below the cap are logged in full. Longer ids are truncated to the +// shorter length and marked with an ellipsis, so the cap leaves headroom over +// the truncated length rather than ellipsizing ids that are barely too long. +const MAX_LOGGED_SERVER_REFERENCE_ID_LENGTH = 100; +const TRUNCATED_SERVER_REFERENCE_ID_LENGTH = 90; +// This is a global singleton that is, among other things, also used to +// encode/decode bound args of server function closures. This can't be using a +// AsyncLocalStorage as it might happen at the module level. +const MANIFESTS_SINGLETON = Symbol.for('next.server.manifests'); +const globalThisWithManifests = globalThis; +function isUseCacheStore(workUnitStore) { + if (!workUnitStore) { + return false; + } + switch(workUnitStore.type){ + case 'cache': + case 'private-cache': + return true; + case 'request': + case 'unstable-cache': + case 'prerender': + case 'prerender-client': + case 'prerender-legacy': + case 'prerender-runtime': + case 'validation-client': + case 'build-time-generator': + return false; + default: + return workUnitStore; + } +} +function createProxiedClientReferenceManifest(clientReferenceManifestsPerRoute) { + const createMappingProxy = (prop)=>{ + return new Proxy({}, { + get (_, id) { + const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + if (workStore) { + var _clientReferenceManifestsPerRoute_get; + const currentManifest = (_clientReferenceManifestsPerRoute_get = clientReferenceManifestsPerRoute.get(workStore.route)) == null ? void 0 : _clientReferenceManifestsPerRoute_get.clientReferenceManifest; + if (currentManifest == null ? void 0 : currentManifest[prop][id]) { + if (workStore.durableUseCacheEntries && prop === 'clientModules') { + const workUnitStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workUnitAsyncStorage"].getStore(); + if (isUseCacheStore(workUnitStore)) { + // This creates a mapping so that a given client references with name + // `app/foo/client.tsx` is serialized as + // ``` + // { id: `app/foo/client.tsx`, name: `*`, chunks: ["stub"], async: false } + // ``` + // instead of the actual + // ``` + // { id: 19132, name: `*`, chunks: ["/_next/static/chunks/..."], async: true } + // ``` + // + // This means that not the unstable client module id is used for the cache entry, + // but the stable client reference name. The stable client reference name is + // resolved against the current manifest via rscModuleMappingForUseCache when the + // entry is read. + const clientReferenceManifestEntry = currentManifest.clientModules[id]; + return { + // Return `id` instead of `clientReferenceManifestEntry.id` here. + id, + name: clientReferenceManifestEntry.name, + // Set a sentinel value just in case this does ends up being read at some point + // in the future, then at least we'll get "Failed to load chunk stub (404)" + // instead of "Failed to load module 1234". + chunks: [ + 'stub' + ], + async: false + }; + } + } + return currentManifest[prop][id]; + } + // In development, we also check all other manifests to see if the + // module exists there. This is to support a scenario where React's + // I/O tracking (dev-only) creates a connection from one page to + // another through an emitted async I/O node that references client + // components from the other page, e.g. in owner props. + // TODO: Maybe we need to add a `debugBundlerConfig` option to React + // to avoid this workaround. The current workaround has the + // disadvantage that one might accidentally or intentionally share + // client references across pages (e.g. by storing them in a global + // variable), which would then only be caught in production. + if ("TURBOPACK compile-time truthy", 1) { + for (const [route, { page, clientReferenceManifest }] of clientReferenceManifestsPerRoute){ + if (route === workStore.route) { + continue; + } + const entry = clientReferenceManifest[prop][id]; + if (entry !== undefined) { + if ("TURBOPACK compile-time truthy", 1) { + // The dev validation worker rebuilds this registry in its + // own thread, seeded with only the route it validates, so + // it has to be told which other manifests it needs. + workStore.additionalClientReferenceManifestPages ??= new Set(); + workStore.additionalClientReferenceManifestPages.add(page); + } + return entry; + } + } + } + } else { + // If there's no work store defined, we can assume that a client + // reference manifest is needed during module evaluation, e.g. to + // create a server function using a higher-order function. This + // might also use client components which need to be serialized by + // Flight, and therefore client references need to be resolvable. In + // that case we search all page manifests to find the module. + for (const { clientReferenceManifest } of clientReferenceManifestsPerRoute.values()){ + const entry = clientReferenceManifest[prop][id]; + if (entry !== undefined) { + return entry; + } + } + } + return undefined; + } + }); + }; + const mappingProxies = new Map(); + const proxiedClientReferenceManifest = new Proxy({}, { + get (_, prop) { + const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + switch(prop){ + case 'moduleLoading': + case 'entryCSSFiles': + case 'entryJSFiles': + { + if (!workStore) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`Cannot access "${prop}" without a work store.`); + } + const registeredManifest = clientReferenceManifestsPerRoute.get(workStore.route); + if (!registeredManifest) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`The client reference manifest for route "${workStore.route}" does not exist.`); + } + return registeredManifest.clientReferenceManifest[prop]; + } + case 'clientModules': + case 'rscModuleMapping': + case 'edgeRscModuleMapping': + case 'ssrModuleMapping': + case 'edgeSSRModuleMapping': + { + let proxy = mappingProxies.get(prop); + if (!proxy) { + proxy = createMappingProxy(prop); + mappingProxies.set(prop, proxy); + } + return proxy; + } + default: + { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`This is a proxied client reference manifest. The property "${String(prop)}" is not handled.`); + } + } + } + }); + // Performs the inverse of the clientModules isUseCacheStore(workUnitStore) special case above: + // + // For cache functions, don't do the usual rscModuleMapping lookup by module ID, but instead look + // up by the stable client reference name. This is because cache entries must not depend on + // build-local module IDs or chunks. So we need a second layer of indirection here to do client + // reference name -> client module id -> rsc module mapping lookup. + // + // This one is created separately (not inside proxiedClientReferenceManifest.rscModuleMapping) as + // we don't necessarily are inside a workUnitStore when we need to access this mapping (as opposed + // to the clientModules mapping, which always has the ALS set). + const rscModuleMappingForUseCache = new Proxy({}, { + get (_, key) { + const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + if (workStore && workStore.durableUseCacheEntries) { + var _clientReferenceManifestsPerRoute_get; + const currentManifest = (_clientReferenceManifestsPerRoute_get = clientReferenceManifestsPerRoute.get(workStore.route)) == null ? void 0 : _clientReferenceManifestsPerRoute_get.clientReferenceManifest; + const clientReferenceName = key; + const clientReferenceManifestEntry = currentManifest == null ? void 0 : currentManifest.clientModules[clientReferenceName]; + if (clientReferenceManifestEntry === undefined) { + return undefined; + } + const clientModuleId = clientReferenceManifestEntry.id; + return currentManifest == null ? void 0 : currentManifest.rscModuleMapping[clientModuleId]; + } else { + return proxiedClientReferenceManifest.rscModuleMapping[key]; + } + } + }); + return { + proxiedClientReferenceManifest, + rscModuleMappingForUseCache + }; +} +/** + * This function creates a Flight-acceptable server module map proxy from our + * Server Reference Manifest similar to our client module map. This is because + * our manifest contains a lot of internal Next.js data that are relevant to the + * runtime, workers, etc. that React doesn't need to know. + */ function createServerModuleMap() { + return new Proxy(Object.create(null), { + get: (target, id, receiver)=>{ + var _getServerActionsManifest__id, _getServerActionsManifest_; + // React's debug serialization can probe the module map like a plain object. + // These probes are not server reference lookups. + if (typeof id !== 'string') { + return Reflect.get(target, id, receiver); + } + if (__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2f$reflect$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["wellKnownProperties"].has(id)) { + return Reflect.get(target, id, receiver); + } + if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$server$2d$reference$2d$info$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["mightBeServerReferenceId"])(id)) { + throw getInvalidServerReferenceIdError(id); + } + const workers = (_getServerActionsManifest_ = getServerActionsManifest()[("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'node']) == null ? void 0 : (_getServerActionsManifest__id = _getServerActionsManifest_[id]) == null ? void 0 : _getServerActionsManifest__id.workers; + if (!workers) { + throw getActionNotFoundError(id); + } + const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + let workerEntry; + if (workStore) { + workerEntry = workers[normalizeWorkerPageName(workStore.page)]; + } else { + // If there's no work store defined, we can assume that a server + // module map is needed during module evaluation, e.g. to create a + // server action using a higher-order function. Therefore it should be + // safe to return any entry from the manifest that matches the action + // ID. They all refer to the same module ID, which must also exist in + // the current page bundle. TODO: This is currently not guaranteed in + // Turbopack, and needs to be fixed. + workerEntry = Object.values(workers).at(0); + } + if (!workerEntry) { + throw getActionNotFoundError(id); + } + const { moduleId, async, durability } = workerEntry; + return { + id: moduleId, + name: id, + chunks: [], + async, + durability + }; + } + }); +} +function normalizeWorkerPageName(pageName) { + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pathHasPrefix"])(pageName, 'app')) { + return pageName; + } + return 'app' + pageName; +} +/** + * Converts a bundlePath (relative path to the entrypoint) to a routable page + * name. + */ function denormalizeWorkerPageName(bundlePath) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeAppPath"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["removePathPrefix"])(bundlePath, 'app')); +} +function selectWorkerForForwarding(actionId, pageName) { + var _serverActionsManifest__actionId; + const serverActionsManifest = getServerActionsManifest(); + const workers = (_serverActionsManifest__actionId = serverActionsManifest[("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'node'][actionId]) == null ? void 0 : _serverActionsManifest__actionId.workers; + // There are no workers to handle this action, nothing to forward to. + if (!workers) { + return; + } + // If there is an entry for the current page, we don't need to forward. + if (workers[normalizeWorkerPageName(pageName)]) { + return; + } + // Otherwise, grab the first worker that has a handler for this action id. + return denormalizeWorkerPageName(Object.keys(workers)[0]); +} +function setManifestsSingleton({ page, clientReferenceManifest, serverActionsManifest: rawServerActionsManifest }) { + const existingSingleton = globalThisWithManifests[MANIFESTS_SINGLETON]; + const route = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeAppPath"])(page); + const serverActionsManifest = { + encryptionKey: rawServerActionsManifest.encryptionKey, + // Use null-prototypes for the action objects to prevent prototype pollution + // from affecting action ID lookups. + node: Object.assign(Object.create(null), rawServerActionsManifest.node), + edge: Object.assign(Object.create(null), rawServerActionsManifest.edge) + }; + if (existingSingleton) { + existingSingleton.clientReferenceManifestsPerRoute.set(route, { + page, + clientReferenceManifest + }); + existingSingleton.serverActionsManifest = serverActionsManifest; + } else { + const clientReferenceManifestsPerRoute = new Map([ + [ + route, + { + page, + clientReferenceManifest + } + ] + ]); + const { proxiedClientReferenceManifest, rscModuleMappingForUseCache } = createProxiedClientReferenceManifest(clientReferenceManifestsPerRoute); + globalThisWithManifests[MANIFESTS_SINGLETON] = { + clientReferenceManifestsPerRoute, + proxiedClientReferenceManifest, + rscModuleMappingForUseCache, + serverActionsManifest, + serverModuleMap: createServerModuleMap() + }; + } +} +function getManifestsSingleton() { + const manifestSingleton = globalThisWithManifests[MANIFESTS_SINGLETON]; + if (!manifestSingleton) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('The manifests singleton was not initialized.'); + } + return manifestSingleton; +} +function getClientReferenceManifest() { + return getManifestsSingleton().proxiedClientReferenceManifest; +} +function getRscModuleMappingForUseCache() { + return getManifestsSingleton().rscModuleMappingForUseCache; +} +function getServerActionsManifest() { + return getManifestsSingleton().serverActionsManifest; +} +function getServerModuleMap() { + return getManifestsSingleton().serverModuleMap; +} +}), +"[project]/node_modules/next/dist/esm/server/app-render/segment-config/ensure-static.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "EnsureStaticLevel", + ()=>EnsureStaticLevel, + "resolveEnsureStaticConfig", + ()=>resolveEnsureStaticConfig, + "resolveEnsureStaticLevel", + ()=>resolveEnsureStaticLevel +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$loader$2d$tree$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-loader-tree.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$app$2d$dir$2d$module$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/app-dir-module.js [app-route] (ecmascript)"); +; +; +var EnsureStaticLevel = /*#__PURE__*/ function(EnsureStaticLevel) { + /** The route follows standard Partial Prefetching semantics. */ EnsureStaticLevel[EnsureStaticLevel["None"] = 0] = "None"; + /** The route requires that app shells must be statically prerendered. */ EnsureStaticLevel[EnsureStaticLevel["Shell"] = 1] = "Shell"; + /** The route requires that app shells and prefetches must be statically prerendered. */ EnsureStaticLevel[EnsureStaticLevel["Prefetch"] = 2] = "Prefetch"; + /** The route requires that app shells, prefetches, and the whole page must be statically prerendered. */ EnsureStaticLevel[EnsureStaticLevel["Navigation"] = 3] = "Navigation"; + return EnsureStaticLevel; +}({}); +function getEnsureStaticLevel(ensureStatic) { + switch(ensureStatic){ + case 'auto': + case false: + { + return 0; + } + case 'shell': + { + return 1; + } + case 'prefetch': + { + return 2; + } + case 'navigation': + { + return 3; + } + } +} +async function resolveEnsureStaticLevel(tree, partialPrefetching) { + return getEnsureStaticLevel(await resolveEnsureStaticConfig(tree, partialPrefetching)); +} +async function resolveEnsureStaticConfig(tree, partialPrefetching) { + let { config, filePath } = await resolveEnsureStaticConfigImpl(tree); + if (!partialPrefetching) { + // If Partial Prefetching is not enabled for this route, we only support + // a subset of `ensureStatic` values. + // (We error in `getAppPageStaticInfo` if `ensureStatic` is used without enabling + // Cache Components, so we don't have to assert that here) + switch(config){ + case 'auto': + { + // Default to the equivalent of Cache Components prefetching behavior. + config = 'prefetch'; + break; + } + case false: + case 'shell': + { + // Not meaningful in Cache Components without Partial Prefetching + const originalConfig = config; + config = 'prefetch'; + console.warn(`${formatEnsureStaticExport(originalConfig)} has no effect unless the route is using Partial Prefetching.` + `\n (from: ${filePath})`); + break; + } + case 'prefetch': + break; + case 'navigation': + break; + default: + config; + } + } + if (config === false) { + // `false` and "auto" are equivalent once resolved. + return 'auto'; + } else { + return config; + } +} +async function resolveEnsureStaticConfigImpl(tree) { + const { mod: layoutOrPageMod, filePath } = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$app$2d$dir$2d$module$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getLayoutOrPageModule"])(tree); + const config = getEnsureStaticConfigForModule(layoutOrPageMod); + const parentResult = { + config, + filePath: filePath ?? null + }; + // Walk the slots if any and validate that they don't have incompatible configs + // with each other. If compatible, pick the most constrained value from the slots. + let slotsResult = null; + let slotResultKey = null; + const { parallelRoutes } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$loader$2d$tree$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["parseLoaderTree"])(tree); + for(const parallelRouteKey in parallelRoutes){ + const parallelRoute = parallelRoutes[parallelRouteKey]; + const childResult = await resolveEnsureStaticConfigImpl(parallelRoute); + if (!slotsResult) { + slotsResult = childResult; + slotResultKey = parallelRouteKey; + } else { + // Check if the child is compatible with the current result for the slots. + switch(compareEnsureStatic(childResult.config, slotsResult.config)){ + case 2: + { + // 'auto' is compatible with anything, but if the current result is 'auto' and the new one isn't, + // we want to use the more specific result. + if (slotsResult.config === 'auto' && childResult.config !== 'auto') { + slotsResult = childResult; + slotResultKey = parallelRouteKey; + } + break; + } + case 4: + case 1: + case 3: + { + throw new Error(`Parallel slots cannot have incompatible \`ensureStatic\`.` + `\n ${formatParallelSlot(slotResultKey)}: ` + `\n ${formatEnsureStaticExport(slotsResult.config)}` + `\n (from: ${slotsResult.filePath})` + `\n` + `\n ${formatParallelSlot(parallelRouteKey)}: ` + `\n ${formatEnsureStaticExport(childResult.config)}` + `\n (from: ${childResult.filePath})` + `\n` + `\n Possible fixes:` + `\n - Remove one of the \`ensureStatic\` exports` + `\n - Change one of the \`ensureStatic\` exports to match the other`); + } + } + } + } + // Child segments can override the config from the parent with a more constrained value, + // but they cannot have a less constrained value. + if (!slotsResult) { + return parentResult; + } else { + const comparison = compareEnsureStatic(slotsResult.config, parentResult.config); + switch(comparison){ + case 2: + { + // 'auto' is compatible with anything, but if the parent result is 'auto' and the slots one isn't, + // we want to use the more constrained result. + if (parentResult.config === 'auto' && slotsResult.config !== 'auto') { + return slotsResult; + } else { + return parentResult; + } + } + case 3: + { + return slotsResult; + } + case 1: + case 4: + { + throw new Error((comparison === 1 ? `A child segment cannot override a parent segment with a less-constrained \`ensureStatic\`.` : `A child segment cannot override a parent segment with an incompatible \`ensureStatic\`.`) + `\n Parent has: ` + `\n ${formatEnsureStaticExport(parentResult.config)}` + `\n (from: ${parentResult.filePath})` + `\n Child has: ` + `\n ${formatEnsureStaticExport(slotsResult.config)}` + `\n (from: ${slotsResult.filePath})` + `\n` + `\n Possible fixes:` + `\n - Remove one of the \`ensureStatic\` exports` + `\n - Change one of the \`ensureStatic\` exports to match the other`); + } + } + } +} +function formatParallelSlot(slot) { + return slot === 'children' ? slot : `@${slot}`; +} +function formatEnsureStaticExport(config) { + return `export const ensureStatic = ${JSON.stringify(config)}`; +} +var Comparison = /*#__PURE__*/ function(Comparison) { + Comparison[Comparison["LessConstrained"] = 1] = "LessConstrained"; + Comparison[Comparison["Compatible"] = 2] = "Compatible"; + Comparison[Comparison["MoreConstrained"] = 3] = "MoreConstrained"; + Comparison[Comparison["Incompatible"] = 4] = "Incompatible"; + return Comparison; +}(Comparison || {}); +const ENSURE_STATIC_ORDER = [ + 'shell', + 'prefetch', + 'navigation' +]; +function compareEnsureStatic(left, right) { + // 'auto' is compatible with everything. + if (left === 'auto' || right === 'auto') { + return 2; + } + // `false` is compatible with false. + if (left === false && right === false) { + return 2; + } + // If only one of the values is `false` (we know it's not both), it's incompatible. + if (left === false || right === false) { + return 4; + } + const leftSort = ENSURE_STATIC_ORDER.indexOf(left); + const rightSort = ENSURE_STATIC_ORDER.indexOf(right); + return leftSort < rightSort ? 1 : leftSort === rightSort ? 2 : 3; +} +function getEnsureStaticConfigForModule(mod) { + return (mod ? mod.ensureStatic : undefined) ?? 'auto'; +} +}), +"[project]/node_modules/next/dist/esm/server/app-render/staged-rendering.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "RENDER_STAGE_ADVANCE_ORDER", + ()=>RENDER_STAGE_ADVANCE_ORDER, + "RenderStage", + ()=>RenderStage, + "StagedRenderingController", + ()=>StagedRenderingController, + "SyncIOMode", + ()=>SyncIOMode, + "getNextStage", + ()=>getNextStage, + "isAdvanceableRenderStage", + ()=>isAdvanceableRenderStage +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)"); +; +; +var RenderStage = /*#__PURE__*/ function(RenderStage) { + RenderStage[RenderStage["Before"] = 1] = "Before"; + // + RenderStage[RenderStage["ShellStatic"] = 10] = "ShellStatic"; + /** Discrimination-only stage: `prefetch()` in validation renders (static) */ RenderStage[RenderStage["PrefetchStatic_prefetchApi"] = 11] = "PrefetchStatic_prefetchApi"; + RenderStage[RenderStage["PrefetchStatic"] = 12] = "PrefetchStatic"; + RenderStage[RenderStage["NavigationStatic"] = 13] = "NavigationStatic"; + RenderStage[RenderStage["Static"] = 14] = "Static"; + // + RenderStage[RenderStage["ShellRuntime"] = 20] = "ShellRuntime"; + /** Discrimination-only stage: `prefetch()` in validation renders (runtime) */ RenderStage[RenderStage["PrefetchRuntime_prefetchApi"] = 21] = "PrefetchRuntime_prefetchApi"; + RenderStage[RenderStage["PrefetchRuntime"] = 22] = "PrefetchRuntime"; + RenderStage[RenderStage["NavigationRuntime"] = 23] = "NavigationRuntime"; + // + RenderStage[RenderStage["Dynamic"] = 30] = "Dynamic"; + RenderStage[RenderStage["Abandoned"] = 40] = "Abandoned"; + return RenderStage; +}({}); +const RENDER_STAGE_ADVANCE_ORDER = [ + 10, + 11, + 12, + 13, + 14, + 20, + 21, + 22, + 23, + 30 +]; +function getNextStage(stage) { + return RENDER_STAGE_ADVANCE_ORDER[RENDER_STAGE_ADVANCE_ORDER.indexOf(stage) + 1]; +} +function isAdvanceableRenderStage(stage) { + return 1 < stage && stage <= 30; +} +var SyncIOMode = /*#__PURE__*/ function(SyncIOMode) { + /** Sync IO does not error in any stage. */ SyncIOMode[SyncIOMode["Untracked"] = 1] = "Untracked"; + /** Before `partialPrefetching`: Sync IO errors in static stages, and is allowed otherwise. */ SyncIOMode[SyncIOMode["AllowedInRuntimeOrDynamic"] = 2] = "AllowedInRuntimeOrDynamic"; + /** After `partialPrefetching`: Sync IO errors in all stages other than dynamic. */ SyncIOMode[SyncIOMode["AllowedInDynamic"] = 3] = "AllowedInDynamic"; + return SyncIOMode; +}({}); +class StagedRenderingController { + constructor({ abortSignal, abandonController, syncIO, finalStage }){ + this.currentStage = 1; + this.syncInterruptReason = null; + this.triggers = createAdvanceableStageTriggers(); + this.abortSignal = abortSignal; + this.abandonController = abandonController; + this.syncIOMode = syncIO; + this.finalStage = finalStage; + if (abortSignal) { + abortSignal.addEventListener('abort', ()=>{ + // Reject all stage promises that haven't already been resolved. + // `cancelStageTrigger` is a noop if the trigger already resolved. + const { reason } = abortSignal; + for (const trigger of Object.values(this.triggers)){ + cancelStageTrigger(trigger, reason); + } + }, { + once: true + }); + } + if (abandonController) { + abandonController.signal.addEventListener('abort', ()=>{ + this.abandonRender(); + }, { + once: true + }); + } + } + /** + * Schedules a callback that will execute synchronously when the controller is advanced + * to `stage` or past it, before any promises for that stage are resolved. + * If the controller is already past `stage`, the callback is executed immediately. + * */ onStage(stage, callback) { + addSyncTriggerListener(this.triggers[stage], callback); + } + shouldTrackSyncInterrupt() { + const { syncIOMode, currentStage } = this; + switch(syncIOMode){ + case 1: + { + return false; + } + case 2: + { + // Legacy: track Sync IO only in static stages. + // Do not track it before the render, or in runtime/dynamic stages. + return currentStage > 1 && currentStage <= 14; + } + case 3: + { + // Track sync IO in all cacheable stages. + // This means all stages except: + // - before the render + // - in the dynamic stage + return currentStage > 1 && currentStage < 30; + } + } + } + /** Note: only call this if `shouldTrackSyncInterrupt()` returned true */ syncInterruptCurrentStageWithReason(reason) { + const { currentStage } = this; + if (currentStage === 1 || currentStage === 30 || currentStage === 40) { + // Not interruptible. Defensive noop. + return; + } + // If Sync IO occurs during an abandonable render, we trigger the abandon. + // The abandon listener will call abandonRender which advances through + // stages to let caches fill before marking as Abandoned. + if (this.abandonController) { + this.abandonController.abort(); + return; + } + if (this.abortSignal) { + // If this is an abortable render, we capture the interruption reason and stop advancing. + // We don't release any more promises. + // The caller is expected to abort the signal. + this.syncInterruptReason = reason; + this.currentStage = 40; + return; + } + // If we're in a non-abandonable & non-abortable render, + // we need to advance to the Dynamic stage and capture the interruption reason. + // (in dev, this will be the restarted render) + this.syncInterruptReason = reason; + this.advanceStage(30); + } + getSyncInterruptReason() { + return this.syncInterruptReason; + } + getStageEndTime(stage) { + return this.triggers[getNextStage(stage)].triggeredAt ?? Infinity; + } + abandonRender() { + // In staged rendering, only the initial render is abandonable. + // We can abandon the initial render if + // 1. We notice a cache miss, and need to wait for caches to fill + // 2. A sync IO error occurs, and the render should be interrupted + // (this might be a lazy intitialization of a module, + // so we still want to restart in this case and see if it still occurs) + // In either case, we'll be doing another render after this one, + // so we only want to unblock the next stage, not Dynamic, because + // unblocking the dynamic stage would likely lead to wasted (uncached) IO. + const { currentStage } = this; + if (currentStage === 1) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]("A render that hasn't started yet cannot be abandoned"); + } + if (currentStage === 30 || currentStage === 40) { + // We shouldn't ever trigger an abandon in these. Defensive noop. + return; + } + // Resolve all stages after the current one, up to runtime (excluding dynamic) + const nextStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(currentStage) + 1; + const dynamicStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(30); + for(let i = nextStageIx; i < dynamicStageIx; i++){ + this.resolveStage(RENDER_STAGE_ADVANCE_ORDER[i]); + } + this.currentStage = 40; + } + advanceStage(targetStage) { + if (this.finalStage !== null && targetStage > this.finalStage) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`Attempted to advance to stage ${RenderStage[targetStage]} but the render is limited to ${RenderStage[this.finalStage]}`); + } + const { currentStage } = this; + if (currentStage === 30 || currentStage === 40) { + // Terminal stages, nowhere left to advance. + return; + } + // If we're already at the target stage or beyond, do nothing. + if (targetStage <= currentStage) { + return; + } + this.currentStage = targetStage; + // Resolve all stages between the current stage and the target. + const nextStageIx = currentStage === 1 ? 0 : RENDER_STAGE_ADVANCE_ORDER.indexOf(currentStage) + 1; + const targetStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(targetStage); + for(let i = nextStageIx; i <= targetStageIx; i++){ + this.resolveStage(RENDER_STAGE_ADVANCE_ORDER[i]); + } + } + resolveStage(stage) { + fireStageTrigger(this.triggers[stage]); + } + getStagePromise(stage) { + return this.triggers[stage].promise; + } + waitForStage(stage) { + return this.getStagePromise(stage); + } + delayUntilStage(stage, displayName, resolvedValue) { + const stagePromise = this.getStagePromise(stage); + const promise = ("TURBOPACK compile-time truthy", 1) ? makeDevtoolsIOPromiseFromIOTrigger(stagePromise, displayName, resolvedValue) : "TURBOPACK unreachable"; + // Analogously to `makeDynamicHangingPromise`, we might reject this promise if the signal is invoked. + // (e.g. in the case where we don't want want the render to proceed to the dynamic stage and abort it). + // We shouldn't consider this an unhandled rejection, so we attach a noop catch handler here to suppress this warning. + if (this.abortSignal) { + promise.catch(ignoreReject); + } + return promise; + } +} +function createAdvanceableStageTriggers() { + const triggers = {}; + for (const stage of RENDER_STAGE_ADVANCE_ORDER){ + triggers[stage] = createStageTrigger(); + } + return triggers; +} +function ignoreReject() {} +// TODO(restart-on-cache-miss): the layering of `delayUntilStage`, +// `makeDevtoolsIOPromiseFromIOTrigger` and and `makeDevtoolsIOAwarePromise` +// is confusing, we should clean it up. +function makeDevtoolsIOPromiseFromIOTrigger(ioTrigger, displayName, resolvedValue) { + // If we create a `new Promise` and give it a displayName + // (with no userspace code above us in the stack) + // React Devtools will use it as the IO cause when determining "suspended by". + // In particular, it should shadow any inner IO that resolved/rejected the promise + // (in case of staged rendering, this will be the `setTimeout` that triggers the relevant stage) + const promise = new Promise((resolve, reject)=>{ + ioTrigger.then(resolve.bind(null, resolvedValue), reject); + }); + if (displayName !== undefined) { + // @ts-expect-error + promise.displayName = displayName; + } + return promise; +} +function addSyncTriggerListener(trigger, listener) { + if (trigger.state === 'pending') { + trigger._listeners.push(listener); + } else { + listener(); + } +} +function createStageTrigger() { + const { promise, resolve, reject } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + return { + state: 'pending', + triggeredAt: null, + promise, + _listeners: [], + _resolvePromise: resolve, + _rejectPromise: reject + }; +} +function fireStageTrigger(trigger) { + if (trigger.state !== 'pending') { + return; + } + trigger.state = 'triggered'; + trigger.triggeredAt = performance.now() + performance.timeOrigin; + try { + const { _listeners: listeners } = trigger; + for(let i = 0; i < listeners.length; i++){ + listeners[i](); + } + listeners.length = 0; + } finally{ + trigger._resolvePromise(); + } +} +function cancelStageTrigger(trigger, reason) { + if (trigger.state !== 'pending') { + return; + } + trigger.state = 'cancelled'; + // we didn't trigger, so don't save `triggeredAt`. + // We're not gonna fire the listeners, we may as well free them. + trigger._listeners.length = 0; + // Suppress unhandled rejection warnings for promises that no one is awaiting. + trigger.promise.catch(ignoreReject); + trigger._rejectPromise(reason); +} +}), +"[project]/node_modules/next/dist/esm/server/base-http/helpers.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * This file provides some helpers that should be used in conjunction with + * explicit environment checks. When combined with the environment checks, it + * will ensure that the correct typings are used as well as enable code + * elimination. + */ /** + * Type guard to determine if a request is a WebNextRequest. This does not + * actually check the type of the request, but rather the runtime environment. + * It's expected that when the runtime environment is the edge runtime, that any + * base request is a WebNextRequest. + */ __turbopack_context__.s([ + "isNodeNextRequest", + ()=>isNodeNextRequest, + "isNodeNextResponse", + ()=>isNodeNextResponse, + "isWebNextRequest", + ()=>isWebNextRequest, + "isWebNextResponse", + ()=>isWebNextResponse +]); +const isWebNextRequest = (req)=>("TURBOPACK compile-time value", "nodejs") === 'edge'; +const isWebNextResponse = (res)=>("TURBOPACK compile-time value", "nodejs") === 'edge'; +const isNodeNextRequest = (req)=>("TURBOPACK compile-time value", "nodejs") !== 'edge'; +const isNodeNextResponse = (res)=>("TURBOPACK compile-time value", "nodejs") !== 'edge'; +}), +"[project]/node_modules/next/dist/esm/server/base-http/index.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "BaseNextRequest", + ()=>BaseNextRequest, + "BaseNextResponse", + ()=>BaseNextResponse +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$redirect$2d$status$2d$code$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/redirect-status-code.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$get$2d$cookie$2d$parser$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/api-utils/get-cookie-parser.js [app-route] (ecmascript)"); +; +; +class BaseNextRequest { + constructor(method, url, body){ + this.method = method; + this.url = url; + this.body = body; + } + // Utils implemented using the abstract methods above + get cookies() { + if (this._cookies) return this._cookies; + return this._cookies = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$get$2d$cookie$2d$parser$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getCookieParser"])(this.headers)(); + } +} +class BaseNextResponse { + constructor(destination){ + this.destination = destination; + } + // Utils implemented using the abstract methods above + redirect(destination, statusCode) { + this.setHeader('Location', destination); + this.statusCode = statusCode; + // Since IE11 doesn't support the 308 header add backwards + // compatibility using refresh header + if (statusCode === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$redirect$2d$status$2d$code$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RedirectStatusCode"].PermanentRedirect) { + this.setHeader('Refresh', `0;url=${destination}`); + } + return this; + } +} +}), +"[project]/node_modules/next/dist/esm/server/base-http/node.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "NodeNextRequest", + ()=>NodeNextRequest, + "NodeNextResponse", + ()=>NodeNextResponse +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/api-utils/index.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/request-meta.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/base-http/index.js [app-route] (ecmascript)"); +; +; +; +let prop; +class NodeNextRequest extends __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["BaseNextRequest"] { + static #_ = prop = _NEXT_REQUEST_META = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_REQUEST_META"]; + constructor(_req){ + var _this__req; + super(_req.method.toUpperCase(), _req.url, _req), this._req = _req, this.headers = this._req.headers, this.fetchMetrics = (_this__req = this._req) == null ? void 0 : _this__req.fetchMetrics, this[_NEXT_REQUEST_META] = this._req[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_REQUEST_META"]] || {}, this.streaming = false; + } + get originalRequest() { + // Need to mimic these changes to the original req object for places where we use it: + // render.tsx, api/ssg requests + this._req[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_REQUEST_META"]] = this[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_REQUEST_META"]]; + this._req.url = this.url; + this._req.cookies = this.cookies; + return this._req; + } + set originalRequest(value) { + this._req = value; + } + /** + * Returns the request body as a Web Readable Stream. The body here can only + * be read once as the body will start flowing as soon as the data handler + * is attached. + * + * @internal + */ stream() { + if (this.streaming) { + throw new Error('Invariant: NodeNextRequest.stream() can only be called once'); + } + this.streaming = true; + return new ReadableStream({ + start: (controller)=>{ + this._req.on('data', (chunk)=>{ + controller.enqueue(new Uint8Array(chunk)); + }); + this._req.on('end', ()=>{ + controller.close(); + }); + this._req.on('error', (err)=>{ + controller.error(err); + }); + } + }); + } +} +class NodeNextResponse extends __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["BaseNextResponse"] { + get originalResponse() { + if (__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SYMBOL_CLEARED_COOKIES"] in this) { + this._res[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SYMBOL_CLEARED_COOKIES"]] = this[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SYMBOL_CLEARED_COOKIES"]]; + } + return this._res; + } + constructor(_res){ + super(_res), this._res = _res, this.textBody = undefined; + } + get sent() { + return this._res.finished || this._res.headersSent; + } + get statusCode() { + return this._res.statusCode; + } + set statusCode(value) { + this._res.statusCode = value; + } + get statusMessage() { + return this._res.statusMessage; + } + set statusMessage(value) { + this._res.statusMessage = value; + } + setHeader(name, value) { + this._res.setHeader(name, value); + return this; + } + removeHeader(name) { + this._res.removeHeader(name); + return this; + } + getHeaderValues(name) { + const values = this._res.getHeader(name); + if (values === undefined) return undefined; + return (Array.isArray(values) ? values : [ + values + ]).map((value)=>value.toString()); + } + hasHeader(name) { + return this._res.hasHeader(name); + } + getHeader(name) { + const values = this.getHeaderValues(name); + return Array.isArray(values) ? values.join(',') : undefined; + } + getHeaders() { + return this._res.getHeaders(); + } + appendHeader(name, value) { + const currentValues = this.getHeaderValues(name) ?? []; + if (!currentValues.includes(value)) { + this._res.setHeader(name, [ + ...currentValues, + value + ]); + } + return this; + } + body(value) { + this.textBody = value; + return this; + } + send() { + this._res.end(this.textBody); + } + onClose(callback) { + this.originalResponse.on('close', callback); + } +} +var _NEXT_REQUEST_META; +}), +"[project]/node_modules/next/dist/esm/server/dynamic-rendering-utils.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ClientHookDynamicError", + ()=>ClientHookDynamicError, + "RENDER_STAGES_BY_DATA_KIND", + ()=>RENDER_STAGES_BY_DATA_KIND, + "applyOwnerStack", + ()=>applyOwnerStack, + "createPrerenderDataTracking", + ()=>createPrerenderDataTracking, + "finishPrerenderDataTracking", + ()=>finishPrerenderDataTracking, + "isClientHookDynamicError", + ()=>isClientHookDynamicError, + "isHangingPromiseRejectionError", + ()=>isHangingPromiseRejectionError, + "makeClientHookHangingPromise", + ()=>makeClientHookHangingPromise, + "makeDevtoolsIOAwarePromise", + ()=>makeDevtoolsIOAwarePromise, + "makeDynamicHangingPromise", + ()=>makeDynamicHangingPromise, + "makeFallbackParamsHangingPromise", + ()=>makeFallbackParamsHangingPromise, + "makePrefetchHangingPromise", + ()=>makePrefetchHangingPromise, + "makePromiseFromTrigger", + ()=>makePromiseFromTrigger, + "makeSessionDataHangingPromise", + ()=>makeSessionDataHangingPromise, + "makeURLDataHangingPromise", + ()=>makeURLDataHangingPromise, + "makeUnknownRuntimeDataHangingPromise", + ()=>makeUnknownRuntimeDataHangingPromise, + "makeUntrackedHangingPromise", + ()=>makeUntrackedHangingPromise, + "trackFallbackParamsAccessed", + ()=>trackFallbackParamsAccessed, + "trackIncompatibleShellContent", + ()=>trackIncompatibleShellContent, + "trackPromiseUsed", + ()=>trackPromiseUsed, + "trackURLDataAccessed", + ()=>trackURLDataAccessed +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$segment$2d$config$2f$ensure$2d$static$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/segment-config/ensure-static.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/staged-rendering.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$runtime$2d$reacts$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$runtime$2d$reacts$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/runtime-reacts.external.js [external] (next/dist/server/runtime-reacts.external.js, cjs)"); +; +; +; +; +; +; +; +function isHangingPromiseRejectionError(err) { + if (typeof err !== 'object' || err === null || !('digest' in err)) { + return false; + } + return err.digest === HANGING_PROMISE_REJECTION; +} +const HANGING_PROMISE_REJECTION = 'HANGING_PROMISE_REJECTION'; +class HangingPromiseRejectionError extends Error { + constructor(route, expression){ + super(`During prerendering, ${expression} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${expression} to a different context by using \`setTimeout\`, \`after\`, or similar functions you may observe this error and you should handle it in that context. This occurred at route "${route}".`), this.route = route, this.expression = expression, this.digest = HANGING_PROMISE_REJECTION; + } +} +const CLIENT_HOOK_DYNAMIC = 'CLIENT_HOOK_DYNAMIC'; +class ClientHookDynamicError extends Error { + constructor(route, expression){ + super(`Route "${route}": Next.js encountered URL data \`${expression}\` in a Client Component outside of \`\`.\n\n` + `This blocks prerendering because the value is only available at runtime.\n\n` + `Ways to fix this:\n` + ` - [stream] Wrap the component in \`\` so the hook value streams in after prerendering\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-client-hook`), this.digest = CLIENT_HOOK_DYNAMIC; + } +} +function isClientHookDynamicError(err) { + if (typeof err !== 'object' || err === null || !('digest' in err)) { + return false; + } + return err.digest === CLIENT_HOOK_DYNAMIC; +} +const abortListenersBySignal = new WeakMap(); +function makeDynamicHangingPromise(signal, route, expression) { + return makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); +} +function makeUntrackedHangingPromise(signal, route, expression) { + return makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); +} +function makeSessionDataHangingPromise(signal, route, expression, workUnitStore) { + const promise = makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); + return trackPromiseUsed(promise, trackSessionDataAccessed.bind(null, workUnitStore, expression)); +} +function makeURLDataHangingPromise(signal, route, expression, workUnitStore) { + const promise = makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); + if (workUnitStore === null) { + return promise; + } + return trackPromiseUsed(promise, trackURLDataAccessed.bind(null, workUnitStore, expression)); +} +function makeUnknownRuntimeDataHangingPromise(signal, route, expression, workUnitStore) { + // We don't know if this is session or URL data, i.e. if it should affect the shell + // or only the prefetch. Track it conservatively as affecting both. + return makeSessionDataHangingPromise(signal, route, expression, workUnitStore); +} +function makePrefetchHangingPromise(signal, route, expression) { + return makeUntrackedHangingPromise(signal, route, expression); +} +function makeFallbackParamsHangingPromise(signal, route, expression, workUnitStore) { + const promise = makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); + if (workUnitStore === null) { + return promise; + } + return trackPromiseUsed(promise, trackFallbackParamsAccessed.bind(null, workUnitStore, expression)); +} +function createPrerenderDataTracking() { + return { + runtimeDataAccessed: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(), + shouldAttemptStaticShell: true, + shouldAttemptStaticPrefetch: true + }; +} +function finishPrerenderDataTracking(prerenderDataTracking) { + // If a runtime data access already resolved this promise, this is a no-op. + prerenderDataTracking.runtimeDataAccessed.resolve(false); +} +/** + * Records on a static prerender store that the render accessed a data source + * which would have resolved in a runtime shell (or runtime prefetch). + * No-op for all other store types. + * + * Prefer `makeRuntimeHangingPromise`. Use this function only when implementing + * similar tracking and that one is not enough. + */ function trackSessionDataAccessed(workUnitStore, expression) { + trackRuntimeDataAccessed(workUnitStore, 1, expression); +} +function trackURLDataAccessed(workUnitStore, expression) { + trackRuntimeDataAccessed(workUnitStore, 2, expression); +} +function trackFallbackParamsAccessed(workUnitStore, expression) { + trackRuntimeDataAccessed(workUnitStore, 3, expression); +} +function trackRuntimeDataAccessed(workUnitStore, dataKind, expression) { + switch(workUnitStore.type){ + case 'prerender': + { + const { prerenderDataTracking, stagedRendering } = workUnitStore; + if (!prerenderDataTracking || !stagedRendering) { + return; + } + const { currentStage } = stagedRendering; + if (currentStage === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Before) { + console.error(new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('Unexpected trackRuntimeDataAccessed in the Before stage.')); + return; + } + if (currentStage >= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].NavigationStatic) { + // Ignore any accesses that happen after `navigation()` resolves. + // The purpose of this tracking is to judge whether a runtime prefetch + // would give us a more complete result than a static one. + // But `navigation()` wouldn't have resolved in a runtime prefetch, + // so e.g. `await navigation(); await cookies()` wouldn't have more content + // in those, and we shouldn't count it. + return; + } + const ensureStaticLevel = workUnitStore.ensureStaticLevel ?? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$segment$2d$config$2f$ensure$2d$static$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["EnsureStaticLevel"].None; + // NOTE: In general, we keep hints in sync with `needsRuntimeRequest`, but they + // don't have to always match. The client re-uses hints for the entire route, + // while `needsRuntimeRequest` can vary across individual prerendered param values + // (e.g. if cookies are accessed depending on a param value). + // Hints can also become outdated if a route only starts using runtime data + // after a revalidation, so we have to expect this and be resilient to it. + // Also see the upgradeable fallback params case below, which deliberately + // puts them out of sync. + switch(dataKind){ + case 1: + { + // Potentially deopt both the shell and the prefetch, + // because if the shell accessed runtime data, so does the prefetch. + // However, if we're already past the shell stage, the shell is not affected. + // (which makes e.g. `await prefetch(); await cookies()` only affect the prefetch) + let firstAffectedStage = null; + if (currentStage <= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].ShellStatic && // Only track if we're not forcing the shell to be static. + ensureStaticLevel < __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$segment$2d$config$2f$ensure$2d$static$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["EnsureStaticLevel"].Shell) { + prerenderDataTracking.shouldAttemptStaticShell = false; + firstAffectedStage ??= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].ShellStatic; + logRuntimeDeopt == null ? void 0 : logRuntimeDeopt(expression, 'shell'); + } + if (currentStage <= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchStatic && // Only track if we're not forcing the prefetch to be static. + ensureStaticLevel < __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$segment$2d$config$2f$ensure$2d$static$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["EnsureStaticLevel"].Prefetch) { + prerenderDataTracking.shouldAttemptStaticPrefetch = false; + // NOTE: if the shell is affected, don't override it. + firstAffectedStage ??= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchStatic; + logRuntimeDeopt == null ? void 0 : logRuntimeDeopt(expression, 'prefetch'); + } + if (firstAffectedStage !== null) { + markRuntimeDataAccessWhenStageReached(prerenderDataTracking, stagedRendering, firstAffectedStage); + } + break; + } + case 3: + { + if (workUnitStore.isFallbackUpgradeable) { + // An fallback-param access is transient when the route is + // fallback-upgradeable (i.e. ISR later produces the concrete prerender a + // static prefetch would hit) so it does not indicate the need for a runtime + // request and thus does not affect the static hints. + // + // If runtime prefetches are not disallowed by `ensureStatic`, then we still + // set `runtimeDataAccessed` (while keeping the hints static). This means that + // if the concrete prerender isn't ready yet and we served the fallback, then + // the client knows it can use a *runtime* prefetch for speculative links -- + // a runtime prefetch can provide the same content (or more) as the concrete + // prerender would. + if (ensureStaticLevel < __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$segment$2d$config$2f$ensure$2d$static$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["EnsureStaticLevel"].Prefetch) { + markRuntimeDataAccessWhenStageReached(prerenderDataTracking, stagedRendering, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchStatic); + logRuntimeUpgradeableFallback == null ? void 0 : logRuntimeUpgradeableFallback(); + } + break; + } + // not an upgradeable fallback param access, so we treat it as URL data. + // intentional fallthrough + } + case 2: + { + // Only deopt the prefetch, not the shell, which cannot access URL data anyway. + if (currentStage <= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchStatic && ensureStaticLevel < __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$segment$2d$config$2f$ensure$2d$static$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["EnsureStaticLevel"].Prefetch) { + prerenderDataTracking.shouldAttemptStaticPrefetch = false; + logRuntimeDeopt == null ? void 0 : logRuntimeDeopt(expression, 'prefetch'); + markRuntimeDataAccessWhenStageReached(prerenderDataTracking, stagedRendering, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchStatic); + } + break; + } + } + break; + } + case 'prerender-client': + case 'prerender-legacy': + case 'prerender-runtime': + case 'validation-client': + case 'request': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } +} +/** + * Tracks a runtime data access on the `runtimeDataAccessed` promise, + * but with a delay until `targetStage`. + * + * When we encounter a URL data access like `await params`, we need to mark the + * *prefetch* as needing runtime data, but the *shell* should remain unaffected + * (because it cannot access params anyway). + * + * However, the shell and the prefetch share one `runtimeDataAccessed` promise, + * and it needs to be accurately rewindable by the client + * In other words, we need to make sure that it reads as `false` when rewound + * to a shell, but as `true` in the final response (the prefetch). + * + * This means that if the `await params` is encountered during the shell stage, we + * cannot resolve `runtimeDataAccessed` immediately. + * Instead, we delay the resolution until the PrefetchStatic stage, so the promise + * will remain unresolved when rewound to the shell stage (which reads as `false`). + */ function markRuntimeDataAccessWhenStageReached(prerenderDataTracking, stageController, targetStage) { + const { runtimeDataAccessed } = prerenderDataTracking; + // NOTE: If we're already in or past the target stage, we can avoid allocating a closure, + // because `onStage` would've executed the callback immediately anyway. + if (stageController.currentStage >= targetStage) { + runtimeDataAccessed.resolve(true); + } else { + stageController.onStage(targetStage, runtimeDataAccessed.resolve.bind(null, true)); + } +} +const logRuntimeDeopt = process.env.NEXT_PRIVATE_DEBUG_RUNTIME_DATA ? (expression, kind)=>{ + const { route } = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + console.log(`Route '${route}': deopting to a runtime ${kind} because it used ${expression}`); +} : undefined; +const logRuntimeUpgradeableFallback = process.env.NEXT_PRIVATE_DEBUG_RUNTIME_DATA ? ()=>{ + const { route } = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + console.log(`Route '${route}': marking upgradeable fallback as runtime prefetchable`); +} : undefined; +function trackIncompatibleShellContent(workUnitStore, reason) { + const { stagedRendering } = workUnitStore; + if (!stagedRendering) { + return; + } + // TODO(app-shells): optimize this to only consider stages that are relevant for validation. + // We should only track incompatible content when it can affect them. + // For now, we simply exclude everything that happens in the dynamic stage. + // (Note that we also need to account for cache misses that move things to a + // different stage -- those should also preemptively set `hasIncompatibleShellContent` + // because there's a chance that a render with warm caches would set it) + const { currentStage } = stagedRendering; + if (currentStage === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic || currentStage === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Abandoned) { + return; + } + if (process.env.NEXT_PRIVATE_DEBUG_VALIDATION) { + const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + console.log(`Route ${workStore.route}: Incompatible shell content: ${reason}`); + } + workUnitStore.hasIncompatibleShellContent = true; +} +function makeClientHookHangingPromise(signal, error) { + return makeHangingPromiseWithError(signal, error); +} +function makeHangingPromiseWithError(signal, error) { + if (signal.aborted) { + return Promise.reject(error); + } else { + const hangingPromise = new Promise((_, reject)=>{ + const boundRejection = reject.bind(null, error); + let currentListeners = abortListenersBySignal.get(signal); + if (currentListeners) { + currentListeners.push(boundRejection); + } else { + const listeners = [ + boundRejection + ]; + abortListenersBySignal.set(signal, listeners); + signal.addEventListener('abort', ()=>{ + for(let i = 0; i < listeners.length; i++){ + listeners[i](); + } + }, { + once: true + }); + } + }); + // We are fine if no one actually awaits this promise. We shouldn't consider this an unhandled rejection so + // we attach a noop catch handler here to suppress this warning. If you actually await somewhere or construct + // your own promise out of it you'll need to ensure you handle the error when it rejects. + hangingPromise.catch(ignoreReject); + return hangingPromise; + } +} +function ignoreReject() {} +function makePromiseFromTrigger(trigger, value) { + const promise = trigger.then(()=>value); + promise.catch(ignoreReject); + return promise; +} +function makeDevtoolsIOAwarePromise(underlying, requestStore, stage) { + if (requestStore.stagedRendering) { + // We resolve each stage in a timeout, so React DevTools will pick this up as IO. + return requestStore.stagedRendering.delayUntilStage(stage, undefined, underlying); + } + // in React DevTools if we resolve in a setTimeout we will observe + // the promise resolution as something that can suspend a boundary or root. + return new Promise((resolve)=>{ + // Must use setTimeout to be considered IO React DevTools. setImmediate will not work. + setTimeout(()=>{ + resolve(underlying); + }, 0); + }); +} +function trackPromiseUsed(promise, onUse) { + // We can instrument `.then()/.catch()/.finally()` in one go by using a Promise subclass + // that implements a custom `.then()`, because `catch` and `finally` delegate to it. + // + // Alternative implementation ideas that were tried and rejected: + // + // 1. Patching the methods directly via `promise.then = (..args) => { ... }`: + // doesn't work, because Node does not call the monkeypatched methods for native `await`: + // > Native Promise [...]: The promise is directly used and awaited natively, without calling `then()`. + // > https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await#description + // + // 2. Wrapping in a proxy that returns a custom `then/catch/finally`: + // breaks async stacks in React's IO tracking (stack becomes `Promise.then`) + return TrackedPromise.from(promise, onUse); +} +class TrackedPromise extends Promise { + #onUse; + // We don't need derived promises to also be a TrackedPromise. + // We only care about the first level of `.then()`. + static get [Symbol.species]() { + return Promise; + } + static from(promise, onUse) { + // Whenever the promise we're tracking resolves/rejects, we should follow. + const tracked = new TrackedPromise(promise.then.bind(promise)); + tracked.#onUse = onUse; + // Hanging promises catch rejections when created. Tracked promises are generally derived + // from promises that may hang & reject, so we need to do the same. + // However, we have to bypass the tracking we do in `TrackedPromise.then`. + // (we're using `then` directly, because `catch` ends up delegating `TrackedPromise.then`) + Promise.prototype.then.call(tracked, undefined, ignoreReject); + return tracked; + } + then(onFulfilled, onRejected) { + const onUse = this.#onUse; + if (onUse) { + try { + onUse(); + } catch (err) { + // We don't want to break the method even if our tracking errored. + console.error(err); + } + } + return Promise.prototype.then.call(this, onFulfilled, onRejected); + } + constructor(...args){ + super(...args), this.#onUse = null; + } +} +const RENDER_STAGES_BY_DATA_KIND = { + sessionData: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].ShellRuntime, + /** + * Statically-prerenderable URL data, like static `params`. + * It may need to be pushed to a runtime stage in a runtime prerender, + * but it's semantically distinct from `runtimeUrlData` like `searchParams`, + * which is always excluded from static prerenders. + * */ staticUrlData: { + /** + * From that app's point of view, `prefetch()` is semantically the same as + * `staticUrlData`, because it does not resolve in a shell but resolves in + * a prefetch (even a static one). + * We handle it separately to provide a specialized error in validation renders. + */ prefetchApi: { + static: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchStatic_prefetchApi, + runtime: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchRuntime_prefetchApi + }, + static: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchStatic, + runtime: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchRuntime + }, + /** + * URL data that is never statically-prerenderable, like static `searchParams`. + * */ runtimeUrlData: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchRuntime +}; +function applyOwnerStack(error) { + if ("TURBOPACK compile-time truthy", 1) { + var _getClientReact_captureOwnerStack, _getClientReact, _getServerReact_captureOwnerStack, _getServerReact; + let ownerStack; + const workUnitStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workUnitAsyncStorage"].getStore(); + // captureOwnerStack() returns the owner stack for the current React + // rendering context. Inside a cache scope this only includes the inner + // component tree. The outer owner stack (captured before entering the + // cache boundary in use-cache-wrapper.ts) is stored on the cache store. + // We concatenate both to get the full component tree. + const innerOwnerStack = ((_getClientReact = (0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$runtime$2d$reacts$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$runtime$2d$reacts$2e$external$2e$js$2c$__cjs$29$__["getClientReact"])()) == null ? void 0 : (_getClientReact_captureOwnerStack = _getClientReact.captureOwnerStack) == null ? void 0 : _getClientReact_captureOwnerStack.call(_getClientReact)) ?? ((_getServerReact = (0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$runtime$2d$reacts$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$runtime$2d$reacts$2e$external$2e$js$2c$__cjs$29$__["getServerReact"])()) == null ? void 0 : (_getServerReact_captureOwnerStack = _getServerReact.captureOwnerStack) == null ? void 0 : _getServerReact_captureOwnerStack.call(_getServerReact)); + switch(workUnitStore == null ? void 0 : workUnitStore.type){ + case 'cache': + case 'private-cache': + ownerStack = (innerOwnerStack || '') + (workUnitStore.outerOwnerStack || '') || undefined; + break; + case 'unstable-cache': + case 'request': + case 'prerender': + case 'prerender-legacy': + case 'prerender-runtime': + case 'prerender-client': + case 'validation-client': + case 'build-time-generator': + case undefined: + ownerStack = innerOwnerStack; + break; + default: + workUnitStore; + } + if (ownerStack) { + let stack = ownerStack; + if (error.stack) { + const frames = []; + for (const frame of error.stack.split('\n').slice(1)){ + if (frame.includes('react_stack_bottom_frame')) { + break; + } + frames.push(frame); + } + stack = '\n' + frames.join('\n') + stack; + } + error.stack = error.name + ': ' + error.message + stack; + } + } + return error; +} +}), +"[project]/node_modules/next/dist/esm/server/instrumentation/utils.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getRevalidateReason", + ()=>getRevalidateReason +]); +function getRevalidateReason(params) { + if (params.isOnDemandRevalidate) { + return 'on-demand'; + } + if (params.isStaticGeneration) { + return 'stale'; + } + return undefined; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/app-dir-module.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getComponentTypeModule", + ()=>getComponentTypeModule, + "getLayoutOrPageModule", + ()=>getLayoutOrPageModule +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/segment.js [app-route] (ecmascript)"); +; +async function getLayoutOrPageModule(loaderTree) { + const { layout, page, defaultPage } = loaderTree[2]; + const isLayout = typeof layout !== 'undefined'; + const isPage = typeof page !== 'undefined'; + const isDefaultPage = typeof defaultPage !== 'undefined' && loaderTree[0] === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["DEFAULT_SEGMENT_KEY"]; + let mod = undefined; + let modType = undefined; + let filePath = undefined; + if (isLayout) { + mod = await layout[0](); + modType = 'layout'; + filePath = layout[1]; + } else if (isPage) { + mod = await page[0](); + modType = 'page'; + filePath = page[1]; + } else if (isDefaultPage) { + mod = await defaultPage[0](); + modType = 'page'; + filePath = defaultPage[1]; + } + return { + mod, + modType, + filePath + }; +} +async function getComponentTypeModule(loaderTree, moduleType) { + const { [moduleType]: module } = loaderTree[2]; + if (typeof module !== 'undefined') { + return await module[0](); + } + return undefined; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/cache-control.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getCacheControlHeader", + ()=>getCacheControlHeader +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)"); +; +function getCacheControlHeader({ revalidate, expire }) { + const swrHeader = typeof revalidate === 'number' && expire !== undefined && revalidate < expire ? `, stale-while-revalidate=${expire - revalidate}` : ''; + if (revalidate === 0) { + return 'private, no-cache, no-store, max-age=0, must-revalidate'; + } else if (typeof revalidate === 'number') { + return `s-maxage=${revalidate}${swrHeader}`; + } + return `s-maxage=${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CACHE_ONE_YEAR_SECONDS"]}${swrHeader}`; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/clone-response.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "cloneResponse", + ()=>cloneResponse +]); +const noop = ()=>{}; +let registry; +if (globalThis.FinalizationRegistry) { + registry = new FinalizationRegistry((weakRef)=>{ + const stream = weakRef.deref(); + if (stream && !stream.locked) { + stream.cancel('Response object has been garbage collected').then(noop); + } + }); +} +function cloneResponse(original) { + // If the response has no body, then we can just return the original response + // twice because it's immutable. + if (!original.body) { + return [ + original, + original + ]; + } + const [body1, body2] = original.body.tee(); + const cloned1 = new Response(body1, { + status: original.status, + statusText: original.statusText, + headers: original.headers + }); + Object.defineProperty(cloned1, 'url', { + value: original.url, + // How the original response.url behaves + configurable: true, + enumerable: true, + writable: false + }); + const cloned2 = new Response(body2, { + status: original.status, + statusText: original.statusText, + headers: original.headers + }); + Object.defineProperty(cloned2, 'url', { + value: original.url, + // How the original response.url behaves + configurable: true, + enumerable: true, + writable: false + }); + // The Fetch Standard allows users to skip consuming the response body by + // relying on garbage collection to release connection resources. + // https://github.com/nodejs/undici?tab=readme-ov-file#garbage-collection + // + // To cancel the stream you then need to cancel both resulting branches. + // Teeing a stream will generally lock it for the duration, preventing other + // readers from locking it. + // https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/tee + if (registry) { + if (cloned1.body) { + registry.register(cloned1, new WeakRef(cloned1.body)); + } + if (cloned2.body) { + registry.register(cloned2, new WeakRef(cloned2.body)); + } + } + return [ + cloned1, + cloned2 + ]; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/dedupe-fetch.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "createDedupeFetch", + ()=>createDedupeFetch +]); +/** + * Based on https://github.com/facebook/react/blob/d4e78c42a94be027b4dc7ed2659a5fddfbf9bd4e/packages/react/src/ReactFetch.js + */ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/clone-response.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +; +; +; +const simpleCacheKey = '["GET",[],null,"follow",null,null,null,null]' // generateCacheKey(new Request('https://blank')); +; +// Headers that should not affect deduplication +// traceparent and tracestate are used for distributed tracing and should not affect cache keys +const headersToExcludeInCacheKey = new Set([ + 'traceparent', + 'tracestate' +]); +function generateCacheKey(request) { + // We pick the fields that goes into the key used to dedupe requests. + // We don't include the `cache` field, because we end up using whatever + // caching resulted from the first request. + // Notably we currently don't consider non-standard (or future) options. + // This might not be safe. TODO: warn for non-standard extensions differing. + // IF YOU CHANGE THIS UPDATE THE simpleCacheKey ABOVE. + const filteredHeaders = Array.from(request.headers.entries()).filter(([key])=>!headersToExcludeInCacheKey.has(key.toLowerCase())); + return JSON.stringify([ + request.method, + filteredHeaders, + request.mode, + request.redirect, + request.credentials, + request.referrer, + request.referrerPolicy, + request.integrity + ]); +} +function createDedupeFetch(originalFetch) { + const getCacheEntries = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["cache"]((url)=>[]); + return function dedupeFetch(resource, options) { + if (options && options.signal) { + // If we're passed a signal, then we assume that + // someone else controls the lifetime of this object and opts out of + // caching. It's effectively the opt-out mechanism. + // Ideally we should be able to check this on the Request but + // it always gets initialized with its own signal so we don't + // know if it's supposed to override - unless we also override the + // Request constructor. + return originalFetch(resource, options); + } + // Normalize the Request + let url; + let cacheKey; + if (typeof resource === 'string' && !options) { + // Fast path. + cacheKey = simpleCacheKey; + url = resource; + } else { + // Normalize the request. + // if resource is not a string or a URL (its an instance of Request) + // then do not instantiate a new Request but instead + // reuse the request as to not disturb the body in the event it's a ReadableStream. + const request = typeof resource === 'string' || resource instanceof URL ? new Request(resource, options) : resource; + if (request.method !== 'GET' && request.method !== 'HEAD' || request.keepalive) { + // We currently don't dedupe requests that might have side-effects. Those + // have to be explicitly cached. We assume that the request doesn't have a + // body if it's GET or HEAD. + // keepalive gets treated the same as if you passed a custom cache signal. + return originalFetch(resource, options); + } + cacheKey = generateCacheKey(request); + url = request.url; + } + const cacheEntries = getCacheEntries(url); + for(let i = 0, j = cacheEntries.length; i < j; i += 1){ + const [key, promise] = cacheEntries[i]; + if (key === cacheKey) { + return promise.then(()=>{ + const response = cacheEntries[i][2]; + if (!response) throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('No cached response'); + // We're cloning the response using this utility because there exists + // a bug in the undici library around response cloning. See the + // following pull request for more details: + // https://github.com/vercel/next.js/pull/73274 + const [cloned1, cloned2] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["cloneResponse"])(response); + cacheEntries[i][2] = cloned2; + return cloned1; + }); + } + } + // We pass the original arguments here in case normalizing the Request + // doesn't include all the options in this environment. + const promise = originalFetch(resource, options); + const entry = [ + cacheKey, + promise, + null + ]; + cacheEntries.push(entry); + return promise.then((response)=>{ + // We're cloning the response using this utility because there exists + // a bug in the undici library around response cloning. See the + // following pull request for more details: + // https://github.com/vercel/next.js/pull/73274 + const [cloned1, cloned2] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["cloneResponse"])(response); + entry[2] = cloned2; + return cloned1; + }); + }; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/encode-header-safe.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "encodeHeaderSafe", + ()=>encodeHeaderSafe +]); +/** + * Percent-encode every character other than horizontal tab and printable ASCII + * so a value can be safely serialized into an HTTP header. + * + * Node's `validateHeaderValue` and `fetch`'s ByteString conversion accept + * different character ranges. Restricting values to `\t\x20-\x7e` produces a + * conservative representation that both can serialize. Characters outside a + * transport's accepted range (Hebrew, Arabic, Chinese, emoji, …) would + * otherwise throw `ERR_INVALID_CHAR` or a `TypeError`, which crashes ISR or + * fails a cache read on every affected request. + * + * Cache tags are encoded at the public boundaries — tag construction + * (`getImplicitTags`, `validateTags`) and invalidation input + * (`revalidatePath`, `revalidateTag`, `updateTag`) — so storage, comparison, + * and the wire all see the same canonical form. + * + * The class is narrower than either transport accepts. Everything inside it + * passes through byte-for-byte, including `,`, `/`, `%`, `[`, `]`, `_`, `-` and + * `\t`, which preserves the comma-separated header format and the + * dynamic-segment markers in derived tags (`_N_T_/[slug]/page`). + * + * Properties: + * - Fast-path: input that already fits the class is returned unchanged. This + * makes the encoder idempotent on already-encoded `%xx` sequences. + * - Matches *runs* of out-of-class code units so surrogate pairs (e.g. an + * emoji) are handed to `encodeURIComponent` as a complete code point — a + * per-code-unit regex would split the pair and throw `URIError`. + */ const OUT_OF_CLASS_CHAR = /[^\t\x20-\x7e]/; +const OUT_OF_CLASS_RUN = /[^\t\x20-\x7e]+/g; +function encodeHeaderSafe(value) { + return OUT_OF_CLASS_CHAR.test(value) ? value.replace(OUT_OF_CLASS_RUN, (run)=>encodeURIComponent(run)) : value; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/lru-cache.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "LRUCache", + ()=>LRUCache +]); +/** + * Node in the doubly-linked list used for LRU tracking. + * Each node represents a cache entry with bidirectional pointers. + */ class LRUNode { + constructor(key, data, size){ + this.prev = null; + this.next = null; + this.key = key; + this.data = data; + this.size = size; + } +} +/** + * Sentinel node used for head/tail boundaries. + * These nodes don't contain actual cache data but simplify list operations. + */ class SentinelNode { + constructor(){ + this.prev = null; + this.next = null; + } +} +class LRUCache { + constructor(maxSize, calculateSize, onEvict){ + this.cache = new Map(); + this.totalSize = 0; + this.maxSize = maxSize; + this.calculateSize = calculateSize; + this.onEvict = onEvict; + // Create sentinel nodes to simplify doubly-linked list operations + // HEAD <-> TAIL (empty list) + this.head = new SentinelNode(); + this.tail = new SentinelNode(); + this.head.next = this.tail; + this.tail.prev = this.head; + } + /** + * Adds a node immediately after the head (marks as most recently used). + * Used when inserting new items or when an item is accessed. + * PRECONDITION: node must be disconnected (prev/next should be null) + */ addToHead(node) { + node.prev = this.head; + node.next = this.head.next; + // head.next is always non-null (points to tail or another node) + this.head.next.prev = node; + this.head.next = node; + } + /** + * Removes a node from its current position in the doubly-linked list. + * Updates the prev/next pointers of adjacent nodes to maintain list integrity. + * PRECONDITION: node must be connected (prev/next are non-null) + */ removeNode(node) { + // Connected nodes always have non-null prev/next + node.prev.next = node.next; + node.next.prev = node.prev; + } + /** + * Moves an existing node to the head position (marks as most recently used). + * This is the core LRU operation - accessed items become most recent. + */ moveToHead(node) { + this.removeNode(node); + this.addToHead(node); + } + /** + * Removes and returns the least recently used node (the one before tail). + * This is called during eviction when the cache exceeds capacity. + * PRECONDITION: cache is not empty (ensured by caller) + */ removeTail() { + const lastNode = this.tail.prev; + // tail.prev is always non-null and always LRUNode when cache is not empty + this.removeNode(lastNode); + return lastNode; + } + /** + * Sets a key-value pair in the cache. + * If the key exists, updates the value and moves to head. + * If new, adds at head and evicts from tail if necessary. + * + * Time Complexity: + * - O(1) for uniform item sizes + * - O(k) where k is the number of items evicted (can be O(N) for variable sizes) + */ set(key, value) { + const size = (this.calculateSize == null ? void 0 : this.calculateSize.call(this, value, key)) ?? 1; + if (size <= 0) { + throw new Error(`LRUCache: calculateSize returned ${size}, but size must be > 0. ` + `Items with size 0 would never be evicted, causing unbounded cache growth.`); + } + if (size > this.maxSize) { + console.warn('Single item size exceeds maxSize'); + return false; + } + const existing = this.cache.get(key); + if (existing) { + // Update existing node: adjust size and move to head (most recent) + existing.data = value; + this.totalSize = this.totalSize - existing.size + size; + existing.size = size; + this.moveToHead(existing); + } else { + // Add new node at head (most recent position) + const newNode = new LRUNode(key, value, size); + this.cache.set(key, newNode); + this.addToHead(newNode); + this.totalSize += size; + } + // Evict least recently used items until under capacity + while(this.totalSize > this.maxSize && this.cache.size > 0){ + const tail = this.removeTail(); + this.cache.delete(tail.key); + this.totalSize -= tail.size; + this.onEvict == null ? void 0 : this.onEvict.call(this, tail.key, tail.data); + } + return true; + } + /** + * Checks if a key exists in the cache. + * This is a pure query operation - does NOT update LRU order. + * + * Time Complexity: O(1) + */ has(key) { + return this.cache.has(key); + } + /** + * Retrieves a value by key and marks it as most recently used. + * Moving to head maintains the LRU property for future evictions. + * + * Time Complexity: O(1) + */ get(key) { + const node = this.cache.get(key); + if (!node) return undefined; + // Mark as most recently used by moving to head + this.moveToHead(node); + return node.data; + } + /** + * Returns an iterator over the cache entries. The order is outputted in the + * order of most recently used to least recently used. + */ *[Symbol.iterator]() { + let current = this.head.next; + while(current && current !== this.tail){ + // Between head and tail, current is always LRUNode + const node = current; + yield [ + node.key, + node.data + ]; + current = current.next; + } + } + /** + * Removes a specific key from the cache. + * Updates both the hash map and doubly-linked list. + * + * Note: This is an explicit removal and does NOT trigger the `onEvict` + * callback. Use this for intentional deletions where eviction tracking + * is not needed. + * + * Time Complexity: O(1) + */ remove(key) { + const node = this.cache.get(key); + if (!node) return; + this.removeNode(node); + this.cache.delete(key); + this.totalSize -= node.size; + } + /** + * Returns the number of items in the cache. + */ get size() { + return this.cache.size; + } + /** + * Returns the current total size of all cached items. + * This uses the custom size calculation if provided. + */ get currentSize() { + return this.totalSize; + } +} +}), +"[project]/node_modules/next/dist/esm/server/lib/patch-fetch.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "NEXT_PATCH_SYMBOL", + ()=>NEXT_PATCH_SYMBOL, + "createPatchedFetcher", + ()=>createPatchedFetcher, + "patchFetch", + ()=>patchFetch, + "validateRevalidate", + ()=>validateRevalidate, + "validateTags", + ()=>validateTags +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$request$2d$insights$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/request-insights.js [app-route] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$span$2d$store$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/span-store.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$request$2d$insights$2d$identity$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/request-insights-identity.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$dynamic$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/dynamic-rendering.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/dynamic-rendering-utils.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$dedupe$2d$fetch$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/dedupe-fetch.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/index.js [app-route] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/types.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/clone-response.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/staged-rendering.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$encode$2d$header$2d$safe$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/encode-header-safe.js [app-route] (ecmascript)"); +; +; +; +; +; +; +; +; +; +; +; +; +; +const isEdgeRuntime = ("TURBOPACK compile-time value", "nodejs") === 'edge'; +/** + * Whether fetch cache configuration needs to be processed for the current work + * unit before an origin fetch. Static prerender stores use it for dynamic + * access tracking. Cache scopes apply it to their own cache policy, regardless + * of which outer work unit created them. Development staged renders additionally + * coordinate dynamic fetches with the dynamic render stage. + */ function shouldProcessFetchConfigForWorkUnit(workUnitStore) { + if (!workUnitStore) { + return false; + } + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + return true; + case 'request': + return Boolean(("TURBOPACK compile-time value", "development") === 'development' && ("TURBOPACK compile-time value", true) && workUnitStore.stagedRendering); + case 'prerender-runtime': + case 'validation-client': + case 'build-time-generator': + return false; + default: + return workUnitStore; + } +} +const NEXT_PATCH_SYMBOL = Symbol.for('next-patch'); +function isFetchPatched() { + return globalThis[NEXT_PATCH_SYMBOL] === true; +} +function validateRevalidate(revalidateVal, route) { + try { + let normalizedRevalidate = undefined; + if (revalidateVal === false || revalidateVal === Infinity) { + // Unlike Infinity, INFINITE_CACHE survives JSON serialization (e.g. in + // the fetch cache). + normalizedRevalidate = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"]; + } else if (typeof revalidateVal === 'number' && !isNaN(revalidateVal) && revalidateVal > -1) { + normalizedRevalidate = revalidateVal; + } else if (typeof revalidateVal !== 'undefined') { + throw new Error(`Invalid revalidate value "${revalidateVal}" on "${route}", must be a non-negative number or false`); + } + return normalizedRevalidate; + } catch (err) { + // handle client component error from attempting to check revalidate value + if (err instanceof Error && err.message.includes('Invalid revalidate')) { + throw err; + } + return undefined; + } +} +function validateTags(tags, description) { + const validTags = []; + const invalidTags = []; + for(let i = 0; i < tags.length; i++){ + const tag = tags[i]; + if (typeof tag !== 'string') { + invalidTags.push({ + tag, + reason: 'invalid type, must be a string' + }); + } else if (tag.length > __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAG_MAX_LENGTH"]) { + invalidTags.push({ + tag, + reason: `exceeded max length of ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAG_MAX_LENGTH"]}` + }); + } else { + // Encode so a non-ASCII tag can be safely serialized into the + // `x-next-cache-tags` HTTP header without tripping Node's header + // validation. Length is checked on the raw input above. + validTags.push((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$encode$2d$header$2d$safe$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["encodeHeaderSafe"])(tag)); + } + if (validTags.length > __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAG_MAX_ITEMS"]) { + console.warn(`Warning: exceeded max tag count for ${description}, dropped tags:`, tags.slice(i).join(', ')); + break; + } + } + if (invalidTags.length > 0) { + console.warn(`Warning: invalid tags passed to ${description}: `); + for (const { tag, reason } of invalidTags){ + console.log(`tag: "${tag}" ${reason}`); + } + } + return validTags; +} +function trackFetchMetric(workStore, span, ctx) { + const metric = { + ...ctx, + end: performance.timeOrigin + performance.now(), + idx: workStore.nextFetchId || 0 + }; + span == null ? void 0 : span.setAttributes({ + 'http.status_code': metric.status, + 'next.fetch.idx': metric.idx, + 'next.fetch.cache_status': metric.cacheStatus, + 'next.fetch.cache_reason': metric.cacheReason + }); + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$span$2d$store$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isRequestInsightsEnabled"])()) { + const requestInsightsIdentity = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$request$2d$insights$2d$identity$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestInsightsIdentity"])(); + const requestInsightsRequestId = (requestInsightsIdentity == null ? void 0 : requestInsightsIdentity.requestId) ?? workStore.requestId; + if (requestInsightsRequestId) { + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$request$2d$insights$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__["recordRequestInsightFetch"])({ + requestId: requestInsightsRequestId, + kind: requestInsightsIdentity == null ? void 0 : requestInsightsIdentity.kind, + htmlRequestId: (requestInsightsIdentity == null ? void 0 : requestInsightsIdentity.htmlRequestId) ?? workStore.htmlRequestId, + route: workStore.route + }, { + url: metric.url, + method: metric.method, + statusCode: metric.status, + startTime: metric.start, + durationMs: metric.end - metric.start, + cacheStatus: metric.cacheStatus, + cacheReason: metric.cacheReason, + index: metric.idx + }); + } + } + if (!workStore.shouldTrackFetchMetrics) { + return; + } + workStore.fetchMetrics ??= []; + workStore.fetchMetrics.push(metric); +} +async function createCachedPrerenderResponse(res, cacheKey, incrementalCacheContext, incrementalCache, revalidate, handleUnlock) { + // We are prerendering at build time or revalidate time with cacheComponents so we + // need to buffer the response so we can guarantee it can be read in a + // microtask. + const bodyBuffer = await res.arrayBuffer(); + const fetchedData = { + headers: Object.fromEntries(res.headers.entries()), + body: Buffer.from(bodyBuffer).toString('base64'), + status: res.status, + url: res.url + }; + // We can skip setting the serverComponentsHmrCache because we aren't in dev + // mode. + if (incrementalCacheContext) { + await incrementalCache.set(cacheKey, { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].FETCH, + data: fetchedData, + revalidate + }, incrementalCacheContext); + } + await handleUnlock(); + // We return a new Response to the caller. + return new Response(bodyBuffer, { + headers: res.headers, + status: res.status, + statusText: res.statusText + }); +} +async function createCachedDynamicResponse(workStore, res, cacheKey, incrementalCacheContext, incrementalCache, serverComponentsHmrCache, revalidate, input, handleUnlock, signal) { + // We're cloning the response using this utility because there exists a bug in + // the undici library around response cloning. See the following pull request + // for more details: https://github.com/vercel/next.js/pull/73274 + const [cloned1, cloned2] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["cloneResponse"])(res); + // We are dynamically rendering including dev mode. We want to return the + // response to the caller as soon as possible because it might stream over a + // very long time. + const cacheSetPromise = cloned1.arrayBuffer().then(async (arrayBuffer)=>{ + const bodyBuffer = Buffer.from(arrayBuffer); + const fetchedData = { + headers: Object.fromEntries(cloned1.headers.entries()), + body: bodyBuffer.toString('base64'), + status: cloned1.status, + url: cloned1.url + }; + serverComponentsHmrCache == null ? void 0 : serverComponentsHmrCache.set(cacheKey, fetchedData); + if (incrementalCacheContext) { + await incrementalCache.set(cacheKey, { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].FETCH, + data: fetchedData, + revalidate + }, incrementalCacheContext); + } + }).catch((error)=>{ + // Don't warn if the request was aborted intentionally. + if (!(signal == null ? void 0 : signal.aborted)) { + console.warn(`Failed to set fetch cache`, input, error); + } + }).finally(handleUnlock); + const pendingRevalidateKey = `cache-set-${cacheKey}`; + const pendingRevalidates = workStore.pendingRevalidates ??= {}; + let pendingRevalidatePromise = Promise.resolve(); + if (pendingRevalidateKey in pendingRevalidates) { + // There is already a pending revalidate entry that we need to await to + // avoid race conditions. + pendingRevalidatePromise = pendingRevalidates[pendingRevalidateKey]; + } + pendingRevalidates[pendingRevalidateKey] = pendingRevalidatePromise.then(()=>cacheSetPromise).finally(()=>{ + // If the pending revalidate is not present in the store, then we have + // nothing to delete. + if (!(pendingRevalidates == null ? void 0 : pendingRevalidates[pendingRevalidateKey])) { + return; + } + delete pendingRevalidates[pendingRevalidateKey]; + }); + return cloned2; +} +function createPatchedFetcher(originFetch, { workAsyncStorage, workUnitAsyncStorage }) { + // Create the patched fetch function. + const patched = async function fetch(input, init) { + var _init_method, _init_next; + let url; + try { + url = new URL(input instanceof Request ? input.url : input); + url.username = ''; + url.password = ''; + } catch { + // Error caused by malformed URL should be handled by native fetch + url = undefined; + } + const fetchUrl = (url == null ? void 0 : url.href) ?? ''; + const method = (init == null ? void 0 : (_init_method = init.method) == null ? void 0 : _init_method.toUpperCase()) || 'GET'; + // Do create a new span trace for internal fetches in the + // non-verbose mode. + const isInternal = (init == null ? void 0 : (_init_next = init.next) == null ? void 0 : _init_next.internal) === true; + const hideSpan = process.env.NEXT_OTEL_FETCH_DISABLED === '1'; + // We don't track fetch metrics for internal fetches + // so it's not critical that we have a start time, as it won't be recorded. + // This is to workaround a flaky issue where performance APIs might + // not be available and will require follow-up investigation. + const fetchStart = isInternal ? undefined : performance.timeOrigin + performance.now(); + const workStore = workAsyncStorage.getStore(); + const workUnitStore = workUnitAsyncStorage.getStore(); + let cacheSignal = workUnitStore ? (0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["getCacheSignal"])(workUnitStore) : null; + if (cacheSignal) { + cacheSignal.beginRead(); + } + const result = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])().trace(isInternal ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextNodeServerSpan"].internalFetch : __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["AppRenderSpan"].fetch, { + hideSpan, + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SpanKind"].CLIENT, + spanName: [ + 'fetch', + method, + fetchUrl + ].filter(Boolean).join(' '), + attributes: { + 'http.url': fetchUrl, + 'http.method': method, + 'net.peer.name': url == null ? void 0 : url.hostname, + 'net.peer.port': (url == null ? void 0 : url.port) || undefined + } + }, async (span)=>{ + var _getRequestMeta; + // If this is an internal fetch, we should not do any special treatment. + if (isInternal) { + return originFetch(input, init); + } + // If the workStore is not available, we can't do any + // special treatment of fetch, therefore fallback to the original + // fetch implementation. + if (!workStore) { + return originFetch(input, init); + } + // We should also fallback to the original fetch implementation if we + // are in draft mode, it does not constitute a static generation. + if (workStore.isDraftMode) { + return originFetch(input, init); + } + const isRequestInput = input && typeof input === 'object' && typeof input.method === 'string'; + // With `fetch(new Request(url), init)`, native fetch lets `init` + // override the base Request. Merge them into a single effective Request + // so cacheability, the cache key, and the upstream request all describe + // the same thing. + if (isRequestInput && init) { + // `next` (revalidate/tags) is Next-specific and dropped by + // `new Request`, so keep it on `init` and move the rest onto input. + const { next, ...overrides } = init; + input = new Request(input, overrides); + init = next ? { + next + } : undefined; + } + const getRequestMeta = (field)=>{ + // If request input is present but init is not, retrieve from input first. + const value = init == null ? void 0 : init[field]; + return value || (isRequestInput ? input[field] : null); + }; + let finalRevalidate = undefined; + const getNextField = (field)=>{ + var _init_next, _init_next1, _input_next; + return typeof (init == null ? void 0 : (_init_next = init.next) == null ? void 0 : _init_next[field]) !== 'undefined' ? init == null ? void 0 : (_init_next1 = init.next) == null ? void 0 : _init_next1[field] : isRequestInput ? (_input_next = input.next) == null ? void 0 : _input_next[field] : undefined; + }; + // RequestInit doesn't keep extra fields e.g. next so it's + // only available if init is used separate + const originalFetchRevalidate = getNextField('revalidate'); + let currentFetchRevalidate = originalFetchRevalidate; + const tags = validateTags(getNextField('tags') || [], `fetch ${input.toString()}`); + let revalidateStore; + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + // TODO: Stop accumulating tags in client prerender. (fallthrough) + case 'prerender-client': + case 'validation-client': + case 'prerender-legacy': + case 'cache': + case 'private-cache': + revalidateStore = workUnitStore; + break; + case 'request': + case 'unstable-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + if (revalidateStore) { + if (Array.isArray(tags)) { + // Collect tags onto parent caches or parent prerenders. + const collectedTags = revalidateStore.tags ?? (revalidateStore.tags = []); + for (const tag of tags){ + if (!collectedTags.includes(tag)) { + collectedTags.push(tag); + } + } + } + } + const implicitTags = workUnitStore == null ? void 0 : workUnitStore.implicitTags; + let pageFetchCacheMode = workStore.fetchCache; + if (workUnitStore) { + switch(workUnitStore.type){ + case 'unstable-cache': + // Inside unstable-cache we treat it the same as force-no-store on + // the page. + pageFetchCacheMode = 'force-no-store'; + break; + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + case 'prerender-legacy': + case 'request': + case 'cache': + case 'private-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + const isUsingNoStore = !!workStore.isUnstableNoStore; + let currentFetchCacheConfig = getRequestMeta('cache'); + let cacheReason = ''; + let cacheWarning; + if (typeof currentFetchCacheConfig === 'string' && typeof currentFetchRevalidate !== 'undefined') { + // If the revalidate value conflicts with the cache value, we should warn the user and unset the conflicting values. + const isConflictingRevalidate = currentFetchCacheConfig === 'force-cache' && currentFetchRevalidate === 0 || // revalidate: >0 or revalidate: false and cache: no-store + currentFetchCacheConfig === 'no-store' && (currentFetchRevalidate > 0 || currentFetchRevalidate === false); + if (isConflictingRevalidate) { + cacheWarning = `Specified "cache: ${currentFetchCacheConfig}" and "revalidate: ${currentFetchRevalidate}", only one should be specified.`; + currentFetchCacheConfig = undefined; + currentFetchRevalidate = undefined; + } + } + const hasExplicitFetchCacheOptOut = currentFetchCacheConfig === 'no-cache' || currentFetchCacheConfig === 'no-store' || // the fetch isn't explicitly caching and the segment level cache config signals not to cache + // note: `pageFetchCacheMode` is also set by being in an unstable_cache context. + pageFetchCacheMode === 'force-no-store' || pageFetchCacheMode === 'only-no-store'; + // If no explicit fetch cache mode is set, but dynamic = `force-dynamic` is set, + // we shouldn't consider caching the fetch. This is because the `dynamic` cache + // is considered a "top-level" cache mode, whereas something like `fetchCache` is more + // fine-grained. Top-level modes are responsible for setting reasonable defaults for the + // other configurations. + const noFetchConfigAndForceDynamic = !pageFetchCacheMode && !currentFetchCacheConfig && !currentFetchRevalidate && workStore.forceDynamic; + if (// which will signal the cache to not revalidate + currentFetchCacheConfig === 'force-cache' && typeof currentFetchRevalidate === 'undefined') { + currentFetchRevalidate = false; + } else if (hasExplicitFetchCacheOptOut || noFetchConfigAndForceDynamic) { + currentFetchRevalidate = 0; + } + if (currentFetchCacheConfig === 'no-cache' || currentFetchCacheConfig === 'no-store') { + cacheReason = `cache: ${currentFetchCacheConfig}`; + } + finalRevalidate = validateRevalidate(currentFetchRevalidate, workStore.route); + const _headers = getRequestMeta('headers'); + const initHeaders = typeof (_headers == null ? void 0 : _headers.get) === 'function' ? _headers : new Headers(_headers || {}); + const hasUnCacheableHeader = initHeaders.get('authorization') || initHeaders.get('cookie'); + const isUnCacheableMethod = ![ + 'get', + 'head' + ].includes(((_getRequestMeta = getRequestMeta('method')) == null ? void 0 : _getRequestMeta.toLowerCase()) || 'get'); + /** + * We automatically disable fetch caching under the following conditions: + * - Fetch cache configs are not set. Specifically: + * - A page fetch cache mode is not set (export const fetchCache=...) + * - A fetch cache mode is not set in the fetch call (fetch(url, { cache: ... })) + * or the fetch cache mode is set to 'default' + * - A fetch revalidate value is not set in the fetch call (fetch(url, { revalidate: ... })) + * - OR the fetch comes after a configuration that triggered dynamic rendering (e.g., reading cookies()) + * and the fetch was considered uncacheable (e.g., POST method or has authorization headers) + */ const hasNoExplicitCacheConfig = pageFetchCacheMode == undefined && // eslint-disable-next-line eqeqeq + (currentFetchCacheConfig == undefined || // when considering whether to opt into the default "no-cache" fetch semantics, + // a "default" cache config should be treated the same as no cache config + currentFetchCacheConfig === 'default') && // eslint-disable-next-line eqeqeq + currentFetchRevalidate == undefined; + let autoNoCache = Boolean((hasUnCacheableHeader || isUnCacheableMethod) && (revalidateStore == null ? void 0 : revalidateStore.revalidate) === 0); + let isImplicitBuildTimeCache = false; + if (!autoNoCache && hasNoExplicitCacheConfig) { + // We don't enable automatic no-cache behavior during build-time + // prerendering so that we can still leverage the fetch cache between + // export workers. + if (workStore.isBuildTimePrerendering) { + isImplicitBuildTimeCache = true; + } else { + autoNoCache = true; + } + } + // If we have no cache config, and we're in Dynamic I/O prerendering, + // it'll be a dynamic call. We don't have to issue that dynamic call. + if (hasNoExplicitCacheConfig && workUnitStore !== undefined) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + // While we don't want to do caching in the client scope we know the + // fetch will be dynamic for cacheComponents so we may as well avoid the + // call here. (fallthrough) + case 'prerender-client': + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["makeDynamicHangingPromise"])(workUnitStore.renderSignal, workStore.route, 'fetch()'); + case 'validation-client': + break; + case 'request': + if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering) { + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + await workUnitStore.stagedRendering.waitForStage(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic); + } + break; + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + switch(pageFetchCacheMode){ + case 'force-no-store': + { + cacheReason = 'fetchCache = force-no-store'; + break; + } + case 'only-no-store': + { + if (currentFetchCacheConfig === 'force-cache' || typeof finalRevalidate !== 'undefined' && finalRevalidate > 0) { + throw new Error(`cache: 'force-cache' used on fetch for ${fetchUrl} with 'export const fetchCache = 'only-no-store'`); + } + cacheReason = 'fetchCache = only-no-store'; + break; + } + case 'only-cache': + { + if (currentFetchCacheConfig === 'no-store') { + throw new Error(`cache: 'no-store' used on fetch for ${fetchUrl} with 'export const fetchCache = 'only-cache'`); + } + break; + } + case 'force-cache': + { + if (typeof currentFetchRevalidate === 'undefined' || currentFetchRevalidate === 0) { + cacheReason = 'fetchCache = force-cache'; + finalRevalidate = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"]; + } + break; + } + case 'default-cache': + case 'default-no-store': + case 'auto': + case undefined: + break; + default: + pageFetchCacheMode; + } + if (typeof finalRevalidate === 'undefined') { + if (pageFetchCacheMode === 'default-cache' && !isUsingNoStore) { + finalRevalidate = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"]; + cacheReason = 'fetchCache = default-cache'; + } else if (pageFetchCacheMode === 'default-no-store') { + finalRevalidate = 0; + cacheReason = 'fetchCache = default-no-store'; + } else if (isUsingNoStore) { + finalRevalidate = 0; + cacheReason = 'noStore call'; + } else if (autoNoCache) { + finalRevalidate = 0; + cacheReason = 'auto no cache'; + } else { + // TODO: should we consider this case an invariant? + cacheReason = 'auto cache'; + finalRevalidate = revalidateStore ? revalidateStore.revalidate : __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"]; + } + } else if (!cacheReason) { + cacheReason = `revalidate: ${finalRevalidate}`; + } + if (// `revalidate: 0` values + !(workStore.forceStatic && finalRevalidate === 0) && // we don't consider autoNoCache to switch to dynamic for ISR + !autoNoCache && // If the revalidate value isn't currently set or the value is less + // than the current revalidate value, we should update the revalidate + // value. + revalidateStore && finalRevalidate < revalidateStore.revalidate) { + // If we were setting the revalidate value to 0, we should try to + // postpone instead first. + if (finalRevalidate === 0) { + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'prerender-runtime': + // If we're in an instant validation, a dynamic fetch won't + // have time to resolve during the validation prerender anyway, + // so we leave it hanging. This can cause false negatives in shared parents, + // but we accept that for now, because client data fetching is non-idiomatic. + // eslint-disable-next-line no-fallthrough + case 'validation-client': + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["makeDynamicHangingPromise"])(workUnitStore.renderSignal, workStore.route, 'fetch()'); + case 'request': + if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering) { + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + await workUnitStore.stagedRendering.waitForStage(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic); + } + break; + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$dynamic$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["markCurrentScopeAsDynamic"])(workStore, workUnitStore, `revalidate: 0 fetch ${input} ${workStore.route}`); + } + // We only want to set the revalidate store's revalidate time if it + // was explicitly set for the fetch call, i.e. + // originalFetchRevalidate. + if (revalidateStore && originalFetchRevalidate === finalRevalidate) { + revalidateStore.revalidate = finalRevalidate; + } + } + const isCacheableRevalidate = typeof finalRevalidate === 'number' && finalRevalidate > 0; + let cacheKey; + const { incrementalCache } = workStore; + let isHmrRefresh = false; + let serverComponentsHmrCache; + if (workUnitStore) { + switch(workUnitStore.type){ + case 'request': + case 'cache': + case 'private-cache': + isHmrRefresh = workUnitStore.isHmrRefresh ?? false; + serverComponentsHmrCache = workUnitStore.serverComponentsHmrCache; + break; + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + case 'prerender-legacy': + case 'unstable-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + if (incrementalCache && (isCacheableRevalidate || serverComponentsHmrCache)) { + try { + cacheKey = await incrementalCache.generateCacheKey(fetchUrl, isRequestInput ? input : init); + } catch (cause) { + console.error(`Failed to generate cache key for`, input, cause); + } + } + const fetchIdx = workStore.nextFetchId ?? 1; + workStore.nextFetchId = fetchIdx + 1; + let handleUnlock = ()=>{}; + const doOriginalFetch = async (isStale, cacheReasonOverride)=>{ + const requestInputFields = [ + 'cache', + 'credentials', + 'headers', + 'integrity', + 'keepalive', + 'method', + 'mode', + 'redirect', + 'referrer', + 'referrerPolicy', + 'window', + 'duplex', + // don't pass through signal when revalidating + ...isStale ? [] : [ + 'signal' + ] + ]; + if (isRequestInput) { + const reqInput = input; + const reqOptions = { + body: reqInput._ogBody || reqInput.body + }; + for (const field of requestInputFields){ + // @ts-expect-error custom fields + reqOptions[field] = reqInput[field]; + } + input = new Request(reqInput.url, reqOptions); + } else if (init) { + const { _ogBody, body, signal, ...otherInput } = init; + init = { + ...otherInput, + body: _ogBody || body, + signal: isStale ? undefined : signal + }; + } + // add metadata to init without editing the original + const clonedInit = { + ...init, + next: { + ...init == null ? void 0 : init.next, + fetchType: 'origin', + fetchIdx + } + }; + return originFetch(input, clonedInit).then(async (res)=>{ + if (!isStale && fetchStart) { + trackFetchMetric(workStore, span, { + start: fetchStart, + url: fetchUrl, + cacheReason: cacheReasonOverride || cacheReason, + cacheStatus: finalRevalidate === 0 || cacheReasonOverride ? 'skip' : 'miss', + cacheWarning, + status: res.status, + method: clonedInit.method || 'GET' + }); + } + if (res.status === 200 && incrementalCache && cacheKey && (isCacheableRevalidate || serverComponentsHmrCache)) { + const normalizedRevalidate = finalRevalidate >= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"] ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CACHE_ONE_YEAR_SECONDS"] : finalRevalidate; + const incrementalCacheConfig = isCacheableRevalidate ? { + fetchCache: true, + fetchUrl, + fetchIdx, + tags, + isImplicitBuildTimeCache + } : undefined; + switch(workUnitStore == null ? void 0 : workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + return createCachedPrerenderResponse(res, cacheKey, incrementalCacheConfig, incrementalCache, normalizedRevalidate, handleUnlock); + case 'request': + if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering && workUnitStore.cacheSignal && isCacheableRevalidate) { + // We're filling caches for a staged render with an + // explicit cache config, so we need to wait for the + // response to finish instead of streaming. For HMR-only + // caching (no explicit revalidate), we fall through to + // createCachedDynamicResponse which handles streaming + // and abort gracefully. + return createCachedPrerenderResponse(res, cacheKey, incrementalCacheConfig, incrementalCache, normalizedRevalidate, handleUnlock); + } + // fallthrough + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + case undefined: + return createCachedDynamicResponse(workStore, res, cacheKey, incrementalCacheConfig, incrementalCache, serverComponentsHmrCache, normalizedRevalidate, input, handleUnlock, getRequestMeta('signal')); + default: + workUnitStore; + } + } + // we had response that we determined shouldn't be cached so we return it + // and don't cache it. This also needs to unlock the cache lock we acquired. + await handleUnlock(); + return res; + }).catch((error)=>{ + handleUnlock(); + throw error; + }); + }; + let cacheReasonOverride; + let isForegroundRevalidate = false; + let isHmrRefreshCache = false; + if (cacheKey && incrementalCache) { + let cachedFetchData; + if (isHmrRefresh && serverComponentsHmrCache) { + cachedFetchData = serverComponentsHmrCache.get(cacheKey); + isHmrRefreshCache = true; + } + if (isCacheableRevalidate && !cachedFetchData) { + handleUnlock = await incrementalCache.lock(cacheKey); + const entry = workStore.isOnDemandRevalidate ? null : await incrementalCache.get(cacheKey, { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].FETCH, + revalidate: finalRevalidate, + fetchUrl, + fetchIdx, + tags, + softTags: implicitTags == null ? void 0 : implicitTags.tags + }); + if (hasNoExplicitCacheConfig && workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + // We sometimes use the cache to dedupe fetches that do not + // specify a cache configuration. In these cases we want to + // make sure we still exclude them from prerenders if + // cacheComponents is on so we introduce an artificial task boundary + // here. + await getTimeoutBoundary(); + break; + case 'request': + if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering) { + await workUnitStore.stagedRendering.waitForStage(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic); + } + break; + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + if (entry) { + await handleUnlock(); + } else { + // in dev, incremental cache response will be null in case the browser adds `cache-control: no-cache` in the request headers + // TODO: it seems like we also hit this after revalidates in dev? + cacheReasonOverride = 'cache-control: no-cache (hard refresh)'; + } + if ((entry == null ? void 0 : entry.value) && entry.value.kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].FETCH) { + // If the consumer will persist this result in a server cache, + // wait for fresh data so it doesn't persist a stale value. + if ((0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["willConsumerServerCache"])(workUnitStore) && entry.isStale) { + isForegroundRevalidate = true; + } else { + if (entry.isStale) { + workStore.pendingRevalidates ??= {}; + if (!workStore.pendingRevalidates[cacheKey]) { + const pendingRevalidate = doOriginalFetch(true).then(async (response)=>({ + body: await response.arrayBuffer(), + headers: response.headers, + status: response.status, + statusText: response.statusText + })).finally(()=>{ + workStore.pendingRevalidates ??= {}; + delete workStore.pendingRevalidates[cacheKey || '']; + }); + // Attach the empty catch here so we don't get a "unhandled + // promise rejection" warning. + pendingRevalidate.catch(console.error); + workStore.pendingRevalidates[cacheKey] = pendingRevalidate; + } + } + cachedFetchData = entry.value.data; + } + } + } + if (cachedFetchData) { + if (fetchStart) { + trackFetchMetric(workStore, span, { + start: fetchStart, + url: fetchUrl, + cacheReason, + cacheStatus: isHmrRefreshCache ? 'hmr' : 'hit', + cacheWarning, + status: cachedFetchData.status || 200, + method: (init == null ? void 0 : init.method) || 'GET' + }); + } + const response = new Response(Buffer.from(cachedFetchData.body, 'base64'), { + headers: cachedFetchData.headers, + status: cachedFetchData.status + }); + Object.defineProperty(response, 'url', { + value: cachedFetchData.url + }); + return response; + } + } + if (init && typeof init === 'object' && shouldProcessFetchConfigForWorkUnit(workUnitStore)) { + const { cache } = init; + // Delete `cache` property as Cloudflare Workers will throw an error + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + if (cache === 'no-store') { + // If enabled, we should bail out of static generation. + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'prerender-runtime': + case 'validation-client': + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["makeDynamicHangingPromise"])(workUnitStore.renderSignal, workStore.route, 'fetch()'); + case 'request': + if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering) { + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + await workUnitStore.stagedRendering.waitForStage(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic); + } + break; + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$dynamic$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["markCurrentScopeAsDynamic"])(workStore, workUnitStore, `no-store fetch ${input} ${workStore.route}`); + } + const hasNextConfig = 'next' in init; + const { next = {} } = init; + if (typeof next.revalidate === 'number' && revalidateStore && next.revalidate < revalidateStore.revalidate) { + if (next.revalidate === 0) { + // If enabled, we should bail out of static generation. + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'prerender-runtime': + case 'validation-client': + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["makeDynamicHangingPromise"])(workUnitStore.renderSignal, workStore.route, 'fetch()'); + case 'request': + if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering) { + await workUnitStore.stagedRendering.waitForStage(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic); + } + break; + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'prerender-legacy': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$dynamic$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["markCurrentScopeAsDynamic"])(workStore, workUnitStore, `revalidate: 0 fetch ${input} ${workStore.route}`); + } + if (!workStore.forceStatic || next.revalidate !== 0) { + revalidateStore.revalidate = next.revalidate; + } + } + if (hasNextConfig) delete init.next; + } + // if we are revalidating the whole page via time or on-demand and + // the fetch cache entry is stale we should still de-dupe the + // origin hit if it's a cache-able entry + if (cacheKey && isForegroundRevalidate) { + const pendingRevalidateKey = cacheKey; + workStore.pendingRevalidates ??= {}; + let pendingRevalidate = workStore.pendingRevalidates[pendingRevalidateKey]; + if (pendingRevalidate) { + const revalidatedResult = await pendingRevalidate; + return new Response(revalidatedResult.body, { + headers: revalidatedResult.headers, + status: revalidatedResult.status, + statusText: revalidatedResult.statusText + }); + } + // We used to just resolve the Response and clone it however for + // static generation with cacheComponents we need the response to be able to + // be resolved in a microtask and cloning the response will never have + // a body that can resolve in a microtask in node (as observed through + // experimentation) So instead we await the body and then when it is + // available we construct manually cloned Response objects with the + // body as an ArrayBuffer. This will be resolvable in a microtask + // making it compatible with cacheComponents. + const pendingResponse = doOriginalFetch(true, cacheReasonOverride) // We're cloning the response using this utility because there + // exists a bug in the undici library around response cloning. + // See the following pull request for more details: + // https://github.com/vercel/next.js/pull/73274 + .then(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["cloneResponse"]); + pendingRevalidate = pendingResponse.then(async (responses)=>{ + const response = responses[0]; + return { + body: await response.arrayBuffer(), + headers: response.headers, + status: response.status, + statusText: response.statusText + }; + }).finally(()=>{ + var _workStore_pendingRevalidates; + // If the pending revalidate is not present in the store, then + // we have nothing to delete. + if (!((_workStore_pendingRevalidates = workStore.pendingRevalidates) == null ? void 0 : _workStore_pendingRevalidates[pendingRevalidateKey])) { + return; + } + delete workStore.pendingRevalidates[pendingRevalidateKey]; + }); + // Attach the empty catch here so we don't get a "unhandled promise + // rejection" warning + pendingRevalidate.catch(()=>{}); + workStore.pendingRevalidates[pendingRevalidateKey] = pendingRevalidate; + return pendingResponse.then((responses)=>responses[1]); + } else { + return doOriginalFetch(false, cacheReasonOverride); + } + }); + if (cacheSignal) { + try { + return await result; + } finally{ + if (cacheSignal) { + cacheSignal.endRead(); + } + } + } + return result; + }; + // Attach the necessary properties to the patched fetch function. + // We don't use this to determine if the fetch function has been patched, + // but for external consumers to determine if the fetch function has been + // patched. + patched.__nextPatched = true; + patched.__nextGetStaticStore = ()=>workAsyncStorage; + patched._nextOriginalFetch = originFetch; + globalThis[NEXT_PATCH_SYMBOL] = true; + // Assign the function name also as a name property, so that it's preserved + // even when mangling is enabled. + Object.defineProperty(patched, 'name', { + value: 'fetch', + writable: false + }); + return patched; +} +function patchFetch(options) { + // If we've already patched fetch, we should not patch it again. + if (isFetchPatched()) return; + // Grab the original fetch function. We'll attach this so we can use it in + // the patched fetch function. + const original = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$dedupe$2d$fetch$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDedupeFetch"])(globalThis.fetch); + // Set the global fetch to the patched fetch. + globalThis.fetch = createPatchedFetcher(original, options); +} +let currentTimeoutBoundary = null; +function getTimeoutBoundary() { + if (!currentTimeoutBoundary) { + currentTimeoutBoundary = new Promise((r)=>{ + setTimeout(()=>{ + currentTimeoutBoundary = null; + r(); + }, 0); + }); + } + return currentTimeoutBoundary; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/route-cache-key.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ROUTE_CACHE_DIRECTORY", + ()=>ROUTE_CACHE_DIRECTORY, + "getResponseCacheOwner", + ()=>getResponseCacheOwner, + "getRouteCacheKey", + ()=>getRouteCacheKey, + "isRouteCacheOwner", + ()=>isRouteCacheOwner +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$normalize$2d$page$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/page-path/normalize-page-path.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$normalize$2d$locale$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$built$2f$app$2f$app$2d$pathname$2d$normalizer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/normalizers/built/app/app-pathname-normalizer.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/route-kind.js [app-route] (ecmascript)"); +; +; +; +; +; +const ROUTE_CACHE_DIRECTORY = 'route-cache'; +const appPathnameNormalizer = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$built$2f$app$2f$app$2d$pathname$2d$normalizer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["AppPathnameNormalizer"](); +function getResponseCacheOwner(definition) { + return { + kind: definition.kind, + // Pages module names can include a trailing /index in Turbopack. Their + // pathname matches the manifest's source in both bundlers. App modules + // retain groups and parallel slots in their cache identity. + sourceRoute: definition.kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].PAGES ? definition.pathname : definition.page + }; +} +function isRouteCacheOwner(pathname, owner, prerender, locales) { + if (!prerender) { + return false; + } + // Pages have JSON data routes, App Pages have RSC data routes, and App + // Route Handlers have no separate data route. + const kind = prerender.dataRoute === null ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].APP_ROUTE : prerender.dataRoute.endsWith('.json') ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].PAGES : prerender.dataRoute.endsWith('.rsc') ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].APP_PAGE : undefined; + if (kind !== owner.kind) { + return false; + } + const source = 'srcRoute' in prerender ? prerender.srcRoute : prerender.fallbackSourceRoute; + const prerenderOwner = source ?? (kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].PAGES ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$normalize$2d$locale$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeLocalePath"])(pathname, locales).pathname : pathname); + return prerenderOwner === (kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].PAGES ? owner.sourceRoute : appPathnameNormalizer.normalize(owner.sourceRoute)); +} +function getRouteCacheKey(pathname, owner) { + if (!owner) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('Response cache requires a source route'); + } + const { sourceRoute } = owner; + let source; + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + const { createHash } = __turbopack_context__.r("[externals]/crypto [external] (crypto, cjs)"); + source = createHash('sha256').update(sourceRoute).digest('hex'); + } + return `/${ROUTE_CACHE_DIRECTORY}/${owner.kind}/${source}/$${(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$normalize$2d$page$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizePagePath"])(pathname)}`; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "AppRenderSpan", + ()=>AppRenderSpan, + "AppRouteRouteHandlersSpan", + ()=>AppRouteRouteHandlersSpan, + "AppRouteRouteModuleSpan", + ()=>AppRouteRouteModuleSpan, + "BaseServerSpan", + ()=>BaseServerSpan, + "DevBundlerServiceSpan", + ()=>DevBundlerServiceSpan, + "InstrumentationSpan", + ()=>InstrumentationSpan, + "LoadComponentsSpan", + ()=>LoadComponentsSpan, + "LogSpanAllowList", + ()=>LogSpanAllowList, + "MiddlewareSpan", + ()=>MiddlewareSpan, + "NextNodeServerSpan", + ()=>NextNodeServerSpan, + "NextServerSpan", + ()=>NextServerSpan, + "NextVanillaSpanAllowlist", + ()=>NextVanillaSpanAllowlist, + "NodeSpan", + ()=>NodeSpan, + "RenderSpan", + ()=>RenderSpan, + "ResolveMetadataSpan", + ()=>ResolveMetadataSpan, + "RouteModuleSpan", + ()=>RouteModuleSpan, + "RouterSpan", + ()=>RouterSpan, + "StartServerSpan", + ()=>StartServerSpan +]); +/** + * Contains predefined constants for the trace span name in next/server. + * + * Currently, next/server/tracer is internal implementation only for tracking + * next.js's implementation only with known span names defined here. + **/ // eslint typescript has a bug with TS enums +var BaseServerSpan = /*#__PURE__*/ function(BaseServerSpan) { + BaseServerSpan["handleRequest"] = "BaseServer.handleRequest"; + BaseServerSpan["run"] = "BaseServer.run"; + BaseServerSpan["pipe"] = "BaseServer.pipe"; + BaseServerSpan["getStaticHTML"] = "BaseServer.getStaticHTML"; + BaseServerSpan["render"] = "BaseServer.render"; + BaseServerSpan["renderToResponseWithComponents"] = "BaseServer.renderToResponseWithComponents"; + BaseServerSpan["renderToResponse"] = "BaseServer.renderToResponse"; + BaseServerSpan["renderToHTML"] = "BaseServer.renderToHTML"; + BaseServerSpan["renderError"] = "BaseServer.renderError"; + BaseServerSpan["renderErrorToResponse"] = "BaseServer.renderErrorToResponse"; + BaseServerSpan["renderErrorToHTML"] = "BaseServer.renderErrorToHTML"; + BaseServerSpan["render404"] = "BaseServer.render404"; + return BaseServerSpan; +}(BaseServerSpan || {}); +var LoadComponentsSpan = /*#__PURE__*/ function(LoadComponentsSpan) { + LoadComponentsSpan["loadDefaultErrorComponents"] = "LoadComponents.loadDefaultErrorComponents"; + LoadComponentsSpan["loadComponents"] = "LoadComponents.loadComponents"; + LoadComponentsSpan["loadRouteModule"] = "LoadComponents.loadRouteModule"; + return LoadComponentsSpan; +}(LoadComponentsSpan || {}); +var InstrumentationSpan = /*#__PURE__*/ function(InstrumentationSpan) { + InstrumentationSpan["loadModule"] = "Instrumentation.loadModule"; + InstrumentationSpan["register"] = "Instrumentation.register"; + return InstrumentationSpan; +}(InstrumentationSpan || {}); +var NextServerSpan = /*#__PURE__*/ function(NextServerSpan) { + NextServerSpan["getRequestHandler"] = "NextServer.getRequestHandler"; + NextServerSpan["getRequestHandlerWithMetadata"] = "NextServer.getRequestHandlerWithMetadata"; + NextServerSpan["getServer"] = "NextServer.getServer"; + NextServerSpan["getServerRequestHandler"] = "NextServer.getServerRequestHandler"; + NextServerSpan["createServer"] = "createServer.createServer"; + return NextServerSpan; +}(NextServerSpan || {}); +var NextNodeServerSpan = /*#__PURE__*/ function(NextNodeServerSpan) { + NextNodeServerSpan["compression"] = "NextNodeServer.compression"; + NextNodeServerSpan["getBuildId"] = "NextNodeServer.getBuildId"; + NextNodeServerSpan["createComponentTree"] = "NextNodeServer.createComponentTree"; + NextNodeServerSpan["clientComponentLoading"] = "NextNodeServer.clientComponentLoading"; + NextNodeServerSpan["getLayoutOrPageModule"] = "NextNodeServer.getLayoutOrPageModule"; + NextNodeServerSpan["generateStaticRoutes"] = "NextNodeServer.generateStaticRoutes"; + NextNodeServerSpan["generateFsStaticRoutes"] = "NextNodeServer.generateFsStaticRoutes"; + NextNodeServerSpan["generatePublicRoutes"] = "NextNodeServer.generatePublicRoutes"; + NextNodeServerSpan["generateImageRoutes"] = "NextNodeServer.generateImageRoutes.route"; + NextNodeServerSpan["sendRenderResult"] = "NextNodeServer.sendRenderResult"; + NextNodeServerSpan["proxyRequest"] = "NextNodeServer.proxyRequest"; + NextNodeServerSpan["runApi"] = "NextNodeServer.runApi"; + NextNodeServerSpan["render"] = "NextNodeServer.render"; + NextNodeServerSpan["renderHTML"] = "NextNodeServer.renderHTML"; + NextNodeServerSpan["imageOptimizer"] = "NextNodeServer.imageOptimizer"; + NextNodeServerSpan["getPagePath"] = "NextNodeServer.getPagePath"; + NextNodeServerSpan["getRoutesManifest"] = "NextNodeServer.getRoutesManifest"; + NextNodeServerSpan["findPageComponents"] = "NextNodeServer.findPageComponents"; + NextNodeServerSpan["getFontManifest"] = "NextNodeServer.getFontManifest"; + NextNodeServerSpan["getServerComponentManifest"] = "NextNodeServer.getServerComponentManifest"; + NextNodeServerSpan["getRequestHandler"] = "NextNodeServer.getRequestHandler"; + NextNodeServerSpan["renderToHTML"] = "NextNodeServer.renderToHTML"; + NextNodeServerSpan["renderError"] = "NextNodeServer.renderError"; + NextNodeServerSpan["renderErrorToHTML"] = "NextNodeServer.renderErrorToHTML"; + NextNodeServerSpan["render404"] = "NextNodeServer.render404"; + NextNodeServerSpan["startResponse"] = "NextNodeServer.startResponse"; + // nested inner span, does not require parent scope name + NextNodeServerSpan["route"] = "route"; + NextNodeServerSpan["onProxyReq"] = "onProxyReq"; + NextNodeServerSpan["apiResolver"] = "apiResolver"; + NextNodeServerSpan["internalFetch"] = "internalFetch"; + return NextNodeServerSpan; +}(NextNodeServerSpan || {}); +var StartServerSpan = /*#__PURE__*/ function(StartServerSpan) { + StartServerSpan["startServer"] = "startServer.startServer"; + return StartServerSpan; +}(StartServerSpan || {}); +var RenderSpan = /*#__PURE__*/ function(RenderSpan) { + RenderSpan["getServerSideProps"] = "Render.getServerSideProps"; + RenderSpan["getStaticProps"] = "Render.getStaticProps"; + RenderSpan["renderToString"] = "Render.renderToString"; + RenderSpan["renderDocument"] = "Render.renderDocument"; + RenderSpan["createBodyResult"] = "Render.createBodyResult"; + return RenderSpan; +}(RenderSpan || {}); +var AppRenderSpan = /*#__PURE__*/ function(AppRenderSpan) { + AppRenderSpan["renderToString"] = "AppRender.renderToString"; + AppRenderSpan["renderToReadableStream"] = "AppRender.renderToReadableStream"; + AppRenderSpan["getBodyResult"] = "AppRender.getBodyResult"; + AppRenderSpan["fetch"] = "AppRender.fetch"; + AppRenderSpan["waitShellReady"] = "AppRender.waitShellReady"; + AppRenderSpan["renderToNodeFizzStream"] = "AppRender.renderToNodeFizzStream"; + AppRenderSpan["instantInsights"] = "AppRender.instantInsights"; + AppRenderSpan["instantInsightsPrepareValidation"] = "AppRender.instantInsights.prepareValidation"; + AppRenderSpan["instantInsightsRunValidation"] = "AppRender.instantInsights.runValidation"; + return AppRenderSpan; +}(AppRenderSpan || {}); +var DevBundlerServiceSpan = /*#__PURE__*/ function(DevBundlerServiceSpan) { + DevBundlerServiceSpan["ensurePage"] = "DevBundlerService.ensurePage"; + return DevBundlerServiceSpan; +}(DevBundlerServiceSpan || {}); +var RouterSpan = /*#__PURE__*/ function(RouterSpan) { + RouterSpan["executeRoute"] = "Router.executeRoute"; + return RouterSpan; +}(RouterSpan || {}); +var NodeSpan = /*#__PURE__*/ function(NodeSpan) { + NodeSpan["runHandler"] = "Node.runHandler"; + return NodeSpan; +}(NodeSpan || {}); +var AppRouteRouteHandlersSpan = /*#__PURE__*/ function(AppRouteRouteHandlersSpan) { + AppRouteRouteHandlersSpan["runHandler"] = "AppRouteRouteHandlers.runHandler"; + return AppRouteRouteHandlersSpan; +}(AppRouteRouteHandlersSpan || {}); +var AppRouteRouteModuleSpan = /*#__PURE__*/ function(AppRouteRouteModuleSpan) { + AppRouteRouteModuleSpan["loadUserland"] = "AppRouteRouteModule.loadUserland"; + return AppRouteRouteModuleSpan; +}(AppRouteRouteModuleSpan || {}); +var RouteModuleSpan = /*#__PURE__*/ function(RouteModuleSpan) { + RouteModuleSpan["prepare"] = "RouteModule.prepare"; + RouteModuleSpan["loadManifests"] = "RouteModule.loadManifests"; + return RouteModuleSpan; +}(RouteModuleSpan || {}); +var ResolveMetadataSpan = /*#__PURE__*/ function(ResolveMetadataSpan) { + ResolveMetadataSpan["generateMetadata"] = "ResolveMetadata.generateMetadata"; + ResolveMetadataSpan["generateViewport"] = "ResolveMetadata.generateViewport"; + return ResolveMetadataSpan; +}(ResolveMetadataSpan || {}); +var MiddlewareSpan = /*#__PURE__*/ function(MiddlewareSpan) { + MiddlewareSpan["execute"] = "Middleware.execute"; + return MiddlewareSpan; +}(MiddlewareSpan || {}); +const NextVanillaSpanAllowlist = new Set([ + "Middleware.execute", + "BaseServer.handleRequest", + "Render.getServerSideProps", + "Render.getStaticProps", + "AppRender.fetch", + "AppRender.getBodyResult", + "LoadComponents.loadRouteModule", + "Render.renderDocument", + "Node.runHandler", + "AppRouteRouteHandlers.runHandler", + "AppRouteRouteModule.loadUserland", + "RouteModule.prepare", + "Instrumentation.loadModule", + "Instrumentation.register", + "ResolveMetadata.generateMetadata", + "ResolveMetadata.generateViewport", + "NextNodeServer.createComponentTree", + "NextNodeServer.findPageComponents", + "NextNodeServer.getLayoutOrPageModule", + "NextNodeServer.startResponse", + "NextNodeServer.clientComponentLoading" +]); +const LogSpanAllowList = new Set([ + "NextNodeServer.findPageComponents", + "NextNodeServer.createComponentTree", + "NextNodeServer.clientComponentLoading" +]); +; +}), +"[project]/node_modules/next/dist/esm/server/lib/trace/request-insights-identity.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getRequestInsightsIdentity", + ()=>getRequestInsightsIdentity, + "runWithRequestInsightsIdentity", + ()=>runWithRequestInsightsIdentity +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$async$2d$local$2d$storage$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/async-local-storage.js [app-route] (ecmascript)"); +; +// This storage covers the part of BaseServer request handling that runs before +// App Render creates workAsyncStorage. Once available, workStore remains the +// primary identity source for locally recorded spans. +function getRequestInsightsIdentityStorage() { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$async$2d$local$2d$storage$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getOrCreateGlobalAsyncLocalStorage"])('request-insights-identity-storage'); +} +function runWithRequestInsightsIdentity(identity, fn) { + return getRequestInsightsIdentityStorage().run(identity, fn); +} +function getRequestInsightsIdentity() { + return getRequestInsightsIdentityStorage().getStore(); +} +}), +"[project]/node_modules/next/dist/esm/server/lib/trace/request-insights.js [app-route] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "clearRequestInsightsForTest", + ()=>clearRequestInsightsForTest, + "getRequestInsightsSnapshot", + ()=>getRequestInsightsSnapshot, + "recordRequestInsightFetch", + ()=>recordRequestInsightFetch, + "recordRequestInsightSpan", + ()=>recordRequestInsightSpan, + "subscribeRequestInsights", + ()=>subscribeRequestInsights +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$request$2d$insights$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/request-insights.js [app-route] (ecmascript)"); +; +; +const MAX_REQUEST_INSIGHTS = 100; +const REQUEST_INSIGHTS_STORE_KEY = Symbol.for('@next/request-insights-store'); +const CLIENT_COMPONENT_LOADING_SPAN_TYPE = 'NextNodeServer.clientComponentLoading'; +const REDACTED_VALUE = 'redacted'; +const SAFE_SPAN_ATTRIBUTE_KEYS = new Set([ + 'http.method', + 'http.route', + 'http.status_code', + 'http.url', + 'net.peer.name', + 'net.peer.port', + 'next.fetch.cache_reason', + 'next.fetch.cache_status', + 'next.fetch.idx', + 'next.route', + 'next.rsc', + 'next.segment', + 'next.span_category', + 'next.span_name', + 'next.span_type' +]); +const SENSITIVE_PARAM_NAME_RE = /(?:^|[_-])(?:access[_-]?token|api[_-]?key|auth|authorization|code|cookie|credential|id[_-]?token|jwt|key|password|secret|session|signature|sig|token)(?:$|[_-])/i; +class InMemoryRequestInsightsStore { + recordSpan(span) { + var _span_attributes; + if (!span.requestId) { + return; + } + const insight = this.getOrCreateRequest({ + requestId: span.requestId, + kind: span.requestInsightKind, + htmlRequestId: span.htmlRequestId, + route: span.route, + url: span.url + }, span.startTime ?? span.timestamp); + const spanStartTime = span.startTime ?? span.timestamp; + insight.htmlRequestId = span.htmlRequestId ?? insight.htmlRequestId; + insight.route = insight.route ?? span.route; + insight.url = insight.url ?? sanitizeUrl(span.url); + this.updateTiming(insight, spanStartTime, span.durationMs, ((_span_attributes = span.attributes) == null ? void 0 : _span_attributes['next.span_type']) === 'BaseServer.handleRequest'); + insight.status = insight.status === 'error' || span.status === 'error' ? 'error' : span.status === 'ok' ? 'ok' : insight.status; + insight.spans.push({ + name: span.name, + startTime: spanStartTime, + durationMs: span.durationMs, + status: span.status, + traceId: span.traceId, + spanId: span.spanId, + parentSpanId: span.parentSpanId, + attributes: sanitizeSpanAttributes(span.attributes), + links: sanitizeSpanLinks(span.links), + events: sanitizeSpanEvents(span.events), + error: span.error + }); + const fetch = getFetchInsight(span); + if (fetch) { + this.recordFetchForInsight(insight, fetch); + } + this.notify(insight); + } + recordFetch(identity, fetch) { + if (!identity.requestId) { + return; + } + const fetchStartTime = fetch.startTime ?? getCurrentTimestamp(); + const insight = this.getOrCreateRequest(identity, fetchStartTime); + this.updateTiming(insight, fetchStartTime, fetch.durationMs, false); + this.recordFetchForInsight(insight, sanitizeFetchInsight(fetch)); + this.notify(insight); + } + getSnapshot() { + return { + requests: this.requestOrder.map((insightKey)=>this.requests.get(insightKey)).filter((request)=>request !== undefined) + }; + } + subscribe(listener) { + this.listeners.add(listener); + return ()=>{ + this.listeners.delete(listener); + }; + } + clear() { + this.requests.clear(); + this.requestTimings.clear(); + this.requestOrder.length = 0; + } + updateTiming(insight, startTime, durationMs, isRequestSpan) { + const insightKey = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$request$2d$insights$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestInsightKey"])(insight); + if (isRequestSpan && durationMs !== undefined) { + const requestTiming = { + startTime, + durationMs + }; + this.requestTimings.set(insightKey, requestTiming); + insight.startTime = requestTiming.startTime; + insight.durationMs = requestTiming.durationMs; + return; + } + const requestTiming = this.requestTimings.get(insightKey); + if (requestTiming) { + insight.startTime = requestTiming.startTime; + insight.durationMs = requestTiming.durationMs; + return; + } + const endTime = startTime + (durationMs ?? 0); + const requestEndTime = insight.startTime + (insight.durationMs ?? 0); + insight.startTime = Math.min(insight.startTime, startTime); + insight.durationMs = Math.max(requestEndTime, endTime) - insight.startTime; + } + notify(insight) { + for (const listener of this.listeners){ + listener(insight); + } + } + getOrCreateRequest(identity, startTime) { + const requestId = identity.requestId; + const insightKey = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$request$2d$insights$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestInsightKey"])({ + requestId, + kind: identity.kind + }); + let insight = this.requests.get(insightKey); + if (!insight) { + insight = { + requestId, + kind: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$request$2d$insights$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestInsightKind"])(identity), + htmlRequestId: identity.htmlRequestId ?? requestId, + route: identity.route, + url: sanitizeUrl(identity.url), + startTime, + status: 'pending', + spans: [], + fetches: [] + }; + this.requests.set(insightKey, insight); + this.requestOrder.push(insightKey); + this.trim(); + } + insight.htmlRequestId = identity.htmlRequestId ?? insight.htmlRequestId; + insight.route = insight.route ?? identity.route; + insight.url = insight.url ?? sanitizeUrl(identity.url); + insight.startTime = Math.min(insight.startTime, startTime); + return insight; + } + recordFetchForInsight(insight, fetch) { + if (insight.fetches.some((existingFetch)=>existingFetch.url === fetch.url && (existingFetch.index !== undefined && fetch.index !== undefined ? existingFetch.index === fetch.index : existingFetch.startTime === fetch.startTime))) { + return; + } + insight.fetches.push(sanitizeFetchInsight(fetch)); + } + trim() { + while(this.requestOrder.length > MAX_REQUEST_INSIGHTS){ + const insightKey = this.requestOrder.shift(); + if (insightKey) { + this.requests.delete(insightKey); + this.requestTimings.delete(insightKey); + } + } + } + constructor(){ + this.requests = new Map(); + this.requestTimings = new Map(); + this.requestOrder = []; + this.listeners = new Set(); + } +} +function recordRequestInsightSpan(span) { + var _span_attributes; + if (((_span_attributes = span.attributes) == null ? void 0 : _span_attributes['next.span_type']) === CLIENT_COMPONENT_LOADING_SPAN_TYPE) { + return; + } + getRequestInsightsStore().recordSpan(span); +} +function recordRequestInsightFetch(identity, fetch) { + getRequestInsightsStore().recordFetch(identity, fetch); +} +function getRequestInsightsSnapshot() { + return getRequestInsightsStore().getSnapshot(); +} +function subscribeRequestInsights(listener) { + return getRequestInsightsStore().subscribe(listener); +} +function clearRequestInsightsForTest() { + getRequestInsightsStore().clear(); +} +function getRequestInsightsStore() { + const globalStore = globalThis; + return globalStore[REQUEST_INSIGHTS_STORE_KEY] ??= new InMemoryRequestInsightsStore(); +} +function getFetchInsight(span) { + const attributes = span.attributes; + if (!attributes || attributes['next.span_type'] !== 'AppRender.fetch') { + return null; + } + return { + url: sanitizeUrl(getStringAttribute(attributes['http.url']) ?? span.url), + method: getStringAttribute(attributes['http.method']), + statusCode: getNumberAttribute(attributes['http.status_code']), + startTime: span.startTime ?? span.timestamp, + durationMs: span.durationMs, + cacheStatus: getStringAttribute(attributes['next.fetch.cache_status']), + cacheReason: getStringAttribute(attributes['next.fetch.cache_reason']), + index: getNumberAttribute(attributes['next.fetch.idx']) + }; +} +function sanitizeFetchInsight(fetch) { + return { + ...fetch, + url: sanitizeUrl(fetch.url) + }; +} +function getCurrentTimestamp() { + return performance.timeOrigin + performance.now(); +} +function sanitizeSpanAttributes(attributes) { + if (!attributes) { + return undefined; + } + const sanitized = {}; + for (const [key, value] of Object.entries(attributes)){ + if (!SAFE_SPAN_ATTRIBUTE_KEYS.has(key)) { + continue; + } + sanitized[key] = key === 'http.url' ? sanitizeUrlAttribute(value) : value; + } + return Object.keys(sanitized).length > 0 ? sanitized : undefined; +} +function sanitizeSpanEvents(events) { + return events == null ? void 0 : events.map((event)=>({ + ...event, + attributes: sanitizeSpanAttributes(event.attributes) + })); +} +function sanitizeSpanLinks(links) { + return links == null ? void 0 : links.map((link)=>({ + ...link, + attributes: sanitizeSpanAttributes(link.attributes) + })); +} +function sanitizeUrlAttribute(value) { + return typeof value === 'string' ? sanitizeUrl(value) ?? '' : value; +} +function sanitizeUrl(value) { + if (!value) { + return value; + } + const isRelativeUrl = value.startsWith('/'); + try { + const url = isRelativeUrl ? new URL(value, 'http://n') : new URL(value); + url.username = ''; + url.password = ''; + for (const name of Array.from(url.searchParams.keys())){ + if (SENSITIVE_PARAM_NAME_RE.test(name)) { + url.searchParams.set(name, REDACTED_VALUE); + } + } + return isRelativeUrl ? `${url.pathname}${url.search}${url.hash}` : url.href; + } catch { + return value; + } +} +function getStringAttribute(value) { + return typeof value === 'string' ? value : undefined; +} +function getNumberAttribute(value) { + return typeof value === 'number' ? value : undefined; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/trace/span-store.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "isLocalSpanRecordingEnabled", + ()=>isLocalSpanRecordingEnabled, + "isRequestInsightsEnabled", + ()=>isRequestInsightsEnabled, + "recordSpan", + ()=>recordSpan, + "setSpanRecorderForTest", + ()=>setSpanRecorderForTest +]); +let spanRecorderForTest; +function recordSpan(record) { + if (!isLocalSpanRecordingEnabled()) { + return; + } + const spanRecord = { + timestamp: getCurrentTimestamp(), + ...record + }; + spanRecorderForTest == null ? void 0 : spanRecorderForTest(spanRecord); + if (isRequestInsightsEnabled() && spanRecord.requestId) //TURBOPACK unreachable + ; +} +function setSpanRecorderForTest(recorder) { + spanRecorderForTest = recorder; +} +function isLocalSpanRecordingEnabled() { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + return spanRecorderForTest !== undefined || isRequestInsightsEnabled(); +} +function isRequestInsightsEnabled() { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + const value = ("TURBOPACK compile-time value", false); + return isEnabledEnvValue(value); +} +function isEnabledEnvValue(value) { + return value === '1' || value === 'true' || value === true; +} +function getCurrentTimestamp() { + return performance.timeOrigin + performance.now(); +} +}), +"[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "BubbledError", + ()=>BubbledError, + "SpanKind", + ()=>SpanKind, + "SpanStatusCode", + ()=>SpanStatusCode, + "getTracer", + ()=>getTracer, + "isBubbledError", + ()=>isBubbledError +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$is$2d$thenable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/is-thenable.js [app-route] (ecmascript)"); +; +; +const NEXT_OTEL_PERFORMANCE_PREFIX = process.env.NEXT_OTEL_PERFORMANCE_PREFIX; +const LOCAL_SPAN_RECORDER_KEY = Symbol.for('@next/local-span-recorder'); +let api; +function getLocalSpanRecorder() { + if ("TURBOPACK compile-time truthy", 1) { + return globalThis[LOCAL_SPAN_RECORDER_KEY]; + } else //TURBOPACK unreachable + ; +} +// we want to allow users to use their own version of @opentelemetry/api if they +// want to, so we try to require it first, and if it fails we fall back to the +// version that is bundled with Next.js +// this is because @opentelemetry/api has to be synced with the version of +// @opentelemetry/tracing that is used, and we don't want to force users to use +// the version that is bundled with Next.js. +// the API is ~stable, so this should be fine +if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable +; +else { + try { + api = __turbopack_context__.r("[externals]/next/dist/compiled/@opentelemetry/api [external] (next/dist/compiled/@opentelemetry/api, cjs)"); + } catch (err) { + api = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/@opentelemetry/api/index.js [app-route] (ecmascript)"); + } +} +const { context, propagation, trace, SpanStatusCode, SpanKind, ROOT_CONTEXT } = api; +class BubbledError extends Error { + constructor(bubble, result){ + super(), this.bubble = bubble, this.result = result; + } +} +function isBubbledError(error) { + if (typeof error !== 'object' || error === null) return false; + return error instanceof BubbledError; +} +const closeSpanWithError = (span, error, endTime)=>{ + if (isBubbledError(error) && error.bubble) { + span.setAttribute('next.bubble', true); + } else { + if (error) { + span.recordException(error); + span.setAttribute('error.type', error.name); + } + span.setStatus({ + code: SpanStatusCode.ERROR, + message: error == null ? void 0 : error.message + }); + } + span.end(endTime); +}; +/** we use this map to propagate attributes from nested spans to the top span */ const rootSpanAttributesStore = new Map(); +const rootSpanIdKey = api.createContextKey('next.rootSpanId'); +let lastSpanId = 0; +const getSpanId = ()=>lastSpanId++; +const clientTraceDataSetter = { + set (carrier, key, value) { + carrier.push({ + key, + value + }); + } +}; +class NextTracerImpl { + /** + * Returns an instance to the trace with configured name. + * Since wrap / trace can be defined in any place prior to actual trace subscriber initialization, + * This should be lazily evaluated. + */ getTracerInstance() { + return trace.getTracer('next.js', "16.4.1"); + } + isOpenTelemetryEnabled() { + var _tracerProvider_getDelegate_constructor, _tracerProvider_getDelegate; + const activeSpan = trace.getSpan(context.active()); + if (activeSpan == null ? void 0 : activeSpan.isRecording()) { + return true; + } + const tracerProvider = trace.getTracerProvider(); + if (!('getDelegate' in tracerProvider)) { + return true; + } + return (tracerProvider.getDelegate == null ? void 0 : (_tracerProvider_getDelegate = tracerProvider.getDelegate.call(tracerProvider)) == null ? void 0 : (_tracerProvider_getDelegate_constructor = _tracerProvider_getDelegate.constructor) == null ? void 0 : _tracerProvider_getDelegate_constructor.name) !== 'NoopTracerProvider'; + } + getContext() { + return context; + } + getTracePropagationData() { + const activeContext = context.active(); + const entries = []; + propagation.inject(activeContext, entries, clientTraceDataSetter); + return entries; + } + getActiveScopeSpan() { + const localSpanRecorder = getLocalSpanRecorder(); + const activeLocalSpan = localSpanRecorder == null ? void 0 : localSpanRecorder.getActiveLocalSpan(); + if (activeLocalSpan && (localSpanRecorder == null ? void 0 : localSpanRecorder.isOpenTelemetryIsolatedSpan(activeLocalSpan))) { + return activeLocalSpan; + } + const activeSpan = trace.getSpan(context.active()); + if (activeSpan || !("TURBOPACK compile-time value", "1")) { + return activeSpan; + } + return activeLocalSpan; + } + /** + * Run `fn` with the active span cleared, so spans created inside become new + * roots (or parent to incoming propagated context). Used for in-process + * Node.js middleware so its span is a sibling of the request span, matching + * edge middleware which runs in a detached sandbox. + */ runWithDetachedContext(fn) { + if (!NEXT_OTEL_PERFORMANCE_PREFIX && !this.isOpenTelemetryEnabled()) { + return fn(); + } + return context.with(ROOT_CONTEXT, fn); + } + withPropagatedContext(carrier, fn, getter, force = false) { + const activeContext = context.active(); + if (!NEXT_OTEL_PERFORMANCE_PREFIX && !this.isOpenTelemetryEnabled() && !trace.getSpanContext(activeContext)) { + return fn(); + } + if (force) { + const remoteContext = propagation.extract(ROOT_CONTEXT, carrier, getter); + if (trace.getSpanContext(remoteContext)) { + return context.with(remoteContext, fn); + } + // Preserve the current active span while still merging any extracted + // baggage/context values from the carrier. + const mergedContext = propagation.extract(activeContext, carrier, getter); + return context.with(mergedContext, fn); + } + if (trace.getSpanContext(activeContext)) { + // Active span is already set, too late to propagate. + return fn(); + } + const remoteContext = propagation.extract(activeContext, carrier, getter); + return context.with(remoteContext, fn); + } + trace(...args) { + const [type, fnOrOptions, fnOrEmpty] = args; + const tracingEnabled = Boolean(NEXT_OTEL_PERFORMANCE_PREFIX) || this.isOpenTelemetryEnabled(); + const localSpanRecorder = getLocalSpanRecorder(); + const localSpanRecordingEnabled = (localSpanRecorder == null ? void 0 : localSpanRecorder.isLocalSpanRecordingEnabled()) ?? false; + if (!tracingEnabled && !localSpanRecordingEnabled) { + return typeof fnOrOptions === 'function' ? fnOrOptions() : fnOrEmpty(); + } + // coerce options form overload + const { fn, options } = typeof fnOrOptions === 'function' ? { + fn: fnOrOptions, + options: {} + } : { + fn: fnOrEmpty, + options: { + ...fnOrOptions + } + }; + const spanName = options.spanName ?? type; + const parentSpan = options.parentSpan ?? this.getActiveScopeSpan(); + const isolatedParentSpan = parentSpan && (localSpanRecorder == null ? void 0 : localSpanRecorder.isOpenTelemetryIsolatedSpan(parentSpan)) ? parentSpan : undefined; + const shouldDelegateSpan = !isolatedParentSpan && (__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextVanillaSpanAllowlist"].has(type) || process.env.NEXT_OTEL_VERBOSE === '1'); + const shouldTraceSpan = shouldDelegateSpan || ((localSpanRecorder == null ? void 0 : localSpanRecorder.isRequestInsightsEnabled()) ?? false); + if (!shouldTraceSpan || options.hideSpan) { + return fn(); + } + // Trying to get active scoped span to assign parent. If option specifies parent span manually, will try to use it. + let spanContext = isolatedParentSpan ? context.active() : this.getSpanContext(parentSpan); + if (!spanContext) { + spanContext = (context == null ? void 0 : context.active()) ?? ROOT_CONTEXT; + } + // Check if there's already a root span in the store for this trace + // We are intentionally not checking whether there is an active context + // from outside of nextjs to ensure that we can provide the same level + // of telemetry when using a custom server + const existingRootSpanId = spanContext.getValue(rootSpanIdKey); + const isRootSpan = typeof existingRootSpanId !== 'number' || !rootSpanAttributesStore.has(existingRootSpanId); + const spanId = getSpanId(); + options.attributes = { + 'next.span_category': 'nextjs', + 'next.span_name': spanName, + 'next.span_type': type, + ...options.attributes + }; + return context.with(spanContext.setValue(rootSpanIdKey, spanId), ()=>this.runWithActiveSpan(spanName, options, spanContext, tracingEnabled && shouldDelegateSpan, localSpanRecordingEnabled, isolatedParentSpan, (span)=>{ + let startTime; + if (NEXT_OTEL_PERFORMANCE_PREFIX && type && __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["LogSpanAllowList"].has(type)) { + startTime = 'performance' in globalThis && 'measure' in performance ? globalThis.performance.now() : undefined; + } + let cleanedUp = false; + const onCleanup = ()=>{ + if (cleanedUp) return; + cleanedUp = true; + rootSpanAttributesStore.delete(spanId); + if (startTime) { + performance.measure(`${NEXT_OTEL_PERFORMANCE_PREFIX}:next-${(type.split('.').pop() || '').replace(/[A-Z]/g, (match)=>'-' + match.toLowerCase())}`, { + start: startTime, + end: performance.now() + }); + } + }; + if (isRootSpan) { + rootSpanAttributesStore.set(spanId, new Map(Object.entries(options.attributes ?? {}))); + } + if (fn.length > 1) { + try { + return fn(span, (err)=>{ + if (err) { + closeSpanWithError(span, err, options.endTime); + } else { + span.end(options.endTime); + } + }); + } catch (err) { + closeSpanWithError(span, err, options.endTime); + throw err; + } finally{ + onCleanup(); + } + } + try { + const result = fn(span); + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$is$2d$thenable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isThenable"])(result)) { + // If there's error make sure it throws + return result.then((res)=>{ + span.end(options.endTime); + // Need to pass down the promise result, + // it could be react stream response with error { error, stream } + return res; + }).catch((err)=>{ + closeSpanWithError(span, err, options.endTime); + throw err; + }).finally(onCleanup); + } else { + span.end(options.endTime); + onCleanup(); + } + return result; + } catch (err) { + closeSpanWithError(span, err, options.endTime); + onCleanup(); + throw err; + } + })); + } + runWithActiveSpan(spanName, options, parentContext, tracingEnabled, localSpanRecordingEnabled, isolatedParentSpan, fn) { + if (tracingEnabled) { + return this.getTracerInstance().startActiveSpan(spanName, options, (span)=>fn(localSpanRecordingEnabled ? this.createLocalRecordingSpan(spanName, options, parentContext, span, isolatedParentSpan) : span)); + } + const span = this.createLocalRecordingSpan(spanName, options, parentContext, undefined, isolatedParentSpan); + const localSpanRecorder = getLocalSpanRecorder(); + return localSpanRecorder.withLocalSpan(span, ()=>localSpanRecorder.isOpenTelemetryIsolatedSpan(span) ? fn(span) : context.with(trace.setSpan(context.active(), span), fn, undefined, span)); + } + createLocalRecordingSpan(name, options, parentContext, delegateSpan, isolatedParentSpan) { + const parentSpanContext = (isolatedParentSpan == null ? void 0 : isolatedParentSpan.spanContext()) ?? trace.getSpanContext(parentContext); + const delegateSpanContext = delegateSpan == null ? void 0 : delegateSpan.spanContext(); + return getLocalSpanRecorder().createLocalSpan({ + name, + attributes: options.attributes, + links: options.links, + startTime: options.startTime, + delegateSpan, + traceId: (delegateSpanContext == null ? void 0 : delegateSpanContext.traceId) ?? (parentSpanContext == null ? void 0 : parentSpanContext.traceId), + spanId: delegateSpanContext == null ? void 0 : delegateSpanContext.spanId, + parentSpanId: parentSpanContext == null ? void 0 : parentSpanContext.spanId, + isolateOpenTelemetry: isolatedParentSpan !== undefined + }); + } + wrap(...args) { + const tracer = this; + const [name, options, fn] = args.length === 3 ? args : [ + args[0], + {}, + args[1] + ]; + if (!__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextVanillaSpanAllowlist"].has(name) && process.env.NEXT_OTEL_VERBOSE !== '1' && !("TURBOPACK compile-time value", "1")) //TURBOPACK unreachable + ; + return function() { + let optionsObj = options; + if (typeof optionsObj === 'function' && typeof fn === 'function') { + optionsObj = optionsObj.apply(this, arguments); + } + const lastArgId = arguments.length - 1; + const cb = arguments[lastArgId]; + if (typeof cb === 'function') { + const scopeBoundCb = tracer.getContext().bind(context.active(), cb); + return tracer.trace(name, optionsObj, (_span, done)=>{ + arguments[lastArgId] = function(err) { + done == null ? void 0 : done(err); + return scopeBoundCb.apply(this, arguments); + }; + return fn.apply(this, arguments); + }); + } else { + return tracer.trace(name, optionsObj, ()=>fn.apply(this, arguments)); + } + }; + } + startSpan(...args) { + const [type, passedOptions] = args; + const options = passedOptions ? { + ...passedOptions, + attributes: { + 'next.span_category': 'nextjs', + ...passedOptions.attributes + } + } : { + attributes: { + 'next.span_category': 'nextjs' + } + }; + const localSpanRecorder = getLocalSpanRecorder(); + const parentSpan = options.parentSpan ?? this.getActiveScopeSpan(); + const isolatedParentSpan = parentSpan && (localSpanRecorder == null ? void 0 : localSpanRecorder.isOpenTelemetryIsolatedSpan(parentSpan)) ? parentSpan : undefined; + const parentContext = (isolatedParentSpan ? undefined : this.getSpanContext(parentSpan)) ?? context.active(); + const localSpanRecordingEnabled = (localSpanRecorder == null ? void 0 : localSpanRecorder.isLocalSpanRecordingEnabled()) ?? false; + if (!localSpanRecordingEnabled) { + return this.getTracerInstance().startSpan(type, options, parentContext); + } + const delegateSpan = !isolatedParentSpan && this.isOpenTelemetryEnabled() ? this.getTracerInstance().startSpan(type, options, parentContext) : undefined; + return this.createLocalRecordingSpan(type, options, parentContext, delegateSpan, isolatedParentSpan); + } + getSpanContext(parentSpan) { + const spanContext = parentSpan ? trace.setSpan(context.active(), parentSpan) : undefined; + return spanContext; + } + getRootSpanAttributes() { + const spanId = context.active().getValue(rootSpanIdKey); + return rootSpanAttributesStore.get(spanId); + } + setRootSpanAttribute(key, value) { + const spanId = context.active().getValue(rootSpanIdKey); + const attributes = rootSpanAttributesStore.get(spanId); + if (attributes && !attributes.has(key)) { + attributes.set(key, value); + } + if ("TURBOPACK compile-time truthy", 1) { + var _getLocalSpanRecorder; + const localSpan = (_getLocalSpanRecorder = getLocalSpanRecorder()) == null ? void 0 : _getLocalSpanRecorder.getActiveLocalSpan(); + if (localSpan) { + localSpan.setAttribute(key, value); + } + } + } + withSpan(span, fn) { + const recorder = getLocalSpanRecorder(); + if (recorder == null ? void 0 : recorder.isLocalRecordingSpan(span)) { + return recorder.withLocalSpan(span, ()=>recorder.isOpenTelemetryIsolatedSpan(span) ? fn() : context.with(trace.setSpan(context.active(), span), fn)); + } + return context.with(trace.setSpan(context.active(), span), fn); + } +} +const getTracer = (()=>{ + const tracer = new NextTracerImpl(); + return ()=>tracer; +})(); +; +}), +"[project]/node_modules/next/dist/esm/server/normalizers/built/app/app-pathname-normalizer.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "AppPathnameNormalizer", + ()=>AppPathnameNormalizer, + "DevAppPathnameNormalizer", + ()=>DevAppPathnameNormalizer +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$normalizers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/normalizers/normalizers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$wrap$2d$normalizer$2d$fn$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/normalizers/wrap-normalizer-fn.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$underscore$2d$normalizer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/normalizers/underscore-normalizer.js [app-route] (ecmascript)"); +; +; +; +; +class AppPathnameNormalizer extends __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$normalizers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["Normalizers"] { + constructor(){ + super([ + // The pathname to match should have the trailing `/page` and other route + // group information stripped from it. + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$wrap$2d$normalizer$2d$fn$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["wrapNormalizerFn"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeAppPath"]), + // The page should have the `%5F` characters replaced with `_` characters. + new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$underscore$2d$normalizer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["UnderscoreNormalizer"]() + ]); + } + normalize(page) { + return super.normalize(page); + } +} +class DevAppPathnameNormalizer extends __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$normalizers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["Normalizers"] { + constructor(pageNormalizer){ + super([ + // This should normalize the filename to a page. + pageNormalizer, + // Normalize the app page to a pathname. + new AppPathnameNormalizer() + ]); + } + normalize(filename) { + return super.normalize(filename); + } +} +}), +"[project]/node_modules/next/dist/esm/server/normalizers/normalizers.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Normalizers combines many normalizers into a single normalizer interface that + * will normalize the inputted pathname with each normalizer in order. + */ __turbopack_context__.s([ + "Normalizers", + ()=>Normalizers +]); +class Normalizers { + constructor(normalizers = []){ + this.normalizers = normalizers; + } + push(normalizer) { + this.normalizers.push(normalizer); + } + normalize(pathname) { + return this.normalizers.reduce((normalized, normalizer)=>normalizer.normalize(normalized), pathname); + } +} +}), +"[project]/node_modules/next/dist/esm/server/normalizers/underscore-normalizer.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * UnderscoreNormalizer replaces all instances of %5F with _. + */ __turbopack_context__.s([ + "UnderscoreNormalizer", + ()=>UnderscoreNormalizer +]); +class UnderscoreNormalizer { + normalize(pathname) { + return pathname.replace(/%5F/g, '_'); + } +} +}), +"[project]/node_modules/next/dist/esm/server/normalizers/wrap-normalizer-fn.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "wrapNormalizerFn", + ()=>wrapNormalizerFn +]); +function wrapNormalizerFn(fn) { + return { + normalize: fn + }; +} +}), +"[project]/node_modules/next/dist/esm/server/pipe-readable.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "isAbortError", + ()=>isAbortError, + "pipeNodeReadableToNodeResponse", + ()=>pipeNodeReadableToNodeResponse, + "pipeToNodeResponse", + ()=>pipeToNodeResponse +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/next-request.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)"); +; +; +; +; +function isAbortError(e) { + return (e == null ? void 0 : e.name) === 'AbortError' || (e == null ? void 0 : e.name) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ResponseAbortedName"]; +} +const HAS_CLIENT_COMPONENT_METRICS_ENABLED = 'performance' in globalThis && process.env.NEXT_OTEL_PERFORMANCE_PREFIX; +function createWriterFromResponse(res, waitUntilForEnd, clientComponentLoadTracker) { + let started = false; + // Create a promise that will resolve once the response has drained. See + // https://nodejs.org/api/stream.html#stream_event_drain + let drained = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + function onDrain() { + drained.resolve(); + } + res.on('drain', onDrain); + // If the finish event fires, it means we shouldn't block and wait for the + // drain event. + res.once('close', ()=>{ + res.off('drain', onDrain); + drained.resolve(); + }); + // Create a promise that will resolve once the response has finished. See + // https://nodejs.org/api/http.html#event-finish_1 + const finished = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + res.once('finish', ()=>{ + finished.resolve(); + }); + // Create a writable stream that will write to the response. + return new WritableStream({ + write: async (chunk)=>{ + // You'd think we'd want to use `start` instead of placing this in `write` + // but this ensures that we don't actually flush the headers until we've + // started writing chunks. + if (!started) { + started = true; + if (HAS_CLIENT_COMPONENT_METRICS_ENABLED) { + const metrics = clientComponentLoadTracker == null ? void 0 : clientComponentLoadTracker.snapshot(); + if (metrics) { + performance.measure(`${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`, { + start: metrics.clientComponentLoadStart, + end: metrics.clientComponentLoadStart + metrics.clientComponentLoadTimes + }); + } + } + res.flushHeaders(); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])().trace(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextNodeServerSpan"].startResponse, { + spanName: 'start response' + }, ()=>undefined); + } + try { + const ok = res.write(chunk); + // Added by the `compression` middleware, this is a function that will + // flush the partially-compressed response to the client. + if ('flush' in res && typeof res.flush === 'function') { + res.flush(); + } + // If the write returns false, it means there's some backpressure, so + // wait until it's streamed before continuing. + if (!ok) { + await drained.promise; + // Reset the drained promise so that we can wait for the next drain event. + drained = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + } + } catch (err) { + res.end(); + throw new Error('failed to write chunk to response', { + cause: err + }); + } + }, + abort: (err)=>{ + if (res.writableFinished) return; + res.destroy(err); + }, + close: async ()=>{ + // if a waitUntil promise was passed, wait for it to resolve before + // ending the response. + if (waitUntilForEnd) { + await waitUntilForEnd; + } + if (res.writableFinished) return; + res.end(); + return finished.promise; + } + }); +} +async function pipeToNodeResponse(readable, res, waitUntilForEnd, clientComponentLoadTracker) { + try { + // If the response has already errored, then just return now. + const { errored, destroyed } = res; + if (errored || destroyed) return; + // Create a new AbortController so that we can abort the readable if the + // client disconnects. + const controller = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createAbortController"])(res); + const writer = createWriterFromResponse(res, waitUntilForEnd, clientComponentLoadTracker); + await readable.pipeTo(writer, { + signal: controller.signal + }); + } catch (err) { + // If this isn't related to an abort error, re-throw it. + if (isAbortError(err)) return; + throw new Error('failed to pipe response', { + cause: err + }); + } +} +async function pipeNodeReadableToNodeResponse(readable, res, waitUntilForEnd, clientComponentLoadTracker) { + try { + const { errored, destroyed } = res; + if (errored || destroyed) return; + let started = false; + const finished = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + // One `drain` listener for the whole response, as in + // `createWriterFromResponse` above. It must not be `res.once('drain')` per + // backpressured write: the `compression` middleware forwards `res.on` to + // its zlib stream but leaves `removeListener` pointing at the response, so + // a `once` listener is never removed from the stream it was added to. Each + // backpressured write would leak one, and past ten Node reports the stream + // as a probable leak via `MaxListenersExceededWarning`. + // + // TODO: the upstream fix for that asymmetry is + // https://github.com/expressjs/compression/pull/153, which intercepts + // `removeListener` so it reaches the zlib stream. It has been open since + // 2019 and is not in upstream 1.8.1; we vendor 1.7.4. If it ever lands and + // we upgrade, `res.off('drain', onDrain)` below would start working with + // compression active and the caveat on the `close` handler could go away. + let paused = false; + const onDrain = ()=>{ + // The listener outlives the readable: `off` below cannot reach the zlib + // stream either, so a late drain can arrive after teardown. + if (!paused || readable.destroyed) return; + paused = false; + readable.resume(); + }; + res.on('drain', onDrain); + res.once('close', ()=>{ + // Only removes the listener when compression is inactive, which is the + // case where it was added to the response itself. Otherwise it lives on + // the zlib stream, which is released with the response. + res.off('drain', onDrain); + readable.destroy(); + finished.resolve(); + }); + readable.on('data', (chunk)=>{ + if (!started) { + started = true; + if ('performance' in globalThis && process.env.NEXT_OTEL_PERFORMANCE_PREFIX) { + const metrics = clientComponentLoadTracker == null ? void 0 : clientComponentLoadTracker.snapshot(); + if (metrics) { + performance.measure(`${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`, { + start: metrics.clientComponentLoadStart, + end: metrics.clientComponentLoadStart + metrics.clientComponentLoadTimes + }); + } + } + res.flushHeaders(); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])().trace(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextNodeServerSpan"].startResponse, { + spanName: 'start response' + }, ()=>undefined); + } + const ok = res.write(chunk); + if ('flush' in res && typeof res.flush === 'function') { + res.flush(); + } + if (!ok) { + paused = true; + readable.pause(); + } + }); + readable.on('end', async ()=>{ + if (waitUntilForEnd) { + await waitUntilForEnd; + } + if (!res.writableFinished) { + res.end(); + } + finished.resolve(); + }); + readable.on('error', (err)=>{ + if (isAbortError(err)) { + finished.resolve(); + return; + } + res.destroy(err); + finished.resolve(); + }); + await finished.promise; + } catch (err) { + if (isAbortError(err)) return; + throw new Error('failed to pipe response', { + cause: err + }); + } +} +}), +"[project]/node_modules/next/dist/esm/server/render-result.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "default", + ()=>RenderResult +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/stream-utils/node-web-streams-helper.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/pipe-readable.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +; +; +; +function isNodeReadable(value) { + return value !== null && typeof value === 'object' && typeof value.pipe === 'function' && typeof value.on === 'function' && !(value instanceof ReadableStream); +} +class RenderResult { + static #_ = /** + * A render result that represents an empty response. This is used to + * represent a response that was not found or was already sent. + */ this.EMPTY = new RenderResult(null, { + metadata: {}, + contentType: null + }); + /** + * Creates a new RenderResult instance from a static response. + * + * @param value the static response value + * @param contentType the content type of the response + * @returns a new RenderResult instance + */ static fromStatic(value, contentType) { + return new RenderResult(value, { + metadata: {}, + contentType + }); + } + constructor(response, { contentType, waitUntil, metadata }){ + this.response = response; + this.contentType = contentType; + this.metadata = metadata; + this.waitUntil = waitUntil; + } + assignMetadata(metadata) { + Object.assign(this.metadata, metadata); + } + /** + * Returns true if the response is null. It can be null if the response was + * not found or was already sent. + */ get isNull() { + return this.response === null; + } + /** + * Returns false if the response is a string. It can be a string if the page + * was prerendered. If it's not, then it was generated dynamically. + */ get isDynamic() { + return typeof this.response !== 'string'; + } + toUnchunkedString(stream = false) { + if (this.response === null) { + // If the response is null, return an empty string. This behavior is + // intentional as we're now providing the `RenderResult.EMPTY` value. + return ''; + } + if (typeof this.response !== 'string') { + if (!stream) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('dynamic responses cannot be unchunked. This is a bug in Next.js'); + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["streamToString"])(this.readable); + } + return this.response; + } + /** + * Returns a readable stream of the response. + */ get readable() { + if (this.response === null) { + // If the response is null, return an empty stream. This behavior is + // intentional as we're now providing the `RenderResult.EMPTY` value. + return new ReadableStream({ + start (controller) { + controller.close(); + } + }); + } + if (typeof this.response === 'string') { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["streamFromString"])(this.response); + } + if (Buffer.isBuffer(this.response)) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["streamFromBuffer"])(this.response); + } + // If the response is an array of streams, then chain them together. + if (Array.isArray(this.response)) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["chainStreams"])(...this.response); + } + if (isNodeReadable(this.response)) { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + let Readable; + if ("TURBOPACK compile-time truthy", 1) { + Readable = __turbopack_context__.r("[externals]/node:stream [external] (node:stream, cjs)").Readable; + } else //TURBOPACK unreachable + ; + return Readable.toWeb(this.response); + } + } + return this.response; + } + /** + * Coerces the response to an array of streams. This will convert the response + * to an array of streams if it is not already one. + * + * @returns An array of streams + */ coerce() { + if (this.response === null) { + // If the response is null, return an empty stream. This behavior is + // intentional as we're now providing the `RenderResult.EMPTY` value. + return []; + } + if (typeof this.response === 'string') { + return [ + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["streamFromString"])(this.response) + ]; + } else if (Array.isArray(this.response)) { + return this.response; + } else if (Buffer.isBuffer(this.response)) { + return [ + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["streamFromBuffer"])(this.response) + ]; + } else if (isNodeReadable(this.response)) { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + let Readable; + if ("TURBOPACK compile-time truthy", 1) { + Readable = __turbopack_context__.r("[externals]/node:stream [external] (node:stream, cjs)").Readable; + } else //TURBOPACK unreachable + ; + return [ + Readable.toWeb(this.response) + ]; + } + } else { + return [ + this.response + ]; + } + } + /** + * Pipes the response through a transform stream. This converts the response + * to a single readable stream (chaining if needed) and pipes it through the + * provided transform. + * + * @param transform The transform stream to pipe through + */ pipeThrough(transform) { + this.response = this.readable.pipeThrough(transform); + } + /** + * Unshifts a new stream to the response. This will convert the response to an + * array of streams if it is not already one and will add the new stream to + * the start of the array. When this response is piped, all of the streams + * will be piped one after the other. + * + * @param readable The new stream to unshift + */ unshift(readable) { + // Coerce the response to an array of streams. + this.response = this.coerce(); + // Add the new stream to the start of the array. + this.response.unshift(readable); + } + /** + * Chains a new stream to the response. This will convert the response to an + * array of streams if it is not already one and will add the new stream to + * the end. When this response is piped, all of the streams will be piped + * one after the other. + * + * @param readable The new stream to chain + */ push(readable) { + // Coerce the response to an array of streams. + this.response = this.coerce(); + // Add the new stream to the end of the array. + this.response.push(readable); + } + /** + * Pipes the response to a writable stream. This will close/cancel the + * writable stream if an error is encountered. If this doesn't throw, then + * the writable stream will be closed or aborted. + * + * @param writable Writable stream to pipe the response to + */ async pipeTo(writable) { + try { + await this.readable.pipeTo(writable, { + // We want to close the writable stream ourselves so that we can wait + // for the waitUntil promise to resolve before closing it. If an error + // is encountered, we'll abort the writable stream if we swallowed the + // error. + preventClose: true + }); + // If there is a waitUntil promise, wait for it to resolve before + // closing the writable stream. + if (this.waitUntil) await this.waitUntil; + // Close the writable stream. + await writable.close(); + } catch (err) { + // If this is an abort error, we should abort the writable stream (as we + // took ownership of it when we started piping). We don't need to re-throw + // because we handled the error. + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isAbortError"])(err)) { + // Abort the writable stream if an error is encountered. + await writable.abort(err); + return; + } + // We're not aborting the writer here as when this method throws it's not + // clear as to how so the caller should assume it's their responsibility + // to clean up the writer. + throw err; + } + } + /** + * Pipes the response to a node response. This will close/cancel the node + * response if an error is encountered. + * + * @param res + */ async pipeToNodeResponse(res) { + if (this.response !== null && typeof this.response !== 'string' && !Buffer.isBuffer(this.response) && !Array.isArray(this.response) && isNodeReadable(this.response)) { + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pipeNodeReadableToNodeResponse"])(this.response, res, this.waitUntil, this.metadata.clientComponentLoadTracker); + return; + } + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pipeToNodeResponse"])(this.readable, res, this.waitUntil, this.metadata.clientComponentLoadTracker); + } +} +}), +"[project]/node_modules/next/dist/esm/server/request-meta.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +// FIXME: (wyattjoh) this is a temporary solution to allow us to pass data between bundled modules +__turbopack_context__.s([ + "NEXT_REQUEST_META", + ()=>NEXT_REQUEST_META, + "addRequestMeta", + ()=>addRequestMeta, + "getRequestMeta", + ()=>getRequestMeta, + "removeRequestMeta", + ()=>removeRequestMeta, + "setRequestMeta", + ()=>setRequestMeta +]); +const NEXT_REQUEST_META = Symbol.for('NextInternalRequestMeta'); +function getRequestMeta(req, key) { + const meta = req[NEXT_REQUEST_META] || {}; + return typeof key === 'string' ? meta[key] : meta; +} +function setRequestMeta(req, meta) { + req[NEXT_REQUEST_META] = meta; + return meta; +} +function addRequestMeta(request, key, value) { + const meta = getRequestMeta(request); + meta[key] = value; + return setRequestMeta(request, meta); +} +function removeRequestMeta(request, key) { + const meta = getRequestMeta(request); + delete meta[key]; + return setRequestMeta(request, meta); +} +}), +"[project]/node_modules/next/dist/esm/server/response-cache/index.js [app-route] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "default", + ()=>ResponseCache +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/types.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$batcher$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/batcher.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/lru-cache.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$output$2f$log$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/build/output/log.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/scheduler.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/utils.js [app-route] (ecmascript)"); +; +; +; +; +; +; +; +/** + * Parses an environment variable as a positive integer, returning the fallback + * if the value is missing, not a number, or not positive. + */ function parsePositiveInt(envValue, fallback) { + if (!envValue) return fallback; + const parsed = parseInt(envValue, 10); + return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback; +} +/** + * Default TTL (in milliseconds) for minimal mode response cache entries. + * Used for cache hit validation as a fallback for providers that don't + * send the x-invocation-id header yet. + * + * 10 seconds chosen because: + * - Long enough to dedupe rapid successive requests (e.g., page + data) + * - Short enough to not serve stale data across unrelated requests + * + * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_TTL` environment variable. + */ const DEFAULT_TTL_MS = parsePositiveInt(process.env.NEXT_PRIVATE_RESPONSE_CACHE_TTL, 10000); +/** + * Default maximum number of entries in the response cache. + * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE` environment variable. + */ const DEFAULT_MAX_SIZE = parsePositiveInt(process.env.NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE, 150); +/** + * Separator used in compound cache keys to join pathname and invocationID. + * Using null byte (\0) since it cannot appear in valid URL paths or UUIDs. + */ const KEY_SEPARATOR = '\0'; +/** + * Sentinel value used for TTL-based cache entries (when invocationID is undefined). + * Chosen to be a clearly reserved marker for internal cache keys. + */ const TTL_SENTINEL = '__ttl_sentinel__'; +/** + * Creates a compound cache key from pathname and invocationID. + */ function createCacheKey(pathname, invocationID) { + return `${pathname}${KEY_SEPARATOR}${invocationID ?? TTL_SENTINEL}`; +} +/** + * Extracts the invocationID from a compound cache key. + * Returns undefined if the key used TTL_SENTINEL. + */ function extractInvocationID(compoundKey) { + const separatorIndex = compoundKey.lastIndexOf(KEY_SEPARATOR); + if (separatorIndex === -1) return undefined; + const invocationID = compoundKey.slice(separatorIndex + 1); + return invocationID === TTL_SENTINEL ? undefined : invocationID; +} +; +class ResponseCache { + constructor({ minimalMode, route, maxSize = DEFAULT_MAX_SIZE, ttl = DEFAULT_TTL_MS }){ + // The get and revalidate batchers share pending renders across invocation + // IDs, including failures. Invocation IDs scope reuse of completed results in + // the LRU below. + this.getBatcher = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$batcher$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["Batcher"].create({ + // Ensure on-demand revalidate doesn't block normal requests, it should be + // safe to run an on-demand revalidate for the same key as a normal request. + cacheKeyFn: ({ key, isOnDemandRevalidate })=>`${key}-${isOnDemandRevalidate ? '1' : '0'}`, + // We wait to do any async work until after we've added our promise to + // `pendingResponses` to ensure that any any other calls will reuse the + // same promise until we've fully finished our work. + schedulerFn: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["scheduleOnNextTick"] + }); + this.revalidateBatcher = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$batcher$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["Batcher"].create({ + // We wait to do any async work until after we've added our promise to + // `pendingResponses` to ensure that any any other calls will reuse the + // same promise until we've fully finished our work. + schedulerFn: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["scheduleOnNextTick"] + }); + /** + * Set of invocation IDs that have had cache entries evicted. + * Used to detect when the cache size may be too small. + * Bounded to prevent memory growth. + */ this.evictedInvocationIDs = new Set(); + if (!route) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('Response cache requires a source route'); + } + this.route = route; + this.minimal_mode = minimalMode; + this.maxSize = maxSize; + this.ttl = ttl; + // Create the LRU cache with eviction tracking + this.cache = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["LRUCache"](maxSize, undefined, (compoundKey)=>{ + const invocationID = extractInvocationID(compoundKey); + if (invocationID) { + // Bound to 100 entries to prevent unbounded memory growth. + // FIFO eviction is acceptable here because: + // 1. Invocations are short-lived (single request lifecycle), so older + // invocations are unlikely to still be active after 100 newer ones + // 2. This warning mechanism is best-effort for developer guidance— + // missing occasional eviction warnings doesn't affect correctness + // 3. If a long-running invocation is somehow evicted and then has + // another cache entry evicted, it will simply be re-added + if (this.evictedInvocationIDs.size >= 100) { + const first = this.evictedInvocationIDs.values().next().value; + if (first) this.evictedInvocationIDs.delete(first); + } + this.evictedInvocationIDs.add(invocationID); + } + }); + } + /** + * Gets the response cache entry for the given key. + * + * @param key - The key to get the response cache entry for. + * @param responseGenerator - The response generator to use to generate the response cache entry. + * @param context - The context for the get request. + * @returns The response cache entry. + */ async get(key, responseGenerator, context) { + // If there is no key for the cache, we can't possibly look this up in the + // cache so just return the result of the response generator. + if (!key) { + return responseGenerator({ + hasResolved: false, + previousCacheEntry: null + }); + } + // Check minimal mode cache before doing any other work. + if (this.minimal_mode) { + const cacheKey = createCacheKey(key, context.invocationID); + const cachedItem = this.cache.get(cacheKey); + if (cachedItem) { + // With invocationID: exact match found - always a hit + // With TTL mode: must check expiration + if (context.invocationID !== undefined) { + return cachedItem.entry !== null && 'error' in cachedItem.entry ? cachedItem.entry : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["toResponseCacheEntry"])(cachedItem.entry); + } + // TTL entries can be reused by unrelated requests. Exclude failures so + // those requests can retry instead of receiving a cached error. + const now = Date.now(); + if ((cachedItem.entry === null || !('error' in cachedItem.entry)) && cachedItem.expiresAt > now) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["toResponseCacheEntry"])(cachedItem.entry); + } + // TTL expired - clean up + this.cache.remove(cacheKey); + } + // Warn if this invocation had entries evicted - indicates cache may be too small. + if (context.invocationID && this.evictedInvocationIDs.has(context.invocationID)) { + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$output$2f$log$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["warnOnce"])(`Response cache entry was evicted for invocation ${context.invocationID}. ` + `Consider increasing NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE (current: ${this.maxSize}).`); + } + } + const { incrementalCache, isOnDemandRevalidate = false, isFallback = false, isRoutePPREnabled = false, isPrefetch = false, waitUntil, invocationID } = context; + const response = await this.getBatcher.batch({ + key, + isOnDemandRevalidate + }, ({ resolve })=>{ + const promise = this.handleGet(key, responseGenerator, { + incrementalCache, + isOnDemandRevalidate, + isFallback, + isRoutePPREnabled, + isPrefetch, + invocationID + }, resolve); + // We need to ensure background revalidates are passed to waitUntil. + if (waitUntil) waitUntil(promise); + return promise; + }); + // In minimal mode, each caller with an invocation ID stores the shared + // failure under its own ID for reuse by related requests. Callers without + // an invocation ID receive the failure but do not store it in the LRU. + if (this.minimal_mode && response && ('error' in response ? invocationID !== undefined : response.cacheControl)) { + const cacheKey = createCacheKey(key, invocationID); + this.cache.set(cacheKey, { + entry: response, + expiresAt: Date.now() + this.ttl + }); + } + return response !== null && 'error' in response ? response : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["toResponseCacheEntry"])(response); + } + /** + * Handles the get request for the response cache. + * + * @param key - The key to get the response cache entry for. + * @param responseGenerator - The response generator to use to generate the response cache entry. + * @param context - The context for the get request. + * @param resolve - The resolve function to use to resolve the response cache entry. + * @returns The response cache entry. + */ async handleGet(key, responseGenerator, context, resolve) { + let previousIncrementalCacheEntry = null; + let resolved = false; + try { + // Get the previous cache entry if not in minimal mode + previousIncrementalCacheEntry = !this.minimal_mode ? await context.incrementalCache.get(key, this.getCacheContext(context.isRoutePPREnabled, context.isFallback)) : null; + // `isStale === -1` signals that the entry is past its `expire` (either + // via an expired tag or, with `cacheLife({ expire })`, past the route's + // expire time in the prerender manifest). In that case we must NOT + // early-resolve with the stale value — instead we fall through to a + // blocking revalidation so the response returned to the user is fresh. + if (previousIncrementalCacheEntry && !context.isOnDemandRevalidate && previousIncrementalCacheEntry.isStale !== -1) { + resolve(previousIncrementalCacheEntry); + resolved = true; + if (!previousIncrementalCacheEntry.isStale || context.isPrefetch) { + // The cached value is still valid, so we don't need to update it yet. + return previousIncrementalCacheEntry; + } + } + // Revalidate the cache entry. + // + // A prefetch request that missed must run its own response generator + // rather than joining an in-flight revalidation through the batcher. A + // background revalidation may be regenerating the concrete (non-fallback) + // entry for this route — e.g. an ISR fallback-shell upgrade scheduled by + // an earlier prefetch sub-request. Joining it would serve that concrete + // result to the prefetch instead of the fallback shell, and which segment + // wins would depend purely on request timing. Running the generator + // directly lets every prefetch segment take the same fallback-shell path, + // independent of any concurrent background upgrade. + const incrementalResponseCacheEntry = context.isPrefetch && previousIncrementalCacheEntry === null ? await this.handleRevalidate(key, context.incrementalCache, context.isRoutePPREnabled, context.isFallback, responseGenerator, previousIncrementalCacheEntry, resolved) : await this.revalidate(key, context.incrementalCache, context.isRoutePPREnabled, context.isFallback, responseGenerator, previousIncrementalCacheEntry, resolved); + if (incrementalResponseCacheEntry !== null && 'error' in incrementalResponseCacheEntry && resolved) { + // The caller already received the stale entry. Report the background + // failure here, as the catch below does for a thrown error. + console.error(incrementalResponseCacheEntry.error); + return null; + } + // Handle null response + if (!incrementalResponseCacheEntry) { + // Remove the cache item if it was set so we don't use it again. + if (this.minimal_mode) { + const cacheKey = createCacheKey(key, context.invocationID); + this.cache.remove(cacheKey); + } + return null; + } + // Resolve for on-demand revalidation or if not already resolved + if (context.isOnDemandRevalidate && !resolved) { + return incrementalResponseCacheEntry; + } + return incrementalResponseCacheEntry; + } catch (err) { + // If we've already resolved the cache entry, we can't reject as we + // already resolved the cache entry so log the error here. + if (resolved) { + console.error(err); + return null; + } + throw err; + } + } + /** + * Revalidates the cache entry for the given key. + * + * @param key - The key to revalidate the cache entry for. + * @param incrementalCache - The incremental cache to use to revalidate the cache entry. + * @param isRoutePPREnabled - Whether the route is PPR enabled. + * @param isFallback - Whether the route is a fallback. + * @param responseGenerator - The response generator to use to generate the response cache entry. + * @param previousIncrementalCacheEntry - The previous cache entry to use to revalidate the cache entry. + * @param hasResolved - Whether the response has been resolved. + * @param waitUntil - Optional function to register background work. + * @param invocationID - The invocation ID for cache key scoping. + * @returns The revalidated cache entry. + */ async revalidate(key, incrementalCache, isRoutePPREnabled, isFallback, responseGenerator, previousIncrementalCacheEntry, hasResolved, waitUntil) { + return this.revalidateBatcher.batch(key, ()=>{ + const promise = this.handleRevalidate(key, incrementalCache, isRoutePPREnabled, isFallback, responseGenerator, previousIncrementalCacheEntry, hasResolved); + // We need to ensure background revalidates are passed to waitUntil. + if (waitUntil) waitUntil(promise); + return promise; + }); + } + async handleRevalidate(key, incrementalCache, isRoutePPREnabled, isFallback, responseGenerator, previousIncrementalCacheEntry, hasResolved) { + let failure; + try { + // Generate the response cache entry using the response generator. + const responseCacheEntry = await responseGenerator({ + hasResolved, + previousCacheEntry: previousIncrementalCacheEntry, + isRevalidating: true + }); + if (!responseCacheEntry) { + return null; + } + if ('error' in responseCacheEntry) { + failure = responseCacheEntry; + } else { + // Convert the response cache entry to an incremental response cache entry. + const incrementalResponseCacheEntry = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["fromResponseCacheEntry"])({ + ...responseCacheEntry, + isMiss: !previousIncrementalCacheEntry + }); + // We want to persist the result only if it has a cache control value + // defined. The minimal mode LRU write is handled in get() so that every + // caller, including batched invocations, populates the cache. + if (incrementalResponseCacheEntry.cacheControl && !this.minimal_mode) { + await incrementalCache.set(key, incrementalResponseCacheEntry.value, { + ...this.getCacheContext(isRoutePPREnabled, isFallback), + cacheControl: incrementalResponseCacheEntry.cacheControl + }); + } + return incrementalResponseCacheEntry; + } + } catch (err) { + await this.retainPreviousCacheEntry(key, incrementalCache, isRoutePPREnabled, isFallback, previousIncrementalCacheEntry); + throw err; + } + await this.retainPreviousCacheEntry(key, incrementalCache, isRoutePPREnabled, isFallback, previousIncrementalCacheEntry); + return failure; + } + // Retain the previous successful value and delay retries after revalidation + // fails. + async retainPreviousCacheEntry(key, incrementalCache, isRoutePPREnabled, isFallback, previousIncrementalCacheEntry) { + if (previousIncrementalCacheEntry == null ? void 0 : previousIncrementalCacheEntry.cacheControl) { + const revalidate = Math.min(Math.max(previousIncrementalCacheEntry.cacheControl.revalidate || 3, 3), 30); + const expire = previousIncrementalCacheEntry.cacheControl.expire === undefined ? undefined : Math.max(revalidate + 3, previousIncrementalCacheEntry.cacheControl.expire); + await incrementalCache.set(key, previousIncrementalCacheEntry.value, { + ...this.getCacheContext(isRoutePPREnabled, isFallback), + cacheControl: { + revalidate: revalidate, + expire: expire + } + }); + } + } + getCacheContext(isRoutePPREnabled, isFallback) { + if (this.route === 'image') { + return { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].IMAGE, + isFallback: false + }; + } + const kind = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["routeKindToIncrementalCacheKind"])(this.route.kind); + if (kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].IMAGE) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('Images must use the image response cache'); + } + return { + route: this.route, + kind, + isRoutePPREnabled, + isFallback + }; + } +} +}), +"[project]/node_modules/next/dist/esm/server/response-cache/types.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "CachedRouteKind", + ()=>CachedRouteKind, + "IncrementalCacheKind", + ()=>IncrementalCacheKind +]); +var CachedRouteKind = /*#__PURE__*/ function(CachedRouteKind) { + CachedRouteKind["APP_PAGE"] = "APP_PAGE"; + CachedRouteKind["APP_ROUTE"] = "APP_ROUTE"; + CachedRouteKind["PAGES"] = "PAGES"; + CachedRouteKind["FETCH"] = "FETCH"; + CachedRouteKind["REDIRECT"] = "REDIRECT"; + CachedRouteKind["IMAGE"] = "IMAGE"; + return CachedRouteKind; +}({}); +var IncrementalCacheKind = /*#__PURE__*/ function(IncrementalCacheKind) { + IncrementalCacheKind["APP_PAGE"] = "APP_PAGE"; + IncrementalCacheKind["APP_ROUTE"] = "APP_ROUTE"; + IncrementalCacheKind["PAGES"] = "PAGES"; + IncrementalCacheKind["FETCH"] = "FETCH"; + IncrementalCacheKind["IMAGE"] = "IMAGE"; + return IncrementalCacheKind; +}({}); +}), +"[project]/node_modules/next/dist/esm/server/response-cache/utils.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "fromResponseCacheEntry", + ()=>fromResponseCacheEntry, + "routeKindToIncrementalCacheKind", + ()=>routeKindToIncrementalCacheKind, + "toResponseCacheEntry", + ()=>toResponseCacheEntry +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/types.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/render-result.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/route-kind.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)"); +; +; +; +; +async function fromResponseCacheEntry(cacheEntry) { + var _cacheEntry_value, _cacheEntry_value1; + return { + ...cacheEntry, + value: ((_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES ? { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES, + html: await cacheEntry.value.html.toUnchunkedString(true), + pageData: cacheEntry.value.pageData, + headers: cacheEntry.value.headers, + status: cacheEntry.value.status + } : ((_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE ? { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE, + html: await cacheEntry.value.html.toUnchunkedString(true), + postponed: cacheEntry.value.postponed, + rscData: cacheEntry.value.rscData, + headers: cacheEntry.value.headers, + status: cacheEntry.value.status, + segmentData: cacheEntry.value.segmentData + } : cacheEntry.value + }; +} +async function toResponseCacheEntry(response) { + var _response_value, _response_value1; + if (!response) return null; + return { + isMiss: response.isMiss, + isStale: response.isStale, + cacheControl: response.cacheControl, + isFallback: response.isFallback, + value: ((_response_value = response.value) == null ? void 0 : _response_value.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES ? { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES, + html: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].fromStatic(response.value.html, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["HTML_CONTENT_TYPE_HEADER"]), + pageData: response.value.pageData, + headers: response.value.headers, + status: response.value.status + } : ((_response_value1 = response.value) == null ? void 0 : _response_value1.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE ? { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE, + html: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].fromStatic(response.value.html, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["HTML_CONTENT_TYPE_HEADER"]), + rscData: response.value.rscData, + headers: response.value.headers, + status: response.value.status, + postponed: response.value.postponed, + segmentData: response.value.segmentData + } : response.value + }; +} +function routeKindToIncrementalCacheKind(routeKind) { + switch(routeKind){ + case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].PAGES: + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].PAGES; + case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].APP_PAGE: + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].APP_PAGE; + case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].IMAGE: + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].IMAGE; + case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].APP_ROUTE: + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].APP_ROUTE; + case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].PAGES_API: + // Pages Router API routes are not cached in the incremental cache. + throw new Error(`Unexpected route kind ${routeKind}`); + default: + return routeKind; + } +} +}), +"[project]/node_modules/next/dist/esm/server/route-kind.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "RouteKind", + ()=>RouteKind +]); +var RouteKind = /*#__PURE__*/ function(RouteKind) { + /** + * `PAGES` represents all the React pages that are under `pages/`. + */ RouteKind["PAGES"] = "PAGES"; + /** + * `PAGES_API` represents all the API routes under `pages/api/`. + */ RouteKind["PAGES_API"] = "PAGES_API"; + /** + * `APP_PAGE` represents all the React pages that are under `app/` with the + * filename of `page.{j,t}s{,x}`. + */ RouteKind["APP_PAGE"] = "APP_PAGE"; + /** + * `APP_ROUTE` represents all the API routes and metadata routes that are under `app/` with the + * filename of `route.{j,t}s{,x}`. + */ RouteKind["APP_ROUTE"] = "APP_ROUTE"; + /** + * `IMAGE` represents all the images that are generated by `next/image`. + */ RouteKind["IMAGE"] = "IMAGE"; + return RouteKind; +}({}); +}), +"[project]/node_modules/next/dist/esm/server/send-response.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "sendResponse", + ()=>sendResponse +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/base-http/helpers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/pipe-readable.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/utils.js [app-route] (ecmascript)"); +; +; +; +async function sendResponse(req, res, response, waitUntil) { + if (// environment variable check provides dead code elimination. + ("TURBOPACK compile-time value", "nodejs") !== 'edge' && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isNodeNextResponse"])(res)) { + var _response_headers; + // Copy over the response status. + res.statusCode = response.status; + res.statusMessage = response.statusText; + // TODO: this is not spec-compliant behavior and we should not restrict + // headers that are allowed to appear many times. + // + // See: + // https://github.com/vercel/next.js/pull/70127 + const headersWithMultipleValuesAllowed = [ + // can add more headers to this list if needed + 'set-cookie', + 'www-authenticate', + 'proxy-authenticate', + 'vary' + ]; + (_response_headers = response.headers) == null ? void 0 : _response_headers.forEach((value, name)=>{ + // `x-middleware-set-cookie` is an internal header not needed for the response + if (name.toLowerCase() === 'x-middleware-set-cookie') { + return; + } + // The append handling is special cased for `set-cookie`. + if (name.toLowerCase() === 'set-cookie') { + // TODO: (wyattjoh) replace with native response iteration when we can upgrade undici + for (const cookie of (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["splitCookiesString"])(value)){ + res.appendHeader(name, cookie); + } + } else { + // only append the header if it is either not present in the outbound response + // or if the header supports multiple values + const isHeaderPresent = typeof res.getHeader(name) !== 'undefined'; + if (headersWithMultipleValuesAllowed.includes(name.toLowerCase()) || !isHeaderPresent) { + res.appendHeader(name, value); + } + } + }); + /** + * The response can't be directly piped to the underlying response. The + * following is duplicated from the edge runtime handler. + * + * See packages/next/server/next-server.ts + */ const { originalResponse } = res; + // A response body must not be sent for HEAD requests. See https://httpwg.org/specs/rfc9110.html#HEAD + if (response.body && req.method !== 'HEAD') { + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pipeToNodeResponse"])(response.body, originalResponse, waitUntil); + } else { + originalResponse.end(); + } + } +} +}), +"[project]/node_modules/next/dist/esm/server/stream-utils/encoded-tags.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ENCODED_TAGS", + ()=>ENCODED_TAGS +]); +const ENCODED_TAGS = { + // opening tags do not have the closing `>` since they can contain other attributes such as `` + OPENING: { + // + HEAD: new Uint8Array([ + 60, + 47, + 104, + 101, + 97, + 100, + 62 + ]), + // + BODY: new Uint8Array([ + 60, + 47, + 98, + 111, + 100, + 121, + 62 + ]), + // + HTML: new Uint8Array([ + 60, + 47, + 104, + 116, + 109, + 108, + 62 + ]), + // + BODY_AND_HTML: new Uint8Array([ + 60, + 47, + 98, + 111, + 100, + 121, + 62, + 60, + 47, + 104, + 116, + 109, + 108, + 62 + ]) + }, + META: { + // Only the match the prefix cause the suffix can be different whether it's xml compatible or not ">" or "/>" + // { +"use strict"; + +__turbopack_context__.s([ + "CLOSE_TAG", + ()=>CLOSE_TAG, + "chainStreams", + ()=>chainStreams, + "chainTransformers", + ()=>chainTransformers, + "continueDynamicHTMLResume", + ()=>continueDynamicHTMLResume, + "continueDynamicPrerender", + ()=>continueDynamicPrerender, + "continueFizzStream", + ()=>continueFizzStream, + "continueStaticFallbackPrerender", + ()=>continueStaticFallbackPrerender, + "continueStaticPrerender", + ()=>continueStaticPrerender, + "createBufferedTransformStream", + ()=>createBufferedTransformStream, + "createDeferredSuffixStream", + ()=>createDeferredSuffixStream, + "createDocumentClosingStream", + ()=>createDocumentClosingStream, + "createFlightDataInjectionTransformStream", + ()=>createFlightDataInjectionTransformStream, + "createHeadInsertionTransformStream", + ()=>createHeadInsertionTransformStream, + "createHtmlDataDplIdTransformStream", + ()=>createHtmlDataDplIdTransformStream, + "createMetadataTransformStream", + ()=>createMetadataTransformStream, + "createMoveSuffixStream", + ()=>createMoveSuffixStream, + "createRootLayoutValidatorStream", + ()=>createRootLayoutValidatorStream, + "createRuntimePrefetchTransformStream", + ()=>createRuntimePrefetchTransformStream, + "nodestreamToUint8Array", + ()=>nodestreamToUint8Array, + "renderToInitialFizzStream", + ()=>renderToInitialFizzStream, + "streamFromBuffer", + ()=>streamFromBuffer, + "streamFromString", + ()=>streamFromString, + "streamToBuffer", + ()=>streamToBuffer, + "streamToString", + ()=>streamToString, + "streamToUint8Array", + ()=>streamToUint8Array, + "webstreamToUint8Array", + ()=>webstreamToUint8Array +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/scheduler.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/stream-utils/encoded-tags.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/stream-utils/uint8array-helpers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$errors$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/errors/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/app-router-headers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$cache$2d$busting$2d$search$2d$param$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/cache-busting-search-param.js [app-route] (ecmascript)"); +; +; +; +; +; +; +; +; +; +function voidCatch() { +// this catcher is designed to be used with pipeTo where we expect the underlying +// pipe implementation to forward errors but we don't want the pipeTo promise to reject +// and be unhandled +} +// We can share the same encoder instance everywhere +// Notably we cannot do the same for TextDecoder because it is stateful +// when handling streaming data +const encoder = new TextEncoder(); +function chainStreams(...streams) { + // If we have no streams, return an empty stream. This behavior is + // intentional as we're now providing the `RenderResult.EMPTY` value. + if (streams.length === 0) { + return new ReadableStream({ + start (controller) { + controller.close(); + } + }); + } + // If we only have 1 stream we fast path it by returning just this stream + if (streams.length === 1) { + return streams[0]; + } + const { readable, writable } = new TransformStream(); + // We always initiate pipeTo immediately. We know we have at least 2 streams + // so we need to avoid closing the writable when this one finishes. + let promise = streams[0].pipeTo(writable, { + preventClose: true + }); + let i = 1; + for(; i < streams.length - 1; i++){ + const nextStream = streams[i]; + promise = promise.then(()=>nextStream.pipeTo(writable, { + preventClose: true + })); + } + // We can omit the length check because we halted before the last stream and there + // is at least two streams so the lastStream here will always be defined + const lastStream = streams[i]; + promise = promise.then(()=>lastStream.pipeTo(writable)); + // Catch any errors from the streams and ignore them, they will be handled + // by whatever is consuming the readable stream. + promise.catch(voidCatch); + return readable; +} +function streamFromString(str) { + return new ReadableStream({ + start (controller) { + controller.enqueue(encoder.encode(str)); + controller.close(); + } + }); +} +function streamFromBuffer(chunk) { + return new ReadableStream({ + start (controller) { + controller.enqueue(chunk); + controller.close(); + } + }); +} +async function streamToChunks(stream) { + const reader = stream.getReader(); + const chunks = []; + while(true){ + const { done, value } = await reader.read(); + if (done) { + break; + } + chunks.push(value); + } + return chunks; +} +function concatUint8Arrays(chunks) { + const totalLength = chunks.reduce((sum, chunk)=>sum + chunk.length, 0); + const result = new Uint8Array(totalLength); + let offset = 0; + for (const chunk of chunks){ + result.set(chunk, offset); + offset += chunk.length; + } + return result; +} +async function webstreamToUint8Array(stream) { + return concatUint8Arrays(await streamToChunks(stream)); +} +function webToReadable(stream) { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + let Readable; + if ("TURBOPACK compile-time truthy", 1) { + Readable = __turbopack_context__.r("[externals]/node:stream [external] (node:stream, cjs)").Readable; + } else //TURBOPACK unreachable + ; + if (stream instanceof Readable) { + return stream; + } + return Readable.fromWeb(stream); + } +} +async function nodestreamToUint8Array(stream) { + const chunks = []; + for await (const chunk of webToReadable(stream)){ + chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk); + } + return Buffer.concat(chunks); +} +async function streamToUint8Array(stream) { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + let Readable; + if ("TURBOPACK compile-time truthy", 1) { + Readable = __turbopack_context__.r("[externals]/node:stream [external] (node:stream, cjs)").Readable; + } else //TURBOPACK unreachable + ; + if (stream instanceof Readable) { + return nodestreamToUint8Array(stream); + } + return webstreamToUint8Array(stream); + } +} +async function streamToBuffer(stream) { + return Buffer.concat(await streamToChunks(stream)); +} +async function streamToString(stream, signal) { + const decoder = new TextDecoder('utf-8', { + fatal: true + }); + let string = ''; + for await (const chunk of stream){ + if (signal == null ? void 0 : signal.aborted) { + return string; + } + string += decoder.decode(chunk, { + stream: true + }); + } + string += decoder.decode(); + return string; +} +function createBufferedTransformStream(options = {}) { + const { maxBufferByteLength = Infinity } = options; + let bufferedChunks = []; + let bufferByteLength = 0; + let pending; + const flush = (controller)=>{ + try { + if (bufferedChunks.length === 0) { + return; + } + const chunk = new Uint8Array(bufferByteLength); + let copiedBytes = 0; + for(let i = 0; i < bufferedChunks.length; i++){ + const bufferedChunk = bufferedChunks[i]; + chunk.set(bufferedChunk, copiedBytes); + copiedBytes += bufferedChunk.byteLength; + } + // We just wrote all the buffered chunks so we need to reset the bufferedChunks array + // and our bufferByteLength to prepare for the next round of buffered chunks + bufferedChunks.length = 0; + bufferByteLength = 0; + controller.enqueue(chunk); + } catch { + // If an error occurs while enqueuing, it can't be due to this + // transformer. It's most likely caused by the controller having been + // errored (for example, if the stream was cancelled). + } + }; + const scheduleFlush = (controller)=>{ + if (pending) { + return; + } + const detached = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + pending = detached; + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["scheduleImmediate"])(()=>{ + try { + flush(controller); + } finally{ + pending = undefined; + detached.resolve(); + } + }); + }; + return new TransformStream({ + transform (chunk, controller) { + // Combine the previous buffer with the new chunk. + bufferedChunks.push(chunk); + bufferByteLength += chunk.byteLength; + if (bufferByteLength >= maxBufferByteLength) { + flush(controller); + } else { + scheduleFlush(controller); + } + }, + flush () { + return pending == null ? void 0 : pending.promise; + } + }); +} +function renderToInitialFizzStream({ ReactDOMServer, element, streamOptions }) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])().trace(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["AppRenderSpan"].renderToReadableStream, async ()=>ReactDOMServer.renderToReadableStream(element, streamOptions)); +} +function createMetadataTransformStream(insert) { + let chunkIndex = -1; + let isMarkRemoved = false; + return new TransformStream({ + async transform (chunk, controller) { + let iconMarkIndex = -1; + let closedHeadIndex = -1; + chunkIndex++; + if (isMarkRemoved) { + controller.enqueue(chunk); + return; + } + let iconMarkLength = 0; + // Only search for the closed head tag once + if (iconMarkIndex === -1) { + iconMarkIndex = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].META.ICON_MARK); + if (iconMarkIndex === -1) { + controller.enqueue(chunk); + return; + } else { + // When we found the `` or `>`, checking the next char to ensure we cover both cases. + iconMarkLength = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].META.ICON_MARK.length; + // Check if next char is /, this is for xml mode. + if (chunk[iconMarkIndex + iconMarkLength] === 47) { + iconMarkLength += 2; + } else { + // The last char is `>` + iconMarkLength++; + } + } + } + // Check if icon mark is inside tag in the first chunk. + if (chunkIndex === 0) { + closedHeadIndex = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HEAD); + if (iconMarkIndex !== -1) { + // The mark icon is located in the 1st chunk before the head tag. + // We do not need to insert the script tag in this case because it's in the head. + // Just remove the icon mark from the chunk. + if (iconMarkIndex < closedHeadIndex) { + const replaced = new Uint8Array(chunk.length - iconMarkLength); + // Remove the icon mark from the chunk. + replaced.set(chunk.subarray(0, iconMarkIndex)); + replaced.set(chunk.subarray(iconMarkIndex + iconMarkLength), iconMarkIndex); + chunk = replaced; + } else { + // The icon mark is after the head tag, replace and insert the script tag at that position. + const insertion = await insert(); + const encodedInsertion = encoder.encode(insertion); + const insertionLength = encodedInsertion.length; + const replaced = new Uint8Array(chunk.length - iconMarkLength + insertionLength); + replaced.set(chunk.subarray(0, iconMarkIndex)); + replaced.set(encodedInsertion, iconMarkIndex); + replaced.set(chunk.subarray(iconMarkIndex + iconMarkLength), iconMarkIndex + insertionLength); + chunk = replaced; + } + isMarkRemoved = true; + } + // If there's no icon mark located, it will be handled later when if present in the following chunks. + } else { + // When it's appeared in the following chunks, we'll need to + // remove the mark and then insert the script tag at that position. + const insertion = await insert(); + const encodedInsertion = encoder.encode(insertion); + const insertionLength = encodedInsertion.length; + // Replace the icon mark with the hoist script or empty string. + const replaced = new Uint8Array(chunk.length - iconMarkLength + insertionLength); + // Set the first part of the chunk, before the icon mark. + replaced.set(chunk.subarray(0, iconMarkIndex)); + // Set the insertion after the icon mark. + replaced.set(encodedInsertion, iconMarkIndex); + // Set the rest of the chunk after the icon mark. + replaced.set(chunk.subarray(iconMarkIndex + iconMarkLength), iconMarkIndex + insertionLength); + chunk = replaced; + isMarkRemoved = true; + } + controller.enqueue(chunk); + } + }); +} +function createHeadInsertionTransformStream(insert) { + let inserted = false; + // We need to track if this transform saw any bytes because if it didn't + // we won't want to insert any server HTML at all + let hasBytes = false; + return new TransformStream({ + async transform (chunk, controller) { + hasBytes = true; + const insertion = await insert(); + if (inserted) { + if (insertion) { + const encodedInsertion = encoder.encode(insertion); + controller.enqueue(encodedInsertion); + } + controller.enqueue(chunk); + } else { + // TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for. + const index = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HEAD); + // In fully static rendering or non PPR rendering cases: + // `/head>` will always be found in the chunk in first chunk rendering. + if (index !== -1) { + if (insertion) { + const encodedInsertion = encoder.encode(insertion); + // Get the total count of the bytes in the chunk and the insertion + // e.g. + // chunk = + // insertion = + // output = [ ] + const insertedHeadContent = new Uint8Array(chunk.length + encodedInsertion.length); + // Append the first part of the chunk, before the head tag + insertedHeadContent.set(chunk.slice(0, index)); + // Append the server inserted content + insertedHeadContent.set(encodedInsertion, index); + // Append the rest of the chunk + insertedHeadContent.set(chunk.slice(index), index + encodedInsertion.length); + controller.enqueue(insertedHeadContent); + } else { + controller.enqueue(chunk); + } + inserted = true; + } else { + // This will happens in PPR rendering during next start, when the page is partially rendered. + // When the page resumes, the head tag will be found in the middle of the chunk. + // Where we just need to append the insertion and chunk to the current stream. + // e.g. + // PPR-static: ... [ resume content ] + // PPR-resume: [ insertion ] [ rest content ] + if (insertion) { + controller.enqueue(encoder.encode(insertion)); + } + controller.enqueue(chunk); + inserted = true; + } + } + }, + async flush (controller) { + // Check before closing if there's anything remaining to insert. + if (hasBytes) { + const insertion = await insert(); + if (insertion) { + controller.enqueue(encoder.encode(insertion)); + } + } + } + }); +} +async function createClientResumeScriptInsertionTransformStream() { + const segmentPath = '/_full'; + const cacheBustingHeader = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$cache$2d$busting$2d$search$2d$param$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["computeCacheBustingSearchParam"])('1', '/_full', undefined, undefined // headers[NEXT_URL] + ); + const searchStr = `${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_RSC_UNION_QUERY"]}=${cacheBustingHeader}`; + const NEXT_CLIENT_RESUME_SCRIPT = ``; + let didAlreadyInsert = false; + return new TransformStream({ + transform (chunk, controller) { + if (didAlreadyInsert) { + // Already inserted the script into the head. Pass through. + controller.enqueue(chunk); + return; + } + // TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for. + const headClosingTagIndex = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HEAD); + if (headClosingTagIndex === -1) { + // In fully static rendering or non PPR rendering cases: + // `/head>` will always be found in the chunk in first chunk rendering. + controller.enqueue(chunk); + return; + } + const encodedInsertion = encoder.encode(NEXT_CLIENT_RESUME_SCRIPT); + // Get the total count of the bytes in the chunk and the insertion + // e.g. + // chunk = + // insertion = + // output = [ ] + const insertedHeadContent = new Uint8Array(chunk.length + encodedInsertion.length); + // Append the first part of the chunk, before the head tag + insertedHeadContent.set(chunk.slice(0, headClosingTagIndex)); + // Append the server inserted content + insertedHeadContent.set(encodedInsertion, headClosingTagIndex); + // Append the rest of the chunk + insertedHeadContent.set(chunk.slice(headClosingTagIndex), headClosingTagIndex + encodedInsertion.length); + controller.enqueue(insertedHeadContent); + didAlreadyInsert = true; + } + }); +} +function createDeferredSuffixStream(suffix) { + let flushed = false; + let pending; + const flush = (controller)=>{ + const detached = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + pending = detached; + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["scheduleImmediate"])(()=>{ + try { + controller.enqueue(encoder.encode(suffix)); + } catch { + // If an error occurs while enqueuing it can't be due to this + // transformers fault. It's likely due to the controller being + // errored due to the stream being cancelled. + } finally{ + pending = undefined; + detached.resolve(); + } + }); + }; + return new TransformStream({ + transform (chunk, controller) { + controller.enqueue(chunk); + // If we've already flushed, we're done. + if (flushed) return; + // Schedule the flush to happen. + flushed = true; + flush(controller); + }, + flush (controller) { + if (pending) return pending.promise; + if (flushed) return; + // Flush now. + controller.enqueue(encoder.encode(suffix)); + } + }); +} +function createFlightDataInjectionTransformStream(stream, delayDataUntilFirstHtmlChunk) { + let htmlStreamFinished = false; + let pull = null; + let donePulling = false; + function startOrContinuePulling(controller) { + if (!pull) { + pull = startPulling(controller); + } + return pull; + } + async function startPulling(controller) { + const reader = stream.getReader(); + if (delayDataUntilFirstHtmlChunk) { + // NOTE: streaming flush + // We are buffering here for the inlined data stream because the + // "shell" stream might be chunkenized again by the underlying stream + // implementation, e.g. with a specific high-water mark. To ensure it's + // the safe timing to pipe the data stream, this extra tick is + // necessary. + // We don't start reading until we've left the current Task to ensure + // that it's inserted after flushing the shell. Note that this implementation + // might get stale if impl details of Fizz change in the future. + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["atLeastOneTask"])(); + } + try { + while(true){ + const { done, value } = await reader.read(); + if (done) { + donePulling = true; + return; + } + // We want to prioritize HTML over RSC data. + // The SSR render is based on the same RSC stream, so when we get a new RSC chunk, + // we're likely to produce an HTML chunk as well, so give it a chance to flush first. + if (!delayDataUntilFirstHtmlChunk && !htmlStreamFinished) { + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["atLeastOneTask"])(); + } + controller.enqueue(value); + } + } catch (err) { + controller.error(err); + } + } + return new TransformStream({ + start (controller) { + if (!delayDataUntilFirstHtmlChunk) { + startOrContinuePulling(controller); + } + }, + transform (chunk, controller) { + controller.enqueue(chunk); + // Start the streaming if it hasn't already been started yet. + if (delayDataUntilFirstHtmlChunk) { + startOrContinuePulling(controller); + } + }, + flush (controller) { + htmlStreamFinished = true; + if (donePulling) { + return; + } + return startOrContinuePulling(controller); + } + }); +} +const CLOSE_TAG = ''; +function createMoveSuffixStream() { + let foundSuffix = false; + return new TransformStream({ + transform (chunk, controller) { + if (foundSuffix) { + return controller.enqueue(chunk); + } + const index = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML); + if (index > -1) { + foundSuffix = true; + // If the whole chunk is the suffix, then don't write anything, it will + // be written in the flush. + if (chunk.length === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML.length) { + return; + } + // Write out the part before the suffix. + const before = chunk.slice(0, index); + controller.enqueue(before); + // In the case where the suffix is in the middle of the chunk, we need + // to split the chunk into two parts. + if (chunk.length > __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML.length + index) { + // Write out the part after the suffix. + const after = chunk.slice(index + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML.length); + controller.enqueue(after); + } + } else { + controller.enqueue(chunk); + } + }, + flush (controller) { + // Even if we didn't find the suffix, the HTML is not valid if we don't + // add it, so insert it at the end. + controller.enqueue(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML); + } + }); +} +function createStripDocumentClosingTagsTransform() { + return new TransformStream({ + transform (chunk, controller) { + // We rely on the assumption that chunks will never break across a code unit. + // This is reasonable because we currently concat all of React's output from a single + // flush into one chunk before streaming it forward which means the chunk will represent + // a single coherent utf-8 string. This is not safe to use if we change our streaming to no + // longer do this large buffered chunk + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isEquivalentUint8Arrays"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML) || (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isEquivalentUint8Arrays"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY) || (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isEquivalentUint8Arrays"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HTML)) { + // the entire chunk is the closing tags; return without enqueueing anything. + return; + } + // We assume these tags will go at together at the end of the document and that + // they won't appear anywhere else in the document. This is not really a safe assumption + // but until we revamp our streaming infra this is a performant way to string the tags + chunk = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["removeFromUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY); + chunk = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["removeFromUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HTML); + controller.enqueue(chunk); + } + }); +} +function createHtmlDataDplIdTransformStream(dplId) { + let didTransform = false; + return new TransformStream({ + transform (chunk, controller) { + if (didTransform) { + controller.enqueue(chunk); + return; + } + const htmlTagIndex = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].OPENING.HTML); + if (htmlTagIndex === -1) { + controller.enqueue(chunk); + return; + } + // Insert the data-dpl-id attribute right after " -1) { + foundHtml = true; + } + if (!foundBody && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].OPENING.BODY) > -1) { + foundBody = true; + } + controller.enqueue(chunk); + }, + flush (controller) { + const missingTags = []; + if (!foundHtml) missingTags.push('html'); + if (!foundBody) missingTags.push('body'); + if (!missingTags.length) return; + controller.enqueue(encoder.encode(` + + `)); + } + }); +} +function chainTransformers(readable, transformers) { + let stream = readable; + for (const transformer of transformers){ + if (!transformer) continue; + stream = stream.pipeThrough(transformer); + } + return stream; +} +async function continueFizzStream(renderStream, { suffix, inlinedDataStream, waitForAllReady, deploymentId, getServerInsertedHTML, getServerInsertedMetadata, validateRootLayout }) { + // Suffix itself might contain close tags at the end, so we need to split it. + const suffixUnclosed = suffix ? suffix.split(CLOSE_TAG, 1)[0] : null; + if (waitForAllReady) { + // Wait for all Suspense boundaries to resolve before continuing. + await renderStream.allReady; + } else { + // Otherwise, we want to make sure Fizz is done with all microtasky work + // before we start pulling the stream and cause a flush. + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["waitAtLeastOneReactRenderTask"])(); + } + return chainTransformers(renderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata), + // Insert suffix content + suffixUnclosed != null && suffixUnclosed.length > 0 ? createDeferredSuffixStream(suffixUnclosed) : null, + // Insert the inlined data (Flight data, form state, etc.) stream into the HTML + inlinedDataStream ? createFlightDataInjectionTransformStream(inlinedDataStream, true) : null, + // Validate the root layout for missing html or body tags + validateRootLayout ? createRootLayoutValidatorStream() : null, + // Close tags should always be deferred to the end + createMoveSuffixStream(), + // Special head insertions + // TODO-APP: Insert server side html to end of head in app layout rendering, to avoid + // hydration errors. Remove this once it's ready to be handled by react itself. + createHeadInsertionTransformStream(getServerInsertedHTML) + ]); +} +async function continueDynamicPrerender(prerenderStream, { getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) { + return chainTransformers(prerenderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + createStripDocumentClosingTagsTransform(), + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Insert generated tags to head + createHeadInsertionTransformStream(getServerInsertedHTML), + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata) + ]); +} +async function continueStaticPrerender(prerenderStream, { inlinedDataStream, getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) { + return chainTransformers(prerenderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + // Add build id comment to start of the HTML document (in export mode) + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Insert generated tags to head + createHeadInsertionTransformStream(getServerInsertedHTML), + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata), + // Insert the inlined data (Flight data, form state, etc.) stream into the HTML + createFlightDataInjectionTransformStream(inlinedDataStream, true), + // Close tags should always be deferred to the end + createMoveSuffixStream() + ]); +} +async function continueStaticFallbackPrerender(prerenderStream, { inlinedDataStream, getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) { + // Same as `continueStaticPrerender`, but also inserts an additional script + // to instruct the client to start fetching the hydration data as early + // as possible. + return chainTransformers(prerenderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Insert generated tags to head + createHeadInsertionTransformStream(getServerInsertedHTML), + // Insert the client resume script into the head + await createClientResumeScriptInsertionTransformStream(), + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata), + // Insert the inlined data (Flight data, form state, etc.) stream into the HTML + createFlightDataInjectionTransformStream(inlinedDataStream, true), + // Close tags should always be deferred to the end + createMoveSuffixStream() + ]); +} +async function continueDynamicHTMLResume(renderStream, { delayDataUntilFirstHtmlChunk, inlinedDataStream, getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) { + return chainTransformers(renderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Insert generated tags to head + createHeadInsertionTransformStream(getServerInsertedHTML), + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata), + // Insert the inlined data (Flight data, form state, etc.) stream into the HTML + createFlightDataInjectionTransformStream(inlinedDataStream, delayDataUntilFirstHtmlChunk), + // Close tags should always be deferred to the end + createMoveSuffixStream() + ]); +} +function createDocumentClosingStream() { + return streamFromString(CLOSE_TAG); +} +function createRuntimePrefetchTransformStream(sentinel, isPartial, staleTime) { + const enc = new TextEncoder(); + // Search for: [] + // Replace with: [,] + const search = enc.encode(`[${sentinel}]`); + const first = search[0]; + const replace = enc.encode(`[${isPartial},${staleTime}]`); + const searchLen = search.length; + let currentChunk = null; + let found = false; + function processChunk(controller, nextChunk) { + if (found) { + if (nextChunk) { + controller.enqueue(nextChunk); + } + return; + } + if (currentChunk) { + // We can't search past the index that can contain a full match + let exclusiveUpperBound = currentChunk.length - (searchLen - 1); + if (nextChunk) { + // If we have any overflow bytes we can search up to the chunk's final byte + exclusiveUpperBound += Math.min(nextChunk.length, searchLen - 1); + } + if (exclusiveUpperBound < 1) { + // we can't match the current chunk. + controller.enqueue(currentChunk); + currentChunk = nextChunk // advance so we don't process this chunk again + ; + return; + } + let currentIndex = currentChunk.indexOf(first); + // check the current candidate match if it is within the bounds of our search space for the currentChunk + candidateLoop: while(-1 < currentIndex && currentIndex < exclusiveUpperBound){ + // We already know index 0 matches because we used indexOf to find the candidateIndex so we start at index 1 + let matchIndex = 1; + while(matchIndex < searchLen){ + const candidateIndex = currentIndex + matchIndex; + const candidateValue = candidateIndex < currentChunk.length ? currentChunk[candidateIndex] : nextChunk[candidateIndex - currentChunk.length]; + if (candidateValue !== search[matchIndex]) { + // No match, reset and continue the search from the next position + currentIndex = currentChunk.indexOf(first, currentIndex + 1); + continue candidateLoop; + } + matchIndex++; + } + // We found a complete match. currentIndex is our starting point to replace the value. + found = true; + // enqueue everything up to the match + controller.enqueue(currentChunk.subarray(0, currentIndex)); + // enqueue the replacement value + controller.enqueue(replace); + // If there are bytes in the currentChunk after the match enqueue them + if (currentIndex + searchLen < currentChunk.length) { + controller.enqueue(currentChunk.slice(currentIndex + searchLen)); + } + // If we have a next chunk we enqueue it now + if (nextChunk) { + // if replacement spills over to the next chunk we first exclude the replaced bytes + const overflowBytes = currentIndex + searchLen - currentChunk.length; + const truncatedChunk = overflowBytes > 0 ? nextChunk.subarray(overflowBytes) : nextChunk; + controller.enqueue(truncatedChunk); + } + // We are now in found mode and don't need to track currentChunk anymore + currentChunk = null; + return; + } + // No match found in this chunk, emit it and wait for the next one + controller.enqueue(currentChunk); + } + // Advance to the next chunk + currentChunk = nextChunk; + } + return new TransformStream({ + transform (chunk, controller) { + processChunk(controller, chunk); + }, + flush (controller) { + processChunk(controller, null); + } + }); +} +}), +"[project]/node_modules/next/dist/esm/server/stream-utils/uint8array-helpers.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Find the starting index of Uint8Array `b` within Uint8Array `a`. + */ __turbopack_context__.s([ + "indexOfUint8Array", + ()=>indexOfUint8Array, + "isEquivalentUint8Arrays", + ()=>isEquivalentUint8Arrays, + "removeFromUint8Array", + ()=>removeFromUint8Array +]); +function indexOfUint8Array(a, b) { + if (b.length === 0) return 0; + if (a.length === 0 || b.length > a.length) return -1; + // Use Node's native implementation when available. + if (typeof Buffer !== 'undefined') { + const haystack = Buffer.isBuffer(a) ? a : Buffer.from(a.buffer, a.byteOffset, a.byteLength); + return haystack.indexOf(b); + } + // start iterating through `a` + for(let i = 0; i <= a.length - b.length; i++){ + let completeMatch = true; + // from index `i`, iterate through `b` and check for mismatch + for(let j = 0; j < b.length; j++){ + // if the values do not match, then this isn't a complete match, exit `b` iteration early and iterate to next index of `a`. + if (a[i + j] !== b[j]) { + completeMatch = false; + break; + } + } + if (completeMatch) { + return i; + } + } + return -1; +} +function isEquivalentUint8Arrays(a, b) { + if (a.length !== b.length) return false; + for(let i = 0; i < a.length; i++){ + if (a[i] !== b[i]) return false; + } + return true; +} +function removeFromUint8Array(a, b) { + const tagIndex = indexOfUint8Array(a, b); + if (tagIndex === 0) return a.subarray(b.length); + if (tagIndex > -1) { + const removed = new Uint8Array(a.length - b.length); + removed.set(a.subarray(0, tagIndex)); + removed.set(a.subarray(tagIndex + b.length), tagIndex); + return removed; + } else { + return a; + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/error.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "PageSignatureError", + ()=>PageSignatureError, + "RemovedPageError", + ()=>RemovedPageError, + "RemovedUAError", + ()=>RemovedUAError +]); +class PageSignatureError extends Error { + constructor({ page }){ + super(`The middleware "${page}" accepts an async API directly with the form: + + export function middleware(request, event) { + return NextResponse.redirect('/new-location') + } + + Read more: https://nextjs.org/docs/messages/middleware-new-signature + `); + } +} +class RemovedPageError extends Error { + constructor(){ + super(`The request.page has been deprecated in favour of \`URLPattern\`. + Read more: https://nextjs.org/docs/messages/middleware-request-page + `); + } +} +class RemovedUAError extends Error { + constructor(){ + super(`The request.ua has been removed in favour of \`userAgent\` function. + Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent + `); + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/next-url.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "NextURL", + ()=>NextURL +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$detect$2d$domain$2d$locale$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/i18n/detect-domain-locale.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$format$2d$next$2d$pathname$2d$info$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/format-next-pathname-info.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$get$2d$hostname$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/get-hostname.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$next$2d$pathname$2d$info$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/get-next-pathname-info.js [app-route] (ecmascript)"); +; +; +; +; +const REGEX_LOCALHOST_HOSTNAME = /^(?:127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\[::1\]|localhost)$/; +function parseURL(url, base) { + const parsed = new URL(String(url), base && String(base)); + if (REGEX_LOCALHOST_HOSTNAME.test(parsed.hostname)) { + parsed.hostname = 'localhost'; + } + return parsed; +} +const Internal = Symbol('NextURLInternal'); +class NextURL { + constructor(input, baseOrOpts, opts){ + let base; + let options; + if (typeof baseOrOpts === 'object' && 'pathname' in baseOrOpts || typeof baseOrOpts === 'string') { + base = baseOrOpts; + options = opts || {}; + } else { + options = opts || baseOrOpts || {}; + } + this[Internal] = { + url: parseURL(input, base ?? options.base), + options: options, + basePath: '' + }; + this.analyze(); + } + analyze() { + var _this_Internal_options_nextConfig_i18n, _this_Internal_options_nextConfig, _this_Internal_domainLocale, _this_Internal_options_nextConfig_i18n1, _this_Internal_options_nextConfig1; + const info = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$next$2d$pathname$2d$info$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getNextPathnameInfo"])(this[Internal].url.pathname, { + nextConfig: this[Internal].options.nextConfig, + parseData: !("TURBOPACK compile-time value", void 0), + i18nProvider: this[Internal].options.i18nProvider + }); + const hostname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$get$2d$hostname$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getHostname"])(this[Internal].url, this[Internal].options.headers); + this[Internal].domainLocale = this[Internal].options.i18nProvider ? this[Internal].options.i18nProvider.detectDomainLocale(hostname) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$detect$2d$domain$2d$locale$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["detectDomainLocale"])((_this_Internal_options_nextConfig = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n = _this_Internal_options_nextConfig.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n.domains, hostname); + const defaultLocale = ((_this_Internal_domainLocale = this[Internal].domainLocale) == null ? void 0 : _this_Internal_domainLocale.defaultLocale) || ((_this_Internal_options_nextConfig1 = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n1 = _this_Internal_options_nextConfig1.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n1.defaultLocale); + this[Internal].url.pathname = info.pathname; + this[Internal].defaultLocale = defaultLocale; + this[Internal].basePath = info.basePath ?? ''; + this[Internal].buildId = info.buildId; + this[Internal].locale = info.locale ?? defaultLocale; + this[Internal].trailingSlash = info.trailingSlash; + } + formatPathname() { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$format$2d$next$2d$pathname$2d$info$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["formatNextPathnameInfo"])({ + basePath: this[Internal].basePath, + buildId: this[Internal].buildId, + defaultLocale: !this[Internal].options.forceLocale ? this[Internal].defaultLocale : undefined, + locale: this[Internal].locale, + pathname: this[Internal].url.pathname, + trailingSlash: this[Internal].trailingSlash + }); + } + formatSearch() { + return this[Internal].url.search; + } + get buildId() { + return this[Internal].buildId; + } + set buildId(buildId) { + this[Internal].buildId = buildId; + } + get locale() { + return this[Internal].locale ?? ''; + } + set locale(locale) { + var _this_Internal_options_nextConfig_i18n, _this_Internal_options_nextConfig; + if (!this[Internal].locale || !((_this_Internal_options_nextConfig = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n = _this_Internal_options_nextConfig.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n.locales.includes(locale))) { + throw new TypeError(`The NextURL configuration includes no locale "${locale}"`); + } + this[Internal].locale = locale; + } + get defaultLocale() { + return this[Internal].defaultLocale; + } + get domainLocale() { + return this[Internal].domainLocale; + } + get searchParams() { + return this[Internal].url.searchParams; + } + get host() { + return this[Internal].url.host; + } + set host(value) { + this[Internal].url.host = value; + } + get hostname() { + return this[Internal].url.hostname; + } + set hostname(value) { + this[Internal].url.hostname = value; + } + get port() { + return this[Internal].url.port; + } + set port(value) { + this[Internal].url.port = value; + } + get protocol() { + return this[Internal].url.protocol; + } + set protocol(value) { + this[Internal].url.protocol = value; + } + get href() { + const pathname = this.formatPathname(); + const search = this.formatSearch(); + return `${this.protocol}//${this.host}${pathname}${search}${this.hash}`; + } + set href(url) { + this[Internal].url = parseURL(url); + this.analyze(); + } + get origin() { + return this[Internal].url.origin; + } + get pathname() { + return this[Internal].url.pathname; + } + set pathname(value) { + this[Internal].url.pathname = value; + } + get hash() { + return this[Internal].url.hash; + } + set hash(value) { + this[Internal].url.hash = value; + } + get search() { + return this[Internal].url.search; + } + set search(value) { + this[Internal].url.search = value; + } + get password() { + return this[Internal].url.password; + } + set password(value) { + this[Internal].url.password = value; + } + get username() { + return this[Internal].url.username; + } + set username(value) { + this[Internal].url.username = value; + } + get basePath() { + return this[Internal].basePath; + } + set basePath(value) { + this[Internal].basePath = value.startsWith('/') ? value : `/${value}`; + } + toString() { + return this.href; + } + toJSON() { + return this.href; + } + [Symbol.for('edge-runtime.inspect.custom')]() { + return { + href: this.href, + origin: this.origin, + protocol: this.protocol, + username: this.username, + password: this.password, + host: this.host, + hostname: this.hostname, + port: this.port, + pathname: this.pathname, + search: this.search, + searchParams: this.searchParams, + hash: this.hash + }; + } + clone() { + return new NextURL(String(this), this[Internal].options); + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/headers.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "HeadersAdapter", + ()=>HeadersAdapter, + "ReadonlyHeadersError", + ()=>ReadonlyHeadersError +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/reflect.js [app-route] (ecmascript)"); +; +class ReadonlyHeadersError extends Error { + constructor(){ + super('Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers'); + } + static callable() { + throw new ReadonlyHeadersError(); + } +} +/** + * Builds the read methods for a sealed view that exposes all of `target`. + */ function createPassThroughMethods(target, sealed) { + return { + get: target.get.bind(target), + has: target.has.bind(target), + getSetCookie: target.getSetCookie.bind(target), + keys: target.keys.bind(target), + values: target.values.bind(target), + entries: target.entries.bind(target), + [Symbol.iterator]: target[Symbol.iterator].bind(target), + // The native method passes the unsealed target as the callback's `parent` + // argument. That is a mutable handle on the underlying headers. Pass the + // sealed view instead. + forEach (callbackfn, thisArg) { + for (const [name, value] of target.entries()){ + callbackfn.call(thisArg, value, name, sealed); + } + } + }; +} +/** + * Builds the read methods for a sealed view that omits the header names matched + * by `isHidden`. + */ function createHidingMethods(target, sealed, isHidden) { + function* entries() { + for (const entry of target.entries()){ + if (!isHidden(entry[0])) { + yield entry; + } + } + } + return { + entries, + [Symbol.iterator]: entries, + get: (name)=>isHidden(name) ? null : target.get(name), + has: (name)=>isHidden(name) ? false : target.has(name), + getSetCookie: ()=>isHidden('set-cookie') ? [] : target.getSetCookie(), + *keys () { + for (const name of target.keys()){ + if (!isHidden(name)) { + yield name; + } + } + }, + *values () { + for (const [, value] of entries()){ + yield value; + } + }, + // The native method passes the unsealed target as the callback's `parent` + // argument. That is a mutable handle on the underlying headers. Pass the + // sealed view instead. + forEach (callbackfn, thisArg) { + for (const [name, value] of entries()){ + callbackfn.call(thisArg, value, name, sealed); + } + } + }; +} +class HeadersAdapter extends Headers { + constructor(headers){ + // We've already overridden the methods that would be called, so we're just + // calling the super constructor to ensure that the instanceof check works. + super(); + this.headers = new Proxy(headers, { + get (target, prop, receiver) { + // Because this is just an object, we expect that all "get" operations + // are for properties. If it's a "get" for a symbol, we'll just return + // the symbol. + if (typeof prop === 'symbol') { + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, prop, receiver); + } + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, return undefined. + if (typeof original === 'undefined') return; + // If the original casing exists, return the value. + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, original, receiver); + }, + set (target, prop, value, receiver) { + if (typeof prop === 'symbol') { + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].set(target, prop, value, receiver); + } + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, use the prop as the key. + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].set(target, original ?? prop, value, receiver); + }, + has (target, prop) { + if (typeof prop === 'symbol') return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].has(target, prop); + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, return false. + if (typeof original === 'undefined') return false; + // If the original casing exists, return true. + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].has(target, original); + }, + deleteProperty (target, prop) { + if (typeof prop === 'symbol') return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].deleteProperty(target, prop); + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, return true. + if (typeof original === 'undefined') return true; + // If the original casing exists, delete the property. + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].deleteProperty(target, original); + } + }); + } + /** + * Seals a Headers instance to prevent modification by throwing an error when + * any mutating method is called. + * + * The sealed view stays live. Later writes to `headers` remain visible + * through it. + * + * `hidden` omits the given header names from every read operation (`get`, + * `has`, `getSetCookie`, `forEach`, and iteration). The names must be + * lowercase. The underlying headers are neither copied nor mutated, so hidden + * headers remain available to the framework. + */ static seal(headers, hidden) { + const isHidden = hidden && hidden.size > 0 ? (name)=>hidden.has(name.toLowerCase()) : null; + // The methods are built once per sealed view and reused, so repeated access + // returns the same function instead of a fresh closure. They are assigned + // after the proxy exists because `forEach` hands the proxy to its callback. + // Creating the proxy runs no trap, so nothing can read them before then. + let methods; + const sealed = new Proxy(headers, { + get (target, prop, receiver) { + switch(prop){ + case 'append': + case 'delete': + case 'set': + return ReadonlyHeadersError.callable; + case Symbol.iterator: + return methods[Symbol.iterator]; + case 'get': + case 'has': + case 'getSetCookie': + case 'keys': + case 'values': + case 'entries': + case 'forEach': + return methods[prop]; + default: + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, prop, receiver); + } + } + }); + methods = isHidden ? createHidingMethods(headers, sealed, isHidden) : createPassThroughMethods(headers, sealed); + return sealed; + } + /** + * @param headers + * @returns A fresh object identity backed by the original value + */ static fresh(headers) { + return new Proxy(headers, { + get (target, prop, receiver) { + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, prop, receiver); + } + }); + } + /** + * Merges a header value into a string. This stores multiple values as an + * array, so we need to merge them into a string. + * + * @param value a header value + * @returns a merged header value (a string) + */ merge(value) { + if (Array.isArray(value)) return value.join(', '); + return value; + } + /** + * Creates a Headers instance from a plain object or a Headers instance. + * + * @param headers a plain object or a Headers instance + * @returns a headers instance + */ static from(headers) { + if (headers instanceof Headers) return headers; + return new HeadersAdapter(headers); + } + append(name, value) { + const existing = this.headers[name]; + if (typeof existing === 'string') { + this.headers[name] = [ + existing, + value + ]; + } else if (Array.isArray(existing)) { + existing.push(value); + } else { + this.headers[name] = value; + } + } + delete(name) { + delete this.headers[name]; + } + get(name) { + const value = this.headers[name]; + if (typeof value !== 'undefined') return this.merge(value); + return null; + } + has(name) { + return typeof this.headers[name] !== 'undefined'; + } + set(name, value) { + this.headers[name] = value; + } + forEach(callbackfn, thisArg) { + for (const [name, value] of this.entries()){ + callbackfn.call(thisArg, value, name, this); + } + } + *entries() { + for (const key of Object.keys(this.headers)){ + const name = key.toLowerCase(); + // We assert here that this is a string because we got it from the + // Object.keys() call above. + const value = this.get(name); + yield [ + name, + value + ]; + } + } + *keys() { + for (const key of Object.keys(this.headers)){ + const name = key.toLowerCase(); + yield name; + } + } + *values() { + for (const key of Object.keys(this.headers)){ + // We assert here that this is a string because we got it from the + // Object.keys() call above. + const value = this.get(key); + yield value; + } + } + [Symbol.iterator]() { + return this.entries(); + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/next-request.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "NextRequestAdapter", + ()=>NextRequestAdapter, + "ResponseAborted", + ()=>ResponseAborted, + "ResponseAbortedName", + ()=>ResponseAbortedName, + "createAbortController", + ()=>createAbortController, + "signalFromNodeResponse", + ()=>signalFromNodeResponse +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/request-meta.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/utils.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/request.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/base-http/helpers.js [app-route] (ecmascript)"); +; +; +; +; +const ResponseAbortedName = 'ResponseAborted'; +class ResponseAborted extends Error { + constructor(...args){ + super(...args), this.name = ResponseAbortedName; + } +} +function createAbortController(response) { + const controller = new AbortController(); + // If `finish` fires first, then `res.end()` has been called and the close is + // just us finishing the stream on our side. If `close` fires first, then we + // know the client disconnected before we finished. + response.once('close', ()=>{ + if (response.writableFinished) return; + controller.abort(new ResponseAborted()); + }); + return controller; +} +function signalFromNodeResponse(response) { + const { errored, destroyed } = response; + if (errored || destroyed) { + return AbortSignal.abort(errored ?? new ResponseAborted()); + } + const { signal } = createAbortController(response); + return signal; +} +class NextRequestAdapter { + static fromBaseNextRequest(request, signal) { + if (// environment variable check provides dead code elimination. + ("TURBOPACK compile-time value", "nodejs") === 'edge' && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isWebNextRequest"])(request)) //TURBOPACK unreachable + ; + else if (// environment variable check provides dead code elimination. + ("TURBOPACK compile-time value", "nodejs") !== 'edge' && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isNodeNextRequest"])(request)) { + return NextRequestAdapter.fromNodeNextRequest(request, signal); + } else { + throw new Error('Invariant: Unsupported NextRequest type'); + } + } + static fromNodeNextRequest(request, signal) { + // HEAD and GET requests can not have a body. + let body = null; + if (request.method !== 'GET' && request.method !== 'HEAD' && request.body) { + // @ts-expect-error - this is handled by undici, when streams/web land use it instead + body = request.body; + } + let url; + if (request.url.startsWith('http')) { + url = new URL(request.url); + } else { + // Grab the full URL from the request metadata. + const base = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestMeta"])(request, 'initURL'); + if (!base || !base.startsWith('http')) { + // Because the URL construction relies on the fact that the URL provided + // is absolute, we need to provide a base URL. We can't use the request + // URL because it's relative, so we use a dummy URL instead. + url = new URL(request.url, 'http://n'); + } else { + url = new URL(request.url, base); + } + } + return new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextRequest"](url, { + method: request.method, + headers: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["fromNodeOutgoingHttpHeaders"])(request.headers), + duplex: 'half', + signal, + // geo + // ip + // nextConfig + // body can not be passed if request was aborted + // or we get a Request body was disturbed error + ...signal.aborted ? {} : { + body + } + }); + } + static fromWebNextRequest(request) { + // HEAD and GET requests can not have a body. + let body = null; + if (request.method !== 'GET' && request.method !== 'HEAD') { + body = request.body; + } + return new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextRequest"](request.url, { + method: request.method, + headers: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["fromNodeOutgoingHttpHeaders"])(request.headers), + duplex: 'half', + signal: request.request.signal, + // geo + // ip + // nextConfig + // body can not be passed if request was aborted + // or we get a Request body was disturbed error + ...request.request.signal.aborted ? {} : { + body + } + }); + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/reflect.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ReflectAdapter", + ()=>ReflectAdapter +]); +class ReflectAdapter { + static get(target, prop, receiver) { + const value = Reflect.get(target, prop, receiver); + if (typeof value === 'function') { + return value.bind(target); + } + return value; + } + static set(target, prop, value, receiver) { + return Reflect.set(target, prop, value, receiver); + } + static has(target, prop) { + return Reflect.has(target, prop); + } + static deleteProperty(target, prop) { + return Reflect.deleteProperty(target, prop); + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/cookies.js [app-route] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f40$edge$2d$runtime$2f$cookies$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js [app-route] (ecmascript)"); +; +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/request.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "INTERNALS", + ()=>INTERNALS, + "NextRequest", + ()=>NextRequest +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$next$2d$url$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/next-url.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/utils.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/error.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$cookies$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/cookies.js [app-route] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f40$edge$2d$runtime$2f$cookies$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js [app-route] (ecmascript)"); +; +; +; +; +const INTERNALS = Symbol('internal request'); +class NextRequest extends Request { + constructor(input, init = {}){ + const url = typeof input !== 'string' && 'url' in input ? input.url : String(input); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["validateURL"])(url); + // node Request instance requires duplex option when a body + // is present or it errors, we don't handle this for + // Request being passed in since it would have already + // errored if this wasn't configured + if ("TURBOPACK compile-time truthy", 1) { + if (init.body && init.duplex !== 'half') { + init.duplex = 'half'; + } + } + if (input instanceof Request) super(input, init); + else super(url, init); + const nextUrl = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$next$2d$url$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextURL"](url, { + headers: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["toNodeOutgoingHttpHeaders"])(this.headers), + nextConfig: init.nextConfig + }); + this[INTERNALS] = { + cookies: new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f40$edge$2d$runtime$2f$cookies$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RequestCookies"](this.headers), + nextUrl, + url: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : nextUrl.toString() + }; + } + [Symbol.for('edge-runtime.inspect.custom')]() { + return { + cookies: this.cookies, + nextUrl: this.nextUrl, + url: this.url, + // rest of props come from Request + bodyUsed: this.bodyUsed, + cache: this.cache, + credentials: this.credentials, + destination: this.destination, + headers: Object.fromEntries(this.headers), + integrity: this.integrity, + keepalive: this.keepalive, + method: this.method, + mode: this.mode, + redirect: this.redirect, + referrer: this.referrer, + referrerPolicy: this.referrerPolicy, + signal: this.signal + }; + } + get cookies() { + return this[INTERNALS].cookies; + } + get nextUrl() { + return this[INTERNALS].nextUrl; + } + /** + * @deprecated + * `page` has been deprecated in favour of `URLPattern`. + * Read more: https://nextjs.org/docs/messages/middleware-request-page + */ get page() { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RemovedPageError"](); + } + /** + * @deprecated + * `ua` has been removed in favour of \`userAgent\` function. + * Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent + */ get ua() { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RemovedUAError"](); + } + get url() { + return this[INTERNALS].url; + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/utils.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "fromNodeOutgoingHttpHeaders", + ()=>fromNodeOutgoingHttpHeaders, + "normalizeNextQueryParam", + ()=>normalizeNextQueryParam, + "splitCookiesString", + ()=>splitCookiesString, + "toNodeOutgoingHttpHeaders", + ()=>toNodeOutgoingHttpHeaders, + "validateURL", + ()=>validateURL +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)"); +; +function fromNodeOutgoingHttpHeaders(nodeHeaders) { + const headers = new Headers(); + for (let [key, value] of Object.entries(nodeHeaders)){ + const values = Array.isArray(value) ? value : [ + value + ]; + for (let v of values){ + if (typeof v === 'undefined') continue; + if (typeof v === 'number') { + v = v.toString(); + } + headers.append(key, v); + } + } + return headers; +} +function splitCookiesString(cookiesString) { + var cookiesStrings = []; + var pos = 0; + var start; + var ch; + var lastComma; + var nextStart; + var cookiesSeparatorFound; + function skipWhitespace() { + while(pos < cookiesString.length && /\s/.test(cookiesString.charAt(pos))){ + pos += 1; + } + return pos < cookiesString.length; + } + function notSpecialChar() { + ch = cookiesString.charAt(pos); + return ch !== '=' && ch !== ';' && ch !== ','; + } + while(pos < cookiesString.length){ + start = pos; + cookiesSeparatorFound = false; + while(skipWhitespace()){ + ch = cookiesString.charAt(pos); + if (ch === ',') { + // ',' is a cookie separator if we have later first '=', not ';' or ',' + lastComma = pos; + pos += 1; + skipWhitespace(); + nextStart = pos; + while(pos < cookiesString.length && notSpecialChar()){ + pos += 1; + } + // currently special character + if (pos < cookiesString.length && cookiesString.charAt(pos) === '=') { + // we found cookies separator + cookiesSeparatorFound = true; + // pos is inside the next cookie, so back up and return it. + pos = nextStart; + cookiesStrings.push(cookiesString.substring(start, lastComma)); + start = pos; + } else { + // in param ',' or param separator ';', + // we continue from that comma + pos = lastComma + 1; + } + } else { + pos += 1; + } + } + if (!cookiesSeparatorFound || pos >= cookiesString.length) { + cookiesStrings.push(cookiesString.substring(start, cookiesString.length)); + } + } + return cookiesStrings; +} +function toNodeOutgoingHttpHeaders(headers) { + const nodeHeaders = {}; + const cookies = []; + if (headers) { + for (const [key, value] of headers.entries()){ + if (key.toLowerCase() === 'set-cookie') { + // We may have gotten a comma joined string of cookies, or multiple + // set-cookie headers. We need to merge them into one header array + // to represent all the cookies. + cookies.push(...splitCookiesString(value)); + nodeHeaders[key] = cookies.length === 1 ? cookies[0] : cookies; + } else { + nodeHeaders[key] = value; + } + } + } + return nodeHeaders; +} +function validateURL(url) { + try { + return String(new URL(String(url))); + } catch (error) { + throw new Error(`URL is malformed "${String(url)}". Please use only absolute URLs - https://nextjs.org/docs/messages/middleware-relative-urls`, { + cause: error + }); + } +} +function normalizeNextQueryParam(key) { + const prefixes = [ + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_QUERY_PARAM_PREFIX"], + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_INTERCEPTION_MARKER_PREFIX"] + ]; + for (const prefix of prefixes){ + if (key !== prefix && key.startsWith(prefix)) { + return key.substring(prefix.length); + } + } + return null; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/errors/constants.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "MISSING_ROOT_TAGS_ERROR", + ()=>MISSING_ROOT_TAGS_ERROR +]); +const MISSING_ROOT_TAGS_ERROR = 'NEXT_MISSING_ROOT_TAGS'; +}), +"[project]/node_modules/next/dist/esm/shared/lib/get-hostname.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Takes an object with a hostname property (like a parsed URL) and some + * headers that may contain Host and returns the preferred hostname. + * @param parsed An object containing a hostname property. + * @param headers A dictionary with headers containing a `host`. + */ __turbopack_context__.s([ + "getHostname", + ()=>getHostname +]); +function getHostname(parsed, headers) { + // Get the hostname from the headers if it exists, otherwise use the parsed + // hostname. + let hostname; + if (headers?.host && !Array.isArray(headers.host)) { + hostname = headers.host.toString().split(':', 1)[0]; + } else if (parsed.hostname) { + hostname = parsed.hostname; + } else return; + return hostname.toLowerCase(); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/hash.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +// http://www.cse.yorku.ca/~oz/hash.html +// More specifically, 32-bit hash via djbxor +// (ref: https://gist.github.com/eplawless/52813b1d8ad9af510d85?permalink_comment_id=3367765#gistcomment-3367765) +// This is due to number type differences between rust for turbopack to js number types, +// where rust does not have easy way to repreesnt js's 53-bit float number type for the matching +// overflow behavior. This is more `correct` in terms of having canonical hash across different runtime / implementation +// as can gaurantee determinstic output from 32bit hash. +__turbopack_context__.s([ + "djb2Hash", + ()=>djb2Hash, + "hexHash", + ()=>hexHash +]); +function djb2Hash(str) { + let hash = 5381; + for(let i = 0; i < str.length; i++){ + const char = str.charCodeAt(i); + hash = (hash << 5) + hash + char & 0xffffffff; + } + return hash >>> 0; +} +function hexHash(str) { + return djb2Hash(str).toString(36).slice(0, 5); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/i18n/detect-domain-locale.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "detectDomainLocale", + ()=>detectDomainLocale +]); +function detectDomainLocale(domainItems, hostname, detectedLocale) { + if (!domainItems) return; + if (detectedLocale) { + detectedLocale = detectedLocale.toLowerCase(); + } + for (const item of domainItems){ + // remove port if present + const domainHostname = item.domain?.split(':', 1)[0].toLowerCase(); + if (hostname === domainHostname || detectedLocale === item.defaultLocale.toLowerCase() || item.locales?.some((locale)=>locale.toLowerCase() === detectedLocale)) { + return item; + } + } +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "normalizeLocalePath", + ()=>normalizeLocalePath +]); +/** + * A cache of lowercased locales for each list of locales. This is stored as a + * WeakMap so if the locales are garbage collected, the cache entry will be + * removed as well. + */ const cache = new WeakMap(); +function normalizeLocalePath(pathname, locales) { + // If locales is undefined, return the pathname as is. + if (!locales) return { + pathname + }; + // Get the cached lowercased locales or create a new cache entry. + let lowercasedLocales = cache.get(locales); + if (!lowercasedLocales) { + lowercasedLocales = locales.map((locale)=>locale.toLowerCase()); + cache.set(locales, lowercasedLocales); + } + let detectedLocale; + // The first segment will be empty, because it has a leading `/`. If + // there is no further segment, there is no locale (or it's the default). + const segments = pathname.split('/', 2); + // If there's no second segment (ie, the pathname is just `/`), there's no + // locale. + if (!segments[1]) return { + pathname + }; + // The second segment will contain the locale part if any. + const segment = segments[1].toLowerCase(); + // See if the segment matches one of the locales. If it doesn't, there is + // no locale (or it's the default). + const index = lowercasedLocales.indexOf(segment); + if (index < 0) return { + pathname + }; + // Return the case-sensitive locale. + detectedLocale = locales[index]; + // Remove the `/${locale}` part of the pathname. + pathname = pathname.slice(detectedLocale.length + 1) || '/'; + return { + pathname, + detectedLocale + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/instant-messages.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "createLinkPrefetchPartialError", + ()=>createLinkPrefetchPartialError, + "createUnrenderedSegmentError", + ()=>createUnrenderedSegmentError +]); +function createUnrenderedSegmentError(route, missingFiles) { + let message = `Route "${route}": Could not validate that a segment in your UI has instant navigation.`; + if (missingFiles.length > 0) { + const label = missingFiles.length === 1 ? 'Dropped segment' : 'Dropped segments'; + message += `\n\nThis segment was dropped from rendering. Issues that would prevent instant navigation will go undetected.` + `\n\n${label}:\n${missingFiles.map((p)=>` ${p}`).join('\n')}` + `\n\nWays to fix this:` + `\n - [render] Render the dropped segment` + `\n - [ignore] Set \`export const instant = false\` to opt the dropped segment out of instant-navigation validation` + `\n\nLearn more: https://nextjs.org/docs/messages/instant-unrendered-segment`; + } + return new Error(message); +} +function createLinkPrefetchPartialError(pathname) { + return new Error(`Next.js encountered dynamic data during prefetching for "${pathname}".\n\n` + `This will lead to slower, more expensive prefetches.\n\n` + `Ways to fix this:\n` + ` - [upgrade] Opt into Partial Prefetching by exporting \`const prefetch = 'partial'\` from the page or layout, or by setting \`partialPrefetching: true\` in next.config to opt the whole app in\n` + ` - [disable] Remove \`prefetch={true}\` from the to use the default prefetch\n` + ` - [ignore] Set \`export const instant = false\` to opt the route out of instant-navigation validation\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-link-prefetch-partial`); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "InvariantError", + ()=>InvariantError +]); +class InvariantError extends Error { + constructor(message, options){ + super(`Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`, options); + this.name = 'InvariantError'; + } +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/is-thenable.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Check to see if a value is Thenable. + * + * @param promise the maybe-thenable value + * @returns true if the value is thenable + */ __turbopack_context__.s([ + "isThenable", + ()=>isThenable +]); +function isThenable(promise) { + return promise !== null && typeof promise === 'object' && 'then' in promise && typeof promise.then === 'function'; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/lazy-dynamic/react-browser-bailout.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "createReactBrowserBailoutReason", + ()=>createReactBrowserBailoutReason, + "getReactBrowserBailoutReason", + ()=>getReactBrowserBailoutReason, + "isNextBrowserBailoutError", + ()=>isNextBrowserBailoutError +]); +// This module is bundled separately into user code and the precompiled App +// Router runtime. Use the global symbol registry so both copies recognize the +// same browser bailout reason. +const REACT_BROWSER_BAILOUT_REASON = Symbol.for('next.browser-bailout-reason'); +function createReactBrowserBailoutReason(reason) { + return { + $$typeof: REACT_BROWSER_BAILOUT_REASON, + reason + }; +} +function getReactBrowserBailoutReason(error) { + const cause = error?.cause; + return cause?.$$typeof === REACT_BROWSER_BAILOUT_REASON ? cause.reason : undefined; +} +function isNextBrowserBailoutError(error) { + return getReactBrowserBailoutReason(error) !== undefined; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/page-path/ensure-leading-slash.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * For a given page path, this function ensures that there is a leading slash. + * If there is not a leading slash, one is added, otherwise it is noop. + */ __turbopack_context__.s([ + "ensureLeadingSlash", + ()=>ensureLeadingSlash +]); +function ensureLeadingSlash(path) { + return path.startsWith('/') ? path : `/${path}`; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/page-path/normalize-page-path.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "normalizePagePath", + ()=>normalizePagePath +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$ensure$2d$leading$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/page-path/ensure-leading-slash.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/index.js [app-route] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$is$2d$dynamic$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/is-dynamic.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/utils.js [app-route] (ecmascript)"); +; +; +; +function normalizePagePath(page) { + const normalized = /^\/index(\/|$)/.test(page) && !(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$is$2d$dynamic$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isDynamicRoute"])(page) ? `/index${page}` : page === '/' ? '/index' : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$ensure$2d$leading$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ensureLeadingSlash"])(page); + if ("TURBOPACK compile-time truthy", 1) { + const { posix } = __turbopack_context__.r("[externals]/path [external] (path, cjs)"); + const resolvedPage = posix.normalize(normalized); + if (resolvedPage !== normalized) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NormalizeError"](`Requested and resolved page mismatch: ${normalized} ${resolvedPage}`); + } + } + return normalized; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "createPromiseWithResolvers", + ()=>createPromiseWithResolvers +]); +function createPromiseWithResolvers() { + // Shim of Stage 4 Promise.withResolvers proposal + let resolve; + let reject; + const promise = new Promise((res, rej)=>{ + resolve = res; + reject = rej; + }); + return { + resolve: resolve, + reject: reject, + promise + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/request-insights.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getRequestInsightKey", + ()=>getRequestInsightKey, + "getRequestInsightKind", + ()=>getRequestInsightKind +]); +function getRequestInsightKind(insight) { + return insight.kind ?? 'request'; +} +function getRequestInsightKey(insight) { + return `${getRequestInsightKind(insight)}:${insight.requestId}`; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-locale.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "addLocale", + ()=>addLocale +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [app-route] (ecmascript)"); +; +; +function addLocale(path, locale, defaultLocale, ignorePrefix) { + // If no locale was given or the locale is the default locale, we don't need + // to prefix the path. + if (!locale || locale === defaultLocale) return path; + const lower = path.toLowerCase(); + // If the path is an API path or the path already has the locale prefix, we + // don't need to prefix the path. + if (!ignorePrefix) { + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pathHasPrefix"])(lower, '/api')) return path; + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pathHasPrefix"])(lower, `/${locale.toLowerCase()}`)) return path; + } + // Add the locale prefix to the path. + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["addPathPrefix"])(path, `/${locale}`); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "addPathPrefix", + ()=>addPathPrefix +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [app-route] (ecmascript)"); +; +function addPathPrefix(path, prefix) { + if (!path.startsWith('/') || !prefix) { + return path; + } + const { pathname, query, hash } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["parsePath"])(path); + return `${prefix}${pathname}${query}${hash}`; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-suffix.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "addPathSuffix", + ()=>addPathSuffix +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [app-route] (ecmascript)"); +; +function addPathSuffix(path, suffix) { + if (!path.startsWith('/') || !suffix) { + return path; + } + const { pathname, query, hash } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["parsePath"])(path); + return `${pathname}${suffix}${query}${hash}`; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "compareAppPaths", + ()=>compareAppPaths, + "normalizeAppPath", + ()=>normalizeAppPath, + "normalizeRscURL", + ()=>normalizeRscURL, + "selectAppPageEntry", + ()=>selectAppPageEntry +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$ensure$2d$leading$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/page-path/ensure-leading-slash.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/segment.js [app-route] (ecmascript)"); +; +; +function normalizeAppPath(route) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$ensure$2d$leading$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ensureLeadingSlash"])(route.split('/').reduce((pathname, segment, index, segments)=>{ + // Empty segments are ignored. + if (!segment) { + return pathname; + } + // Groups are ignored. + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isGroupSegment"])(segment)) { + return pathname; + } + // Parallel segments are ignored. + if (segment[0] === '@') { + return pathname; + } + // The last segment (if it's a leaf) should be ignored. + if ((segment === 'page' || segment === 'route') && index === segments.length - 1) { + return pathname; + } + return `${pathname}/${segment}`; + }, '')); +} +function compareAppPaths(a, b) { + const aHasSlot = a.includes('/@'); + const bHasSlot = b.includes('/@'); + if (aHasSlot && !bHasSlot) return -1; + if (!aHasSlot && bHasSlot) return 1; + return a.localeCompare(b); +} +function normalizeAppPageEntryPathname(appPath) { + // Webpack app entries preserve escaped underscore segments as `%5F`, while + // normalized request pathnames expose the decoded `_` segment. + return normalizeAppPath(appPath).replace(/%5F/g, '_'); +} +function selectAppPageEntry(pathname, appPaths, normalizePathname = normalizeAppPageEntryPathname) { + let entry; + for (const appPath of appPaths){ + if (normalizePathname(appPath) !== pathname) continue; + if (entry === undefined || compareAppPaths(entry, appPath) < 0) { + entry = appPath; + } + } + if (entry === undefined) { + throw new Error(`Invariant: no direct app page entry found for ${pathname}`); + } + return entry; +} +function normalizeRscURL(url) { + return url.replace(/\.rsc($|\?)/, '$1'); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/cache-busting-search-param.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "computeCacheBustingSearchParam", + ()=>computeCacheBustingSearchParam, + "computeLegacyCacheBustingSearchParam", + ()=>computeLegacyCacheBustingSearchParam +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$hash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/hash.js [app-route] (ecmascript)"); +; +const CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES = 12; +const textEncoder = new TextEncoder(); +function encodeCacheBustingSearchParam(bytes) { + let binary = ''; + for(let i = 0; i < bytes.length; i++){ + binary += String.fromCharCode(bytes[i]); + } + return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); +} +function normalizeCacheBustingInput(value) { + if (value === undefined) { + return '0'; + } + return Array.isArray(value) ? value.join(',') : value; +} +function createCacheBustingSearchParamInput(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader) { + if ((prefetchHeader === undefined || prefetchHeader === '0') && segmentPrefetchHeader === undefined && stateTreeHeader === undefined && nextUrlHeader === undefined) { + return null; + } + return [ + prefetchHeader ?? '0', + normalizeCacheBustingInput(segmentPrefetchHeader), + normalizeCacheBustingInput(stateTreeHeader), + normalizeCacheBustingInput(nextUrlHeader) + ].join(','); +} +async function computeCacheBustingSearchParamFromInput(input) { + // Truncate SHA-256 to 96 bits to keep `_rsc` compact + const digest = await globalThis.crypto.subtle.digest('SHA-256', textEncoder.encode(input)); + return encodeCacheBustingSearchParam(new Uint8Array(digest).subarray(0, CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES)); +} +async function computeCacheBustingSearchParam(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader) { + const input = createCacheBustingSearchParamInput(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader); + if (input === null) { + return ''; + } + return computeCacheBustingSearchParamFromInput(input); +} +function computeLegacyCacheBustingSearchParam(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader) { + const input = createCacheBustingSearchParamInput(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader); + if (input === null) { + return ''; + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$hash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["hexHash"])(input); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/format-next-pathname-info.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "formatNextPathnameInfo", + ()=>formatNextPathnameInfo +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$trailing$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-trailing-slash.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$suffix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-suffix.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$locale$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-locale.js [app-route] (ecmascript)"); +; +; +; +; +function formatNextPathnameInfo(info) { + let pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$locale$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["addLocale"])(info.pathname, info.locale, info.buildId ? undefined : info.defaultLocale, info.ignorePrefix); + if (info.buildId || !info.trailingSlash) { + pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$trailing$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["removeTrailingSlash"])(pathname); + } + if (info.buildId) { + pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$suffix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["addPathSuffix"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["addPathPrefix"])(pathname, `/_next/data/${info.buildId}`), info.pathname === '/' ? 'index.json' : '.json'); + } + pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["addPathPrefix"])(pathname, info.basePath); + return !info.buildId && info.trailingSlash ? !pathname.endsWith('/') ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$suffix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["addPathSuffix"])(pathname, '/') : pathname : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$trailing$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["removeTrailingSlash"])(pathname); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/get-next-pathname-info.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getNextPathnameInfo", + ()=>getNextPathnameInfo +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$normalize$2d$locale$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [app-route] (ecmascript)"); +; +; +; +function getNextPathnameInfo(pathname, options) { + const { basePath, i18n, trailingSlash } = options.nextConfig ?? {}; + const info = { + pathname, + trailingSlash: pathname !== '/' ? pathname.endsWith('/') : trailingSlash + }; + if (basePath && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pathHasPrefix"])(info.pathname, basePath)) { + info.pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["removePathPrefix"])(info.pathname, basePath); + info.basePath = basePath; + } + let pathnameNoDataPrefix = info.pathname; + if (info.pathname.startsWith('/_next/data/') && info.pathname.endsWith('.json')) { + const paths = info.pathname.replace(/^\/_next\/data\//, '').replace(/\.json$/, '').split('/'); + const buildId = paths[0]; + info.buildId = buildId; + pathnameNoDataPrefix = paths[1] !== 'index' ? `/${paths.slice(1).join('/')}` : '/'; + // update pathname with normalized if enabled although + // we use normalized to populate locale info still + if (options.parseData === true) { + info.pathname = pathnameNoDataPrefix; + } + } + // If provided, use the locale route normalizer to detect the locale instead + // of the function below. + if (i18n) { + let result = options.i18nProvider ? options.i18nProvider.analyze(info.pathname) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$normalize$2d$locale$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeLocalePath"])(info.pathname, i18n.locales); + info.locale = result.detectedLocale; + info.pathname = result.pathname ?? info.pathname; + if (!result.detectedLocale && info.buildId) { + result = options.i18nProvider ? options.i18nProvider.analyze(pathnameNoDataPrefix) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$normalize$2d$locale$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeLocalePath"])(pathnameNoDataPrefix, i18n.locales); + if (result.detectedLocale) { + info.locale = result.detectedLocale; + } + } + } + return info; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/index.js [app-route] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$is$2d$dynamic$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/is-dynamic.js [app-route] (ecmascript)"); +; +; +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/interception-routes.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "INTERCEPTION_ROUTE_MARKERS", + ()=>INTERCEPTION_ROUTE_MARKERS, + "extractInterceptionRouteInformation", + ()=>extractInterceptionRouteInformation, + "findMissingCanonicalInterceptionRoutes", + ()=>findMissingCanonicalInterceptionRoutes, + "isInterceptionRouteAppPath", + ()=>isInterceptionRouteAppPath +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-route] (ecmascript)"); +; +const INTERCEPTION_ROUTE_MARKERS = [ + '(..)(..)', + '(.)', + '(..)', + '(...)' +]; +function parseRoutePattern(route) { + const segments = route.split('/').filter(Boolean); + const tail = segments.at(-1); + const isOptionalCatchAll = tail !== undefined && tail.startsWith('[[...') && tail.endsWith(']]'); + const isCatchAll = tail !== undefined && tail.startsWith('[...') && tail.endsWith(']'); + const unbounded = isOptionalCatchAll || isCatchAll; + const prefixSegments = unbounded ? segments.slice(0, -1) : segments; + return { + prefix: prefixSegments.map((segment)=>segment.startsWith('[') && segment.endsWith(']') ? null : segment), + minLength: prefixSegments.length + (isCatchAll && !isOptionalCatchAll ? 1 : 0), + unbounded + }; +} +function acceptsLength(pattern, length) { + return pattern.unbounded ? length >= pattern.minLength : length === pattern.minLength; +} +function prefixCovers(canonical, intercepted) { + return canonical.prefix.every((canonicalSegment, index)=>{ + if (canonicalSegment === null) return true; + const interceptedSegment = intercepted.prefix[index]; + return interceptedSegment !== undefined && interceptedSegment !== null && canonicalSegment === interceptedSegment; + }); +} +function patternCoversAtLength(canonical, intercepted, length) { + return acceptsLength(canonical, length) && acceptsLength(intercepted, length) && prefixCovers(canonical, intercepted); +} +/** Returns whether ordinary route patterns cover every URL in `route`. */ function isRoutePatternCovered(route, ordinaryRoutes) { + const intercepted = parseRoutePattern(route); + if (!intercepted.unbounded) { + return ordinaryRoutes.some((pattern)=>patternCoversAtLength(pattern, intercepted, intercepted.minLength)); + } + let unboundedCoverageStart = Infinity; + for (const pattern of ordinaryRoutes){ + if (pattern.unbounded && prefixCovers(pattern, intercepted)) { + unboundedCoverageStart = Math.min(unboundedCoverageStart, Math.max(intercepted.minLength, pattern.minLength)); + } + } + if (unboundedCoverageStart === Infinity) return false; + // An optional or required catchall can have its shorter paths covered by + // fixed routes before another catchall takes over the remaining suffix. + for(let length = intercepted.minLength; length < unboundedCoverageStart; length++){ + if (!ordinaryRoutes.some((pattern)=>patternCoversAtLength(pattern, intercepted, length))) { + return false; + } + } + return true; +} +function isInterceptionRouteAppPath(path) { + // TODO-APP: add more serious validation + return path.split('/').find((segment)=>INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m))) !== undefined; +} +function extractInterceptionRouteInformation(path) { + let interceptingRoute; + let marker; + let interceptedRoute; + for (const segment of path.split('/')){ + marker = INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m)); + if (marker) { + ; + [interceptingRoute, interceptedRoute] = path.split(marker, 2); + break; + } + } + if (!interceptingRoute || !marker || !interceptedRoute) { + throw new Error(`Invalid interception route: ${path}. Must be in the format //(..|...|..)(..)/`); + } + interceptingRoute = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeAppPath"])(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed + ; + switch(marker){ + case '(.)': + // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route + if (interceptingRoute === '/') { + interceptedRoute = `/${interceptedRoute}`; + } else { + interceptedRoute = interceptingRoute + '/' + interceptedRoute; + } + break; + case '(..)': + // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route + if (interceptingRoute === '/') { + throw new Error(`Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`); + } + interceptedRoute = interceptingRoute.split('/').slice(0, -1).concat(interceptedRoute).join('/'); + break; + case '(...)': + // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route + interceptedRoute = '/' + interceptedRoute; + break; + case '(..)(..)': + // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route + const splitInterceptingRoute = interceptingRoute.split('/'); + if (splitInterceptingRoute.length <= 2) { + throw new Error(`Invalid interception route: ${path}. Cannot use (..)(..) marker at the root level or one level up.`); + } + interceptedRoute = splitInterceptingRoute.slice(0, -2).concat(interceptedRoute).join('/'); + break; + default: + throw new Error('Invariant: unexpected marker'); + } + return { + interceptingRoute, + interceptedRoute + }; +} +function findMissingCanonicalInterceptionRoutes(appPaths) { + const canonicalRoutes = Object.keys(appPaths).filter((route)=>!isInterceptionRouteAppPath(route)); + const canonicalRoutePatterns = canonicalRoutes.map(parseRoutePattern); + return Object.keys(appPaths).filter(isInterceptionRouteAppPath).map((interceptionRoute)=>({ + interceptionRoute, + canonicalRoute: extractInterceptionRouteInformation(interceptionRoute).interceptedRoute + })).filter(({ canonicalRoute })=>!isRoutePatternCovered(canonicalRoute, canonicalRoutePatterns)).sort((a, b)=>a.interceptionRoute.localeCompare(b.interceptionRoute)); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/is-dynamic.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "isDynamicRoute", + ()=>isDynamicRoute +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/interception-routes.js [app-route] (ecmascript)"); +; +// Identify /.*[param].*/ in route string +const TEST_ROUTE = /\/[^/]*\[[^/]+\][^/]*(?=\/|$)/; +// Identify /[param]/ in route string +const TEST_STRICT_ROUTE = /\/\[[^/]+\](?=\/|$)/; +function isDynamicRoute(route, strict = true) { + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isInterceptionRouteAppPath"])(route)) { + route = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["extractInterceptionRouteInformation"])(route).interceptedRoute; + } + if (strict) { + return TEST_STRICT_ROUTE.test(route); + } + return TEST_ROUTE.test(route); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-loader-tree.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "parseLoaderTree", + ()=>parseLoaderTree +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/segment.js [app-route] (ecmascript)"); +; +function parseLoaderTree(tree) { + const [segment, parallelRoutes, modules, staticSiblings] = tree; + const { layout, template } = modules; + let { page } = modules; + // a __DEFAULT__ segment means that this route didn't match any of the + // segments in the route, so we should use the default page + page = segment === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["DEFAULT_SEGMENT_KEY"] ? modules.defaultPage : page; + const conventionPath = layout?.[1] || template?.[1] || page?.[1]; + return { + page, + segment, + modules, + /* it can be either layout / template / page */ conventionPath, + parallelRoutes, + staticSiblings + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Given a path this function will find the pathname, query and hash and return + * them. This is useful to parse full paths on the client side. + * @param path A path to parse e.g. /foo/bar?id=1#hash + */ __turbopack_context__.s([ + "parsePath", + ()=>parsePath +]); +function parsePath(path) { + const hashIndex = path.indexOf('#'); + const queryIndex = path.indexOf('?'); + const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex); + if (hasQuery || hashIndex > -1) { + return { + pathname: path.substring(0, hasQuery ? queryIndex : hashIndex), + query: hasQuery ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined) : '', + hash: hashIndex > -1 ? path.slice(hashIndex) : '' + }; + } + return { + pathname: path, + query: '', + hash: '' + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "pathHasPrefix", + ()=>pathHasPrefix +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [app-route] (ecmascript)"); +; +function pathHasPrefix(path, prefix) { + if (typeof path !== 'string') { + return false; + } + const { pathname } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["parsePath"])(path); + return pathname === prefix || pathname.startsWith(prefix + '/'); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "removePathPrefix", + ()=>removePathPrefix +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [app-route] (ecmascript)"); +; +function removePathPrefix(path, prefix) { + // If the path doesn't start with the prefix we can return it as is. This + // protects us from situations where the prefix is a substring of the path + // prefix such as: + // + // For prefix: /blog + // + // /blog -> true + // /blog/ -> true + // /blog/1 -> true + // /blogging -> false + // /blogging/ -> false + // /blogging/1 -> false + if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pathHasPrefix"])(path, prefix)) { + return path; + } + // Remove the prefix from the path via slicing. + const withoutPrefix = path.slice(prefix.length); + // If the path without the prefix starts with a `/` we can return it as is. + if (withoutPrefix.startsWith('/')) { + return withoutPrefix; + } + // If the path without the prefix doesn't start with a `/` we need to add it + // back to the path to make sure it's a valid path. + return `/${withoutPrefix}`; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-trailing-slash.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Removes the trailing slash for a given route or page path. Examples: + * - `/foo/bar/` -> `/foo/bar` + * - `/foo/bar` -> `/foo/bar` + * + * Uses charCodeAt (47 === '/') instead of regex to avoid the overhead of + * compiling and executing a RegExp on every call (~3-5x faster). + */ __turbopack_context__.s([ + "removeTrailingSlash", + ()=>removeTrailingSlash +]); +function removeTrailingSlash(route) { + return route.charCodeAt(route.length - 1) === 47 && route.length > 1 ? route.slice(0, -1) : route; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/segment.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "DEFAULT_SEGMENT_KEY", + ()=>DEFAULT_SEGMENT_KEY, + "NOT_FOUND_SEGMENT_KEY", + ()=>NOT_FOUND_SEGMENT_KEY, + "PAGE_SEGMENT_KEY", + ()=>PAGE_SEGMENT_KEY, + "computeSelectedLayoutSegment", + ()=>computeSelectedLayoutSegment, + "getSegmentValue", + ()=>getSegmentValue, + "getSelectedLayoutSegmentPath", + ()=>getSelectedLayoutSegmentPath, + "isGroupSegment", + ()=>isGroupSegment, + "isParallelRouteSegment", + ()=>isParallelRouteSegment +]); +function getSegmentValue(segment) { + return Array.isArray(segment) ? segment[1] : segment; +} +function isGroupSegment(segment) { + // Use array[0] for performant purpose + return segment[0] === '(' && segment.endsWith(')'); +} +function isParallelRouteSegment(segment) { + return segment.startsWith('@') && segment !== '@children'; +} +function computeSelectedLayoutSegment(segments, parallelRouteKey) { + if (!segments || segments.length === 0) { + return null; + } + // For 'children', use first segment; for other parallel routes, use last segment + const rawSegment = parallelRouteKey === 'children' ? segments[0] : segments[segments.length - 1]; + // If the default slot is showing, return null since it's not technically "selected" (it's a fallback) + // Returning an internal value like `__DEFAULT__` would be confusing + return rawSegment === DEFAULT_SEGMENT_KEY ? null : rawSegment; +} +function getSelectedLayoutSegmentPath(tree, parallelRouteKey, first = true, segmentPath = []) { + let node; + if (first) { + // Use the provided parallel route key on the first parallel route + node = tree[1][parallelRouteKey]; + } else { + // After first parallel route prefer children, if there's no children pick the first parallel route. + const parallelRoutes = tree[1]; + node = parallelRoutes.children ?? Object.values(parallelRoutes)[0]; + } + if (!node) return segmentPath; + const segment = node[0]; + let segmentValue = getSegmentValue(segment); + if (!segmentValue || segmentValue === PAGE_SEGMENT_KEY) { + return segmentPath; + } + segmentPath.push(segmentValue); + return getSelectedLayoutSegmentPath(node, parallelRouteKey, false, segmentPath); +} +const PAGE_SEGMENT_KEY = '__PAGE__'; +const DEFAULT_SEGMENT_KEY = '__DEFAULT__'; +const NOT_FOUND_SEGMENT_KEY = '/_not-found'; +}), +"[project]/node_modules/next/dist/esm/shared/lib/server-reference-info.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "SERVER_REFERENCE_ID_LENGTH", + ()=>SERVER_REFERENCE_ID_LENGTH, + "extractInfoFromServerReferenceId", + ()=>extractInfoFromServerReferenceId, + "mightBeServerReferenceId", + ()=>mightBeServerReferenceId, + "omitUnusedArgs", + ()=>omitUnusedArgs +]); +const SERVER_REFERENCE_ID_LENGTH = 42; +function mightBeServerReferenceId(id) { + return id.length === SERVER_REFERENCE_ID_LENGTH; +} +function extractInfoFromServerReferenceId(id) { + const infoByte = parseInt(id.slice(0, 2), 16); + const typeBit = infoByte >> 7 & 0x1; + const argMask = infoByte >> 1 & 0x3f; + const restArgs = infoByte & 0x1; + const usedArgs = Array(6); + for(let index = 0; index < 6; index++){ + const bitPosition = 5 - index; + const bit = argMask >> bitPosition & 0x1; + usedArgs[index] = bit === 1; + } + return { + type: typeBit === 1 ? 'use-cache' : 'server-action', + usedArgs: usedArgs, + hasRestArgs: restArgs === 1 + }; +} +function omitUnusedArgs(args, info) { + const filteredArgs = new Array(args.length); + let length = 0; + for(let index = 0; index < args.length; index++){ + if (index < 6 && info.usedArgs[index] || // This assumes that the server reference info byte has the restArgs bit + // set to 1 if there are more than 6 args. + index >= 6 && info.hasRestArgs) { + filteredArgs[index] = args[index]; + length = index + 1; + } + } + // Trim trailing unused args from the array. + filteredArgs.length = length; + return filteredArgs; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/utils.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Web vitals provided to _app.reportWebVitals by Core Web Vitals plugin developed by Google Chrome team. + * https://nextjs.org/blog/next-9-4#integrated-web-vitals-reporting + */ __turbopack_context__.s([ + "DecodeError", + ()=>DecodeError, + "MiddlewareNotFoundError", + ()=>MiddlewareNotFoundError, + "MissingStaticPage", + ()=>MissingStaticPage, + "NormalizeError", + ()=>NormalizeError, + "PageNotFoundError", + ()=>PageNotFoundError, + "SP", + ()=>SP, + "ST", + ()=>ST, + "WEB_VITALS", + ()=>WEB_VITALS, + "execOnce", + ()=>execOnce, + "getDisplayName", + ()=>getDisplayName, + "getLocationOrigin", + ()=>getLocationOrigin, + "getURL", + ()=>getURL, + "isAbsoluteUrl", + ()=>isAbsoluteUrl, + "isResSent", + ()=>isResSent, + "loadGetInitialProps", + ()=>loadGetInitialProps, + "normalizeRepeatedSlashes", + ()=>normalizeRepeatedSlashes, + "stringifyError", + ()=>stringifyError +]); +const WEB_VITALS = [ + 'CLS', + 'FCP', + 'INP', + 'LCP', + 'TTFB' +]; +function execOnce(fn) { + let used = false; + let result; + return (...args)=>{ + if (!used) { + used = true; + result = fn(...args); + } + return result; + }; +} +// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 +// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 +const ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\d+\-.]*?:/; +const isAbsoluteUrl = (url)=>{ + // Fast path: an absolute URL must start with a letter (the scheme). + // Check for a-z and A-Z without the cost of the regex. + const c = url.charCodeAt(0); + const isLetter = c >= 65 /* A */ && c <= 90 || c >= 97 /* a */ && c <= 122; + /* z */ if (!isLetter) { + return false; + } + return ABSOLUTE_URL_REGEX.test(url); +}; +function getLocationOrigin() { + const { protocol, hostname, port } = window.location; + return `${protocol}//${hostname}${port ? ':' + port : ''}`; +} +function getURL() { + const { href } = window.location; + const origin = getLocationOrigin(); + return href.substring(origin.length); +} +function getDisplayName(Component) { + return typeof Component === 'string' ? Component : Component.displayName || Component.name || 'Unknown'; +} +function isResSent(res) { + return res.finished || res.headersSent; +} +function normalizeRepeatedSlashes(url) { + const urlParts = url.split('?'); + const urlNoQuery = urlParts[0]; + return urlNoQuery // first we replace any non-encoded backslashes with forward + // then normalize repeated forward slashes + .replace(/\\/g, '/').replace(/\/\/+/g, '/') + (urlParts[1] ? `?${urlParts.slice(1).join('?')}` : ''); +} +async function loadGetInitialProps(App, ctx) { + if ("TURBOPACK compile-time truthy", 1) { + if (App.prototype?.getInitialProps) { + const message = `"${getDisplayName(App)}.getInitialProps()" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.`; + throw new Error(message); + } + } + // when called from _app `ctx` is nested in `ctx` + const res = ctx.res || ctx.ctx && ctx.ctx.res; + if (!App.getInitialProps) { + if (ctx.ctx && ctx.Component) { + // @ts-ignore pageProps default + return { + pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx) + }; + } + return {}; + } + const props = await App.getInitialProps(ctx); + if (res && isResSent(res)) { + return props; + } + if (!props) { + const message = `"${getDisplayName(App)}.getInitialProps()" should resolve to an object. But found "${props}" instead.`; + throw new Error(message); + } + if ("TURBOPACK compile-time truthy", 1) { + if (Object.keys(props).length === 0 && !ctx.ctx) { + console.warn(`${getDisplayName(App)} returned an empty object from \`getInitialProps\`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps`); + } + } + return props; +} +const SP = typeof performance !== 'undefined'; +const ST = SP && [ + 'mark', + 'measure', + 'getEntriesByName' +].every((method)=>typeof performance[method] === 'function'); +class DecodeError extends Error { +} +class NormalizeError extends Error { +} +class PageNotFoundError extends Error { + constructor(page){ + super(); + this.code = 'ENOENT'; + this.name = 'PageNotFoundError'; + this.message = `Cannot find module for page: ${page}`; + } +} +class MissingStaticPage extends Error { + constructor(page, message){ + super(); + this.message = `Failed to load static file for page: ${page} ${message}`; + } +} +class MiddlewareNotFoundError extends Error { + constructor(){ + super(); + this.code = 'ENOENT'; + this.message = `Cannot find the middleware module`; + } +} +function stringifyError(error) { + return JSON.stringify({ + message: error.message, + stack: error.stack + }); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/utils/reflect-utils.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "describeHasCheckingStringProperty", + ()=>describeHasCheckingStringProperty, + "describeStringPropertyAccess", + ()=>describeStringPropertyAccess, + "wellKnownProperties", + ()=>wellKnownProperties +]); +// This regex will have fast negatives meaning valid identifiers may not pass +// this test. However this is only used during static generation to provide hints +// about why a page bailed out of some or all prerendering and we can use bracket notation +// for example while `ಠ_ಠ` is a valid identifier it's ok to print `searchParams['ಠ_ಠ']` +// even if this would have been fine too `searchParams.ಠ_ಠ` +const isDefinitelyAValidIdentifier = /^[A-Za-z_$][A-Za-z0-9_$]*$/; +function describeStringPropertyAccess(target, prop) { + if (isDefinitelyAValidIdentifier.test(prop)) { + return `\`${target}.${prop}\``; + } + return `\`${target}[${JSON.stringify(prop)}]\``; +} +function describeHasCheckingStringProperty(target, prop) { + const stringifiedProp = JSON.stringify(prop); + return `\`Reflect.has(${target}, ${stringifiedProp})\`, \`${stringifiedProp} in ${target}\`, or similar`; +} +const wellKnownProperties = new Set([ + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toString', + 'valueOf', + 'toLocaleString', + // Promise prototype + 'then', + 'catch', + 'finally', + // React Promise extension + 'status', + // 'value', + // 'error', + // React introspection + 'displayName', + '_debugInfo', + // Common tested properties + 'toJSON', + '$$typeof', + '__esModule', + // Tested by flight when checking for iterables + '@@iterator' +]); +}), +"[project]/node_modules/next/dist/lib/constants.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ACTION_SUFFIX: null, + APP_DIR_ALIAS: null, + CACHE_ONE_YEAR_SECONDS: null, + DOT_NEXT_ALIAS: null, + ESLINT_DEFAULT_DIRS: null, + GSP_NO_RETURNED_VALUE: null, + GSSP_COMPONENT_MEMBER_ERROR: null, + GSSP_NO_RETURNED_VALUE: null, + HTML_CONTENT_TYPE_HEADER: null, + INFINITE_CACHE: null, + INSTRUMENTATION_HOOK_FILENAME: null, + JSON_CONTENT_TYPE_HEADER: null, + MATCHED_PATH_HEADER: null, + MIDDLEWARE_FILENAME: null, + MIDDLEWARE_LOCATION_REGEXP: null, + NEXT_BODY_SUFFIX: null, + NEXT_CACHE_IMPLICIT_TAG_ID: null, + NEXT_CACHE_REVALIDATED_TAGS_HEADER: null, + NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER: null, + NEXT_CACHE_ROOT_PARAM_TAG_ID: null, + NEXT_CACHE_SOFT_TAG_MAX_LENGTH: null, + NEXT_CACHE_TAGS_HEADER: null, + NEXT_CACHE_TAG_MAX_ITEMS: null, + NEXT_CACHE_TAG_MAX_LENGTH: null, + NEXT_DATA_SUFFIX: null, + NEXT_INTERCEPTION_MARKER_PREFIX: null, + NEXT_META_SUFFIX: null, + NEXT_NAV_DEPLOYMENT_ID_HEADER: null, + NEXT_QUERY_PARAM_PREFIX: null, + NEXT_RESUME_HEADER: null, + NEXT_RESUME_STATE_LENGTH_HEADER: null, + NON_STANDARD_NODE_ENV: null, + PAGES_DIR_ALIAS: null, + PRERENDER_REVALIDATE_HEADER: null, + PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER: null, + PROXY_FILENAME: null, + PROXY_LOCATION_REGEXP: null, + PUBLIC_DIR_MIDDLEWARE_CONFLICT: null, + ROOT_DIR_ALIAS: null, + RSC_ACTION_CLIENT_WRAPPER_ALIAS: null, + RSC_ACTION_ENCRYPTION_ALIAS: null, + RSC_ACTION_PROXY_ALIAS: null, + RSC_ACTION_VALIDATE_ALIAS: null, + RSC_CACHE_WRAPPER_ALIAS: null, + RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS: null, + RSC_MOD_REF_PROXY_ALIAS: null, + RSC_SEGMENTS_DIR_SUFFIX: null, + RSC_SEGMENT_SUFFIX: null, + RSC_SUFFIX: null, + SERVER_PROPS_EXPORT_ERROR: null, + SERVER_PROPS_GET_INIT_PROPS_CONFLICT: null, + SERVER_PROPS_SSG_CONFLICT: null, + SERVER_RUNTIME: null, + SSG_FALLBACK_EXPORT_ERROR: null, + SSG_GET_INITIAL_PROPS_CONFLICT: null, + STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR: null, + TEXT_PLAIN_CONTENT_TYPE_HEADER: null, + UNSTABLE_REVALIDATE_RENAME_ERROR: null, + WEBPACK_LAYERS: null, + WEBPACK_RESOURCE_QUERIES: null, + WEB_SOCKET_MAX_RECONNECTIONS: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ACTION_SUFFIX: function() { + return ACTION_SUFFIX; + }, + APP_DIR_ALIAS: function() { + return APP_DIR_ALIAS; + }, + CACHE_ONE_YEAR_SECONDS: function() { + return CACHE_ONE_YEAR_SECONDS; + }, + DOT_NEXT_ALIAS: function() { + return DOT_NEXT_ALIAS; + }, + ESLINT_DEFAULT_DIRS: function() { + return ESLINT_DEFAULT_DIRS; + }, + GSP_NO_RETURNED_VALUE: function() { + return GSP_NO_RETURNED_VALUE; + }, + GSSP_COMPONENT_MEMBER_ERROR: function() { + return GSSP_COMPONENT_MEMBER_ERROR; + }, + GSSP_NO_RETURNED_VALUE: function() { + return GSSP_NO_RETURNED_VALUE; + }, + HTML_CONTENT_TYPE_HEADER: function() { + return HTML_CONTENT_TYPE_HEADER; + }, + INFINITE_CACHE: function() { + return INFINITE_CACHE; + }, + INSTRUMENTATION_HOOK_FILENAME: function() { + return INSTRUMENTATION_HOOK_FILENAME; + }, + JSON_CONTENT_TYPE_HEADER: function() { + return JSON_CONTENT_TYPE_HEADER; + }, + MATCHED_PATH_HEADER: function() { + return MATCHED_PATH_HEADER; + }, + MIDDLEWARE_FILENAME: function() { + return MIDDLEWARE_FILENAME; + }, + MIDDLEWARE_LOCATION_REGEXP: function() { + return MIDDLEWARE_LOCATION_REGEXP; + }, + NEXT_BODY_SUFFIX: function() { + return NEXT_BODY_SUFFIX; + }, + NEXT_CACHE_IMPLICIT_TAG_ID: function() { + return NEXT_CACHE_IMPLICIT_TAG_ID; + }, + NEXT_CACHE_REVALIDATED_TAGS_HEADER: function() { + return NEXT_CACHE_REVALIDATED_TAGS_HEADER; + }, + NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER: function() { + return NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER; + }, + NEXT_CACHE_ROOT_PARAM_TAG_ID: function() { + return NEXT_CACHE_ROOT_PARAM_TAG_ID; + }, + NEXT_CACHE_SOFT_TAG_MAX_LENGTH: function() { + return NEXT_CACHE_SOFT_TAG_MAX_LENGTH; + }, + NEXT_CACHE_TAGS_HEADER: function() { + return NEXT_CACHE_TAGS_HEADER; + }, + NEXT_CACHE_TAG_MAX_ITEMS: function() { + return NEXT_CACHE_TAG_MAX_ITEMS; + }, + NEXT_CACHE_TAG_MAX_LENGTH: function() { + return NEXT_CACHE_TAG_MAX_LENGTH; + }, + NEXT_DATA_SUFFIX: function() { + return NEXT_DATA_SUFFIX; + }, + NEXT_INTERCEPTION_MARKER_PREFIX: function() { + return NEXT_INTERCEPTION_MARKER_PREFIX; + }, + NEXT_META_SUFFIX: function() { + return NEXT_META_SUFFIX; + }, + NEXT_NAV_DEPLOYMENT_ID_HEADER: function() { + return NEXT_NAV_DEPLOYMENT_ID_HEADER; + }, + NEXT_QUERY_PARAM_PREFIX: function() { + return NEXT_QUERY_PARAM_PREFIX; + }, + NEXT_RESUME_HEADER: function() { + return NEXT_RESUME_HEADER; + }, + NEXT_RESUME_STATE_LENGTH_HEADER: function() { + return NEXT_RESUME_STATE_LENGTH_HEADER; + }, + NON_STANDARD_NODE_ENV: function() { + return NON_STANDARD_NODE_ENV; + }, + PAGES_DIR_ALIAS: function() { + return PAGES_DIR_ALIAS; + }, + PRERENDER_REVALIDATE_HEADER: function() { + return PRERENDER_REVALIDATE_HEADER; + }, + PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER: function() { + return PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER; + }, + PROXY_FILENAME: function() { + return PROXY_FILENAME; + }, + PROXY_LOCATION_REGEXP: function() { + return PROXY_LOCATION_REGEXP; + }, + PUBLIC_DIR_MIDDLEWARE_CONFLICT: function() { + return PUBLIC_DIR_MIDDLEWARE_CONFLICT; + }, + ROOT_DIR_ALIAS: function() { + return ROOT_DIR_ALIAS; + }, + RSC_ACTION_CLIENT_WRAPPER_ALIAS: function() { + return RSC_ACTION_CLIENT_WRAPPER_ALIAS; + }, + RSC_ACTION_ENCRYPTION_ALIAS: function() { + return RSC_ACTION_ENCRYPTION_ALIAS; + }, + RSC_ACTION_PROXY_ALIAS: function() { + return RSC_ACTION_PROXY_ALIAS; + }, + RSC_ACTION_VALIDATE_ALIAS: function() { + return RSC_ACTION_VALIDATE_ALIAS; + }, + RSC_CACHE_WRAPPER_ALIAS: function() { + return RSC_CACHE_WRAPPER_ALIAS; + }, + RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS: function() { + return RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS; + }, + RSC_MOD_REF_PROXY_ALIAS: function() { + return RSC_MOD_REF_PROXY_ALIAS; + }, + RSC_SEGMENTS_DIR_SUFFIX: function() { + return RSC_SEGMENTS_DIR_SUFFIX; + }, + RSC_SEGMENT_SUFFIX: function() { + return RSC_SEGMENT_SUFFIX; + }, + RSC_SUFFIX: function() { + return RSC_SUFFIX; + }, + SERVER_PROPS_EXPORT_ERROR: function() { + return SERVER_PROPS_EXPORT_ERROR; + }, + SERVER_PROPS_GET_INIT_PROPS_CONFLICT: function() { + return SERVER_PROPS_GET_INIT_PROPS_CONFLICT; + }, + SERVER_PROPS_SSG_CONFLICT: function() { + return SERVER_PROPS_SSG_CONFLICT; + }, + SERVER_RUNTIME: function() { + return SERVER_RUNTIME; + }, + SSG_FALLBACK_EXPORT_ERROR: function() { + return SSG_FALLBACK_EXPORT_ERROR; + }, + SSG_GET_INITIAL_PROPS_CONFLICT: function() { + return SSG_GET_INITIAL_PROPS_CONFLICT; + }, + STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR: function() { + return STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR; + }, + TEXT_PLAIN_CONTENT_TYPE_HEADER: function() { + return TEXT_PLAIN_CONTENT_TYPE_HEADER; + }, + UNSTABLE_REVALIDATE_RENAME_ERROR: function() { + return UNSTABLE_REVALIDATE_RENAME_ERROR; + }, + WEBPACK_LAYERS: function() { + return WEBPACK_LAYERS; + }, + WEBPACK_RESOURCE_QUERIES: function() { + return WEBPACK_RESOURCE_QUERIES; + }, + WEB_SOCKET_MAX_RECONNECTIONS: function() { + return WEB_SOCKET_MAX_RECONNECTIONS; + } +}); +const TEXT_PLAIN_CONTENT_TYPE_HEADER = 'text/plain'; +const HTML_CONTENT_TYPE_HEADER = 'text/html; charset=utf-8'; +const JSON_CONTENT_TYPE_HEADER = 'application/json; charset=utf-8'; +const NEXT_QUERY_PARAM_PREFIX = 'nxtP'; +const NEXT_INTERCEPTION_MARKER_PREFIX = 'nxtI'; +const MATCHED_PATH_HEADER = 'x-matched-path'; +const PRERENDER_REVALIDATE_HEADER = 'x-prerender-revalidate'; +const PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER = 'x-prerender-revalidate-if-generated'; +const RSC_SEGMENTS_DIR_SUFFIX = '.segments'; +const RSC_SEGMENT_SUFFIX = '.segment.rsc'; +const RSC_SUFFIX = '.rsc'; +const ACTION_SUFFIX = '.action'; +const NEXT_DATA_SUFFIX = '.json'; +const NEXT_META_SUFFIX = '.meta'; +const NEXT_BODY_SUFFIX = '.body'; +const NEXT_NAV_DEPLOYMENT_ID_HEADER = 'x-nextjs-deployment-id'; +const NEXT_CACHE_TAGS_HEADER = 'x-next-cache-tags'; +const NEXT_CACHE_REVALIDATED_TAGS_HEADER = 'x-next-revalidated-tags'; +const NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER = 'x-next-revalidate-tag-token'; +const NEXT_RESUME_HEADER = 'next-resume'; +const NEXT_RESUME_STATE_LENGTH_HEADER = 'x-next-resume-state-length'; +const NEXT_CACHE_TAG_MAX_ITEMS = 128; +const NEXT_CACHE_TAG_MAX_LENGTH = 256; +const NEXT_CACHE_SOFT_TAG_MAX_LENGTH = 1024; +const NEXT_CACHE_IMPLICIT_TAG_ID = '_N_T_'; +const NEXT_CACHE_ROOT_PARAM_TAG_ID = '_N_RP_'; +const CACHE_ONE_YEAR_SECONDS = 31536000; +const INFINITE_CACHE = 0xfffffffe; +const MIDDLEWARE_FILENAME = 'middleware'; +const MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}`; +const PROXY_FILENAME = 'proxy'; +const PROXY_LOCATION_REGEXP = `(?:src/)?${PROXY_FILENAME}`; +const INSTRUMENTATION_HOOK_FILENAME = 'instrumentation'; +const PAGES_DIR_ALIAS = 'private-next-pages'; +const DOT_NEXT_ALIAS = 'private-dot-next'; +const ROOT_DIR_ALIAS = 'private-next-root-dir'; +const APP_DIR_ALIAS = 'private-next-app-dir'; +const RSC_MOD_REF_PROXY_ALIAS = 'private-next-rsc-mod-ref-proxy'; +const RSC_ACTION_VALIDATE_ALIAS = 'private-next-rsc-action-validate'; +const RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-server-reference'; +const RSC_CACHE_WRAPPER_ALIAS = 'private-next-rsc-cache-wrapper'; +const RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS = 'private-next-rsc-track-dynamic-import'; +const RSC_ACTION_ENCRYPTION_ALIAS = 'private-next-rsc-action-encryption'; +const RSC_ACTION_CLIENT_WRAPPER_ALIAS = 'private-next-rsc-action-client-wrapper'; +const PUBLIC_DIR_MIDDLEWARE_CONFLICT = `You can not have a '_next' folder inside of your public folder. This conflicts with the internal '/_next' route. https://nextjs.org/docs/messages/public-next-folder-conflict`; +const SSG_GET_INITIAL_PROPS_CONFLICT = `You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps`; +const SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.`; +const SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps`; +const STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR = `can not have getInitialProps/getServerSideProps, https://nextjs.org/docs/messages/404-get-initial-props`; +const SERVER_PROPS_EXPORT_ERROR = `pages with \`getServerSideProps\` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export`; +const GSP_NO_RETURNED_VALUE = 'Your `getStaticProps` function did not return an object. Did you forget to add a `return`?'; +const GSSP_NO_RETURNED_VALUE = 'Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?'; +const UNSTABLE_REVALIDATE_RENAME_ERROR = 'The `unstable_revalidate` property is available for general use.\n' + 'Please use `revalidate` instead.'; +const GSSP_COMPONENT_MEMBER_ERROR = `can not be attached to a page's component and must be exported from the page. See more info here: https://nextjs.org/docs/messages/gssp-component-member`; +const NON_STANDARD_NODE_ENV = `You are using a non-standard "NODE_ENV" value in your environment. This creates inconsistencies in the project and is strongly advised against. Read more: https://nextjs.org/docs/messages/non-standard-node-env`; +const SSG_FALLBACK_EXPORT_ERROR = `Pages with \`fallback\` enabled in \`getStaticPaths\` can not be exported. See more info here: https://nextjs.org/docs/messages/ssg-fallback-true-export`; +const ESLINT_DEFAULT_DIRS = [ + 'app', + 'pages', + 'components', + 'lib', + 'src' +]; +const SERVER_RUNTIME = { + edge: 'edge', + experimentalEdge: 'experimental-edge', + nodejs: 'nodejs' +}; +const WEB_SOCKET_MAX_RECONNECTIONS = 12; +/** + * The names of the webpack layers. These layers are the primitives for the + * webpack chunks. + */ const WEBPACK_LAYERS_NAMES = { + /** + * The layer for the shared code between the client and server bundles. + */ shared: 'shared', + /** + * The layer for server-only runtime and picking up `react-server` export conditions. + * Including app router RSC pages and app router custom routes and metadata routes. + */ reactServerComponents: 'rsc', + /** + * Server Side Rendering layer for app (ssr). + */ serverSideRendering: 'ssr', + /** + * The browser client bundle layer for actions. + */ actionBrowser: 'action-browser', + /** + * The Node.js bundle layer for the API routes. + */ apiNode: 'api-node', + /** + * The Edge Lite bundle layer for the API routes. + */ apiEdge: 'api-edge', + /** + * The layer for the middleware code. + */ middleware: 'middleware', + /** + * The layer for the instrumentation hooks. + */ instrument: 'instrument', + /** + * The layer for assets on the edge. + */ edgeAsset: 'edge-asset', + /** + * The browser client bundle layer for App directory. + */ appPagesBrowser: 'app-pages-browser', + /** + * The browser client bundle layer for Pages directory. + */ pagesDirBrowser: 'pages-dir-browser', + /** + * The Edge Lite bundle layer for Pages directory. + */ pagesDirEdge: 'pages-dir-edge', + /** + * The Node.js bundle layer for Pages directory. + */ pagesDirNode: 'pages-dir-node' +}; +const WEBPACK_LAYERS = { + ...WEBPACK_LAYERS_NAMES, + GROUP: { + builtinReact: [ + WEBPACK_LAYERS_NAMES.reactServerComponents, + WEBPACK_LAYERS_NAMES.actionBrowser + ], + serverOnly: [ + WEBPACK_LAYERS_NAMES.reactServerComponents, + WEBPACK_LAYERS_NAMES.actionBrowser, + WEBPACK_LAYERS_NAMES.instrument, + WEBPACK_LAYERS_NAMES.middleware + ], + neutralTarget: [ + // pages api + WEBPACK_LAYERS_NAMES.apiNode, + WEBPACK_LAYERS_NAMES.apiEdge + ], + clientOnly: [ + WEBPACK_LAYERS_NAMES.serverSideRendering, + WEBPACK_LAYERS_NAMES.appPagesBrowser + ], + bundled: [ + WEBPACK_LAYERS_NAMES.reactServerComponents, + WEBPACK_LAYERS_NAMES.actionBrowser, + WEBPACK_LAYERS_NAMES.serverSideRendering, + WEBPACK_LAYERS_NAMES.appPagesBrowser, + WEBPACK_LAYERS_NAMES.shared, + WEBPACK_LAYERS_NAMES.instrument, + WEBPACK_LAYERS_NAMES.middleware + ], + appPages: [ + // app router pages and layouts + WEBPACK_LAYERS_NAMES.reactServerComponents, + WEBPACK_LAYERS_NAMES.serverSideRendering, + WEBPACK_LAYERS_NAMES.appPagesBrowser, + WEBPACK_LAYERS_NAMES.actionBrowser + ] + } +}; +const WEBPACK_RESOURCE_QUERIES = { + edgeSSREntry: '__next_edge_ssr_entry__', + metadata: '__next_metadata__', + metadataRoute: '__next_metadata_route__', + metadataImageMeta: '__next_metadata_image_meta__' +}; +}), +"[project]/node_modules/next/dist/lib/framework/boundary-constants.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + METADATA_BOUNDARY_NAME: null, + OUTLET_BOUNDARY_NAME: null, + ROOT_LAYOUT_BOUNDARY_NAME: null, + VIEWPORT_BOUNDARY_NAME: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + METADATA_BOUNDARY_NAME: function() { + return METADATA_BOUNDARY_NAME; + }, + OUTLET_BOUNDARY_NAME: function() { + return OUTLET_BOUNDARY_NAME; + }, + ROOT_LAYOUT_BOUNDARY_NAME: function() { + return ROOT_LAYOUT_BOUNDARY_NAME; + }, + VIEWPORT_BOUNDARY_NAME: function() { + return VIEWPORT_BOUNDARY_NAME; + } +}); +const METADATA_BOUNDARY_NAME = '__next_metadata_boundary__'; +const VIEWPORT_BOUNDARY_NAME = '__next_viewport_boundary__'; +const OUTLET_BOUNDARY_NAME = '__next_outlet_boundary__'; +const ROOT_LAYOUT_BOUNDARY_NAME = '__next_root_layout_boundary__'; +}), +"[project]/node_modules/next/dist/lib/scheduler.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + atLeastOneTask: null, + scheduleImmediate: null, + scheduleOnNextTick: null, + waitAtLeastOneReactRenderTask: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + atLeastOneTask: function() { + return atLeastOneTask; + }, + scheduleImmediate: function() { + return scheduleImmediate; + }, + scheduleOnNextTick: function() { + return scheduleOnNextTick; + }, + waitAtLeastOneReactRenderTask: function() { + return waitAtLeastOneReactRenderTask; + } +}); +const scheduleOnNextTick = (cb)=>{ + // We use Promise.resolve().then() here so that the operation is scheduled at + // the end of the promise job queue, we then add it to the next process tick + // to ensure it's evaluated afterwards. + // + // This was inspired by the implementation of the DataLoader interface: https://github.com/graphql/dataloader/blob/d336bd15282664e0be4b4a657cb796f09bafbc6b/src/index.js#L213-L255 + // + Promise.resolve().then(()=>{ + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + process.nextTick(cb); + } + }); +}; +const scheduleImmediate = (cb)=>{ + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + setImmediate(cb); + } +}; +function atLeastOneTask() { + return new Promise((resolve)=>scheduleImmediate(resolve)); +} +function waitAtLeastOneReactRenderTask() { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + return new Promise((r)=>setImmediate(r)); + } +} +}), +"[project]/node_modules/next/dist/server/after/after.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "after", { + enumerable: true, + get: function() { + return after; + } +}); +const _workasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)"); +const _workunitasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)"); +function after(task) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (!workStore || !workUnitStore) { + // TODO(after): the linked docs page talks about *dynamic* APIs, which after soon won't be anymore + throw new Error('`after` was called outside a request scope. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context'); + } + const { afterContext } = workStore; + return afterContext.after(task, workUnitStore); +} +}), +"[project]/node_modules/next/dist/server/after/index.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && __export(__turbopack_context__.r("[project]/node_modules/next/dist/server/after/after.js [app-route] (ecmascript)")); +_export_star(__turbopack_context__.r("[project]/node_modules/next/dist/server/after/after.js [app-route] (ecmascript)"), exports); +function _export_star(from, to) { + Object.keys(from).forEach(function(k) { + if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) { + Object.defineProperty(to, k, { + enumerable: true, + get: function() { + return from[k]; + } + }); + } + }); + return from; +} +}), +"[project]/node_modules/next/dist/server/app-render/blocking-route-messages.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createDynamicBodyError: null, + createDynamicBodyErrorInNavigation: null, + createDynamicBodyErrorInStaticRoute: null, + createDynamicMetadataError: null, + createDynamicMetadataErrorInStaticRoute: null, + createDynamicOrRuntimeBodyError: null, + createDynamicOrRuntimeMetadataError: null, + createDynamicOrRuntimeViewportError: null, + createDynamicViewportError: null, + createDynamicViewportErrorInStaticRoute: null, + createLinkBodyErrorInNavigation: null, + createLinkMetadataError: null, + createLinkViewportError: null, + createNavigationBodyErrorInNavigation: null, + createNavigationMetadataError: null, + createNavigationViewportError: null, + createNonPrerenderableBodyErrorInStaticRoute: null, + createNonPrerenderableMetadataErrorInStaticRoute: null, + createNonPrerenderableViewportErrorInStaticRoute: null, + createPrefetchBodyErrorInNavigation: null, + createPrefetchMetadataError: null, + createPrefetchViewportError: null, + createRuntimeBodyError: null, + createRuntimeBodyErrorInNavigation: null, + createRuntimeBodyErrorInStaticRoute: null, + createRuntimeMetadataError: null, + createRuntimeMetadataErrorInStaticRoute: null, + createRuntimeViewportError: null, + createRuntimeViewportErrorInStaticRoute: null, + logBuildDebugHint: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createDynamicBodyError: function() { + return createDynamicBodyError; + }, + createDynamicBodyErrorInNavigation: function() { + return createDynamicBodyErrorInNavigation; + }, + createDynamicBodyErrorInStaticRoute: function() { + return createDynamicBodyErrorInStaticRoute; + }, + createDynamicMetadataError: function() { + return createDynamicMetadataError; + }, + createDynamicMetadataErrorInStaticRoute: function() { + return createDynamicMetadataErrorInStaticRoute; + }, + createDynamicOrRuntimeBodyError: function() { + return createDynamicOrRuntimeBodyError; + }, + createDynamicOrRuntimeMetadataError: function() { + return createDynamicOrRuntimeMetadataError; + }, + createDynamicOrRuntimeViewportError: function() { + return createDynamicOrRuntimeViewportError; + }, + createDynamicViewportError: function() { + return createDynamicViewportError; + }, + createDynamicViewportErrorInStaticRoute: function() { + return createDynamicViewportErrorInStaticRoute; + }, + createLinkBodyErrorInNavigation: function() { + return createLinkBodyErrorInNavigation; + }, + createLinkMetadataError: function() { + return createLinkMetadataError; + }, + createLinkViewportError: function() { + return createLinkViewportError; + }, + createNavigationBodyErrorInNavigation: function() { + return createNavigationBodyErrorInNavigation; + }, + createNavigationMetadataError: function() { + return createNavigationMetadataError; + }, + createNavigationViewportError: function() { + return createNavigationViewportError; + }, + createNonPrerenderableBodyErrorInStaticRoute: function() { + return createNonPrerenderableBodyErrorInStaticRoute; + }, + createNonPrerenderableMetadataErrorInStaticRoute: function() { + return createNonPrerenderableMetadataErrorInStaticRoute; + }, + createNonPrerenderableViewportErrorInStaticRoute: function() { + return createNonPrerenderableViewportErrorInStaticRoute; + }, + createPrefetchBodyErrorInNavigation: function() { + return createPrefetchBodyErrorInNavigation; + }, + createPrefetchMetadataError: function() { + return createPrefetchMetadataError; + }, + createPrefetchViewportError: function() { + return createPrefetchViewportError; + }, + createRuntimeBodyError: function() { + return createRuntimeBodyError; + }, + createRuntimeBodyErrorInNavigation: function() { + return createRuntimeBodyErrorInNavigation; + }, + createRuntimeBodyErrorInStaticRoute: function() { + return createRuntimeBodyErrorInStaticRoute; + }, + createRuntimeMetadataError: function() { + return createRuntimeMetadataError; + }, + createRuntimeMetadataErrorInStaticRoute: function() { + return createRuntimeMetadataErrorInStaticRoute; + }, + createRuntimeViewportError: function() { + return createRuntimeViewportError; + }, + createRuntimeViewportErrorInStaticRoute: function() { + return createRuntimeViewportErrorInStaticRoute; + }, + logBuildDebugHint: function() { + return logBuildDebugHint; + } +}); +function createRuntimeBodyError(route) { + return new Error(`Route "${route}": Next.js encountered runtime data during prerendering.\n\n` + `\`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` accessed outside of \`\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-runtime`); +} +function createDynamicBodyError(route) { + return new Error(`Route "${route}": Next.js encountered uncached data during prerendering.\n\n` + `\`fetch(...)\` or \`connection()\` accessed outside of \`\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [cache] Cache the data access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`); +} +function createRuntimeBodyErrorInNavigation(route) { + return new Error(`Route "${route}": Next.js encountered runtime data during prerendering or a navigation.\n\n` + `\`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` accessed outside of \`\` prevents the route from being prerendered or the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-runtime`); +} +function createLinkBodyErrorInNavigation(route) { + return new Error(`Route "${route}": Next.js encountered URL data during prerendering or a navigation.\n\n` + `\`params\` or \`searchParams\` accessed outside of \`\` may prevent the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-shell-url-data`); +} +function createNavigationBodyErrorInNavigation(route) { + return new Error(`Route "${route}": Next.js encountered \`navigation()\` during prerendering or a navigation.\n\n` + `\`navigation()\` called outside of \`\` may prevent the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the component that calls \`navigation()\`\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage`); +} +function createPrefetchBodyErrorInNavigation(route) { + return new Error(`Route "${route}": Next.js encountered \`prefetch()\` during prerendering or a navigation.\n\n` + `\`prefetch()\` called outside of \`\` may prevent the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the component that calls \`prefetch()\`\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage`); +} +function createDynamicBodyErrorInNavigation(route) { + return new Error(`Route "${route}": Next.js encountered uncached data during prerendering or a navigation.\n\n` + `\`fetch(...)\` or \`connection()\` accessed outside of \`\` prevents the route from being prerendered or the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [cache] Cache the data access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`); +} +function createDynamicOrRuntimeBodyError(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data during prerendering.\n\n` + `\`fetch(...)\`, \`cookies()\`, \`headers()\`, \`params\`, \`searchParams\`, or \`connection()\` accessed outside of \`\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [cache] For uncached data (\`fetch\`, database calls): cache the access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`); +} +function createLinkMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered URL data in \`generateMetadata()\`.\n\n` + `This route's metadata is blocked, but the rest of its content can be prefetched. \`params\` or \`searchParams\` accessed in \`generateMetadata()\` prevent it from being prefetched.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static metadata export instead of \`generateMetadata()\`\n` + ` - [dynamic] Render a marker component that calls \`await connection()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`); +} +function createRuntimeMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered runtime data in \`generateMetadata()\`.\n\n` + `This route's metadata is blocked, but the rest of its content can be prerendered. \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` accessed in \`generateMetadata()\` cause it to run dynamically.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static metadata export instead of \`generateMetadata()\`\n` + ` - [dynamic] Render a marker component that calls \`await connection()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`); +} +function createNavigationMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered \`navigation()\` in \`generateMetadata()\`.\n\n` + `Metadata can already stream without blocking the route's UI, so delaying it until navigation may be unintentional.\n\n` + `Ways to fix this:\n` + ` - [remove] Remove \`navigation()\` from \`generateMetadata()\`\n` + ` - [mark] Render a marker component that calls \`await navigation()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-metadata`); +} +function createPrefetchMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered \`prefetch()\` in \`generateMetadata()\`.\n\n` + `Metadata can already stream without blocking the route's UI, so delaying it until a per-link prefetch or navigation may be unintentional.\n\n` + `Ways to fix this:\n` + ` - [remove] Remove \`prefetch()\` from \`generateMetadata()\`\n` + ` - [mark] Render a marker component that calls \`await prefetch()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-metadata`); +} +function createDynamicMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered uncached data in \`generateMetadata()\`.\n\n` + `This route's metadata is blocked, but the rest of its content can be prerendered. \`fetch(...)\` or \`connection()\` accessed in \`generateMetadata()\` cause it to run dynamically.\n\n` + `Ways to fix this:\n` + ` - [cache] Cache the metadata with \`"use cache"\` in \`generateMetadata()\` (does not apply to \`connection()\`)\n` + ` - [dynamic] Render a marker component that calls \`await connection()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-dynamic`); +} +function createLinkViewportError(route) { + return new Error(`Route "${route}": Next.js encountered URL data in \`generateViewport()\`.\n\n` + `\`params\` or \`searchParams\` in \`generateViewport()\` prevents the page from being prerendered, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static viewport export instead of \`generateViewport()\`\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`); +} +function createRuntimeViewportError(route) { + return new Error(`Route "${route}": Next.js encountered runtime data in \`generateViewport()\`.\n\n` + `\`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` in \`generateViewport()\` prevents the page from being prerendered, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static viewport export instead of \`generateViewport()\`\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`); +} +function createNavigationViewportError(route) { + return new Error(`Route "${route}": Next.js encountered \`navigation()\` in \`generateViewport()\`.\n\n` + `This prevents Next.js from creating the App Shell, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [remove] Remove \`navigation()\` from \`generateViewport()\`\n` + ` - [ignore] Set \`export const instant = false\` to disable validation for this segment\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-viewport`); +} +function createPrefetchViewportError(route) { + return new Error(`Route "${route}": Next.js encountered \`prefetch()\` in \`generateViewport()\`.\n\n` + `This prevents Next.js from creating the App Shell, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [remove] Remove \`prefetch()\` from \`generateViewport()\`\n` + ` - [ignore] Set \`export const instant = false\` to disable validation for this segment\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-viewport`); +} +function createDynamicViewportError(route) { + return new Error(`Route "${route}": Next.js encountered uncached data in \`generateViewport()\`.\n\n` + `\`fetch(...)\` or \`connection()\` in \`generateViewport()\` prevents the page from being prerendered, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [cache] Cache the viewport data with \`"use cache"\` in \`generateViewport()\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-dynamic`); +} +function createDynamicOrRuntimeViewportError(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data in \`generateViewport()\`.\n\n` + `This prevents the page from being prerendered, leading to a slower user experience. Unlike metadata, viewport cannot be streamed behind \`\` because it affects the initial page load.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static viewport export instead of \`generateViewport()\`\n` + ` - [cache] For uncached data (\`fetch\`, database calls): cache the viewport with \`"use cache"\` in \`generateViewport()\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`); +} +function createDynamicOrRuntimeMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data in \`generateMetadata()\`.\n\n` + `This route's metadata is blocked, but the rest of its content can be prerendered.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static metadata export instead of \`generateMetadata()\`\n` + ` - [cache] Cache the metadata with \`"use cache"\` in \`generateMetadata()\` (does not apply to \`connection()\`)\n` + ` - [dynamic] Render a marker component that calls \`await connection()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`); +} +function createRuntimeBodyErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered runtime data on a route that must be fully static.\n\n` + `This route is configured to be fully static, but runtime data from \`cookies()\`, \`headers()\`, \`params\`, \`searchParams\`, or a short-lived cache requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [remove] Remove the data access\n` + ` - [client] Read the data on the client\n\n` + `Learn more: https://nextjs.org/docs/messages/static-route-runtime`); +} +function createDynamicBodyErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached data on a route that must be fully static.\n\n` + `This route is configured to be fully static, but an uncached \`fetch(...)\`, database call, or \`connection()\` requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] Cache the data access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [remove] Remove the data access\n` + ` - [client] Read the data on the client\n\n` + `Learn more: https://nextjs.org/docs/messages/static-route-dynamic`); +} +function createNonPrerenderableBodyErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data on a route that must be fully static.\n\n` + `This route is configured to be fully static, but some data requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] For uncached data (\`fetch\`, database calls): cache the access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [remove] Remove the data access\n` + ` - [client] Read the data on the client\n\n` + `Learn more: https://nextjs.org/docs/messages/static-route-dynamic`); +} +function createRuntimeMetadataErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered runtime data in \`generateMetadata()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but runtime data from \`cookies()\`, \`headers()\`, \`params\`, \`searchParams\`, or a short-lived cache requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [static] Replace the dynamic data used by \`generateMetadata()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-metadata-runtime`); +} +function createDynamicMetadataErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached data in \`generateMetadata()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but an uncached \`fetch(...)\`, database call, or \`connection()\` requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] Cache the data used by \`generateMetadata()\` with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [static] Replace the dynamic data used by \`generateMetadata()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-metadata-dynamic`); +} +function createNonPrerenderableMetadataErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data in \`generateMetadata()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but some data requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] For uncached data: cache the data used by \`generateMetadata()\` with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [static] Replace the dynamic data used by \`generateMetadata()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-metadata-dynamic`); +} +function createRuntimeViewportErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered runtime data in \`generateViewport()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but runtime data from \`cookies()\`, \`headers()\`, \`params\`, \`searchParams\`, or a short-lived cache requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [static] Replace the dynamic data used by \`generateViewport()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-viewport-runtime`); +} +function createDynamicViewportErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached data in \`generateViewport()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but an uncached \`fetch(...)\`, database call, or \`connection()\` requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] Cache the data used by \`generateViewport()\` with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [static] Replace the dynamic data used by \`generateViewport()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-viewport-dynamic`); +} +function createNonPrerenderableViewportErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data in \`generateViewport()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but some data requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] For uncached data: cache the data used by \`generateViewport()\` with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [static] Replace the dynamic data used by \`generateViewport()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-viewport-dynamic`); +} +function logBuildDebugHint(route) { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; +} +}), +"[project]/node_modules/next/dist/server/app-render/dynamic-rendering.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +/** + * The functions provided by this module are used to communicate certain properties + * about the currently running code so that Next.js can make decisions on how to handle + * the current execution in different rendering modes such as pre-rendering, resuming, and SSR. + * + * Today Next.js treats all code as potentially static. Certain APIs may only make sense when dynamically rendering. + * Traditionally this meant deopting the entire render to dynamic however with PPR we can now deopt parts + * of a React tree as dynamic while still keeping other parts static. There are really two different kinds of + * Dynamic indications. + * + * The first is simply an intention to be dynamic. unstable_noStore is an example of this where + * the currently executing code simply declares that the current scope is dynamic but if you use it + * inside unstable_cache it can still be cached. This type of indication can be removed if we ever + * make the default dynamic to begin with because the only way you would ever be static is inside + * a cache scope which this indication does not affect. + * + * The second is an indication that a dynamic data source was read. This is a stronger form of dynamic + * because it means that it is inappropriate to cache this at all. using a dynamic data source inside + * unstable_cache should error. If you want to use some dynamic data inside unstable_cache you should + * read that data outside the cache and pass it in as an argument to the cached function. + */ Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + DynamicHoleKind: null, + PreludeState: null, + abortAndThrowOnSynchronousRequestDataAccess: null, + abortOnSynchronousPlatformIOAccess: null, + accessedDynamicData: null, + annotateDynamicAccess: null, + consumeDynamicAccess: null, + createDynamicTrackingState: null, + createDynamicValidationState: null, + createHangingInputAbortSignal: null, + createInstantValidationState: null, + formatDynamicAPIAccesses: null, + getDisallowedReasonsInStaticRoute: null, + getFirstDynamicReason: null, + getNavigationDisallowedDynamicReasons: null, + getStaticShellDisallowedDynamicReasons: null, + isPrerenderInterruptedError: null, + logDisallowedDynamicError: null, + markCurrentScopeAsDynamic: null, + throwIfDisallowedDynamic: null, + throwIfDisallowedDynamicInStaticRoute: null, + throwIfSyncIOUsed: null, + throwToInterruptStaticGeneration: null, + trackAllowedDynamicAccess: null, + trackDynamicAccessInStaticRoute: null, + trackDynamicDataInDynamicRender: null, + trackDynamicHoleInNavigation: null, + trackDynamicHoleInStaticShell: null, + trackThrownErrorInNavigation: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + DynamicHoleKind: function() { + return DynamicHoleKind; + }, + PreludeState: function() { + return PreludeState; + }, + abortAndThrowOnSynchronousRequestDataAccess: function() { + return abortAndThrowOnSynchronousRequestDataAccess; + }, + abortOnSynchronousPlatformIOAccess: function() { + return abortOnSynchronousPlatformIOAccess; + }, + accessedDynamicData: function() { + return accessedDynamicData; + }, + annotateDynamicAccess: function() { + return annotateDynamicAccess; + }, + consumeDynamicAccess: function() { + return consumeDynamicAccess; + }, + createDynamicTrackingState: function() { + return createDynamicTrackingState; + }, + createDynamicValidationState: function() { + return createDynamicValidationState; + }, + createHangingInputAbortSignal: function() { + return createHangingInputAbortSignal; + }, + createInstantValidationState: function() { + return createInstantValidationState; + }, + formatDynamicAPIAccesses: function() { + return formatDynamicAPIAccesses; + }, + getDisallowedReasonsInStaticRoute: function() { + return getDisallowedReasonsInStaticRoute; + }, + getFirstDynamicReason: function() { + return getFirstDynamicReason; + }, + getNavigationDisallowedDynamicReasons: function() { + return getNavigationDisallowedDynamicReasons; + }, + getStaticShellDisallowedDynamicReasons: function() { + return getStaticShellDisallowedDynamicReasons; + }, + isPrerenderInterruptedError: function() { + return isPrerenderInterruptedError; + }, + logDisallowedDynamicError: function() { + return logDisallowedDynamicError; + }, + markCurrentScopeAsDynamic: function() { + return markCurrentScopeAsDynamic; + }, + throwIfDisallowedDynamic: function() { + return throwIfDisallowedDynamic; + }, + throwIfDisallowedDynamicInStaticRoute: function() { + return throwIfDisallowedDynamicInStaticRoute; + }, + throwIfSyncIOUsed: function() { + return throwIfSyncIOUsed; + }, + throwToInterruptStaticGeneration: function() { + return throwToInterruptStaticGeneration; + }, + trackAllowedDynamicAccess: function() { + return trackAllowedDynamicAccess; + }, + trackDynamicAccessInStaticRoute: function() { + return trackDynamicAccessInStaticRoute; + }, + trackDynamicDataInDynamicRender: function() { + return trackDynamicDataInDynamicRender; + }, + trackDynamicHoleInNavigation: function() { + return trackDynamicHoleInNavigation; + }, + trackDynamicHoleInStaticShell: function() { + return trackDynamicHoleInStaticShell; + }, + trackThrownErrorInNavigation: function() { + return trackThrownErrorInNavigation; + } +}); +const _react = /*#__PURE__*/ _interop_require_default(__turbopack_context__.r("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js [app-route] (ecmascript)")); +const _hooksservercontext = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/hooks-server-context.js [app-route] (ecmascript)"); +const _staticgenerationbailout = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/static-generation-bailout.js [app-route] (ecmascript)"); +const _workunitasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)"); +const _dynamicrenderingutils = __turbopack_context__.r("[project]/node_modules/next/dist/server/dynamic-rendering-utils.js [app-route] (ecmascript)"); +const _boundaryconstants = __turbopack_context__.r("[project]/node_modules/next/dist/lib/framework/boundary-constants.js [app-route] (ecmascript)"); +const _scheduler = __turbopack_context__.r("[project]/node_modules/next/dist/lib/scheduler.js [app-route] (ecmascript)"); +const _blockingroutemessages = __turbopack_context__.r("[project]/node_modules/next/dist/server/app-render/blocking-route-messages.js [app-route] (ecmascript)"); +const _invarianterror = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/invariant-error.js [app-route] (ecmascript)"); +const _boundaryconstants1 = __turbopack_context__.r("[project]/node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js [app-route] (ecmascript)"); +const _boundarytracking = __turbopack_context__.r("[project]/node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.js [app-route] (ecmascript)"); +const _instantmessages = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/instant-messages.js [app-route] (ecmascript)"); +const _reactbrowserbailout = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/lazy-dynamic/react-browser-bailout.js [app-route] (ecmascript)"); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function createDynamicTrackingState(isDebugDynamicAccesses) { + return { + isDebugDynamicAccesses, + dynamicAccesses: [], + syncDynamicErrorWithStack: null, + syncDynamicErrorWithStackPostMicrotask: false + }; +} +function createDynamicValidationState() { + return { + hasSuspenseAboveBody: false, + hasDynamicMetadata: false, + dynamicMetadata: null, + hasDynamicViewport: false, + hasAllowedDynamic: false, + dynamicErrors: [] + }; +} +function getPendingClientSyncDynamicError(clientDynamic) { + return clientDynamic.syncDynamicErrorWithStackPostMicrotask ? null : clientDynamic.syncDynamicErrorWithStack; +} +function getFirstDynamicReason(trackingState) { + var _trackingState_dynamicAccesses_; + return (_trackingState_dynamicAccesses_ = trackingState.dynamicAccesses[0]) == null ? void 0 : _trackingState_dynamicAccesses_.expression; +} +function markCurrentScopeAsDynamic(store, workUnitStore, expression) { + if (workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + case 'unstable-cache': + // Inside cache scopes, marking a scope as dynamic has no effect, + // because the outer cache scope creates a cache boundary. This is + // subtly different from reading a dynamic data source, which is + // forbidden inside a cache scope. + return; + case 'private-cache': + // A private cache scope is already dynamic by definition. + return; + case 'prerender-legacy': + case 'request': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + // If we're forcing dynamic rendering or we're forcing static rendering, we + // don't need to do anything here because the entire page is already dynamic + // or it's static and it should not throw or postpone here. + if (store.forceDynamic || store.forceStatic) return; + if (store.dynamicShouldError) { + throw new _staticgenerationbailout.StaticGenBailoutError(`Route ${store.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`); + } + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender-legacy': + workUnitStore.revalidate = 0; + // We aren't prerendering, but we are generating a static page. We need + // to bail out of static generation. + const err = new _hooksservercontext.DynamicServerError(`Route ${store.route} couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`); + store.dynamicUsageDescription = expression; + store.dynamicUsageStack = err.stack; + throw err; + case 'request': + markRequestStoreAsDynamic(workUnitStore); + break; + case 'build-time-generator': + break; + default: + workUnitStore; + } + } +} +function throwToInterruptStaticGeneration(expression, store, prerenderStore) { + // We aren't prerendering but we are generating a static page. We need to bail out of static generation + const err = new _hooksservercontext.DynamicServerError(`Route ${store.route} couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`); + prerenderStore.revalidate = 0; + store.dynamicUsageDescription = expression; + store.dynamicUsageStack = err.stack; + throw err; +} +function trackDynamicDataInDynamicRender(workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + case 'unstable-cache': + // Inside cache scopes, marking a scope as dynamic has no effect, + // because the outer cache scope creates a cache boundary. This is + // subtly different from reading a dynamic data source, which is + // forbidden inside a cache scope. + return; + case 'private-cache': + // A private cache scope is already dynamic by definition. + return; + case 'prerender': + case 'prerender-runtime': + case 'prerender-legacy': + case 'prerender-client': + case 'validation-client': + case 'build-time-generator': + break; + case 'request': + markRequestStoreAsDynamic(workUnitStore); + break; + default: + workUnitStore; + } +} +function markRequestStoreAsDynamic(requestStore) { + if (("TURBOPACK compile-time value", "1") && requestStore.phase === 'render') { + requestStore.usedDynamic = true; + } +} +function abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore) { + const reason = `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`; + const error = createPrerenderInterruptedError(reason); + prerenderStore.controller.abort(error); + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking) { + dynamicTracking.dynamicAccesses.push({ + // When we aren't debugging, we don't need to create another error for the + // stack trace. + stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined, + expression + }); + } +} +function abortOnSynchronousPlatformIOAccess(route, expression, errorWithStack, prerenderStore) { + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking && dynamicTracking.syncDynamicErrorWithStack === null) { + dynamicTracking.syncDynamicErrorWithStack = errorWithStack; + // React completes the task that is currently rendering before scheduled + // abort cleanup. Client tracking can attribute the sync IO only during + // that current task; server tracking keeps the error regardless. + queueMicrotask(()=>{ + dynamicTracking.syncDynamicErrorWithStackPostMicrotask = true; + }); + } + abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore); +} +function abortAndThrowOnSynchronousRequestDataAccess(route, expression, errorWithStack, prerenderStore) { + const prerenderSignal = prerenderStore.controller.signal; + if (prerenderSignal.aborted === false) { + // TODO it would be better to move this aborted check into the callsite so we can avoid making + // the error object when it isn't relevant to the aborting of the prerender however + // since we need the throw semantics regardless of whether we abort it is easier to land + // this way. See how this was handled with `abortOnSynchronousPlatformIOAccess` for a closer + // to ideal implementation + abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore); + // Preserve the exact server-side dynamic access for final validation after + // interrupting this render. + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking) { + if (dynamicTracking.syncDynamicErrorWithStack === null) { + dynamicTracking.syncDynamicErrorWithStack = errorWithStack; + } + } + } + throw createPrerenderInterruptedError(`Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`); +} +const NEXT_PRERENDER_INTERRUPTED = 'NEXT_PRERENDER_INTERRUPTED'; +function createPrerenderInterruptedError(message) { + const error = new Error(message); + error.digest = NEXT_PRERENDER_INTERRUPTED; + return error; +} +function isPrerenderInterruptedError(error) { + return typeof error === 'object' && error !== null && error.digest === NEXT_PRERENDER_INTERRUPTED && 'name' in error && 'message' in error && error instanceof Error; +} +function accessedDynamicData(dynamicAccesses) { + return dynamicAccesses.length > 0; +} +function consumeDynamicAccess(serverDynamic, clientDynamic) { + // We mutate because we only call this once we are no longer writing + // to the dynamicTrackingState and it's more efficient than creating a new + // array. + serverDynamic.dynamicAccesses.push(...clientDynamic.dynamicAccesses); + return serverDynamic.dynamicAccesses; +} +function formatDynamicAPIAccesses(dynamicAccesses) { + return dynamicAccesses.filter((access)=>typeof access.stack === 'string' && access.stack.length > 0).map(({ expression, stack })=>{ + stack = stack.split('\n') // Remove the "Error: " prefix from the first line of the stack trace as + // well as the first 4 lines of the stack trace which is the distance + // from the user code and the `new Error().stack` call. + .slice(4).filter((line)=>{ + // Exclude Next.js internals from the stack trace. + if (line.includes('node_modules/next/')) { + return false; + } + // Exclude anonymous functions from the stack trace. + if (line.includes(' ()')) { + return false; + } + // Exclude Node.js internals from the stack trace. + if (line.includes(' (node:')) { + return false; + } + return true; + }).join('\n'); + return `Dynamic API Usage Debug - ${expression}:\n${stack}`; + }); +} +function createHangingInputAbortSignal(workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + const controller = new AbortController(); + if (workUnitStore.cacheSignal) { + // If we have a cacheSignal it means we're in a prospective render. If + // the input we're waiting on is coming from another cache, we do want + // to wait for it so that we can resolve this cache entry too. + workUnitStore.cacheSignal.inputReady().then(()=>{ + controller.abort(); + }); + } else { + // Otherwise we're in the final render and we should already have all + // our caches filled. + // If the prerender uses stages, we have wait until the final stage. + // if an input didn't resolve at that point, then we can assume it never will. + // + // We might still be waiting on some microtasks so we + // wait one tick before giving up. When we give up, we still want to + // render the content of this cache as deeply as we can so that we can + // suspend as deeply as possible in the tree or not at all if we don't + // end up waiting for the input. + const stagedRendering = (0, _workunitasyncstorageexternal.getStagedRenderingController)(workUnitStore); + if (stagedRendering && stagedRendering.finalStage !== null) { + stagedRendering.waitForStage(stagedRendering.finalStage).then(()=>(0, _scheduler.scheduleOnNextTick)(()=>controller.abort()), noop); + } else { + (0, _scheduler.scheduleOnNextTick)(()=>controller.abort()); + } + } + return controller.signal; + case 'prerender-client': + case 'validation-client': + case 'prerender-legacy': + case 'request': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + return undefined; + default: + workUnitStore; + } +} +function noop() {} +function annotateDynamicAccess(expression, prerenderStore) { + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking) { + dynamicTracking.dynamicAccesses.push({ + stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined, + expression + }); + } +} +const hasSuspenseRegex = /\n\s+at Suspense \(\)/; +// Common implicit body tags that React will treat as body when placed directly in html +const bodyAndImplicitTags = 'body|div|main|section|article|aside|header|footer|nav|form|p|span|h1|h2|h3|h4|h5|h6'; +// Detects when RootLayoutBoundary (our framework marker component) appears +// after Suspense in the component stack, indicating the root layout is wrapped +// within a Suspense boundary. Ensures no body/html/implicit-body components are in between. +// +// Example matches: +// at Suspense () +// at __next_root_layout_boundary__ () +// +// Or with other components in between (but not body/html/implicit-body): +// at Suspense () +// at SomeComponent () +// at __next_root_layout_boundary__ () +const hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex = new RegExp(`\\n\\s+at Suspense \\(\\)(?:(?!\\n\\s+at (?:${bodyAndImplicitTags}) \\(\\))[\\s\\S])*?\\n\\s+at ${_boundaryconstants.ROOT_LAYOUT_BOUNDARY_NAME} \\([^\\n]*\\)`); +const hasMetadataRegex = new RegExp(`\\n\\s+at ${_boundaryconstants.METADATA_BOUNDARY_NAME}[\\n\\s]`); +const hasViewportRegex = new RegExp(`\\n\\s+at ${_boundaryconstants.VIEWPORT_BOUNDARY_NAME}[\\n\\s]`); +const hasOutletRegex = new RegExp(`\\n\\s+at ${_boundaryconstants.OUTLET_BOUNDARY_NAME}[\\n\\s]`); +const hasInstantValidationBoundaryRegex = new RegExp(`\\n\\s+at ${_boundaryconstants1.INSTANT_VALIDATION_BOUNDARY_NAME}[\\n\\s]`); +const slotMarkerRegex = new RegExp(`\\n\\s+at ${_boundaryconstants1.INSTANT_SLOT_MARKER_PREFIX}(\\d+)${_boundaryconstants1.INSTANT_SLOT_MARKER_SUFFIX}[\\n\\s]`); +/** Look up the config factory for the slot this error belongs to. + * Checks the component stack for a slot marker (__next_instant_slot_N__) + * and returns the config at that index. Falls back to index 0 (root + * config) when no slot marker is found or the slot has no config. */ function resolveInstantStack(componentStack, dynamicValidation) { + const { slotStacks } = dynamicValidation; + if (slotStacks.length > 1) { + const match = slotMarkerRegex.exec(componentStack); + if (match) { + // Slot markers are 0-indexed in the component name but + // slotStacks is 1-indexed (index 0 is the root config). + const slotIndex = parseInt(match[1], 10) + 1; + const slotStack = slotStacks[slotIndex]; + if (slotStack != null) { + return slotStack; + } + } + } + // Fall back to root config (index 0) + return slotStacks[0] ?? null; +} +/** + * Inspects the component stack of an outlet boundary to discover whether the + * user placed a Suspense boundary above the document body, and records the + * opt-in on `dynamicValidation.hasSuspenseAboveBody` if so. + * + * The outlet itself isn't a meaningful source of dynamic — it only resolves + * when metadata/viewport are dynamic, which we track via their own boundaries. + * However, the outlet renders alongside the page content, so its stack passes + * through the user's layout chain (typically reaching into `` via the + * root layout). That makes the outlet stack our best opportunity to spot a + * Suspense boundary above the body, even when no real body content is dynamic. + * Without this, a route whose only dynamic source is `generateViewport()` would + * miss the Suspense-above-body opt-in, because the viewport's stack lives in + * the head and never sees the user's root layout. + * + * We deliberately only set `hasSuspenseAboveBody`, not `hasAllowedDynamic`. The + * latter tracks whether the body has dynamic content that's been wrapped in + * Suspense (i.e., the page is partially dynamic). The outlet rendering tells us + * about the structural opt-in for an empty shell, not about the body being + * partially dynamic. The distinction matters because dynamic metadata is only + * acceptable when the page is partially dynamic (via real body holes), and we + * don't want this outlet-based detection to mask that case. + */ function trackOutletSuspenseAboveBody(componentStack, dynamicValidation) { + if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + dynamicValidation.hasSuspenseAboveBody = true; + } +} +function trackDynamicAccessInStaticRoute(dynamicReason, workStore, componentStack, dynamicValidation, clientDynamic, isServerPartial, kind) { + const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic); + if (hasOutletRegex.test(componentStack)) { + trackOutletSuspenseAboveBody(componentStack, dynamicValidation); + return; + } + if (hasMetadataRegex.test(componentStack)) { + dynamicValidation.dynamicErrors.push(addErrorContext(createMetadataErrorInStaticRoute(kind, workStore.route), componentStack, null)); + return; + } + if (hasViewportRegex.test(componentStack)) { + dynamicValidation.dynamicErrors.push(addErrorContext(createViewportErrorInStaticRoute(kind, workStore.route), componentStack, null)); + return; + } + let hasSuspense = false; + if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + // this error had a Suspense boundary above it, and it's above the body as well. + dynamicValidation.hasSuspenseAboveBody = true; + hasSuspense = true; + } else if (hasSuspenseRegex.test(componentStack)) { + // this error had a Suspense boundary above it. + hasSuspense = true; + } + if (hasSuspense) { + if (!isServerPartial) { + // If we don't have holes caused by server data, then any holes must be caused + // by client-only code, which is allowed. + dynamicValidation.hasAllowedDynamic = true; + return; + } + // We have holes that may be caused by server data. + if (syncDynamicError || (0, _dynamicrenderingutils.isClientHookDynamicError)(dynamicReason)) { + // We know this hole wasn't caused by server data, so it's allowed + // (because it's wrapped in a Suspense) + dynamicValidation.hasAllowedDynamic = true; + return; + } + // Any remaining hole may be caused by a server hole. + // These are not allowed even with Suspense. + // (NOTE: this may misreport valid client dynamic holes as server holes) + dynamicValidation.dynamicErrors.push(addErrorContext(createBodyErrorInStaticRoute(kind, workStore.route), componentStack, null)); + return; + } + if (syncDynamicError) { + dynamicValidation.dynamicErrors.push(syncDynamicError); + return; + } + if ((0, _dynamicrenderingutils.isClientHookDynamicError)(dynamicReason)) { + dynamicValidation.dynamicErrors.push(addErrorContext(dynamicReason, componentStack, null)); + return; + } + const error = addErrorContext(isServerPartial ? createBodyErrorInStaticRoute(kind, workStore.route) : createBodyError(kind, workStore.route), componentStack, null); + dynamicValidation.dynamicErrors.push(error); +} +function trackAllowedDynamicAccess(dynamicReason, workStore, componentStack, dynamicValidation, clientDynamic) { + const dynamicHoleKind = 6; + const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic); + if (hasOutletRegex.test(componentStack)) { + trackOutletSuspenseAboveBody(componentStack, dynamicValidation); + return; + } else if (hasMetadataRegex.test(componentStack)) { + dynamicValidation.hasDynamicMetadata = true; + return; + } else if (hasViewportRegex.test(componentStack)) { + dynamicValidation.hasDynamicViewport = true; + return; + } else if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule. + // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense + // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering. + dynamicValidation.hasAllowedDynamic = true; + dynamicValidation.hasSuspenseAboveBody = true; + return; + } else if (hasSuspenseRegex.test(componentStack)) { + // this error had a Suspense boundary above it so we don't need to report it as a source + // of disallowed + dynamicValidation.hasAllowedDynamic = true; + return; + } else if (syncDynamicError) { + dynamicValidation.dynamicErrors.push(syncDynamicError); + return; + } + if ((0, _dynamicrenderingutils.isClientHookDynamicError)(dynamicReason)) { + dynamicValidation.dynamicErrors.push(addErrorContext(dynamicReason, componentStack, null)); + return; + } + const error = addErrorContext(createBodyError(dynamicHoleKind, workStore.route), componentStack, null); + dynamicValidation.dynamicErrors.push(error); + return; +} +var DynamicHoleKind = /*#__PURE__*/ function(DynamicHoleKind) { + /** We know that this hole is caused by runtime data. */ DynamicHoleKind[DynamicHoleKind["Runtime"] = 1] = "Runtime"; + /** We know that this hole is caused by link data. */ DynamicHoleKind[DynamicHoleKind["Link"] = 2] = "Link"; + /** We know that this hole is caused by navigation(). */ DynamicHoleKind[DynamicHoleKind["Navigation"] = 3] = "Navigation"; + /** We know that this hole is caused by prefetch(). */ DynamicHoleKind[DynamicHoleKind["Prefetch"] = 4] = "Prefetch"; + /** We know that this hole is caused by dynamic data. */ DynamicHoleKind[DynamicHoleKind["Dynamic"] = 5] = "Dynamic"; + /** We know that this hole is caused by runtime or dynamic data, but don't know which. */ DynamicHoleKind[DynamicHoleKind["RuntimeOrDynamic"] = 6] = "RuntimeOrDynamic"; + return DynamicHoleKind; +}({}); +function createInstantValidationState(slotStacks) { + return { + hasDynamicMetadata: false, + hasAllowedClientDynamicAboveBoundary: false, + dynamicMetadata: null, + hasDynamicViewport: false, + hasAllowedDynamic: false, + dynamicErrors: [], + validationPreventingErrors: [], + thrownErrorsOutsideBoundary: [], + slotStacks + }; +} +function trackDynamicHoleInNavigation(dynamicReason, workStore, componentStack, dynamicValidation, clientDynamic, kind, boundaryState) { + const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic); + if (hasOutletRegex.test(componentStack)) { + // We don't need to track that this is dynamic. It is only so when something else is also dynamic. + return; + } + // Resolve the config stack for this specific error. If the error + // is inside a slot marker, use that slot's config. Otherwise fall + // back to the default. + const effectiveCreateInstantStack = resolveInstantStack(componentStack, dynamicValidation); + if (hasMetadataRegex.test(componentStack)) { + const error = addErrorContext(createMetadataError(kind, workStore.route), componentStack, effectiveCreateInstantStack); + dynamicValidation.dynamicMetadata = error; + return; + } + if (hasViewportRegex.test(componentStack)) { + const error = addErrorContext(createViewportError(kind, workStore.route), componentStack, effectiveCreateInstantStack); + dynamicValidation.dynamicErrors.push(error); + return; + } + const boundaryLocation = hasInstantValidationBoundaryRegex.exec(componentStack); + if (!boundaryLocation) { + // We don't see the validation boundary in the component stack, + // so this hole must be coming from a shared parent. + // Shared parents are fully resolved and don't have RSC holes, + // but they can still suspend in a client component during SSR. + // If we managed to render all the validation boundaries, that means + // that the client holes aren't blocking validation and we can disregard them. + // Note that we don't even care whether they have suspense or not. + if ((0, _boundarytracking.allRequiredBoundariesRendered)(boundaryState)) { + dynamicValidation.hasAllowedClientDynamicAboveBoundary = true; + dynamicValidation.hasAllowedDynamic = true // Holes outside the boundary contribute to allowing dynamic metadata + ; + return; + } else { + // TODO(instant-validation) TODO(NAR-787) + // If shared parents blocked us from validating, we should only log + // the errors from the innermost (segments), i.e. omit layouts whose + // slots managed to render (because clearly they didn't block validation) + const message = `Route "${workStore.route}": Could not validate \`instant\` because a Client Component in a parent segment prevented the page from rendering.`; + const error = addErrorContext(new Error(message), componentStack, effectiveCreateInstantStack); + dynamicValidation.validationPreventingErrors.push(error); + return; + } + } else { + // The hole originates inside the validation boundary. + // + // Check if we have a Suspense above the hole, but below the validation boundary. + // If we do, then this dynamic usage wouldn't block a navigation to this subtree. + // Conversely, if the nearest suspense is above the validation boundary, then this subtree would block. + // + // Note that in the component stack, children come before parents. + // + // Valid: + // ... + // at Suspense + // ... + // at __next_prefetch_validation_boundary__ + // + // Invalid: + // ... + // at __next_prefetch_validation_boundary__ + // ... + // at Suspense + // + const suspenseLocation = hasSuspenseRegex.exec(componentStack); + if (suspenseLocation) { + if (suspenseLocation.index < boundaryLocation.index) { + dynamicValidation.hasAllowedDynamic = true; + return; + } else { + // invalid - fallthrough + } + } + } + if (syncDynamicError) { + if (effectiveCreateInstantStack !== null && syncDynamicError.cause === undefined) { + syncDynamicError.cause = effectiveCreateInstantStack(); + } + dynamicValidation.dynamicErrors.push(syncDynamicError); + return; + } + if ((0, _dynamicrenderingutils.isClientHookDynamicError)(dynamicReason)) { + dynamicValidation.dynamicErrors.push(addErrorContext(dynamicReason, componentStack, effectiveCreateInstantStack)); + return; + } + const error = addErrorContext(createBodyErrorInNavigation(kind, workStore.route), componentStack, effectiveCreateInstantStack); + dynamicValidation.dynamicErrors.push(error); + return; +} +function createBodyError(kind, route) { + switch(kind){ + case 1: + return (0, _blockingroutemessages.createRuntimeBodyError)(route); + case 5: + return (0, _blockingroutemessages.createDynamicBodyError)(route); + case 6: + return (0, _blockingroutemessages.createDynamicOrRuntimeBodyError)(route); + } +} +function createBodyErrorInNavigation(kind, route) { + switch(kind){ + case 1: + return (0, _blockingroutemessages.createRuntimeBodyErrorInNavigation)(route); + case 2: + return (0, _blockingroutemessages.createLinkBodyErrorInNavigation)(route); + case 3: + return (0, _blockingroutemessages.createNavigationBodyErrorInNavigation)(route); + case 4: + return (0, _blockingroutemessages.createPrefetchBodyErrorInNavigation)(route); + case 5: + return (0, _blockingroutemessages.createDynamicBodyErrorInNavigation)(route); + } +} +function createMetadataError(kind, route) { + switch(kind){ + case 1: + return (0, _blockingroutemessages.createRuntimeMetadataError)(route); + case 2: + return (0, _blockingroutemessages.createLinkMetadataError)(route); + case 3: + return (0, _blockingroutemessages.createNavigationMetadataError)(route); + case 4: + return (0, _blockingroutemessages.createPrefetchMetadataError)(route); + case 5: + return (0, _blockingroutemessages.createDynamicMetadataError)(route); + case 6: + return (0, _blockingroutemessages.createDynamicOrRuntimeMetadataError)(route); + } +} +function createViewportError(kind, route) { + switch(kind){ + case 1: + return (0, _blockingroutemessages.createRuntimeViewportError)(route); + case 2: + return (0, _blockingroutemessages.createLinkViewportError)(route); + case 3: + return (0, _blockingroutemessages.createNavigationViewportError)(route); + case 4: + return (0, _blockingroutemessages.createPrefetchViewportError)(route); + case 5: + return (0, _blockingroutemessages.createDynamicViewportError)(route); + case 6: + return (0, _blockingroutemessages.createDynamicOrRuntimeViewportError)(route); + } +} +function createBodyErrorInStaticRoute(kind, route) { + switch(kind){ + case 1: + return (0, _blockingroutemessages.createRuntimeBodyErrorInStaticRoute)(route); + case 5: + return (0, _blockingroutemessages.createDynamicBodyErrorInStaticRoute)(route); + case 6: + return (0, _blockingroutemessages.createNonPrerenderableBodyErrorInStaticRoute)(route); + } +} +function createMetadataErrorInStaticRoute(kind, route) { + switch(kind){ + case 1: + return (0, _blockingroutemessages.createRuntimeMetadataErrorInStaticRoute)(route); + case 5: + return (0, _blockingroutemessages.createDynamicMetadataErrorInStaticRoute)(route); + case 6: + return (0, _blockingroutemessages.createNonPrerenderableMetadataErrorInStaticRoute)(route); + } +} +function createViewportErrorInStaticRoute(kind, route) { + switch(kind){ + case 1: + return (0, _blockingroutemessages.createRuntimeViewportErrorInStaticRoute)(route); + case 5: + return (0, _blockingroutemessages.createDynamicViewportErrorInStaticRoute)(route); + case 6: + return (0, _blockingroutemessages.createNonPrerenderableViewportErrorInStaticRoute)(route); + } +} +function trackThrownErrorInNavigation(workStore, dynamicValidation, thrownValue, componentStack, reactBrowserBailout) { + const boundaryLocation = hasInstantValidationBoundaryRegex.exec(componentStack); + if (!boundaryLocation) { + // There's no validation boundary on the component stack. + // This error may have blocked a boundary from rendering. + // Wrap the error to provide component context. + // This helps for errors from node_modules which would otherwise + // have no useful stack information due to ignore-listing, + // e.g. next/dynamic with `ssr: false`. + if (reactBrowserBailout) { + // React preserves Next's branded bailout reason as the error cause. + // Replace the internal wrapper before storing the user-facing diagnostic. + const browserBailoutReason = (0, _reactbrowserbailout.getReactBrowserBailoutReason)(thrownValue); + if (browserBailoutReason !== undefined) { + const browserBailoutError = thrownValue; + browserBailoutError.cause = browserBailoutReason; + } + } + const error = addErrorContext(new Error('An error occurred while attempting to validate instant UI. This error may be preventing the validation from completing.', { + cause: thrownValue + }), componentStack, null); + dynamicValidation.thrownErrorsOutsideBoundary.push(error); + } else { + // There's validation boundary on the component stack, + // so we know this error didn't block a validation boundary from rendering. + // However, this error might be hiding be hiding dynamic content that would + // cause validation to fail. + const suspenseLocation = hasSuspenseRegex.exec(componentStack); + if (suspenseLocation) { + if (suspenseLocation.index < boundaryLocation.index) { + // There's a Suspense below the validation boundary but above this error's location. + // This subtree can't fail instant validation because any potential + // dynamic holes would be guarded by the Suspense anyway, + // so we can allow this. + return; + } else { + // invalid - fallthrough + } + } + if (reactBrowserBailout) { + // React preserves Next's branded bailout reason as the error cause. + // Replace the internal wrapper before storing the user-facing diagnostic. + const browserBailoutReason = (0, _reactbrowserbailout.getReactBrowserBailoutReason)(thrownValue); + if (browserBailoutReason !== undefined) { + const browserBailoutError = thrownValue; + browserBailoutError.cause = browserBailoutReason; + } + } + const message = `Route "${workStore.route}": Could not validate \`instant\` because an error prevented the target segment from rendering.`; + const error = addErrorContext(new Error(message, { + cause: thrownValue + }), componentStack, null // TODO(instant-validation-build): conflicting use of cause + ); + dynamicValidation.validationPreventingErrors.push(error); + } +} +function trackDynamicHoleInStaticShell(dynamicReason, workStore, componentStack, dynamicValidation, clientDynamic, kind) { + const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic); + if (hasOutletRegex.test(componentStack)) { + trackOutletSuspenseAboveBody(componentStack, dynamicValidation); + return; + } else if (hasMetadataRegex.test(componentStack)) { + const error = addErrorContext(createMetadataError(kind, workStore.route), componentStack, null); + dynamicValidation.dynamicMetadata = error; + return; + } else if (hasViewportRegex.test(componentStack)) { + const error = addErrorContext(createViewportError(kind, workStore.route), componentStack, null); + dynamicValidation.dynamicErrors.push(error); + return; + } else if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule. + // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense + // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering. + dynamicValidation.hasAllowedDynamic = true; + dynamicValidation.hasSuspenseAboveBody = true; + return; + } else if (hasSuspenseRegex.test(componentStack)) { + // this error had a Suspense boundary above it so we don't need to report it as a source + // of disallowed + dynamicValidation.hasAllowedDynamic = true; + return; + } else if (syncDynamicError) { + dynamicValidation.dynamicErrors.push(syncDynamicError); + return; + } + if ((0, _dynamicrenderingutils.isClientHookDynamicError)(dynamicReason)) { + dynamicValidation.dynamicErrors.push(addErrorContext(dynamicReason, componentStack, null)); + return; + } + const error = addErrorContext(kind === 1 ? (0, _blockingroutemessages.createRuntimeBodyError)(workStore.route) : (0, _blockingroutemessages.createDynamicBodyError)(workStore.route), componentStack, null); + dynamicValidation.dynamicErrors.push(error); + return; +} +/** + * In dev mode, we prefer using the owner stack, otherwise the provided + * component stack is used. + */ function addErrorContext(error, componentStack, createInstantStack) { + const ownerStack = ("TURBOPACK compile-time value", "development") !== 'production' && _react.default.captureOwnerStack ? _react.default.captureOwnerStack() : null; + if (createInstantStack !== null) { + error.cause = createInstantStack(); + } + // TODO go back to owner stack here if available. This is temporarily using componentStack to get the right + // + error.stack = error.name + ': ' + error.message + (ownerStack || componentStack); + return error; +} +var PreludeState = /*#__PURE__*/ function(PreludeState) { + PreludeState[PreludeState["Full"] = 0] = "Full"; + PreludeState[PreludeState["Empty"] = 1] = "Empty"; + PreludeState[PreludeState["Errored"] = 2] = "Errored"; + return PreludeState; +}({}); +function logDisallowedDynamicError(workStore, error) { + console.error(error); + (0, _blockingroutemessages.logBuildDebugHint)(workStore.route); +} +function throwIfSyncIOUsed(workStore, serverDynamic) { + if (serverDynamic.syncDynamicErrorWithStack) { + logDisallowedDynamicError(workStore, serverDynamic.syncDynamicErrorWithStack); + throw new _staticgenerationbailout.StaticGenBailoutError(); + } +} +function throwIfDisallowedDynamic(workStore, prelude, dynamicValidation, serverDynamic, allowEmptyStaticShell) { + const dynamicHoleKind = 6; + throwIfSyncIOUsed(workStore, serverDynamic); + // The dynamic metadata error is a mistake-detection signal. It fires when the + // rest of the shell is otherwise fully static apart from metadata, suggesting + // the dynamic data access in `generateMetadata` was probably unintentional. + // That condition is independent of whether the user or build phase accepted + // an empty shell, so we surface it before any opt-in bypass. + if (prelude === 0 && dynamicValidation.hasAllowedDynamic === false && dynamicValidation.hasDynamicMetadata) { + console.error(createMetadataError(dynamicHoleKind, workStore.route).message); + throw new _staticgenerationbailout.StaticGenBailoutError(); + } + // Either flag expresses "this shell is allowed to be empty/blocking": + // - `allowEmptyStaticShell` covers `instant = false` (user opt-in) + // and the build-phase fallback-shell case. + // - `hasSuspenseAboveBody` is the structural opt-in inside the user's root + // layout. + // Treat them as synonyms for the purpose of bypassing shell-failure errors. + if (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody) { + return; + } + if (prelude !== 0) { + // We didn't have any sync bailouts but there may be user code which + // blocked the root. We would have captured these during the prerender + // and can log them here and then terminate the build/validating render + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + for(let i = 0; i < dynamicErrors.length; i++){ + logDisallowedDynamicError(workStore, dynamicErrors[i]); + } + throw new _staticgenerationbailout.StaticGenBailoutError(); + } + // If we got this far then the only other thing that could be blocking + // the root is dynamic Viewport. If this is dynamic then + // you need to opt into that by adding a Suspense boundary above the body + // to indicate your are ok with fully dynamic rendering. + if (dynamicValidation.hasDynamicViewport) { + console.error(createViewportError(dynamicHoleKind, workStore.route).message); + throw new _staticgenerationbailout.StaticGenBailoutError(); + } + if (prelude === 1) { + // If we ever get this far then we messed up the tracking of invalid dynamic. + // We still adhere to the constraint that you must produce a shell but invite the + // user to report this as a bug in Next.js. + console.error(`Route "${workStore.route}" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`); + throw new _staticgenerationbailout.StaticGenBailoutError(); + } + } +} +function throwIfDisallowedDynamicInStaticRoute(workStore, prelude, dynamicValidation, serverDynamic, isFallbackShell, allowEmptyStaticShell, isServerPartial) { + const reasons = getDisallowedReasonsInStaticRoute(workStore, prelude, dynamicValidation, serverDynamic, isFallbackShell, allowEmptyStaticShell, isServerPartial); + if (reasons.length > 0) { + for (const reason of reasons){ + logDisallowedDynamicError(workStore, reason); + } + throw new _staticgenerationbailout.StaticGenBailoutError(); + } +} +function getDisallowedReasonsInStaticRoute(workStore, prelude, dynamicValidation, serverDynamic, isFallbackShell, allowEmptyStaticShell, isServerPartial) { + if (serverDynamic && serverDynamic.syncDynamicErrorWithStack) { + return [ + serverDynamic.syncDynamicErrorWithStack + ]; + } + // We do a fallback shell prerender, but it's not meant to be validated -- + // we just need it to create the relevant prerender outputs. + if (isFallbackShell) { + return []; + } + // Suspense-above-body and `instant = false` bypass reporting + // that the shell is blocked. However, if we have non-prerenderable server + // data, we still have to error, regardless of those two. + if (!isServerPartial && (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody)) { + return []; + } + const { dynamicErrors } = dynamicValidation; + if (dynamicErrors.length > 0) { + return dynamicErrors; + } + // Dynamic data may have been passed into a client component without calling `use()`, + // in which case we wouldn't see it during the prerender, but still need to error. + // Fall back to a generic error message. + if (isServerPartial) { + return [ + new Error(`Route "${workStore.route}": Next.js encountered data that is not available during a static prerender, but is unable to provide a location.`) + ]; + } + if (prelude === 1 || prelude === 2) { + // We've somehow ended up with an empty prelude but no dynamic errors. + // We must've messed up the tracking somehow. + return [ + new _invarianterror.InvariantError(`Route "${workStore.route}" did not produce a static shell and Next.js was unable to determine a reason.`) + ]; + } + return []; +} +function getStaticShellDisallowedDynamicReasons(workStore, prelude, dynamicValidation, allowEmptyStaticShell) { + // The dynamic metadata error is a mistake-detection signal. It fires when the + // rest of the shell is otherwise fully static apart from metadata, suggesting + // the dynamic data access in `generateMetadata` was probably unintentional. + // That condition is independent of whether the user or build phase accepted + // an empty shell, so we surface it before any opt-in bypass. + if (prelude === 0 && dynamicValidation.hasAllowedDynamic === false && dynamicValidation.dynamicErrors.length === 0 && dynamicValidation.dynamicMetadata) { + return [ + dynamicValidation.dynamicMetadata + ]; + } + // Either flag expresses "this shell is allowed to be empty/blocking": + // - `allowEmptyStaticShell` covers `instant = false` (user opt-in) + // and the build-phase fallback-shell case. + // - `hasSuspenseAboveBody` is the structural opt-in inside the user's root + // layout. + // Treat them as synonyms for the purpose of bypassing shell-failure errors. + if (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody) { + return []; + } + if (prelude !== 0) { + // We didn't have any sync bailouts but there may be user code which + // blocked the root. We would have captured these during the prerender + // and can log them here and then terminate the build/validating render + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + return dynamicErrors; + } + if (prelude === 1) { + // If we ever get this far then we messed up the tracking of invalid dynamic. + // We still adhere to the constraint that you must produce a shell but invite the + // user to report this as a bug in Next.js. + return [ + new _invarianterror.InvariantError(`Route "${workStore.route}" did not produce a static shell and Next.js was unable to determine a reason.`) + ]; + } + } + // We had a non-empty prelude and there are no dynamic holes + return []; +} +function getNavigationDisallowedDynamicReasons(workStore, prelude, dynamicValidation, validationSampleTracking, boundaryState, devRenderDidError) { + // If we have errors related to missing samples, those should take precedence over everything else. + if (validationSampleTracking) { + const { missingSampleErrors } = validationSampleTracking; + if (missingSampleErrors.length > 0) { + return missingSampleErrors; + } + } + const { validationPreventingErrors } = dynamicValidation; + if (validationPreventingErrors.length > 0) { + if (("TURBOPACK compile-time value", "1") && devRenderDidError) { + // The dev render already surfaced server errors to the user. + // The same errors likely caused validation to be inconclusive, + // so reporting them again as validation failures would be noisy. + return []; + } + return validationPreventingErrors; + } + // NOTE: We don't care about Suspense above body here, + // we're only concerned with the validation boundary + if (prelude !== 0) { + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + return dynamicErrors; + } + if (prelude === 1 && !dynamicValidation.hasAllowedClientDynamicAboveBoundary && (0, _boundarytracking.allRequiredBoundariesRendered)(boundaryState)) { + // If we ever get this far then we messed up the tracking of invalid + // dynamic. (When boundaries are missing the deferred fallback below + // will surface a more useful error.) + return new _invarianterror.InvariantError(`Route "${workStore.route}" failed to render during instant validation and Next.js was unable to determine a reason.`); + } + } else { + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + return dynamicErrors; + } + if (dynamicValidation.hasAllowedDynamic === false && dynamicValidation.dynamicMetadata) { + return [ + dynamicValidation.dynamicMetadata + ]; + } + } + // Missing boundaries on their own aren't a strong signal — a parent + // layout may legitimately omit a slot. Defer this so the caller can + // try shallower validation depths first; if every depth comes up + // empty we still want to surface this so the user is made aware that + // validation didn't complete. When we add a markers API, the + // marker-based variant of this check can become strict again. + if (!(0, _boundarytracking.allRequiredBoundariesRendered)(boundaryState)) { + const { thrownErrorsOutsideBoundary } = dynamicValidation; + const rootInstantStack = dynamicValidation.slotStacks[0]; + if (thrownErrorsOutsideBoundary.length === 0) { + const missingFiles = []; + for (const [id, filePaths] of boundaryState.requiredIds){ + if (!boundaryState.renderedIds.has(id)) { + for (const filePath of filePaths){ + let normalized = filePath.replace(/^\[project\][\\/]?/, '').replace(process.cwd() + '/', '').replace(process.cwd() + '\\', ''); + missingFiles.push(normalized); + } + } + } + missingFiles.sort(); + return (0, _instantmessages.createUnrenderedSegmentError)(workStore.route, missingFiles); + } else if (("TURBOPACK compile-time value", "1") && devRenderDidError) { + // Errors outside the boundary likely blocked it from rendering, + // but they're already being reported to the user via the dev + // render. Suppress the validation failure to avoid noise. + return []; + } else if (thrownErrorsOutsideBoundary.length === 1) { + const message = `Route "${workStore.route}": Could not validate \`instant\` because the target segment was prevented from rendering, likely due to the following error.`; + const error = rootInstantStack !== null ? rootInstantStack() : new Error(); + error.name = 'Error'; + error.message = message; + return new AggregateError([ + error, + thrownErrorsOutsideBoundary[0] + ]); + } else { + const message = `Route "${workStore.route}": Could not validate \`instant\` because the target segment was prevented from rendering, likely due to one of the following errors.`; + const error = rootInstantStack !== null ? rootInstantStack() : new Error(); + error.name = 'Error'; + error.message = message; + return new AggregateError([ + error, + ...thrownErrorsOutsideBoundary + ]); + } + } + // We had a non-empty prelude and there are no dynamic holes + return []; +} +}), +"[project]/node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + INSTANT_SLOT_MARKER_PREFIX: null, + INSTANT_SLOT_MARKER_SUFFIX: null, + INSTANT_VALIDATION_BOUNDARY_NAME: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + INSTANT_SLOT_MARKER_PREFIX: function() { + return INSTANT_SLOT_MARKER_PREFIX; + }, + INSTANT_SLOT_MARKER_SUFFIX: function() { + return INSTANT_SLOT_MARKER_SUFFIX; + }, + INSTANT_VALIDATION_BOUNDARY_NAME: function() { + return INSTANT_VALIDATION_BOUNDARY_NAME; + } +}); +const INSTANT_VALIDATION_BOUNDARY_NAME = '__next_instant_validation_boundary__'; +const INSTANT_SLOT_MARKER_PREFIX = '__next_instant_slot_'; +const INSTANT_SLOT_MARKER_SUFFIX = '__'; +}), +"[project]/node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + allRequiredBoundariesRendered: null, + createValidationBoundaryTracking: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + allRequiredBoundariesRendered: function() { + return allRequiredBoundariesRendered; + }, + createValidationBoundaryTracking: function() { + return createValidationBoundaryTracking; + } +}); +function createValidationBoundaryTracking(/** Pass if the render is expected to render the same IDs as a previous one. */ matchPrevious) { + return { + requiredIds: matchPrevious ? new Map(matchPrevious.requiredIds) : new Map(), + renderedIds: new Set() + }; +} +function allRequiredBoundariesRendered(state) { + for (const id of state.requiredIds.keys()){ + if (!state.renderedIds.has(id)) { + return false; + } + } + return true; +} +}), +"[project]/node_modules/next/dist/server/app-render/segment-config/ensure-static.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + EnsureStaticLevel: null, + resolveEnsureStaticConfig: null, + resolveEnsureStaticLevel: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + EnsureStaticLevel: function() { + return EnsureStaticLevel; + }, + resolveEnsureStaticConfig: function() { + return resolveEnsureStaticConfig; + }, + resolveEnsureStaticLevel: function() { + return resolveEnsureStaticLevel; + } +}); +const _parseloadertree = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/parse-loader-tree.js [app-route] (ecmascript)"); +const _appdirmodule = __turbopack_context__.r("[project]/node_modules/next/dist/server/lib/app-dir-module.js [app-route] (ecmascript)"); +var EnsureStaticLevel = /*#__PURE__*/ function(EnsureStaticLevel) { + /** The route follows standard Partial Prefetching semantics. */ EnsureStaticLevel[EnsureStaticLevel["None"] = 0] = "None"; + /** The route requires that app shells must be statically prerendered. */ EnsureStaticLevel[EnsureStaticLevel["Shell"] = 1] = "Shell"; + /** The route requires that app shells and prefetches must be statically prerendered. */ EnsureStaticLevel[EnsureStaticLevel["Prefetch"] = 2] = "Prefetch"; + /** The route requires that app shells, prefetches, and the whole page must be statically prerendered. */ EnsureStaticLevel[EnsureStaticLevel["Navigation"] = 3] = "Navigation"; + return EnsureStaticLevel; +}({}); +function getEnsureStaticLevel(ensureStatic) { + switch(ensureStatic){ + case 'auto': + case false: + { + return 0; + } + case 'shell': + { + return 1; + } + case 'prefetch': + { + return 2; + } + case 'navigation': + { + return 3; + } + } +} +async function resolveEnsureStaticLevel(tree, partialPrefetching) { + return getEnsureStaticLevel(await resolveEnsureStaticConfig(tree, partialPrefetching)); +} +async function resolveEnsureStaticConfig(tree, partialPrefetching) { + let { config, filePath } = await resolveEnsureStaticConfigImpl(tree); + if (!partialPrefetching) { + // If Partial Prefetching is not enabled for this route, we only support + // a subset of `ensureStatic` values. + // (We error in `getAppPageStaticInfo` if `ensureStatic` is used without enabling + // Cache Components, so we don't have to assert that here) + switch(config){ + case 'auto': + { + // Default to the equivalent of Cache Components prefetching behavior. + config = 'prefetch'; + break; + } + case false: + case 'shell': + { + // Not meaningful in Cache Components without Partial Prefetching + const originalConfig = config; + config = 'prefetch'; + console.warn(`${formatEnsureStaticExport(originalConfig)} has no effect unless the route is using Partial Prefetching.` + `\n (from: ${filePath})`); + break; + } + case 'prefetch': + break; + case 'navigation': + break; + default: + config; + } + } + if (config === false) { + // `false` and "auto" are equivalent once resolved. + return 'auto'; + } else { + return config; + } +} +async function resolveEnsureStaticConfigImpl(tree) { + const { mod: layoutOrPageMod, filePath } = await (0, _appdirmodule.getLayoutOrPageModule)(tree); + const config = getEnsureStaticConfigForModule(layoutOrPageMod); + const parentResult = { + config, + filePath: filePath ?? null + }; + // Walk the slots if any and validate that they don't have incompatible configs + // with each other. If compatible, pick the most constrained value from the slots. + let slotsResult = null; + let slotResultKey = null; + const { parallelRoutes } = (0, _parseloadertree.parseLoaderTree)(tree); + for(const parallelRouteKey in parallelRoutes){ + const parallelRoute = parallelRoutes[parallelRouteKey]; + const childResult = await resolveEnsureStaticConfigImpl(parallelRoute); + if (!slotsResult) { + slotsResult = childResult; + slotResultKey = parallelRouteKey; + } else { + // Check if the child is compatible with the current result for the slots. + switch(compareEnsureStatic(childResult.config, slotsResult.config)){ + case 2: + { + // 'auto' is compatible with anything, but if the current result is 'auto' and the new one isn't, + // we want to use the more specific result. + if (slotsResult.config === 'auto' && childResult.config !== 'auto') { + slotsResult = childResult; + slotResultKey = parallelRouteKey; + } + break; + } + case 4: + case 1: + case 3: + { + throw new Error(`Parallel slots cannot have incompatible \`ensureStatic\`.` + `\n ${formatParallelSlot(slotResultKey)}: ` + `\n ${formatEnsureStaticExport(slotsResult.config)}` + `\n (from: ${slotsResult.filePath})` + `\n` + `\n ${formatParallelSlot(parallelRouteKey)}: ` + `\n ${formatEnsureStaticExport(childResult.config)}` + `\n (from: ${childResult.filePath})` + `\n` + `\n Possible fixes:` + `\n - Remove one of the \`ensureStatic\` exports` + `\n - Change one of the \`ensureStatic\` exports to match the other`); + } + } + } + } + // Child segments can override the config from the parent with a more constrained value, + // but they cannot have a less constrained value. + if (!slotsResult) { + return parentResult; + } else { + const comparison = compareEnsureStatic(slotsResult.config, parentResult.config); + switch(comparison){ + case 2: + { + // 'auto' is compatible with anything, but if the parent result is 'auto' and the slots one isn't, + // we want to use the more constrained result. + if (parentResult.config === 'auto' && slotsResult.config !== 'auto') { + return slotsResult; + } else { + return parentResult; + } + } + case 3: + { + return slotsResult; + } + case 1: + case 4: + { + throw new Error((comparison === 1 ? `A child segment cannot override a parent segment with a less-constrained \`ensureStatic\`.` : `A child segment cannot override a parent segment with an incompatible \`ensureStatic\`.`) + `\n Parent has: ` + `\n ${formatEnsureStaticExport(parentResult.config)}` + `\n (from: ${parentResult.filePath})` + `\n Child has: ` + `\n ${formatEnsureStaticExport(slotsResult.config)}` + `\n (from: ${slotsResult.filePath})` + `\n` + `\n Possible fixes:` + `\n - Remove one of the \`ensureStatic\` exports` + `\n - Change one of the \`ensureStatic\` exports to match the other`); + } + } + } +} +function formatParallelSlot(slot) { + return slot === 'children' ? slot : `@${slot}`; +} +function formatEnsureStaticExport(config) { + return `export const ensureStatic = ${JSON.stringify(config)}`; +} +var Comparison = /*#__PURE__*/ function(Comparison) { + Comparison[Comparison["LessConstrained"] = 1] = "LessConstrained"; + Comparison[Comparison["Compatible"] = 2] = "Compatible"; + Comparison[Comparison["MoreConstrained"] = 3] = "MoreConstrained"; + Comparison[Comparison["Incompatible"] = 4] = "Incompatible"; + return Comparison; +}(Comparison || {}); +const ENSURE_STATIC_ORDER = [ + 'shell', + 'prefetch', + 'navigation' +]; +function compareEnsureStatic(left, right) { + // 'auto' is compatible with everything. + if (left === 'auto' || right === 'auto') { + return 2; + } + // `false` is compatible with false. + if (left === false && right === false) { + return 2; + } + // If only one of the values is `false` (we know it's not both), it's incompatible. + if (left === false || right === false) { + return 4; + } + const leftSort = ENSURE_STATIC_ORDER.indexOf(left); + const rightSort = ENSURE_STATIC_ORDER.indexOf(right); + return leftSort < rightSort ? 1 : leftSort === rightSort ? 2 : 3; +} +function getEnsureStaticConfigForModule(mod) { + return (mod ? mod.ensureStatic : undefined) ?? 'auto'; +} +}), +"[project]/node_modules/next/dist/server/app-render/staged-rendering.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + RENDER_STAGE_ADVANCE_ORDER: null, + RenderStage: null, + StagedRenderingController: null, + SyncIOMode: null, + getNextStage: null, + isAdvanceableRenderStage: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + RENDER_STAGE_ADVANCE_ORDER: function() { + return RENDER_STAGE_ADVANCE_ORDER; + }, + RenderStage: function() { + return RenderStage; + }, + StagedRenderingController: function() { + return StagedRenderingController; + }, + SyncIOMode: function() { + return SyncIOMode; + }, + getNextStage: function() { + return getNextStage; + }, + isAdvanceableRenderStage: function() { + return isAdvanceableRenderStage; + } +}); +const _invarianterror = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/invariant-error.js [app-route] (ecmascript)"); +const _promisewithresolvers = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)"); +var RenderStage = /*#__PURE__*/ function(RenderStage) { + RenderStage[RenderStage["Before"] = 1] = "Before"; + // + RenderStage[RenderStage["ShellStatic"] = 10] = "ShellStatic"; + /** Discrimination-only stage: `prefetch()` in validation renders (static) */ RenderStage[RenderStage["PrefetchStatic_prefetchApi"] = 11] = "PrefetchStatic_prefetchApi"; + RenderStage[RenderStage["PrefetchStatic"] = 12] = "PrefetchStatic"; + RenderStage[RenderStage["NavigationStatic"] = 13] = "NavigationStatic"; + RenderStage[RenderStage["Static"] = 14] = "Static"; + // + RenderStage[RenderStage["ShellRuntime"] = 20] = "ShellRuntime"; + /** Discrimination-only stage: `prefetch()` in validation renders (runtime) */ RenderStage[RenderStage["PrefetchRuntime_prefetchApi"] = 21] = "PrefetchRuntime_prefetchApi"; + RenderStage[RenderStage["PrefetchRuntime"] = 22] = "PrefetchRuntime"; + RenderStage[RenderStage["NavigationRuntime"] = 23] = "NavigationRuntime"; + // + RenderStage[RenderStage["Dynamic"] = 30] = "Dynamic"; + RenderStage[RenderStage["Abandoned"] = 40] = "Abandoned"; + return RenderStage; +}({}); +const RENDER_STAGE_ADVANCE_ORDER = [ + 10, + 11, + 12, + 13, + 14, + 20, + 21, + 22, + 23, + 30 +]; +function getNextStage(stage) { + return RENDER_STAGE_ADVANCE_ORDER[RENDER_STAGE_ADVANCE_ORDER.indexOf(stage) + 1]; +} +function isAdvanceableRenderStage(stage) { + return 1 < stage && stage <= 30; +} +var SyncIOMode = /*#__PURE__*/ function(SyncIOMode) { + /** Sync IO does not error in any stage. */ SyncIOMode[SyncIOMode["Untracked"] = 1] = "Untracked"; + /** Before `partialPrefetching`: Sync IO errors in static stages, and is allowed otherwise. */ SyncIOMode[SyncIOMode["AllowedInRuntimeOrDynamic"] = 2] = "AllowedInRuntimeOrDynamic"; + /** After `partialPrefetching`: Sync IO errors in all stages other than dynamic. */ SyncIOMode[SyncIOMode["AllowedInDynamic"] = 3] = "AllowedInDynamic"; + return SyncIOMode; +}({}); +class StagedRenderingController { + constructor({ abortSignal, abandonController, syncIO, finalStage }){ + this.currentStage = 1; + this.syncInterruptReason = null; + this.triggers = createAdvanceableStageTriggers(); + this.abortSignal = abortSignal; + this.abandonController = abandonController; + this.syncIOMode = syncIO; + this.finalStage = finalStage; + if (abortSignal) { + abortSignal.addEventListener('abort', ()=>{ + // Reject all stage promises that haven't already been resolved. + // `cancelStageTrigger` is a noop if the trigger already resolved. + const { reason } = abortSignal; + for (const trigger of Object.values(this.triggers)){ + cancelStageTrigger(trigger, reason); + } + }, { + once: true + }); + } + if (abandonController) { + abandonController.signal.addEventListener('abort', ()=>{ + this.abandonRender(); + }, { + once: true + }); + } + } + /** + * Schedules a callback that will execute synchronously when the controller is advanced + * to `stage` or past it, before any promises for that stage are resolved. + * If the controller is already past `stage`, the callback is executed immediately. + * */ onStage(stage, callback) { + addSyncTriggerListener(this.triggers[stage], callback); + } + shouldTrackSyncInterrupt() { + const { syncIOMode, currentStage } = this; + switch(syncIOMode){ + case 1: + { + return false; + } + case 2: + { + // Legacy: track Sync IO only in static stages. + // Do not track it before the render, or in runtime/dynamic stages. + return currentStage > 1 && currentStage <= 14; + } + case 3: + { + // Track sync IO in all cacheable stages. + // This means all stages except: + // - before the render + // - in the dynamic stage + return currentStage > 1 && currentStage < 30; + } + } + } + /** Note: only call this if `shouldTrackSyncInterrupt()` returned true */ syncInterruptCurrentStageWithReason(reason) { + const { currentStage } = this; + if (currentStage === 1 || currentStage === 30 || currentStage === 40) { + // Not interruptible. Defensive noop. + return; + } + // If Sync IO occurs during an abandonable render, we trigger the abandon. + // The abandon listener will call abandonRender which advances through + // stages to let caches fill before marking as Abandoned. + if (this.abandonController) { + this.abandonController.abort(); + return; + } + if (this.abortSignal) { + // If this is an abortable render, we capture the interruption reason and stop advancing. + // We don't release any more promises. + // The caller is expected to abort the signal. + this.syncInterruptReason = reason; + this.currentStage = 40; + return; + } + // If we're in a non-abandonable & non-abortable render, + // we need to advance to the Dynamic stage and capture the interruption reason. + // (in dev, this will be the restarted render) + this.syncInterruptReason = reason; + this.advanceStage(30); + } + getSyncInterruptReason() { + return this.syncInterruptReason; + } + getStageEndTime(stage) { + return this.triggers[getNextStage(stage)].triggeredAt ?? Infinity; + } + abandonRender() { + // In staged rendering, only the initial render is abandonable. + // We can abandon the initial render if + // 1. We notice a cache miss, and need to wait for caches to fill + // 2. A sync IO error occurs, and the render should be interrupted + // (this might be a lazy intitialization of a module, + // so we still want to restart in this case and see if it still occurs) + // In either case, we'll be doing another render after this one, + // so we only want to unblock the next stage, not Dynamic, because + // unblocking the dynamic stage would likely lead to wasted (uncached) IO. + const { currentStage } = this; + if (currentStage === 1) { + throw new _invarianterror.InvariantError("A render that hasn't started yet cannot be abandoned"); + } + if (currentStage === 30 || currentStage === 40) { + // We shouldn't ever trigger an abandon in these. Defensive noop. + return; + } + // Resolve all stages after the current one, up to runtime (excluding dynamic) + const nextStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(currentStage) + 1; + const dynamicStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(30); + for(let i = nextStageIx; i < dynamicStageIx; i++){ + this.resolveStage(RENDER_STAGE_ADVANCE_ORDER[i]); + } + this.currentStage = 40; + } + advanceStage(targetStage) { + if (this.finalStage !== null && targetStage > this.finalStage) { + throw new _invarianterror.InvariantError(`Attempted to advance to stage ${RenderStage[targetStage]} but the render is limited to ${RenderStage[this.finalStage]}`); + } + const { currentStage } = this; + if (currentStage === 30 || currentStage === 40) { + // Terminal stages, nowhere left to advance. + return; + } + // If we're already at the target stage or beyond, do nothing. + if (targetStage <= currentStage) { + return; + } + this.currentStage = targetStage; + // Resolve all stages between the current stage and the target. + const nextStageIx = currentStage === 1 ? 0 : RENDER_STAGE_ADVANCE_ORDER.indexOf(currentStage) + 1; + const targetStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(targetStage); + for(let i = nextStageIx; i <= targetStageIx; i++){ + this.resolveStage(RENDER_STAGE_ADVANCE_ORDER[i]); + } + } + resolveStage(stage) { + fireStageTrigger(this.triggers[stage]); + } + getStagePromise(stage) { + return this.triggers[stage].promise; + } + waitForStage(stage) { + return this.getStagePromise(stage); + } + delayUntilStage(stage, displayName, resolvedValue) { + const stagePromise = this.getStagePromise(stage); + const promise = ("TURBOPACK compile-time truthy", 1) ? makeDevtoolsIOPromiseFromIOTrigger(stagePromise, displayName, resolvedValue) : "TURBOPACK unreachable"; + // Analogously to `makeDynamicHangingPromise`, we might reject this promise if the signal is invoked. + // (e.g. in the case where we don't want want the render to proceed to the dynamic stage and abort it). + // We shouldn't consider this an unhandled rejection, so we attach a noop catch handler here to suppress this warning. + if (this.abortSignal) { + promise.catch(ignoreReject); + } + return promise; + } +} +function createAdvanceableStageTriggers() { + const triggers = {}; + for (const stage of RENDER_STAGE_ADVANCE_ORDER){ + triggers[stage] = createStageTrigger(); + } + return triggers; +} +function ignoreReject() {} +// TODO(restart-on-cache-miss): the layering of `delayUntilStage`, +// `makeDevtoolsIOPromiseFromIOTrigger` and and `makeDevtoolsIOAwarePromise` +// is confusing, we should clean it up. +function makeDevtoolsIOPromiseFromIOTrigger(ioTrigger, displayName, resolvedValue) { + // If we create a `new Promise` and give it a displayName + // (with no userspace code above us in the stack) + // React Devtools will use it as the IO cause when determining "suspended by". + // In particular, it should shadow any inner IO that resolved/rejected the promise + // (in case of staged rendering, this will be the `setTimeout` that triggers the relevant stage) + const promise = new Promise((resolve, reject)=>{ + ioTrigger.then(resolve.bind(null, resolvedValue), reject); + }); + if (displayName !== undefined) { + // @ts-expect-error + promise.displayName = displayName; + } + return promise; +} +function addSyncTriggerListener(trigger, listener) { + if (trigger.state === 'pending') { + trigger._listeners.push(listener); + } else { + listener(); + } +} +function createStageTrigger() { + const { promise, resolve, reject } = (0, _promisewithresolvers.createPromiseWithResolvers)(); + return { + state: 'pending', + triggeredAt: null, + promise, + _listeners: [], + _resolvePromise: resolve, + _rejectPromise: reject + }; +} +function fireStageTrigger(trigger) { + if (trigger.state !== 'pending') { + return; + } + trigger.state = 'triggered'; + trigger.triggeredAt = performance.now() + performance.timeOrigin; + try { + const { _listeners: listeners } = trigger; + for(let i = 0; i < listeners.length; i++){ + listeners[i](); + } + listeners.length = 0; + } finally{ + trigger._resolvePromise(); + } +} +function cancelStageTrigger(trigger, reason) { + if (trigger.state !== 'pending') { + return; + } + trigger.state = 'cancelled'; + // we didn't trigger, so don't save `triggeredAt`. + // We're not gonna fire the listeners, we may as well free them. + trigger._listeners.length = 0; + // Suppress unhandled rejection warnings for promises that no one is awaiting. + trigger.promise.catch(ignoreReject); + trigger._rejectPromise(reason); +} +}), +"[project]/node_modules/next/dist/server/create-deduped-by-callsite-server-error-logger.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createDedupedByCallsiteServerErrorLoggerDev", { + enumerable: true, + get: function() { + return createDedupedByCallsiteServerErrorLoggerDev; + } +}); +const _react = /*#__PURE__*/ _interop_require_wildcard(__turbopack_context__.r("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js [app-route] (ecmascript)")); +function _getRequireWildcardCache(nodeInterop) { + if (typeof WeakMap !== "function") return null; + var cacheBabelInterop = new WeakMap(); + var cacheNodeInterop = new WeakMap(); + return (_getRequireWildcardCache = function(nodeInterop) { + return nodeInterop ? cacheNodeInterop : cacheBabelInterop; + })(nodeInterop); +} +function _interop_require_wildcard(obj, nodeInterop) { + if (!nodeInterop && obj && obj.__esModule) { + return obj; + } + if (obj === null || typeof obj !== "object" && typeof obj !== "function") { + return { + default: obj + }; + } + var cache = _getRequireWildcardCache(nodeInterop); + if (cache && cache.has(obj)) { + return cache.get(obj); + } + var newObj = { + __proto__: null + }; + var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for(var key in obj){ + if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + if (desc && (desc.get || desc.set)) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + newObj.default = obj; + if (cache) { + cache.set(obj, newObj); + } + return newObj; +} +const errorRef = { + current: null +}; +// React.cache is currently only available in canary/experimental React channels. +const cache = typeof _react.cache === 'function' ? _react.cache : (fn)=>fn; +// When Cache Components is enabled, we record these as errors so that they +// are captured by the dev overlay as it's more critical to fix these +// when enabled. +const logErrorOrWarn = ("TURBOPACK compile-time truthy", 1) ? console.error : "TURBOPACK unreachable"; +// We don't want to dedupe across requests. +// The developer might've just attempted to fix the warning so we should warn again if it still happens. +const flushCurrentErrorIfNew = cache((key)=>{ + try { + logErrorOrWarn(errorRef.current); + } finally{ + errorRef.current = null; + } +}); +function createDedupedByCallsiteServerErrorLoggerDev(getMessage) { + return function logDedupedError(...args) { + const message = getMessage(...args); + if ("TURBOPACK compile-time truthy", 1) { + var _stack; + const callStackFrames = (_stack = new Error().stack) == null ? void 0 : _stack.split('\n'); + if (callStackFrames === undefined || callStackFrames.length < 4) { + logErrorOrWarn(message); + } else { + // Error: + // logDedupedError + // asyncApiBeingAccessedSynchronously + // + // TODO: This breaks if sourcemaps with ignore lists are enabled. + const key = callStackFrames[4]; + errorRef.current = message; + flushCurrentErrorIfNew(key); + } + } else //TURBOPACK unreachable + ; + }; +} +}), +"[project]/node_modules/next/dist/server/dynamic-rendering-utils.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ClientHookDynamicError: null, + RENDER_STAGES_BY_DATA_KIND: null, + applyOwnerStack: null, + createPrerenderDataTracking: null, + finishPrerenderDataTracking: null, + isClientHookDynamicError: null, + isHangingPromiseRejectionError: null, + makeClientHookHangingPromise: null, + makeDevtoolsIOAwarePromise: null, + makeDynamicHangingPromise: null, + makeFallbackParamsHangingPromise: null, + makePrefetchHangingPromise: null, + makePromiseFromTrigger: null, + makeSessionDataHangingPromise: null, + makeURLDataHangingPromise: null, + makeUnknownRuntimeDataHangingPromise: null, + makeUntrackedHangingPromise: null, + trackFallbackParamsAccessed: null, + trackIncompatibleShellContent: null, + trackPromiseUsed: null, + trackURLDataAccessed: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ClientHookDynamicError: function() { + return ClientHookDynamicError; + }, + RENDER_STAGES_BY_DATA_KIND: function() { + return RENDER_STAGES_BY_DATA_KIND; + }, + applyOwnerStack: function() { + return applyOwnerStack; + }, + createPrerenderDataTracking: function() { + return createPrerenderDataTracking; + }, + finishPrerenderDataTracking: function() { + return finishPrerenderDataTracking; + }, + isClientHookDynamicError: function() { + return isClientHookDynamicError; + }, + isHangingPromiseRejectionError: function() { + return isHangingPromiseRejectionError; + }, + makeClientHookHangingPromise: function() { + return makeClientHookHangingPromise; + }, + makeDevtoolsIOAwarePromise: function() { + return makeDevtoolsIOAwarePromise; + }, + makeDynamicHangingPromise: function() { + return makeDynamicHangingPromise; + }, + makeFallbackParamsHangingPromise: function() { + return makeFallbackParamsHangingPromise; + }, + makePrefetchHangingPromise: function() { + return makePrefetchHangingPromise; + }, + makePromiseFromTrigger: function() { + return makePromiseFromTrigger; + }, + makeSessionDataHangingPromise: function() { + return makeSessionDataHangingPromise; + }, + makeURLDataHangingPromise: function() { + return makeURLDataHangingPromise; + }, + makeUnknownRuntimeDataHangingPromise: function() { + return makeUnknownRuntimeDataHangingPromise; + }, + makeUntrackedHangingPromise: function() { + return makeUntrackedHangingPromise; + }, + trackFallbackParamsAccessed: function() { + return trackFallbackParamsAccessed; + }, + trackIncompatibleShellContent: function() { + return trackIncompatibleShellContent; + }, + trackPromiseUsed: function() { + return trackPromiseUsed; + }, + trackURLDataAccessed: function() { + return trackURLDataAccessed; + } +}); +const _invarianterror = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/invariant-error.js [app-route] (ecmascript)"); +const _promisewithresolvers = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)"); +const _ensurestatic = __turbopack_context__.r("[project]/node_modules/next/dist/server/app-render/segment-config/ensure-static.js [app-route] (ecmascript)"); +const _stagedrendering = __turbopack_context__.r("[project]/node_modules/next/dist/server/app-render/staged-rendering.js [app-route] (ecmascript)"); +const _workasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)"); +const _workunitasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)"); +const _runtimereactsexternal = __turbopack_context__.r("[externals]/next/dist/server/runtime-reacts.external.js [external] (next/dist/server/runtime-reacts.external.js, cjs)"); +function isHangingPromiseRejectionError(err) { + if (typeof err !== 'object' || err === null || !('digest' in err)) { + return false; + } + return err.digest === HANGING_PROMISE_REJECTION; +} +const HANGING_PROMISE_REJECTION = 'HANGING_PROMISE_REJECTION'; +class HangingPromiseRejectionError extends Error { + constructor(route, expression){ + super(`During prerendering, ${expression} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${expression} to a different context by using \`setTimeout\`, \`after\`, or similar functions you may observe this error and you should handle it in that context. This occurred at route "${route}".`), this.route = route, this.expression = expression, this.digest = HANGING_PROMISE_REJECTION; + } +} +const CLIENT_HOOK_DYNAMIC = 'CLIENT_HOOK_DYNAMIC'; +class ClientHookDynamicError extends Error { + constructor(route, expression){ + super(`Route "${route}": Next.js encountered URL data \`${expression}\` in a Client Component outside of \`\`.\n\n` + `This blocks prerendering because the value is only available at runtime.\n\n` + `Ways to fix this:\n` + ` - [stream] Wrap the component in \`\` so the hook value streams in after prerendering\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-client-hook`), this.digest = CLIENT_HOOK_DYNAMIC; + } +} +function isClientHookDynamicError(err) { + if (typeof err !== 'object' || err === null || !('digest' in err)) { + return false; + } + return err.digest === CLIENT_HOOK_DYNAMIC; +} +const abortListenersBySignal = new WeakMap(); +function makeDynamicHangingPromise(signal, route, expression) { + return makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); +} +function makeUntrackedHangingPromise(signal, route, expression) { + return makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); +} +function makeSessionDataHangingPromise(signal, route, expression, workUnitStore) { + const promise = makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); + return trackPromiseUsed(promise, trackSessionDataAccessed.bind(null, workUnitStore, expression)); +} +function makeURLDataHangingPromise(signal, route, expression, workUnitStore) { + const promise = makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); + if (workUnitStore === null) { + return promise; + } + return trackPromiseUsed(promise, trackURLDataAccessed.bind(null, workUnitStore, expression)); +} +function makeUnknownRuntimeDataHangingPromise(signal, route, expression, workUnitStore) { + // We don't know if this is session or URL data, i.e. if it should affect the shell + // or only the prefetch. Track it conservatively as affecting both. + return makeSessionDataHangingPromise(signal, route, expression, workUnitStore); +} +function makePrefetchHangingPromise(signal, route, expression) { + return makeUntrackedHangingPromise(signal, route, expression); +} +function makeFallbackParamsHangingPromise(signal, route, expression, workUnitStore) { + const promise = makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); + if (workUnitStore === null) { + return promise; + } + return trackPromiseUsed(promise, trackFallbackParamsAccessed.bind(null, workUnitStore, expression)); +} +function createPrerenderDataTracking() { + return { + runtimeDataAccessed: (0, _promisewithresolvers.createPromiseWithResolvers)(), + shouldAttemptStaticShell: true, + shouldAttemptStaticPrefetch: true + }; +} +function finishPrerenderDataTracking(prerenderDataTracking) { + // If a runtime data access already resolved this promise, this is a no-op. + prerenderDataTracking.runtimeDataAccessed.resolve(false); +} +/** + * Records on a static prerender store that the render accessed a data source + * which would have resolved in a runtime shell (or runtime prefetch). + * No-op for all other store types. + * + * Prefer `makeRuntimeHangingPromise`. Use this function only when implementing + * similar tracking and that one is not enough. + */ function trackSessionDataAccessed(workUnitStore, expression) { + trackRuntimeDataAccessed(workUnitStore, 1, expression); +} +function trackURLDataAccessed(workUnitStore, expression) { + trackRuntimeDataAccessed(workUnitStore, 2, expression); +} +function trackFallbackParamsAccessed(workUnitStore, expression) { + trackRuntimeDataAccessed(workUnitStore, 3, expression); +} +function trackRuntimeDataAccessed(workUnitStore, dataKind, expression) { + switch(workUnitStore.type){ + case 'prerender': + { + const { prerenderDataTracking, stagedRendering } = workUnitStore; + if (!prerenderDataTracking || !stagedRendering) { + return; + } + const { currentStage } = stagedRendering; + if (currentStage === _stagedrendering.RenderStage.Before) { + console.error(new _invarianterror.InvariantError('Unexpected trackRuntimeDataAccessed in the Before stage.')); + return; + } + if (currentStage >= _stagedrendering.RenderStage.NavigationStatic) { + // Ignore any accesses that happen after `navigation()` resolves. + // The purpose of this tracking is to judge whether a runtime prefetch + // would give us a more complete result than a static one. + // But `navigation()` wouldn't have resolved in a runtime prefetch, + // so e.g. `await navigation(); await cookies()` wouldn't have more content + // in those, and we shouldn't count it. + return; + } + const ensureStaticLevel = workUnitStore.ensureStaticLevel ?? _ensurestatic.EnsureStaticLevel.None; + // NOTE: In general, we keep hints in sync with `needsRuntimeRequest`, but they + // don't have to always match. The client re-uses hints for the entire route, + // while `needsRuntimeRequest` can vary across individual prerendered param values + // (e.g. if cookies are accessed depending on a param value). + // Hints can also become outdated if a route only starts using runtime data + // after a revalidation, so we have to expect this and be resilient to it. + // Also see the upgradeable fallback params case below, which deliberately + // puts them out of sync. + switch(dataKind){ + case 1: + { + // Potentially deopt both the shell and the prefetch, + // because if the shell accessed runtime data, so does the prefetch. + // However, if we're already past the shell stage, the shell is not affected. + // (which makes e.g. `await prefetch(); await cookies()` only affect the prefetch) + let firstAffectedStage = null; + if (currentStage <= _stagedrendering.RenderStage.ShellStatic && // Only track if we're not forcing the shell to be static. + ensureStaticLevel < _ensurestatic.EnsureStaticLevel.Shell) { + prerenderDataTracking.shouldAttemptStaticShell = false; + firstAffectedStage ??= _stagedrendering.RenderStage.ShellStatic; + logRuntimeDeopt == null ? void 0 : logRuntimeDeopt(expression, 'shell'); + } + if (currentStage <= _stagedrendering.RenderStage.PrefetchStatic && // Only track if we're not forcing the prefetch to be static. + ensureStaticLevel < _ensurestatic.EnsureStaticLevel.Prefetch) { + prerenderDataTracking.shouldAttemptStaticPrefetch = false; + // NOTE: if the shell is affected, don't override it. + firstAffectedStage ??= _stagedrendering.RenderStage.PrefetchStatic; + logRuntimeDeopt == null ? void 0 : logRuntimeDeopt(expression, 'prefetch'); + } + if (firstAffectedStage !== null) { + markRuntimeDataAccessWhenStageReached(prerenderDataTracking, stagedRendering, firstAffectedStage); + } + break; + } + case 3: + { + if (workUnitStore.isFallbackUpgradeable) { + // An fallback-param access is transient when the route is + // fallback-upgradeable (i.e. ISR later produces the concrete prerender a + // static prefetch would hit) so it does not indicate the need for a runtime + // request and thus does not affect the static hints. + // + // If runtime prefetches are not disallowed by `ensureStatic`, then we still + // set `runtimeDataAccessed` (while keeping the hints static). This means that + // if the concrete prerender isn't ready yet and we served the fallback, then + // the client knows it can use a *runtime* prefetch for speculative links -- + // a runtime prefetch can provide the same content (or more) as the concrete + // prerender would. + if (ensureStaticLevel < _ensurestatic.EnsureStaticLevel.Prefetch) { + markRuntimeDataAccessWhenStageReached(prerenderDataTracking, stagedRendering, _stagedrendering.RenderStage.PrefetchStatic); + logRuntimeUpgradeableFallback == null ? void 0 : logRuntimeUpgradeableFallback(); + } + break; + } + // not an upgradeable fallback param access, so we treat it as URL data. + // intentional fallthrough + } + case 2: + { + // Only deopt the prefetch, not the shell, which cannot access URL data anyway. + if (currentStage <= _stagedrendering.RenderStage.PrefetchStatic && ensureStaticLevel < _ensurestatic.EnsureStaticLevel.Prefetch) { + prerenderDataTracking.shouldAttemptStaticPrefetch = false; + logRuntimeDeopt == null ? void 0 : logRuntimeDeopt(expression, 'prefetch'); + markRuntimeDataAccessWhenStageReached(prerenderDataTracking, stagedRendering, _stagedrendering.RenderStage.PrefetchStatic); + } + break; + } + } + break; + } + case 'prerender-client': + case 'prerender-legacy': + case 'prerender-runtime': + case 'validation-client': + case 'request': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } +} +/** + * Tracks a runtime data access on the `runtimeDataAccessed` promise, + * but with a delay until `targetStage`. + * + * When we encounter a URL data access like `await params`, we need to mark the + * *prefetch* as needing runtime data, but the *shell* should remain unaffected + * (because it cannot access params anyway). + * + * However, the shell and the prefetch share one `runtimeDataAccessed` promise, + * and it needs to be accurately rewindable by the client + * In other words, we need to make sure that it reads as `false` when rewound + * to a shell, but as `true` in the final response (the prefetch). + * + * This means that if the `await params` is encountered during the shell stage, we + * cannot resolve `runtimeDataAccessed` immediately. + * Instead, we delay the resolution until the PrefetchStatic stage, so the promise + * will remain unresolved when rewound to the shell stage (which reads as `false`). + */ function markRuntimeDataAccessWhenStageReached(prerenderDataTracking, stageController, targetStage) { + const { runtimeDataAccessed } = prerenderDataTracking; + // NOTE: If we're already in or past the target stage, we can avoid allocating a closure, + // because `onStage` would've executed the callback immediately anyway. + if (stageController.currentStage >= targetStage) { + runtimeDataAccessed.resolve(true); + } else { + stageController.onStage(targetStage, runtimeDataAccessed.resolve.bind(null, true)); + } +} +const logRuntimeDeopt = process.env.NEXT_PRIVATE_DEBUG_RUNTIME_DATA ? (expression, kind)=>{ + const { route } = _workasyncstorageexternal.workAsyncStorage.getStore(); + console.log(`Route '${route}': deopting to a runtime ${kind} because it used ${expression}`); +} : undefined; +const logRuntimeUpgradeableFallback = process.env.NEXT_PRIVATE_DEBUG_RUNTIME_DATA ? ()=>{ + const { route } = _workasyncstorageexternal.workAsyncStorage.getStore(); + console.log(`Route '${route}': marking upgradeable fallback as runtime prefetchable`); +} : undefined; +function trackIncompatibleShellContent(workUnitStore, reason) { + const { stagedRendering } = workUnitStore; + if (!stagedRendering) { + return; + } + // TODO(app-shells): optimize this to only consider stages that are relevant for validation. + // We should only track incompatible content when it can affect them. + // For now, we simply exclude everything that happens in the dynamic stage. + // (Note that we also need to account for cache misses that move things to a + // different stage -- those should also preemptively set `hasIncompatibleShellContent` + // because there's a chance that a render with warm caches would set it) + const { currentStage } = stagedRendering; + if (currentStage === _stagedrendering.RenderStage.Dynamic || currentStage === _stagedrendering.RenderStage.Abandoned) { + return; + } + if (process.env.NEXT_PRIVATE_DEBUG_VALIDATION) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + console.log(`Route ${workStore.route}: Incompatible shell content: ${reason}`); + } + workUnitStore.hasIncompatibleShellContent = true; +} +function makeClientHookHangingPromise(signal, error) { + return makeHangingPromiseWithError(signal, error); +} +function makeHangingPromiseWithError(signal, error) { + if (signal.aborted) { + return Promise.reject(error); + } else { + const hangingPromise = new Promise((_, reject)=>{ + const boundRejection = reject.bind(null, error); + let currentListeners = abortListenersBySignal.get(signal); + if (currentListeners) { + currentListeners.push(boundRejection); + } else { + const listeners = [ + boundRejection + ]; + abortListenersBySignal.set(signal, listeners); + signal.addEventListener('abort', ()=>{ + for(let i = 0; i < listeners.length; i++){ + listeners[i](); + } + }, { + once: true + }); + } + }); + // We are fine if no one actually awaits this promise. We shouldn't consider this an unhandled rejection so + // we attach a noop catch handler here to suppress this warning. If you actually await somewhere or construct + // your own promise out of it you'll need to ensure you handle the error when it rejects. + hangingPromise.catch(ignoreReject); + return hangingPromise; + } +} +function ignoreReject() {} +function makePromiseFromTrigger(trigger, value) { + const promise = trigger.then(()=>value); + promise.catch(ignoreReject); + return promise; +} +function makeDevtoolsIOAwarePromise(underlying, requestStore, stage) { + if (requestStore.stagedRendering) { + // We resolve each stage in a timeout, so React DevTools will pick this up as IO. + return requestStore.stagedRendering.delayUntilStage(stage, undefined, underlying); + } + // in React DevTools if we resolve in a setTimeout we will observe + // the promise resolution as something that can suspend a boundary or root. + return new Promise((resolve)=>{ + // Must use setTimeout to be considered IO React DevTools. setImmediate will not work. + setTimeout(()=>{ + resolve(underlying); + }, 0); + }); +} +function trackPromiseUsed(promise, onUse) { + // We can instrument `.then()/.catch()/.finally()` in one go by using a Promise subclass + // that implements a custom `.then()`, because `catch` and `finally` delegate to it. + // + // Alternative implementation ideas that were tried and rejected: + // + // 1. Patching the methods directly via `promise.then = (..args) => { ... }`: + // doesn't work, because Node does not call the monkeypatched methods for native `await`: + // > Native Promise [...]: The promise is directly used and awaited natively, without calling `then()`. + // > https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await#description + // + // 2. Wrapping in a proxy that returns a custom `then/catch/finally`: + // breaks async stacks in React's IO tracking (stack becomes `Promise.then`) + return TrackedPromise.from(promise, onUse); +} +class TrackedPromise extends Promise { + #onUse; + // We don't need derived promises to also be a TrackedPromise. + // We only care about the first level of `.then()`. + static get [Symbol.species]() { + return Promise; + } + static from(promise, onUse) { + // Whenever the promise we're tracking resolves/rejects, we should follow. + const tracked = new TrackedPromise(promise.then.bind(promise)); + tracked.#onUse = onUse; + // Hanging promises catch rejections when created. Tracked promises are generally derived + // from promises that may hang & reject, so we need to do the same. + // However, we have to bypass the tracking we do in `TrackedPromise.then`. + // (we're using `then` directly, because `catch` ends up delegating `TrackedPromise.then`) + Promise.prototype.then.call(tracked, undefined, ignoreReject); + return tracked; + } + then(onFulfilled, onRejected) { + const onUse = this.#onUse; + if (onUse) { + try { + onUse(); + } catch (err) { + // We don't want to break the method even if our tracking errored. + console.error(err); + } + } + return Promise.prototype.then.call(this, onFulfilled, onRejected); + } + constructor(...args){ + super(...args), this.#onUse = null; + } +} +const RENDER_STAGES_BY_DATA_KIND = { + sessionData: _stagedrendering.RenderStage.ShellRuntime, + /** + * Statically-prerenderable URL data, like static `params`. + * It may need to be pushed to a runtime stage in a runtime prerender, + * but it's semantically distinct from `runtimeUrlData` like `searchParams`, + * which is always excluded from static prerenders. + * */ staticUrlData: { + /** + * From that app's point of view, `prefetch()` is semantically the same as + * `staticUrlData`, because it does not resolve in a shell but resolves in + * a prefetch (even a static one). + * We handle it separately to provide a specialized error in validation renders. + */ prefetchApi: { + static: _stagedrendering.RenderStage.PrefetchStatic_prefetchApi, + runtime: _stagedrendering.RenderStage.PrefetchRuntime_prefetchApi + }, + static: _stagedrendering.RenderStage.PrefetchStatic, + runtime: _stagedrendering.RenderStage.PrefetchRuntime + }, + /** + * URL data that is never statically-prerenderable, like static `searchParams`. + * */ runtimeUrlData: _stagedrendering.RenderStage.PrefetchRuntime +}; +function applyOwnerStack(error) { + if ("TURBOPACK compile-time truthy", 1) { + var _getClientReact_captureOwnerStack, _getClientReact, _getServerReact_captureOwnerStack, _getServerReact; + let ownerStack; + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + // captureOwnerStack() returns the owner stack for the current React + // rendering context. Inside a cache scope this only includes the inner + // component tree. The outer owner stack (captured before entering the + // cache boundary in use-cache-wrapper.ts) is stored on the cache store. + // We concatenate both to get the full component tree. + const innerOwnerStack = ((_getClientReact = (0, _runtimereactsexternal.getClientReact)()) == null ? void 0 : (_getClientReact_captureOwnerStack = _getClientReact.captureOwnerStack) == null ? void 0 : _getClientReact_captureOwnerStack.call(_getClientReact)) ?? ((_getServerReact = (0, _runtimereactsexternal.getServerReact)()) == null ? void 0 : (_getServerReact_captureOwnerStack = _getServerReact.captureOwnerStack) == null ? void 0 : _getServerReact_captureOwnerStack.call(_getServerReact)); + switch(workUnitStore == null ? void 0 : workUnitStore.type){ + case 'cache': + case 'private-cache': + ownerStack = (innerOwnerStack || '') + (workUnitStore.outerOwnerStack || '') || undefined; + break; + case 'unstable-cache': + case 'request': + case 'prerender': + case 'prerender-legacy': + case 'prerender-runtime': + case 'prerender-client': + case 'validation-client': + case 'build-time-generator': + case undefined: + ownerStack = innerOwnerStack; + break; + default: + workUnitStore; + } + if (ownerStack) { + let stack = ownerStack; + if (error.stack) { + const frames = []; + for (const frame of error.stack.split('\n').slice(1)){ + if (frame.includes('react_stack_bottom_frame')) { + break; + } + frames.push(frame); + } + stack = '\n' + frames.join('\n') + stack; + } + error.stack = error.name + ': ' + error.message + stack; + } + } + return error; +} +}), +"[project]/node_modules/next/dist/server/lib/app-dir-module.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + getComponentTypeModule: null, + getLayoutOrPageModule: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + getComponentTypeModule: function() { + return getComponentTypeModule; + }, + getLayoutOrPageModule: function() { + return getLayoutOrPageModule; + } +}); +const _segment = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/segment.js [app-route] (ecmascript)"); +async function getLayoutOrPageModule(loaderTree) { + const { layout, page, defaultPage } = loaderTree[2]; + const isLayout = typeof layout !== 'undefined'; + const isPage = typeof page !== 'undefined'; + const isDefaultPage = typeof defaultPage !== 'undefined' && loaderTree[0] === _segment.DEFAULT_SEGMENT_KEY; + let mod = undefined; + let modType = undefined; + let filePath = undefined; + if (isLayout) { + mod = await layout[0](); + modType = 'layout'; + filePath = layout[1]; + } else if (isPage) { + mod = await page[0](); + modType = 'page'; + filePath = page[1]; + } else if (isDefaultPage) { + mod = await defaultPage[0](); + modType = 'page'; + filePath = defaultPage[1]; + } + return { + mod, + modType, + filePath + }; +} +async function getComponentTypeModule(loaderTree, moduleType) { + const { [moduleType]: module1 } = loaderTree[2]; + if (typeof module1 !== 'undefined') { + return await module1[0](); + } + return undefined; +} +}), +"[project]/node_modules/next/dist/server/request/connection.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "connection", { + enumerable: true, + get: function() { + return connection; + } +}); +const _workasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)"); +const _workunitasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)"); +const _dynamicrendering = __turbopack_context__.r("[project]/node_modules/next/dist/server/app-render/dynamic-rendering.js [app-route] (ecmascript)"); +const _staticgenerationbailout = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/static-generation-bailout.js [app-route] (ecmascript)"); +const _dynamicrenderingutils = __turbopack_context__.r("[project]/node_modules/next/dist/server/dynamic-rendering-utils.js [app-route] (ecmascript)"); +const _utils = __turbopack_context__.r("[project]/node_modules/next/dist/server/request/utils.js [app-route] (ecmascript)"); +const _stagedrendering = __turbopack_context__.r("[project]/node_modules/next/dist/server/app-render/staged-rendering.js [app-route] (ecmascript)"); +const _invarianterror = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/invariant-error.js [app-route] (ecmascript)"); +const _usecachemessages = __turbopack_context__.r("[project]/node_modules/next/dist/server/use-cache/use-cache-messages.js [app-route] (ecmascript)"); +function connection() { + const callingExpression = 'connection'; + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workStore) { + if (workUnitStore && !(0, _utils.isRequestApiAllowedInCurrentPhase)(workUnitStore)) { + throw new Error(`Route ${workStore.route} used \`connection()\` inside \`after()\` while rendering. The \`connection()\` function is used to indicate the subsequent code must only run when there is an actual Request, but \`after()\` executes after the request, so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/app/api-reference/functions/after`); + } + if (workStore.forceStatic) { + // When using forceStatic, we override all other logic and always just + // return a resolving promise without tracking. + return Promise.resolve(undefined); + } + if (workStore.dynamicShouldError) { + throw new _staticgenerationbailout.StaticGenBailoutError(`Route ${workStore.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`connection()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`); + } + if (workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + { + const error = (0, _usecachemessages.createConnectionInPublicUseCacheError)(workStore.route); + Error.captureStackTrace(error, connection); + (0, _dynamicrenderingutils.applyOwnerStack)(error); + workStore.invalidDynamicUsageError ??= error; + throw error; + } + case 'private-cache': + { + // It might not be intuitive to throw for private caches as well, but + // we don't consider runtime prefetches as "actual requests" (in the + // navigation sense), despite allowing them to read cookies. + const error = (0, _usecachemessages.createConnectionInPrivateUseCacheError)(workStore.route); + Error.captureStackTrace(error, connection); + (0, _dynamicrenderingutils.applyOwnerStack)(error); + workStore.invalidDynamicUsageError ??= error; + throw error; + } + case 'unstable-cache': + throw (0, _usecachemessages.createConnectionInUnstableCacheError)(workStore.route); + case 'build-time-generator': + throw new Error(`Route ${workStore.route} used \`connection()\` inside \`${workUnitStore.functionName}\`. This is not supported because \`${workUnitStore.functionName}\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`); + case 'prerender': + case 'prerender-client': + case 'prerender-runtime': + // We return a promise that never resolves to allow the prerender to + // stall at this point. + return (0, _dynamicrenderingutils.makeDynamicHangingPromise)(workUnitStore.renderSignal, workStore.route, '`connection()`'); + case 'validation-client': + { + // TODO(NAR-789): make this consistent with the actual browser behavior when we change it. + // Until then, erroring is fine. + const exportName = '`connection`'; + throw new _invarianterror.InvariantError(`${exportName} must not be used within a Client Component. Next.js should be preventing ${exportName} from being included in Client Components statically, but did not in this case.`); + } + case 'prerender-legacy': + // We throw an error here to interrupt prerendering to mark the route + // as dynamic + return (0, _dynamicrendering.throwToInterruptStaticGeneration)('connection', workStore, workUnitStore); + case 'request': + (0, _dynamicrendering.trackDynamicDataInDynamicRender)(workUnitStore); + if ("TURBOPACK compile-time truthy", 1) { + // Semantically we only need the dev tracking when running in `next dev` + // but since you would never use next dev with production NODE_ENV we use this + // as a proxy so we can statically exclude this code from production builds. + if (workUnitStore.asyncApiPromises) { + return workUnitStore.asyncApiPromises.connection; + } + return (0, _dynamicrenderingutils.makeDevtoolsIOAwarePromise)(undefined, workUnitStore, _stagedrendering.RenderStage.Dynamic); + } else //TURBOPACK unreachable + ; + default: + workUnitStore; + } + } + } + // If we end up here, there was no work store or work unit store present. + // TODO(NAR-789): connection() is not currently statically prevented from being imported in client components, + // so we always error about a missing work unit store. + (0, _workunitasyncstorageexternal.throwForMissingRequestStore)(callingExpression); +} +}), +"[project]/node_modules/next/dist/server/request/cookies.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "cookies", { + enumerable: true, + get: function() { + return cookies; + } +}); +const _requestcookies = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.js [app-route] (ecmascript)"); +const _cookies = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/cookies.js [app-route] (ecmascript)"); +const _workasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)"); +const _workunitasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)"); +const _dynamicrendering = __turbopack_context__.r("[project]/node_modules/next/dist/server/app-render/dynamic-rendering.js [app-route] (ecmascript)"); +const _staticgenerationbailout = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/static-generation-bailout.js [app-route] (ecmascript)"); +const _dynamicrenderingutils = __turbopack_context__.r("[project]/node_modules/next/dist/server/dynamic-rendering-utils.js [app-route] (ecmascript)"); +const _creatededupedbycallsiteservererrorlogger = __turbopack_context__.r("[project]/node_modules/next/dist/server/create-deduped-by-callsite-server-error-logger.js [app-route] (ecmascript)"); +const _utils = __turbopack_context__.r("[project]/node_modules/next/dist/server/request/utils.js [app-route] (ecmascript)"); +const _invarianterror = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/invariant-error.js [app-route] (ecmascript)"); +const _usecachemessages = __turbopack_context__.r("[project]/node_modules/next/dist/server/use-cache/use-cache-messages.js [app-route] (ecmascript)"); +function cookies() { + const callingExpression = 'cookies'; + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workStore) { + if (workUnitStore && !(0, _utils.isRequestApiAllowedInCurrentPhase)(workUnitStore)) { + throw new Error(`Route ${workStore.route} used \`cookies()\` inside \`after()\` while rendering. This is not supported. If you need this data inside an \`after()\` callback, use \`cookies()\` outside of the callback. See more info here: https://nextjs.org/docs/app/api-reference/functions/after`); + } + if (workStore.forceStatic) { + // When using forceStatic we override all other logic and always just return an empty + // cookies object without tracking + const underlyingCookies = createEmptyCookies(); + return makeUntrackedCookies(underlyingCookies); + } + if (workStore.dynamicShouldError) { + throw new _staticgenerationbailout.StaticGenBailoutError(`Route ${workStore.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`cookies()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`); + } + if (workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + const error = (0, _usecachemessages.createCookiesInUseCacheError)(workStore.route); + Error.captureStackTrace(error, cookies); + (0, _dynamicrenderingutils.applyOwnerStack)(error); + workStore.invalidDynamicUsageError ??= error; + throw error; + case 'unstable-cache': + throw (0, _usecachemessages.createCookiesInUnstableCacheError)(workStore.route); + case 'build-time-generator': + throw new Error(`Route ${workStore.route} used \`cookies()\` inside \`${workUnitStore.functionName}\`. This is not supported because \`${workUnitStore.functionName}\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`); + case 'prerender': + return makeHangingCookies(workStore, workUnitStore); + case 'prerender-client': + case 'validation-client': + const exportName = '`cookies`'; + throw new _invarianterror.InvariantError(`${exportName} must not be used within a Client Component. Next.js should be preventing ${exportName} from being included in Client Components statically, but did not in this case.`); + case 'prerender-legacy': + // We track dynamic access here so we don't need to wrap the cookies + // in individual property access tracking. + return (0, _dynamicrendering.throwToInterruptStaticGeneration)(callingExpression, workStore, workUnitStore); + case 'prerender-runtime': + { + const { stagedRendering } = workUnitStore; + if (stagedRendering) { + return stagedRendering.delayUntilStage(_dynamicrenderingutils.RENDER_STAGES_BY_DATA_KIND.sessionData, 'cookies', workUnitStore.cookies); + } else { + return makeUntrackedCookies(workUnitStore.cookies); + } + } + case 'private-cache': + // Private caches are delayed until the runtime stage in use-cache-wrapper, + // so we don't need an additional delay here. + return makeUntrackedCookies(workUnitStore.cookies); + case 'request': + (0, _dynamicrendering.trackDynamicDataInDynamicRender)(workUnitStore); + let underlyingCookies; + if ((0, _requestcookies.areCookiesMutableInCurrentPhase)(workUnitStore)) { + // We can't conditionally return different types here based on the context. + // To avoid confusion, we always return the readonly type here. + underlyingCookies = workUnitStore.userspaceMutableCookies; + } else { + underlyingCookies = workUnitStore.cookies; + } + if ("TURBOPACK compile-time truthy", 1) { + // Semantically we only need the dev tracking when running in `next dev` + // but since you would never use next dev with production NODE_ENV we use this + // as a proxy so we can statically exclude this code from production builds. + return makeUntrackedCookiesWithDevWarnings(workUnitStore, underlyingCookies, workStore == null ? void 0 : workStore.route); + } else //TURBOPACK unreachable + ; + default: + workUnitStore; + } + } + } + // If we end up here, there was no work store or work unit store present. + (0, _workunitasyncstorageexternal.throwForMissingRequestStore)(callingExpression); +} +function createEmptyCookies() { + return _requestcookies.RequestCookiesAdapter.seal(new _cookies.RequestCookies(new Headers({}))); +} +const CachedCookies = new WeakMap(); +function makeHangingCookies(workStore, prerenderStore) { + const cachedPromise = CachedCookies.get(prerenderStore); + if (cachedPromise) { + return cachedPromise; + } + const promise = (0, _dynamicrenderingutils.makeSessionDataHangingPromise)(prerenderStore.renderSignal, workStore.route, '`cookies()`', prerenderStore); + CachedCookies.set(prerenderStore, promise); + return promise; +} +function makeUntrackedCookies(underlyingCookies) { + const cachedCookies = CachedCookies.get(underlyingCookies); + if (cachedCookies) { + return cachedCookies; + } + const promise = Promise.resolve(underlyingCookies); + CachedCookies.set(underlyingCookies, promise); + return promise; +} +function makeUntrackedCookiesWithDevWarnings(requestStore, underlyingCookies, route) { + if (requestStore.asyncApiPromises) { + let promise; + if (underlyingCookies === requestStore.mutableCookies) { + promise = requestStore.asyncApiPromises.mutableCookies; + } else if (underlyingCookies === requestStore.cookies) { + promise = requestStore.asyncApiPromises.cookies; + } else { + throw new _invarianterror.InvariantError('Received an underlying cookies object that does not match either `cookies` or `mutableCookies`'); + } + return instrumentCookiesPromiseWithDevWarnings(promise, route); + } + const cachedCookies = CachedCookies.get(underlyingCookies); + if (cachedCookies) { + return cachedCookies; + } + const promise = (0, _dynamicrenderingutils.makeDevtoolsIOAwarePromise)(underlyingCookies, requestStore, _dynamicrenderingutils.RENDER_STAGES_BY_DATA_KIND.sessionData); + const proxiedPromise = instrumentCookiesPromiseWithDevWarnings(promise, route); + CachedCookies.set(underlyingCookies, proxiedPromise); + return proxiedPromise; +} +const warnForSyncAccess = (0, _creatededupedbycallsiteservererrorlogger.createDedupedByCallsiteServerErrorLoggerDev)(createCookiesAccessError); +function instrumentCookiesPromiseWithDevWarnings(promise, route) { + Object.defineProperties(promise, { + [Symbol.iterator]: replaceableWarningDescriptorForSymbolIterator(promise, route), + size: replaceableWarningDescriptor(promise, 'size', route), + get: replaceableWarningDescriptor(promise, 'get', route), + getAll: replaceableWarningDescriptor(promise, 'getAll', route), + has: replaceableWarningDescriptor(promise, 'has', route), + set: replaceableWarningDescriptor(promise, 'set', route), + delete: replaceableWarningDescriptor(promise, 'delete', route), + clear: replaceableWarningDescriptor(promise, 'clear', route), + toString: replaceableWarningDescriptor(promise, 'toString', route) + }); + return promise; +} +function replaceableWarningDescriptor(target, prop, route) { + return { + enumerable: false, + get () { + warnForSyncAccess(route, `\`cookies().${prop}\``); + return undefined; + }, + set (value) { + Object.defineProperty(target, prop, { + value, + writable: true, + configurable: true + }); + }, + configurable: true + }; +} +function replaceableWarningDescriptorForSymbolIterator(target, route) { + return { + enumerable: false, + get () { + warnForSyncAccess(route, '`...cookies()` or similar iteration'); + return undefined; + }, + set (value) { + Object.defineProperty(target, Symbol.iterator, { + value, + writable: true, + enumerable: true, + configurable: true + }); + }, + configurable: true + }; +} +function createCookiesAccessError(route, expression) { + const prefix = route ? `Route "${route}" ` : 'This route '; + return new Error(`${prefix}used ${expression}. ` + `\`cookies()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. ` + `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`); +} +}), +"[project]/node_modules/next/dist/server/request/draft-mode.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "draftMode", { + enumerable: true, + get: function() { + return draftMode; + } +}); +const _workunitasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)"); +const _workasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)"); +const _dynamicrendering = __turbopack_context__.r("[project]/node_modules/next/dist/server/app-render/dynamic-rendering.js [app-route] (ecmascript)"); +const _creatededupedbycallsiteservererrorlogger = __turbopack_context__.r("[project]/node_modules/next/dist/server/create-deduped-by-callsite-server-error-logger.js [app-route] (ecmascript)"); +const _staticgenerationbailout = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/static-generation-bailout.js [app-route] (ecmascript)"); +const _hooksservercontext = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/hooks-server-context.js [app-route] (ecmascript)"); +const _invarianterror = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/invariant-error.js [app-route] (ecmascript)"); +const _usecachemessages = __turbopack_context__.r("[project]/node_modules/next/dist/server/use-cache/use-cache-messages.js [app-route] (ecmascript)"); +const _reflect = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/adapters/reflect.js [app-route] (ecmascript)"); +const _dynamicrenderingutils = __turbopack_context__.r("[project]/node_modules/next/dist/server/dynamic-rendering-utils.js [app-route] (ecmascript)"); +function draftMode() { + const callingExpression = 'draftMode'; + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (!workStore || !workUnitStore) { + (0, _workunitasyncstorageexternal.throwForMissingRequestStore)(callingExpression); + } + switch(workUnitStore.type){ + case 'prerender-runtime': + { + // TODO(runtime-ppr): does it make sense to delay this? normally it's always microtasky + const { stagedRendering } = workUnitStore; + if (stagedRendering) { + return stagedRendering.delayUntilStage(_dynamicrenderingutils.RENDER_STAGES_BY_DATA_KIND.sessionData, 'draftMode', new DraftMode(workUnitStore.draftMode)); + } else { + return createOrGetCachedDraftMode(workUnitStore.draftMode, workStore); + } + } + case 'request': + return createOrGetCachedDraftMode(workUnitStore.draftMode, workStore); + case 'cache': + case 'private-cache': + case 'unstable-cache': + // Inside of `"use cache"` or `unstable_cache`, draft mode is available if + // the outmost work unit store is a request store (or a runtime prerender), + // and if draft mode is enabled. + const draftModeProvider = (0, _workunitasyncstorageexternal.getDraftModeProviderForCacheScope)(workStore, workUnitStore); + if (draftModeProvider) { + return createOrGetCachedDraftMode(draftModeProvider, workStore); + } + // Otherwise, we fall through to providing an empty draft mode. + // eslint-disable-next-line no-fallthrough + case 'prerender': + case 'prerender-legacy': + // Return empty draft mode + return createOrGetCachedDraftMode(null, workStore); + case 'prerender-client': + case 'validation-client': + { + const exportName = '`draftMode`'; + throw new _invarianterror.InvariantError(`${exportName} must not be used within a Client Component. Next.js should be preventing ${exportName} from being included in Client Components statically, but did not in this case.`); + } + case 'build-time-generator': + throw new Error(`Route ${workStore.route} used \`${callingExpression}()\` inside \`${workUnitStore.functionName}\`. This is not supported because \`${workUnitStore.functionName}\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`); + default: + return workUnitStore; + } +} +function createOrGetCachedDraftMode(draftModeProvider, workStore) { + const cacheKey = draftModeProvider ?? NullDraftMode; + const cachedDraftMode = CachedDraftModes.get(cacheKey); + if (cachedDraftMode) { + return cachedDraftMode; + } + if (("TURBOPACK compile-time value", "development") === 'development' && !(workStore == null ? void 0 : workStore.isPrefetchRequest)) { + const route = workStore == null ? void 0 : workStore.route; + return createDraftModeWithDevWarnings(draftModeProvider, route); + } else { + return Promise.resolve(new DraftMode(draftModeProvider)); + } +} +const NullDraftMode = {}; +const CachedDraftModes = new WeakMap(); +function createDraftModeWithDevWarnings(underlyingProvider, route) { + const instance = new DraftMode(underlyingProvider); + const promise = Promise.resolve(instance); + const proxiedPromise = new Proxy(promise, { + get (target, prop, receiver) { + switch(prop){ + case 'isEnabled': + warnForSyncAccess(route, `\`draftMode().${prop}\``); + break; + case 'enable': + case 'disable': + { + warnForSyncAccess(route, `\`draftMode().${prop}()\``); + break; + } + default: + { + // We only warn for well-defined properties of the draftMode object. + } + } + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + }); + return proxiedPromise; +} +class DraftMode { + constructor(provider){ + this._provider = provider; + } + get isEnabled() { + if (this._provider !== null) { + return this._provider.isEnabled; + } + return false; + } + enable() { + // We have a store we want to track dynamic data access to ensure we + // don't statically generate routes that manipulate draft mode. + trackDynamicDraftMode('draftMode().enable()', this.enable); + if (this._provider !== null) { + this._provider.enable(); + } + } + disable() { + trackDynamicDraftMode('draftMode().disable()', this.disable); + if (this._provider !== null) { + this._provider.disable(); + } + } +} +const warnForSyncAccess = (0, _creatededupedbycallsiteservererrorlogger.createDedupedByCallsiteServerErrorLoggerDev)(createDraftModeAccessError); +function createDraftModeAccessError(route, expression) { + const prefix = route ? `Route "${route}" ` : 'This route '; + return new Error(`${prefix}used ${expression}. ` + `\`draftMode()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. ` + `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`); +} +function trackDynamicDraftMode(expression, constructorOpt) { + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workStore) { + // We have a store we want to track dynamic data access to ensure we + // don't statically generate routes that manipulate draft mode. + if ((workUnitStore == null ? void 0 : workUnitStore.phase) === 'after') { + throw new Error(`Route ${workStore.route} used "${expression}" inside \`after()\`. The enabled status of \`draftMode()\` can be read inside \`after()\` but you cannot enable or disable \`draftMode()\`. See more info here: https://nextjs.org/docs/app/api-reference/functions/after`); + } + if (workStore.dynamicShouldError) { + throw new _staticgenerationbailout.StaticGenBailoutError(`Route ${workStore.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`); + } + if (workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + case 'private-cache': + { + const error = (0, _usecachemessages.createDraftModeMutationInUseCacheError)(workStore.route, expression); + Error.captureStackTrace(error, constructorOpt); + (0, _dynamicrenderingutils.applyOwnerStack)(error); + workStore.invalidDynamicUsageError ??= error; + throw error; + } + case 'unstable-cache': + throw (0, _usecachemessages.createDraftModeMutationInUnstableCacheError)(workStore.route, expression); + case 'prerender': + case 'prerender-runtime': + { + const error = new Error(`Route ${workStore.route} used ${expression} without first calling \`await connection()\`. See more info here: https://nextjs.org/docs/messages/next-prerender-sync-headers`); + return (0, _dynamicrendering.abortAndThrowOnSynchronousRequestDataAccess)(workStore.route, expression, error, workUnitStore); + } + case 'prerender-client': + case 'validation-client': + const exportName = '`draftMode`'; + throw new _invarianterror.InvariantError(`${exportName} must not be used within a Client Component. Next.js should be preventing ${exportName} from being included in Client Components statically, but did not in this case.`); + case 'prerender-legacy': + workUnitStore.revalidate = 0; + const err = new _hooksservercontext.DynamicServerError(`Route ${workStore.route} couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`); + workStore.dynamicUsageDescription = expression; + workStore.dynamicUsageStack = err.stack; + throw err; + case 'request': + (0, _dynamicrendering.trackDynamicDataInDynamicRender)(workUnitStore); + break; + case 'build-time-generator': + throw new Error(`Route ${workStore.route} used \`${expression}\` inside \`${workUnitStore.functionName}\`. This is not supported because \`${workUnitStore.functionName}\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`); + default: + workUnitStore; + } + } + } +} +}), +"[project]/node_modules/next/dist/server/request/headers.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "headers", { + enumerable: true, + get: function() { + return headers; + } +}); +const _headers = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/adapters/headers.js [app-route] (ecmascript)"); +const _workasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)"); +const _workunitasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)"); +const _dynamicrendering = __turbopack_context__.r("[project]/node_modules/next/dist/server/app-render/dynamic-rendering.js [app-route] (ecmascript)"); +const _staticgenerationbailout = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/static-generation-bailout.js [app-route] (ecmascript)"); +const _dynamicrenderingutils = __turbopack_context__.r("[project]/node_modules/next/dist/server/dynamic-rendering-utils.js [app-route] (ecmascript)"); +const _creatededupedbycallsiteservererrorlogger = __turbopack_context__.r("[project]/node_modules/next/dist/server/create-deduped-by-callsite-server-error-logger.js [app-route] (ecmascript)"); +const _utils = __turbopack_context__.r("[project]/node_modules/next/dist/server/request/utils.js [app-route] (ecmascript)"); +const _invarianterror = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/invariant-error.js [app-route] (ecmascript)"); +const _usecachemessages = __turbopack_context__.r("[project]/node_modules/next/dist/server/use-cache/use-cache-messages.js [app-route] (ecmascript)"); +function headers() { + const callingExpression = 'headers'; + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore(); + if (workStore) { + if (workUnitStore && !(0, _utils.isRequestApiAllowedInCurrentPhase)(workUnitStore)) { + throw new Error(`Route ${workStore.route} used \`headers()\` inside \`after()\` while rendering. This is not supported. If you need this data inside an \`after()\` callback, use \`headers()\` outside of the callback. See more info here: https://nextjs.org/docs/app/api-reference/functions/after`); + } + if (workStore.forceStatic) { + // When using forceStatic we override all other logic and always just return an empty + // headers object without tracking + const underlyingHeaders = _headers.HeadersAdapter.seal(new Headers({})); + return makeUntrackedHeaders(underlyingHeaders); + } + if (workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + { + const error = (0, _usecachemessages.createHeadersInUseCacheError)(workStore.route); + Error.captureStackTrace(error, headers); + (0, _dynamicrenderingutils.applyOwnerStack)(error); + workStore.invalidDynamicUsageError ??= error; + throw error; + } + case 'unstable-cache': + throw (0, _usecachemessages.createHeadersInUnstableCacheError)(workStore.route); + case 'build-time-generator': + throw new Error(`Route ${workStore.route} used \`headers()\` inside \`${workUnitStore.functionName}\`. This is not supported because \`${workUnitStore.functionName}\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`); + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'private-cache': + case 'prerender-runtime': + case 'prerender-legacy': + case 'request': + break; + default: + workUnitStore; + } + } + if (workStore.dynamicShouldError) { + throw new _staticgenerationbailout.StaticGenBailoutError(`Route ${workStore.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`headers()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`); + } + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + return makeHangingHeaders(workStore, workUnitStore); + case 'prerender-client': + case 'validation-client': + const exportName = '`headers`'; + throw new _invarianterror.InvariantError(`${exportName} must not be used within a client component. Next.js should be preventing ${exportName} from being included in client components statically, but did not in this case.`); + case 'prerender-legacy': + // Legacy Prerender + // We are in a legacy static generation mode while prerendering + // We track dynamic access here so we don't need to wrap the headers in + // individual property access tracking. + return (0, _dynamicrendering.throwToInterruptStaticGeneration)(callingExpression, workStore, workUnitStore); + case 'prerender-runtime': + { + const { stagedRendering } = workUnitStore; + if (stagedRendering) { + return stagedRendering.delayUntilStage(_dynamicrenderingutils.RENDER_STAGES_BY_DATA_KIND.sessionData, 'headers', workUnitStore.headers); + } else { + return makeUntrackedHeaders(workUnitStore.headers); + } + } + case 'private-cache': + // Private caches are delayed until the runtime stage in use-cache-wrapper, + // so we don't need an additional delay here. + return makeUntrackedHeaders(workUnitStore.headers); + case 'request': + (0, _dynamicrendering.trackDynamicDataInDynamicRender)(workUnitStore); + if ("TURBOPACK compile-time truthy", 1) { + // Semantically we only need the dev tracking when running in `next dev` + // but since you would never use next dev with production NODE_ENV we use this + // as a proxy so we can statically exclude this code from production builds. + return makeUntrackedHeadersWithDevWarnings(workUnitStore.headers, workStore == null ? void 0 : workStore.route, workUnitStore); + } else //TURBOPACK unreachable + ; + //TURBOPACK unreachable + ; + default: + workUnitStore; + } + } + } + // If we end up here, there was no work store or work unit store present. + (0, _workunitasyncstorageexternal.throwForMissingRequestStore)(callingExpression); +} +const CachedHeaders = new WeakMap(); +function makeHangingHeaders(workStore, prerenderStore) { + const cachedHeaders = CachedHeaders.get(prerenderStore); + if (cachedHeaders) { + return cachedHeaders; + } + const promise = (0, _dynamicrenderingutils.makeSessionDataHangingPromise)(prerenderStore.renderSignal, workStore.route, '`headers()`', prerenderStore); + CachedHeaders.set(prerenderStore, promise); + return promise; +} +function makeUntrackedHeaders(underlyingHeaders) { + const cachedHeaders = CachedHeaders.get(underlyingHeaders); + if (cachedHeaders) { + return cachedHeaders; + } + const promise = Promise.resolve(underlyingHeaders); + CachedHeaders.set(underlyingHeaders, promise); + return promise; +} +function makeUntrackedHeadersWithDevWarnings(underlyingHeaders, route, requestStore) { + if (requestStore.asyncApiPromises) { + return instrumentHeadersPromiseWithDevWarnings(requestStore.asyncApiPromises.headers, route); + } + const cachedHeaders = CachedHeaders.get(underlyingHeaders); + if (cachedHeaders) { + return cachedHeaders; + } + const promise = (0, _dynamicrenderingutils.makeDevtoolsIOAwarePromise)(underlyingHeaders, requestStore, _dynamicrenderingutils.RENDER_STAGES_BY_DATA_KIND.sessionData); + const proxiedPromise = instrumentHeadersPromiseWithDevWarnings(promise, route); + CachedHeaders.set(underlyingHeaders, proxiedPromise); + return proxiedPromise; +} +const warnForSyncAccess = (0, _creatededupedbycallsiteservererrorlogger.createDedupedByCallsiteServerErrorLoggerDev)(createHeadersAccessError); +function instrumentHeadersPromiseWithDevWarnings(promise, route) { + Object.defineProperties(promise, { + [Symbol.iterator]: replaceableWarningDescriptorForSymbolIterator(promise, route), + append: replaceableWarningDescriptor(promise, 'append', route), + delete: replaceableWarningDescriptor(promise, 'delete', route), + get: replaceableWarningDescriptor(promise, 'get', route), + has: replaceableWarningDescriptor(promise, 'has', route), + set: replaceableWarningDescriptor(promise, 'set', route), + getSetCookie: replaceableWarningDescriptor(promise, 'getSetCookie', route), + forEach: replaceableWarningDescriptor(promise, 'forEach', route), + keys: replaceableWarningDescriptor(promise, 'keys', route), + values: replaceableWarningDescriptor(promise, 'values', route), + entries: replaceableWarningDescriptor(promise, 'entries', route) + }); + return promise; +} +function replaceableWarningDescriptor(target, prop, route) { + return { + enumerable: false, + get () { + warnForSyncAccess(route, `\`headers().${prop}\``); + return undefined; + }, + set (value) { + Object.defineProperty(target, prop, { + value, + writable: true, + configurable: true + }); + }, + configurable: true + }; +} +function replaceableWarningDescriptorForSymbolIterator(target, route) { + return { + enumerable: false, + get () { + warnForSyncAccess(route, '`...headers()` or similar iteration'); + return undefined; + }, + set (value) { + Object.defineProperty(target, Symbol.iterator, { + value, + writable: true, + enumerable: true, + configurable: true + }); + }, + configurable: true + }; +} +function createHeadersAccessError(route, expression) { + const prefix = route ? `Route "${route}" ` : 'This route '; + return new Error(`${prefix}used ${expression}. ` + `\`headers()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. ` + `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`); +} +}), +"[project]/node_modules/next/dist/server/request/utils.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + isRequestApiAllowedInCurrentPhase: null, + throwForSearchParamsAccessInUseCache: null, + throwWithStaticGenerationBailoutErrorWithDynamicError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + isRequestApiAllowedInCurrentPhase: function() { + return isRequestApiAllowedInCurrentPhase; + }, + throwForSearchParamsAccessInUseCache: function() { + return throwForSearchParamsAccessInUseCache; + }, + throwWithStaticGenerationBailoutErrorWithDynamicError: function() { + return throwWithStaticGenerationBailoutErrorWithDynamicError; + } +}); +const _staticgenerationbailout = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/static-generation-bailout.js [app-route] (ecmascript)"); +const _actionasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/action-async-storage.external.js [external] (next/dist/server/app-render/action-async-storage.external.js, cjs)"); +const _aftertaskasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/after-task-async-storage.external.js [external] (next/dist/server/app-render/after-task-async-storage.external.js, cjs)"); +const _usecachemessages = __turbopack_context__.r("[project]/node_modules/next/dist/server/use-cache/use-cache-messages.js [app-route] (ecmascript)"); +function throwWithStaticGenerationBailoutErrorWithDynamicError(route, expression) { + throw new _staticgenerationbailout.StaticGenBailoutError(`Route ${route} with \`dynamic = "error"\` couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`); +} +function throwForSearchParamsAccessInUseCache(workStore, constructorOpt) { + const error = (0, _usecachemessages.createSearchParamsInUseCacheError)(workStore.route); + Error.captureStackTrace(error, constructorOpt); + workStore.invalidDynamicUsageError ??= error; + throw error; +} +function isRequestApiAllowedInCurrentPhase(workUnitStore) { + switch(workUnitStore.phase){ + case 'action': + case 'render': + { + // The request is still in progress. The API may be disallowed for other reasons, + // but not because of phase. + return true; + } + case 'after': + { + // The request has finished. + // If we're in a Route Handler or a Server Action, + // request APIs can be called everywhere, even in after(). + const actionStore = _actionasyncstorageexternal.actionAsyncStorage.getStore(); + if (actionStore && (actionStore.isAppRoute || actionStore.isAction)) { + return true; + } + const afterTaskStore = _aftertaskasyncstorageexternal.afterTaskAsyncStorage.getStore(); + if (afterTaskStore) { + // We're in an `after` callback. Request APIs are callable if + // the `after()` call happened in an action phase: + // - in a Route Handler + // - in a Server Action's body (but not the render after) + // + // TODO(after): Is it even possible to have `phase === 'action'` but no `actionStore`? + // We should revisit this setup and simplify this. + return afterTaskStore.rootTaskSpawnPhase === 'action'; + } + // Otherwise, we must be in a page, in the `after` phase. + // We don't allow calling request APIs here because we'd miss + // them during prerendering and wouldn't know that the page is dynamic. + return false; + } + } +} +}), +"[project]/node_modules/next/dist/server/route-modules/app-page/module.compiled.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable +; +else { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + if ("TURBOPACK compile-time truthy", 1) { + if ("TURBOPACK compile-time truthy", 1) { + module.exports = __turbopack_context__.r("[externals]/next/dist/compiled/next-server/app-page-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-page-turbo.runtime.dev.js, cjs)"); + } else //TURBOPACK unreachable + ; + } else //TURBOPACK unreachable + ; + } +} +}), +"[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +module.exports = __turbopack_context__.r("[project]/node_modules/next/dist/server/route-modules/app-page/module.compiled.js [app-route] (ecmascript)").vendored['react-rsc'].React; +}), +"[project]/node_modules/next/dist/server/use-cache/use-cache-messages.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +/** + * Centralized error factories for cached function and revalidation misuse. + * State the scope and constraint, explain non-obvious boundaries, give the + * immediate fix, then link to the relevant docs. + */ Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createCacheLifeOutsideUseCacheError: null, + createCacheTagOutsideUseCacheError: null, + createConnectionInPrivateUseCacheError: null, + createConnectionInPublicUseCacheError: null, + createConnectionInUnstableCacheError: null, + createCookiesInUnstableCacheError: null, + createCookiesInUseCacheError: null, + createDraftModeMutationInUnstableCacheError: null, + createDraftModeMutationInUseCacheError: null, + createHeadersInUnstableCacheError: null, + createHeadersInUseCacheError: null, + createNestedCacheShortExpireError: null, + createNestedCacheZeroRevalidateError: null, + createRevalidateDuringRenderError: null, + createRevalidateInBuildTimeGeneratorError: null, + createRevalidateInCachedFunctionError: null, + createRouteHandlerRequestInUnstableCacheError: null, + createRouteHandlerRequestInUseCacheError: null, + createSearchParamsInUseCacheError: null, + createUseCachePrivateInsidePublicUseCacheError: null, + createUseCachePrivateInsideUnstableCacheError: null, + createUseCachePrivateOutsideRequestContextError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createCacheLifeOutsideUseCacheError: function() { + return createCacheLifeOutsideUseCacheError; + }, + createCacheTagOutsideUseCacheError: function() { + return createCacheTagOutsideUseCacheError; + }, + createConnectionInPrivateUseCacheError: function() { + return createConnectionInPrivateUseCacheError; + }, + createConnectionInPublicUseCacheError: function() { + return createConnectionInPublicUseCacheError; + }, + createConnectionInUnstableCacheError: function() { + return createConnectionInUnstableCacheError; + }, + createCookiesInUnstableCacheError: function() { + return createCookiesInUnstableCacheError; + }, + createCookiesInUseCacheError: function() { + return createCookiesInUseCacheError; + }, + createDraftModeMutationInUnstableCacheError: function() { + return createDraftModeMutationInUnstableCacheError; + }, + createDraftModeMutationInUseCacheError: function() { + return createDraftModeMutationInUseCacheError; + }, + createHeadersInUnstableCacheError: function() { + return createHeadersInUnstableCacheError; + }, + createHeadersInUseCacheError: function() { + return createHeadersInUseCacheError; + }, + createNestedCacheShortExpireError: function() { + return createNestedCacheShortExpireError; + }, + createNestedCacheZeroRevalidateError: function() { + return createNestedCacheZeroRevalidateError; + }, + createRevalidateDuringRenderError: function() { + return createRevalidateDuringRenderError; + }, + createRevalidateInBuildTimeGeneratorError: function() { + return createRevalidateInBuildTimeGeneratorError; + }, + createRevalidateInCachedFunctionError: function() { + return createRevalidateInCachedFunctionError; + }, + createRouteHandlerRequestInUnstableCacheError: function() { + return createRouteHandlerRequestInUnstableCacheError; + }, + createRouteHandlerRequestInUseCacheError: function() { + return createRouteHandlerRequestInUseCacheError; + }, + createSearchParamsInUseCacheError: function() { + return createSearchParamsInUseCacheError; + }, + createUseCachePrivateInsidePublicUseCacheError: function() { + return createUseCachePrivateInsidePublicUseCacheError; + }, + createUseCachePrivateInsideUnstableCacheError: function() { + return createUseCachePrivateInsideUnstableCacheError; + }, + createUseCachePrivateOutsideRequestContextError: function() { + return createUseCachePrivateOutsideRequestContextError; + } +}); +const NEXT_REQUEST_IN_USE_CACHE = 'https://nextjs.org/docs/messages/next-request-in-use-cache'; +const UNSTABLE_CACHE_API_DOCS = 'https://nextjs.org/docs/app/api-reference/functions/unstable_cache'; +const USE_CACHE_PRIVATE_API_DOCS = 'https://nextjs.org/docs/app/api-reference/directives/use-cache-private'; +const CACHE_TAG_OUTSIDE_USE_CACHE = 'https://nextjs.org/docs/messages/cache-tag-outside-use-cache'; +const CACHE_LIFE_OUTSIDE_USE_CACHE = 'https://nextjs.org/docs/messages/cache-life-outside-use-cache'; +const USE_CACHE_PRIVATE_COMPOSITION = 'https://nextjs.org/docs/messages/use-cache-private-composition'; +const REVALIDATE_IN_USE_CACHE = 'https://nextjs.org/docs/messages/revalidate-in-use-cache'; +const NESTED_USE_CACHE_NO_EXPLICIT_CACHELIFE = 'https://nextjs.org/docs/messages/nested-use-cache-no-explicit-cachelife'; +function createCookiesInUseCacheError(route) { + return new Error(`Route "${route}": \`cookies()\` can't be read inside \`"use cache"\`. Read it outside the cached function and pass what you need as an argument.\nLearn more: ${NEXT_REQUEST_IN_USE_CACHE}`); +} +function createCookiesInUnstableCacheError(route) { + return new Error(`Route "${route}": \`cookies()\` can't be read inside \`unstable_cache()\`. Read it outside the cached function and pass what you need as an argument.\nLearn more: ${UNSTABLE_CACHE_API_DOCS}`); +} +function createHeadersInUseCacheError(route) { + return new Error(`Route "${route}": \`headers()\` can't be read inside \`"use cache"\`. Read it outside the cached function and pass what you need as an argument.\nLearn more: ${NEXT_REQUEST_IN_USE_CACHE}`); +} +function createHeadersInUnstableCacheError(route) { + return new Error(`Route "${route}": \`headers()\` can't be read inside \`unstable_cache()\`. Read it outside the cached function and pass what you need as an argument.\nLearn more: ${UNSTABLE_CACHE_API_DOCS}`); +} +function createSearchParamsInUseCacheError(route) { + return new Error(`Route "${route}": \`searchParams\` can't be read inside \`"use cache"\`. Await it outside the cached function and pass what you need as an argument.\nLearn more: ${NEXT_REQUEST_IN_USE_CACHE}`); +} +function createConnectionInPublicUseCacheError(route) { + return new Error(`Route "${route}": \`connection()\` can't be called inside \`"use cache"\` because cached functions may run during prerendering, without an incoming request. Call it outside the cached function.\nLearn more: ${NEXT_REQUEST_IN_USE_CACHE}`); +} +function createConnectionInPrivateUseCacheError(route) { + return new Error(`Route "${route}": \`connection()\` can't be called inside \`"use cache: private"\` because private cached functions may run during prefetching, without a navigation request. Call it outside the cached function.\nLearn more: ${USE_CACHE_PRIVATE_API_DOCS}`); +} +function createConnectionInUnstableCacheError(route) { + return new Error(`Route "${route}": \`connection()\` can't be called inside \`unstable_cache()\` because cached functions may run during prerendering, without an incoming request. Call it outside the cached function.\nLearn more: ${UNSTABLE_CACHE_API_DOCS}`); +} +function createRouteHandlerRequestInUseCacheError(route, expression) { + return new Error(`Route "${route}": \`${expression}\` can't be read inside \`"use cache"\`. Read it outside the cached function and pass what you need as an argument.\nLearn more: ${NEXT_REQUEST_IN_USE_CACHE}`); +} +function createRouteHandlerRequestInUnstableCacheError(route, expression) { + return new Error(`Route "${route}": \`${expression}\` can't be read inside \`unstable_cache()\`. Read it outside the cached function and pass what you need as an argument.\nLearn more: ${UNSTABLE_CACHE_API_DOCS}`); +} +function createDraftModeMutationInUseCacheError(route, expression) { + return new Error(`Route "${route}": \`${expression}\` can't be called inside \`"use cache"\`. Draft mode can be read inside a cached function, but enabling or disabling it must happen outside.\nLearn more: ${NEXT_REQUEST_IN_USE_CACHE}`); +} +function createDraftModeMutationInUnstableCacheError(route, expression) { + return new Error(`Route "${route}": \`${expression}\` can't be called inside \`unstable_cache()\`. Draft mode can be read inside a cached function, but enabling or disabling it must happen outside.\nLearn more: ${UNSTABLE_CACHE_API_DOCS}`); +} +function createRevalidateDuringRenderError(route, expression) { + return new Error(`Route "${route}": \`${expression}\` can't be called during render. Call it from a Server Action or Route Handler instead.\nLearn more: ${REVALIDATE_IN_USE_CACHE}`); +} +function createRevalidateInCachedFunctionError(route, expression) { + return new Error(`Route "${route}": \`${expression}\` can't be called inside a cached function. Call it from a Server Action or Route Handler instead.\nLearn more: ${REVALIDATE_IN_USE_CACHE}`); +} +function createRevalidateInBuildTimeGeneratorError(route, expression, generatorName) { + return new Error(`Route "${route}": \`${expression}\` can't be called inside \`${generatorName}\`. Call it from a Server Action or Route Handler instead.\nLearn more: ${REVALIDATE_IN_USE_CACHE}`); +} +// Cache configuration and nesting +function routePrefix(route) { + return route === undefined ? '' : `Route "${route}": `; +} +function createCacheTagOutsideUseCacheError(route) { + return new Error(`${routePrefix(route)}\`cacheTag()\` can only be called inside a \`"use cache"\` or \`"use cache: private"\` function.\nLearn more: ${CACHE_TAG_OUTSIDE_USE_CACHE}`); +} +function createCacheLifeOutsideUseCacheError(route) { + return new Error(`${routePrefix(route)}\`cacheLife()\` can only be called inside a \`"use cache"\` or \`"use cache: private"\` function.\nLearn more: ${CACHE_LIFE_OUTSIDE_USE_CACHE}`); +} +function createNestedCacheZeroRevalidateError(route, cause) { + return new Error(`Route "${route}": A nested \`"use cache"\` with \`revalidate: 0\` is inside an outer \`"use cache"\` that has no \`cacheLife()\`. Add \`cacheLife()\` to the outer one to choose whether to prerender it with a non-zero \`revalidate\` or keep it dynamic with \`revalidate: 0\`.\nLearn more: ${NESTED_USE_CACHE_NO_EXPLICIT_CACHELIFE}`, { + cause + }); +} +function createNestedCacheShortExpireError(route, cause) { + return new Error(`Route "${route}": A nested \`"use cache"\` with a short \`expire\` (under 5 minutes) is inside an outer \`"use cache"\` that has no \`cacheLife()\`. Add \`cacheLife()\` to the outer one to choose whether to prerender it with a longer \`expire\` or keep it dynamic with a short \`expire\`.\nLearn more: ${NESTED_USE_CACHE_NO_EXPLICIT_CACHELIFE}`, { + cause + }); +} +function createUseCachePrivateInsidePublicUseCacheError(route) { + return new Error(`Route "${route}": \`"use cache: private"\` can't be nested inside \`"use cache"\` because a shared cached function can't depend on private request data. Nest it only inside another \`"use cache: private"\`.\nLearn more: ${USE_CACHE_PRIVATE_COMPOSITION}`); +} +function createUseCachePrivateInsideUnstableCacheError(route) { + return new Error(`Route "${route}": \`"use cache: private"\` can't be used inside \`unstable_cache()\` because \`unstable_cache()\` uses a shared cache that can't contain private request data. Call the private cached function outside \`unstable_cache()\`.\nLearn more: ${USE_CACHE_PRIVATE_COMPOSITION}`); +} +function createUseCachePrivateOutsideRequestContextError(route, functionName) { + return new Error(`Route "${route}": \`"use cache: private"\` needs an active request, so it can't be used during \`${functionName}\` or other build-time contexts. Move it to a request-time component or function.\nLearn more: ${USE_CACHE_PRIVATE_COMPOSITION}`); +} +}), +"[project]/node_modules/next/dist/server/web/error.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + PageSignatureError: null, + RemovedPageError: null, + RemovedUAError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + PageSignatureError: function() { + return PageSignatureError; + }, + RemovedPageError: function() { + return RemovedPageError; + }, + RemovedUAError: function() { + return RemovedUAError; + } +}); +class PageSignatureError extends Error { + constructor({ page }){ + super(`The middleware "${page}" accepts an async API directly with the form: + + export function middleware(request, event) { + return NextResponse.redirect('/new-location') + } + + Read more: https://nextjs.org/docs/messages/middleware-new-signature + `); + } +} +class RemovedPageError extends Error { + constructor(){ + super(`The request.page has been deprecated in favour of \`URLPattern\`. + Read more: https://nextjs.org/docs/messages/middleware-request-page + `); + } +} +class RemovedUAError extends Error { + constructor(){ + super(`The request.ua has been removed in favour of \`userAgent\` function. + Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent + `); + } +} +}), +"[project]/node_modules/next/dist/server/web/next-url.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "NextURL", { + enumerable: true, + get: function() { + return NextURL; + } +}); +const _detectdomainlocale = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/i18n/detect-domain-locale.js [app-route] (ecmascript)"); +const _formatnextpathnameinfo = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js [app-route] (ecmascript)"); +const _gethostname = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/get-hostname.js [app-route] (ecmascript)"); +const _getnextpathnameinfo = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js [app-route] (ecmascript)"); +const REGEX_LOCALHOST_HOSTNAME = /^(?:127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\[::1\]|localhost)$/; +function parseURL(url, base) { + const parsed = new URL(String(url), base && String(base)); + if (REGEX_LOCALHOST_HOSTNAME.test(parsed.hostname)) { + parsed.hostname = 'localhost'; + } + return parsed; +} +const Internal = Symbol('NextURLInternal'); +class NextURL { + constructor(input, baseOrOpts, opts){ + let base; + let options; + if (typeof baseOrOpts === 'object' && 'pathname' in baseOrOpts || typeof baseOrOpts === 'string') { + base = baseOrOpts; + options = opts || {}; + } else { + options = opts || baseOrOpts || {}; + } + this[Internal] = { + url: parseURL(input, base ?? options.base), + options: options, + basePath: '' + }; + this.analyze(); + } + analyze() { + var _this_Internal_options_nextConfig_i18n, _this_Internal_options_nextConfig, _this_Internal_domainLocale, _this_Internal_options_nextConfig_i18n1, _this_Internal_options_nextConfig1; + const info = (0, _getnextpathnameinfo.getNextPathnameInfo)(this[Internal].url.pathname, { + nextConfig: this[Internal].options.nextConfig, + parseData: !("TURBOPACK compile-time value", void 0), + i18nProvider: this[Internal].options.i18nProvider + }); + const hostname = (0, _gethostname.getHostname)(this[Internal].url, this[Internal].options.headers); + this[Internal].domainLocale = this[Internal].options.i18nProvider ? this[Internal].options.i18nProvider.detectDomainLocale(hostname) : (0, _detectdomainlocale.detectDomainLocale)((_this_Internal_options_nextConfig = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n = _this_Internal_options_nextConfig.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n.domains, hostname); + const defaultLocale = ((_this_Internal_domainLocale = this[Internal].domainLocale) == null ? void 0 : _this_Internal_domainLocale.defaultLocale) || ((_this_Internal_options_nextConfig1 = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n1 = _this_Internal_options_nextConfig1.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n1.defaultLocale); + this[Internal].url.pathname = info.pathname; + this[Internal].defaultLocale = defaultLocale; + this[Internal].basePath = info.basePath ?? ''; + this[Internal].buildId = info.buildId; + this[Internal].locale = info.locale ?? defaultLocale; + this[Internal].trailingSlash = info.trailingSlash; + } + formatPathname() { + return (0, _formatnextpathnameinfo.formatNextPathnameInfo)({ + basePath: this[Internal].basePath, + buildId: this[Internal].buildId, + defaultLocale: !this[Internal].options.forceLocale ? this[Internal].defaultLocale : undefined, + locale: this[Internal].locale, + pathname: this[Internal].url.pathname, + trailingSlash: this[Internal].trailingSlash + }); + } + formatSearch() { + return this[Internal].url.search; + } + get buildId() { + return this[Internal].buildId; + } + set buildId(buildId) { + this[Internal].buildId = buildId; + } + get locale() { + return this[Internal].locale ?? ''; + } + set locale(locale) { + var _this_Internal_options_nextConfig_i18n, _this_Internal_options_nextConfig; + if (!this[Internal].locale || !((_this_Internal_options_nextConfig = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n = _this_Internal_options_nextConfig.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n.locales.includes(locale))) { + throw new TypeError(`The NextURL configuration includes no locale "${locale}"`); + } + this[Internal].locale = locale; + } + get defaultLocale() { + return this[Internal].defaultLocale; + } + get domainLocale() { + return this[Internal].domainLocale; + } + get searchParams() { + return this[Internal].url.searchParams; + } + get host() { + return this[Internal].url.host; + } + set host(value) { + this[Internal].url.host = value; + } + get hostname() { + return this[Internal].url.hostname; + } + set hostname(value) { + this[Internal].url.hostname = value; + } + get port() { + return this[Internal].url.port; + } + set port(value) { + this[Internal].url.port = value; + } + get protocol() { + return this[Internal].url.protocol; + } + set protocol(value) { + this[Internal].url.protocol = value; + } + get href() { + const pathname = this.formatPathname(); + const search = this.formatSearch(); + return `${this.protocol}//${this.host}${pathname}${search}${this.hash}`; + } + set href(url) { + this[Internal].url = parseURL(url); + this.analyze(); + } + get origin() { + return this[Internal].url.origin; + } + get pathname() { + return this[Internal].url.pathname; + } + set pathname(value) { + this[Internal].url.pathname = value; + } + get hash() { + return this[Internal].url.hash; + } + set hash(value) { + this[Internal].url.hash = value; + } + get search() { + return this[Internal].url.search; + } + set search(value) { + this[Internal].url.search = value; + } + get password() { + return this[Internal].url.password; + } + set password(value) { + this[Internal].url.password = value; + } + get username() { + return this[Internal].url.username; + } + set username(value) { + this[Internal].url.username = value; + } + get basePath() { + return this[Internal].basePath; + } + set basePath(value) { + this[Internal].basePath = value.startsWith('/') ? value : `/${value}`; + } + toString() { + return this.href; + } + toJSON() { + return this.href; + } + [Symbol.for('edge-runtime.inspect.custom')]() { + return { + href: this.href, + origin: this.origin, + protocol: this.protocol, + username: this.username, + password: this.password, + host: this.host, + hostname: this.hostname, + port: this.port, + pathname: this.pathname, + search: this.search, + searchParams: this.searchParams, + hash: this.hash + }; + } + clone() { + return new NextURL(String(this), this[Internal].options); + } +} +}), +"[project]/node_modules/next/dist/server/web/spec-extension/adapters/headers.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + HeadersAdapter: null, + ReadonlyHeadersError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + HeadersAdapter: function() { + return HeadersAdapter; + }, + ReadonlyHeadersError: function() { + return ReadonlyHeadersError; + } +}); +const _reflect = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/adapters/reflect.js [app-route] (ecmascript)"); +class ReadonlyHeadersError extends Error { + constructor(){ + super('Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers'); + } + static callable() { + throw new ReadonlyHeadersError(); + } +} +/** + * Builds the read methods for a sealed view that exposes all of `target`. + */ function createPassThroughMethods(target, sealed) { + return { + get: target.get.bind(target), + has: target.has.bind(target), + getSetCookie: target.getSetCookie.bind(target), + keys: target.keys.bind(target), + values: target.values.bind(target), + entries: target.entries.bind(target), + [Symbol.iterator]: target[Symbol.iterator].bind(target), + // The native method passes the unsealed target as the callback's `parent` + // argument. That is a mutable handle on the underlying headers. Pass the + // sealed view instead. + forEach (callbackfn, thisArg) { + for (const [name, value] of target.entries()){ + callbackfn.call(thisArg, value, name, sealed); + } + } + }; +} +/** + * Builds the read methods for a sealed view that omits the header names matched + * by `isHidden`. + */ function createHidingMethods(target, sealed, isHidden) { + function* entries() { + for (const entry of target.entries()){ + if (!isHidden(entry[0])) { + yield entry; + } + } + } + return { + entries, + [Symbol.iterator]: entries, + get: (name)=>isHidden(name) ? null : target.get(name), + has: (name)=>isHidden(name) ? false : target.has(name), + getSetCookie: ()=>isHidden('set-cookie') ? [] : target.getSetCookie(), + *keys () { + for (const name of target.keys()){ + if (!isHidden(name)) { + yield name; + } + } + }, + *values () { + for (const [, value] of entries()){ + yield value; + } + }, + // The native method passes the unsealed target as the callback's `parent` + // argument. That is a mutable handle on the underlying headers. Pass the + // sealed view instead. + forEach (callbackfn, thisArg) { + for (const [name, value] of entries()){ + callbackfn.call(thisArg, value, name, sealed); + } + } + }; +} +class HeadersAdapter extends Headers { + constructor(headers){ + // We've already overridden the methods that would be called, so we're just + // calling the super constructor to ensure that the instanceof check works. + super(); + this.headers = new Proxy(headers, { + get (target, prop, receiver) { + // Because this is just an object, we expect that all "get" operations + // are for properties. If it's a "get" for a symbol, we'll just return + // the symbol. + if (typeof prop === 'symbol') { + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, return undefined. + if (typeof original === 'undefined') return; + // If the original casing exists, return the value. + return _reflect.ReflectAdapter.get(target, original, receiver); + }, + set (target, prop, value, receiver) { + if (typeof prop === 'symbol') { + return _reflect.ReflectAdapter.set(target, prop, value, receiver); + } + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, use the prop as the key. + return _reflect.ReflectAdapter.set(target, original ?? prop, value, receiver); + }, + has (target, prop) { + if (typeof prop === 'symbol') return _reflect.ReflectAdapter.has(target, prop); + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, return false. + if (typeof original === 'undefined') return false; + // If the original casing exists, return true. + return _reflect.ReflectAdapter.has(target, original); + }, + deleteProperty (target, prop) { + if (typeof prop === 'symbol') return _reflect.ReflectAdapter.deleteProperty(target, prop); + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, return true. + if (typeof original === 'undefined') return true; + // If the original casing exists, delete the property. + return _reflect.ReflectAdapter.deleteProperty(target, original); + } + }); + } + /** + * Seals a Headers instance to prevent modification by throwing an error when + * any mutating method is called. + * + * The sealed view stays live. Later writes to `headers` remain visible + * through it. + * + * `hidden` omits the given header names from every read operation (`get`, + * `has`, `getSetCookie`, `forEach`, and iteration). The names must be + * lowercase. The underlying headers are neither copied nor mutated, so hidden + * headers remain available to the framework. + */ static seal(headers, hidden) { + const isHidden = hidden && hidden.size > 0 ? (name)=>hidden.has(name.toLowerCase()) : null; + // The methods are built once per sealed view and reused, so repeated access + // returns the same function instead of a fresh closure. They are assigned + // after the proxy exists because `forEach` hands the proxy to its callback. + // Creating the proxy runs no trap, so nothing can read them before then. + let methods; + const sealed = new Proxy(headers, { + get (target, prop, receiver) { + switch(prop){ + case 'append': + case 'delete': + case 'set': + return ReadonlyHeadersError.callable; + case Symbol.iterator: + return methods[Symbol.iterator]; + case 'get': + case 'has': + case 'getSetCookie': + case 'keys': + case 'values': + case 'entries': + case 'forEach': + return methods[prop]; + default: + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + } + }); + methods = isHidden ? createHidingMethods(headers, sealed, isHidden) : createPassThroughMethods(headers, sealed); + return sealed; + } + /** + * @param headers + * @returns A fresh object identity backed by the original value + */ static fresh(headers) { + return new Proxy(headers, { + get (target, prop, receiver) { + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + }); + } + /** + * Merges a header value into a string. This stores multiple values as an + * array, so we need to merge them into a string. + * + * @param value a header value + * @returns a merged header value (a string) + */ merge(value) { + if (Array.isArray(value)) return value.join(', '); + return value; + } + /** + * Creates a Headers instance from a plain object or a Headers instance. + * + * @param headers a plain object or a Headers instance + * @returns a headers instance + */ static from(headers) { + if (headers instanceof Headers) return headers; + return new HeadersAdapter(headers); + } + append(name, value) { + const existing = this.headers[name]; + if (typeof existing === 'string') { + this.headers[name] = [ + existing, + value + ]; + } else if (Array.isArray(existing)) { + existing.push(value); + } else { + this.headers[name] = value; + } + } + delete(name) { + delete this.headers[name]; + } + get(name) { + const value = this.headers[name]; + if (typeof value !== 'undefined') return this.merge(value); + return null; + } + has(name) { + return typeof this.headers[name] !== 'undefined'; + } + set(name, value) { + this.headers[name] = value; + } + forEach(callbackfn, thisArg) { + for (const [name, value] of this.entries()){ + callbackfn.call(thisArg, value, name, this); + } + } + *entries() { + for (const key of Object.keys(this.headers)){ + const name = key.toLowerCase(); + // We assert here that this is a string because we got it from the + // Object.keys() call above. + const value = this.get(name); + yield [ + name, + value + ]; + } + } + *keys() { + for (const key of Object.keys(this.headers)){ + const name = key.toLowerCase(); + yield name; + } + } + *values() { + for (const key of Object.keys(this.headers)){ + // We assert here that this is a string because we got it from the + // Object.keys() call above. + const value = this.get(key); + yield value; + } + } + [Symbol.iterator]() { + return this.entries(); + } +} +}), +"[project]/node_modules/next/dist/server/web/spec-extension/adapters/reflect.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "ReflectAdapter", { + enumerable: true, + get: function() { + return ReflectAdapter; + } +}); +class ReflectAdapter { + static get(target, prop, receiver) { + const value = Reflect.get(target, prop, receiver); + if (typeof value === 'function') { + return value.bind(target); + } + return value; + } + static set(target, prop, value, receiver) { + return Reflect.set(target, prop, value, receiver); + } + static has(target, prop) { + return Reflect.has(target, prop); + } + static deleteProperty(target, prop) { + return Reflect.deleteProperty(target, prop); + } +} +}), +"[project]/node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + MutableRequestCookiesAdapter: null, + ReadonlyRequestCookiesError: null, + RequestCookiesAdapter: null, + appendMutableCookies: null, + areCookiesMutableInCurrentPhase: null, + createCookiesWithMutableAccessCheck: null, + getModifiedCookieValues: null, + responseCookiesToRequestCookies: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + MutableRequestCookiesAdapter: function() { + return MutableRequestCookiesAdapter; + }, + ReadonlyRequestCookiesError: function() { + return ReadonlyRequestCookiesError; + }, + RequestCookiesAdapter: function() { + return RequestCookiesAdapter; + }, + appendMutableCookies: function() { + return appendMutableCookies; + }, + areCookiesMutableInCurrentPhase: function() { + return areCookiesMutableInCurrentPhase; + }, + createCookiesWithMutableAccessCheck: function() { + return createCookiesWithMutableAccessCheck; + }, + getModifiedCookieValues: function() { + return getModifiedCookieValues; + }, + responseCookiesToRequestCookies: function() { + return responseCookiesToRequestCookies; + } +}); +const _cookies = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/cookies.js [app-route] (ecmascript)"); +const _reflect = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/adapters/reflect.js [app-route] (ecmascript)"); +const _workasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)"); +const _actionrevalidationkind = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/action-revalidation-kind.js [app-route] (ecmascript)"); +class ReadonlyRequestCookiesError extends Error { + constructor(){ + super('Cookies can only be modified in a Server Action or Route Handler. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options'); + } + static callable() { + throw new ReadonlyRequestCookiesError(); + } +} +class RequestCookiesAdapter { + static seal(cookies) { + return new Proxy(cookies, { + get (target, prop, receiver) { + switch(prop){ + case 'clear': + case 'delete': + case 'set': + return ReadonlyRequestCookiesError.callable; + default: + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + } + }); + } + /** + * @param cookies + * @returns A fresh object identity backed by the original value + */ static fresh(cookies) { + return new Proxy(cookies, { + get (target, prop, receiver) { + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + }); + } +} +const SYMBOL_MODIFY_COOKIE_VALUES = Symbol.for('next.mutated.cookies'); +function getModifiedCookieValues(cookies) { + const modified = cookies[SYMBOL_MODIFY_COOKIE_VALUES]; + if (!modified || !Array.isArray(modified) || modified.length === 0) { + return []; + } + return modified; +} +function appendMutableCookies(headers, mutableCookies) { + const modifiedCookieValues = getModifiedCookieValues(mutableCookies); + if (modifiedCookieValues.length === 0) { + return false; + } + // Return a new response that extends the response with + // the modified cookies as fallbacks. `res` cookies + // will still take precedence. + const resCookies = new _cookies.ResponseCookies(headers); + const returnedCookies = resCookies.getAll(); + // Set the modified cookies as fallbacks. + for (const cookie of modifiedCookieValues){ + resCookies.set(cookie); + } + // Set the original cookies as the final values. + for (const cookie of returnedCookies){ + resCookies.set(cookie); + } + return true; +} +class MutableRequestCookiesAdapter { + static wrap(cookies, onUpdateCookies) { + const responseCookies = new _cookies.ResponseCookies(new Headers()); + for (const cookie of cookies.getAll()){ + responseCookies.set(cookie); + } + let modifiedValues = []; + const modifiedCookies = new Set(); + const updateResponseCookies = ()=>{ + // TODO-APP: change method of getting workStore + const workStore = _workasyncstorageexternal.workAsyncStorage.getStore(); + if (workStore) { + workStore.pathWasRevalidated = _actionrevalidationkind.ActionDidRevalidateStaticAndDynamic; + } + const allCookies = responseCookies.getAll(); + modifiedValues = allCookies.filter((c)=>modifiedCookies.has(c.name)); + if (onUpdateCookies) { + const serializedCookies = []; + for (const cookie of modifiedValues){ + const tempCookies = new _cookies.ResponseCookies(new Headers()); + tempCookies.set(cookie); + serializedCookies.push(tempCookies.toString()); + } + onUpdateCookies(serializedCookies); + } + }; + const wrappedCookies = new Proxy(responseCookies, { + get (target, prop, receiver) { + switch(prop){ + // A special symbol to get the modified cookie values + case SYMBOL_MODIFY_COOKIE_VALUES: + return modifiedValues; + // TODO: Throw error if trying to set a cookie after the response + // headers have been set. + case 'delete': + return function(...args) { + modifiedCookies.add(typeof args[0] === 'string' ? args[0] : args[0].name); + try { + target.delete(...args); + return wrappedCookies; + } finally{ + updateResponseCookies(); + } + }; + case 'set': + return function(...args) { + modifiedCookies.add(typeof args[0] === 'string' ? args[0] : args[0].name); + try { + target.set(...args); + return wrappedCookies; + } finally{ + updateResponseCookies(); + } + }; + default: + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + } + }); + return wrappedCookies; + } +} +function createCookiesWithMutableAccessCheck(requestStore) { + const wrappedCookies = new Proxy(requestStore.mutableCookies, { + get (target, prop, receiver) { + switch(prop){ + case 'delete': + return function(...args) { + ensureCookiesAreStillMutable(requestStore, 'cookies().delete'); + target.delete(...args); + return wrappedCookies; + }; + case 'set': + return function(...args) { + ensureCookiesAreStillMutable(requestStore, 'cookies().set'); + target.set(...args); + return wrappedCookies; + }; + default: + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + } + }); + return wrappedCookies; +} +function areCookiesMutableInCurrentPhase(requestStore) { + return requestStore.phase === 'action'; +} +/** Ensure that cookies() starts throwing on mutation + * if we changed phases and can no longer mutate. + * + * This can happen when going: + * 'render' -> 'after' + * 'action' -> 'render' + * */ function ensureCookiesAreStillMutable(requestStore, _callingExpression) { + if (!areCookiesMutableInCurrentPhase(requestStore)) { + // TODO: maybe we can give a more precise error message based on callingExpression? + throw new ReadonlyRequestCookiesError(); + } +} +function responseCookiesToRequestCookies(responseCookies) { + const requestCookies = new _cookies.RequestCookies(new Headers()); + for (const cookie of responseCookies.getAll()){ + requestCookies.set(cookie); + } + return requestCookies; +} +}), +"[project]/node_modules/next/dist/server/web/spec-extension/cookies.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + RequestCookies: null, + ResponseCookies: null, + stringifyCookie: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + RequestCookies: function() { + return _cookies.RequestCookies; + }, + ResponseCookies: function() { + return _cookies.ResponseCookies; + }, + stringifyCookie: function() { + return _cookies.stringifyCookie; + } +}); +const _cookies = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js [app-route] (ecmascript)"); +}), +"[project]/node_modules/next/dist/server/web/spec-extension/image-response.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +/** + * @deprecated ImageResponse moved from "next/server" to "next/og" since Next.js 14, please import from "next/og" instead. + * Migration with codemods: https://nextjs.org/docs/app/building-your-application/upgrading/codemods#next-og-import + */ Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "ImageResponse", { + enumerable: true, + get: function() { + return ImageResponse; + } +}); +function ImageResponse() { + throw new Error('ImageResponse moved from "next/server" to "next/og" since Next.js 14, please import from "next/og" instead'); +} +}), +"[project]/node_modules/next/dist/server/web/spec-extension/request.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + INTERNALS: null, + NextRequest: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + INTERNALS: function() { + return INTERNALS; + }, + NextRequest: function() { + return NextRequest; + } +}); +const _nexturl = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/next-url.js [app-route] (ecmascript)"); +const _utils = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/utils.js [app-route] (ecmascript)"); +const _error = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/error.js [app-route] (ecmascript)"); +const _cookies = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/cookies.js [app-route] (ecmascript)"); +const INTERNALS = Symbol('internal request'); +class NextRequest extends Request { + constructor(input, init = {}){ + const url = typeof input !== 'string' && 'url' in input ? input.url : String(input); + (0, _utils.validateURL)(url); + // node Request instance requires duplex option when a body + // is present or it errors, we don't handle this for + // Request being passed in since it would have already + // errored if this wasn't configured + if ("TURBOPACK compile-time truthy", 1) { + if (init.body && init.duplex !== 'half') { + init.duplex = 'half'; + } + } + if (input instanceof Request) super(input, init); + else super(url, init); + const nextUrl = new _nexturl.NextURL(url, { + headers: (0, _utils.toNodeOutgoingHttpHeaders)(this.headers), + nextConfig: init.nextConfig + }); + this[INTERNALS] = { + cookies: new _cookies.RequestCookies(this.headers), + nextUrl, + url: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : nextUrl.toString() + }; + } + [Symbol.for('edge-runtime.inspect.custom')]() { + return { + cookies: this.cookies, + nextUrl: this.nextUrl, + url: this.url, + // rest of props come from Request + bodyUsed: this.bodyUsed, + cache: this.cache, + credentials: this.credentials, + destination: this.destination, + headers: Object.fromEntries(this.headers), + integrity: this.integrity, + keepalive: this.keepalive, + method: this.method, + mode: this.mode, + redirect: this.redirect, + referrer: this.referrer, + referrerPolicy: this.referrerPolicy, + signal: this.signal + }; + } + get cookies() { + return this[INTERNALS].cookies; + } + get nextUrl() { + return this[INTERNALS].nextUrl; + } + /** + * @deprecated + * `page` has been deprecated in favour of `URLPattern`. + * Read more: https://nextjs.org/docs/messages/middleware-request-page + */ get page() { + throw new _error.RemovedPageError(); + } + /** + * @deprecated + * `ua` has been removed in favour of \`userAgent\` function. + * Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent + */ get ua() { + throw new _error.RemovedUAError(); + } + get url() { + return this[INTERNALS].url; + } +} +}), +"[project]/node_modules/next/dist/server/web/spec-extension/response.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "NextResponse", { + enumerable: true, + get: function() { + return NextResponse; + } +}); +const _cookies = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/cookies.js [app-route] (ecmascript)"); +const _nexturl = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/next-url.js [app-route] (ecmascript)"); +const _utils = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/utils.js [app-route] (ecmascript)"); +const _reflect = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/adapters/reflect.js [app-route] (ecmascript)"); +const _cookies1 = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/cookies.js [app-route] (ecmascript)"); +const INTERNALS = Symbol('internal response'); +const REDIRECTS = new Set([ + 301, + 302, + 303, + 307, + 308 +]); +function handleMiddlewareField(init, headers) { + var _init_request; + if (init == null ? void 0 : (_init_request = init.request) == null ? void 0 : _init_request.headers) { + if (!(init.request.headers instanceof Headers)) { + throw new Error('request.headers must be an instance of Headers'); + } + const keys = []; + for (const [key, value] of init.request.headers){ + headers.set('x-middleware-request-' + key, value); + keys.push(key); + } + headers.set('x-middleware-override-headers', keys.join(',')); + } +} +class NextResponse extends Response { + constructor(body, init = {}){ + super(body, init); + const headers = this.headers; + const cookies = new _cookies1.ResponseCookies(headers); + const cookiesProxy = new Proxy(cookies, { + get (target, prop, receiver) { + switch(prop){ + case 'delete': + case 'set': + { + return (...args)=>{ + const result = Reflect.apply(target[prop], target, args); + const newHeaders = new Headers(headers); + if (result instanceof _cookies1.ResponseCookies) { + headers.set('x-middleware-set-cookie', result.getAll().map((cookie)=>(0, _cookies.stringifyCookie)(cookie)).join(',')); + } + handleMiddlewareField(init, newHeaders); + return result; + }; + } + default: + return _reflect.ReflectAdapter.get(target, prop, receiver); + } + } + }); + this[INTERNALS] = { + cookies: cookiesProxy, + url: init.url ? new _nexturl.NextURL(init.url, { + headers: (0, _utils.toNodeOutgoingHttpHeaders)(headers), + nextConfig: init.nextConfig + }) : undefined + }; + } + [Symbol.for('edge-runtime.inspect.custom')]() { + return { + cookies: this.cookies, + url: this.url, + // rest of props come from Response + body: this.body, + bodyUsed: this.bodyUsed, + headers: Object.fromEntries(this.headers), + ok: this.ok, + redirected: this.redirected, + status: this.status, + statusText: this.statusText, + type: this.type + }; + } + get cookies() { + return this[INTERNALS].cookies; + } + static json(body, init) { + const response = Response.json(body, init); + return new NextResponse(response.body, response); + } + static redirect(url, init) { + const status = typeof init === 'number' ? init : (init == null ? void 0 : init.status) ?? 307; + if (!REDIRECTS.has(status)) { + throw new RangeError('Failed to execute "redirect" on "response": Invalid status code'); + } + const initObj = typeof init === 'object' ? init : {}; + const headers = new Headers(initObj == null ? void 0 : initObj.headers); + headers.set('Location', (0, _utils.validateURL)(url)); + return new NextResponse(null, { + ...initObj, + headers, + status + }); + } + static rewrite(destination, init) { + const headers = new Headers(init == null ? void 0 : init.headers); + headers.set('x-middleware-rewrite', (0, _utils.validateURL)(destination)); + handleMiddlewareField(init, headers); + return new NextResponse(null, { + ...init, + headers + }); + } + static next(init) { + const headers = new Headers(init == null ? void 0 : init.headers); + headers.set('x-middleware-next', '1'); + handleMiddlewareField(init, headers); + return new NextResponse(null, { + ...init, + headers + }); + } +} +}), +"[project]/node_modules/next/dist/server/web/spec-extension/url-pattern.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "URLPattern", { + enumerable: true, + get: function() { + return GlobalURLPattern; + } +}); +const GlobalURLPattern = typeof URLPattern === 'undefined' ? undefined : URLPattern; +}), +"[project]/node_modules/next/dist/server/web/spec-extension/user-agent.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + isBot: null, + userAgent: null, + userAgentFromString: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + isBot: function() { + return isBot; + }, + userAgent: function() { + return userAgent; + }, + userAgentFromString: function() { + return userAgentFromString; + } +}); +const _uaparserjs = /*#__PURE__*/ _interop_require_default(__turbopack_context__.r("[project]/node_modules/next/dist/compiled/ua-parser-js/ua-parser.js [app-route] (ecmascript)")); +function _interop_require_default(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} +function isBot(input) { + return /Googlebot|Mediapartners-Google|AdsBot-Google|googleweblight|Storebot-Google|Google-PageRenderer|Google-InspectionTool|Bingbot|BingPreview|Slurp|DuckDuckBot|baiduspider|yandex|sogou|LinkedInBot|bitlybot|tumblr|vkShare|quora link preview|facebookexternalhit|facebookcatalog|Twitterbot|applebot|redditbot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|ia_archiver|GPTBot/i.test(input); +} +function userAgentFromString(input) { + return { + ...(0, _uaparserjs.default)(input), + isBot: input === undefined ? false : isBot(input) + }; +} +function userAgent({ headers }) { + return userAgentFromString(headers.get('user-agent') || undefined); +} +}), +"[project]/node_modules/next/dist/server/web/utils.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + fromNodeOutgoingHttpHeaders: null, + normalizeNextQueryParam: null, + splitCookiesString: null, + toNodeOutgoingHttpHeaders: null, + validateURL: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + fromNodeOutgoingHttpHeaders: function() { + return fromNodeOutgoingHttpHeaders; + }, + normalizeNextQueryParam: function() { + return normalizeNextQueryParam; + }, + splitCookiesString: function() { + return splitCookiesString; + }, + toNodeOutgoingHttpHeaders: function() { + return toNodeOutgoingHttpHeaders; + }, + validateURL: function() { + return validateURL; + } +}); +const _constants = __turbopack_context__.r("[project]/node_modules/next/dist/lib/constants.js [app-route] (ecmascript)"); +function fromNodeOutgoingHttpHeaders(nodeHeaders) { + const headers = new Headers(); + for (let [key, value] of Object.entries(nodeHeaders)){ + const values = Array.isArray(value) ? value : [ + value + ]; + for (let v of values){ + if (typeof v === 'undefined') continue; + if (typeof v === 'number') { + v = v.toString(); + } + headers.append(key, v); + } + } + return headers; +} +function splitCookiesString(cookiesString) { + var cookiesStrings = []; + var pos = 0; + var start; + var ch; + var lastComma; + var nextStart; + var cookiesSeparatorFound; + function skipWhitespace() { + while(pos < cookiesString.length && /\s/.test(cookiesString.charAt(pos))){ + pos += 1; + } + return pos < cookiesString.length; + } + function notSpecialChar() { + ch = cookiesString.charAt(pos); + return ch !== '=' && ch !== ';' && ch !== ','; + } + while(pos < cookiesString.length){ + start = pos; + cookiesSeparatorFound = false; + while(skipWhitespace()){ + ch = cookiesString.charAt(pos); + if (ch === ',') { + // ',' is a cookie separator if we have later first '=', not ';' or ',' + lastComma = pos; + pos += 1; + skipWhitespace(); + nextStart = pos; + while(pos < cookiesString.length && notSpecialChar()){ + pos += 1; + } + // currently special character + if (pos < cookiesString.length && cookiesString.charAt(pos) === '=') { + // we found cookies separator + cookiesSeparatorFound = true; + // pos is inside the next cookie, so back up and return it. + pos = nextStart; + cookiesStrings.push(cookiesString.substring(start, lastComma)); + start = pos; + } else { + // in param ',' or param separator ';', + // we continue from that comma + pos = lastComma + 1; + } + } else { + pos += 1; + } + } + if (!cookiesSeparatorFound || pos >= cookiesString.length) { + cookiesStrings.push(cookiesString.substring(start, cookiesString.length)); + } + } + return cookiesStrings; +} +function toNodeOutgoingHttpHeaders(headers) { + const nodeHeaders = {}; + const cookies = []; + if (headers) { + for (const [key, value] of headers.entries()){ + if (key.toLowerCase() === 'set-cookie') { + // We may have gotten a comma joined string of cookies, or multiple + // set-cookie headers. We need to merge them into one header array + // to represent all the cookies. + cookies.push(...splitCookiesString(value)); + nodeHeaders[key] = cookies.length === 1 ? cookies[0] : cookies; + } else { + nodeHeaders[key] = value; + } + } + } + return nodeHeaders; +} +function validateURL(url) { + try { + return String(new URL(String(url))); + } catch (error) { + throw new Error(`URL is malformed "${String(url)}". Please use only absolute URLs - https://nextjs.org/docs/messages/middleware-relative-urls`, { + cause: error + }); + } +} +function normalizeNextQueryParam(key) { + const prefixes = [ + _constants.NEXT_QUERY_PARAM_PREFIX, + _constants.NEXT_INTERCEPTION_MARKER_PREFIX + ]; + for (const prefix of prefixes){ + if (key !== prefix && key.startsWith(prefix)) { + return key.substring(prefix.length); + } + } + return null; +} +}), +"[project]/node_modules/next/dist/shared/lib/action-revalidation-kind.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + ActionDidNotRevalidate: null, + ActionDidRevalidateDynamicOnly: null, + ActionDidRevalidateStaticAndDynamic: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + ActionDidNotRevalidate: function() { + return ActionDidNotRevalidate; + }, + ActionDidRevalidateDynamicOnly: function() { + return ActionDidRevalidateDynamicOnly; + }, + ActionDidRevalidateStaticAndDynamic: function() { + return ActionDidRevalidateStaticAndDynamic; + } +}); +const ActionDidNotRevalidate = 0; +const ActionDidRevalidateStaticAndDynamic = 1; +const ActionDidRevalidateDynamicOnly = 2; +}), +"[project]/node_modules/next/dist/shared/lib/get-hostname.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getHostname", { + enumerable: true, + get: function() { + return getHostname; + } +}); +function getHostname(parsed, headers) { + // Get the hostname from the headers if it exists, otherwise use the parsed + // hostname. + let hostname; + if (headers?.host && !Array.isArray(headers.host)) { + hostname = headers.host.toString().split(':', 1)[0]; + } else if (parsed.hostname) { + hostname = parsed.hostname; + } else return; + return hostname.toLowerCase(); +} +}), +"[project]/node_modules/next/dist/shared/lib/i18n/detect-domain-locale.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "detectDomainLocale", { + enumerable: true, + get: function() { + return detectDomainLocale; + } +}); +function detectDomainLocale(domainItems, hostname, detectedLocale) { + if (!domainItems) return; + if (detectedLocale) { + detectedLocale = detectedLocale.toLowerCase(); + } + for (const item of domainItems){ + // remove port if present + const domainHostname = item.domain?.split(':', 1)[0].toLowerCase(); + if (hostname === domainHostname || detectedLocale === item.defaultLocale.toLowerCase() || item.locales?.some((locale)=>locale.toLowerCase() === detectedLocale)) { + return item; + } + } +} +}), +"[project]/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "normalizeLocalePath", { + enumerable: true, + get: function() { + return normalizeLocalePath; + } +}); +/** + * A cache of lowercased locales for each list of locales. This is stored as a + * WeakMap so if the locales are garbage collected, the cache entry will be + * removed as well. + */ const cache = new WeakMap(); +function normalizeLocalePath(pathname, locales) { + // If locales is undefined, return the pathname as is. + if (!locales) return { + pathname + }; + // Get the cached lowercased locales or create a new cache entry. + let lowercasedLocales = cache.get(locales); + if (!lowercasedLocales) { + lowercasedLocales = locales.map((locale)=>locale.toLowerCase()); + cache.set(locales, lowercasedLocales); + } + let detectedLocale; + // The first segment will be empty, because it has a leading `/`. If + // there is no further segment, there is no locale (or it's the default). + const segments = pathname.split('/', 2); + // If there's no second segment (ie, the pathname is just `/`), there's no + // locale. + if (!segments[1]) return { + pathname + }; + // The second segment will contain the locale part if any. + const segment = segments[1].toLowerCase(); + // See if the segment matches one of the locales. If it doesn't, there is + // no locale (or it's the default). + const index = lowercasedLocales.indexOf(segment); + if (index < 0) return { + pathname + }; + // Return the case-sensitive locale. + detectedLocale = locales[index]; + // Remove the `/${locale}` part of the pathname. + pathname = pathname.slice(detectedLocale.length + 1) || '/'; + return { + pathname, + detectedLocale + }; +} +}), +"[project]/node_modules/next/dist/shared/lib/instant-messages.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createLinkPrefetchPartialError: null, + createUnrenderedSegmentError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createLinkPrefetchPartialError: function() { + return createLinkPrefetchPartialError; + }, + createUnrenderedSegmentError: function() { + return createUnrenderedSegmentError; + } +}); +function createUnrenderedSegmentError(route, missingFiles) { + let message = `Route "${route}": Could not validate that a segment in your UI has instant navigation.`; + if (missingFiles.length > 0) { + const label = missingFiles.length === 1 ? 'Dropped segment' : 'Dropped segments'; + message += `\n\nThis segment was dropped from rendering. Issues that would prevent instant navigation will go undetected.` + `\n\n${label}:\n${missingFiles.map((p)=>` ${p}`).join('\n')}` + `\n\nWays to fix this:` + `\n - [render] Render the dropped segment` + `\n - [ignore] Set \`export const instant = false\` to opt the dropped segment out of instant-navigation validation` + `\n\nLearn more: https://nextjs.org/docs/messages/instant-unrendered-segment`; + } + return new Error(message); +} +function createLinkPrefetchPartialError(pathname) { + return new Error(`Next.js encountered dynamic data during prefetching for "${pathname}".\n\n` + `This will lead to slower, more expensive prefetches.\n\n` + `Ways to fix this:\n` + ` - [upgrade] Opt into Partial Prefetching by exporting \`const prefetch = 'partial'\` from the page or layout, or by setting \`partialPrefetching: true\` in next.config to opt the whole app in\n` + ` - [disable] Remove \`prefetch={true}\` from the to use the default prefetch\n` + ` - [ignore] Set \`export const instant = false\` to opt the route out of instant-navigation validation\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-link-prefetch-partial`); +} +}), +"[project]/node_modules/next/dist/shared/lib/invariant-error.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "InvariantError", { + enumerable: true, + get: function() { + return InvariantError; + } +}); +class InvariantError extends Error { + constructor(message, options){ + super(`Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`, options); + this.name = 'InvariantError'; + } +} +}), +"[project]/node_modules/next/dist/shared/lib/lazy-dynamic/react-browser-bailout.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +// This module is bundled separately into user code and the precompiled App +// Router runtime. Use the global symbol registry so both copies recognize the +// same browser bailout reason. +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + createReactBrowserBailoutReason: null, + getReactBrowserBailoutReason: null, + isNextBrowserBailoutError: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + createReactBrowserBailoutReason: function() { + return createReactBrowserBailoutReason; + }, + getReactBrowserBailoutReason: function() { + return getReactBrowserBailoutReason; + }, + isNextBrowserBailoutError: function() { + return isNextBrowserBailoutError; + } +}); +const REACT_BROWSER_BAILOUT_REASON = Symbol.for('next.browser-bailout-reason'); +function createReactBrowserBailoutReason(reason) { + return { + $$typeof: REACT_BROWSER_BAILOUT_REASON, + reason + }; +} +function getReactBrowserBailoutReason(error) { + const cause = error?.cause; + return cause?.$$typeof === REACT_BROWSER_BAILOUT_REASON ? cause.reason : undefined; +} +function isNextBrowserBailoutError(error) { + return getReactBrowserBailoutReason(error) !== undefined; +} +}), +"[project]/node_modules/next/dist/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "createPromiseWithResolvers", { + enumerable: true, + get: function() { + return createPromiseWithResolvers; + } +}); +function createPromiseWithResolvers() { + // Shim of Stage 4 Promise.withResolvers proposal + let resolve; + let reject; + const promise = new Promise((res, rej)=>{ + resolve = res; + reject = rej; + }); + return { + resolve: resolve, + reject: reject, + promise + }; +} +}), +"[project]/node_modules/next/dist/shared/lib/router/utils/add-locale.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "addLocale", { + enumerable: true, + get: function() { + return addLocale; + } +}); +const _addpathprefix = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js [app-route] (ecmascript)"); +const _pathhasprefix = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js [app-route] (ecmascript)"); +function addLocale(path, locale, defaultLocale, ignorePrefix) { + // If no locale was given or the locale is the default locale, we don't need + // to prefix the path. + if (!locale || locale === defaultLocale) return path; + const lower = path.toLowerCase(); + // If the path is an API path or the path already has the locale prefix, we + // don't need to prefix the path. + if (!ignorePrefix) { + if ((0, _pathhasprefix.pathHasPrefix)(lower, '/api')) return path; + if ((0, _pathhasprefix.pathHasPrefix)(lower, `/${locale.toLowerCase()}`)) return path; + } + // Add the locale prefix to the path. + return (0, _addpathprefix.addPathPrefix)(path, `/${locale}`); +} +}), +"[project]/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "addPathPrefix", { + enumerable: true, + get: function() { + return addPathPrefix; + } +}); +const _parsepath = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/parse-path.js [app-route] (ecmascript)"); +function addPathPrefix(path, prefix) { + if (!path.startsWith('/') || !prefix) { + return path; + } + const { pathname, query, hash } = (0, _parsepath.parsePath)(path); + return `${prefix}${pathname}${query}${hash}`; +} +}), +"[project]/node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "addPathSuffix", { + enumerable: true, + get: function() { + return addPathSuffix; + } +}); +const _parsepath = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/parse-path.js [app-route] (ecmascript)"); +function addPathSuffix(path, suffix) { + if (!path.startsWith('/') || !suffix) { + return path; + } + const { pathname, query, hash } = (0, _parsepath.parsePath)(path); + return `${pathname}${suffix}${query}${hash}`; +} +}), +"[project]/node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "formatNextPathnameInfo", { + enumerable: true, + get: function() { + return formatNextPathnameInfo; + } +}); +const _removetrailingslash = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js [app-route] (ecmascript)"); +const _addpathprefix = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js [app-route] (ecmascript)"); +const _addpathsuffix = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js [app-route] (ecmascript)"); +const _addlocale = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/add-locale.js [app-route] (ecmascript)"); +function formatNextPathnameInfo(info) { + let pathname = (0, _addlocale.addLocale)(info.pathname, info.locale, info.buildId ? undefined : info.defaultLocale, info.ignorePrefix); + if (info.buildId || !info.trailingSlash) { + pathname = (0, _removetrailingslash.removeTrailingSlash)(pathname); + } + if (info.buildId) { + pathname = (0, _addpathsuffix.addPathSuffix)((0, _addpathprefix.addPathPrefix)(pathname, `/_next/data/${info.buildId}`), info.pathname === '/' ? 'index.json' : '.json'); + } + pathname = (0, _addpathprefix.addPathPrefix)(pathname, info.basePath); + return !info.buildId && info.trailingSlash ? !pathname.endsWith('/') ? (0, _addpathsuffix.addPathSuffix)(pathname, '/') : pathname : (0, _removetrailingslash.removeTrailingSlash)(pathname); +} +}), +"[project]/node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "getNextPathnameInfo", { + enumerable: true, + get: function() { + return getNextPathnameInfo; + } +}); +const _normalizelocalepath = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js [app-route] (ecmascript)"); +const _removepathprefix = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js [app-route] (ecmascript)"); +const _pathhasprefix = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js [app-route] (ecmascript)"); +function getNextPathnameInfo(pathname, options) { + const { basePath, i18n, trailingSlash } = options.nextConfig ?? {}; + const info = { + pathname, + trailingSlash: pathname !== '/' ? pathname.endsWith('/') : trailingSlash + }; + if (basePath && (0, _pathhasprefix.pathHasPrefix)(info.pathname, basePath)) { + info.pathname = (0, _removepathprefix.removePathPrefix)(info.pathname, basePath); + info.basePath = basePath; + } + let pathnameNoDataPrefix = info.pathname; + if (info.pathname.startsWith('/_next/data/') && info.pathname.endsWith('.json')) { + const paths = info.pathname.replace(/^\/_next\/data\//, '').replace(/\.json$/, '').split('/'); + const buildId = paths[0]; + info.buildId = buildId; + pathnameNoDataPrefix = paths[1] !== 'index' ? `/${paths.slice(1).join('/')}` : '/'; + // update pathname with normalized if enabled although + // we use normalized to populate locale info still + if (options.parseData === true) { + info.pathname = pathnameNoDataPrefix; + } + } + // If provided, use the locale route normalizer to detect the locale instead + // of the function below. + if (i18n) { + let result = options.i18nProvider ? options.i18nProvider.analyze(info.pathname) : (0, _normalizelocalepath.normalizeLocalePath)(info.pathname, i18n.locales); + info.locale = result.detectedLocale; + info.pathname = result.pathname ?? info.pathname; + if (!result.detectedLocale && info.buildId) { + result = options.i18nProvider ? options.i18nProvider.analyze(pathnameNoDataPrefix) : (0, _normalizelocalepath.normalizeLocalePath)(pathnameNoDataPrefix, i18n.locales); + if (result.detectedLocale) { + info.locale = result.detectedLocale; + } + } + } + return info; +} +}), +"[project]/node_modules/next/dist/shared/lib/router/utils/parse-loader-tree.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "parseLoaderTree", { + enumerable: true, + get: function() { + return parseLoaderTree; + } +}); +const _segment = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/segment.js [app-route] (ecmascript)"); +function parseLoaderTree(tree) { + const [segment, parallelRoutes, modules, staticSiblings] = tree; + const { layout, template } = modules; + let { page } = modules; + // a __DEFAULT__ segment means that this route didn't match any of the + // segments in the route, so we should use the default page + page = segment === _segment.DEFAULT_SEGMENT_KEY ? modules.defaultPage : page; + const conventionPath = layout?.[1] || template?.[1] || page?.[1]; + return { + page, + segment, + modules, + /* it can be either layout / template / page */ conventionPath, + parallelRoutes, + staticSiblings + }; +} +}), +"[project]/node_modules/next/dist/shared/lib/router/utils/parse-path.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +/** + * Given a path this function will find the pathname, query and hash and return + * them. This is useful to parse full paths on the client side. + * @param path A path to parse e.g. /foo/bar?id=1#hash + */ Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "parsePath", { + enumerable: true, + get: function() { + return parsePath; + } +}); +function parsePath(path) { + const hashIndex = path.indexOf('#'); + const queryIndex = path.indexOf('?'); + const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex); + if (hasQuery || hashIndex > -1) { + return { + pathname: path.substring(0, hasQuery ? queryIndex : hashIndex), + query: hasQuery ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined) : '', + hash: hashIndex > -1 ? path.slice(hashIndex) : '' + }; + } + return { + pathname: path, + query: '', + hash: '' + }; +} +}), +"[project]/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "pathHasPrefix", { + enumerable: true, + get: function() { + return pathHasPrefix; + } +}); +const _parsepath = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/parse-path.js [app-route] (ecmascript)"); +function pathHasPrefix(path, prefix) { + if (typeof path !== 'string') { + return false; + } + const { pathname } = (0, _parsepath.parsePath)(path); + return pathname === prefix || pathname.startsWith(prefix + '/'); +} +}), +"[project]/node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "removePathPrefix", { + enumerable: true, + get: function() { + return removePathPrefix; + } +}); +const _pathhasprefix = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js [app-route] (ecmascript)"); +function removePathPrefix(path, prefix) { + // If the path doesn't start with the prefix we can return it as is. This + // protects us from situations where the prefix is a substring of the path + // prefix such as: + // + // For prefix: /blog + // + // /blog -> true + // /blog/ -> true + // /blog/1 -> true + // /blogging -> false + // /blogging/ -> false + // /blogging/1 -> false + if (!(0, _pathhasprefix.pathHasPrefix)(path, prefix)) { + return path; + } + // Remove the prefix from the path via slicing. + const withoutPrefix = path.slice(prefix.length); + // If the path without the prefix starts with a `/` we can return it as is. + if (withoutPrefix.startsWith('/')) { + return withoutPrefix; + } + // If the path without the prefix doesn't start with a `/` we need to add it + // back to the path to make sure it's a valid path. + return `/${withoutPrefix}`; +} +}), +"[project]/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +/** + * Removes the trailing slash for a given route or page path. Examples: + * - `/foo/bar/` -> `/foo/bar` + * - `/foo/bar` -> `/foo/bar` + * + * Uses charCodeAt (47 === '/') instead of regex to avoid the overhead of + * compiling and executing a RegExp on every call (~3-5x faster). + */ Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "removeTrailingSlash", { + enumerable: true, + get: function() { + return removeTrailingSlash; + } +}); +function removeTrailingSlash(route) { + return route.charCodeAt(route.length - 1) === 47 && route.length > 1 ? route.slice(0, -1) : route; +} +}), +"[project]/node_modules/next/dist/shared/lib/segment.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +0 && (module.exports = { + DEFAULT_SEGMENT_KEY: null, + NOT_FOUND_SEGMENT_KEY: null, + PAGE_SEGMENT_KEY: null, + computeSelectedLayoutSegment: null, + getSegmentValue: null, + getSelectedLayoutSegmentPath: null, + isGroupSegment: null, + isParallelRouteSegment: null +}); +function _export(target, all) { + for(var name in all)Object.defineProperty(target, name, { + enumerable: true, + get: all[name] + }); +} +_export(exports, { + DEFAULT_SEGMENT_KEY: function() { + return DEFAULT_SEGMENT_KEY; + }, + NOT_FOUND_SEGMENT_KEY: function() { + return NOT_FOUND_SEGMENT_KEY; + }, + PAGE_SEGMENT_KEY: function() { + return PAGE_SEGMENT_KEY; + }, + computeSelectedLayoutSegment: function() { + return computeSelectedLayoutSegment; + }, + getSegmentValue: function() { + return getSegmentValue; + }, + getSelectedLayoutSegmentPath: function() { + return getSelectedLayoutSegmentPath; + }, + isGroupSegment: function() { + return isGroupSegment; + }, + isParallelRouteSegment: function() { + return isParallelRouteSegment; + } +}); +function getSegmentValue(segment) { + return Array.isArray(segment) ? segment[1] : segment; +} +function isGroupSegment(segment) { + // Use array[0] for performant purpose + return segment[0] === '(' && segment.endsWith(')'); +} +function isParallelRouteSegment(segment) { + return segment.startsWith('@') && segment !== '@children'; +} +function computeSelectedLayoutSegment(segments, parallelRouteKey) { + if (!segments || segments.length === 0) { + return null; + } + // For 'children', use first segment; for other parallel routes, use last segment + const rawSegment = parallelRouteKey === 'children' ? segments[0] : segments[segments.length - 1]; + // If the default slot is showing, return null since it's not technically "selected" (it's a fallback) + // Returning an internal value like `__DEFAULT__` would be confusing + return rawSegment === DEFAULT_SEGMENT_KEY ? null : rawSegment; +} +function getSelectedLayoutSegmentPath(tree, parallelRouteKey, first = true, segmentPath = []) { + let node; + if (first) { + // Use the provided parallel route key on the first parallel route + node = tree[1][parallelRouteKey]; + } else { + // After first parallel route prefer children, if there's no children pick the first parallel route. + const parallelRoutes = tree[1]; + node = parallelRoutes.children ?? Object.values(parallelRoutes)[0]; + } + if (!node) return segmentPath; + const segment = node[0]; + let segmentValue = getSegmentValue(segment); + if (!segmentValue || segmentValue === PAGE_SEGMENT_KEY) { + return segmentPath; + } + segmentPath.push(segmentValue); + return getSelectedLayoutSegmentPath(node, parallelRouteKey, false, segmentPath); +} +const PAGE_SEGMENT_KEY = '__PAGE__'; +const DEFAULT_SEGMENT_KEY = '__DEFAULT__'; +const NOT_FOUND_SEGMENT_KEY = '/_not-found'; +}), +]})(), +"[project]/node_modules/next/dist/compiled/@opentelemetry/api/index.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { + +(()=>{ + "use strict"; + var e = { + 912: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.ContextAPI = void 0; + const n = r(108); + const a = r(221); + const o = r(44); + const i = "context"; + const c = new n.NoopContextManager; + class ContextAPI { + constructor(){} + static getInstance() { + if (!this._instance) { + this._instance = new ContextAPI; + } + return this._instance; + } + setGlobalContextManager(e) { + return (0, a.registerGlobal)(i, e, o.DiagAPI.instance()); + } + active() { + return this._getContextManager().active(); + } + with(e, t, r, ...n) { + return this._getContextManager().with(e, t, r, ...n); + } + bind(e, t) { + return this._getContextManager().bind(e, t); + } + _getContextManager() { + return (0, a.getGlobal)(i) || c; + } + disable() { + this._getContextManager().disable(); + (0, a.unregisterGlobal)(i, o.DiagAPI.instance()); + } + } + t.ContextAPI = ContextAPI; + }, + 44: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.DiagAPI = void 0; + const n = r(757); + const a = r(412); + const o = r(711); + const i = r(221); + const c = "diag"; + class DiagAPI { + constructor(){ + function _logProxy(e) { + return function(...t) { + const r = (0, i.getGlobal)("diag"); + if (!r) return; + return r[e](...t); + }; + } + const e = this; + const setLogger = (t, r = { + logLevel: o.DiagLogLevel.INFO + })=>{ + var n, c, s; + if (t === e) { + const t = new Error("Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation"); + e.error((n = t.stack) !== null && n !== void 0 ? n : t.message); + return false; + } + if (typeof r === "number") { + r = { + logLevel: r + }; + } + const u = (0, i.getGlobal)("diag"); + const l = (0, a.createLogLevelDiagLogger)((c = r.logLevel) !== null && c !== void 0 ? c : o.DiagLogLevel.INFO, t); + if (u && !r.suppressOverrideMessage) { + const e = (s = (new Error).stack) !== null && s !== void 0 ? s : ""; + u.warn(`Current logger will be overwritten from ${e}`); + l.warn(`Current logger will overwrite one already registered from ${e}`); + } + return (0, i.registerGlobal)("diag", l, e, true); + }; + e.setLogger = setLogger; + e.disable = ()=>{ + (0, i.unregisterGlobal)(c, e); + }; + e.createComponentLogger = (e)=>new n.DiagComponentLogger(e); + e.verbose = _logProxy("verbose"); + e.debug = _logProxy("debug"); + e.info = _logProxy("info"); + e.warn = _logProxy("warn"); + e.error = _logProxy("error"); + } + static instance() { + if (!this._instance) { + this._instance = new DiagAPI; + } + return this._instance; + } + } + t.DiagAPI = DiagAPI; + }, + 262: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.MetricsAPI = void 0; + const n = r(586); + const a = r(221); + const o = r(44); + const i = "metrics"; + class MetricsAPI { + constructor(){} + static getInstance() { + if (!this._instance) { + this._instance = new MetricsAPI; + } + return this._instance; + } + setGlobalMeterProvider(e) { + return (0, a.registerGlobal)(i, e, o.DiagAPI.instance()); + } + getMeterProvider() { + return (0, a.getGlobal)(i) || n.NOOP_METER_PROVIDER; + } + getMeter(e, t, r) { + return this.getMeterProvider().getMeter(e, t, r); + } + disable() { + (0, a.unregisterGlobal)(i, o.DiagAPI.instance()); + } + } + t.MetricsAPI = MetricsAPI; + }, + 25: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.PropagationAPI = void 0; + const n = r(221); + const a = r(19); + const o = r(92); + const i = r(398); + const c = r(504); + const s = r(44); + const u = "propagation"; + const l = new a.NoopTextMapPropagator; + class PropagationAPI { + constructor(){ + this.createBaggage = c.createBaggage; + this.getBaggage = i.getBaggage; + this.getActiveBaggage = i.getActiveBaggage; + this.setBaggage = i.setBaggage; + this.deleteBaggage = i.deleteBaggage; + } + static getInstance() { + if (!this._instance) { + this._instance = new PropagationAPI; + } + return this._instance; + } + setGlobalPropagator(e) { + return (0, n.registerGlobal)(u, e, s.DiagAPI.instance()); + } + inject(e, t, r = o.defaultTextMapSetter) { + return this._getGlobalPropagator().inject(e, t, r); + } + extract(e, t, r = o.defaultTextMapGetter) { + return this._getGlobalPropagator().extract(e, t, r); + } + fields() { + return this._getGlobalPropagator().fields(); + } + disable() { + (0, n.unregisterGlobal)(u, s.DiagAPI.instance()); + } + _getGlobalPropagator() { + return (0, n.getGlobal)(u) || l; + } + } + t.PropagationAPI = PropagationAPI; + }, + 397: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.TraceAPI = void 0; + const n = r(221); + const a = r(498); + const o = r(477); + const i = r(793); + const c = r(44); + const s = "trace"; + class TraceAPI { + constructor(){ + this._proxyTracerProvider = new a.ProxyTracerProvider; + this.wrapSpanContext = o.wrapSpanContext; + this.isSpanContextValid = o.isSpanContextValid; + this.deleteSpan = i.deleteSpan; + this.getSpan = i.getSpan; + this.getActiveSpan = i.getActiveSpan; + this.getSpanContext = i.getSpanContext; + this.setSpan = i.setSpan; + this.setSpanContext = i.setSpanContext; + } + static getInstance() { + if (!this._instance) { + this._instance = new TraceAPI; + } + return this._instance; + } + setGlobalTracerProvider(e) { + const t = (0, n.registerGlobal)(s, this._proxyTracerProvider, c.DiagAPI.instance()); + if (t) { + this._proxyTracerProvider.setDelegate(e); + } + return t; + } + getTracerProvider() { + return (0, n.getGlobal)(s) || this._proxyTracerProvider; + } + getTracer(e, t) { + return this.getTracerProvider().getTracer(e, t); + } + disable() { + (0, n.unregisterGlobal)(s, c.DiagAPI.instance()); + this._proxyTracerProvider = new a.ProxyTracerProvider; + } + } + t.TraceAPI = TraceAPI; + }, + 398: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.deleteBaggage = t.setBaggage = t.getActiveBaggage = t.getBaggage = void 0; + const n = r(912); + const a = r(23); + const o = (0, a.createContextKey)("OpenTelemetry Baggage Key"); + function getBaggage(e) { + return e.getValue(o) || undefined; + } + t.getBaggage = getBaggage; + function getActiveBaggage() { + return getBaggage(n.ContextAPI.getInstance().active()); + } + t.getActiveBaggage = getActiveBaggage; + function setBaggage(e, t) { + return e.setValue(o, t); + } + t.setBaggage = setBaggage; + function deleteBaggage(e) { + return e.deleteValue(o); + } + t.deleteBaggage = deleteBaggage; + }, + 152: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.BaggageImpl = void 0; + class BaggageImpl { + constructor(e){ + this._entries = e ? new Map(e) : new Map; + } + getEntry(e) { + const t = this._entries.get(e); + if (!t) { + return undefined; + } + return Object.assign({}, t); + } + getAllEntries() { + return Array.from(this._entries.entries()).map(([e, t])=>[ + e, + t + ]); + } + setEntry(e, t) { + const r = new BaggageImpl(this._entries); + r._entries.set(e, t); + return r; + } + removeEntry(e) { + const t = new BaggageImpl(this._entries); + t._entries.delete(e); + return t; + } + removeEntries(...e) { + const t = new BaggageImpl(this._entries); + for (const r of e){ + t._entries.delete(r); + } + return t; + } + clear() { + return new BaggageImpl; + } + } + t.BaggageImpl = BaggageImpl; + }, + 647: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.baggageEntryMetadataSymbol = void 0; + t.baggageEntryMetadataSymbol = Symbol("BaggageEntryMetadata"); + }, + 504: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.baggageEntryMetadataFromString = t.createBaggage = void 0; + const n = r(44); + const a = r(152); + const o = r(647); + const i = n.DiagAPI.instance(); + function createBaggage(e = {}) { + return new a.BaggageImpl(new Map(Object.entries(e))); + } + t.createBaggage = createBaggage; + function baggageEntryMetadataFromString(e) { + if (typeof e !== "string") { + i.error(`Cannot create baggage metadata from unknown type: ${typeof e}`); + e = ""; + } + return { + __TYPE__: o.baggageEntryMetadataSymbol, + toString () { + return e; + } + }; + } + t.baggageEntryMetadataFromString = baggageEntryMetadataFromString; + }, + 778: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.context = void 0; + const n = r(912); + t.context = n.ContextAPI.getInstance(); + }, + 108: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.NoopContextManager = void 0; + const n = r(23); + class NoopContextManager { + active() { + return n.ROOT_CONTEXT; + } + with(e, t, r, ...n) { + return t.call(r, ...n); + } + bind(e, t) { + return t; + } + enable() { + return this; + } + disable() { + return this; + } + } + t.NoopContextManager = NoopContextManager; + }, + 23: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.ROOT_CONTEXT = t.createContextKey = void 0; + function createContextKey(e) { + return Symbol.for(e); + } + t.createContextKey = createContextKey; + class BaseContext { + constructor(e){ + const t = this; + t._currentContext = e ? new Map(e) : new Map; + t.getValue = (e)=>t._currentContext.get(e); + t.setValue = (e, r)=>{ + const n = new BaseContext(t._currentContext); + n._currentContext.set(e, r); + return n; + }; + t.deleteValue = (e)=>{ + const r = new BaseContext(t._currentContext); + r._currentContext.delete(e); + return r; + }; + } + } + t.ROOT_CONTEXT = new BaseContext; + }, + 304: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.diag = void 0; + const n = r(44); + t.diag = n.DiagAPI.instance(); + }, + 757: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.DiagComponentLogger = void 0; + const n = r(221); + class DiagComponentLogger { + constructor(e){ + this._namespace = e.namespace || "DiagComponentLogger"; + } + debug(...e) { + return logProxy("debug", this._namespace, e); + } + error(...e) { + return logProxy("error", this._namespace, e); + } + info(...e) { + return logProxy("info", this._namespace, e); + } + warn(...e) { + return logProxy("warn", this._namespace, e); + } + verbose(...e) { + return logProxy("verbose", this._namespace, e); + } + } + t.DiagComponentLogger = DiagComponentLogger; + function logProxy(e, t, r) { + const a = (0, n.getGlobal)("diag"); + if (!a) { + return; + } + r.unshift(t); + return a[e](...r); + } + }, + 83: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.DiagConsoleLogger = void 0; + const r = [ + { + n: "error", + c: "error" + }, + { + n: "warn", + c: "warn" + }, + { + n: "info", + c: "info" + }, + { + n: "debug", + c: "debug" + }, + { + n: "verbose", + c: "trace" + } + ]; + class DiagConsoleLogger { + constructor(){ + function _consoleFunc(e) { + return function(...t) { + if (console) { + let r = console[e]; + if (typeof r !== "function") { + r = console.log; + } + if (typeof r === "function") { + return r.apply(console, t); + } + } + }; + } + for(let e = 0; e < r.length; e++){ + this[r[e].n] = _consoleFunc(r[e].c); + } + } + } + t.DiagConsoleLogger = DiagConsoleLogger; + }, + 412: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.createLogLevelDiagLogger = void 0; + const n = r(711); + function createLogLevelDiagLogger(e, t) { + if (e < n.DiagLogLevel.NONE) { + e = n.DiagLogLevel.NONE; + } else if (e > n.DiagLogLevel.ALL) { + e = n.DiagLogLevel.ALL; + } + t = t || {}; + function _filterFunc(r, n) { + const a = t[r]; + if (typeof a === "function" && e >= n) { + return a.bind(t); + } + return function() {}; + } + return { + error: _filterFunc("error", n.DiagLogLevel.ERROR), + warn: _filterFunc("warn", n.DiagLogLevel.WARN), + info: _filterFunc("info", n.DiagLogLevel.INFO), + debug: _filterFunc("debug", n.DiagLogLevel.DEBUG), + verbose: _filterFunc("verbose", n.DiagLogLevel.VERBOSE) + }; + } + t.createLogLevelDiagLogger = createLogLevelDiagLogger; + }, + 711: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.DiagLogLevel = void 0; + var r; + (function(e) { + e[e["NONE"] = 0] = "NONE"; + e[e["ERROR"] = 30] = "ERROR"; + e[e["WARN"] = 50] = "WARN"; + e[e["INFO"] = 60] = "INFO"; + e[e["DEBUG"] = 70] = "DEBUG"; + e[e["VERBOSE"] = 80] = "VERBOSE"; + e[e["ALL"] = 9999] = "ALL"; + })(r = t.DiagLogLevel || (t.DiagLogLevel = {})); + }, + 221: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.unregisterGlobal = t.getGlobal = t.registerGlobal = void 0; + const n = r(678); + const a = r(652); + const o = r(662); + const i = a.VERSION.split(".")[0]; + const c = Symbol.for(`opentelemetry.js.api.${i}`); + const s = n._globalThis; + function registerGlobal(e, t, r, n = false) { + var o; + const i = s[c] = (o = s[c]) !== null && o !== void 0 ? o : { + version: a.VERSION + }; + if (!n && i[e]) { + const t = new Error(`@opentelemetry/api: Attempted duplicate registration of API: ${e}`); + r.error(t.stack || t.message); + return false; + } + if (i.version !== a.VERSION) { + const t = new Error(`@opentelemetry/api: Registration of version v${i.version} for ${e} does not match previously registered API v${a.VERSION}`); + r.error(t.stack || t.message); + return false; + } + i[e] = t; + r.debug(`@opentelemetry/api: Registered a global for ${e} v${a.VERSION}.`); + return true; + } + t.registerGlobal = registerGlobal; + function getGlobal(e) { + var t, r; + const n = (t = s[c]) === null || t === void 0 ? void 0 : t.version; + if (!n || !(0, o.isCompatible)(n)) { + return; + } + return (r = s[c]) === null || r === void 0 ? void 0 : r[e]; + } + t.getGlobal = getGlobal; + function unregisterGlobal(e, t) { + t.debug(`@opentelemetry/api: Unregistering a global for ${e} v${a.VERSION}.`); + const r = s[c]; + if (r) { + delete r[e]; + } + } + t.unregisterGlobal = unregisterGlobal; + }, + 662: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.isCompatible = t._makeCompatibilityCheck = void 0; + const n = r(652); + const a = /^(\d+)\.(\d+)\.(\d+)(-(.+))?$/; + function _makeCompatibilityCheck(e) { + const t = new Set([ + e + ]); + const r = new Set; + const n = e.match(a); + if (!n) { + return ()=>false; + } + const o = { + major: +n[1], + minor: +n[2], + patch: +n[3], + prerelease: n[4] + }; + if (o.prerelease != null) { + return function isExactmatch(t) { + return t === e; + }; + } + function _reject(e) { + r.add(e); + return false; + } + function _accept(e) { + t.add(e); + return true; + } + return function isCompatible(e) { + if (t.has(e)) { + return true; + } + if (r.has(e)) { + return false; + } + const n = e.match(a); + if (!n) { + return _reject(e); + } + const i = { + major: +n[1], + minor: +n[2], + patch: +n[3], + prerelease: n[4] + }; + if (i.prerelease != null) { + return _reject(e); + } + if (o.major !== i.major) { + return _reject(e); + } + if (o.major === 0) { + if (o.minor === i.minor && o.patch <= i.patch) { + return _accept(e); + } + return _reject(e); + } + if (o.minor <= i.minor) { + return _accept(e); + } + return _reject(e); + }; + } + t._makeCompatibilityCheck = _makeCompatibilityCheck; + t.isCompatible = _makeCompatibilityCheck(n.VERSION); + }, + 120: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.metrics = void 0; + const n = r(262); + t.metrics = n.MetricsAPI.getInstance(); + }, + 532: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.ValueType = void 0; + var r; + (function(e) { + e[e["INT"] = 0] = "INT"; + e[e["DOUBLE"] = 1] = "DOUBLE"; + })(r = t.ValueType || (t.ValueType = {})); + }, + 440: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.createNoopMeter = t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC = t.NOOP_OBSERVABLE_GAUGE_METRIC = t.NOOP_OBSERVABLE_COUNTER_METRIC = t.NOOP_UP_DOWN_COUNTER_METRIC = t.NOOP_HISTOGRAM_METRIC = t.NOOP_COUNTER_METRIC = t.NOOP_METER = t.NoopObservableUpDownCounterMetric = t.NoopObservableGaugeMetric = t.NoopObservableCounterMetric = t.NoopObservableMetric = t.NoopHistogramMetric = t.NoopUpDownCounterMetric = t.NoopCounterMetric = t.NoopMetric = t.NoopMeter = void 0; + class NoopMeter { + constructor(){} + createHistogram(e, r) { + return t.NOOP_HISTOGRAM_METRIC; + } + createCounter(e, r) { + return t.NOOP_COUNTER_METRIC; + } + createUpDownCounter(e, r) { + return t.NOOP_UP_DOWN_COUNTER_METRIC; + } + createObservableGauge(e, r) { + return t.NOOP_OBSERVABLE_GAUGE_METRIC; + } + createObservableCounter(e, r) { + return t.NOOP_OBSERVABLE_COUNTER_METRIC; + } + createObservableUpDownCounter(e, r) { + return t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC; + } + addBatchObservableCallback(e, t) {} + removeBatchObservableCallback(e) {} + } + t.NoopMeter = NoopMeter; + class NoopMetric { + } + t.NoopMetric = NoopMetric; + class NoopCounterMetric extends NoopMetric { + add(e, t) {} + } + t.NoopCounterMetric = NoopCounterMetric; + class NoopUpDownCounterMetric extends NoopMetric { + add(e, t) {} + } + t.NoopUpDownCounterMetric = NoopUpDownCounterMetric; + class NoopHistogramMetric extends NoopMetric { + record(e, t) {} + } + t.NoopHistogramMetric = NoopHistogramMetric; + class NoopObservableMetric { + addCallback(e) {} + removeCallback(e) {} + } + t.NoopObservableMetric = NoopObservableMetric; + class NoopObservableCounterMetric extends NoopObservableMetric { + } + t.NoopObservableCounterMetric = NoopObservableCounterMetric; + class NoopObservableGaugeMetric extends NoopObservableMetric { + } + t.NoopObservableGaugeMetric = NoopObservableGaugeMetric; + class NoopObservableUpDownCounterMetric extends NoopObservableMetric { + } + t.NoopObservableUpDownCounterMetric = NoopObservableUpDownCounterMetric; + t.NOOP_METER = new NoopMeter; + t.NOOP_COUNTER_METRIC = new NoopCounterMetric; + t.NOOP_HISTOGRAM_METRIC = new NoopHistogramMetric; + t.NOOP_UP_DOWN_COUNTER_METRIC = new NoopUpDownCounterMetric; + t.NOOP_OBSERVABLE_COUNTER_METRIC = new NoopObservableCounterMetric; + t.NOOP_OBSERVABLE_GAUGE_METRIC = new NoopObservableGaugeMetric; + t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC = new NoopObservableUpDownCounterMetric; + function createNoopMeter() { + return t.NOOP_METER; + } + t.createNoopMeter = createNoopMeter; + }, + 586: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.NOOP_METER_PROVIDER = t.NoopMeterProvider = void 0; + const n = r(440); + class NoopMeterProvider { + getMeter(e, t, r) { + return n.NOOP_METER; + } + } + t.NoopMeterProvider = NoopMeterProvider; + t.NOOP_METER_PROVIDER = new NoopMeterProvider; + }, + 678: function(e, t, r) { + var n = this && this.__createBinding || (Object.create ? function(e, t, r, n) { + if (n === undefined) n = r; + Object.defineProperty(e, n, { + enumerable: true, + get: function() { + return t[r]; + } + }); + } : function(e, t, r, n) { + if (n === undefined) n = r; + e[n] = t[r]; + }); + var a = this && this.__exportStar || function(e, t) { + for(var r in e)if (r !== "default" && !Object.prototype.hasOwnProperty.call(t, r)) n(t, e, r); + }; + Object.defineProperty(t, "__esModule", { + value: true + }); + a(r(59), t); + }, + 460: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t._globalThis = void 0; + t._globalThis = typeof globalThis === "object" ? globalThis : /*TURBOPACK member replacement*/ __turbopack_context__.g; + }, + 59: function(e, t, r) { + var n = this && this.__createBinding || (Object.create ? function(e, t, r, n) { + if (n === undefined) n = r; + Object.defineProperty(e, n, { + enumerable: true, + get: function() { + return t[r]; + } + }); + } : function(e, t, r, n) { + if (n === undefined) n = r; + e[n] = t[r]; + }); + var a = this && this.__exportStar || function(e, t) { + for(var r in e)if (r !== "default" && !Object.prototype.hasOwnProperty.call(t, r)) n(t, e, r); + }; + Object.defineProperty(t, "__esModule", { + value: true + }); + a(r(460), t); + }, + 27: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.propagation = void 0; + const n = r(25); + t.propagation = n.PropagationAPI.getInstance(); + }, + 19: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.NoopTextMapPropagator = void 0; + class NoopTextMapPropagator { + inject(e, t) {} + extract(e, t) { + return e; + } + fields() { + return []; + } + } + t.NoopTextMapPropagator = NoopTextMapPropagator; + }, + 92: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.defaultTextMapSetter = t.defaultTextMapGetter = void 0; + t.defaultTextMapGetter = { + get (e, t) { + if (e == null) { + return undefined; + } + return e[t]; + }, + keys (e) { + if (e == null) { + return []; + } + return Object.keys(e); + } + }; + t.defaultTextMapSetter = { + set (e, t, r) { + if (e == null) { + return; + } + e[t] = r; + } + }; + }, + 816: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.trace = void 0; + const n = r(397); + t.trace = n.TraceAPI.getInstance(); + }, + 374: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.NonRecordingSpan = void 0; + const n = r(546); + class NonRecordingSpan { + constructor(e = n.INVALID_SPAN_CONTEXT){ + this._spanContext = e; + } + spanContext() { + return this._spanContext; + } + setAttribute(e, t) { + return this; + } + setAttributes(e) { + return this; + } + addEvent(e, t) { + return this; + } + setStatus(e) { + return this; + } + updateName(e) { + return this; + } + end(e) {} + isRecording() { + return false; + } + recordException(e, t) {} + } + t.NonRecordingSpan = NonRecordingSpan; + }, + 637: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.NoopTracer = void 0; + const n = r(912); + const a = r(793); + const o = r(374); + const i = r(477); + const c = n.ContextAPI.getInstance(); + class NoopTracer { + startSpan(e, t, r = c.active()) { + const n = Boolean(t === null || t === void 0 ? void 0 : t.root); + if (n) { + return new o.NonRecordingSpan; + } + const s = r && (0, a.getSpanContext)(r); + if (isSpanContext(s) && (0, i.isSpanContextValid)(s)) { + return new o.NonRecordingSpan(s); + } else { + return new o.NonRecordingSpan; + } + } + startActiveSpan(e, t, r, n) { + let o; + let i; + let s; + if (arguments.length < 2) { + return; + } else if (arguments.length === 2) { + s = t; + } else if (arguments.length === 3) { + o = t; + s = r; + } else { + o = t; + i = r; + s = n; + } + const u = i !== null && i !== void 0 ? i : c.active(); + const l = this.startSpan(e, o, u); + const g = (0, a.setSpan)(u, l); + return c.with(g, s, undefined, l); + } + } + t.NoopTracer = NoopTracer; + function isSpanContext(e) { + return typeof e === "object" && typeof e["spanId"] === "string" && typeof e["traceId"] === "string" && typeof e["traceFlags"] === "number"; + } + }, + 76: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.NoopTracerProvider = void 0; + const n = r(637); + class NoopTracerProvider { + getTracer(e, t, r) { + return new n.NoopTracer; + } + } + t.NoopTracerProvider = NoopTracerProvider; + }, + 779: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.ProxyTracer = void 0; + const n = r(637); + const a = new n.NoopTracer; + class ProxyTracer { + constructor(e, t, r, n){ + this._provider = e; + this.name = t; + this.version = r; + this.options = n; + } + startSpan(e, t, r) { + return this._getTracer().startSpan(e, t, r); + } + startActiveSpan(e, t, r, n) { + const a = this._getTracer(); + return Reflect.apply(a.startActiveSpan, a, arguments); + } + _getTracer() { + if (this._delegate) { + return this._delegate; + } + const e = this._provider.getDelegateTracer(this.name, this.version, this.options); + if (!e) { + return a; + } + this._delegate = e; + return this._delegate; + } + } + t.ProxyTracer = ProxyTracer; + }, + 498: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.ProxyTracerProvider = void 0; + const n = r(779); + const a = r(76); + const o = new a.NoopTracerProvider; + class ProxyTracerProvider { + getTracer(e, t, r) { + var a; + return (a = this.getDelegateTracer(e, t, r)) !== null && a !== void 0 ? a : new n.ProxyTracer(this, e, t, r); + } + getDelegate() { + var e; + return (e = this._delegate) !== null && e !== void 0 ? e : o; + } + setDelegate(e) { + this._delegate = e; + } + getDelegateTracer(e, t, r) { + var n; + return (n = this._delegate) === null || n === void 0 ? void 0 : n.getTracer(e, t, r); + } + } + t.ProxyTracerProvider = ProxyTracerProvider; + }, + 312: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.SamplingDecision = void 0; + var r; + (function(e) { + e[e["NOT_RECORD"] = 0] = "NOT_RECORD"; + e[e["RECORD"] = 1] = "RECORD"; + e[e["RECORD_AND_SAMPLED"] = 2] = "RECORD_AND_SAMPLED"; + })(r = t.SamplingDecision || (t.SamplingDecision = {})); + }, + 793: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.getSpanContext = t.setSpanContext = t.deleteSpan = t.setSpan = t.getActiveSpan = t.getSpan = void 0; + const n = r(23); + const a = r(374); + const o = r(912); + const i = (0, n.createContextKey)("OpenTelemetry Context Key SPAN"); + function getSpan(e) { + return e.getValue(i) || undefined; + } + t.getSpan = getSpan; + function getActiveSpan() { + return getSpan(o.ContextAPI.getInstance().active()); + } + t.getActiveSpan = getActiveSpan; + function setSpan(e, t) { + return e.setValue(i, t); + } + t.setSpan = setSpan; + function deleteSpan(e) { + return e.deleteValue(i); + } + t.deleteSpan = deleteSpan; + function setSpanContext(e, t) { + return setSpan(e, new a.NonRecordingSpan(t)); + } + t.setSpanContext = setSpanContext; + function getSpanContext(e) { + var t; + return (t = getSpan(e)) === null || t === void 0 ? void 0 : t.spanContext(); + } + t.getSpanContext = getSpanContext; + }, + 285: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.TraceStateImpl = void 0; + const n = r(240); + const a = 32; + const o = 512; + const i = ","; + const c = "="; + class TraceStateImpl { + constructor(e){ + this._internalState = new Map; + if (e) this._parse(e); + } + set(e, t) { + const r = this._clone(); + if (r._internalState.has(e)) { + r._internalState.delete(e); + } + r._internalState.set(e, t); + return r; + } + unset(e) { + const t = this._clone(); + t._internalState.delete(e); + return t; + } + get(e) { + return this._internalState.get(e); + } + serialize() { + return this._keys().reduce((e, t)=>{ + e.push(t + c + this.get(t)); + return e; + }, []).join(i); + } + _parse(e) { + if (e.length > o) return; + this._internalState = e.split(i).reverse().reduce((e, t)=>{ + const r = t.trim(); + const a = r.indexOf(c); + if (a !== -1) { + const o = r.slice(0, a); + const i = r.slice(a + 1, t.length); + if ((0, n.validateKey)(o) && (0, n.validateValue)(i)) { + e.set(o, i); + } else {} + } + return e; + }, new Map); + if (this._internalState.size > a) { + this._internalState = new Map(Array.from(this._internalState.entries()).reverse().slice(0, a)); + } + } + _keys() { + return Array.from(this._internalState.keys()).reverse(); + } + _clone() { + const e = new TraceStateImpl; + e._internalState = new Map(this._internalState); + return e; + } + } + t.TraceStateImpl = TraceStateImpl; + }, + 240: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.validateValue = t.validateKey = void 0; + const r = "[_0-9a-z-*/]"; + const n = `[a-z]${r}{0,255}`; + const a = `[a-z0-9]${r}{0,240}@[a-z]${r}{0,13}`; + const o = new RegExp(`^(?:${n}|${a})$`); + const i = /^[ -~]{0,255}[!-~]$/; + const c = /,|=/; + function validateKey(e) { + return o.test(e); + } + t.validateKey = validateKey; + function validateValue(e) { + return i.test(e) && !c.test(e); + } + t.validateValue = validateValue; + }, + 87: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.createTraceState = void 0; + const n = r(285); + function createTraceState(e) { + return new n.TraceStateImpl(e); + } + t.createTraceState = createTraceState; + }, + 546: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.INVALID_SPAN_CONTEXT = t.INVALID_TRACEID = t.INVALID_SPANID = void 0; + const n = r(731); + t.INVALID_SPANID = "0000000000000000"; + t.INVALID_TRACEID = "00000000000000000000000000000000"; + t.INVALID_SPAN_CONTEXT = { + traceId: t.INVALID_TRACEID, + spanId: t.INVALID_SPANID, + traceFlags: n.TraceFlags.NONE + }; + }, + 613: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.SpanKind = void 0; + var r; + (function(e) { + e[e["INTERNAL"] = 0] = "INTERNAL"; + e[e["SERVER"] = 1] = "SERVER"; + e[e["CLIENT"] = 2] = "CLIENT"; + e[e["PRODUCER"] = 3] = "PRODUCER"; + e[e["CONSUMER"] = 4] = "CONSUMER"; + })(r = t.SpanKind || (t.SpanKind = {})); + }, + 477: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.wrapSpanContext = t.isSpanContextValid = t.isValidSpanId = t.isValidTraceId = void 0; + const n = r(546); + const a = r(374); + const o = /^([0-9a-f]{32})$/i; + const i = /^[0-9a-f]{16}$/i; + function isValidTraceId(e) { + return o.test(e) && e !== n.INVALID_TRACEID; + } + t.isValidTraceId = isValidTraceId; + function isValidSpanId(e) { + return i.test(e) && e !== n.INVALID_SPANID; + } + t.isValidSpanId = isValidSpanId; + function isSpanContextValid(e) { + return isValidTraceId(e.traceId) && isValidSpanId(e.spanId); + } + t.isSpanContextValid = isSpanContextValid; + function wrapSpanContext(e) { + return new a.NonRecordingSpan(e); + } + t.wrapSpanContext = wrapSpanContext; + }, + 854: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.SpanStatusCode = void 0; + var r; + (function(e) { + e[e["UNSET"] = 0] = "UNSET"; + e[e["OK"] = 1] = "OK"; + e[e["ERROR"] = 2] = "ERROR"; + })(r = t.SpanStatusCode || (t.SpanStatusCode = {})); + }, + 731: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.TraceFlags = void 0; + var r; + (function(e) { + e[e["NONE"] = 0] = "NONE"; + e[e["SAMPLED"] = 1] = "SAMPLED"; + })(r = t.TraceFlags || (t.TraceFlags = {})); + }, + 652: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.VERSION = void 0; + t.VERSION = "1.6.0"; + } + }; + var t = {}; + function __nccwpck_require__(r) { + var n = t[r]; + if (n !== undefined) { + return n.exports; + } + var a = t[r] = { + exports: {} + }; + var o = true; + try { + e[r].call(a.exports, a, a.exports, __nccwpck_require__); + o = false; + } finally{ + if (o) delete t[r]; + } + return a.exports; + } + if (typeof __nccwpck_require__ !== "undefined") __nccwpck_require__.ab = ("TURBOPACK compile-time value", "/ROOT/node_modules/next/dist/compiled/@opentelemetry/api") + "/"; + var r = {}; + (()=>{ + var e = r; + Object.defineProperty(e, "__esModule", { + value: true + }); + e.trace = e.propagation = e.metrics = e.diag = e.context = e.INVALID_SPAN_CONTEXT = e.INVALID_TRACEID = e.INVALID_SPANID = e.isValidSpanId = e.isValidTraceId = e.isSpanContextValid = e.createTraceState = e.TraceFlags = e.SpanStatusCode = e.SpanKind = e.SamplingDecision = e.ProxyTracerProvider = e.ProxyTracer = e.defaultTextMapSetter = e.defaultTextMapGetter = e.ValueType = e.createNoopMeter = e.DiagLogLevel = e.DiagConsoleLogger = e.ROOT_CONTEXT = e.createContextKey = e.baggageEntryMetadataFromString = void 0; + var t = __nccwpck_require__(504); + Object.defineProperty(e, "baggageEntryMetadataFromString", { + enumerable: true, + get: function() { + return t.baggageEntryMetadataFromString; + } + }); + var n = __nccwpck_require__(23); + Object.defineProperty(e, "createContextKey", { + enumerable: true, + get: function() { + return n.createContextKey; + } + }); + Object.defineProperty(e, "ROOT_CONTEXT", { + enumerable: true, + get: function() { + return n.ROOT_CONTEXT; + } + }); + var a = __nccwpck_require__(83); + Object.defineProperty(e, "DiagConsoleLogger", { + enumerable: true, + get: function() { + return a.DiagConsoleLogger; + } + }); + var o = __nccwpck_require__(711); + Object.defineProperty(e, "DiagLogLevel", { + enumerable: true, + get: function() { + return o.DiagLogLevel; + } + }); + var i = __nccwpck_require__(440); + Object.defineProperty(e, "createNoopMeter", { + enumerable: true, + get: function() { + return i.createNoopMeter; + } + }); + var c = __nccwpck_require__(532); + Object.defineProperty(e, "ValueType", { + enumerable: true, + get: function() { + return c.ValueType; + } + }); + var s = __nccwpck_require__(92); + Object.defineProperty(e, "defaultTextMapGetter", { + enumerable: true, + get: function() { + return s.defaultTextMapGetter; + } + }); + Object.defineProperty(e, "defaultTextMapSetter", { + enumerable: true, + get: function() { + return s.defaultTextMapSetter; + } + }); + var u = __nccwpck_require__(779); + Object.defineProperty(e, "ProxyTracer", { + enumerable: true, + get: function() { + return u.ProxyTracer; + } + }); + var l = __nccwpck_require__(498); + Object.defineProperty(e, "ProxyTracerProvider", { + enumerable: true, + get: function() { + return l.ProxyTracerProvider; + } + }); + var g = __nccwpck_require__(312); + Object.defineProperty(e, "SamplingDecision", { + enumerable: true, + get: function() { + return g.SamplingDecision; + } + }); + var p = __nccwpck_require__(613); + Object.defineProperty(e, "SpanKind", { + enumerable: true, + get: function() { + return p.SpanKind; + } + }); + var d = __nccwpck_require__(854); + Object.defineProperty(e, "SpanStatusCode", { + enumerable: true, + get: function() { + return d.SpanStatusCode; + } + }); + var _ = __nccwpck_require__(731); + Object.defineProperty(e, "TraceFlags", { + enumerable: true, + get: function() { + return _.TraceFlags; + } + }); + var f = __nccwpck_require__(87); + Object.defineProperty(e, "createTraceState", { + enumerable: true, + get: function() { + return f.createTraceState; + } + }); + var b = __nccwpck_require__(477); + Object.defineProperty(e, "isSpanContextValid", { + enumerable: true, + get: function() { + return b.isSpanContextValid; + } + }); + Object.defineProperty(e, "isValidTraceId", { + enumerable: true, + get: function() { + return b.isValidTraceId; + } + }); + Object.defineProperty(e, "isValidSpanId", { + enumerable: true, + get: function() { + return b.isValidSpanId; + } + }); + var v = __nccwpck_require__(546); + Object.defineProperty(e, "INVALID_SPANID", { + enumerable: true, + get: function() { + return v.INVALID_SPANID; + } + }); + Object.defineProperty(e, "INVALID_TRACEID", { + enumerable: true, + get: function() { + return v.INVALID_TRACEID; + } + }); + Object.defineProperty(e, "INVALID_SPAN_CONTEXT", { + enumerable: true, + get: function() { + return v.INVALID_SPAN_CONTEXT; + } + }); + const O = __nccwpck_require__(778); + Object.defineProperty(e, "context", { + enumerable: true, + get: function() { + return O.context; + } + }); + const P = __nccwpck_require__(304); + Object.defineProperty(e, "diag", { + enumerable: true, + get: function() { + return P.diag; + } + }); + const N = __nccwpck_require__(120); + Object.defineProperty(e, "metrics", { + enumerable: true, + get: function() { + return N.metrics; + } + }); + const S = __nccwpck_require__(27); + Object.defineProperty(e, "propagation", { + enumerable: true, + get: function() { + return S.propagation; + } + }); + const C = __nccwpck_require__(816); + Object.defineProperty(e, "trace", { + enumerable: true, + get: function() { + return C.trace; + } + }); + e["default"] = { + context: O.context, + diag: P.diag, + metrics: N.metrics, + propagation: S.propagation, + trace: C.trace + }; + })(); + module.exports = r; +})(); +}), +"[project]/node_modules/next/dist/compiled/cookie/index.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { + +(()=>{ + "use strict"; + if (typeof __nccwpck_require__ !== "undefined") __nccwpck_require__.ab = ("TURBOPACK compile-time value", "/ROOT/node_modules/next/dist/compiled/cookie") + "/"; + var e = {}; + (()=>{ + var r = e; + /*! + * cookie + * Copyright(c) 2012-2014 Roman Shtylman + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ r.parse = parse; + r.serialize = serialize; + var i = decodeURIComponent; + var t = encodeURIComponent; + var a = /; */; + var n = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/; + function parse(e, r) { + if (typeof e !== "string") { + throw new TypeError("argument str must be a string"); + } + var t = {}; + var n = r || {}; + var o = e.split(a); + var s = n.decode || i; + for(var p = 0; p < o.length; p++){ + var f = o[p]; + var u = f.indexOf("="); + if (u < 0) { + continue; + } + var v = f.substr(0, u).trim(); + var c = f.substr(++u, f.length).trim(); + if ('"' == c[0]) { + c = c.slice(1, -1); + } + if (undefined == t[v]) { + t[v] = tryDecode(c, s); + } + } + return t; + } + function serialize(e, r, i) { + var a = i || {}; + var o = a.encode || t; + if (typeof o !== "function") { + throw new TypeError("option encode is invalid"); + } + if (!n.test(e)) { + throw new TypeError("argument name is invalid"); + } + var s = o(r); + if (s && !n.test(s)) { + throw new TypeError("argument val is invalid"); + } + var p = e + "=" + s; + if (null != a.maxAge) { + var f = a.maxAge - 0; + if (isNaN(f) || !isFinite(f)) { + throw new TypeError("option maxAge is invalid"); + } + p += "; Max-Age=" + Math.floor(f); + } + if (a.domain) { + if (!n.test(a.domain)) { + throw new TypeError("option domain is invalid"); + } + p += "; Domain=" + a.domain; + } + if (a.path) { + if (!n.test(a.path)) { + throw new TypeError("option path is invalid"); + } + p += "; Path=" + a.path; + } + if (a.expires) { + if (typeof a.expires.toUTCString !== "function") { + throw new TypeError("option expires is invalid"); + } + p += "; Expires=" + a.expires.toUTCString(); + } + if (a.httpOnly) { + p += "; HttpOnly"; + } + if (a.secure) { + p += "; Secure"; + } + if (a.sameSite) { + var u = typeof a.sameSite === "string" ? a.sameSite.toLowerCase() : a.sameSite; + switch(u){ + case true: + p += "; SameSite=Strict"; + break; + case "lax": + p += "; SameSite=Lax"; + break; + case "strict": + p += "; SameSite=Strict"; + break; + case "none": + p += "; SameSite=None"; + break; + default: + throw new TypeError("option sameSite is invalid"); + } + } + return p; + } + function tryDecode(e, r) { + try { + return r(e); + } catch (r) { + return e; + } + } + })(); + module.exports = e; +})(); +}), +"[project]/node_modules/next/dist/compiled/ua-parser-js/ua-parser.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { + +(()=>{ + var i = { + 943: function(i, e) { + (function(o, a) { + "use strict"; + var r = "1.0.35", t = "", n = "?", s = "function", b = "undefined", w = "object", l = "string", d = "major", c = "model", u = "name", p = "type", m = "vendor", f = "version", h = "architecture", v = "console", g = "mobile", k = "tablet", x = "smarttv", _ = "wearable", y = "embedded", q = 350; + var T = "Amazon", S = "Apple", z = "ASUS", N = "BlackBerry", A = "Browser", C = "Chrome", E = "Edge", O = "Firefox", U = "Google", j = "Huawei", P = "LG", R = "Microsoft", M = "Motorola", B = "Opera", V = "Samsung", D = "Sharp", I = "Sony", W = "Viera", F = "Xiaomi", G = "Zebra", H = "Facebook", L = "Chromium OS", Z = "Mac OS"; + var extend = function(i, e) { + var o = {}; + for(var a in i){ + if (e[a] && e[a].length % 2 === 0) { + o[a] = e[a].concat(i[a]); + } else { + o[a] = i[a]; + } + } + return o; + }, enumerize = function(i) { + var e = {}; + for(var o = 0; o < i.length; o++){ + e[i[o].toUpperCase()] = i[o]; + } + return e; + }, has = function(i, e) { + return typeof i === l ? lowerize(e).indexOf(lowerize(i)) !== -1 : false; + }, lowerize = function(i) { + return i.toLowerCase(); + }, majorize = function(i) { + return typeof i === l ? i.replace(/[^\d\.]/g, t).split(".")[0] : a; + }, trim = function(i, e) { + if (typeof i === l) { + i = i.replace(/^\s\s*/, t); + return typeof e === b ? i : i.substring(0, q); + } + }; + var rgxMapper = function(i, e) { + var o = 0, r, t, n, b, l, d; + while(o < e.length && !l){ + var c = e[o], u = e[o + 1]; + r = t = 0; + while(r < c.length && !l){ + if (!c[r]) { + break; + } + l = c[r++].exec(i); + if (!!l) { + for(n = 0; n < u.length; n++){ + d = l[++t]; + b = u[n]; + if (typeof b === w && b.length > 0) { + if (b.length === 2) { + if (typeof b[1] == s) { + this[b[0]] = b[1].call(this, d); + } else { + this[b[0]] = b[1]; + } + } else if (b.length === 3) { + if (typeof b[1] === s && !(b[1].exec && b[1].test)) { + this[b[0]] = d ? b[1].call(this, d, b[2]) : a; + } else { + this[b[0]] = d ? d.replace(b[1], b[2]) : a; + } + } else if (b.length === 4) { + this[b[0]] = d ? b[3].call(this, d.replace(b[1], b[2])) : a; + } + } else { + this[b] = d ? d : a; + } + } + } + } + o += 2; + } + }, strMapper = function(i, e) { + for(var o in e){ + if (typeof e[o] === w && e[o].length > 0) { + for(var r = 0; r < e[o].length; r++){ + if (has(e[o][r], i)) { + return o === n ? a : o; + } + } + } else if (has(e[o], i)) { + return o === n ? a : o; + } + } + return i; + }; + var $ = { + "1.0": "/8", + 1.2: "/1", + 1.3: "/3", + "2.0": "/412", + "2.0.2": "/416", + "2.0.3": "/417", + "2.0.4": "/419", + "?": "/" + }, X = { + ME: "4.90", + "NT 3.11": "NT3.51", + "NT 4.0": "NT4.0", + 2e3: "NT 5.0", + XP: [ + "NT 5.1", + "NT 5.2" + ], + Vista: "NT 6.0", + 7: "NT 6.1", + 8: "NT 6.2", + 8.1: "NT 6.3", + 10: [ + "NT 6.4", + "NT 10.0" + ], + RT: "ARM" + }; + var K = { + browser: [ + [ + /\b(?:crmo|crios)\/([\w\.]+)/i + ], + [ + f, + [ + u, + "Chrome" + ] + ], + [ + /edg(?:e|ios|a)?\/([\w\.]+)/i + ], + [ + f, + [ + u, + "Edge" + ] + ], + [ + /(opera mini)\/([-\w\.]+)/i, + /(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i, + /(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i + ], + [ + u, + f + ], + [ + /opios[\/ ]+([\w\.]+)/i + ], + [ + f, + [ + u, + B + " Mini" + ] + ], + [ + /\bopr\/([\w\.]+)/i + ], + [ + f, + [ + u, + B + ] + ], + [ + /(kindle)\/([\w\.]+)/i, + /(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i, + /(avant |iemobile|slim)(?:browser)?[\/ ]?([\w\.]*)/i, + /(ba?idubrowser)[\/ ]?([\w\.]+)/i, + /(?:ms|\()(ie) ([\w\.]+)/i, + /(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i, + /(heytap|ovi)browser\/([\d\.]+)/i, + /(weibo)__([\d\.]+)/i + ], + [ + u, + f + ], + [ + /(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i + ], + [ + f, + [ + u, + "UC" + A + ] + ], + [ + /microm.+\bqbcore\/([\w\.]+)/i, + /\bqbcore\/([\w\.]+).+microm/i + ], + [ + f, + [ + u, + "WeChat(Win) Desktop" + ] + ], + [ + /micromessenger\/([\w\.]+)/i + ], + [ + f, + [ + u, + "WeChat" + ] + ], + [ + /konqueror\/([\w\.]+)/i + ], + [ + f, + [ + u, + "Konqueror" + ] + ], + [ + /trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i + ], + [ + f, + [ + u, + "IE" + ] + ], + [ + /ya(?:search)?browser\/([\w\.]+)/i + ], + [ + f, + [ + u, + "Yandex" + ] + ], + [ + /(avast|avg)\/([\w\.]+)/i + ], + [ + [ + u, + /(.+)/, + "$1 Secure " + A + ], + f + ], + [ + /\bfocus\/([\w\.]+)/i + ], + [ + f, + [ + u, + O + " Focus" + ] + ], + [ + /\bopt\/([\w\.]+)/i + ], + [ + f, + [ + u, + B + " Touch" + ] + ], + [ + /coc_coc\w+\/([\w\.]+)/i + ], + [ + f, + [ + u, + "Coc Coc" + ] + ], + [ + /dolfin\/([\w\.]+)/i + ], + [ + f, + [ + u, + "Dolphin" + ] + ], + [ + /coast\/([\w\.]+)/i + ], + [ + f, + [ + u, + B + " Coast" + ] + ], + [ + /miuibrowser\/([\w\.]+)/i + ], + [ + f, + [ + u, + "MIUI " + A + ] + ], + [ + /fxios\/([-\w\.]+)/i + ], + [ + f, + [ + u, + O + ] + ], + [ + /\bqihu|(qi?ho?o?|360)browser/i + ], + [ + [ + u, + "360 " + A + ] + ], + [ + /(oculus|samsung|sailfish|huawei)browser\/([\w\.]+)/i + ], + [ + [ + u, + /(.+)/, + "$1 " + A + ], + f + ], + [ + /(comodo_dragon)\/([\w\.]+)/i + ], + [ + [ + u, + /_/g, + " " + ], + f + ], + [ + /(electron)\/([\w\.]+) safari/i, + /(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i, + /m?(qqbrowser|baiduboxapp|2345Explorer)[\/ ]?([\w\.]+)/i + ], + [ + u, + f + ], + [ + /(metasr)[\/ ]?([\w\.]+)/i, + /(lbbrowser)/i, + /\[(linkedin)app\]/i + ], + [ + u + ], + [ + /((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i + ], + [ + [ + u, + H + ], + f + ], + [ + /(kakao(?:talk|story))[\/ ]([\w\.]+)/i, + /(naver)\(.*?(\d+\.[\w\.]+).*\)/i, + /safari (line)\/([\w\.]+)/i, + /\b(line)\/([\w\.]+)\/iab/i, + /(chromium|instagram)[\/ ]([-\w\.]+)/i + ], + [ + u, + f + ], + [ + /\bgsa\/([\w\.]+) .*safari\//i + ], + [ + f, + [ + u, + "GSA" + ] + ], + [ + /musical_ly(?:.+app_?version\/|_)([\w\.]+)/i + ], + [ + f, + [ + u, + "TikTok" + ] + ], + [ + /headlesschrome(?:\/([\w\.]+)| )/i + ], + [ + f, + [ + u, + C + " Headless" + ] + ], + [ + / wv\).+(chrome)\/([\w\.]+)/i + ], + [ + [ + u, + C + " WebView" + ], + f + ], + [ + /droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i + ], + [ + f, + [ + u, + "Android " + A + ] + ], + [ + /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i + ], + [ + u, + f + ], + [ + /version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i + ], + [ + f, + [ + u, + "Mobile Safari" + ] + ], + [ + /version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i + ], + [ + f, + u + ], + [ + /webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i + ], + [ + u, + [ + f, + strMapper, + $ + ] + ], + [ + /(webkit|khtml)\/([\w\.]+)/i + ], + [ + u, + f + ], + [ + /(navigator|netscape\d?)\/([-\w\.]+)/i + ], + [ + [ + u, + "Netscape" + ], + f + ], + [ + /mobile vr; rv:([\w\.]+)\).+firefox/i + ], + [ + f, + [ + u, + O + " Reality" + ] + ], + [ + /ekiohf.+(flow)\/([\w\.]+)/i, + /(swiftfox)/i, + /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i, + /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i, + /(firefox)\/([\w\.]+)/i, + /(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i, + /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i, + /(links) \(([\w\.]+)/i, + /panasonic;(viera)/i + ], + [ + u, + f + ], + [ + /(cobalt)\/([\w\.]+)/i + ], + [ + u, + [ + f, + /master.|lts./, + "" + ] + ] + ], + cpu: [ + [ + /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i + ], + [ + [ + h, + "amd64" + ] + ], + [ + /(ia32(?=;))/i + ], + [ + [ + h, + lowerize + ] + ], + [ + /((?:i[346]|x)86)[;\)]/i + ], + [ + [ + h, + "ia32" + ] + ], + [ + /\b(aarch64|arm(v?8e?l?|_?64))\b/i + ], + [ + [ + h, + "arm64" + ] + ], + [ + /\b(arm(?:v[67])?ht?n?[fl]p?)\b/i + ], + [ + [ + h, + "armhf" + ] + ], + [ + /windows (ce|mobile); ppc;/i + ], + [ + [ + h, + "arm" + ] + ], + [ + /((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i + ], + [ + [ + h, + /ower/, + t, + lowerize + ] + ], + [ + /(sun4\w)[;\)]/i + ], + [ + [ + h, + "sparc" + ] + ], + [ + /((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i + ], + [ + [ + h, + lowerize + ] + ] + ], + device: [ + [ + /\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i + ], + [ + c, + [ + m, + V + ], + [ + p, + k + ] + ], + [ + /\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?[\d]+a?|galaxy nexus)/i, + /samsung[- ]([-\w]+)/i, + /sec-(sgh\w+)/i + ], + [ + c, + [ + m, + V + ], + [ + p, + g + ] + ], + [ + /(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i + ], + [ + c, + [ + m, + S + ], + [ + p, + g + ] + ], + [ + /\((ipad);[-\w\),; ]+apple/i, + /applecoremedia\/[\w\.]+ \((ipad)/i, + /\b(ipad)\d\d?,\d\d?[;\]].+ios/i + ], + [ + c, + [ + m, + S + ], + [ + p, + k + ] + ], + [ + /(macintosh);/i + ], + [ + c, + [ + m, + S + ] + ], + [ + /\b(sh-?[altvz]?\d\d[a-ekm]?)/i + ], + [ + c, + [ + m, + D + ], + [ + p, + g + ] + ], + [ + /\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i + ], + [ + c, + [ + m, + j + ], + [ + p, + k + ] + ], + [ + /(?:huawei|honor)([-\w ]+)[;\)]/i, + /\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i + ], + [ + c, + [ + m, + j + ], + [ + p, + g + ] + ], + [ + /\b(poco[\w ]+)(?: bui|\))/i, + /\b; (\w+) build\/hm\1/i, + /\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i, + /\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i, + /\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i + ], + [ + [ + c, + /_/g, + " " + ], + [ + m, + F + ], + [ + p, + g + ] + ], + [ + /\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i + ], + [ + [ + c, + /_/g, + " " + ], + [ + m, + F + ], + [ + p, + k + ] + ], + [ + /; (\w+) bui.+ oppo/i, + /\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i + ], + [ + c, + [ + m, + "OPPO" + ], + [ + p, + g + ] + ], + [ + /vivo (\w+)(?: bui|\))/i, + /\b(v[12]\d{3}\w?[at])(?: bui|;)/i + ], + [ + c, + [ + m, + "Vivo" + ], + [ + p, + g + ] + ], + [ + /\b(rmx[12]\d{3})(?: bui|;|\))/i + ], + [ + c, + [ + m, + "Realme" + ], + [ + p, + g + ] + ], + [ + /\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i, + /\bmot(?:orola)?[- ](\w*)/i, + /((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i + ], + [ + c, + [ + m, + M + ], + [ + p, + g + ] + ], + [ + /\b(mz60\d|xoom[2 ]{0,2}) build\//i + ], + [ + c, + [ + m, + M + ], + [ + p, + k + ] + ], + [ + /((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i + ], + [ + c, + [ + m, + P + ], + [ + p, + k + ] + ], + [ + /(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i, + /\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i, + /\blg-?([\d\w]+) bui/i + ], + [ + c, + [ + m, + P + ], + [ + p, + g + ] + ], + [ + /(ideatab[-\w ]+)/i, + /lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i + ], + [ + c, + [ + m, + "Lenovo" + ], + [ + p, + k + ] + ], + [ + /(?:maemo|nokia).*(n900|lumia \d+)/i, + /nokia[-_ ]?([-\w\.]*)/i + ], + [ + [ + c, + /_/g, + " " + ], + [ + m, + "Nokia" + ], + [ + p, + g + ] + ], + [ + /(pixel c)\b/i + ], + [ + c, + [ + m, + U + ], + [ + p, + k + ] + ], + [ + /droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i + ], + [ + c, + [ + m, + U + ], + [ + p, + g + ] + ], + [ + /droid.+ (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i + ], + [ + c, + [ + m, + I + ], + [ + p, + g + ] + ], + [ + /sony tablet [ps]/i, + /\b(?:sony)?sgp\w+(?: bui|\))/i + ], + [ + [ + c, + "Xperia Tablet" + ], + [ + m, + I + ], + [ + p, + k + ] + ], + [ + / (kb2005|in20[12]5|be20[12][59])\b/i, + /(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i + ], + [ + c, + [ + m, + "OnePlus" + ], + [ + p, + g + ] + ], + [ + /(alexa)webm/i, + /(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i, + /(kf[a-z]+)( bui|\)).+silk\//i + ], + [ + c, + [ + m, + T + ], + [ + p, + k + ] + ], + [ + /((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i + ], + [ + [ + c, + /(.+)/g, + "Fire Phone $1" + ], + [ + m, + T + ], + [ + p, + g + ] + ], + [ + /(playbook);[-\w\),; ]+(rim)/i + ], + [ + c, + m, + [ + p, + k + ] + ], + [ + /\b((?:bb[a-f]|st[hv])100-\d)/i, + /\(bb10; (\w+)/i + ], + [ + c, + [ + m, + N + ], + [ + p, + g + ] + ], + [ + /(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i + ], + [ + c, + [ + m, + z + ], + [ + p, + k + ] + ], + [ + / (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i + ], + [ + c, + [ + m, + z + ], + [ + p, + g + ] + ], + [ + /(nexus 9)/i + ], + [ + c, + [ + m, + "HTC" + ], + [ + p, + k + ] + ], + [ + /(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i, + /(zte)[- ]([\w ]+?)(?: bui|\/|\))/i, + /(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i + ], + [ + m, + [ + c, + /_/g, + " " + ], + [ + p, + g + ] + ], + [ + /droid.+; ([ab][1-7]-?[0178a]\d\d?)/i + ], + [ + c, + [ + m, + "Acer" + ], + [ + p, + k + ] + ], + [ + /droid.+; (m[1-5] note) bui/i, + /\bmz-([-\w]{2,})/i + ], + [ + c, + [ + m, + "Meizu" + ], + [ + p, + g + ] + ], + [ + /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\w]*)/i, + /(hp) ([\w ]+\w)/i, + /(asus)-?(\w+)/i, + /(microsoft); (lumia[\w ]+)/i, + /(lenovo)[-_ ]?([-\w]+)/i, + /(jolla)/i, + /(oppo) ?([\w ]+) bui/i + ], + [ + m, + c, + [ + p, + g + ] + ], + [ + /(kobo)\s(ereader|touch)/i, + /(archos) (gamepad2?)/i, + /(hp).+(touchpad(?!.+tablet)|tablet)/i, + /(kindle)\/([\w\.]+)/i, + /(nook)[\w ]+build\/(\w+)/i, + /(dell) (strea[kpr\d ]*[\dko])/i, + /(le[- ]+pan)[- ]+(\w{1,9}) bui/i, + /(trinity)[- ]*(t\d{3}) bui/i, + /(gigaset)[- ]+(q\w{1,9}) bui/i, + /(vodafone) ([\w ]+)(?:\)| bui)/i + ], + [ + m, + c, + [ + p, + k + ] + ], + [ + /(surface duo)/i + ], + [ + c, + [ + m, + R + ], + [ + p, + k + ] + ], + [ + /droid [\d\.]+; (fp\du?)(?: b|\))/i + ], + [ + c, + [ + m, + "Fairphone" + ], + [ + p, + g + ] + ], + [ + /(u304aa)/i + ], + [ + c, + [ + m, + "AT&T" + ], + [ + p, + g + ] + ], + [ + /\bsie-(\w*)/i + ], + [ + c, + [ + m, + "Siemens" + ], + [ + p, + g + ] + ], + [ + /\b(rct\w+) b/i + ], + [ + c, + [ + m, + "RCA" + ], + [ + p, + k + ] + ], + [ + /\b(venue[\d ]{2,7}) b/i + ], + [ + c, + [ + m, + "Dell" + ], + [ + p, + k + ] + ], + [ + /\b(q(?:mv|ta)\w+) b/i + ], + [ + c, + [ + m, + "Verizon" + ], + [ + p, + k + ] + ], + [ + /\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i + ], + [ + c, + [ + m, + "Barnes & Noble" + ], + [ + p, + k + ] + ], + [ + /\b(tm\d{3}\w+) b/i + ], + [ + c, + [ + m, + "NuVision" + ], + [ + p, + k + ] + ], + [ + /\b(k88) b/i + ], + [ + c, + [ + m, + "ZTE" + ], + [ + p, + k + ] + ], + [ + /\b(nx\d{3}j) b/i + ], + [ + c, + [ + m, + "ZTE" + ], + [ + p, + g + ] + ], + [ + /\b(gen\d{3}) b.+49h/i + ], + [ + c, + [ + m, + "Swiss" + ], + [ + p, + g + ] + ], + [ + /\b(zur\d{3}) b/i + ], + [ + c, + [ + m, + "Swiss" + ], + [ + p, + k + ] + ], + [ + /\b((zeki)?tb.*\b) b/i + ], + [ + c, + [ + m, + "Zeki" + ], + [ + p, + k + ] + ], + [ + /\b([yr]\d{2}) b/i, + /\b(dragon[- ]+touch |dt)(\w{5}) b/i + ], + [ + [ + m, + "Dragon Touch" + ], + c, + [ + p, + k + ] + ], + [ + /\b(ns-?\w{0,9}) b/i + ], + [ + c, + [ + m, + "Insignia" + ], + [ + p, + k + ] + ], + [ + /\b((nxa|next)-?\w{0,9}) b/i + ], + [ + c, + [ + m, + "NextBook" + ], + [ + p, + k + ] + ], + [ + /\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i + ], + [ + [ + m, + "Voice" + ], + c, + [ + p, + g + ] + ], + [ + /\b(lvtel\-)?(v1[12]) b/i + ], + [ + [ + m, + "LvTel" + ], + c, + [ + p, + g + ] + ], + [ + /\b(ph-1) /i + ], + [ + c, + [ + m, + "Essential" + ], + [ + p, + g + ] + ], + [ + /\b(v(100md|700na|7011|917g).*\b) b/i + ], + [ + c, + [ + m, + "Envizen" + ], + [ + p, + k + ] + ], + [ + /\b(trio[-\w\. ]+) b/i + ], + [ + c, + [ + m, + "MachSpeed" + ], + [ + p, + k + ] + ], + [ + /\btu_(1491) b/i + ], + [ + c, + [ + m, + "Rotor" + ], + [ + p, + k + ] + ], + [ + /(shield[\w ]+) b/i + ], + [ + c, + [ + m, + "Nvidia" + ], + [ + p, + k + ] + ], + [ + /(sprint) (\w+)/i + ], + [ + m, + c, + [ + p, + g + ] + ], + [ + /(kin\.[onetw]{3})/i + ], + [ + [ + c, + /\./g, + " " + ], + [ + m, + R + ], + [ + p, + g + ] + ], + [ + /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i + ], + [ + c, + [ + m, + G + ], + [ + p, + k + ] + ], + [ + /droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i + ], + [ + c, + [ + m, + G + ], + [ + p, + g + ] + ], + [ + /smart-tv.+(samsung)/i + ], + [ + m, + [ + p, + x + ] + ], + [ + /hbbtv.+maple;(\d+)/i + ], + [ + [ + c, + /^/, + "SmartTV" + ], + [ + m, + V + ], + [ + p, + x + ] + ], + [ + /(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i + ], + [ + [ + m, + P + ], + [ + p, + x + ] + ], + [ + /(apple) ?tv/i + ], + [ + m, + [ + c, + S + " TV" + ], + [ + p, + x + ] + ], + [ + /crkey/i + ], + [ + [ + c, + C + "cast" + ], + [ + m, + U + ], + [ + p, + x + ] + ], + [ + /droid.+aft(\w)( bui|\))/i + ], + [ + c, + [ + m, + T + ], + [ + p, + x + ] + ], + [ + /\(dtv[\);].+(aquos)/i, + /(aquos-tv[\w ]+)\)/i + ], + [ + c, + [ + m, + D + ], + [ + p, + x + ] + ], + [ + /(bravia[\w ]+)( bui|\))/i + ], + [ + c, + [ + m, + I + ], + [ + p, + x + ] + ], + [ + /(mitv-\w{5}) bui/i + ], + [ + c, + [ + m, + F + ], + [ + p, + x + ] + ], + [ + /Hbbtv.*(technisat) (.*);/i + ], + [ + m, + c, + [ + p, + x + ] + ], + [ + /\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i, + /hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i + ], + [ + [ + m, + trim + ], + [ + c, + trim + ], + [ + p, + x + ] + ], + [ + /\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i + ], + [ + [ + p, + x + ] + ], + [ + /(ouya)/i, + /(nintendo) ([wids3utch]+)/i + ], + [ + m, + c, + [ + p, + v + ] + ], + [ + /droid.+; (shield) bui/i + ], + [ + c, + [ + m, + "Nvidia" + ], + [ + p, + v + ] + ], + [ + /(playstation [345portablevi]+)/i + ], + [ + c, + [ + m, + I + ], + [ + p, + v + ] + ], + [ + /\b(xbox(?: one)?(?!; xbox))[\); ]/i + ], + [ + c, + [ + m, + R + ], + [ + p, + v + ] + ], + [ + /((pebble))app/i + ], + [ + m, + c, + [ + p, + _ + ] + ], + [ + /(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i + ], + [ + c, + [ + m, + S + ], + [ + p, + _ + ] + ], + [ + /droid.+; (glass) \d/i + ], + [ + c, + [ + m, + U + ], + [ + p, + _ + ] + ], + [ + /droid.+; (wt63?0{2,3})\)/i + ], + [ + c, + [ + m, + G + ], + [ + p, + _ + ] + ], + [ + /(quest( 2| pro)?)/i + ], + [ + c, + [ + m, + H + ], + [ + p, + _ + ] + ], + [ + /(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i + ], + [ + m, + [ + p, + y + ] + ], + [ + /(aeobc)\b/i + ], + [ + c, + [ + m, + T + ], + [ + p, + y + ] + ], + [ + /droid .+?; ([^;]+?)(?: bui|\) applew).+? mobile safari/i + ], + [ + c, + [ + p, + g + ] + ], + [ + /droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i + ], + [ + c, + [ + p, + k + ] + ], + [ + /\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i + ], + [ + [ + p, + k + ] + ], + [ + /(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i + ], + [ + [ + p, + g + ] + ], + [ + /(android[-\w\. ]{0,9});.+buil/i + ], + [ + c, + [ + m, + "Generic" + ] + ] + ], + engine: [ + [ + /windows.+ edge\/([\w\.]+)/i + ], + [ + f, + [ + u, + E + "HTML" + ] + ], + [ + /webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i + ], + [ + f, + [ + u, + "Blink" + ] + ], + [ + /(presto)\/([\w\.]+)/i, + /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i, + /ekioh(flow)\/([\w\.]+)/i, + /(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i, + /(icab)[\/ ]([23]\.[\d\.]+)/i, + /\b(libweb)/i + ], + [ + u, + f + ], + [ + /rv\:([\w\.]{1,9})\b.+(gecko)/i + ], + [ + f, + u + ] + ], + os: [ + [ + /microsoft (windows) (vista|xp)/i + ], + [ + u, + f + ], + [ + /(windows) nt 6\.2; (arm)/i, + /(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i, + /(windows)[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i + ], + [ + u, + [ + f, + strMapper, + X + ] + ], + [ + /(win(?=3|9|n)|win 9x )([nt\d\.]+)/i + ], + [ + [ + u, + "Windows" + ], + [ + f, + strMapper, + X + ] + ], + [ + /ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i, + /ios;fbsv\/([\d\.]+)/i, + /cfnetwork\/.+darwin/i + ], + [ + [ + f, + /_/g, + "." + ], + [ + u, + "iOS" + ] + ], + [ + /(mac os x) ?([\w\. ]*)/i, + /(macintosh|mac_powerpc\b)(?!.+haiku)/i + ], + [ + [ + u, + Z + ], + [ + f, + /_/g, + "." + ] + ], + [ + /droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i + ], + [ + f, + u + ], + [ + /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i, + /(blackberry)\w*\/([\w\.]*)/i, + /(tizen|kaios)[\/ ]([\w\.]+)/i, + /\((series40);/i + ], + [ + u, + f + ], + [ + /\(bb(10);/i + ], + [ + f, + [ + u, + N + ] + ], + [ + /(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i + ], + [ + f, + [ + u, + "Symbian" + ] + ], + [ + /mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i + ], + [ + f, + [ + u, + O + " OS" + ] + ], + [ + /web0s;.+rt(tv)/i, + /\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i + ], + [ + f, + [ + u, + "webOS" + ] + ], + [ + /watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i + ], + [ + f, + [ + u, + "watchOS" + ] + ], + [ + /crkey\/([\d\.]+)/i + ], + [ + f, + [ + u, + C + "cast" + ] + ], + [ + /(cros) [\w]+(?:\)| ([\w\.]+)\b)/i + ], + [ + [ + u, + L + ], + f + ], + [ + /panasonic;(viera)/i, + /(netrange)mmh/i, + /(nettv)\/(\d+\.[\w\.]+)/i, + /(nintendo|playstation) ([wids345portablevuch]+)/i, + /(xbox); +xbox ([^\);]+)/i, + /\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i, + /(mint)[\/\(\) ]?(\w*)/i, + /(mageia|vectorlinux)[; ]/i, + /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i, + /(hurd|linux) ?([\w\.]*)/i, + /(gnu) ?([\w\.]*)/i, + /\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i, + /(haiku) (\w+)/i + ], + [ + u, + f + ], + [ + /(sunos) ?([\w\.\d]*)/i + ], + [ + [ + u, + "Solaris" + ], + f + ], + [ + /((?:open)?solaris)[-\/ ]?([\w\.]*)/i, + /(aix) ((\d)(?=\.|\)| )[\w\.])*/i, + /\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i, + /(unix) ?([\w\.]*)/i + ], + [ + u, + f + ] + ] + }; + var UAParser = function(i, e) { + if (typeof i === w) { + e = i; + i = a; + } + if (!(this instanceof UAParser)) { + return new UAParser(i, e).getResult(); + } + var r = typeof o !== b && o.navigator ? o.navigator : a; + var n = i || (r && r.userAgent ? r.userAgent : t); + var v = r && r.userAgentData ? r.userAgentData : a; + var x = e ? extend(K, e) : K; + var _ = r && r.userAgent == n; + this.getBrowser = function() { + var i = {}; + i[u] = a; + i[f] = a; + rgxMapper.call(i, n, x.browser); + i[d] = majorize(i[f]); + if (_ && r && r.brave && typeof r.brave.isBrave == s) { + i[u] = "Brave"; + } + return i; + }; + this.getCPU = function() { + var i = {}; + i[h] = a; + rgxMapper.call(i, n, x.cpu); + return i; + }; + this.getDevice = function() { + var i = {}; + i[m] = a; + i[c] = a; + i[p] = a; + rgxMapper.call(i, n, x.device); + if (_ && !i[p] && v && v.mobile) { + i[p] = g; + } + if (_ && i[c] == "Macintosh" && r && typeof r.standalone !== b && r.maxTouchPoints && r.maxTouchPoints > 2) { + i[c] = "iPad"; + i[p] = k; + } + return i; + }; + this.getEngine = function() { + var i = {}; + i[u] = a; + i[f] = a; + rgxMapper.call(i, n, x.engine); + return i; + }; + this.getOS = function() { + var i = {}; + i[u] = a; + i[f] = a; + rgxMapper.call(i, n, x.os); + if (_ && !i[u] && v && v.platform != "Unknown") { + i[u] = v.platform.replace(/chrome os/i, L).replace(/macos/i, Z); + } + return i; + }; + this.getResult = function() { + return { + ua: this.getUA(), + browser: this.getBrowser(), + engine: this.getEngine(), + os: this.getOS(), + device: this.getDevice(), + cpu: this.getCPU() + }; + }; + this.getUA = function() { + return n; + }; + this.setUA = function(i) { + n = typeof i === l && i.length > q ? trim(i, q) : i; + return this; + }; + this.setUA(n); + return this; + }; + UAParser.VERSION = r; + UAParser.BROWSER = enumerize([ + u, + f, + d + ]); + UAParser.CPU = enumerize([ + h + ]); + UAParser.DEVICE = enumerize([ + c, + m, + p, + v, + g, + x, + k, + _, + y + ]); + UAParser.ENGINE = UAParser.OS = enumerize([ + u, + f + ]); + if (typeof e !== b) { + if ("object" !== b && i.exports) { + e = i.exports = UAParser; + } + e.UAParser = UAParser; + } else { + if (typeof define === s && define.amd) { + ((r)=>r !== undefined && __turbopack_context__.v(r))(function() { + return UAParser; + }(__turbopack_context__.r, exports, module)); + } else if (typeof o !== b) { + o.UAParser = UAParser; + } + } + var Q = typeof o !== b && (o.jQuery || o.Zepto); + if (Q && !Q.ua) { + var Y = new UAParser; + Q.ua = Y.getResult(); + Q.ua.get = function() { + return Y.getUA(); + }; + Q.ua.set = function(i) { + Y.setUA(i); + var e = Y.getResult(); + for(var o in e){ + Q.ua[o] = e[o]; + } + }; + } + })(("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : this); + } + }; + var e = {}; + function __nccwpck_require__(o) { + var a = e[o]; + if (a !== undefined) { + return a.exports; + } + var r = e[o] = { + exports: {} + }; + var t = true; + try { + i[o].call(r.exports, r, r.exports, __nccwpck_require__); + t = false; + } finally{ + if (t) delete e[o]; + } + return r.exports; + } + if (typeof __nccwpck_require__ !== "undefined") __nccwpck_require__.ab = ("TURBOPACK compile-time value", "/ROOT/node_modules/next/dist/compiled/ua-parser-js") + "/"; + var o = __nccwpck_require__(943); + module.exports = o; +})(); +}), +"[project]/node_modules/next/dist/esm/server/route-modules/app-route/module.compiled.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { + +if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable +; +else { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + if ("TURBOPACK compile-time truthy", 1) { + if ("TURBOPACK compile-time truthy", 1) { + module.exports = __turbopack_context__.r("[externals]/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-route-turbo.runtime.dev.js, cjs)"); + } else //TURBOPACK unreachable + ; + } else //TURBOPACK unreachable + ; + } +} +}), +"[project]/node_modules/next/headers.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { + +module.exports.cookies = __turbopack_context__.r("[project]/node_modules/next/dist/server/request/cookies.js [app-route] (ecmascript)").cookies; +module.exports.headers = __turbopack_context__.r("[project]/node_modules/next/dist/server/request/headers.js [app-route] (ecmascript)").headers; +module.exports.draftMode = __turbopack_context__.r("[project]/node_modules/next/dist/server/request/draft-mode.js [app-route] (ecmascript)").draftMode; +}), +"[project]/node_modules/next/server.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { + +const serverExports = { + NextRequest: __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/request.js [app-route] (ecmascript)").NextRequest, + NextResponse: __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/response.js [app-route] (ecmascript)").NextResponse, + ImageResponse: __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/image-response.js [app-route] (ecmascript)").ImageResponse, + userAgentFromString: __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/user-agent.js [app-route] (ecmascript)").userAgentFromString, + userAgent: __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/user-agent.js [app-route] (ecmascript)").userAgent, + URLPattern: __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/url-pattern.js [app-route] (ecmascript)").URLPattern, + after: __turbopack_context__.r("[project]/node_modules/next/dist/server/after/index.js [app-route] (ecmascript)").after, + connection: __turbopack_context__.r("[project]/node_modules/next/dist/server/request/connection.js [app-route] (ecmascript)").connection +}; +// https://nodejs.org/api/esm.html#commonjs-namespaces +// When importing CommonJS modules, the module.exports object is provided as the default export +module.exports = serverExports; +// make import { xxx } from 'next/server' work +exports.NextRequest = serverExports.NextRequest; +exports.NextResponse = serverExports.NextResponse; +exports.ImageResponse = serverExports.ImageResponse; +exports.userAgentFromString = serverExports.userAgentFromString; +exports.userAgent = serverExports.userAgent; +exports.URLPattern = serverExports.URLPattern; +exports.after = serverExports.after; +exports.connection = serverExports.connection; +}), +]; + +//# sourceMappingURL=node_modules_next_0fizghk6jc8ls._.js.map \ No newline at end of file diff --git a/.next-dev/dev/server/chunks/node_modules_next_0fizghk6jc8ls._.js.map b/.next-dev/dev/server/chunks/node_modules_next_0fizghk6jc8ls._.js.map new file mode 100644 index 0000000..0f33302 --- /dev/null +++ b/.next-dev/dev/server/chunks/node_modules_next_0fizghk6jc8ls._.js.map @@ -0,0 +1,161 @@ +{ + "version": 3, + "sources": [], + "sections": [ + {"offset": {"line": 5, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/client/components/hooks-server-context.ts"],"sourcesContent":["const DYNAMIC_ERROR_CODE = 'DYNAMIC_SERVER_USAGE'\n\nexport class DynamicServerError extends Error {\n digest: typeof DYNAMIC_ERROR_CODE = DYNAMIC_ERROR_CODE\n\n constructor(public readonly description: string) {\n super(`Dynamic server usage: ${description}`)\n }\n}\n\nexport function isDynamicServerError(err: unknown): err is DynamicServerError {\n if (\n typeof err !== 'object' ||\n err === null ||\n !('digest' in err) ||\n typeof err.digest !== 'string'\n ) {\n return false\n }\n\n return err.digest === DYNAMIC_ERROR_CODE\n}\n"],"names":["DynamicServerError","isDynamicServerError","DYNAMIC_ERROR_CODE","Error","constructor","description","digest","err"],"mappings":";;;;;;;;;;;;;;IAEaA,kBAAkB,EAAA;eAAlBA;;IAQGC,oBAAoB,EAAA;eAApBA;;;AAVhB,MAAMC,qBAAqB;AAEpB,MAAMF,2BAA2BG;IAGtCC,YAA4BC,WAAmB,CAAE;QAC/C,KAAK,CAAC,CAAC,sBAAsB,EAAEA,aAAa,GAAA,IAAA,CADlBA,WAAAA,GAAAA,aAAAA,IAAAA,CAF5BC,MAAAA,GAAoCJ;IAIpC;AACF;AAEO,SAASD,qBAAqBM,GAAY;IAC/C,IACE,OAAOA,QAAQ,YACfA,QAAQ,QACR,CAAE,CAAA,YAAYA,GAAE,KAChB,OAAOA,IAAID,MAAM,KAAK,UACtB;QACA,OAAO;IACT;IAEA,OAAOC,IAAID,MAAM,KAAKJ;AACxB","ignoreList":[0]}}, + {"offset": {"line": 49, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/client/components/static-generation-bailout.ts"],"sourcesContent":["const NEXT_STATIC_GEN_BAILOUT = 'NEXT_STATIC_GEN_BAILOUT'\n\nexport class StaticGenBailoutError extends Error {\n public readonly code = NEXT_STATIC_GEN_BAILOUT\n}\n\nexport function isStaticGenBailoutError(\n error: unknown\n): error is StaticGenBailoutError {\n if (typeof error !== 'object' || error === null || !('code' in error)) {\n return false\n }\n\n return error.code === NEXT_STATIC_GEN_BAILOUT\n}\n"],"names":["StaticGenBailoutError","isStaticGenBailoutError","NEXT_STATIC_GEN_BAILOUT","Error","code","error"],"mappings":";;;;;;;;;;;;;;IAEaA,qBAAqB,EAAA;eAArBA;;IAIGC,uBAAuB,EAAA;eAAvBA;;;AANhB,MAAMC,0BAA0B;AAEzB,MAAMF,8BAA8BG;;QAApC,KAAA,IAAA,OAAA,IAAA,CACWC,IAAAA,GAAOF;;AACzB;AAEO,SAASD,wBACdI,KAAc;IAEd,IAAI,OAAOA,UAAU,YAAYA,UAAU,QAAQ,CAAE,CAAA,UAAUA,KAAI,GAAI;QACrE,OAAO;IACT;IAEA,OAAOA,MAAMD,IAAI,KAAKF;AACxB","ignoreList":[0]}}, + {"offset": {"line": 93, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/index.ts\nvar src_exports = {};\n__export(src_exports, {\n RequestCookies: () => RequestCookies,\n ResponseCookies: () => ResponseCookies,\n parseCookie: () => parseCookie,\n parseSetCookie: () => parseSetCookie,\n stringifyCookie: () => stringifyCookie\n});\nmodule.exports = __toCommonJS(src_exports);\n\n// src/serialize.ts\nfunction stringifyCookie(c) {\n var _a;\n const attrs = [\n \"path\" in c && c.path && `Path=${c.path}`,\n \"expires\" in c && (c.expires || c.expires === 0) && `Expires=${(typeof c.expires === \"number\" ? new Date(c.expires) : c.expires).toUTCString()}`,\n \"maxAge\" in c && typeof c.maxAge === \"number\" && `Max-Age=${c.maxAge}`,\n \"domain\" in c && c.domain && `Domain=${c.domain}`,\n \"secure\" in c && c.secure && \"Secure\",\n \"httpOnly\" in c && c.httpOnly && \"HttpOnly\",\n \"sameSite\" in c && c.sameSite && `SameSite=${c.sameSite}`,\n \"partitioned\" in c && c.partitioned && \"Partitioned\",\n \"priority\" in c && c.priority && `Priority=${c.priority}`\n ].filter(Boolean);\n const stringified = `${c.name}=${encodeURIComponent((_a = c.value) != null ? _a : \"\")}`;\n return attrs.length === 0 ? stringified : `${stringified}; ${attrs.join(\"; \")}`;\n}\nfunction parseCookie(cookie) {\n const map = /* @__PURE__ */ new Map();\n for (const pair of cookie.split(/; */)) {\n if (!pair)\n continue;\n const splitAt = pair.indexOf(\"=\");\n if (splitAt === -1) {\n map.set(pair, \"true\");\n continue;\n }\n const [key, value] = [pair.slice(0, splitAt), pair.slice(splitAt + 1)];\n try {\n map.set(key, decodeURIComponent(value != null ? value : \"true\"));\n } catch {\n }\n }\n return map;\n}\nfunction parseSetCookie(setCookie) {\n if (!setCookie) {\n return void 0;\n }\n const [[name, value], ...attributes] = parseCookie(setCookie);\n const {\n domain,\n expires,\n httponly,\n maxage,\n path,\n samesite,\n secure,\n partitioned,\n priority\n } = Object.fromEntries(\n attributes.map(([key, value2]) => [\n key.toLowerCase().replace(/-/g, \"\"),\n value2\n ])\n );\n const cookie = {\n name,\n value: decodeURIComponent(value),\n domain,\n ...expires && { expires: new Date(expires) },\n ...httponly && { httpOnly: true },\n ...typeof maxage === \"string\" && { maxAge: Number(maxage) },\n path,\n ...samesite && { sameSite: parseSameSite(samesite) },\n ...secure && { secure: true },\n ...priority && { priority: parsePriority(priority) },\n ...partitioned && { partitioned: true }\n };\n return compact(cookie);\n}\nfunction compact(t) {\n const newT = {};\n for (const key in t) {\n if (t[key]) {\n newT[key] = t[key];\n }\n }\n return newT;\n}\nvar SAME_SITE = [\"strict\", \"lax\", \"none\"];\nfunction parseSameSite(string) {\n string = string.toLowerCase();\n return SAME_SITE.includes(string) ? string : void 0;\n}\nvar PRIORITY = [\"low\", \"medium\", \"high\"];\nfunction parsePriority(string) {\n string = string.toLowerCase();\n return PRIORITY.includes(string) ? string : void 0;\n}\nfunction splitCookiesString(cookiesString) {\n if (!cookiesString)\n return [];\n var cookiesStrings = [];\n var pos = 0;\n var start;\n var ch;\n var lastComma;\n var nextStart;\n var cookiesSeparatorFound;\n function skipWhitespace() {\n while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n pos += 1;\n }\n return pos < cookiesString.length;\n }\n function notSpecialChar() {\n ch = cookiesString.charAt(pos);\n return ch !== \"=\" && ch !== \";\" && ch !== \",\";\n }\n while (pos < cookiesString.length) {\n start = pos;\n cookiesSeparatorFound = false;\n while (skipWhitespace()) {\n ch = cookiesString.charAt(pos);\n if (ch === \",\") {\n lastComma = pos;\n pos += 1;\n skipWhitespace();\n nextStart = pos;\n while (pos < cookiesString.length && notSpecialChar()) {\n pos += 1;\n }\n if (pos < cookiesString.length && cookiesString.charAt(pos) === \"=\") {\n cookiesSeparatorFound = true;\n pos = nextStart;\n cookiesStrings.push(cookiesString.substring(start, lastComma));\n start = pos;\n } else {\n pos = lastComma + 1;\n }\n } else {\n pos += 1;\n }\n }\n if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n cookiesStrings.push(cookiesString.substring(start, cookiesString.length));\n }\n }\n return cookiesStrings;\n}\n\n// src/request-cookies.ts\nvar RequestCookies = class {\n constructor(requestHeaders) {\n /** @internal */\n this._parsed = /* @__PURE__ */ new Map();\n this._headers = requestHeaders;\n const header = requestHeaders.get(\"cookie\");\n if (header) {\n const parsed = parseCookie(header);\n for (const [name, value] of parsed) {\n this._parsed.set(name, { name, value });\n }\n }\n }\n [Symbol.iterator]() {\n return this._parsed[Symbol.iterator]();\n }\n /**\n * The amount of cookies received from the client\n */\n get size() {\n return this._parsed.size;\n }\n get(...args) {\n const name = typeof args[0] === \"string\" ? args[0] : args[0].name;\n return this._parsed.get(name);\n }\n getAll(...args) {\n var _a;\n const all = Array.from(this._parsed);\n if (!args.length) {\n return all.map(([_, value]) => value);\n }\n const name = typeof args[0] === \"string\" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name;\n return all.filter(([n]) => n === name).map(([_, value]) => value);\n }\n has(name) {\n return this._parsed.has(name);\n }\n set(...args) {\n const [name, value] = args.length === 1 ? [args[0].name, args[0].value] : args;\n const map = this._parsed;\n map.set(name, { name, value });\n this._headers.set(\n \"cookie\",\n Array.from(map).map(([_, value2]) => stringifyCookie(value2)).join(\"; \")\n );\n return this;\n }\n /**\n * Delete the cookies matching the passed name or names in the request.\n */\n delete(names) {\n const map = this._parsed;\n const result = !Array.isArray(names) ? map.delete(names) : names.map((name) => map.delete(name));\n this._headers.set(\n \"cookie\",\n Array.from(map).map(([_, value]) => stringifyCookie(value)).join(\"; \")\n );\n return result;\n }\n /**\n * Delete all the cookies in the cookies in the request.\n */\n clear() {\n this.delete(Array.from(this._parsed.keys()));\n return this;\n }\n /**\n * Format the cookies in the request as a string for logging\n */\n [Symbol.for(\"edge-runtime.inspect.custom\")]() {\n return `RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`;\n }\n toString() {\n return [...this._parsed.values()].map((v) => `${v.name}=${encodeURIComponent(v.value)}`).join(\"; \");\n }\n};\n\n// src/response-cookies.ts\nvar ResponseCookies = class {\n constructor(responseHeaders) {\n /** @internal */\n this._parsed = /* @__PURE__ */ new Map();\n var _a, _b, _c;\n this._headers = responseHeaders;\n const setCookie = (_c = (_b = (_a = responseHeaders.getSetCookie) == null ? void 0 : _a.call(responseHeaders)) != null ? _b : responseHeaders.get(\"set-cookie\")) != null ? _c : [];\n const cookieStrings = Array.isArray(setCookie) ? setCookie : splitCookiesString(setCookie);\n for (const cookieString of cookieStrings) {\n const parsed = parseSetCookie(cookieString);\n if (parsed)\n this._parsed.set(parsed.name, parsed);\n }\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-get CookieStore#get} without the Promise.\n */\n get(...args) {\n const key = typeof args[0] === \"string\" ? args[0] : args[0].name;\n return this._parsed.get(key);\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-getAll CookieStore#getAll} without the Promise.\n */\n getAll(...args) {\n var _a;\n const all = Array.from(this._parsed.values());\n if (!args.length) {\n return all;\n }\n const key = typeof args[0] === \"string\" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name;\n return all.filter((c) => c.name === key);\n }\n has(name) {\n return this._parsed.has(name);\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-set CookieStore#set} without the Promise.\n */\n set(...args) {\n const [name, value, cookie] = args.length === 1 ? [args[0].name, args[0].value, args[0]] : args;\n const map = this._parsed;\n map.set(name, normalizeCookie({ name, value, ...cookie }));\n replace(map, this._headers);\n return this;\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-delete CookieStore#delete} without the Promise.\n */\n delete(...args) {\n const [name, options] = typeof args[0] === \"string\" ? [args[0]] : [args[0].name, args[0]];\n return this.set({ ...options, name, value: \"\", expires: /* @__PURE__ */ new Date(0) });\n }\n [Symbol.for(\"edge-runtime.inspect.custom\")]() {\n return `ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`;\n }\n toString() {\n return [...this._parsed.values()].map(stringifyCookie).join(\"; \");\n }\n};\nfunction replace(bag, headers) {\n headers.delete(\"set-cookie\");\n for (const [, value] of bag) {\n const serialized = stringifyCookie(value);\n headers.append(\"set-cookie\", serialized);\n }\n}\nfunction normalizeCookie(cookie = { name: \"\", value: \"\" }) {\n if (typeof cookie.expires === \"number\") {\n cookie.expires = new Date(cookie.expires);\n }\n if (cookie.maxAge) {\n cookie.expires = new Date(Date.now() + cookie.maxAge * 1e3);\n }\n if (cookie.path === null || cookie.path === void 0) {\n cookie.path = \"/\";\n }\n return cookie;\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n RequestCookies,\n ResponseCookies,\n parseCookie,\n parseSetCookie,\n stringifyCookie\n});\n"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","src_exports","RequestCookies","ResponseCookies","parseCookie","parseSetCookie","stringifyCookie","module","exports","c","_a","attrs","path","expires","Date","toUTCString","maxAge","domain","secure","httpOnly","sameSite","partitioned","priority","filter","Boolean","stringified","encodeURIComponent","length","join","cookie","map","Map","pair","split","splitAt","indexOf","set","slice","decodeURIComponent","setCookie","attributes","httponly","maxage","samesite","fromEntries","value2","toLowerCase","replace","Number","parseSameSite","parsePriority","compact","t","newT","SAME_SITE","string","includes","PRIORITY","splitCookiesString","cookiesString","cookiesStrings","pos","start","ch","lastComma","nextStart","cookiesSeparatorFound","skipWhitespace","test","charAt","notSpecialChar","push","substring","requestHeaders","_parsed","_headers","header","parsed","Symbol","iterator","size","args","getAll","Array","_","n","has","delete","names","result","isArray","clear","keys","for","JSON","stringify","toString","values","v","responseHeaders","_b","_c","getSetCookie","cookieStrings","cookieString","normalizeCookie","options","bag","headers","serialized","append","now"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 463, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/build/output/log.ts"],"sourcesContent":["import { bold, green, magenta, red, yellow, white } from '../../lib/picocolors'\nimport { LRUCache } from '../../server/lib/lru-cache'\n\nexport const prefixes = {\n wait: white(bold('○')),\n error: red(bold('⨯')),\n warn: yellow(bold('⚠')),\n ready: '▲', // no color\n info: white(bold(' ')),\n event: green(bold('✓')),\n trace: magenta(bold('»')),\n} as const\n\nconst LOGGING_METHOD = {\n log: 'log',\n warn: 'warn',\n error: 'error',\n} as const\n\nfunction prefixedLog(prefixType: keyof typeof prefixes, ...message: any[]) {\n if ((message[0] === '' || message[0] === undefined) && message.length === 1) {\n message.shift()\n }\n\n const consoleMethod: keyof typeof LOGGING_METHOD =\n prefixType in LOGGING_METHOD\n ? LOGGING_METHOD[prefixType as keyof typeof LOGGING_METHOD]\n : 'log'\n\n const prefix = prefixes[prefixType]\n // If there's no message, don't print the prefix but a new line\n if (message.length === 0) {\n console[consoleMethod]('')\n } else {\n // Ensure if there's ANSI escape codes it's concatenated into one string.\n // Chrome DevTool can only handle color if it's in one string.\n if (message.length === 1 && typeof message[0] === 'string') {\n console[consoleMethod](prefix + ' ' + message[0])\n } else {\n console[consoleMethod](prefix, ...message)\n }\n }\n}\n\nexport function bootstrap(message: string) {\n console.log(message)\n}\n\nexport function wait(...message: any[]) {\n prefixedLog('wait', ...message)\n}\n\nexport function error(...message: any[]) {\n prefixedLog('error', ...message)\n}\n\nexport function warn(...message: any[]) {\n prefixedLog('warn', ...message)\n}\n\nexport function ready(...message: any[]) {\n prefixedLog('ready', ...message)\n}\n\nexport function info(...message: any[]) {\n prefixedLog('info', ...message)\n}\n\nexport function event(...message: any[]) {\n prefixedLog('event', ...message)\n}\n\nexport function trace(...message: any[]) {\n prefixedLog('trace', ...message)\n}\n\nconst warnOnceCache = new LRUCache(10_000, (value) => value.length)\nexport function warnOnce(...message: any[]) {\n const key = message.join(' ')\n if (!warnOnceCache.has(key)) {\n warnOnceCache.set(key, key)\n warn(...message)\n }\n}\n\nconst errorOnceCache = new LRUCache(10_000, (value) => value.length)\nexport function errorOnce(...message: any[]) {\n const key = message.join(' ')\n if (!errorOnceCache.has(key)) {\n errorOnceCache.set(key, key)\n error(...message)\n }\n}\n"],"names":["bold","green","magenta","red","yellow","white","LRUCache","prefixes","wait","error","warn","ready","info","event","trace","LOGGING_METHOD","log","prefixedLog","prefixType","message","undefined","length","shift","consoleMethod","prefix","console","bootstrap","warnOnceCache","value","warnOnce","key","join","has","set","errorOnceCache","errorOnce"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAASA,IAAI,EAAEC,KAAK,EAAEC,OAAO,EAAEC,GAAG,EAAEC,MAAM,EAAEC,KAAK,QAAQ,uBAAsB;AAC/E,SAASC,QAAQ,QAAQ,6BAA4B;;;AAE9C,MAAMC,WAAW;IACtBC,UAAMH,mKAAAA,MAAML,kKAAAA,EAAK;IACjBS,WAAON,iKAAAA,MAAIH,kKAAAA,EAAK;IAChBU,UAAMN,oKAAAA,MAAOJ,kKAAAA,EAAK;IAClBW,OAAO;IACPC,UAAMP,mKAAAA,MAAML,kKAAAA,EAAK;IACjBa,WAAOZ,mKAAAA,MAAMD,kKAAAA,EAAK;IAClBc,WAAOZ,qKAAAA,MAAQF,kKAAAA,EAAK;AACtB,EAAU;AAEV,MAAMe,iBAAiB;IACrBC,KAAK;IACLN,MAAM;IACND,OAAO;AACT;AAEA,SAASQ,YAAYC,UAAiC,EAAE,GAAGC,OAAc;IACvE,IAAKA,CAAAA,OAAO,CAAC,EAAE,KAAK,MAAMA,OAAO,CAAC,EAAE,KAAKC,SAAQ,KAAMD,QAAQE,MAAM,KAAK,GAAG;QAC3EF,QAAQG,KAAK;IACf;IAEA,MAAMC,gBACJL,cAAcH,iBACVA,cAAc,CAACG,WAA0C,GACzD;IAEN,MAAMM,SAASjB,QAAQ,CAACW,WAAW;IACnC,+DAA+D;IAC/D,IAAIC,QAAQE,MAAM,KAAK,GAAG;QACxBI,OAAO,CAACF,cAAc,CAAC;IACzB,OAAO;QACL,yEAAyE;QACzE,8DAA8D;QAC9D,IAAIJ,QAAQE,MAAM,KAAK,KAAK,OAAOF,OAAO,CAAC,EAAE,KAAK,UAAU;YAC1DM,OAAO,CAACF,cAAc,CAACC,SAAS,MAAML,OAAO,CAAC,EAAE;QAClD,OAAO;YACLM,OAAO,CAACF,cAAc,CAACC,WAAWL;QACpC;IACF;AACF;AAEO,SAASO,UAAUP,OAAe;IACvCM,QAAQT,GAAG,CAACG;AACd;AAEO,SAASX,KAAK,GAAGW,OAAc;IACpCF,YAAY,WAAWE;AACzB;AAEO,SAASV,MAAM,GAAGU,OAAc;IACrCF,YAAY,YAAYE;AAC1B;AAEO,SAAST,KAAK,GAAGS,OAAc;IACpCF,YAAY,WAAWE;AACzB;AAEO,SAASR,MAAM,GAAGQ,OAAc;IACrCF,YAAY,YAAYE;AAC1B;AAEO,SAASP,KAAK,GAAGO,OAAc;IACpCF,YAAY,WAAWE;AACzB;AAEO,SAASN,MAAM,GAAGM,OAAc;IACrCF,YAAY,YAAYE;AAC1B;AAEO,SAASL,MAAM,GAAGK,OAAc;IACrCF,YAAY,YAAYE;AAC1B;AAEA,MAAMQ,gBAAgB,IAAIrB,kLAAAA,CAAiB,OAAQ,CAACsB,QAAUA,MAAMP,MAAM;AACnE,SAASQ,SAAS,GAAGV,OAAc;IACxC,MAAMW,MAAMX,QAAQY,IAAI,CAAC;IACzB,IAAI,CAACJ,cAAcK,GAAG,CAACF,MAAM;QAC3BH,cAAcM,GAAG,CAACH,KAAKA;QACvBpB,QAAQS;IACV;AACF;AAEA,MAAMe,iBAAiB,IAAI5B,kLAAAA,CAAiB,OAAQ,CAACsB,QAAUA,MAAMP,MAAM;AACpE,SAASc,UAAU,GAAGhB,OAAc;IACzC,MAAMW,MAAMX,QAAQY,IAAI,CAAC;IACzB,IAAI,CAACG,eAAeF,GAAG,CAACF,MAAM;QAC5BI,eAAeD,GAAG,CAACH,KAAKA;QACxBrB,SAASU;IACX;AACF","ignoreList":[0]}}, + {"offset": {"line": 568, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/build/templates/app-route.ts"],"sourcesContent":["import {\n AppRouteRouteModule,\n type AppRouteRouteHandlerContext,\n type AppRouteRouteModuleOptions,\n} from '../../server/route-modules/app-route/module.compiled'\nimport { RouteKind } from '../../server/route-kind'\nimport { patchFetch as _patchFetch } from '../../server/lib/patch-fetch'\nimport type { IncomingMessage, ServerResponse } from 'node:http'\nimport {\n addRequestMeta,\n getRequestMeta,\n setRequestMeta,\n type RequestMeta,\n} from '../../server/request-meta'\nimport {\n getTracer,\n type Span,\n SpanKind,\n SpanStatusCode,\n} from '../../server/lib/trace/tracer'\nimport { setManifestsSingleton } from '../../server/app-render/manifests-singleton'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport { NodeNextRequest, NodeNextResponse } from '../../server/base-http/node'\nimport {\n NextRequestAdapter,\n signalFromNodeResponse,\n} from '../../server/web/spec-extension/adapters/next-request'\nimport { BaseServerSpan } from '../../server/lib/trace/constants'\nimport { getRevalidateReason } from '../../server/instrumentation/utils'\nimport { sendResponse } from '../../server/send-response'\nimport {\n fromNodeOutgoingHttpHeaders,\n toNodeOutgoingHttpHeaders,\n} from '../../server/web/utils'\nimport { getCacheControlHeader } from '../../server/lib/cache-control'\nimport { INFINITE_CACHE, NEXT_CACHE_TAGS_HEADER } from '../../lib/constants'\nimport { NoFallbackError } from '../../shared/lib/no-fallback-error.external'\nimport { isRouteCacheOwner } from '../../server/lib/route-cache-key'\nimport {\n CachedRouteKind,\n type ResponseCacheEntry,\n type ResponseGenerator,\n} from '../../server/response-cache'\n\n// These are injected by the loader afterwards. This is injected as a variable\n// instead of a replacement because this could also be `undefined` instead of\n// an empty string.\ndeclare const nextConfigOutput: AppRouteRouteModuleOptions['nextConfigOutput']\n\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\n// INJECT:nextConfigOutput\n\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: 'VAR_DEFINITION_PAGE',\n pathname: 'VAR_DEFINITION_PATHNAME',\n filename: 'VAR_DEFINITION_FILENAME',\n bundlePath: 'VAR_DEFINITION_BUNDLE_PATH',\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '',\n resolvedPagePath: 'VAR_RESOLVED_PAGE_PATH',\n nextConfigOutput,\n // The lazy require factory ensures that:\n // - In dev: devRequestTimingInternalsEnd is set before userland executes,\n // correctly attributing module load time to application-code rather than\n // framework internals.\n // - In all modes: async modules (route files with top-level await) are\n // handled correctly — require() returns a Promise for such modules, which\n // ensureUserland() awaits before the first request is handled.\n userland: () => require('VAR_USERLAND') as typeof import('VAR_USERLAND'),\n // In Turbopack dev mode, also provide a synchronous per-request getter so\n // server HMR updates are picked up without re-executing the entry chunk.\n // Using require() (synchronous) avoids adding async overhead that would be\n // incorrectly attributed to application-code time in devRequestTiming.\n ...(process.env.TURBOPACK && process.env.__NEXT_DEV_SERVER\n ? {\n getUserland: () =>\n require('VAR_USERLAND') as typeof import('VAR_USERLAND'),\n }\n : {}),\n})\n\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule\n\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage,\n })\n}\n\nexport {\n routeModule,\n workAsyncStorage,\n workUnitAsyncStorage,\n serverHooks,\n patchFetch,\n}\n\nexport async function handler(\n req: IncomingMessage,\n res: ServerResponse,\n ctx: {\n waitUntil?: (prom: Promise) => void\n requestMeta?: RequestMeta\n }\n) {\n if (ctx.requestMeta) {\n setRequestMeta(req, ctx.requestMeta)\n }\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint())\n }\n let srcPage = 'VAR_DEFINITION_PAGE'\n\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (process.env.TURBOPACK) {\n srcPage = srcPage.replace(/\\/index$/, '') || '/'\n } else if (srcPage === '/index') {\n // we always normalize /index specifically\n srcPage = '/'\n }\n const multiZoneDraftMode = process.env\n .__NEXT_MULTI_ZONE_DRAFT_MODE as any as boolean\n\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage,\n multiZoneDraftMode,\n })\n\n if (!prepareResult) {\n res.statusCode = 400\n res.end('Bad Request')\n ctx.waitUntil?.(Promise.resolve())\n return null\n }\n\n const {\n buildId,\n deploymentId,\n params,\n nextConfig,\n parsedUrl,\n isDraftMode,\n prerenderManifest,\n routerServerContext,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n resolvedPathname,\n clientReferenceManifest,\n serverActionsManifest,\n previewProps,\n } = prepareResult\n\n const normalizedSrcPage = normalizeAppPath(srcPage)\n\n // Only this route's prerenders can establish ISR or admit generated params.\n const isPrerendered =\n Boolean(prerenderManifest.routes[resolvedPathname]) &&\n (routeModule.isDev ||\n isRouteCacheOwner(\n resolvedPathname,\n routeModule.cacheOwner,\n prerenderManifest.routes[resolvedPathname]\n ))\n\n let isIsr = Boolean(\n prerenderManifest.dynamicRoutes[normalizedSrcPage] || isPrerendered\n )\n\n const render404 = async () => {\n // TODO: should route-module itself handle rendering the 404\n if (routerServerContext?.render404) {\n await routerServerContext.render404(req, res, parsedUrl, false)\n } else {\n res.end('This page could not be found')\n }\n return null\n }\n\n if (isIsr && !isDraftMode) {\n const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage]\n\n if (prerenderInfo) {\n if (prerenderInfo.fallback === false && !isPrerendered) {\n if (nextConfig.adapterPath) {\n return await render404()\n }\n throw new NoFallbackError()\n }\n }\n }\n\n let cacheKey: string | null = null\n\n if (isIsr && !routeModule.isDev && !isDraftMode) {\n cacheKey = resolvedPathname\n // ensure /index and / is normalized to one key\n cacheKey = cacheKey === '/index' ? '/' : cacheKey\n }\n\n // Before rendering (which initializes component tree modules), we have to\n // set the reference manifests to our global store so Server Action's\n // encryption util can access to them at the top level of the page module.\n if (serverActionsManifest && clientReferenceManifest) {\n setManifestsSingleton({\n page: srcPage,\n clientReferenceManifest,\n serverActionsManifest,\n })\n }\n\n const method = req.method || 'GET'\n const tracer = getTracer()\n const activeSpan = tracer.getActiveScopeSpan()\n const isWrappedByNextServer = Boolean(\n routerServerContext?.isWrappedByNextServer\n )\n const isMinimalMode = Boolean(getRequestMeta(req, 'minimalMode'))\n\n const incrementalCache =\n getRequestMeta(req, 'incrementalCache') ||\n (await routeModule.getIncrementalCache(\n req,\n nextConfig,\n previewProps,\n prerenderManifest,\n isMinimalMode\n ))\n\n incrementalCache?.resetRequestCache()\n ;(globalThis as any).__incrementalCache = incrementalCache\n\n const context: AppRouteRouteHandlerContext = {\n params,\n previewProps,\n renderOpts: {\n experimental: {\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts),\n useCacheTimeout: nextConfig.experimental.useCacheTimeout,\n durableUseCacheEntries: Boolean(\n nextConfig.experimental.durableUseCacheEntries\n ),\n },\n cacheComponents: Boolean(nextConfig.cacheComponents),\n validationLevel: nextConfig.experimental.instantInsights.validationLevel,\n isDraftMode,\n incrementalCache,\n hmrRefreshHash: getRequestMeta(req, 'hmrRefreshHash'),\n cacheLifeProfiles: nextConfig.cacheLife,\n staticPageGenerationTimeout: nextConfig.staticPageGenerationTimeout,\n waitUntil: ctx.waitUntil,\n onClose: (cb) => {\n res.on('close', cb)\n },\n onAfterTaskError: undefined,\n },\n sharedContext: {\n buildId,\n deploymentId,\n },\n }\n const nodeNextReq = new NodeNextRequest(req)\n const nodeNextRes = new NodeNextResponse(res)\n\n const nextReq = NextRequestAdapter.fromNodeNextRequest(\n nodeNextReq,\n signalFromNodeResponse(res)\n )\n\n const responseGenerator: ResponseGenerator = async ({\n previousCacheEntry,\n }) => {\n try {\n if (\n !isMinimalMode &&\n isOnDemandRevalidate &&\n revalidateOnlyGenerated &&\n !previousCacheEntry\n ) {\n res.statusCode = 404\n // on-demand revalidate always sets this header\n res.setHeader('x-nextjs-cache', 'REVALIDATED')\n res.end('This page could not be found')\n return null\n }\n\n const response =\n cacheKey === null\n ? await routeModule.handle(nextReq, context)\n : await routeModule.prerender(nextReq, context)\n\n ;(req as any).fetchMetrics = (context.renderOpts as any).fetchMetrics\n let pendingWaitUntil = context.renderOpts.pendingWaitUntil\n\n // Attempt using provided waitUntil if available\n // if it's not we fallback to sendResponse's handling\n if (pendingWaitUntil) {\n if (ctx.waitUntil) {\n ctx.waitUntil(pendingWaitUntil)\n pendingWaitUntil = undefined\n }\n }\n const cacheTags = context.renderOpts.collectedTags\n\n // If the request is for a static response, we can cache it so long\n // as it's not edge.\n if (isIsr) {\n const blob = await response.blob()\n\n // Copy the headers from the response.\n const headers = toNodeOutgoingHttpHeaders(response.headers)\n\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags\n }\n\n if (!headers['content-type'] && blob.type) {\n headers['content-type'] = blob.type\n }\n\n const revalidate =\n typeof context.renderOpts.collectedRevalidate === 'undefined' ||\n context.renderOpts.collectedRevalidate >= INFINITE_CACHE\n ? false\n : context.renderOpts.collectedRevalidate\n\n const expire =\n typeof context.renderOpts.collectedExpire === 'undefined' ||\n context.renderOpts.collectedExpire >= INFINITE_CACHE\n ? // Fall back to the global `expireTime` config when the\n // route has a numeric `revalidate` but didn't declare an\n // explicit `expire` (e.g. via `cacheLife`). This mirrors the\n // build-time fallback in `build/index.ts` so cache entries\n // and the response Cache-Control header agree on the route's\n // effective expire. Routes that opt out of revalidation\n // (`revalidate: false`) or that are dynamic (`revalidate: 0`)\n // keep `expire: undefined`.\n revalidate !== false && revalidate > 0\n ? nextConfig.expireTime\n : undefined\n : context.renderOpts.collectedExpire\n\n // Create the cache entry for the response.\n const cacheEntry: ResponseCacheEntry = {\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n status: response.status,\n body: Buffer.from(await blob.arrayBuffer()),\n headers,\n },\n cacheControl: { revalidate, expire },\n }\n\n return cacheEntry\n } else {\n // send response without caching if not ISR\n await sendResponse(nodeNextReq, nodeNextRes, response, pendingWaitUntil)\n return null\n }\n } catch (err) {\n // if this is a background revalidate we need to report\n // the request error here as it won't be bubbled\n if (previousCacheEntry?.isStale) {\n const silenceLog = false\n await routeModule.onRequestError(\n req,\n err,\n {\n routerKind: 'App Router',\n routePath: srcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration: cacheKey !== null,\n isOnDemandRevalidate,\n }),\n },\n silenceLog,\n routerServerContext\n )\n }\n throw err\n }\n }\n\n const handleResponse = async (\n currentSpan: Span | undefined,\n parentSpan: Span | undefined\n ) => {\n try {\n const cacheEntry = await routeModule.handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind: RouteKind.APP_ROUTE,\n isFallback: false,\n previewProps,\n prerenderManifest,\n isRoutePPREnabled: false,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil: ctx.waitUntil,\n isMinimalMode,\n })\n\n if (cacheEntry !== null && 'error' in cacheEntry) {\n throw cacheEntry.error\n }\n\n // we don't create a cacheEntry for ISR\n if (!isIsr) {\n return\n }\n\n if (cacheEntry?.value?.kind !== CachedRouteKind.APP_ROUTE) {\n throw new Error(\n `Invariant: app-route received invalid cache entry ${cacheEntry?.value?.kind}`\n )\n }\n\n if (!isMinimalMode) {\n res.setHeader(\n 'x-nextjs-cache',\n isOnDemandRevalidate\n ? 'REVALIDATED'\n : cacheEntry.isMiss\n ? 'MISS'\n : cacheEntry.isStale\n ? 'STALE'\n : 'HIT'\n )\n }\n\n // Draft mode should never be cached\n if (isDraftMode) {\n res.setHeader(\n 'Cache-Control',\n 'private, no-cache, no-store, max-age=0, must-revalidate'\n )\n }\n\n const headers = fromNodeOutgoingHttpHeaders(cacheEntry.value.headers)\n\n if (!(isMinimalMode && isIsr)) {\n headers.delete(NEXT_CACHE_TAGS_HEADER)\n }\n\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (\n cacheEntry.cacheControl &&\n !res.getHeader('Cache-Control') &&\n !headers.get('Cache-Control')\n ) {\n headers.set(\n 'Cache-Control',\n getCacheControlHeader(cacheEntry.cacheControl)\n )\n }\n\n await sendResponse(\n nodeNextReq,\n nodeNextRes,\n // @ts-expect-error - Argument of type 'Buffer' is not assignable to parameter of type 'BodyInit | null | undefined'.\n new Response(cacheEntry.value.body, {\n headers,\n status: cacheEntry.value.status || 200,\n })\n )\n return\n } catch (err) {\n if (!(err instanceof NoFallbackError)) {\n const silenceLog = false\n await routeModule.onRequestError(\n req,\n err,\n {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration: cacheKey !== null,\n isOnDemandRevalidate,\n }),\n },\n silenceLog,\n routerServerContext\n )\n }\n\n // rethrow so that we can handle serving error page\n\n // If this is during static generation, throw the error again.\n if (isIsr) throw err\n\n // Otherwise, send a 500 response unless the original response has\n // already committed. In that case, preserve its status code for\n // telemetry while still recording the failure and terminating a response\n // that the failed pipeline left open.\n if (res.headersSent) {\n if (currentSpan) {\n const error =\n err instanceof Error ? err : new Error('Unknown app route error')\n currentSpan.recordException(error)\n currentSpan.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n })\n currentSpan.setAttribute('error.type', error.name)\n }\n if (!res.writableEnded && !res.destroyed) {\n res.end()\n }\n } else {\n await sendResponse(\n nodeNextReq,\n nodeNextRes,\n new Response(null, { status: 500 })\n )\n }\n return\n } finally {\n ;(() => {\n if (!currentSpan) {\n return\n }\n\n let statusCode = res.statusCode\n\n currentSpan.setAttributes({\n 'http.status_code': statusCode,\n 'next.rsc': false,\n })\n\n if (statusCode && statusCode >= 500) {\n // For 5xx status codes: SHOULD be set to 'Error' span status.\n // x-ref: https://opentelemetry.io/docs/specs/semconv/http/http-spans/#status\n currentSpan.setStatus({\n code: SpanStatusCode.ERROR,\n })\n // For span status 'Error', SHOULD set 'error.type' attribute.\n currentSpan.setAttribute('error.type', statusCode.toString())\n }\n\n const rootSpanAttributes = tracer.getRootSpanAttributes()\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return\n }\n\n if (\n rootSpanAttributes.get('next.span_type') !==\n BaseServerSpan.handleRequest\n ) {\n console.warn(\n `Unexpected root span type '${rootSpanAttributes.get(\n 'next.span_type'\n )}'. Please report this Next.js issue https://github.com/vercel/next.js`\n )\n return\n }\n\n const route = rootSpanAttributes.get('next.route') || normalizedSrcPage\n const name = `${method} ${route}`\n\n currentSpan.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name,\n })\n currentSpan.updateName(name)\n\n // Propagate http.route to the parent span if one exists (e.g.\n // a platform-created HTTP span in adapter deployments).\n if (parentSpan && parentSpan !== currentSpan) {\n parentSpan.setAttribute('http.route', route)\n parentSpan.updateName(name)\n }\n })()\n }\n }\n\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (isWrappedByNextServer && activeSpan) {\n await handleResponse(activeSpan, undefined)\n } else {\n let parentSpan = tracer.getActiveScopeSpan()\n await tracer.withPropagatedContext(\n req.headers,\n () =>\n tracer.trace(\n BaseServerSpan.handleRequest,\n {\n spanName: `${method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url,\n },\n },\n (span) => handleResponse(span, parentSpan)\n ),\n undefined,\n !isWrappedByNextServer\n )\n }\n}\n"],"names":["AppRouteRouteModule","RouteKind","patchFetch","_patchFetch","addRequestMeta","getRequestMeta","setRequestMeta","getTracer","SpanKind","SpanStatusCode","setManifestsSingleton","normalizeAppPath","NodeNextRequest","NodeNextResponse","NextRequestAdapter","signalFromNodeResponse","BaseServerSpan","getRevalidateReason","sendResponse","fromNodeOutgoingHttpHeaders","toNodeOutgoingHttpHeaders","getCacheControlHeader","INFINITE_CACHE","NEXT_CACHE_TAGS_HEADER","NoFallbackError","isRouteCacheOwner","CachedRouteKind","routeModule","definition","kind","APP_ROUTE","page","pathname","filename","bundlePath","distDir","process","env","__NEXT_RELATIVE_DIST_DIR","relativeProjectDir","__NEXT_RELATIVE_PROJECT_DIR","resolvedPagePath","nextConfigOutput","userland","require","TURBOPACK","__NEXT_DEV_SERVER","getUserland","workAsyncStorage","workUnitAsyncStorage","serverHooks","handler","req","res","ctx","requestMeta","isDev","hrtime","bigint","srcPage","replace","multiZoneDraftMode","__NEXT_MULTI_ZONE_DRAFT_MODE","prepareResult","prepare","statusCode","end","waitUntil","Promise","resolve","buildId","deploymentId","params","nextConfig","parsedUrl","isDraftMode","prerenderManifest","routerServerContext","isOnDemandRevalidate","revalidateOnlyGenerated","resolvedPathname","clientReferenceManifest","serverActionsManifest","previewProps","normalizedSrcPage","isPrerendered","Boolean","routes","cacheOwner","isIsr","dynamicRoutes","render404","prerenderInfo","fallback","adapterPath","cacheKey","method","tracer","activeSpan","getActiveScopeSpan","isWrappedByNextServer","isMinimalMode","incrementalCache","getIncrementalCache","resetRequestCache","globalThis","__incrementalCache","context","renderOpts","experimental","authInterrupts","useCacheTimeout","durableUseCacheEntries","cacheComponents","validationLevel","instantInsights","hmrRefreshHash","cacheLifeProfiles","cacheLife","staticPageGenerationTimeout","onClose","cb","on","onAfterTaskError","undefined","sharedContext","nodeNextReq","nodeNextRes","nextReq","fromNodeNextRequest","responseGenerator","previousCacheEntry","setHeader","response","handle","prerender","fetchMetrics","pendingWaitUntil","cacheTags","collectedTags","blob","headers","type","revalidate","collectedRevalidate","expire","collectedExpire","expireTime","cacheEntry","value","status","body","Buffer","from","arrayBuffer","cacheControl","err","isStale","silenceLog","onRequestError","routerKind","routePath","routeType","revalidateReason","isStaticGeneration","handleResponse","currentSpan","parentSpan","routeKind","isFallback","isRoutePPREnabled","error","Error","isMiss","delete","getHeader","get","set","Response","headersSent","recordException","setStatus","code","ERROR","message","setAttribute","name","writableEnded","destroyed","setAttributes","toString","rootSpanAttributes","getRootSpanAttributes","handleRequest","console","warn","route","updateName","withPropagatedContext","trace","spanName","SERVER","attributes","url","span"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 1001, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/client/components/app-router-headers.ts"],"sourcesContent":["export const RSC_HEADER = 'rsc' as const\nexport const ACTION_HEADER = 'next-action' as const\n// TODO: Instead of sending the full router state, we only need to send the\n// segment path. Saves bytes. Then we could also use this field for segment\n// prefetches, which also need to specify a particular segment.\nexport const NEXT_ROUTER_STATE_TREE_HEADER = 'next-router-state-tree' as const\nexport const NEXT_ROUTER_PREFETCH_HEADER = 'next-router-prefetch' as const\n// This contains the path to the segment being prefetched.\n// TODO: If we change next-router-state-tree to be a segment path, we can use\n// that instead. Then next-router-prefetch and next-router-segment-prefetch can\n// be merged into a single enum.\nexport const NEXT_ROUTER_SEGMENT_PREFETCH_HEADER =\n 'next-router-segment-prefetch' as const\nexport const NEXT_HMR_REFRESH_HEADER = 'next-hmr-refresh' as const\nexport const NEXT_URL = 'next-url' as const\nexport const RSC_CONTENT_TYPE_HEADER = 'text/x-component' as const\n\n// Cookie for the Instant Navigation Testing API. Sent automatically with all\n// requests while a navigation lock is held; the server uses its presence to\n// render only the shell. Not exposed in production builds by default.\nexport const NEXT_INSTANT_TEST_COOKIE =\n 'next-instant-navigation-testing' as const\n\nexport const FLIGHT_HEADERS = [\n RSC_HEADER,\n NEXT_ROUTER_STATE_TREE_HEADER,\n NEXT_ROUTER_PREFETCH_HEADER,\n NEXT_HMR_REFRESH_HEADER,\n NEXT_ROUTER_SEGMENT_PREFETCH_HEADER,\n] as const\n\nexport const NEXT_RSC_UNION_QUERY = '_rsc' as const\n\nexport const NEXT_ROUTER_STALE_TIME_HEADER = 'x-nextjs-stale-time' as const\nexport const NEXT_DID_POSTPONE_HEADER = 'x-nextjs-postponed' as const\nexport const NEXT_REWRITTEN_PATH_HEADER = 'x-nextjs-rewritten-path' as const\nexport const NEXT_REWRITTEN_QUERY_HEADER = 'x-nextjs-rewritten-query' as const\nexport const NEXT_IS_PRERENDER_HEADER = 'x-nextjs-prerender' as const\nexport const NEXT_ACTION_NOT_FOUND_HEADER = 'x-nextjs-action-not-found' as const\nexport const NEXT_REQUEST_ID_HEADER = 'x-nextjs-request-id' as const\nexport const NEXT_HTML_REQUEST_ID_HEADER = 'x-nextjs-html-request-id' as const\n\n// TODO: Should this include nextjs in the name, like the others?\nexport const NEXT_ACTION_REVALIDATED_HEADER = 'x-action-revalidated' as const\n"],"names":["RSC_HEADER","ACTION_HEADER","NEXT_ROUTER_STATE_TREE_HEADER","NEXT_ROUTER_PREFETCH_HEADER","NEXT_ROUTER_SEGMENT_PREFETCH_HEADER","NEXT_HMR_REFRESH_HEADER","NEXT_URL","RSC_CONTENT_TYPE_HEADER","NEXT_INSTANT_TEST_COOKIE","FLIGHT_HEADERS","NEXT_RSC_UNION_QUERY","NEXT_ROUTER_STALE_TIME_HEADER","NEXT_DID_POSTPONE_HEADER","NEXT_REWRITTEN_PATH_HEADER","NEXT_REWRITTEN_QUERY_HEADER","NEXT_IS_PRERENDER_HEADER","NEXT_ACTION_NOT_FOUND_HEADER","NEXT_REQUEST_ID_HEADER","NEXT_HTML_REQUEST_ID_HEADER","NEXT_ACTION_REVALIDATED_HEADER"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,MAAMA,aAAa,MAAc;AACjC,MAAMC,gBAAgB,cAAsB;AAI5C,MAAMC,gCAAgC,yBAAiC;AACvE,MAAMC,8BAA8B,uBAA+B;AAKnE,MAAMC,sCACX,+BAAuC;AAClC,MAAMC,0BAA0B,mBAA2B;AAC3D,MAAMC,WAAW,WAAmB;AACpC,MAAMC,0BAA0B,mBAA2B;AAK3D,MAAMC,2BACX,kCAA0C;AAErC,MAAMC,iBAAiB;IAC5BT;IACAE;IACAC;IACAE;IACAD;CACD,CAAS;AAEH,MAAMM,uBAAuB,OAAe;AAE5C,MAAMC,gCAAgC,sBAA8B;AACpE,MAAMC,2BAA2B,qBAA6B;AAC9D,MAAMC,6BAA6B,0BAAkC;AACrE,MAAMC,8BAA8B,2BAAmC;AACvE,MAAMC,2BAA2B,qBAA6B;AAC9D,MAAMC,+BAA+B,4BAAoC;AACzE,MAAMC,yBAAyB,sBAA8B;AAC7D,MAAMC,8BAA8B,2BAAmC;AAGvE,MAAMC,iCAAiC,uBAA+B","ignoreList":[0]}}, + {"offset": {"line": 1073, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/client/components/hooks-server-context.ts"],"sourcesContent":["const DYNAMIC_ERROR_CODE = 'DYNAMIC_SERVER_USAGE'\n\nexport class DynamicServerError extends Error {\n digest: typeof DYNAMIC_ERROR_CODE = DYNAMIC_ERROR_CODE\n\n constructor(public readonly description: string) {\n super(`Dynamic server usage: ${description}`)\n }\n}\n\nexport function isDynamicServerError(err: unknown): err is DynamicServerError {\n if (\n typeof err !== 'object' ||\n err === null ||\n !('digest' in err) ||\n typeof err.digest !== 'string'\n ) {\n return false\n }\n\n return err.digest === DYNAMIC_ERROR_CODE\n}\n"],"names":["DYNAMIC_ERROR_CODE","DynamicServerError","Error","constructor","description","digest","isDynamicServerError","err"],"mappings":";;;;;;AAAA,MAAMA,qBAAqB;AAEpB,MAAMC,2BAA2BC;IAGtCC,YAA4BC,WAAmB,CAAE;QAC/C,KAAK,CAAC,CAAC,sBAAsB,EAAEA,aAAa,GAAA,IAAA,CADlBA,WAAAA,GAAAA,aAAAA,IAAAA,CAF5BC,MAAAA,GAAoCL;IAIpC;AACF;AAEO,SAASM,qBAAqBC,GAAY;IAC/C,IACE,OAAOA,QAAQ,YACfA,QAAQ,QACR,CAAE,CAAA,YAAYA,GAAE,KAChB,OAAOA,IAAIF,MAAM,KAAK,UACtB;QACA,OAAO;IACT;IAEA,OAAOE,IAAIF,MAAM,KAAKL;AACxB","ignoreList":[0]}}, + {"offset": {"line": 1095, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/client/components/redirect-status-code.ts"],"sourcesContent":["export enum RedirectStatusCode {\n SeeOther = 303,\n TemporaryRedirect = 307,\n PermanentRedirect = 308,\n}\n"],"names":["RedirectStatusCode"],"mappings":";;;;AAAO,IAAKA,qBAAAA,WAAAA,GAAAA,SAAAA,kBAAAA;;;;WAAAA;MAIX","ignoreList":[0]}}, + {"offset": {"line": 1109, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/client/components/static-generation-bailout.ts"],"sourcesContent":["const NEXT_STATIC_GEN_BAILOUT = 'NEXT_STATIC_GEN_BAILOUT'\n\nexport class StaticGenBailoutError extends Error {\n public readonly code = NEXT_STATIC_GEN_BAILOUT\n}\n\nexport function isStaticGenBailoutError(\n error: unknown\n): error is StaticGenBailoutError {\n if (typeof error !== 'object' || error === null || !('code' in error)) {\n return false\n }\n\n return error.code === NEXT_STATIC_GEN_BAILOUT\n}\n"],"names":["NEXT_STATIC_GEN_BAILOUT","StaticGenBailoutError","Error","code","isStaticGenBailoutError","error"],"mappings":";;;;;;AAAA,MAAMA,0BAA0B;AAEzB,MAAMC,8BAA8BC;;QAApC,KAAA,IAAA,OAAA,IAAA,CACWC,IAAAA,GAAOH;;AACzB;AAEO,SAASI,wBACdC,KAAc;IAEd,IAAI,OAAOA,UAAU,YAAYA,UAAU,QAAQ,CAAE,CAAA,UAAUA,KAAI,GAAI;QACrE,OAAO;IACT;IAEA,OAAOA,MAAMF,IAAI,KAAKH;AACxB","ignoreList":[0]}}, + {"offset": {"line": 1131, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/lib/batcher.ts"],"sourcesContent":["import type { SchedulerFn } from './scheduler'\n\nimport { createPromiseWithResolvers } from '../shared/lib/promise-with-resolvers'\n\ntype CacheKeyFn = (\n key: K\n) => PromiseLike | C\n\ntype BatcherOptions = {\n cacheKeyFn?: CacheKeyFn\n schedulerFn?: SchedulerFn\n}\n\ntype WorkFnContext = {\n resolve: (value: V | PromiseLike) => void\n key: K\n}\n\ntype WorkFn = (context: WorkFnContext) => Promise\n\n/**\n * A wrapper for a function that will only allow one call to the function to\n * execute at a time.\n */\nexport class Batcher {\n private readonly pending = new Map>()\n\n protected constructor(\n private readonly cacheKeyFn?: CacheKeyFn,\n /**\n * A function that will be called to schedule the wrapped function to be\n * executed. This defaults to a function that will execute the function\n * immediately.\n */\n private readonly schedulerFn: SchedulerFn = (fn) => fn()\n ) {}\n\n /**\n * Creates a new instance of PendingWrapper. If the key extends a string or\n * number, the key will be used as the cache key. If the key is an object, a\n * cache key function must be provided.\n */\n public static create(\n options?: BatcherOptions\n ): Batcher\n public static create(\n options: BatcherOptions &\n Required, 'cacheKeyFn'>>\n ): Batcher\n public static create(\n options?: BatcherOptions\n ): Batcher {\n return new Batcher(options?.cacheKeyFn, options?.schedulerFn)\n }\n\n /**\n * Wraps a function in a promise that will be resolved or rejected only once\n * for a given key. This will allow multiple calls to the function to be\n * made, but only one will be executed at a time. The result of the first\n * call will be returned to all callers.\n *\n * @param key the key to use for the cache\n * @param fn the function to wrap\n * @returns a promise that resolves to the result of the function\n */\n public async batch(key: K, fn: WorkFn): Promise {\n const cacheKey = (this.cacheKeyFn ? await this.cacheKeyFn(key) : key) as C\n if (cacheKey === null) {\n return fn({ resolve: (value) => Promise.resolve(value), key })\n }\n\n const pending = this.pending.get(cacheKey)\n if (pending) return pending\n\n const { promise, resolve, reject } = createPromiseWithResolvers()\n this.pending.set(cacheKey, promise)\n\n this.schedulerFn(async () => {\n try {\n const result = await fn({ resolve, key })\n\n // Resolving a promise multiple times is a no-op, so we can safely\n // resolve all pending promises with the same result.\n resolve(result)\n } catch (err) {\n reject(err)\n } finally {\n this.pending.delete(cacheKey)\n }\n })\n\n return promise\n }\n}\n"],"names":["createPromiseWithResolvers","Batcher","cacheKeyFn","schedulerFn","fn","pending","Map","create","options","batch","key","cacheKey","resolve","value","Promise","get","promise","reject","set","result","err","delete"],"mappings":";;;;AAEA,SAASA,0BAA0B,QAAQ,uCAAsC;;AAsB1E,MAAMC;IAGX,YACmBC,UAA6B,EAC9C;;;;KAIC,GACgBC,cAAiC,CAACC,KAAOA,IAAI,CAC9D;aAPiBF,UAAAA,GAAAA;aAMAC,WAAAA,GAAAA;aATFE,OAAAA,GAAU,IAAIC;IAU5B;IAcH,OAAcC,OACZC,OAA8B,EACZ;QAClB,OAAO,IAAIP,QAAiBO,WAAAA,OAAAA,KAAAA,IAAAA,QAASN,UAAU,EAAEM,WAAAA,OAAAA,KAAAA,IAAAA,QAASL,WAAW;IACvE;IAEA;;;;;;;;;GASC,GACD,MAAaM,MAAMC,GAAM,EAAEN,EAAgB,EAAc;QACvD,MAAMO,WAAY,IAAI,CAACT,UAAU,GAAG,MAAM,IAAI,CAACA,UAAU,CAACQ,OAAOA;QACjE,IAAIC,aAAa,MAAM;YACrB,OAAOP,GAAG;gBAAEQ,SAAS,CAACC,QAAUC,QAAQF,OAAO,CAACC;gBAAQH;YAAI;QAC9D;QAEA,MAAML,UAAU,IAAI,CAACA,OAAO,CAACU,GAAG,CAACJ;QACjC,IAAIN,SAAS,OAAOA;QAEpB,MAAM,EAAEW,OAAO,EAAEJ,OAAO,EAAEK,MAAM,EAAE,OAAGjB,oNAAAA;QACrC,IAAI,CAACK,OAAO,CAACa,GAAG,CAACP,UAAUK;QAE3B,IAAI,CAACb,WAAW,CAAC;YACf,IAAI;gBACF,MAAMgB,SAAS,MAAMf,GAAG;oBAAEQ;oBAASF;gBAAI;gBAEvC,kEAAkE;gBAClE,qDAAqD;gBACrDE,QAAQO;YACV,EAAE,OAAOC,KAAK;gBACZH,OAAOG;YACT,SAAU;gBACR,IAAI,CAACf,OAAO,CAACgB,MAAM,CAACV;YACtB;QACF;QAEA,OAAOK;IACT;AACF","ignoreList":[0]}}, + {"offset": {"line": 1193, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/lib/constants.ts"],"sourcesContent":["import type { ServerRuntime } from '../types'\n\nexport const TEXT_PLAIN_CONTENT_TYPE_HEADER = 'text/plain'\nexport const HTML_CONTENT_TYPE_HEADER = 'text/html; charset=utf-8'\nexport const JSON_CONTENT_TYPE_HEADER = 'application/json; charset=utf-8'\nexport const NEXT_QUERY_PARAM_PREFIX = 'nxtP'\nexport const NEXT_INTERCEPTION_MARKER_PREFIX = 'nxtI'\n\nexport const MATCHED_PATH_HEADER = 'x-matched-path'\nexport const PRERENDER_REVALIDATE_HEADER = 'x-prerender-revalidate'\nexport const PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER =\n 'x-prerender-revalidate-if-generated'\n\nexport const RSC_SEGMENTS_DIR_SUFFIX = '.segments'\nexport const RSC_SEGMENT_SUFFIX = '.segment.rsc'\nexport const RSC_SUFFIX = '.rsc'\nexport const ACTION_SUFFIX = '.action'\nexport const NEXT_DATA_SUFFIX = '.json'\nexport const NEXT_META_SUFFIX = '.meta'\nexport const NEXT_BODY_SUFFIX = '.body'\n\nexport const NEXT_NAV_DEPLOYMENT_ID_HEADER = 'x-nextjs-deployment-id'\n\nexport const NEXT_CACHE_TAGS_HEADER = 'x-next-cache-tags'\nexport const NEXT_CACHE_REVALIDATED_TAGS_HEADER = 'x-next-revalidated-tags'\nexport const NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER =\n 'x-next-revalidate-tag-token'\n\nexport const NEXT_RESUME_HEADER = 'next-resume'\nexport const NEXT_RESUME_STATE_LENGTH_HEADER = 'x-next-resume-state-length'\n\n// if these change make sure we update the related\n// documentation as well\nexport const NEXT_CACHE_TAG_MAX_ITEMS = 128\nexport const NEXT_CACHE_TAG_MAX_LENGTH = 256\nexport const NEXT_CACHE_SOFT_TAG_MAX_LENGTH = 1024\nexport const NEXT_CACHE_IMPLICIT_TAG_ID = '_N_T_'\nexport const NEXT_CACHE_ROOT_PARAM_TAG_ID = '_N_RP_'\n\n// in seconds\nexport const CACHE_ONE_YEAR_SECONDS = 31536000\n\n// in seconds, represents revalidate=false. I.e. never revaliate.\n// We use this value since it can be represented as a V8 SMI for optimal performance.\n// It can also be serialized as JSON if it ever leaks accidentally as an actual value.\nexport const INFINITE_CACHE = 0xfffffffe\n\n// Patterns to detect middleware files\nexport const MIDDLEWARE_FILENAME = 'middleware'\nexport const MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}`\n\n// Patterns to detect proxy files (replacement for middleware)\nexport const PROXY_FILENAME = 'proxy'\nexport const PROXY_LOCATION_REGEXP = `(?:src/)?${PROXY_FILENAME}`\n\n// Pattern to detect instrumentation hooks file\nexport const INSTRUMENTATION_HOOK_FILENAME = 'instrumentation'\n\n// Because on Windows absolute paths in the generated code can break because of numbers, eg 1 in the path,\n// we have to use a private alias\nexport const PAGES_DIR_ALIAS = 'private-next-pages'\nexport const DOT_NEXT_ALIAS = 'private-dot-next'\nexport const ROOT_DIR_ALIAS = 'private-next-root-dir'\nexport const APP_DIR_ALIAS = 'private-next-app-dir'\nexport const RSC_MOD_REF_PROXY_ALIAS = 'private-next-rsc-mod-ref-proxy'\nexport const RSC_ACTION_VALIDATE_ALIAS = 'private-next-rsc-action-validate'\nexport const RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-server-reference'\nexport const RSC_CACHE_WRAPPER_ALIAS = 'private-next-rsc-cache-wrapper'\nexport const RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS =\n 'private-next-rsc-track-dynamic-import'\nexport const RSC_ACTION_ENCRYPTION_ALIAS = 'private-next-rsc-action-encryption'\nexport const RSC_ACTION_CLIENT_WRAPPER_ALIAS =\n 'private-next-rsc-action-client-wrapper'\n\nexport const PUBLIC_DIR_MIDDLEWARE_CONFLICT = `You can not have a '_next' folder inside of your public folder. This conflicts with the internal '/_next' route. https://nextjs.org/docs/messages/public-next-folder-conflict`\n\nexport const SSG_GET_INITIAL_PROPS_CONFLICT = `You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps`\n\nexport const SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.`\n\nexport const SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps`\n\nexport const STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR = `can not have getInitialProps/getServerSideProps, https://nextjs.org/docs/messages/404-get-initial-props`\n\nexport const SERVER_PROPS_EXPORT_ERROR = `pages with \\`getServerSideProps\\` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export`\n\nexport const GSP_NO_RETURNED_VALUE =\n 'Your `getStaticProps` function did not return an object. Did you forget to add a `return`?'\nexport const GSSP_NO_RETURNED_VALUE =\n 'Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?'\n\nexport const UNSTABLE_REVALIDATE_RENAME_ERROR =\n 'The `unstable_revalidate` property is available for general use.\\n' +\n 'Please use `revalidate` instead.'\n\nexport const GSSP_COMPONENT_MEMBER_ERROR = `can not be attached to a page's component and must be exported from the page. See more info here: https://nextjs.org/docs/messages/gssp-component-member`\n\nexport const NON_STANDARD_NODE_ENV = `You are using a non-standard \"NODE_ENV\" value in your environment. This creates inconsistencies in the project and is strongly advised against. Read more: https://nextjs.org/docs/messages/non-standard-node-env`\n\nexport const SSG_FALLBACK_EXPORT_ERROR = `Pages with \\`fallback\\` enabled in \\`getStaticPaths\\` can not be exported. See more info here: https://nextjs.org/docs/messages/ssg-fallback-true-export`\n\nexport const ESLINT_DEFAULT_DIRS = ['app', 'pages', 'components', 'lib', 'src']\n\nexport const SERVER_RUNTIME: Record = {\n edge: 'edge',\n experimentalEdge: 'experimental-edge',\n nodejs: 'nodejs',\n}\n\nexport const WEB_SOCKET_MAX_RECONNECTIONS = 12\n\n/**\n * The names of the webpack layers. These layers are the primitives for the\n * webpack chunks.\n */\nconst WEBPACK_LAYERS_NAMES = {\n /**\n * The layer for the shared code between the client and server bundles.\n */\n shared: 'shared',\n /**\n * The layer for server-only runtime and picking up `react-server` export conditions.\n * Including app router RSC pages and app router custom routes and metadata routes.\n */\n reactServerComponents: 'rsc',\n /**\n * Server Side Rendering layer for app (ssr).\n */\n serverSideRendering: 'ssr',\n /**\n * The browser client bundle layer for actions.\n */\n actionBrowser: 'action-browser',\n /**\n * The Node.js bundle layer for the API routes.\n */\n apiNode: 'api-node',\n /**\n * The Edge Lite bundle layer for the API routes.\n */\n apiEdge: 'api-edge',\n /**\n * The layer for the middleware code.\n */\n middleware: 'middleware',\n /**\n * The layer for the instrumentation hooks.\n */\n instrument: 'instrument',\n /**\n * The layer for assets on the edge.\n */\n edgeAsset: 'edge-asset',\n /**\n * The browser client bundle layer for App directory.\n */\n appPagesBrowser: 'app-pages-browser',\n /**\n * The browser client bundle layer for Pages directory.\n */\n pagesDirBrowser: 'pages-dir-browser',\n /**\n * The Edge Lite bundle layer for Pages directory.\n */\n pagesDirEdge: 'pages-dir-edge',\n /**\n * The Node.js bundle layer for Pages directory.\n */\n pagesDirNode: 'pages-dir-node',\n} as const\n\nexport type WebpackLayerName =\n (typeof WEBPACK_LAYERS_NAMES)[keyof typeof WEBPACK_LAYERS_NAMES]\n\nconst WEBPACK_LAYERS = {\n ...WEBPACK_LAYERS_NAMES,\n GROUP: {\n builtinReact: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n ],\n serverOnly: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware,\n ],\n neutralTarget: [\n // pages api\n WEBPACK_LAYERS_NAMES.apiNode,\n WEBPACK_LAYERS_NAMES.apiEdge,\n ],\n clientOnly: [\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n ],\n bundled: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.shared,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware,\n ],\n appPages: [\n // app router pages and layouts\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n ],\n },\n}\n\nconst WEBPACK_RESOURCE_QUERIES = {\n edgeSSREntry: '__next_edge_ssr_entry__',\n metadata: '__next_metadata__',\n metadataRoute: '__next_metadata_route__',\n metadataImageMeta: '__next_metadata_image_meta__',\n}\n\nexport { WEBPACK_LAYERS, WEBPACK_RESOURCE_QUERIES }\n"],"names":["TEXT_PLAIN_CONTENT_TYPE_HEADER","HTML_CONTENT_TYPE_HEADER","JSON_CONTENT_TYPE_HEADER","NEXT_QUERY_PARAM_PREFIX","NEXT_INTERCEPTION_MARKER_PREFIX","MATCHED_PATH_HEADER","PRERENDER_REVALIDATE_HEADER","PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER","RSC_SEGMENTS_DIR_SUFFIX","RSC_SEGMENT_SUFFIX","RSC_SUFFIX","ACTION_SUFFIX","NEXT_DATA_SUFFIX","NEXT_META_SUFFIX","NEXT_BODY_SUFFIX","NEXT_NAV_DEPLOYMENT_ID_HEADER","NEXT_CACHE_TAGS_HEADER","NEXT_CACHE_REVALIDATED_TAGS_HEADER","NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER","NEXT_RESUME_HEADER","NEXT_RESUME_STATE_LENGTH_HEADER","NEXT_CACHE_TAG_MAX_ITEMS","NEXT_CACHE_TAG_MAX_LENGTH","NEXT_CACHE_SOFT_TAG_MAX_LENGTH","NEXT_CACHE_IMPLICIT_TAG_ID","NEXT_CACHE_ROOT_PARAM_TAG_ID","CACHE_ONE_YEAR_SECONDS","INFINITE_CACHE","MIDDLEWARE_FILENAME","MIDDLEWARE_LOCATION_REGEXP","PROXY_FILENAME","PROXY_LOCATION_REGEXP","INSTRUMENTATION_HOOK_FILENAME","PAGES_DIR_ALIAS","DOT_NEXT_ALIAS","ROOT_DIR_ALIAS","APP_DIR_ALIAS","RSC_MOD_REF_PROXY_ALIAS","RSC_ACTION_VALIDATE_ALIAS","RSC_ACTION_PROXY_ALIAS","RSC_CACHE_WRAPPER_ALIAS","RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS","RSC_ACTION_ENCRYPTION_ALIAS","RSC_ACTION_CLIENT_WRAPPER_ALIAS","PUBLIC_DIR_MIDDLEWARE_CONFLICT","SSG_GET_INITIAL_PROPS_CONFLICT","SERVER_PROPS_GET_INIT_PROPS_CONFLICT","SERVER_PROPS_SSG_CONFLICT","STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR","SERVER_PROPS_EXPORT_ERROR","GSP_NO_RETURNED_VALUE","GSSP_NO_RETURNED_VALUE","UNSTABLE_REVALIDATE_RENAME_ERROR","GSSP_COMPONENT_MEMBER_ERROR","NON_STANDARD_NODE_ENV","SSG_FALLBACK_EXPORT_ERROR","ESLINT_DEFAULT_DIRS","SERVER_RUNTIME","edge","experimentalEdge","nodejs","WEB_SOCKET_MAX_RECONNECTIONS","WEBPACK_LAYERS_NAMES","shared","reactServerComponents","serverSideRendering","actionBrowser","apiNode","apiEdge","middleware","instrument","edgeAsset","appPagesBrowser","pagesDirBrowser","pagesDirEdge","pagesDirNode","WEBPACK_LAYERS","GROUP","builtinReact","serverOnly","neutralTarget","clientOnly","bundled","appPages","WEBPACK_RESOURCE_QUERIES","edgeSSREntry","metadata","metadataRoute","metadataImageMeta"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 1482, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/lib/framework/boundary-constants.tsx"],"sourcesContent":["export const METADATA_BOUNDARY_NAME = '__next_metadata_boundary__'\nexport const VIEWPORT_BOUNDARY_NAME = '__next_viewport_boundary__'\nexport const OUTLET_BOUNDARY_NAME = '__next_outlet_boundary__'\nexport const ROOT_LAYOUT_BOUNDARY_NAME = '__next_root_layout_boundary__'\n"],"names":["METADATA_BOUNDARY_NAME","VIEWPORT_BOUNDARY_NAME","OUTLET_BOUNDARY_NAME","ROOT_LAYOUT_BOUNDARY_NAME"],"mappings":";;;;;;;;;;AAAO,MAAMA,yBAAyB,6BAA4B;AAC3D,MAAMC,yBAAyB,6BAA4B;AAC3D,MAAMC,uBAAuB,2BAA0B;AACvD,MAAMC,4BAA4B,gCAA+B","ignoreList":[0]}}, + {"offset": {"line": 1500, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/lib/picocolors.ts"],"sourcesContent":["// ISC License\n\n// Copyright (c) 2021 Alexey Raspopov, Kostiantyn Denysov, Anton Verinov\n\n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n//\n// https://github.com/alexeyraspopov/picocolors/blob/b6261487e7b81aaab2440e397a356732cad9e342/picocolors.js#L1\n\nconst { env, stdout } = globalThis?.process ?? {}\n\nconst enabled =\n env &&\n !env.NO_COLOR &&\n (env.FORCE_COLOR || (stdout?.isTTY && !env.CI && env.TERM !== 'dumb'))\n\nexport const isColorSupported = Boolean(enabled)\n\n// Whether stdout ends up on a terminal: directly, or through the CLI, which\n// pipes a child's output while the upgrade menu is open.\nexport const stdoutIsTerminal =\n Boolean(stdout?.isTTY) || env.NEXT_PRIVATE_PROMPT_OUTPUT === '1'\n\nconst replaceClose = (\n str: string,\n close: string,\n replace: string,\n index: number\n): string => {\n const start = str.substring(0, index) + replace\n const end = str.substring(index + close.length)\n const nextIndex = end.indexOf(close)\n return ~nextIndex\n ? start + replaceClose(end, close, replace, nextIndex)\n : start + end\n}\n\nconst formatter = (open: string, close: string, replace = open) => {\n if (!enabled) return String\n return (input: string) => {\n const string = '' + input\n const index = string.indexOf(close, open.length)\n return ~index\n ? open + replaceClose(string, close, replace, index) + close\n : open + string + close\n }\n}\n\nexport const reset = enabled ? (s: string) => `\\x1b[0m${s}\\x1b[0m` : String\nexport const bold = formatter('\\x1b[1m', '\\x1b[22m', '\\x1b[22m\\x1b[1m')\nexport const dim = formatter('\\x1b[2m', '\\x1b[22m', '\\x1b[22m\\x1b[2m')\nexport const italic = formatter('\\x1b[3m', '\\x1b[23m')\nexport const underline = formatter('\\x1b[4m', '\\x1b[24m')\nexport const inverse = formatter('\\x1b[7m', '\\x1b[27m')\nexport const hidden = formatter('\\x1b[8m', '\\x1b[28m')\nexport const strikethrough = formatter('\\x1b[9m', '\\x1b[29m')\nexport const black = formatter('\\x1b[30m', '\\x1b[39m')\nexport const red = formatter('\\x1b[31m', '\\x1b[39m')\nexport const green = formatter('\\x1b[32m', '\\x1b[39m')\nexport const yellow = formatter('\\x1b[33m', '\\x1b[39m')\nexport const blue = formatter('\\x1b[34m', '\\x1b[39m')\nexport const magenta = formatter('\\x1b[35m', '\\x1b[39m')\nexport const purple = formatter('\\x1b[38;2;173;127;168m', '\\x1b[39m')\nexport const cyan = formatter('\\x1b[36m', '\\x1b[39m')\nexport const white = formatter('\\x1b[37m', '\\x1b[39m')\nexport const gray = formatter('\\x1b[90m', '\\x1b[39m')\nexport const bgBlack = formatter('\\x1b[40m', '\\x1b[49m')\nexport const bgRed = formatter('\\x1b[41m', '\\x1b[49m')\nexport const bgGreen = formatter('\\x1b[42m', '\\x1b[49m')\nexport const bgYellow = formatter('\\x1b[43m', '\\x1b[49m')\nexport const bgBlue = formatter('\\x1b[44m', '\\x1b[49m')\nexport const bgMagenta = formatter('\\x1b[45m', '\\x1b[49m')\nexport const bgCyan = formatter('\\x1b[46m', '\\x1b[49m')\nexport const bgWhite = formatter('\\x1b[47m', '\\x1b[49m')\n"],"names":["globalThis","env","stdout","process","enabled","NO_COLOR","FORCE_COLOR","isTTY","CI","TERM","isColorSupported","Boolean","stdoutIsTerminal","NEXT_PRIVATE_PROMPT_OUTPUT","replaceClose","str","close","replace","index","start","substring","end","length","nextIndex","indexOf","formatter","open","String","input","string","reset","s","bold","dim","italic","underline","inverse","hidden","strikethrough","black","red","green","yellow","blue","magenta","purple","cyan","white","gray","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 1621, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/lib/scheduler.ts"],"sourcesContent":["export type ScheduledFn = () => T | PromiseLike\nexport type SchedulerFn = (cb: ScheduledFn) => void\n\n/**\n * Schedules a function to be called on the next tick after the other promises\n * have been resolved.\n *\n * @param cb the function to schedule\n */\nexport const scheduleOnNextTick = (cb: ScheduledFn) => {\n // We use Promise.resolve().then() here so that the operation is scheduled at\n // the end of the promise job queue, we then add it to the next process tick\n // to ensure it's evaluated afterwards.\n //\n // This was inspired by the implementation of the DataLoader interface: https://github.com/graphql/dataloader/blob/d336bd15282664e0be4b4a657cb796f09bafbc6b/src/index.js#L213-L255\n //\n Promise.resolve().then(() => {\n if (process.env.NEXT_RUNTIME === 'edge') {\n setTimeout(cb, 0)\n } else {\n process.nextTick(cb)\n }\n })\n}\n\n/**\n * Schedules a function to be called using `setImmediate` or `setTimeout` if\n * `setImmediate` is not available (like in the Edge runtime).\n *\n * @param cb the function to schedule\n */\nexport const scheduleImmediate = (cb: ScheduledFn): void => {\n if (process.env.NEXT_RUNTIME === 'edge') {\n setTimeout(cb, 0)\n } else {\n setImmediate(cb)\n }\n}\n\n/**\n * returns a promise than resolves in a future task. There is no guarantee that the task it resolves in\n * will be the next task but if you await it you can at least be sure that the current task is over and\n * most usefully that the entire microtask queue of the current task has been emptied.\n */\nexport function atLeastOneTask() {\n return new Promise((resolve) => scheduleImmediate(resolve))\n}\n\n/**\n * This utility function is extracted to make it easier to find places where we are doing\n * specific timing tricks to try to schedule work after React has rendered. This is especially\n * important at the moment because Next.js uses the edge builds of React which use setTimeout to\n * schedule work when you might expect that something like setImmediate would do the trick.\n *\n * Long term we should switch to the node versions of React rendering when possible and then\n * update this to use setImmediate rather than setTimeout\n */\nexport function waitAtLeastOneReactRenderTask(): Promise {\n if (process.env.NEXT_RUNTIME === 'edge') {\n return new Promise((r) => setTimeout(r, 0))\n } else {\n return new Promise((r) => setImmediate(r))\n }\n}\n"],"names":["scheduleOnNextTick","cb","Promise","resolve","then","process","env","NEXT_RUNTIME","setTimeout","nextTick","scheduleImmediate","setImmediate","atLeastOneTask","waitAtLeastOneReactRenderTask","r"],"mappings":"AAGA;;;;;CAKC,GACD;;;;;;;;;;AAAO,MAAMA,qBAAqB,CAACC;IACjC,6EAA6E;IAC7E,4EAA4E;IAC5E,uCAAuC;IACvC,EAAE;IACF,kLAAkL;IAClL,EAAE;IACFC,QAAQC,OAAO,GAAGC,IAAI,CAAC;QACrB,IAAIC,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;aAElC;YACLF,QAAQI,QAAQ,CAACR;QACnB;IACF;AACF,EAAC;AAQM,MAAMS,oBAAoB,CAACT;IAChC,IAAII,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;SAElC;QACLI,aAAaV;IACf;AACF,EAAC;AAOM,SAASW;IACd,OAAO,IAAIV,QAAc,CAACC,UAAYO,kBAAkBP;AAC1D;AAWO,SAASU;IACd,IAAIR,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;SAElC;QACL,OAAO,IAAIL,QAAQ,CAACY,IAAMH,aAAaG;IACzC;AACF","ignoreList":[0]}}, + {"offset": {"line": 1672, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/api-utils/get-cookie-parser.ts"],"sourcesContent":["import type { NextApiRequestCookies } from '.'\n\n/**\n * Parse cookies from the `headers` of request\n * @param req request object\n */\n\nexport function getCookieParser(headers: {\n [key: string]: string | string[] | null | undefined\n}): () => NextApiRequestCookies {\n return function parseCookie(): NextApiRequestCookies {\n const { cookie } = headers\n\n if (!cookie) {\n return {}\n }\n\n const { parse: parseCookieFn } =\n require('next/dist/compiled/cookie') as typeof import('next/dist/compiled/cookie')\n return parseCookieFn(Array.isArray(cookie) ? cookie.join('; ') : cookie)\n }\n}\n"],"names":["getCookieParser","headers","parseCookie","cookie","parse","parseCookieFn","require","Array","isArray","join"],"mappings":"AAEA;;;CAGC,GAED;;;;AAAO,SAASA,gBAAgBC,OAE/B;IACC,OAAO,SAASC;QACd,MAAM,EAAEC,MAAM,EAAE,GAAGF;QAEnB,IAAI,CAACE,QAAQ;YACX,OAAO,CAAC;QACV;QAEA,MAAM,EAAEC,OAAOC,aAAa,EAAE,GAC5BC,QAAQ;QACV,OAAOD,cAAcE,MAAMC,OAAO,CAACL,UAAUA,OAAOM,IAAI,CAAC,QAAQN;IACnE;AACF","ignoreList":[0]}}, + {"offset": {"line": 1693, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/api-utils/index.ts"],"sourcesContent":["import type { IncomingHttpHeaders, IncomingMessage } from 'http'\nimport type { CookieSerializeOptions } from 'next/dist/compiled/cookie'\nimport type { NextApiResponse } from '../../shared/lib/utils'\n\nimport { HeadersAdapter } from '../web/spec-extension/adapters/headers'\nimport {\n PRERENDER_REVALIDATE_HEADER,\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER,\n} from '../../lib/constants'\nimport { getTracer } from '../lib/trace/tracer'\nimport { NodeSpan } from '../lib/trace/constants'\n\nexport type NextApiRequestCookies = Partial<{ [key: string]: string }>\nexport type NextApiRequestQuery = Partial<{ [key: string]: string | string[] }>\n\nexport type __ApiPreviewProps = {\n previewModeId: string\n previewModeEncryptionKey: string\n previewModeSigningKey: string\n}\n\nexport function wrapApiHandler any>(\n page: string,\n handler: T\n): T {\n return ((...args) => {\n getTracer().setRootSpanAttribute('next.route', page)\n // Call API route method\n return getTracer().trace(\n NodeSpan.runHandler,\n {\n spanName: `executing api route (pages) ${page}`,\n },\n () => handler(...args)\n )\n }) as T\n}\n\n/**\n *\n * @param res response object\n * @param statusCode `HTTP` status code of response\n */\nexport function sendStatusCode(\n res: NextApiResponse,\n statusCode: number\n): NextApiResponse {\n res.statusCode = statusCode\n return res\n}\n\n/**\n *\n * @param res response object\n * @param [statusOrUrl] `HTTP` status code of redirect\n * @param url URL of redirect\n */\nexport function redirect(\n res: NextApiResponse,\n statusOrUrl: string | number,\n url?: string\n): NextApiResponse {\n if (typeof statusOrUrl === 'string') {\n url = statusOrUrl\n statusOrUrl = 307\n }\n if (typeof statusOrUrl !== 'number' || typeof url !== 'string') {\n throw new Error(\n `Invalid redirect arguments. Please use a single argument URL, e.g. res.redirect('/destination') or use a status code and URL, e.g. res.redirect(307, '/destination').`\n )\n }\n res.writeHead(statusOrUrl, { Location: url })\n res.write(url)\n res.end()\n return res\n}\n\nexport function checkIsOnDemandRevalidate(\n rawHeaders: Headers | IncomingHttpHeaders,\n previewProps: __ApiPreviewProps\n): {\n isOnDemandRevalidate: boolean\n revalidateOnlyGenerated: boolean\n} {\n // Headers is a plain object for Node.js, Headers object in Edge runtime\n if (typeof rawHeaders.get === 'function') {\n const headers = HeadersAdapter.from(rawHeaders)\n\n const previewModeId = headers.get(PRERENDER_REVALIDATE_HEADER)\n const isOnDemandRevalidate = previewModeId === previewProps.previewModeId\n\n const revalidateOnlyGenerated = headers.has(\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER\n )\n\n return { isOnDemandRevalidate, revalidateOnlyGenerated }\n }\n\n const headers = rawHeaders as IncomingHttpHeaders\n\n const previewModeId = headers[PRERENDER_REVALIDATE_HEADER]\n const isOnDemandRevalidate = previewModeId === previewProps.previewModeId\n\n const revalidateOnlyGenerated = headers.hasOwnProperty(\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER\n )\n\n return { isOnDemandRevalidate, revalidateOnlyGenerated }\n}\n\nexport const COOKIE_NAME_PRERENDER_BYPASS = `__prerender_bypass`\nexport const COOKIE_NAME_PRERENDER_DATA = `__next_preview_data`\n\nexport const RESPONSE_LIMIT_DEFAULT = 4 * 1024 * 1024\n\nexport const SYMBOL_PREVIEW_DATA = Symbol(COOKIE_NAME_PRERENDER_DATA)\nexport const SYMBOL_CLEARED_COOKIES = Symbol(COOKIE_NAME_PRERENDER_BYPASS)\n\nexport function clearPreviewData(\n res: NextApiResponse,\n options: {\n path?: string\n } = {}\n): NextApiResponse {\n if (SYMBOL_CLEARED_COOKIES in res) {\n return res\n }\n\n const { serialize } =\n require('next/dist/compiled/cookie') as typeof import('next/dist/compiled/cookie')\n const previous = res.getHeader('Set-Cookie')\n res.setHeader(`Set-Cookie`, [\n ...(typeof previous === 'string'\n ? [previous]\n : Array.isArray(previous)\n ? previous\n : []),\n serialize(COOKIE_NAME_PRERENDER_BYPASS, '', {\n // To delete a cookie, set `expires` to a date in the past:\n // https://tools.ietf.org/html/rfc6265#section-4.1.1\n // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.\n expires: new Date(0),\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n ...(options.path !== undefined\n ? ({ path: options.path } as CookieSerializeOptions)\n : undefined),\n }),\n serialize(COOKIE_NAME_PRERENDER_DATA, '', {\n // To delete a cookie, set `expires` to a date in the past:\n // https://tools.ietf.org/html/rfc6265#section-4.1.1\n // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.\n expires: new Date(0),\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n ...(options.path !== undefined\n ? ({ path: options.path } as CookieSerializeOptions)\n : undefined),\n }),\n ])\n\n Object.defineProperty(res, SYMBOL_CLEARED_COOKIES, {\n value: true,\n enumerable: false,\n })\n return res\n}\n\n/**\n * Custom error class\n */\nexport class ApiError extends Error {\n readonly statusCode: number\n\n constructor(statusCode: number, message: string) {\n super(message)\n this.statusCode = statusCode\n }\n}\n\n/**\n * Sends error in `response`\n * @param res response object\n * @param statusCode of response\n * @param message of response\n */\nexport function sendError(\n res: NextApiResponse,\n statusCode: number,\n message: string\n): void {\n res.statusCode = statusCode\n res.statusMessage = message\n res.end(message)\n}\n\ninterface LazyProps {\n req: IncomingMessage\n}\n\n/**\n * Execute getter function only if its needed\n * @param LazyProps `req` and `params` for lazyProp\n * @param prop name of property\n * @param getter function to get data\n */\nexport function setLazyProp(\n { req }: LazyProps,\n prop: string,\n getter: () => T\n): void {\n const opts = { configurable: true, enumerable: true }\n const optsReset = { ...opts, writable: true }\n\n Object.defineProperty(req, prop, {\n ...opts,\n get: () => {\n const value = getter()\n // we set the property on the object to avoid recalculating it\n Object.defineProperty(req, prop, { ...optsReset, value })\n return value\n },\n set: (value) => {\n Object.defineProperty(req, prop, { ...optsReset, value })\n },\n })\n}\n"],"names":["HeadersAdapter","PRERENDER_REVALIDATE_HEADER","PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER","getTracer","NodeSpan","wrapApiHandler","page","handler","args","setRootSpanAttribute","trace","runHandler","spanName","sendStatusCode","res","statusCode","redirect","statusOrUrl","url","Error","writeHead","Location","write","end","checkIsOnDemandRevalidate","rawHeaders","previewProps","get","headers","from","previewModeId","isOnDemandRevalidate","revalidateOnlyGenerated","has","hasOwnProperty","COOKIE_NAME_PRERENDER_BYPASS","COOKIE_NAME_PRERENDER_DATA","RESPONSE_LIMIT_DEFAULT","SYMBOL_PREVIEW_DATA","Symbol","SYMBOL_CLEARED_COOKIES","clearPreviewData","options","serialize","require","previous","getHeader","setHeader","Array","isArray","expires","Date","httpOnly","sameSite","process","env","NODE_ENV","secure","path","undefined","Object","defineProperty","value","enumerable","ApiError","constructor","message","sendError","statusMessage","setLazyProp","req","prop","getter","opts","configurable","optsReset","writable","set"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 1869, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/async-local-storage.ts"],"sourcesContent":["import type { AsyncLocalStorage } from 'async_hooks'\n\nconst sharedAsyncLocalStorageNotAvailableError = new Error(\n 'Invariant: AsyncLocalStorage accessed in runtime where it is not available'\n)\n\nclass FakeAsyncLocalStorage\n implements AsyncLocalStorage\n{\n disable(): void {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n getStore(): Store | undefined {\n // This fake implementation of AsyncLocalStorage always returns `undefined`.\n return undefined\n }\n\n run(): R {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n exit(): R {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n enterWith(): void {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n static bind(fn: T): T {\n return fn\n }\n}\n\nconst maybeGlobalAsyncLocalStorage =\n typeof globalThis !== 'undefined' && (globalThis as any).AsyncLocalStorage\n\nexport function createAsyncLocalStorage<\n Store extends {},\n>(): AsyncLocalStorage {\n if (maybeGlobalAsyncLocalStorage) {\n return new maybeGlobalAsyncLocalStorage()\n }\n return new FakeAsyncLocalStorage()\n}\n\n/**\n * Returns the storage registered under `name`, and creates it on first use.\n *\n * These storages must be singletons within a realm. A store that is entered\n * through one reference to a storage must be readable through every other\n * reference to it. If it is not, code that runs inside the scope sees no store\n * at all. Module identity does not guarantee this. A realm can evaluate the\n * same `next` file more than once if the package is reachable through more than\n * one path, and then each evaluation creates a storage of its own. A global\n * symbol keeps the singleton intact for any number of copies. Worker threads\n * and edge sandboxes still get separate storages, because each of them has its\n * own `globalThis`.\n *\n * Module identity broke this way in `next dev`. A bug in Node's\n * `fs.realpathSync` can return a path with its symlinks unresolved, and the\n * module loader keys the module cache on that path. On a pnpm install it then\n * resolves `next/dist/...` through the `node_modules/next` symlink instead of\n * the real path, so the file is evaluated a second time. See\n * https://github.com/nodejs/node/pull/65113. Node versions without that fix\n * stay affected.\n *\n * The key includes the Next.js version, so two different versions of Next.js in\n * the same realm keep separate storages. Their store shapes might not be\n * compatible.\n */\nexport function getOrCreateGlobalAsyncLocalStorage(\n name: string\n): AsyncLocalStorage {\n const key = Symbol.for(`@next/${name}@${process.env.__NEXT_VERSION}`)\n\n const globalStore = globalThis as typeof globalThis & {\n [key: symbol]: AsyncLocalStorage | undefined\n }\n\n return (globalStore[key] ??= createAsyncLocalStorage())\n}\n\nexport function bindSnapshot(\n // WARNING: Don't pass a named function to this argument! See: https://github.com/facebook/react/pull/34911\n fn: T\n): T {\n if (maybeGlobalAsyncLocalStorage) {\n return maybeGlobalAsyncLocalStorage.bind(fn)\n }\n return FakeAsyncLocalStorage.bind(fn)\n}\n\nexport function createSnapshot(): (\n fn: (...args: TArgs) => R,\n ...args: TArgs\n) => R {\n if (maybeGlobalAsyncLocalStorage) {\n return maybeGlobalAsyncLocalStorage.snapshot()\n }\n return function (fn: any, ...args: any[]) {\n return fn(...args)\n }\n}\n"],"names":["sharedAsyncLocalStorageNotAvailableError","Error","FakeAsyncLocalStorage","disable","getStore","undefined","run","exit","enterWith","bind","fn","maybeGlobalAsyncLocalStorage","globalThis","AsyncLocalStorage","createAsyncLocalStorage","getOrCreateGlobalAsyncLocalStorage","name","key","Symbol","for","process","env","__NEXT_VERSION","globalStore","bindSnapshot","createSnapshot","snapshot","args"],"mappings":";;;;;;;;;;AAEA,MAAMA,2CAA2C,IAAIC,MACnD;AAGF,MAAMC;IAGJC,UAAgB;QACd,MAAMH;IACR;IAEAI,WAA8B;QAC5B,4EAA4E;QAC5E,OAAOC;IACT;IAEAC,MAAY;QACV,MAAMN;IACR;IAEAO,OAAa;QACX,MAAMP;IACR;IAEAQ,YAAkB;QAChB,MAAMR;IACR;IAEA,OAAOS,KAAQC,EAAK,EAAK;QACvB,OAAOA;IACT;AACF;AAEA,MAAMC,+BACJ,OAAOC,eAAe,eAAgBA,WAAmBC,iBAAiB;AAErE,SAASC;IAGd,IAAIH,8BAA8B;QAChC,OAAO,IAAIA;IACb;IACA,OAAO,IAAIT;AACb;AA2BO,SAASa,mCACdC,IAAY;IAEZ,MAAMC,MAAMC,OAAOC,GAAG,CAAC,CAAC,MAAM,EAAEH,KAAK,CAAC,EAAEI,QAAQC,EAAAA,CAAG,CAACC,cAAc,EAAE;IAEpE,MAAMC,cAAcX;IAIpB,OAAQW,WAAW,CAACN,IAAI,KAAKH;AAC/B;AAEO,SAASU,aACd,AACAd,EAAK,yGADsG;IAG3G,IAAIC,8BAA8B;QAChC,OAAOA,6BAA6BF,IAAI,CAACC;IAC3C;IACA,OAAOR,sBAAsBO,IAAI,CAACC;AACpC;AAEO,SAASe;IAId,IAAId,8BAA8B;QAChC,OAAOA,6BAA6Be,QAAQ;IAC9C;IACA,OAAO,SAAUhB,EAAO,EAAE,GAAGiB,IAAW;QACtC,OAAOjB,MAAMiB;IACf;AACF","ignoreList":[0]}}, + {"offset": {"line": 1931, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/blocking-route-messages.ts"],"sourcesContent":["export function createRuntimeBodyError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data during prerendering.\\n\\n` +\n `\\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` accessed outside of \\`\\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-runtime`\n )\n}\n\nexport function createDynamicBodyError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data during prerendering.\\n\\n` +\n `\\`fetch(...)\\` or \\`connection()\\` accessed outside of \\`\\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [cache] Cache the data access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`\n )\n}\n\nexport function createRuntimeBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data during prerendering or a navigation.\\n\\n` +\n `\\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` accessed outside of \\`\\` prevents the route from being prerendered or the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-runtime`\n )\n}\n\nexport function createLinkBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered URL data during prerendering or a navigation.\\n\\n` +\n `\\`params\\` or \\`searchParams\\` accessed outside of \\`\\` may prevent the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-shell-url-data`\n )\n}\n\nexport function createNavigationBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`navigation()\\` during prerendering or a navigation.\\n\\n` +\n `\\`navigation()\\` called outside of \\`\\` may prevent the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the component that calls \\`navigation()\\`\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage`\n )\n}\n\nexport function createPrefetchBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`prefetch()\\` during prerendering or a navigation.\\n\\n` +\n `\\`prefetch()\\` called outside of \\`\\` may prevent the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the component that calls \\`prefetch()\\`\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage`\n )\n}\n\nexport function createDynamicBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data during prerendering or a navigation.\\n\\n` +\n `\\`fetch(...)\\` or \\`connection()\\` accessed outside of \\`\\` prevents the route from being prerendered or the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [cache] Cache the data access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`\n )\n}\n\n/**\n * NOTE: Prefer `createRuntimeBodyError` or `createDynamicBodyError`.\n * Only use this in situations like build-time static validation, where\n * we can't pinpoint a more specific reason.\n */\nexport function createDynamicOrRuntimeBodyError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data during prerendering.\\n\\n` +\n `\\`fetch(...)\\`, \\`cookies()\\`, \\`headers()\\`, \\`params\\`, \\`searchParams\\`, or \\`connection()\\` accessed outside of \\`\\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [cache] For uncached data (\\`fetch\\`, database calls): cache the access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`\n )\n}\n\nexport function createLinkMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered URL data in \\`generateMetadata()\\`.\\n\\n` +\n `This route's metadata is blocked, but the rest of its content can be prefetched. \\`params\\` or \\`searchParams\\` accessed in \\`generateMetadata()\\` prevent it from being prefetched.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static metadata export instead of \\`generateMetadata()\\`\\n` +\n ` - [dynamic] Render a marker component that calls \\`await connection()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`\n )\n}\n\nexport function createRuntimeMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data in \\`generateMetadata()\\`.\\n\\n` +\n `This route's metadata is blocked, but the rest of its content can be prerendered. \\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` accessed in \\`generateMetadata()\\` cause it to run dynamically.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static metadata export instead of \\`generateMetadata()\\`\\n` +\n ` - [dynamic] Render a marker component that calls \\`await connection()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`\n )\n}\n\nexport function createNavigationMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`navigation()\\` in \\`generateMetadata()\\`.\\n\\n` +\n `Metadata can already stream without blocking the route's UI, so delaying it until navigation may be unintentional.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [remove] Remove \\`navigation()\\` from \\`generateMetadata()\\`\\n` +\n ` - [mark] Render a marker component that calls \\`await navigation()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-metadata`\n )\n}\n\nexport function createPrefetchMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`prefetch()\\` in \\`generateMetadata()\\`.\\n\\n` +\n `Metadata can already stream without blocking the route's UI, so delaying it until a per-link prefetch or navigation may be unintentional.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [remove] Remove \\`prefetch()\\` from \\`generateMetadata()\\`\\n` +\n ` - [mark] Render a marker component that calls \\`await prefetch()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-metadata`\n )\n}\n\nexport function createDynamicMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data in \\`generateMetadata()\\`.\\n\\n` +\n `This route's metadata is blocked, but the rest of its content can be prerendered. \\`fetch(...)\\` or \\`connection()\\` accessed in \\`generateMetadata()\\` cause it to run dynamically.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] Cache the metadata with \\`\"use cache\"\\` in \\`generateMetadata()\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [dynamic] Render a marker component that calls \\`await connection()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-dynamic`\n )\n}\n\nexport function createLinkViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered URL data in \\`generateViewport()\\`.\\n\\n` +\n `\\`params\\` or \\`searchParams\\` in \\`generateViewport()\\` prevents the page from being prerendered, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static viewport export instead of \\`generateViewport()\\`\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`\n )\n}\n\nexport function createRuntimeViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data in \\`generateViewport()\\`.\\n\\n` +\n `\\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` in \\`generateViewport()\\` prevents the page from being prerendered, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static viewport export instead of \\`generateViewport()\\`\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`\n )\n}\n\nexport function createNavigationViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`navigation()\\` in \\`generateViewport()\\`.\\n\\n` +\n `This prevents Next.js from creating the App Shell, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [remove] Remove \\`navigation()\\` from \\`generateViewport()\\`\\n` +\n ` - [ignore] Set \\`export const instant = false\\` to disable validation for this segment\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-viewport`\n )\n}\n\nexport function createPrefetchViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`prefetch()\\` in \\`generateViewport()\\`.\\n\\n` +\n `This prevents Next.js from creating the App Shell, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [remove] Remove \\`prefetch()\\` from \\`generateViewport()\\`\\n` +\n ` - [ignore] Set \\`export const instant = false\\` to disable validation for this segment\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-viewport`\n )\n}\n\nexport function createDynamicViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data in \\`generateViewport()\\`.\\n\\n` +\n `\\`fetch(...)\\` or \\`connection()\\` in \\`generateViewport()\\` prevents the page from being prerendered, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] Cache the viewport data with \\`\"use cache\"\\` in \\`generateViewport()\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-dynamic`\n )\n}\n\n/**\n * NOTE: Prefer `createRuntimeViewportError` or `createDynamicViewportError`.\n * Only use this in situations like build-time static validation, where\n * we can't pinpoint a more specific reason.\n */\nexport function createDynamicOrRuntimeViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data in \\`generateViewport()\\`.\\n\\n` +\n `This prevents the page from being prerendered, leading to a slower user experience. Unlike metadata, viewport cannot be streamed behind \\`\\` because it affects the initial page load.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static viewport export instead of \\`generateViewport()\\`\\n` +\n ` - [cache] For uncached data (\\`fetch\\`, database calls): cache the viewport with \\`\"use cache\"\\` in \\`generateViewport()\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`\n )\n}\n\n/**\n * NOTE: Prefer `createRuntimeMetadataError` or `createDynamicMetadataError`.\n * Only use this in situations like build-time static validation, where\n * we can't pinpoint a more specific reason.\n */\nexport function createDynamicOrRuntimeMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data in \\`generateMetadata()\\`.\\n\\n` +\n `This route's metadata is blocked, but the rest of its content can be prerendered.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static metadata export instead of \\`generateMetadata()\\`\\n` +\n ` - [cache] Cache the metadata with \\`\"use cache\"\\` in \\`generateMetadata()\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [dynamic] Render a marker component that calls \\`await connection()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`\n )\n}\n\n//====================================================\n// Static routes (with `ensureStatic = \"navigation\"`)\n//====================================================\n\nexport function createRuntimeBodyErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but runtime data from \\`cookies()\\`, \\`headers()\\`, \\`params\\`, \\`searchParams\\`, or a short-lived cache requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [remove] Remove the data access\\n` +\n ` - [client] Read the data on the client\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-route-runtime`\n )\n}\n\nexport function createDynamicBodyErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but an uncached \\`fetch(...)\\`, database call, or \\`connection()\\` requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] Cache the data access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [remove] Remove the data access\\n` +\n ` - [client] Read the data on the client\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-route-dynamic`\n )\n}\n\nexport function createNonPrerenderableBodyErrorInStaticRoute(\n route: string\n): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but some data requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] For uncached data (\\`fetch\\`, database calls): cache the access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [remove] Remove the data access\\n` +\n ` - [client] Read the data on the client\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-route-dynamic`\n )\n}\n\nexport function createRuntimeMetadataErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data in \\`generateMetadata()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but runtime data from \\`cookies()\\`, \\`headers()\\`, \\`params\\`, \\`searchParams\\`, or a short-lived cache requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Replace the dynamic data used by \\`generateMetadata()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-metadata-runtime`\n )\n}\n\nexport function createDynamicMetadataErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data in \\`generateMetadata()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but an uncached \\`fetch(...)\\`, database call, or \\`connection()\\` requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] Cache the data used by \\`generateMetadata()\\` with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [static] Replace the dynamic data used by \\`generateMetadata()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-metadata-dynamic`\n )\n}\n\nexport function createNonPrerenderableMetadataErrorInStaticRoute(\n route: string\n): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data in \\`generateMetadata()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but some data requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] For uncached data: cache the data used by \\`generateMetadata()\\` with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [static] Replace the dynamic data used by \\`generateMetadata()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-metadata-dynamic`\n )\n}\n\nexport function createRuntimeViewportErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data in \\`generateViewport()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but runtime data from \\`cookies()\\`, \\`headers()\\`, \\`params\\`, \\`searchParams\\`, or a short-lived cache requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Replace the dynamic data used by \\`generateViewport()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-viewport-runtime`\n )\n}\n\nexport function createDynamicViewportErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data in \\`generateViewport()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but an uncached \\`fetch(...)\\`, database call, or \\`connection()\\` requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] Cache the data used by \\`generateViewport()\\` with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [static] Replace the dynamic data used by \\`generateViewport()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-viewport-dynamic`\n )\n}\n\nexport function createNonPrerenderableViewportErrorInStaticRoute(\n route: string\n): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data in \\`generateViewport()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but some data requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] For uncached data: cache the data used by \\`generateViewport()\\` with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [static] Replace the dynamic data used by \\`generateViewport()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-viewport-dynamic`\n )\n}\n\nexport function logBuildDebugHint(route: string): void {\n if (process.env.NODE_ENV !== 'development') {\n console.error(\n `To get a more detailed stack trace and pinpoint the issue, try one of the following:\\n` +\n ` - Start the app in development mode by running \\`next dev\\`, then open \"${route}\" in your browser to investigate the error.\\n` +\n ` - Rerun the production build with \\`next build --debug-prerender\\` to generate better stack traces.`\n )\n } else if (!process.env.__NEXT_DEV_SERVER) {\n console.error(\n `To debug the issue, start the app in development mode by running \\`next dev\\`, then open \"${route}\" in your browser to investigate the error.`\n )\n }\n}\n"],"names":["createRuntimeBodyError","route","Error","createDynamicBodyError","createRuntimeBodyErrorInNavigation","createLinkBodyErrorInNavigation","createNavigationBodyErrorInNavigation","createPrefetchBodyErrorInNavigation","createDynamicBodyErrorInNavigation","createDynamicOrRuntimeBodyError","createLinkMetadataError","createRuntimeMetadataError","createNavigationMetadataError","createPrefetchMetadataError","createDynamicMetadataError","createLinkViewportError","createRuntimeViewportError","createNavigationViewportError","createPrefetchViewportError","createDynamicViewportError","createDynamicOrRuntimeViewportError","createDynamicOrRuntimeMetadataError","createRuntimeBodyErrorInStaticRoute","createDynamicBodyErrorInStaticRoute","createNonPrerenderableBodyErrorInStaticRoute","createRuntimeMetadataErrorInStaticRoute","createDynamicMetadataErrorInStaticRoute","createNonPrerenderableMetadataErrorInStaticRoute","createRuntimeViewportErrorInStaticRoute","createDynamicViewportErrorInStaticRoute","createNonPrerenderableViewportErrorInStaticRoute","logBuildDebugHint","process","env","NODE_ENV","console","error","__NEXT_DEV_SERVER"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 2090, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/dynamic-rendering.ts"],"sourcesContent":["/**\n * The functions provided by this module are used to communicate certain properties\n * about the currently running code so that Next.js can make decisions on how to handle\n * the current execution in different rendering modes such as pre-rendering, resuming, and SSR.\n *\n * Today Next.js treats all code as potentially static. Certain APIs may only make sense when dynamically rendering.\n * Traditionally this meant deopting the entire render to dynamic however with PPR we can now deopt parts\n * of a React tree as dynamic while still keeping other parts static. There are really two different kinds of\n * Dynamic indications.\n *\n * The first is simply an intention to be dynamic. unstable_noStore is an example of this where\n * the currently executing code simply declares that the current scope is dynamic but if you use it\n * inside unstable_cache it can still be cached. This type of indication can be removed if we ever\n * make the default dynamic to begin with because the only way you would ever be static is inside\n * a cache scope which this indication does not affect.\n *\n * The second is an indication that a dynamic data source was read. This is a stronger form of dynamic\n * because it means that it is inappropriate to cache this at all. using a dynamic data source inside\n * unstable_cache should error. If you want to use some dynamic data inside unstable_cache you should\n * read that data outside the cache and pass it in as an argument to the cached function.\n */\n\nimport type { WorkStore } from './work-async-storage.external'\nimport type {\n RequestStore,\n WorkUnitStore,\n PrerenderStoreLegacy,\n PrerenderStoreModern,\n ValidationStoreClient,\n PrerenderStoreModernServer,\n} from './work-unit-async-storage.external'\n\n// Once postpone is in stable we should switch to importing the postpone export directly\nimport React from 'react'\n\nimport { DynamicServerError } from '../../client/components/hooks-server-context'\nimport { StaticGenBailoutError } from '../../client/components/static-generation-bailout'\nimport { getStagedRenderingController } from './work-unit-async-storage.external'\nimport { isClientHookDynamicError } from '../dynamic-rendering-utils'\nimport {\n METADATA_BOUNDARY_NAME,\n VIEWPORT_BOUNDARY_NAME,\n OUTLET_BOUNDARY_NAME,\n ROOT_LAYOUT_BOUNDARY_NAME,\n} from '../../lib/framework/boundary-constants'\nimport { scheduleOnNextTick } from '../../lib/scheduler'\nimport {\n createRuntimeBodyError,\n createDynamicBodyError,\n createRuntimeBodyErrorInNavigation,\n createNavigationBodyErrorInNavigation,\n createPrefetchBodyErrorInNavigation,\n createDynamicBodyErrorInNavigation,\n createDynamicOrRuntimeBodyError,\n createRuntimeMetadataError,\n createDynamicMetadataError,\n createRuntimeViewportError,\n createNavigationViewportError,\n createPrefetchViewportError,\n createDynamicViewportError,\n createDynamicOrRuntimeViewportError,\n createDynamicOrRuntimeMetadataError,\n logBuildDebugHint,\n createLinkBodyErrorInNavigation,\n createLinkMetadataError,\n createLinkViewportError,\n createNavigationMetadataError,\n createPrefetchMetadataError,\n createNonPrerenderableMetadataErrorInStaticRoute,\n createNonPrerenderableViewportErrorInStaticRoute,\n createNonPrerenderableBodyErrorInStaticRoute,\n createRuntimeBodyErrorInStaticRoute,\n createDynamicBodyErrorInStaticRoute,\n createRuntimeMetadataErrorInStaticRoute,\n createDynamicMetadataErrorInStaticRoute,\n createRuntimeViewportErrorInStaticRoute,\n createDynamicViewportErrorInStaticRoute,\n} from './blocking-route-messages'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport {\n INSTANT_VALIDATION_BOUNDARY_NAME,\n INSTANT_SLOT_MARKER_PREFIX,\n INSTANT_SLOT_MARKER_SUFFIX,\n} from './instant-validation/boundary-constants'\nimport {\n type ValidationBoundaryTracking,\n allRequiredBoundariesRendered,\n} from './instant-validation/boundary-tracking'\nimport type { InstantValidationSampleTracking } from './instant-validation/instant-samples'\nimport { createUnrenderedSegmentError } from '../../shared/lib/instant-messages'\nimport { getReactBrowserBailoutReason } from '../../shared/lib/lazy-dynamic/react-browser-bailout'\n\nexport type DynamicAccess = {\n /**\n * If debugging, this will contain the stack trace of where the dynamic access\n * occurred. This is used to provide more information to the user about why\n * their page is being rendered dynamically.\n */\n stack?: string\n\n /**\n * The expression that was accessed dynamically.\n */\n expression: string\n}\n\n// Stores dynamic reasons used during an RSC render.\nexport type DynamicTrackingState = {\n /**\n * When true, stack information will also be tracked during dynamic access.\n */\n readonly isDebugDynamicAccesses: boolean | undefined\n\n /**\n * The dynamic accesses that occurred during the render.\n */\n readonly dynamicAccesses: Array\n\n syncDynamicErrorWithStack: null | Error\n syncDynamicErrorWithStackPostMicrotask: boolean\n}\n\n// Stores dynamic reasons used during an SSR render.\nexport type DynamicValidationState = {\n hasSuspenseAboveBody: boolean\n hasDynamicMetadata: boolean\n dynamicMetadata: null | Error\n hasDynamicViewport: boolean\n hasAllowedDynamic: boolean\n dynamicErrors: Array\n}\n\nexport function createDynamicTrackingState(\n isDebugDynamicAccesses: boolean | undefined\n): DynamicTrackingState {\n return {\n isDebugDynamicAccesses,\n dynamicAccesses: [],\n syncDynamicErrorWithStack: null,\n syncDynamicErrorWithStackPostMicrotask: false,\n }\n}\n\nexport function createDynamicValidationState(): DynamicValidationState {\n return {\n hasSuspenseAboveBody: false,\n hasDynamicMetadata: false,\n dynamicMetadata: null,\n hasDynamicViewport: false,\n hasAllowedDynamic: false,\n dynamicErrors: [],\n }\n}\n\nfunction getPendingClientSyncDynamicError(\n clientDynamic: DynamicTrackingState\n): null | Error {\n return clientDynamic.syncDynamicErrorWithStackPostMicrotask\n ? null\n : clientDynamic.syncDynamicErrorWithStack\n}\n\nexport function getFirstDynamicReason(\n trackingState: DynamicTrackingState\n): undefined | string {\n return trackingState.dynamicAccesses[0]?.expression\n}\n\n/**\n * This function communicates that the current scope should be treated as dynamic.\n *\n * In most cases this function is a no-op but if called during\n * a PPR prerender it will postpone the current sub-tree and calling\n * it during a normal prerender will cause the entire prerender to abort\n */\nexport function markCurrentScopeAsDynamic(\n store: WorkStore,\n workUnitStore: undefined | Exclude,\n expression: string\n): void {\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'cache':\n case 'unstable-cache':\n // Inside cache scopes, marking a scope as dynamic has no effect,\n // because the outer cache scope creates a cache boundary. This is\n // subtly different from reading a dynamic data source, which is\n // forbidden inside a cache scope.\n return\n case 'private-cache':\n // A private cache scope is already dynamic by definition.\n return\n case 'prerender-legacy':\n case 'request':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n // If we're forcing dynamic rendering or we're forcing static rendering, we\n // don't need to do anything here because the entire page is already dynamic\n // or it's static and it should not throw or postpone here.\n if (store.forceDynamic || store.forceStatic) return\n\n if (store.dynamicShouldError) {\n throw new StaticGenBailoutError(\n `Route ${store.route} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`\n )\n }\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender-legacy':\n workUnitStore.revalidate = 0\n\n // We aren't prerendering, but we are generating a static page. We need\n // to bail out of static generation.\n const err = new DynamicServerError(\n `Route ${store.route} couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n store.dynamicUsageDescription = expression\n store.dynamicUsageStack = err.stack\n\n throw err\n case 'request':\n markRequestStoreAsDynamic(workUnitStore)\n break\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n}\n\n/**\n * This function is meant to be used when prerendering without cacheComponents or PPR.\n * When called during a build it will cause Next.js to consider the route as dynamic.\n *\n * @internal\n */\nexport function throwToInterruptStaticGeneration(\n expression: string,\n store: WorkStore,\n prerenderStore: PrerenderStoreLegacy\n): never {\n // We aren't prerendering but we are generating a static page. We need to bail out of static generation\n const err = new DynamicServerError(\n `Route ${store.route} couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n\n prerenderStore.revalidate = 0\n\n store.dynamicUsageDescription = expression\n store.dynamicUsageStack = err.stack\n\n throw err\n}\n\n/**\n * This function should be used to track whether something dynamic happened even when\n * we are in a dynamic render. This is useful for Dev where all renders are dynamic but\n * we still track whether dynamic APIs were accessed for helpful messaging\n *\n * @internal\n */\nexport function trackDynamicDataInDynamicRender(workUnitStore: WorkUnitStore) {\n switch (workUnitStore.type) {\n case 'cache':\n case 'unstable-cache':\n // Inside cache scopes, marking a scope as dynamic has no effect,\n // because the outer cache scope creates a cache boundary. This is\n // subtly different from reading a dynamic data source, which is\n // forbidden inside a cache scope.\n return\n case 'private-cache':\n // A private cache scope is already dynamic by definition.\n return\n case 'prerender':\n case 'prerender-runtime':\n case 'prerender-legacy':\n case 'prerender-client':\n case 'validation-client':\n case 'build-time-generator':\n break\n case 'request':\n markRequestStoreAsDynamic(workUnitStore)\n break\n default:\n workUnitStore satisfies never\n }\n}\n\nfunction markRequestStoreAsDynamic(requestStore: RequestStore): void {\n if (process.env.__NEXT_DEV_SERVER && requestStore.phase === 'render') {\n requestStore.usedDynamic = true\n }\n}\n\nfunction abortOnSynchronousDynamicDataAccess(\n route: string,\n expression: string,\n prerenderStore: PrerenderStoreModern\n): void {\n const reason = `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`\n\n const error = createPrerenderInterruptedError(reason)\n\n prerenderStore.controller.abort(error)\n\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n // When we aren't debugging, we don't need to create another error for the\n // stack trace.\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n}\n\nexport function abortOnSynchronousPlatformIOAccess(\n route: string,\n expression: string,\n errorWithStack: Error,\n prerenderStore: PrerenderStoreModern\n): void {\n const dynamicTracking = prerenderStore.dynamicTracking\n\n if (dynamicTracking && dynamicTracking.syncDynamicErrorWithStack === null) {\n dynamicTracking.syncDynamicErrorWithStack = errorWithStack\n // React completes the task that is currently rendering before scheduled\n // abort cleanup. Client tracking can attribute the sync IO only during\n // that current task; server tracking keeps the error regardless.\n queueMicrotask(() => {\n dynamicTracking.syncDynamicErrorWithStackPostMicrotask = true\n })\n }\n\n abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore)\n}\n\n/**\n * use this function when prerendering with cacheComponents. If we are doing a\n * prospective prerender we don't actually abort because we want to discover\n * all caches for the shell. If this is the actual prerender we do abort.\n *\n * This function accepts a prerenderStore but the caller should ensure we're\n * actually running in cacheComponents mode.\n *\n * @internal\n */\nexport function abortAndThrowOnSynchronousRequestDataAccess(\n route: string,\n expression: string,\n errorWithStack: Error,\n prerenderStore: PrerenderStoreModern\n): never {\n const prerenderSignal = prerenderStore.controller.signal\n if (prerenderSignal.aborted === false) {\n // TODO it would be better to move this aborted check into the callsite so we can avoid making\n // the error object when it isn't relevant to the aborting of the prerender however\n // since we need the throw semantics regardless of whether we abort it is easier to land\n // this way. See how this was handled with `abortOnSynchronousPlatformIOAccess` for a closer\n // to ideal implementation\n abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore)\n // Preserve the exact server-side dynamic access for final validation after\n // interrupting this render.\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n if (dynamicTracking.syncDynamicErrorWithStack === null) {\n dynamicTracking.syncDynamicErrorWithStack = errorWithStack\n }\n }\n }\n throw createPrerenderInterruptedError(\n `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`\n )\n}\n\nconst NEXT_PRERENDER_INTERRUPTED = 'NEXT_PRERENDER_INTERRUPTED'\n\nfunction createPrerenderInterruptedError(message: string): Error {\n const error = new Error(message)\n ;(error as any).digest = NEXT_PRERENDER_INTERRUPTED\n return error\n}\n\ntype DigestError = Error & {\n digest: string\n}\n\nexport function isPrerenderInterruptedError(\n error: unknown\n): error is DigestError {\n return (\n typeof error === 'object' &&\n error !== null &&\n (error as any).digest === NEXT_PRERENDER_INTERRUPTED &&\n 'name' in error &&\n 'message' in error &&\n error instanceof Error\n )\n}\n\nexport function accessedDynamicData(\n dynamicAccesses: Array\n): boolean {\n return dynamicAccesses.length > 0\n}\n\nexport function consumeDynamicAccess(\n serverDynamic: DynamicTrackingState,\n clientDynamic: DynamicTrackingState\n): DynamicTrackingState['dynamicAccesses'] {\n // We mutate because we only call this once we are no longer writing\n // to the dynamicTrackingState and it's more efficient than creating a new\n // array.\n serverDynamic.dynamicAccesses.push(...clientDynamic.dynamicAccesses)\n return serverDynamic.dynamicAccesses\n}\n\nexport function formatDynamicAPIAccesses(\n dynamicAccesses: Array\n): string[] {\n return dynamicAccesses\n .filter(\n (access): access is Required =>\n typeof access.stack === 'string' && access.stack.length > 0\n )\n .map(({ expression, stack }) => {\n stack = stack\n .split('\\n')\n // Remove the \"Error: \" prefix from the first line of the stack trace as\n // well as the first 4 lines of the stack trace which is the distance\n // from the user code and the `new Error().stack` call.\n .slice(4)\n .filter((line) => {\n // Exclude Next.js internals from the stack trace.\n if (line.includes('node_modules/next/')) {\n return false\n }\n\n // Exclude anonymous functions from the stack trace.\n if (line.includes(' ()')) {\n return false\n }\n\n // Exclude Node.js internals from the stack trace.\n if (line.includes(' (node:')) {\n return false\n }\n\n return true\n })\n .join('\\n')\n return `Dynamic API Usage Debug - ${expression}:\\n${stack}`\n })\n}\n\n/**\n * In a prerender, we may end up with hanging Promises as inputs due them\n * stalling on connection() or because they're loading dynamic data. In that\n * case we need to abort the encoding of arguments since they'll never complete.\n */\nexport function createHangingInputAbortSignal(\n workUnitStore: PrerenderStoreModernServer\n): AbortSignal\nexport function createHangingInputAbortSignal(\n workUnitStore: WorkUnitStore\n): AbortSignal | undefined\nexport function createHangingInputAbortSignal(\n workUnitStore: WorkUnitStore\n): AbortSignal | undefined {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-runtime':\n const controller = new AbortController()\n\n if (workUnitStore.cacheSignal) {\n // If we have a cacheSignal it means we're in a prospective render. If\n // the input we're waiting on is coming from another cache, we do want\n // to wait for it so that we can resolve this cache entry too.\n workUnitStore.cacheSignal.inputReady().then(() => {\n controller.abort()\n })\n } else {\n // Otherwise we're in the final render and we should already have all\n // our caches filled.\n // If the prerender uses stages, we have wait until the final stage.\n // if an input didn't resolve at that point, then we can assume it never will.\n //\n // We might still be waiting on some microtasks so we\n // wait one tick before giving up. When we give up, we still want to\n // render the content of this cache as deeply as we can so that we can\n // suspend as deeply as possible in the tree or not at all if we don't\n // end up waiting for the input.\n\n const stagedRendering = getStagedRenderingController(workUnitStore)\n if (stagedRendering && stagedRendering.finalStage !== null) {\n stagedRendering\n .waitForStage(stagedRendering.finalStage)\n .then(() => scheduleOnNextTick(() => controller.abort()), noop)\n } else {\n scheduleOnNextTick(() => controller.abort())\n }\n }\n\n return controller.signal\n case 'prerender-client':\n case 'validation-client':\n case 'prerender-legacy':\n case 'request':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n return undefined\n default:\n workUnitStore satisfies never\n }\n}\n\nfunction noop() {}\n\nexport function annotateDynamicAccess(\n expression: string,\n prerenderStore: PrerenderStoreModern | ValidationStoreClient\n) {\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n}\n\nconst hasSuspenseRegex = /\\n\\s+at Suspense \\(\\)/\n\n// Common implicit body tags that React will treat as body when placed directly in html\nconst bodyAndImplicitTags =\n 'body|div|main|section|article|aside|header|footer|nav|form|p|span|h1|h2|h3|h4|h5|h6'\n\n// Detects when RootLayoutBoundary (our framework marker component) appears\n// after Suspense in the component stack, indicating the root layout is wrapped\n// within a Suspense boundary. Ensures no body/html/implicit-body components are in between.\n//\n// Example matches:\n// at Suspense ()\n// at __next_root_layout_boundary__ ()\n//\n// Or with other components in between (but not body/html/implicit-body):\n// at Suspense ()\n// at SomeComponent ()\n// at __next_root_layout_boundary__ ()\nconst hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex = new RegExp(\n `\\\\n\\\\s+at Suspense \\\\(\\\\)(?:(?!\\\\n\\\\s+at (?:${bodyAndImplicitTags}) \\\\(\\\\))[\\\\s\\\\S])*?\\\\n\\\\s+at ${ROOT_LAYOUT_BOUNDARY_NAME} \\\\([^\\\\n]*\\\\)`\n)\n\nconst hasMetadataRegex = new RegExp(\n `\\\\n\\\\s+at ${METADATA_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst hasViewportRegex = new RegExp(\n `\\\\n\\\\s+at ${VIEWPORT_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst hasOutletRegex = new RegExp(`\\\\n\\\\s+at ${OUTLET_BOUNDARY_NAME}[\\\\n\\\\s]`)\n\nconst hasInstantValidationBoundaryRegex = new RegExp(\n `\\\\n\\\\s+at ${INSTANT_VALIDATION_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst slotMarkerRegex = new RegExp(\n `\\\\n\\\\s+at ${INSTANT_SLOT_MARKER_PREFIX}(\\\\d+)${INSTANT_SLOT_MARKER_SUFFIX}[\\\\n\\\\s]`\n)\n\n/** Look up the config factory for the slot this error belongs to.\n * Checks the component stack for a slot marker (__next_instant_slot_N__)\n * and returns the config at that index. Falls back to index 0 (root\n * config) when no slot marker is found or the slot has no config. */\nfunction resolveInstantStack(\n componentStack: string,\n dynamicValidation: InstantValidationState\n): (() => Error) | null {\n const { slotStacks } = dynamicValidation\n if (slotStacks.length > 1) {\n const match = slotMarkerRegex.exec(componentStack)\n if (match) {\n // Slot markers are 0-indexed in the component name but\n // slotStacks is 1-indexed (index 0 is the root config).\n const slotIndex = parseInt(match[1], 10) + 1\n const slotStack = slotStacks[slotIndex]\n if (slotStack != null) {\n return slotStack\n }\n }\n }\n // Fall back to root config (index 0)\n return slotStacks[0] ?? null\n}\n\n/**\n * Inspects the component stack of an outlet boundary to discover whether the\n * user placed a Suspense boundary above the document body, and records the\n * opt-in on `dynamicValidation.hasSuspenseAboveBody` if so.\n *\n * The outlet itself isn't a meaningful source of dynamic — it only resolves\n * when metadata/viewport are dynamic, which we track via their own boundaries.\n * However, the outlet renders alongside the page content, so its stack passes\n * through the user's layout chain (typically reaching into `` via the\n * root layout). That makes the outlet stack our best opportunity to spot a\n * Suspense boundary above the body, even when no real body content is dynamic.\n * Without this, a route whose only dynamic source is `generateViewport()` would\n * miss the Suspense-above-body opt-in, because the viewport's stack lives in\n * the head and never sees the user's root layout.\n *\n * We deliberately only set `hasSuspenseAboveBody`, not `hasAllowedDynamic`. The\n * latter tracks whether the body has dynamic content that's been wrapped in\n * Suspense (i.e., the page is partially dynamic). The outlet rendering tells us\n * about the structural opt-in for an empty shell, not about the body being\n * partially dynamic. The distinction matters because dynamic metadata is only\n * acceptable when the page is partially dynamic (via real body holes), and we\n * don't want this outlet-based detection to mask that case.\n */\nfunction trackOutletSuspenseAboveBody(\n componentStack: string,\n dynamicValidation: DynamicValidationState\n): void {\n if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n dynamicValidation.hasSuspenseAboveBody = true\n }\n}\n\nexport function trackDynamicAccessInStaticRoute(\n dynamicReason: unknown,\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n clientDynamic: DynamicTrackingState,\n isServerPartial: boolean,\n kind: StaticValidationHoleKind\n) {\n const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic)\n\n if (hasOutletRegex.test(componentStack)) {\n trackOutletSuspenseAboveBody(componentStack, dynamicValidation)\n return\n }\n if (hasMetadataRegex.test(componentStack)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(\n createMetadataErrorInStaticRoute(kind, workStore.route),\n componentStack,\n null\n )\n )\n return\n }\n if (hasViewportRegex.test(componentStack)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(\n createViewportErrorInStaticRoute(kind, workStore.route),\n componentStack,\n null\n )\n )\n return\n }\n\n let hasSuspense = false\n if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n // this error had a Suspense boundary above it, and it's above the body as well.\n dynamicValidation.hasSuspenseAboveBody = true\n hasSuspense = true\n } else if (hasSuspenseRegex.test(componentStack)) {\n // this error had a Suspense boundary above it.\n hasSuspense = true\n }\n\n if (hasSuspense) {\n if (!isServerPartial) {\n // If we don't have holes caused by server data, then any holes must be caused\n // by client-only code, which is allowed.\n dynamicValidation.hasAllowedDynamic = true\n return\n }\n\n // We have holes that may be caused by server data.\n if (syncDynamicError || isClientHookDynamicError(dynamicReason)) {\n // We know this hole wasn't caused by server data, so it's allowed\n // (because it's wrapped in a Suspense)\n dynamicValidation.hasAllowedDynamic = true\n return\n }\n\n // Any remaining hole may be caused by a server hole.\n // These are not allowed even with Suspense.\n // (NOTE: this may misreport valid client dynamic holes as server holes)\n dynamicValidation.dynamicErrors.push(\n addErrorContext(\n createBodyErrorInStaticRoute(kind, workStore.route),\n componentStack,\n null\n )\n )\n return\n }\n\n if (syncDynamicError) {\n dynamicValidation.dynamicErrors.push(syncDynamicError)\n return\n }\n\n if (isClientHookDynamicError(dynamicReason)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(dynamicReason, componentStack, null)\n )\n return\n }\n\n const error = addErrorContext(\n isServerPartial\n ? // This hole may be caused by server data.\n // (NOTE: this may misreport client dynamic holes as server holes)\n createBodyErrorInStaticRoute(kind, workStore.route)\n : // TODO(ensure-static): this could be something client-specific because we know\n // that server data is complete\n createBodyError(kind, workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicErrors.push(error)\n}\n\nexport function trackAllowedDynamicAccess(\n dynamicReason: unknown,\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n clientDynamic: DynamicTrackingState\n) {\n const dynamicHoleKind = DynamicHoleKind.RuntimeOrDynamic\n\n const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic)\n\n if (hasOutletRegex.test(componentStack)) {\n trackOutletSuspenseAboveBody(componentStack, dynamicValidation)\n return\n } else if (hasMetadataRegex.test(componentStack)) {\n dynamicValidation.hasDynamicMetadata = true\n return\n } else if (hasViewportRegex.test(componentStack)) {\n dynamicValidation.hasDynamicViewport = true\n return\n } else if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule.\n // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense\n // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering.\n dynamicValidation.hasAllowedDynamic = true\n dynamicValidation.hasSuspenseAboveBody = true\n return\n } else if (hasSuspenseRegex.test(componentStack)) {\n // this error had a Suspense boundary above it so we don't need to report it as a source\n // of disallowed\n dynamicValidation.hasAllowedDynamic = true\n return\n } else if (syncDynamicError) {\n dynamicValidation.dynamicErrors.push(syncDynamicError)\n return\n }\n\n if (isClientHookDynamicError(dynamicReason)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(dynamicReason, componentStack, null)\n )\n return\n }\n\n const error = addErrorContext(\n createBodyError(dynamicHoleKind, workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n}\n\nexport enum DynamicHoleKind {\n /** We know that this hole is caused by runtime data. */\n Runtime = 1,\n /** We know that this hole is caused by link data. */\n Link = 2,\n /** We know that this hole is caused by navigation(). */\n Navigation = 3,\n /** We know that this hole is caused by prefetch(). */\n Prefetch = 4,\n /** We know that this hole is caused by dynamic data. */\n Dynamic = 5,\n /** We know that this hole is caused by runtime or dynamic data, but don't know which. */\n RuntimeOrDynamic = 6,\n}\n\n// In Instant Validation we can always discriminate between runtime and dynamic.\nexport type InstantValidationHoleKind = Exclude<\n DynamicHoleKind,\n DynamicHoleKind.RuntimeOrDynamic\n>\n\nexport type StaticValidationHoleKind =\n // During dev-time static validation we can discriminate runtime and dynamic.\n | DynamicHoleKind.Runtime\n | DynamicHoleKind.Dynamic\n // During build-time static validation we can't discriminate runtime and dynamic.\n | DynamicHoleKind.RuntimeOrDynamic\n\n/** Stores dynamic reasons used during an SSR render in instant validation. */\nexport type InstantValidationState = {\n hasDynamicMetadata: boolean\n hasAllowedClientDynamicAboveBoundary: boolean\n dynamicMetadata: null | Error\n hasDynamicViewport: boolean\n hasAllowedDynamic: boolean\n dynamicErrors: Array\n validationPreventingErrors: Array\n thrownErrorsOutsideBoundary: Array\n /** Per-slot config factories. Index 0 is the root config (fallback).\n * Indices 1+ correspond to slot marker components in the tree. */\n slotStacks: Array<(() => Error) | null>\n}\n\nexport function createInstantValidationState(\n slotStacks: Array<(() => Error) | null>\n): InstantValidationState {\n return {\n hasDynamicMetadata: false,\n hasAllowedClientDynamicAboveBoundary: false,\n dynamicMetadata: null,\n hasDynamicViewport: false,\n hasAllowedDynamic: false,\n dynamicErrors: [],\n validationPreventingErrors: [],\n thrownErrorsOutsideBoundary: [],\n slotStacks,\n }\n}\n\nexport function trackDynamicHoleInNavigation(\n dynamicReason: unknown,\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: InstantValidationState,\n clientDynamic: DynamicTrackingState,\n kind: InstantValidationHoleKind,\n boundaryState: ValidationBoundaryTracking\n) {\n const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic)\n\n if (hasOutletRegex.test(componentStack)) {\n // We don't need to track that this is dynamic. It is only so when something else is also dynamic.\n return\n }\n // Resolve the config stack for this specific error. If the error\n // is inside a slot marker, use that slot's config. Otherwise fall\n // back to the default.\n const effectiveCreateInstantStack = resolveInstantStack(\n componentStack,\n dynamicValidation\n )\n\n if (hasMetadataRegex.test(componentStack)) {\n const error = addErrorContext(\n createMetadataError(kind, workStore.route),\n componentStack,\n effectiveCreateInstantStack\n )\n dynamicValidation.dynamicMetadata = error\n return\n }\n if (hasViewportRegex.test(componentStack)) {\n const error = addErrorContext(\n createViewportError(kind, workStore.route),\n componentStack,\n effectiveCreateInstantStack\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n }\n\n const boundaryLocation =\n hasInstantValidationBoundaryRegex.exec(componentStack)\n if (!boundaryLocation) {\n // We don't see the validation boundary in the component stack,\n // so this hole must be coming from a shared parent.\n // Shared parents are fully resolved and don't have RSC holes,\n // but they can still suspend in a client component during SSR.\n\n // If we managed to render all the validation boundaries, that means\n // that the client holes aren't blocking validation and we can disregard them.\n // Note that we don't even care whether they have suspense or not.\n if (allRequiredBoundariesRendered(boundaryState)) {\n dynamicValidation.hasAllowedClientDynamicAboveBoundary = true\n dynamicValidation.hasAllowedDynamic = true // Holes outside the boundary contribute to allowing dynamic metadata\n return\n } else {\n // TODO(instant-validation) TODO(NAR-787)\n // If shared parents blocked us from validating, we should only log\n // the errors from the innermost (segments), i.e. omit layouts whose\n // slots managed to render (because clearly they didn't block validation)\n const message = `Route \"${workStore.route}\": Could not validate \\`instant\\` because a Client Component in a parent segment prevented the page from rendering.`\n const error = addErrorContext(\n new Error(message),\n componentStack,\n effectiveCreateInstantStack\n )\n dynamicValidation.validationPreventingErrors.push(error)\n return\n }\n } else {\n // The hole originates inside the validation boundary.\n //\n // Check if we have a Suspense above the hole, but below the validation boundary.\n // If we do, then this dynamic usage wouldn't block a navigation to this subtree.\n // Conversely, if the nearest suspense is above the validation boundary, then this subtree would block.\n //\n // Note that in the component stack, children come before parents.\n //\n // Valid:\n // ...\n // at Suspense\n // ...\n // at __next_prefetch_validation_boundary__\n //\n // Invalid:\n // ...\n // at __next_prefetch_validation_boundary__\n // ...\n // at Suspense\n //\n const suspenseLocation = hasSuspenseRegex.exec(componentStack)\n if (suspenseLocation) {\n if (suspenseLocation.index < boundaryLocation.index) {\n dynamicValidation.hasAllowedDynamic = true\n return\n } else {\n // invalid - fallthrough\n }\n }\n }\n\n if (syncDynamicError) {\n if (\n effectiveCreateInstantStack !== null &&\n syncDynamicError.cause === undefined\n ) {\n syncDynamicError.cause = effectiveCreateInstantStack()\n }\n dynamicValidation.dynamicErrors.push(syncDynamicError)\n return\n }\n\n if (isClientHookDynamicError(dynamicReason)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(\n dynamicReason,\n componentStack,\n effectiveCreateInstantStack\n )\n )\n return\n }\n\n const error = addErrorContext(\n createBodyErrorInNavigation(kind, workStore.route),\n componentStack,\n effectiveCreateInstantStack\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n}\n\nfunction createBodyError(kind: StaticValidationHoleKind, route: string): Error {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeBodyError(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicBodyError(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createDynamicOrRuntimeBodyError(route)\n }\n}\n\nfunction createBodyErrorInNavigation(\n kind: InstantValidationHoleKind,\n route: string\n): Error {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeBodyErrorInNavigation(route)\n case DynamicHoleKind.Link:\n return createLinkBodyErrorInNavigation(route)\n case DynamicHoleKind.Navigation:\n return createNavigationBodyErrorInNavigation(route)\n case DynamicHoleKind.Prefetch:\n return createPrefetchBodyErrorInNavigation(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicBodyErrorInNavigation(route)\n }\n}\n\nfunction createMetadataError(kind: DynamicHoleKind, route: string): Error {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeMetadataError(route)\n case DynamicHoleKind.Link:\n return createLinkMetadataError(route)\n case DynamicHoleKind.Navigation:\n return createNavigationMetadataError(route)\n case DynamicHoleKind.Prefetch:\n return createPrefetchMetadataError(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicMetadataError(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createDynamicOrRuntimeMetadataError(route)\n }\n}\n\nfunction createViewportError(kind: DynamicHoleKind, route: string): Error {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeViewportError(route)\n case DynamicHoleKind.Link:\n return createLinkViewportError(route)\n case DynamicHoleKind.Navigation:\n return createNavigationViewportError(route)\n case DynamicHoleKind.Prefetch:\n return createPrefetchViewportError(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicViewportError(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createDynamicOrRuntimeViewportError(route)\n }\n}\n\nfunction createBodyErrorInStaticRoute(\n kind: StaticValidationHoleKind,\n route: string\n): Error {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeBodyErrorInStaticRoute(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicBodyErrorInStaticRoute(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createNonPrerenderableBodyErrorInStaticRoute(route)\n }\n}\n\nfunction createMetadataErrorInStaticRoute(\n kind: StaticValidationHoleKind,\n route: string\n) {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeMetadataErrorInStaticRoute(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicMetadataErrorInStaticRoute(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createNonPrerenderableMetadataErrorInStaticRoute(route)\n }\n}\n\nfunction createViewportErrorInStaticRoute(\n kind: StaticValidationHoleKind,\n route: string\n) {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeViewportErrorInStaticRoute(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicViewportErrorInStaticRoute(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createNonPrerenderableViewportErrorInStaticRoute(route)\n }\n}\n\nexport function trackThrownErrorInNavigation(\n workStore: WorkStore,\n dynamicValidation: InstantValidationState,\n thrownValue: unknown,\n componentStack: string,\n reactBrowserBailout: boolean\n) {\n const boundaryLocation =\n hasInstantValidationBoundaryRegex.exec(componentStack)\n if (!boundaryLocation) {\n // There's no validation boundary on the component stack.\n // This error may have blocked a boundary from rendering.\n\n // Wrap the error to provide component context.\n // This helps for errors from node_modules which would otherwise\n // have no useful stack information due to ignore-listing,\n // e.g. next/dynamic with `ssr: false`.\n if (reactBrowserBailout) {\n // React preserves Next's branded bailout reason as the error cause.\n // Replace the internal wrapper before storing the user-facing diagnostic.\n const browserBailoutReason = getReactBrowserBailoutReason(thrownValue)\n if (browserBailoutReason !== undefined) {\n const browserBailoutError = thrownValue as Error\n browserBailoutError.cause = browserBailoutReason\n }\n }\n\n const error = addErrorContext(\n new Error(\n 'An error occurred while attempting to validate instant UI. This error may be preventing the validation from completing.',\n { cause: thrownValue }\n ),\n componentStack,\n null\n )\n dynamicValidation.thrownErrorsOutsideBoundary.push(error)\n } else {\n // There's validation boundary on the component stack,\n // so we know this error didn't block a validation boundary from rendering.\n // However, this error might be hiding be hiding dynamic content that would\n // cause validation to fail.\n const suspenseLocation = hasSuspenseRegex.exec(componentStack)\n if (suspenseLocation) {\n if (suspenseLocation.index < boundaryLocation.index) {\n // There's a Suspense below the validation boundary but above this error's location.\n // This subtree can't fail instant validation because any potential\n // dynamic holes would be guarded by the Suspense anyway,\n // so we can allow this.\n return\n } else {\n // invalid - fallthrough\n }\n }\n if (reactBrowserBailout) {\n // React preserves Next's branded bailout reason as the error cause.\n // Replace the internal wrapper before storing the user-facing diagnostic.\n const browserBailoutReason = getReactBrowserBailoutReason(thrownValue)\n if (browserBailoutReason !== undefined) {\n const browserBailoutError = thrownValue as Error\n browserBailoutError.cause = browserBailoutReason\n }\n }\n\n const message = `Route \"${workStore.route}\": Could not validate \\`instant\\` because an error prevented the target segment from rendering.`\n const error = addErrorContext(\n new Error(message, { cause: thrownValue }),\n componentStack,\n null // TODO(instant-validation-build): conflicting use of cause\n )\n dynamicValidation.validationPreventingErrors.push(error)\n }\n}\n\nexport function trackDynamicHoleInStaticShell(\n dynamicReason: unknown,\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n clientDynamic: DynamicTrackingState,\n kind: DynamicHoleKind.Runtime | DynamicHoleKind.Dynamic\n) {\n const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic)\n\n if (hasOutletRegex.test(componentStack)) {\n trackOutletSuspenseAboveBody(componentStack, dynamicValidation)\n return\n } else if (hasMetadataRegex.test(componentStack)) {\n const error = addErrorContext(\n createMetadataError(kind, workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicMetadata = error\n return\n } else if (hasViewportRegex.test(componentStack)) {\n const error = addErrorContext(\n createViewportError(kind, workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n } else if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule.\n // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense\n // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering.\n dynamicValidation.hasAllowedDynamic = true\n dynamicValidation.hasSuspenseAboveBody = true\n return\n } else if (hasSuspenseRegex.test(componentStack)) {\n // this error had a Suspense boundary above it so we don't need to report it as a source\n // of disallowed\n dynamicValidation.hasAllowedDynamic = true\n return\n } else if (syncDynamicError) {\n dynamicValidation.dynamicErrors.push(syncDynamicError)\n return\n }\n\n if (isClientHookDynamicError(dynamicReason)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(dynamicReason, componentStack, null)\n )\n return\n }\n\n const error = addErrorContext(\n kind === DynamicHoleKind.Runtime\n ? createRuntimeBodyError(workStore.route)\n : createDynamicBodyError(workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n}\n\n/**\n * In dev mode, we prefer using the owner stack, otherwise the provided\n * component stack is used.\n */\nfunction addErrorContext(\n error: Error,\n componentStack: string,\n createInstantStack: (() => Error) | null\n) {\n const ownerStack =\n process.env.NODE_ENV !== 'production' && React.captureOwnerStack\n ? React.captureOwnerStack()\n : null\n\n if (createInstantStack !== null) {\n error.cause = createInstantStack()\n }\n // TODO go back to owner stack here if available. This is temporarily using componentStack to get the right\n //\n error.stack =\n error.name + ': ' + error.message + (ownerStack || componentStack)\n return error\n}\n\nexport enum PreludeState {\n Full = 0,\n Empty = 1,\n Errored = 2,\n}\n\nexport function logDisallowedDynamicError(\n workStore: WorkStore,\n error: Error\n): void {\n console.error(error)\n logBuildDebugHint(workStore.route)\n}\n\nexport function throwIfSyncIOUsed(\n workStore: WorkStore,\n serverDynamic: DynamicTrackingState\n) {\n if (serverDynamic.syncDynamicErrorWithStack) {\n logDisallowedDynamicError(\n workStore,\n serverDynamic.syncDynamicErrorWithStack\n )\n throw new StaticGenBailoutError()\n }\n}\n\nexport function throwIfDisallowedDynamic(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: DynamicValidationState,\n serverDynamic: DynamicTrackingState,\n allowEmptyStaticShell: boolean\n): void {\n const dynamicHoleKind = DynamicHoleKind.RuntimeOrDynamic\n\n throwIfSyncIOUsed(workStore, serverDynamic)\n\n // The dynamic metadata error is a mistake-detection signal. It fires when the\n // rest of the shell is otherwise fully static apart from metadata, suggesting\n // the dynamic data access in `generateMetadata` was probably unintentional.\n // That condition is independent of whether the user or build phase accepted\n // an empty shell, so we surface it before any opt-in bypass.\n if (\n prelude === PreludeState.Full &&\n dynamicValidation.hasAllowedDynamic === false &&\n dynamicValidation.hasDynamicMetadata\n ) {\n console.error(createMetadataError(dynamicHoleKind, workStore.route).message)\n throw new StaticGenBailoutError()\n }\n\n // Either flag expresses \"this shell is allowed to be empty/blocking\":\n // - `allowEmptyStaticShell` covers `instant = false` (user opt-in)\n // and the build-phase fallback-shell case.\n // - `hasSuspenseAboveBody` is the structural opt-in inside the user's root\n // layout.\n // Treat them as synonyms for the purpose of bypassing shell-failure errors.\n if (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody) {\n return\n }\n\n if (prelude !== PreludeState.Full) {\n // We didn't have any sync bailouts but there may be user code which\n // blocked the root. We would have captured these during the prerender\n // and can log them here and then terminate the build/validating render\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n for (let i = 0; i < dynamicErrors.length; i++) {\n logDisallowedDynamicError(workStore, dynamicErrors[i])\n }\n\n throw new StaticGenBailoutError()\n }\n\n // If we got this far then the only other thing that could be blocking\n // the root is dynamic Viewport. If this is dynamic then\n // you need to opt into that by adding a Suspense boundary above the body\n // to indicate your are ok with fully dynamic rendering.\n if (dynamicValidation.hasDynamicViewport) {\n console.error(\n createViewportError(dynamicHoleKind, workStore.route).message\n )\n throw new StaticGenBailoutError()\n }\n\n if (prelude === PreludeState.Empty) {\n // If we ever get this far then we messed up the tracking of invalid dynamic.\n // We still adhere to the constraint that you must produce a shell but invite the\n // user to report this as a bug in Next.js.\n console.error(\n `Route \"${workStore.route}\" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`\n )\n throw new StaticGenBailoutError()\n }\n }\n}\n\nexport function throwIfDisallowedDynamicInStaticRoute(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: DynamicValidationState,\n serverDynamic: DynamicTrackingState,\n isFallbackShell: boolean,\n allowEmptyStaticShell: boolean,\n isServerPartial: boolean\n): void {\n const reasons = getDisallowedReasonsInStaticRoute(\n workStore,\n prelude,\n dynamicValidation,\n serverDynamic,\n isFallbackShell,\n allowEmptyStaticShell,\n isServerPartial\n )\n if (reasons.length > 0) {\n for (const reason of reasons) {\n logDisallowedDynamicError(workStore, reason)\n }\n throw new StaticGenBailoutError()\n }\n}\n\nexport function getDisallowedReasonsInStaticRoute(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: DynamicValidationState,\n serverDynamic: DynamicTrackingState | null,\n isFallbackShell: boolean,\n allowEmptyStaticShell: boolean,\n isServerPartial: boolean\n): Error[] {\n if (serverDynamic && serverDynamic.syncDynamicErrorWithStack) {\n return [serverDynamic.syncDynamicErrorWithStack]\n }\n\n // We do a fallback shell prerender, but it's not meant to be validated --\n // we just need it to create the relevant prerender outputs.\n if (isFallbackShell) {\n return []\n }\n\n // Suspense-above-body and `instant = false` bypass reporting\n // that the shell is blocked. However, if we have non-prerenderable server\n // data, we still have to error, regardless of those two.\n if (\n !isServerPartial &&\n (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody)\n ) {\n return []\n }\n\n const { dynamicErrors } = dynamicValidation\n if (dynamicErrors.length > 0) {\n return dynamicErrors\n }\n\n // Dynamic data may have been passed into a client component without calling `use()`,\n // in which case we wouldn't see it during the prerender, but still need to error.\n // Fall back to a generic error message.\n if (isServerPartial) {\n return [\n new Error(\n `Route \"${workStore.route}\": Next.js encountered data that is not available during a static prerender, but is unable to provide a location.`\n ),\n ]\n }\n\n if (prelude === PreludeState.Empty || prelude === PreludeState.Errored) {\n // We've somehow ended up with an empty prelude but no dynamic errors.\n // We must've messed up the tracking somehow.\n return [\n new InvariantError(\n `Route \"${workStore.route}\" did not produce a static shell and Next.js was unable to determine a reason.`\n ),\n ]\n }\n return []\n}\n\nexport function getStaticShellDisallowedDynamicReasons(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: DynamicValidationState,\n allowEmptyStaticShell: boolean\n): Array {\n // The dynamic metadata error is a mistake-detection signal. It fires when the\n // rest of the shell is otherwise fully static apart from metadata, suggesting\n // the dynamic data access in `generateMetadata` was probably unintentional.\n // That condition is independent of whether the user or build phase accepted\n // an empty shell, so we surface it before any opt-in bypass.\n if (\n prelude === PreludeState.Full &&\n dynamicValidation.hasAllowedDynamic === false &&\n dynamicValidation.dynamicErrors.length === 0 &&\n dynamicValidation.dynamicMetadata\n ) {\n return [dynamicValidation.dynamicMetadata]\n }\n\n // Either flag expresses \"this shell is allowed to be empty/blocking\":\n // - `allowEmptyStaticShell` covers `instant = false` (user opt-in)\n // and the build-phase fallback-shell case.\n // - `hasSuspenseAboveBody` is the structural opt-in inside the user's root\n // layout.\n // Treat them as synonyms for the purpose of bypassing shell-failure errors.\n if (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody) {\n return []\n }\n\n if (prelude !== PreludeState.Full) {\n // We didn't have any sync bailouts but there may be user code which\n // blocked the root. We would have captured these during the prerender\n // and can log them here and then terminate the build/validating render\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n return dynamicErrors\n }\n\n if (prelude === PreludeState.Empty) {\n // If we ever get this far then we messed up the tracking of invalid dynamic.\n // We still adhere to the constraint that you must produce a shell but invite the\n // user to report this as a bug in Next.js.\n return [\n new InvariantError(\n `Route \"${workStore.route}\" did not produce a static shell and Next.js was unable to determine a reason.`\n ),\n ]\n }\n }\n // We had a non-empty prelude and there are no dynamic holes\n return []\n}\n\n/**\n * `errors` are validation failures that should be surfaced immediately.\n * `deferredFallback` carries a missing-boundary explanation that the caller\n * should hold back until *every* validation depth has been tried — a missing\n * boundary often just means a parent layout intentionally omitted a slot, and\n * a different depth's validation may surface a more meaningful error.\n */\nexport type NavigationValidationResult =\n // instances that block instant navigation\n | Array\n // validation was blocked with zero or more reasons\n | Error\n | AggregateError\n\nexport function getNavigationDisallowedDynamicReasons(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: InstantValidationState,\n validationSampleTracking: InstantValidationSampleTracking | null,\n boundaryState: ValidationBoundaryTracking,\n devRenderDidError: boolean\n): NavigationValidationResult {\n // If we have errors related to missing samples, those should take precedence over everything else.\n if (validationSampleTracking) {\n const { missingSampleErrors } = validationSampleTracking\n if (missingSampleErrors.length > 0) {\n return missingSampleErrors\n }\n }\n\n const { validationPreventingErrors } = dynamicValidation\n if (validationPreventingErrors.length > 0) {\n if (process.env.__NEXT_DEV_SERVER && devRenderDidError) {\n // The dev render already surfaced server errors to the user.\n // The same errors likely caused validation to be inconclusive,\n // so reporting them again as validation failures would be noisy.\n return []\n }\n return validationPreventingErrors\n }\n\n // NOTE: We don't care about Suspense above body here,\n // we're only concerned with the validation boundary\n if (prelude !== PreludeState.Full) {\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n return dynamicErrors\n }\n\n if (\n prelude === PreludeState.Empty &&\n !dynamicValidation.hasAllowedClientDynamicAboveBoundary &&\n allRequiredBoundariesRendered(boundaryState)\n ) {\n // If we ever get this far then we messed up the tracking of invalid\n // dynamic. (When boundaries are missing the deferred fallback below\n // will surface a more useful error.)\n return new InvariantError(\n `Route \"${workStore.route}\" failed to render during instant validation and Next.js was unable to determine a reason.`\n )\n }\n } else {\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n return dynamicErrors\n }\n\n if (\n dynamicValidation.hasAllowedDynamic === false &&\n dynamicValidation.dynamicMetadata\n ) {\n return [dynamicValidation.dynamicMetadata]\n }\n }\n\n // Missing boundaries on their own aren't a strong signal — a parent\n // layout may legitimately omit a slot. Defer this so the caller can\n // try shallower validation depths first; if every depth comes up\n // empty we still want to surface this so the user is made aware that\n // validation didn't complete. When we add a markers API, the\n // marker-based variant of this check can become strict again.\n if (!allRequiredBoundariesRendered(boundaryState)) {\n const { thrownErrorsOutsideBoundary } = dynamicValidation\n const rootInstantStack = dynamicValidation.slotStacks[0]\n if (thrownErrorsOutsideBoundary.length === 0) {\n const missingFiles: string[] = []\n for (const [id, filePaths] of boundaryState.requiredIds) {\n if (!boundaryState.renderedIds.has(id)) {\n for (const filePath of filePaths) {\n let normalized = filePath\n .replace(/^\\[project\\][\\\\/]?/, '')\n .replace(process.cwd() + '/', '')\n .replace(process.cwd() + '\\\\', '')\n missingFiles.push(normalized)\n }\n }\n }\n missingFiles.sort()\n return createUnrenderedSegmentError(workStore.route, missingFiles)\n } else if (process.env.__NEXT_DEV_SERVER && devRenderDidError) {\n // Errors outside the boundary likely blocked it from rendering,\n // but they're already being reported to the user via the dev\n // render. Suppress the validation failure to avoid noise.\n return []\n } else if (thrownErrorsOutsideBoundary.length === 1) {\n const message = `Route \"${workStore.route}\": Could not validate \\`instant\\` because the target segment was prevented from rendering, likely due to the following error.`\n const error = rootInstantStack !== null ? rootInstantStack() : new Error()\n error.name = 'Error'\n error.message = message\n return new AggregateError([\n error,\n thrownErrorsOutsideBoundary[0] as Error,\n ])\n } else {\n const message = `Route \"${workStore.route}\": Could not validate \\`instant\\` because the target segment was prevented from rendering, likely due to one of the following errors.`\n const error = rootInstantStack !== null ? rootInstantStack() : new Error()\n error.name = 'Error'\n error.message = message\n return new AggregateError([\n error,\n ...(thrownErrorsOutsideBoundary as Error[]),\n ])\n }\n }\n\n // We had a non-empty prelude and there are no dynamic holes\n return []\n}\n"],"names":["React","DynamicServerError","StaticGenBailoutError","getStagedRenderingController","isClientHookDynamicError","METADATA_BOUNDARY_NAME","VIEWPORT_BOUNDARY_NAME","OUTLET_BOUNDARY_NAME","ROOT_LAYOUT_BOUNDARY_NAME","scheduleOnNextTick","createRuntimeBodyError","createDynamicBodyError","createRuntimeBodyErrorInNavigation","createNavigationBodyErrorInNavigation","createPrefetchBodyErrorInNavigation","createDynamicBodyErrorInNavigation","createDynamicOrRuntimeBodyError","createRuntimeMetadataError","createDynamicMetadataError","createRuntimeViewportError","createNavigationViewportError","createPrefetchViewportError","createDynamicViewportError","createDynamicOrRuntimeViewportError","createDynamicOrRuntimeMetadataError","logBuildDebugHint","createLinkBodyErrorInNavigation","createLinkMetadataError","createLinkViewportError","createNavigationMetadataError","createPrefetchMetadataError","createNonPrerenderableMetadataErrorInStaticRoute","createNonPrerenderableViewportErrorInStaticRoute","createNonPrerenderableBodyErrorInStaticRoute","createRuntimeBodyErrorInStaticRoute","createDynamicBodyErrorInStaticRoute","createRuntimeMetadataErrorInStaticRoute","createDynamicMetadataErrorInStaticRoute","createRuntimeViewportErrorInStaticRoute","createDynamicViewportErrorInStaticRoute","InvariantError","INSTANT_VALIDATION_BOUNDARY_NAME","INSTANT_SLOT_MARKER_PREFIX","INSTANT_SLOT_MARKER_SUFFIX","allRequiredBoundariesRendered","createUnrenderedSegmentError","getReactBrowserBailoutReason","createDynamicTrackingState","isDebugDynamicAccesses","dynamicAccesses","syncDynamicErrorWithStack","syncDynamicErrorWithStackPostMicrotask","createDynamicValidationState","hasSuspenseAboveBody","hasDynamicMetadata","dynamicMetadata","hasDynamicViewport","hasAllowedDynamic","dynamicErrors","getPendingClientSyncDynamicError","clientDynamic","getFirstDynamicReason","trackingState","expression","markCurrentScopeAsDynamic","store","workUnitStore","type","forceDynamic","forceStatic","dynamicShouldError","route","revalidate","err","dynamicUsageDescription","dynamicUsageStack","stack","markRequestStoreAsDynamic","throwToInterruptStaticGeneration","prerenderStore","trackDynamicDataInDynamicRender","requestStore","process","env","__NEXT_DEV_SERVER","phase","usedDynamic","abortOnSynchronousDynamicDataAccess","reason","error","createPrerenderInterruptedError","controller","abort","dynamicTracking","push","Error","undefined","abortOnSynchronousPlatformIOAccess","errorWithStack","queueMicrotask","abortAndThrowOnSynchronousRequestDataAccess","prerenderSignal","signal","aborted","NEXT_PRERENDER_INTERRUPTED","message","digest","isPrerenderInterruptedError","accessedDynamicData","length","consumeDynamicAccess","serverDynamic","formatDynamicAPIAccesses","filter","access","map","split","slice","line","includes","join","createHangingInputAbortSignal","AbortController","cacheSignal","inputReady","then","stagedRendering","finalStage","waitForStage","noop","annotateDynamicAccess","hasSuspenseRegex","bodyAndImplicitTags","hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex","RegExp","hasMetadataRegex","hasViewportRegex","hasOutletRegex","hasInstantValidationBoundaryRegex","slotMarkerRegex","resolveInstantStack","componentStack","dynamicValidation","slotStacks","match","exec","slotIndex","parseInt","slotStack","trackOutletSuspenseAboveBody","test","trackDynamicAccessInStaticRoute","dynamicReason","workStore","isServerPartial","kind","syncDynamicError","addErrorContext","createMetadataErrorInStaticRoute","createViewportErrorInStaticRoute","hasSuspense","createBodyErrorInStaticRoute","createBodyError","trackAllowedDynamicAccess","dynamicHoleKind","DynamicHoleKind","createInstantValidationState","hasAllowedClientDynamicAboveBoundary","validationPreventingErrors","thrownErrorsOutsideBoundary","trackDynamicHoleInNavigation","boundaryState","effectiveCreateInstantStack","createMetadataError","createViewportError","boundaryLocation","suspenseLocation","index","cause","createBodyErrorInNavigation","trackThrownErrorInNavigation","thrownValue","reactBrowserBailout","browserBailoutReason","browserBailoutError","trackDynamicHoleInStaticShell","createInstantStack","ownerStack","NODE_ENV","captureOwnerStack","name","PreludeState","logDisallowedDynamicError","console","throwIfSyncIOUsed","throwIfDisallowedDynamic","prelude","allowEmptyStaticShell","i","throwIfDisallowedDynamicInStaticRoute","isFallbackShell","reasons","getDisallowedReasonsInStaticRoute","getStaticShellDisallowedDynamicReasons","getNavigationDisallowedDynamicReasons","validationSampleTracking","devRenderDidError","missingSampleErrors","rootInstantStack","missingFiles","id","filePaths","requiredIds","renderedIds","has","filePath","normalized","replace","cwd","sort","AggregateError"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 3161, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/instant-validation/boundary-constants.ts"],"sourcesContent":["export const INSTANT_VALIDATION_BOUNDARY_NAME =\n '__next_instant_validation_boundary__'\n\nexport const INSTANT_SLOT_MARKER_PREFIX = '__next_instant_slot_'\nexport const INSTANT_SLOT_MARKER_SUFFIX = '__'\n"],"names":["INSTANT_VALIDATION_BOUNDARY_NAME","INSTANT_SLOT_MARKER_PREFIX","INSTANT_SLOT_MARKER_SUFFIX"],"mappings":";;;;;;;;AAAO,MAAMA,mCACX,uCAAsC;AAEjC,MAAMC,6BAA6B,uBAAsB;AACzD,MAAMC,6BAA6B,KAAI","ignoreList":[0]}}, + {"offset": {"line": 3176, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/instant-validation/boundary-tracking.tsx"],"sourcesContent":["export type ValidationBoundaryTracking = {\n /**\n * Map from boundary id (the SegmentPath where a validation boundary is\n * placed) to the file paths of modules inside that boundary's subtree.\n * When the boundary spans multiple parallel slots, each slot contributes\n * its own first-found module path so all unrendered segments can be\n * reported together.\n */\n requiredIds: Map\n renderedIds: Set\n}\n\nexport function createValidationBoundaryTracking(\n /** Pass if the render is expected to render the same IDs as a previous one. */\n matchPrevious?: ValidationBoundaryTracking\n): ValidationBoundaryTracking {\n return {\n requiredIds: matchPrevious ? new Map(matchPrevious.requiredIds) : new Map(),\n renderedIds: new Set(),\n }\n}\n\nexport function allRequiredBoundariesRendered(\n state: ValidationBoundaryTracking\n): boolean {\n for (const id of state.requiredIds.keys()) {\n if (!state.renderedIds.has(id)) {\n return false\n }\n }\n return true\n}\n"],"names":["createValidationBoundaryTracking","matchPrevious","requiredIds","Map","renderedIds","Set","allRequiredBoundariesRendered","state","id","keys","has"],"mappings":";;;;;;AAYO,SAASA,iCACd,6EAA6E,GAC7EC,aAA0C;IAE1C,OAAO;QACLC,aAAaD,gBAAgB,IAAIE,IAAIF,cAAcC,WAAW,IAAI,IAAIC;QACtEC,aAAa,IAAIC;IACnB;AACF;AAEO,SAASC,8BACdC,KAAiC;IAEjC,KAAK,MAAMC,MAAMD,MAAML,WAAW,CAACO,IAAI,GAAI;QACzC,IAAI,CAACF,MAAMH,WAAW,CAACM,GAAG,CAACF,KAAK;YAC9B,OAAO;QACT;IACF;IACA,OAAO;AACT","ignoreList":[0]}}, + {"offset": {"line": 3200, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/manifests-singleton.ts"],"sourcesContent":["import type { ActionManifest } from '../../build/webpack/plugins/flight-client-entry-plugin'\nimport type { ClientReferenceManifest } from '../../build/webpack/plugins/flight-manifest-plugin'\nimport type { DeepReadonly } from '../../shared/lib/deep-readonly'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport { pathHasPrefix } from '../../shared/lib/router/utils/path-has-prefix'\nimport { removePathPrefix } from '../../shared/lib/router/utils/remove-path-prefix'\nimport { mightBeServerReferenceId } from '../../shared/lib/server-reference-info'\nimport { wellKnownProperties } from '../../shared/lib/utils/reflect-utils'\nimport { workAsyncStorage } from './work-async-storage.external'\nimport {\n workUnitAsyncStorage,\n type WorkUnitStore,\n} from './work-unit-async-storage.external'\n\nexport interface ServerModuleMap {\n readonly [name: string]: {\n readonly id: string | number\n readonly name: string\n readonly chunks: Readonly> // currently not used\n readonly async?: boolean\n }\n}\n\nexport function getActionNotFoundError(actionId: string | null): Error {\n return new Error(\n `Failed to find Server Action${actionId ? ` \"${actionId}\"` : ''}. This request might be from an older or newer deployment.\\nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action`\n )\n}\n\nexport function getInvalidServerReferenceIdError(id: string): Error {\n // `id` is arbitrary client-provided input. Unlike the not-found case, it has\n // not passed the length gate and can reach this error via a malformed server\n // reference in an action payload, so it may be of any length and contain\n // control characters. `JSON.stringify` escapes newlines and quotes so it\n // can't forge log lines, and truncating overly long ids prevents log\n // flooding. Ids at or below the cap are logged in full so that we only add an\n // ellipsis to ids that are meaningfully longer than the truncated length.\n const encoded = JSON.stringify(\n id.length > MAX_LOGGED_SERVER_REFERENCE_ID_LENGTH\n ? id.slice(0, TRUNCATED_SERVER_REFERENCE_ID_LENGTH) + '…'\n : id\n )\n\n return new Error(\n `The Server Reference ID did not match the expected format. Received ${encoded}.\\nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action`\n )\n}\n\n// Ids at or below the cap are logged in full. Longer ids are truncated to the\n// shorter length and marked with an ellipsis, so the cap leaves headroom over\n// the truncated length rather than ellipsizing ids that are barely too long.\nconst MAX_LOGGED_SERVER_REFERENCE_ID_LENGTH = 100\nconst TRUNCATED_SERVER_REFERENCE_ID_LENGTH = 90\n\n// This is a global singleton that is, among other things, also used to\n// encode/decode bound args of server function closures. This can't be using a\n// AsyncLocalStorage as it might happen at the module level.\nconst MANIFESTS_SINGLETON = Symbol.for('next.server.manifests')\n\ninterface RegisteredClientReferenceManifest {\n /**\n * The page the manifest was registered with. Routes are normalized app paths,\n * which is lossy (route groups, parallel slots and the trailing `/page` are\n * stripped), so this is kept alongside for consumers that need to address the\n * manifest on disk again rather than reversing the normalization.\n */\n readonly page: string\n readonly clientReferenceManifest: DeepReadonly\n}\n\ninterface ManifestsSingleton {\n readonly clientReferenceManifestsPerRoute: Map<\n string,\n RegisteredClientReferenceManifest\n >\n readonly proxiedClientReferenceManifest: DeepReadonly\n readonly rscModuleMappingForUseCache: DeepReadonly<\n ClientReferenceManifest['rscModuleMapping']\n >\n serverActionsManifest: DeepReadonly\n serverModuleMap: ServerModuleMap\n}\n\ntype GlobalThisWithManifests = typeof globalThis & {\n [MANIFESTS_SINGLETON]?: ManifestsSingleton\n}\n\ntype ClientReferenceManifestMappingProp =\n | 'clientModules'\n | 'rscModuleMapping'\n | 'edgeRscModuleMapping'\n | 'ssrModuleMapping'\n | 'edgeSSRModuleMapping'\n\nconst globalThisWithManifests = globalThis as GlobalThisWithManifests\n\nfunction isUseCacheStore(workUnitStore: WorkUnitStore | undefined): boolean {\n if (!workUnitStore) {\n return false\n }\n\n switch (workUnitStore.type) {\n case 'cache':\n case 'private-cache':\n return true\n case 'request':\n case 'unstable-cache':\n case 'prerender':\n case 'prerender-client':\n case 'prerender-legacy':\n case 'prerender-runtime':\n case 'validation-client':\n case 'build-time-generator':\n return false\n default:\n return workUnitStore satisfies never\n }\n}\n\nfunction createProxiedClientReferenceManifest(\n clientReferenceManifestsPerRoute: Map<\n string,\n RegisteredClientReferenceManifest\n >\n): Pick<\n ManifestsSingleton,\n 'proxiedClientReferenceManifest' | 'rscModuleMappingForUseCache'\n> {\n const createMappingProxy = (prop: ClientReferenceManifestMappingProp) => {\n return new Proxy(\n {},\n {\n get(_, id: string) {\n const workStore = workAsyncStorage.getStore()\n\n if (workStore) {\n const currentManifest = clientReferenceManifestsPerRoute.get(\n workStore.route\n )?.clientReferenceManifest\n\n if (currentManifest?.[prop][id]) {\n if (\n workStore.durableUseCacheEntries &&\n prop === 'clientModules'\n ) {\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (isUseCacheStore(workUnitStore)) {\n // This creates a mapping so that a given client references with name\n // `app/foo/client.tsx` is serialized as\n // ```\n // { id: `app/foo/client.tsx`, name: `*`, chunks: [\"stub\"], async: false }\n // ```\n // instead of the actual\n // ```\n // { id: 19132, name: `*`, chunks: [\"/_next/static/chunks/...\"], async: true }\n // ```\n //\n // This means that not the unstable client module id is used for the cache entry,\n // but the stable client reference name. The stable client reference name is\n // resolved against the current manifest via rscModuleMappingForUseCache when the\n // entry is read.\n const clientReferenceManifestEntry =\n currentManifest.clientModules[id]\n return {\n // Return `id` instead of `clientReferenceManifestEntry.id` here.\n id,\n name: clientReferenceManifestEntry.name,\n // Set a sentinel value just in case this does ends up being read at some point\n // in the future, then at least we'll get \"Failed to load chunk stub (404)\"\n // instead of \"Failed to load module 1234\".\n chunks: ['stub'],\n async: false,\n }\n }\n }\n return currentManifest[prop][id]\n }\n\n // In development, we also check all other manifests to see if the\n // module exists there. This is to support a scenario where React's\n // I/O tracking (dev-only) creates a connection from one page to\n // another through an emitted async I/O node that references client\n // components from the other page, e.g. in owner props.\n // TODO: Maybe we need to add a `debugBundlerConfig` option to React\n // to avoid this workaround. The current workaround has the\n // disadvantage that one might accidentally or intentionally share\n // client references across pages (e.g. by storing them in a global\n // variable), which would then only be caught in production.\n if (process.env.NODE_ENV !== 'production') {\n for (const [\n route,\n { page, clientReferenceManifest },\n ] of clientReferenceManifestsPerRoute) {\n if (route === workStore.route) {\n continue\n }\n\n const entry = clientReferenceManifest[prop][id]\n\n if (entry !== undefined) {\n if (process.env.__NEXT_DEV_SERVER) {\n // The dev validation worker rebuilds this registry in its\n // own thread, seeded with only the route it validates, so\n // it has to be told which other manifests it needs.\n workStore.additionalClientReferenceManifestPages ??=\n new Set()\n workStore.additionalClientReferenceManifestPages.add(page)\n }\n\n return entry\n }\n }\n }\n } else {\n // If there's no work store defined, we can assume that a client\n // reference manifest is needed during module evaluation, e.g. to\n // create a server function using a higher-order function. This\n // might also use client components which need to be serialized by\n // Flight, and therefore client references need to be resolvable. In\n // that case we search all page manifests to find the module.\n for (const {\n clientReferenceManifest,\n } of clientReferenceManifestsPerRoute.values()) {\n const entry = clientReferenceManifest[prop][id]\n\n if (entry !== undefined) {\n return entry\n }\n }\n }\n\n return undefined\n },\n }\n )\n }\n\n const mappingProxies = new Map<\n ClientReferenceManifestMappingProp,\n ReturnType\n >()\n\n const proxiedClientReferenceManifest = new Proxy(\n {},\n {\n get(_, prop) {\n const workStore = workAsyncStorage.getStore()\n\n switch (prop) {\n case 'moduleLoading':\n case 'entryCSSFiles':\n case 'entryJSFiles': {\n if (!workStore) {\n throw new InvariantError(\n `Cannot access \"${prop}\" without a work store.`\n )\n }\n\n const registeredManifest = clientReferenceManifestsPerRoute.get(\n workStore.route\n )\n\n if (!registeredManifest) {\n throw new InvariantError(\n `The client reference manifest for route \"${workStore.route}\" does not exist.`\n )\n }\n\n return registeredManifest.clientReferenceManifest[prop]\n }\n case 'clientModules':\n case 'rscModuleMapping':\n case 'edgeRscModuleMapping':\n case 'ssrModuleMapping':\n case 'edgeSSRModuleMapping': {\n let proxy = mappingProxies.get(prop)\n\n if (!proxy) {\n proxy = createMappingProxy(prop)\n mappingProxies.set(prop, proxy)\n }\n\n return proxy\n }\n default: {\n throw new InvariantError(\n `This is a proxied client reference manifest. The property \"${String(prop)}\" is not handled.`\n )\n }\n }\n },\n }\n ) as DeepReadonly\n\n // Performs the inverse of the clientModules isUseCacheStore(workUnitStore) special case above:\n //\n // For cache functions, don't do the usual rscModuleMapping lookup by module ID, but instead look\n // up by the stable client reference name. This is because cache entries must not depend on\n // build-local module IDs or chunks. So we need a second layer of indirection here to do client\n // reference name -> client module id -> rsc module mapping lookup.\n //\n // This one is created separately (not inside proxiedClientReferenceManifest.rscModuleMapping) as\n // we don't necessarily are inside a workUnitStore when we need to access this mapping (as opposed\n // to the clientModules mapping, which always has the ALS set).\n const rscModuleMappingForUseCache = new Proxy(\n {},\n {\n get(\n _,\n key: string\n ): ClientReferenceManifest['rscModuleMapping'][string] | undefined {\n const workStore = workAsyncStorage.getStore()\n if (workStore && workStore.durableUseCacheEntries) {\n const currentManifest = clientReferenceManifestsPerRoute.get(\n workStore.route\n )?.clientReferenceManifest\n\n const clientReferenceName = key\n const clientReferenceManifestEntry =\n currentManifest?.clientModules[clientReferenceName]\n if (clientReferenceManifestEntry === undefined) {\n return undefined\n }\n\n const clientModuleId = clientReferenceManifestEntry.id\n return currentManifest?.rscModuleMapping[clientModuleId]\n } else {\n return proxiedClientReferenceManifest.rscModuleMapping[key]\n }\n },\n }\n ) as DeepReadonly\n\n return { proxiedClientReferenceManifest, rscModuleMappingForUseCache }\n}\n\n/**\n * This function creates a Flight-acceptable server module map proxy from our\n * Server Reference Manifest similar to our client module map. This is because\n * our manifest contains a lot of internal Next.js data that are relevant to the\n * runtime, workers, etc. that React doesn't need to know.\n */\nfunction createServerModuleMap(): ServerModuleMap {\n return new Proxy(Object.create(null) as ServerModuleMap, {\n get: (target, id: string | symbol, receiver) => {\n // React's debug serialization can probe the module map like a plain object.\n // These probes are not server reference lookups.\n if (typeof id !== 'string') {\n return Reflect.get(target, id, receiver)\n }\n\n if (wellKnownProperties.has(id)) {\n return Reflect.get(target, id, receiver)\n }\n\n if (!mightBeServerReferenceId(id)) {\n throw getInvalidServerReferenceIdError(id)\n }\n\n const workers =\n getServerActionsManifest()[\n process.env.NEXT_RUNTIME === 'edge' ? 'edge' : 'node'\n ]?.[id]?.workers\n\n if (!workers) {\n throw getActionNotFoundError(id)\n }\n\n const workStore = workAsyncStorage.getStore()\n\n let workerEntry:\n | {\n moduleId: string | number\n async: boolean\n durability?: {\n codeHash: string\n runtimeEnvVarsRead: readonly string[]\n runtimeEnvVarsExistence: readonly string[]\n }\n }\n | undefined\n\n if (workStore) {\n workerEntry = workers[normalizeWorkerPageName(workStore.page)]\n } else {\n // If there's no work store defined, we can assume that a server\n // module map is needed during module evaluation, e.g. to create a\n // server action using a higher-order function. Therefore it should be\n // safe to return any entry from the manifest that matches the action\n // ID. They all refer to the same module ID, which must also exist in\n // the current page bundle. TODO: This is currently not guaranteed in\n // Turbopack, and needs to be fixed.\n workerEntry = Object.values(workers).at(0)\n }\n\n if (!workerEntry) {\n throw getActionNotFoundError(id)\n }\n\n const { moduleId, async, durability } = workerEntry\n\n return {\n id: moduleId,\n name: id,\n chunks: [],\n async,\n durability,\n }\n },\n })\n}\n\n/**\n * The flight entry loader keys actions by bundlePath. bundlePath corresponds\n * with the relative path (including 'app') to the page entrypoint.\n */\nexport function normalizeWorkerPageName(pageName: string) {\n if (pathHasPrefix(pageName, 'app')) {\n return pageName\n }\n\n return 'app' + pageName\n}\n\n/**\n * Converts a bundlePath (relative path to the entrypoint) to a routable page\n * name.\n */\nfunction denormalizeWorkerPageName(bundlePath: string) {\n return normalizeAppPath(removePathPrefix(bundlePath, 'app'))\n}\n\n/**\n * Checks if the requested action has a worker for the current page.\n * If not, it returns the first worker that has a handler for the action.\n */\nexport function selectWorkerForForwarding(\n actionId: string,\n pageName: string\n): string | undefined {\n const serverActionsManifest = getServerActionsManifest()\n const workers =\n serverActionsManifest[\n process.env.NEXT_RUNTIME === 'edge' ? 'edge' : 'node'\n ][actionId]?.workers\n\n // There are no workers to handle this action, nothing to forward to.\n if (!workers) {\n return\n }\n\n // If there is an entry for the current page, we don't need to forward.\n if (workers[normalizeWorkerPageName(pageName)]) {\n return\n }\n\n // Otherwise, grab the first worker that has a handler for this action id.\n return denormalizeWorkerPageName(Object.keys(workers)[0])\n}\n\nexport function setManifestsSingleton({\n page,\n clientReferenceManifest,\n serverActionsManifest: rawServerActionsManifest,\n}: {\n page: string\n clientReferenceManifest: DeepReadonly\n serverActionsManifest: DeepReadonly\n}) {\n const existingSingleton = globalThisWithManifests[MANIFESTS_SINGLETON]\n const route = normalizeAppPath(page)\n\n const serverActionsManifest: DeepReadonly = {\n encryptionKey: rawServerActionsManifest.encryptionKey,\n // Use null-prototypes for the action objects to prevent prototype pollution\n // from affecting action ID lookups.\n node: Object.assign(Object.create(null), rawServerActionsManifest.node),\n edge: Object.assign(Object.create(null), rawServerActionsManifest.edge),\n }\n\n if (existingSingleton) {\n existingSingleton.clientReferenceManifestsPerRoute.set(route, {\n page,\n clientReferenceManifest,\n })\n\n existingSingleton.serverActionsManifest = serverActionsManifest\n } else {\n const clientReferenceManifestsPerRoute = new Map<\n string,\n RegisteredClientReferenceManifest\n >([[route, { page, clientReferenceManifest }]])\n\n const { proxiedClientReferenceManifest, rscModuleMappingForUseCache } =\n createProxiedClientReferenceManifest(clientReferenceManifestsPerRoute)\n\n globalThisWithManifests[MANIFESTS_SINGLETON] = {\n clientReferenceManifestsPerRoute,\n proxiedClientReferenceManifest,\n rscModuleMappingForUseCache,\n serverActionsManifest,\n serverModuleMap: createServerModuleMap(),\n }\n }\n}\n\nfunction getManifestsSingleton(): ManifestsSingleton {\n const manifestSingleton = globalThisWithManifests[MANIFESTS_SINGLETON]\n\n if (!manifestSingleton) {\n throw new InvariantError('The manifests singleton was not initialized.')\n }\n\n return manifestSingleton\n}\n\n/**\n * Returns the usual client_reference_manifest.json.\n *\n * In dev, it also looks up references of other pages (due to overlapping processing on\n * navigations).\n *\n * Inside a use-cache workUnitStore, clientModules instead map to a stable dummy value (see comments\n * above).\n */\nexport function getClientReferenceManifest(): DeepReadonly {\n return getManifestsSingleton().proxiedClientReferenceManifest\n}\n\n/**\n * A mapping of client reference names to the RSC module id. (So a double lookup of clientModules ->\n * rscModuleMapping)\n */\nexport function getRscModuleMappingForUseCache(): DeepReadonly<\n ClientReferenceManifest['rscModuleMapping']\n> {\n return getManifestsSingleton().rscModuleMappingForUseCache\n}\n\nexport function getServerActionsManifest(): DeepReadonly {\n return getManifestsSingleton().serverActionsManifest\n}\n\nexport function getServerModuleMap() {\n return getManifestsSingleton().serverModuleMap\n}\n"],"names":["InvariantError","normalizeAppPath","pathHasPrefix","removePathPrefix","mightBeServerReferenceId","wellKnownProperties","workAsyncStorage","workUnitAsyncStorage","getActionNotFoundError","actionId","Error","getInvalidServerReferenceIdError","id","encoded","JSON","stringify","length","MAX_LOGGED_SERVER_REFERENCE_ID_LENGTH","slice","TRUNCATED_SERVER_REFERENCE_ID_LENGTH","MANIFESTS_SINGLETON","Symbol","for","globalThisWithManifests","globalThis","isUseCacheStore","workUnitStore","type","createProxiedClientReferenceManifest","clientReferenceManifestsPerRoute","createMappingProxy","prop","Proxy","get","_","workStore","getStore","currentManifest","route","clientReferenceManifest","durableUseCacheEntries","clientReferenceManifestEntry","clientModules","name","chunks","async","process","env","NODE_ENV","page","entry","undefined","__NEXT_DEV_SERVER","additionalClientReferenceManifestPages","Set","add","values","mappingProxies","Map","proxiedClientReferenceManifest","registeredManifest","proxy","set","String","rscModuleMappingForUseCache","key","clientReferenceName","clientModuleId","rscModuleMapping","createServerModuleMap","Object","create","target","receiver","getServerActionsManifest","Reflect","has","workers","NEXT_RUNTIME","workerEntry","normalizeWorkerPageName","at","moduleId","durability","pageName","denormalizeWorkerPageName","bundlePath","selectWorkerForForwarding","serverActionsManifest","keys","setManifestsSingleton","rawServerActionsManifest","existingSingleton","encryptionKey","node","assign","edge","serverModuleMap","getManifestsSingleton","manifestSingleton","getClientReferenceManifest","getRscModuleMappingForUseCache","getServerModuleMap"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 3579, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/segment-config/ensure-static.ts"],"sourcesContent":["import type {\n AppSegmentConfig,\n EnsureStatic,\n} from '../../../build/segment-config/app/app-segment-config'\nimport { parseLoaderTree } from '../../../shared/lib/router/utils/parse-loader-tree'\nimport {\n getLayoutOrPageModule,\n type LoaderTree,\n} from '../../lib/app-dir-module'\n\n/**\n * The outcome of resolving a route's `ensureStatic` config.\n * The ordering is intentional -- higher values indicate a\n * more constrained route that forces more request kinds to be static.\n *\n * A constraint also implies all its predecessors:\n * - `Prefetch` implies `Shell`, i.e. if prefetches are static, so are shells.\n * - `Navigation` implies `Prefetch` and `Shell`, i.e. if the whole page is static,\n * then so are its shells and prefetches.\n *\n * Note that this flattens `\"auto\"` and `false` into `None`.\n * This is because rendering code does not need to distinguish them --\n * both indicate that the route follows normal Partial Prefetching semantics\n * and does not force anything to be static.\n * However, it is only correct to collapse them into one *after* resolving the\n * config for the entire route, because they have different interactions with\n * configs from other segments on the same route.\n */\nexport enum EnsureStaticLevel {\n /** The route follows standard Partial Prefetching semantics. */\n None = 0,\n /** The route requires that app shells must be statically prerendered. */\n Shell = 1,\n /** The route requires that app shells and prefetches must be statically prerendered. */\n Prefetch = 2,\n /** The route requires that app shells, prefetches, and the whole page must be statically prerendered. */\n Navigation = 3,\n}\n\nfunction getEnsureStaticLevel(ensureStatic: EnsureStatic) {\n switch (ensureStatic) {\n case 'auto':\n case false: {\n return EnsureStaticLevel.None\n }\n case 'shell': {\n return EnsureStaticLevel.Shell\n }\n case 'prefetch': {\n return EnsureStaticLevel.Prefetch\n }\n case 'navigation': {\n return EnsureStaticLevel.Navigation\n }\n }\n}\n\nexport async function resolveEnsureStaticLevel(\n tree: LoaderTree,\n partialPrefetching: boolean\n): Promise {\n return getEnsureStaticLevel(\n await resolveEnsureStaticConfig(tree, partialPrefetching)\n )\n}\n\nexport async function resolveEnsureStaticConfig(\n tree: LoaderTree,\n partialPrefetching: boolean\n): Promise> {\n let { config, filePath } = await resolveEnsureStaticConfigImpl(tree)\n\n if (!partialPrefetching) {\n // If Partial Prefetching is not enabled for this route, we only support\n // a subset of `ensureStatic` values.\n // (We error in `getAppPageStaticInfo` if `ensureStatic` is used without enabling\n // Cache Components, so we don't have to assert that here)\n switch (config) {\n case 'auto': {\n // Default to the equivalent of Cache Components prefetching behavior.\n config = 'prefetch'\n break\n }\n case false:\n case 'shell': {\n // Not meaningful in Cache Components without Partial Prefetching\n const originalConfig = config\n config = 'prefetch'\n console.warn(\n `${formatEnsureStaticExport(originalConfig)} has no effect unless the route is using Partial Prefetching.` +\n `\\n (from: ${filePath})`\n )\n break\n }\n case 'prefetch':\n // Equivalent to regular Cache Components behavior, so we allow it\n // without warning to avoid noise when doing gradual opt-in\n break\n case 'navigation':\n // Meaningful in Cache Components, even without Partial Prefetching\n break\n default:\n config satisfies never\n }\n }\n\n if (config === false) {\n // `false` and \"auto\" are equivalent once resolved.\n return 'auto'\n } else {\n return config\n }\n}\n\ntype EnsureStaticWithSource = {\n config: EnsureStatic\n filePath: string | null\n}\n\nasync function resolveEnsureStaticConfigImpl(\n tree: LoaderTree\n): Promise {\n const { mod: layoutOrPageMod, filePath } = await getLayoutOrPageModule(tree)\n\n const config = getEnsureStaticConfigForModule(layoutOrPageMod)\n\n const parentResult: EnsureStaticWithSource = {\n config,\n filePath: filePath ?? null,\n }\n\n // Walk the slots if any and validate that they don't have incompatible configs\n // with each other. If compatible, pick the most constrained value from the slots.\n let slotsResult: EnsureStaticWithSource | null = null\n let slotResultKey: string | null = null\n const { parallelRoutes } = parseLoaderTree(tree)\n for (const parallelRouteKey in parallelRoutes) {\n const parallelRoute = parallelRoutes[parallelRouteKey]\n const childResult = await resolveEnsureStaticConfigImpl(parallelRoute)\n if (!slotsResult) {\n slotsResult = childResult\n slotResultKey = parallelRouteKey\n } else {\n // Check if the child is compatible with the current result for the slots.\n switch (compareEnsureStatic(childResult.config, slotsResult.config)) {\n case Comparison.Compatible: {\n // 'auto' is compatible with anything, but if the current result is 'auto' and the new one isn't,\n // we want to use the more specific result.\n if (slotsResult.config === 'auto' && childResult.config !== 'auto') {\n slotsResult = childResult\n slotResultKey = parallelRouteKey\n }\n break\n }\n case Comparison.Incompatible:\n case Comparison.LessConstrained:\n case Comparison.MoreConstrained: {\n throw new Error(\n `Parallel slots cannot have incompatible \\`ensureStatic\\`.` +\n `\\n ${formatParallelSlot(slotResultKey!)}: ` +\n `\\n ${formatEnsureStaticExport(slotsResult.config)}` +\n `\\n (from: ${slotsResult.filePath})` +\n `\\n` +\n `\\n ${formatParallelSlot(parallelRouteKey)}: ` +\n `\\n ${formatEnsureStaticExport(childResult.config)}` +\n `\\n (from: ${childResult.filePath})` +\n `\\n` +\n `\\n Possible fixes:` +\n `\\n - Remove one of the \\`ensureStatic\\` exports` +\n `\\n - Change one of the \\`ensureStatic\\` exports to match the other`\n )\n }\n }\n }\n }\n\n // Child segments can override the config from the parent with a more constrained value,\n // but they cannot have a less constrained value.\n if (!slotsResult) {\n return parentResult\n } else {\n const comparison = compareEnsureStatic(\n slotsResult.config,\n parentResult.config\n )\n switch (comparison) {\n case Comparison.Compatible: {\n // 'auto' is compatible with anything, but if the parent result is 'auto' and the slots one isn't,\n // we want to use the more constrained result.\n if (parentResult.config === 'auto' && slotsResult.config !== 'auto') {\n return slotsResult\n } else {\n return parentResult\n }\n }\n case Comparison.MoreConstrained: {\n return slotsResult\n }\n case Comparison.LessConstrained:\n case Comparison.Incompatible: {\n throw new Error(\n (comparison === Comparison.LessConstrained\n ? `A child segment cannot override a parent segment with a less-constrained \\`ensureStatic\\`.`\n : `A child segment cannot override a parent segment with an incompatible \\`ensureStatic\\`.`) +\n `\\n Parent has: ` +\n `\\n ${formatEnsureStaticExport(parentResult.config)}` +\n `\\n (from: ${parentResult.filePath})` +\n `\\n Child has: ` +\n `\\n ${formatEnsureStaticExport(slotsResult.config)}` +\n `\\n (from: ${slotsResult.filePath})` +\n `\\n` +\n `\\n Possible fixes:` +\n `\\n - Remove one of the \\`ensureStatic\\` exports` +\n `\\n - Change one of the \\`ensureStatic\\` exports to match the other`\n )\n }\n }\n }\n}\n\nfunction formatParallelSlot(slot: string) {\n return slot === 'children' ? slot : `@${slot}`\n}\n\nfunction formatEnsureStaticExport(config: EnsureStatic) {\n return `export const ensureStatic = ${JSON.stringify(config)}`\n}\n\nenum Comparison {\n LessConstrained = 1,\n Compatible = 2,\n MoreConstrained = 3,\n Incompatible = 4,\n}\n\nconst ENSURE_STATIC_ORDER: Exclude[] = [\n 'shell',\n 'prefetch',\n 'navigation',\n]\n\nfunction compareEnsureStatic(\n left: EnsureStatic,\n right: EnsureStatic\n): Comparison {\n // 'auto' is compatible with everything.\n if (left === 'auto' || right === 'auto') {\n return Comparison.Compatible\n }\n\n // `false` is compatible with false.\n if (left === false && right === false) {\n return Comparison.Compatible\n }\n // If only one of the values is `false` (we know it's not both), it's incompatible.\n if (left === false || right === false) {\n return Comparison.Incompatible\n }\n\n const leftSort = ENSURE_STATIC_ORDER.indexOf(left)\n const rightSort = ENSURE_STATIC_ORDER.indexOf(right)\n return leftSort < rightSort\n ? Comparison.LessConstrained\n : leftSort === rightSort\n ? Comparison.Compatible\n : Comparison.MoreConstrained\n}\n\nfunction getEnsureStaticConfigForModule(\n mod: Record | undefined\n): EnsureStatic {\n return (mod ? (mod as AppSegmentConfig).ensureStatic : undefined) ?? 'auto'\n}\n"],"names":["parseLoaderTree","getLayoutOrPageModule","EnsureStaticLevel","getEnsureStaticLevel","ensureStatic","resolveEnsureStaticLevel","tree","partialPrefetching","resolveEnsureStaticConfig","config","filePath","resolveEnsureStaticConfigImpl","originalConfig","console","warn","formatEnsureStaticExport","mod","layoutOrPageMod","getEnsureStaticConfigForModule","parentResult","slotsResult","slotResultKey","parallelRoutes","parallelRouteKey","parallelRoute","childResult","compareEnsureStatic","Error","formatParallelSlot","comparison","slot","JSON","stringify","Comparison","ENSURE_STATIC_ORDER","left","right","leftSort","indexOf","rightSort","undefined"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 3771, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/staged-rendering.ts"],"sourcesContent":["import { InvariantError } from '../../shared/lib/invariant-error'\nimport { createPromiseWithResolvers } from '../../shared/lib/promise-with-resolvers'\n\nexport enum RenderStage {\n Before = 1,\n //\n ShellStatic = 10,\n /** Discrimination-only stage: `prefetch()` in validation renders (static) */\n PrefetchStatic_prefetchApi = 11,\n PrefetchStatic = 12,\n NavigationStatic = 13,\n Static = 14,\n //\n ShellRuntime = 20,\n /** Discrimination-only stage: `prefetch()` in validation renders (runtime) */\n PrefetchRuntime_prefetchApi = 21,\n PrefetchRuntime = 22,\n NavigationRuntime = 23,\n //\n Dynamic = 30,\n Abandoned = 40,\n}\n\nexport type AdvanceableRenderStage = Exclude<\n RenderStage,\n RenderStage.Before | RenderStage.Abandoned\n>\n\nexport const RENDER_STAGE_ADVANCE_ORDER: AdvanceableRenderStage[] = [\n RenderStage.ShellStatic,\n RenderStage.PrefetchStatic_prefetchApi,\n RenderStage.PrefetchStatic,\n RenderStage.NavigationStatic,\n RenderStage.Static,\n //\n RenderStage.ShellRuntime,\n RenderStage.PrefetchRuntime_prefetchApi,\n RenderStage.PrefetchRuntime,\n RenderStage.NavigationRuntime,\n //\n RenderStage.Dynamic,\n]\n\nexport function getNextStage(\n stage: Exclude\n) {\n return RENDER_STAGE_ADVANCE_ORDER[\n RENDER_STAGE_ADVANCE_ORDER.indexOf(stage) + 1\n ]\n}\n\nexport function isAdvanceableRenderStage(\n stage: RenderStage\n): stage is AdvanceableRenderStage {\n return RenderStage.Before < stage && stage <= RenderStage.Dynamic\n}\n\nexport enum SyncIOMode {\n /** Sync IO does not error in any stage. */\n Untracked = 1,\n /** Before `partialPrefetching`: Sync IO errors in static stages, and is allowed otherwise. */\n AllowedInRuntimeOrDynamic = 2,\n /** After `partialPrefetching`: Sync IO errors in all stages other than dynamic. */\n AllowedInDynamic = 3,\n}\n\nexport class StagedRenderingController {\n private abortSignal: AbortSignal | null\n private abandonController: AbortController | null\n private syncIOMode: SyncIOMode\n public readonly finalStage: AdvanceableRenderStage | null\n\n currentStage: RenderStage = RenderStage.Before\n\n syncInterruptReason: Error | null = null\n\n triggers: Record =\n createAdvanceableStageTriggers()\n\n constructor({\n abortSignal,\n abandonController,\n syncIO,\n finalStage,\n }: {\n abortSignal: AbortSignal | null\n abandonController: AbortController | null\n syncIO: SyncIOMode\n finalStage: AdvanceableRenderStage | null\n }) {\n this.abortSignal = abortSignal\n this.abandonController = abandonController\n this.syncIOMode = syncIO\n this.finalStage = finalStage\n\n if (abortSignal) {\n abortSignal.addEventListener(\n 'abort',\n () => {\n // Reject all stage promises that haven't already been resolved.\n // `cancelStageTrigger` is a noop if the trigger already resolved.\n const { reason } = abortSignal\n for (const trigger of Object.values(this.triggers)) {\n cancelStageTrigger(trigger, reason)\n }\n },\n { once: true }\n )\n }\n\n if (abandonController) {\n abandonController.signal.addEventListener(\n 'abort',\n () => {\n this.abandonRender()\n },\n { once: true }\n )\n }\n }\n\n /**\n * Schedules a callback that will execute synchronously when the controller is advanced\n * to `stage` or past it, before any promises for that stage are resolved.\n * If the controller is already past `stage`, the callback is executed immediately.\n * */\n onStage(stage: AdvanceableRenderStage, callback: () => void) {\n addSyncTriggerListener(this.triggers[stage], callback)\n }\n\n shouldTrackSyncInterrupt(): boolean {\n const { syncIOMode, currentStage } = this\n switch (syncIOMode) {\n case SyncIOMode.Untracked: {\n return false\n }\n case SyncIOMode.AllowedInRuntimeOrDynamic: {\n // Legacy: track Sync IO only in static stages.\n // Do not track it before the render, or in runtime/dynamic stages.\n return (\n currentStage > RenderStage.Before &&\n currentStage <= RenderStage.Static\n )\n }\n case SyncIOMode.AllowedInDynamic: {\n // Track sync IO in all cacheable stages.\n // This means all stages except:\n // - before the render\n // - in the dynamic stage\n return (\n currentStage > RenderStage.Before &&\n currentStage < RenderStage.Dynamic\n )\n }\n }\n }\n\n /** Note: only call this if `shouldTrackSyncInterrupt()` returned true */\n syncInterruptCurrentStageWithReason(reason: Error) {\n const { currentStage } = this\n if (\n currentStage === RenderStage.Before ||\n currentStage === RenderStage.Dynamic ||\n currentStage === RenderStage.Abandoned\n ) {\n // Not interruptible. Defensive noop.\n return\n }\n\n // If Sync IO occurs during an abandonable render, we trigger the abandon.\n // The abandon listener will call abandonRender which advances through\n // stages to let caches fill before marking as Abandoned.\n if (this.abandonController) {\n this.abandonController.abort()\n return\n }\n\n if (this.abortSignal) {\n // If this is an abortable render, we capture the interruption reason and stop advancing.\n // We don't release any more promises.\n // The caller is expected to abort the signal.\n this.syncInterruptReason = reason\n this.currentStage = RenderStage.Abandoned\n return\n }\n\n // If we're in a non-abandonable & non-abortable render,\n // we need to advance to the Dynamic stage and capture the interruption reason.\n // (in dev, this will be the restarted render)\n this.syncInterruptReason = reason\n this.advanceStage(RenderStage.Dynamic)\n }\n\n getSyncInterruptReason() {\n return this.syncInterruptReason\n }\n\n getStageEndTime(stage: Exclude) {\n return this.triggers[getNextStage(stage)].triggeredAt ?? Infinity\n }\n\n private abandonRender() {\n // In staged rendering, only the initial render is abandonable.\n // We can abandon the initial render if\n // 1. We notice a cache miss, and need to wait for caches to fill\n // 2. A sync IO error occurs, and the render should be interrupted\n // (this might be a lazy intitialization of a module,\n // so we still want to restart in this case and see if it still occurs)\n // In either case, we'll be doing another render after this one,\n // so we only want to unblock the next stage, not Dynamic, because\n // unblocking the dynamic stage would likely lead to wasted (uncached) IO.\n\n const { currentStage } = this\n\n if (currentStage === RenderStage.Before) {\n throw new InvariantError(\n \"A render that hasn't started yet cannot be abandoned\"\n )\n }\n if (\n currentStage === RenderStage.Dynamic ||\n currentStage === RenderStage.Abandoned\n ) {\n // We shouldn't ever trigger an abandon in these. Defensive noop.\n return\n }\n\n // Resolve all stages after the current one, up to runtime (excluding dynamic)\n const nextStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(currentStage) + 1\n const dynamicStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(\n RenderStage.Dynamic\n )\n for (let i = nextStageIx; i < dynamicStageIx; i++) {\n this.resolveStage(RENDER_STAGE_ADVANCE_ORDER[i])\n }\n\n this.currentStage = RenderStage.Abandoned\n }\n\n advanceStage(targetStage: AdvanceableRenderStage) {\n if (this.finalStage !== null && targetStage > this.finalStage) {\n throw new InvariantError(\n `Attempted to advance to stage ${RenderStage[targetStage]} but the render is limited to ${RenderStage[this.finalStage]}`\n )\n }\n const { currentStage } = this\n\n if (\n currentStage === RenderStage.Dynamic ||\n currentStage === RenderStage.Abandoned\n ) {\n // Terminal stages, nowhere left to advance.\n return\n }\n\n // If we're already at the target stage or beyond, do nothing.\n if (targetStage <= currentStage) {\n return\n }\n\n this.currentStage = targetStage\n\n // Resolve all stages between the current stage and the target.\n const nextStageIx =\n currentStage === RenderStage.Before\n ? 0\n : RENDER_STAGE_ADVANCE_ORDER.indexOf(currentStage) + 1\n const targetStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(targetStage)\n for (let i = nextStageIx; i <= targetStageIx; i++) {\n this.resolveStage(RENDER_STAGE_ADVANCE_ORDER[i])\n }\n }\n\n private resolveStage(stage: AdvanceableRenderStage) {\n fireStageTrigger(this.triggers[stage])\n }\n\n private getStagePromise(stage: AdvanceableRenderStage): Promise {\n return this.triggers[stage].promise\n }\n\n waitForStage(stage: AdvanceableRenderStage) {\n return this.getStagePromise(stage)\n }\n\n delayUntilStage(\n stage: AdvanceableRenderStage,\n displayName: string | undefined,\n resolvedValue: T\n ): Promise {\n const stagePromise = this.getStagePromise(stage)\n\n const promise =\n process.env.NODE_ENV === 'development'\n ? makeDevtoolsIOPromiseFromIOTrigger(\n stagePromise,\n displayName,\n resolvedValue\n )\n : stagePromise.then(() => resolvedValue)\n\n // Analogously to `makeDynamicHangingPromise`, we might reject this promise if the signal is invoked.\n // (e.g. in the case where we don't want want the render to proceed to the dynamic stage and abort it).\n // We shouldn't consider this an unhandled rejection, so we attach a noop catch handler here to suppress this warning.\n if (this.abortSignal) {\n promise.catch(ignoreReject)\n }\n return promise\n }\n}\n\nfunction createAdvanceableStageTriggers(): Record<\n AdvanceableRenderStage,\n StageTrigger\n> {\n const triggers: Partial> = {}\n for (const stage of RENDER_STAGE_ADVANCE_ORDER) {\n triggers[stage] = createStageTrigger()\n }\n return triggers as Record\n}\n\nfunction ignoreReject() {}\n\n// TODO(restart-on-cache-miss): the layering of `delayUntilStage`,\n// `makeDevtoolsIOPromiseFromIOTrigger` and and `makeDevtoolsIOAwarePromise`\n// is confusing, we should clean it up.\nfunction makeDevtoolsIOPromiseFromIOTrigger(\n ioTrigger: Promise,\n displayName: string | undefined,\n resolvedValue: T\n): Promise {\n // If we create a `new Promise` and give it a displayName\n // (with no userspace code above us in the stack)\n // React Devtools will use it as the IO cause when determining \"suspended by\".\n // In particular, it should shadow any inner IO that resolved/rejected the promise\n // (in case of staged rendering, this will be the `setTimeout` that triggers the relevant stage)\n const promise = new Promise((resolve, reject) => {\n ioTrigger.then(resolve.bind(null, resolvedValue), reject)\n })\n if (displayName !== undefined) {\n // @ts-expect-error\n promise.displayName = displayName\n }\n return promise\n}\n\ntype StageTrigger = {\n state: 'pending' | 'triggered' | 'cancelled'\n triggeredAt: number | null\n promise: Promise\n _listeners: Array<() => void>\n _resolvePromise: () => void\n _rejectPromise: (reason: unknown) => void\n}\n\nfunction addSyncTriggerListener(trigger: StageTrigger, listener: () => void) {\n if (trigger.state === 'pending') {\n trigger._listeners.push(listener)\n } else {\n listener()\n }\n}\n\nfunction createStageTrigger(): StageTrigger {\n const { promise, resolve, reject } = createPromiseWithResolvers()\n return {\n state: 'pending',\n triggeredAt: null,\n promise,\n _listeners: [],\n _resolvePromise: resolve,\n _rejectPromise: reject,\n }\n}\n\nfunction fireStageTrigger(trigger: StageTrigger) {\n if (trigger.state !== 'pending') {\n return\n }\n trigger.state = 'triggered'\n trigger.triggeredAt = performance.now() + performance.timeOrigin\n try {\n const { _listeners: listeners } = trigger\n for (let i = 0; i < listeners.length; i++) {\n listeners[i]()\n }\n listeners.length = 0\n } finally {\n trigger._resolvePromise()\n }\n}\n\nfunction cancelStageTrigger(trigger: StageTrigger, reason: unknown) {\n if (trigger.state !== 'pending') {\n return\n }\n trigger.state = 'cancelled'\n // we didn't trigger, so don't save `triggeredAt`.\n\n // We're not gonna fire the listeners, we may as well free them.\n trigger._listeners.length = 0\n\n // Suppress unhandled rejection warnings for promises that no one is awaiting.\n trigger.promise.catch(ignoreReject)\n trigger._rejectPromise(reason)\n}\n"],"names":["InvariantError","createPromiseWithResolvers","RenderStage","RENDER_STAGE_ADVANCE_ORDER","getNextStage","stage","indexOf","isAdvanceableRenderStage","SyncIOMode","StagedRenderingController","constructor","abortSignal","abandonController","syncIO","finalStage","currentStage","syncInterruptReason","triggers","createAdvanceableStageTriggers","syncIOMode","addEventListener","reason","trigger","Object","values","cancelStageTrigger","once","signal","abandonRender","onStage","callback","addSyncTriggerListener","shouldTrackSyncInterrupt","syncInterruptCurrentStageWithReason","abort","advanceStage","getSyncInterruptReason","getStageEndTime","triggeredAt","Infinity","nextStageIx","dynamicStageIx","i","resolveStage","targetStage","targetStageIx","fireStageTrigger","getStagePromise","promise","waitForStage","delayUntilStage","displayName","resolvedValue","stagePromise","process","env","NODE_ENV","makeDevtoolsIOPromiseFromIOTrigger","then","catch","ignoreReject","createStageTrigger","ioTrigger","Promise","resolve","reject","bind","undefined","listener","state","_listeners","push","_resolvePromise","_rejectPromise","performance","now","timeOrigin","listeners","length"],"mappings":";;;;;;;;;;;;;;AAAA,SAASA,cAAc,QAAQ,mCAAkC;AACjE,SAASC,0BAA0B,QAAQ,0CAAyC;;;AAE7E,IAAKC,cAAAA,WAAAA,GAAAA,SAAAA,WAAAA;;IAEV,EAAE;;IAEF,2EAA2E,GAAA,WAAA,CAAA,WAAA,CAAA,6BAAA,GAAA,GAAA,GAAA;;;;IAK3E,EAAE;;IAEF,4EAA4E,GAAA,WAAA,CAAA,WAAA,CAAA,8BAAA,GAAA,GAAA,GAAA;;;IAI5E,EAAE;;;WAfQA;MAkBX;AAOM,MAAMC,6BAAuD;;;;;;;;;;;CAanE,CAAA;AAEM,SAASC,aACdC,KAA2D;IAE3D,OAAOF,0BAA0B,CAC/BA,2BAA2BG,OAAO,CAACD,SAAS,EAC7C;AACH;AAEO,SAASE,yBACdF,KAAkB;IAElB,OAAOH,IAAqBG,SAASA,SAAAA;AACvC;AAEO,IAAKG,aAAAA,WAAAA,GAAAA,SAAAA,UAAAA;IACV,yCAAyC,GAAA,UAAA,CAAA,UAAA,CAAA,YAAA,GAAA,EAAA,GAAA;IAEzC,4FAA4F,GAAA,UAAA,CAAA,UAAA,CAAA,4BAAA,GAAA,EAAA,GAAA;IAE5F,iFAAiF,GAAA,UAAA,CAAA,UAAA,CAAA,mBAAA,GAAA,EAAA,GAAA;WALvEA;MAOX;AAEM,MAAMC;IAaXC,YAAY,EACVC,WAAW,EACXC,iBAAiB,EACjBC,MAAM,EACNC,UAAU,EAMX,CAAE;aAjBHC,YAAAA,GAAAA;aAEAC,mBAAAA,GAAoC;aAEpCC,QAAAA,GACEC;QAaA,IAAI,CAACP,WAAW,GAAGA;QACnB,IAAI,CAACC,iBAAiB,GAAGA;QACzB,IAAI,CAACO,UAAU,GAAGN;QAClB,IAAI,CAACC,UAAU,GAAGA;QAElB,IAAIH,aAAa;YACfA,YAAYS,gBAAgB,CAC1B,SACA;gBACE,gEAAgE;gBAChE,kEAAkE;gBAClE,MAAM,EAAEC,MAAM,EAAE,GAAGV;gBACnB,KAAK,MAAMW,WAAWC,OAAOC,MAAM,CAAC,IAAI,CAACP,QAAQ,EAAG;oBAClDQ,mBAAmBH,SAASD;gBAC9B;YACF,GACA;gBAAEK,MAAM;YAAK;QAEjB;QAEA,IAAId,mBAAmB;YACrBA,kBAAkBe,MAAM,CAACP,gBAAgB,CACvC,SACA;gBACE,IAAI,CAACQ,aAAa;YACpB,GACA;gBAAEF,MAAM;YAAK;QAEjB;IACF;IAEA;;;;KAIG,GACHG,QAAQxB,KAA6B,EAAEyB,QAAoB,EAAE;QAC3DC,uBAAuB,IAAI,CAACd,QAAQ,CAACZ,MAAM,EAAEyB;IAC/C;IAEAE,2BAAoC;QAClC,MAAM,EAAEb,UAAU,EAAEJ,YAAY,EAAE,GAAG,IAAI;QACzC,OAAQI;YACN,KAAA;gBAA2B;oBACzB,OAAO;gBACT;YACA,KAAA;gBAA2C;oBACzC,+CAA+C;oBAC/C,mEAAmE;oBACnE,OACEJ,eAAAA,KACAA,gBAAAA;gBAEJ;YACA,KAAA;gBAAkC;oBAChC,yCAAyC;oBACzC,gCAAgC;oBAChC,sBAAsB;oBACtB,yBAAyB;oBACzB,OACEA,eAAAA,KACAA,eAAAA;gBAEJ;QACF;IACF;IAEA,uEAAuE,GACvEkB,oCAAoCZ,MAAa,EAAE;QACjD,MAAM,EAAEN,YAAY,EAAE,GAAG,IAAI;QAC7B,IACEA,iBAAAA,KACAA,iBAAAA,MACAA,iBAAAA,IACA;YACA,qCAAqC;YACrC;QACF;QAEA,0EAA0E;QAC1E,sEAAsE;QACtE,yDAAyD;QACzD,IAAI,IAAI,CAACH,iBAAiB,EAAE;YAC1B,IAAI,CAACA,iBAAiB,CAACsB,KAAK;YAC5B;QACF;QAEA,IAAI,IAAI,CAACvB,WAAW,EAAE;YACpB,yFAAyF;YACzF,sCAAsC;YACtC,8CAA8C;YAC9C,IAAI,CAACK,mBAAmB,GAAGK;YAC3B,IAAI,CAACN,YAAY,GAAA;YACjB;QACF;QAEA,wDAAwD;QACxD,+EAA+E;QAC/E,8CAA8C;QAC9C,IAAI,CAACC,mBAAmB,GAAGK;QAC3B,IAAI,CAACc,YAAY,CAAA;IACnB;IAEAC,yBAAyB;QACvB,OAAO,IAAI,CAACpB,mBAAmB;IACjC;IAEAqB,gBAAgBhC,KAA2D,EAAE;QAC3E,OAAO,IAAI,CAACY,QAAQ,CAACb,aAAaC,OAAO,CAACiC,WAAW,IAAIC;IAC3D;IAEQX,gBAAgB;QACtB,+DAA+D;QAC/D,uCAAuC;QACvC,mEAAmE;QACnE,oEAAoE;QACpE,0DAA0D;QAC1D,6EAA6E;QAC7E,gEAAgE;QAChE,kEAAkE;QAClE,0EAA0E;QAE1E,MAAM,EAAEb,YAAY,EAAE,GAAG,IAAI;QAE7B,IAAIA,iBAAAA,GAAqC;YACvC,MAAM,IAAIf,8LAAAA,CACR;QAEJ;QACA,IACEe,iBAAAA,MACAA,iBAAAA,IACA;YACA,iEAAiE;YACjE;QACF;QAEA,8EAA8E;QAC9E,MAAMyB,cAAcrC,2BAA2BG,OAAO,CAACS,gBAAgB;QACvE,MAAM0B,iBAAiBtC,2BAA2BG,OAAO,CAAA;QAGzD,IAAK,IAAIoC,IAAIF,aAAaE,IAAID,gBAAgBC,IAAK;YACjD,IAAI,CAACC,YAAY,CAACxC,0BAA0B,CAACuC,EAAE;QACjD;QAEA,IAAI,CAAC3B,YAAY,GAAA;IACnB;IAEAoB,aAAaS,WAAmC,EAAE;QAChD,IAAI,IAAI,CAAC9B,UAAU,KAAK,QAAQ8B,cAAc,IAAI,CAAC9B,UAAU,EAAE;YAC7D,MAAM,IAAId,8LAAAA,CACR,CAAC,8BAA8B,EAAEE,WAAW,CAAC0C,YAAY,CAAC,8BAA8B,EAAE1C,WAAW,CAAC,IAAI,CAACY,UAAU,CAAC,EAAE;QAE5H;QACA,MAAM,EAAEC,YAAY,EAAE,GAAG,IAAI;QAE7B,IACEA,iBAAAA,MACAA,iBAAAA,IACA;YACA,4CAA4C;YAC5C;QACF;QAEA,8DAA8D;QAC9D,IAAI6B,eAAe7B,cAAc;YAC/B;QACF;QAEA,IAAI,CAACA,YAAY,GAAG6B;QAEpB,+DAA+D;QAC/D,MAAMJ,cACJzB,iBAAAA,IACI,IACAZ,2BAA2BG,OAAO,CAACS,gBAAgB;QACzD,MAAM8B,gBAAgB1C,2BAA2BG,OAAO,CAACsC;QACzD,IAAK,IAAIF,IAAIF,aAAaE,KAAKG,eAAeH,IAAK;YACjD,IAAI,CAACC,YAAY,CAACxC,0BAA0B,CAACuC,EAAE;QACjD;IACF;IAEQC,aAAatC,KAA6B,EAAE;QAClDyC,iBAAiB,IAAI,CAAC7B,QAAQ,CAACZ,MAAM;IACvC;IAEQ0C,gBAAgB1C,KAA6B,EAAiB;QACpE,OAAO,IAAI,CAACY,QAAQ,CAACZ,MAAM,CAAC2C,OAAO;IACrC;IAEAC,aAAa5C,KAA6B,EAAE;QAC1C,OAAO,IAAI,CAAC0C,eAAe,CAAC1C;IAC9B;IAEA6C,gBACE7C,KAA6B,EAC7B8C,WAA+B,EAC/BC,aAAgB,EACJ;QACZ,MAAMC,eAAe,IAAI,CAACN,eAAe,CAAC1C;QAE1C,MAAM2C,UACJM,QAAQC,GAAG,CAACC,QAAQ,KAAK,cACrBC,mCACEJ,cACAF,aACAC,iBAEFC,aAAaK,IAAI,CAAC,IAAMN;QAE9B,qGAAqG;QACrG,uGAAuG;QACvG,sHAAsH;QACtH,IAAI,IAAI,CAACzC,WAAW,EAAE;YACpBqC,QAAQW,KAAK,CAACC;QAChB;QACA,OAAOZ;IACT;AACF;AAEA,SAAS9B;IAIP,MAAMD,WAAkE,CAAC;IACzE,KAAK,MAAMZ,SAASF,2BAA4B;QAC9Cc,QAAQ,CAACZ,MAAM,GAAGwD;IACpB;IACA,OAAO5C;AACT;AAEA,SAAS2C,gBAAgB;AAEzB,kEAAkE;AAClE,4EAA4E;AAC5E,uCAAuC;AACvC,SAASH,mCACPK,SAAuB,EACvBX,WAA+B,EAC/BC,aAAgB;IAEhB,yDAAyD;IACzD,iDAAiD;IACjD,8EAA8E;IAC9E,kFAAkF;IAClF,gGAAgG;IAChG,MAAMJ,UAAU,IAAIe,QAAW,CAACC,SAASC;QACvCH,UAAUJ,IAAI,CAACM,QAAQE,IAAI,CAAC,MAAMd,gBAAgBa;IACpD;IACA,IAAId,gBAAgBgB,WAAW;QAC7B,mBAAmB;QACnBnB,QAAQG,WAAW,GAAGA;IACxB;IACA,OAAOH;AACT;AAWA,SAASjB,uBAAuBT,OAAqB,EAAE8C,QAAoB;IACzE,IAAI9C,QAAQ+C,KAAK,KAAK,WAAW;QAC/B/C,QAAQgD,UAAU,CAACC,IAAI,CAACH;IAC1B,OAAO;QACLA;IACF;AACF;AAEA,SAASP;IACP,MAAM,EAAEb,OAAO,EAAEgB,OAAO,EAAEC,MAAM,EAAE,OAAGhE,oNAAAA;IACrC,OAAO;QACLoE,OAAO;QACP/B,aAAa;QACbU;QACAsB,YAAY,EAAE;QACdE,iBAAiBR;QACjBS,gBAAgBR;IAClB;AACF;AAEA,SAASnB,iBAAiBxB,OAAqB;IAC7C,IAAIA,QAAQ+C,KAAK,KAAK,WAAW;QAC/B;IACF;IACA/C,QAAQ+C,KAAK,GAAG;IAChB/C,QAAQgB,WAAW,GAAGoC,YAAYC,GAAG,KAAKD,YAAYE,UAAU;IAChE,IAAI;QACF,MAAM,EAAEN,YAAYO,SAAS,EAAE,GAAGvD;QAClC,IAAK,IAAIoB,IAAI,GAAGA,IAAImC,UAAUC,MAAM,EAAEpC,IAAK;YACzCmC,SAAS,CAACnC,EAAE;QACd;QACAmC,UAAUC,MAAM,GAAG;IACrB,SAAU;QACRxD,QAAQkD,eAAe;IACzB;AACF;AAEA,SAAS/C,mBAAmBH,OAAqB,EAAED,MAAe;IAChE,IAAIC,QAAQ+C,KAAK,KAAK,WAAW;QAC/B;IACF;IACA/C,QAAQ+C,KAAK,GAAG;IAChB,kDAAkD;IAElD,gEAAgE;IAChE/C,QAAQgD,UAAU,CAACQ,MAAM,GAAG;IAE5B,8EAA8E;IAC9ExD,QAAQ0B,OAAO,CAACW,KAAK,CAACC;IACtBtC,QAAQmD,cAAc,CAACpD;AACzB","ignoreList":[0]}}, + {"offset": {"line": 4067, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/base-http/helpers.ts"],"sourcesContent":["import type { BaseNextRequest, BaseNextResponse } from './'\nimport type { NodeNextRequest, NodeNextResponse } from './node'\nimport type { WebNextRequest, WebNextResponse } from './web'\n\n/**\n * This file provides some helpers that should be used in conjunction with\n * explicit environment checks. When combined with the environment checks, it\n * will ensure that the correct typings are used as well as enable code\n * elimination.\n */\n\n/**\n * Type guard to determine if a request is a WebNextRequest. This does not\n * actually check the type of the request, but rather the runtime environment.\n * It's expected that when the runtime environment is the edge runtime, that any\n * base request is a WebNextRequest.\n */\nexport const isWebNextRequest = (req: BaseNextRequest): req is WebNextRequest =>\n process.env.NEXT_RUNTIME === 'edge'\n\n/**\n * Type guard to determine if a response is a WebNextResponse. This does not\n * actually check the type of the response, but rather the runtime environment.\n * It's expected that when the runtime environment is the edge runtime, that any\n * base response is a WebNextResponse.\n */\nexport const isWebNextResponse = (\n res: BaseNextResponse\n): res is WebNextResponse => process.env.NEXT_RUNTIME === 'edge'\n\n/**\n * Type guard to determine if a request is a NodeNextRequest. This does not\n * actually check the type of the request, but rather the runtime environment.\n * It's expected that when the runtime environment is the node runtime, that any\n * base request is a NodeNextRequest.\n */\nexport const isNodeNextRequest = (\n req: BaseNextRequest\n): req is NodeNextRequest => process.env.NEXT_RUNTIME !== 'edge'\n\n/**\n * Type guard to determine if a response is a NodeNextResponse. This does not\n * actually check the type of the response, but rather the runtime environment.\n * It's expected that when the runtime environment is the node runtime, that any\n * base response is a NodeNextResponse.\n */\nexport const isNodeNextResponse = (\n res: BaseNextResponse\n): res is NodeNextResponse => process.env.NEXT_RUNTIME !== 'edge'\n"],"names":["isWebNextRequest","req","process","env","NEXT_RUNTIME","isWebNextResponse","res","isNodeNextRequest","isNodeNextResponse"],"mappings":"AAIA;;;;;CAKC,GAED;;;;;CAKC,GACD;;;;;;;;;;AAAO,MAAMA,mBAAmB,CAACC,MAC/BC,QAAQC,GAAG,CAACC,YAAY,uBAAK,OAAM;AAQ9B,MAAMC,oBAAoB,CAC/BC,MAC2BJ,QAAQC,GAAG,CAACC,YAAY,uBAAK,OAAM;AAQzD,MAAMG,oBAAoB,CAC/BN,MAC2BC,QAAQC,GAAG,CAACC,YAAY,uBAAK,OAAM;AAQzD,MAAMI,qBAAqB,CAChCF,MAC4BJ,QAAQC,GAAG,CAACC,YAAY,uBAAK,OAAM","ignoreList":[0]}}, + {"offset": {"line": 4095, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/base-http/index.ts"],"sourcesContent":["import type { IncomingHttpHeaders, OutgoingHttpHeaders } from 'http'\nimport type { I18NConfig } from '../config-shared'\n\nimport { RedirectStatusCode } from '../../client/components/redirect-status-code'\nimport type { NextApiRequestCookies } from '../api-utils'\nimport { getCookieParser } from '../api-utils/get-cookie-parser'\n\nexport interface BaseNextRequestConfig {\n basePath: string | undefined\n i18n?: I18NConfig\n trailingSlash?: boolean | undefined\n}\n\nexport type FetchMetric = {\n url: string\n idx: number\n end: number\n start: number\n method: string\n status: number\n cacheReason: string\n cacheStatus: 'hit' | 'miss' | 'skip' | 'hmr'\n cacheWarning?: string\n}\n\nexport type FetchMetrics = Array\n\nexport abstract class BaseNextRequest {\n protected _cookies: NextApiRequestCookies | undefined\n public abstract headers: IncomingHttpHeaders\n public abstract fetchMetrics: FetchMetric[] | undefined\n\n constructor(\n public method: string,\n public url: string,\n public body: Body\n ) {}\n\n // Utils implemented using the abstract methods above\n\n public get cookies() {\n if (this._cookies) return this._cookies\n return (this._cookies = getCookieParser(this.headers)())\n }\n}\n\nexport abstract class BaseNextResponse {\n abstract statusCode: number | undefined\n abstract statusMessage: string | undefined\n abstract get sent(): boolean\n\n constructor(public destination: Destination) {}\n\n /**\n * Sets a value for the header overwriting existing values\n */\n abstract setHeader(name: string, value: string | string[]): this\n\n /**\n * Removes a header\n */\n abstract removeHeader(name: string): this\n\n /**\n * Appends value for the given header name\n */\n abstract appendHeader(name: string, value: string): this\n\n /**\n * Get all values for a header as an array or undefined if no value is present\n */\n abstract getHeaderValues(name: string): string[] | undefined\n\n abstract hasHeader(name: string): boolean\n\n /**\n * Get values for a header concatenated using `,` or undefined if no value is present\n */\n abstract getHeader(name: string): string | undefined\n\n abstract getHeaders(): OutgoingHttpHeaders\n\n abstract body(value: string): this\n\n abstract send(): void\n\n abstract onClose(callback: () => void): void\n\n // Utils implemented using the abstract methods above\n\n public redirect(destination: string, statusCode: number) {\n this.setHeader('Location', destination)\n this.statusCode = statusCode\n\n // Since IE11 doesn't support the 308 header add backwards\n // compatibility using refresh header\n if (statusCode === RedirectStatusCode.PermanentRedirect) {\n this.setHeader('Refresh', `0;url=${destination}`)\n }\n\n return this\n }\n}\n"],"names":["RedirectStatusCode","getCookieParser","BaseNextRequest","constructor","method","url","body","cookies","_cookies","headers","BaseNextResponse","destination","redirect","statusCode","setHeader","PermanentRedirect"],"mappings":";;;;;;AAGA,SAASA,kBAAkB,QAAQ,+CAA8C;AAEjF,SAASC,eAAe,QAAQ,iCAAgC;;;AAsBzD,MAAeC;IAKpBC,YACSC,MAAc,EACdC,GAAW,EACXC,IAAU,CACjB;aAHOF,MAAAA,GAAAA;aACAC,GAAAA,GAAAA;aACAC,IAAAA,GAAAA;IACN;IAEH,qDAAqD;IAErD,IAAWC,UAAU;QACnB,IAAI,IAAI,CAACC,QAAQ,EAAE,OAAO,IAAI,CAACA,QAAQ;QACvC,OAAQ,IAAI,CAACA,QAAQ,OAAGP,6MAAAA,EAAgB,IAAI,CAACQ,OAAO;IACtD;AACF;AAEO,MAAeC;IAKpBP,YAAmBQ,WAAwB,CAAE;aAA1BA,WAAAA,GAAAA;IAA2B;IAqC9C,qDAAqD;IAE9CC,SAASD,WAAmB,EAAEE,UAAkB,EAAE;QACvD,IAAI,CAACC,SAAS,CAAC,YAAYH;QAC3B,IAAI,CAACE,UAAU,GAAGA;QAElB,0DAA0D;QAC1D,qCAAqC;QACrC,IAAIA,eAAeb,iNAAAA,CAAmBe,iBAAiB,EAAE;YACvD,IAAI,CAACD,SAAS,CAAC,WAAW,CAAC,MAAM,EAAEH,aAAa;QAClD;QAEA,OAAO,IAAI;IACb;AACF","ignoreList":[0]}}, + {"offset": {"line": 4137, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/base-http/node.ts"],"sourcesContent":["import type { ServerResponse, IncomingMessage } from 'http'\nimport type { Writable, Readable } from 'stream'\n\nimport { SYMBOL_CLEARED_COOKIES } from '../api-utils'\nimport type { NextApiRequestCookies } from '../api-utils'\n\nimport { NEXT_REQUEST_META } from '../request-meta'\nimport type { RequestMeta } from '../request-meta'\n\nimport { BaseNextRequest, BaseNextResponse, type FetchMetric } from './index'\nimport type { OutgoingHttpHeaders } from 'node:http'\n\ntype Req = IncomingMessage & {\n [NEXT_REQUEST_META]?: RequestMeta\n cookies?: NextApiRequestCookies\n fetchMetrics?: FetchMetric[]\n}\n\nexport class NodeNextRequest extends BaseNextRequest {\n public headers = this._req.headers\n public fetchMetrics: FetchMetric[] | undefined = this._req?.fetchMetrics;\n\n [NEXT_REQUEST_META]: RequestMeta = this._req[NEXT_REQUEST_META] || {}\n\n constructor(private _req: Req) {\n super(_req.method!.toUpperCase(), _req.url!, _req)\n }\n\n get originalRequest() {\n // Need to mimic these changes to the original req object for places where we use it:\n // render.tsx, api/ssg requests\n this._req[NEXT_REQUEST_META] = this[NEXT_REQUEST_META]\n this._req.url = this.url\n this._req.cookies = this.cookies\n return this._req\n }\n\n set originalRequest(value: Req) {\n this._req = value\n }\n\n private streaming = false\n\n /**\n * Returns the request body as a Web Readable Stream. The body here can only\n * be read once as the body will start flowing as soon as the data handler\n * is attached.\n *\n * @internal\n */\n public stream() {\n if (this.streaming) {\n throw new Error(\n 'Invariant: NodeNextRequest.stream() can only be called once'\n )\n }\n this.streaming = true\n\n return new ReadableStream({\n start: (controller) => {\n this._req.on('data', (chunk) => {\n controller.enqueue(new Uint8Array(chunk))\n })\n this._req.on('end', () => {\n controller.close()\n })\n this._req.on('error', (err) => {\n controller.error(err)\n })\n },\n })\n }\n}\n\nexport class NodeNextResponse extends BaseNextResponse {\n private textBody: string | undefined = undefined\n\n public [SYMBOL_CLEARED_COOKIES]?: boolean\n\n get originalResponse() {\n if (SYMBOL_CLEARED_COOKIES in this) {\n this._res[SYMBOL_CLEARED_COOKIES] = this[SYMBOL_CLEARED_COOKIES]\n }\n\n return this._res\n }\n\n constructor(\n private _res: ServerResponse & { [SYMBOL_CLEARED_COOKIES]?: boolean }\n ) {\n super(_res)\n }\n\n get sent() {\n return this._res.finished || this._res.headersSent\n }\n\n get statusCode() {\n return this._res.statusCode\n }\n\n set statusCode(value: number) {\n this._res.statusCode = value\n }\n\n get statusMessage() {\n return this._res.statusMessage\n }\n\n set statusMessage(value: string) {\n this._res.statusMessage = value\n }\n\n setHeader(name: string, value: string | string[]): this {\n this._res.setHeader(name, value)\n return this\n }\n\n removeHeader(name: string): this {\n this._res.removeHeader(name)\n return this\n }\n\n getHeaderValues(name: string): string[] | undefined {\n const values = this._res.getHeader(name)\n\n if (values === undefined) return undefined\n\n return (Array.isArray(values) ? values : [values]).map((value) =>\n value.toString()\n )\n }\n\n hasHeader(name: string): boolean {\n return this._res.hasHeader(name)\n }\n\n getHeader(name: string): string | undefined {\n const values = this.getHeaderValues(name)\n return Array.isArray(values) ? values.join(',') : undefined\n }\n\n getHeaders(): OutgoingHttpHeaders {\n return this._res.getHeaders()\n }\n\n appendHeader(name: string, value: string): this {\n const currentValues = this.getHeaderValues(name) ?? []\n\n if (!currentValues.includes(value)) {\n this._res.setHeader(name, [...currentValues, value])\n }\n\n return this\n }\n\n body(value: string) {\n this.textBody = value\n return this\n }\n\n send() {\n this._res.end(this.textBody)\n }\n\n public onClose(callback: () => void) {\n this.originalResponse.on('close', callback)\n }\n}\n"],"names":["SYMBOL_CLEARED_COOKIES","NEXT_REQUEST_META","BaseNextRequest","BaseNextResponse","NodeNextRequest","constructor","_req","method","toUpperCase","url","headers","fetchMetrics","streaming","originalRequest","cookies","value","stream","Error","ReadableStream","start","controller","on","chunk","enqueue","Uint8Array","close","err","error","NodeNextResponse","originalResponse","_res","textBody","undefined","sent","finished","headersSent","statusCode","statusMessage","setHeader","name","removeHeader","getHeaderValues","values","getHeader","Array","isArray","map","toString","hasHeader","join","getHeaders","appendHeader","currentValues","includes","body","send","end","onClose","callback"],"mappings":";;;;;;AAGA,SAASA,sBAAsB,QAAQ,eAAc;AAGrD,SAASC,iBAAiB,QAAQ,kBAAiB;AAGnD,SAASC,eAAe,EAAEC,gBAAgB,QAA0B,UAAS;;;;;AAStE,MAAMC,wBAAwBF,2LAAAA;uBAIlCD,qBAAAA,uLAAAA,CAAAA;IAEDI,YAAoBC,IAAS,CAAE;YAJkB;QAK/C,KAAK,CAACA,KAAKC,MAAM,CAAEC,WAAW,IAAIF,KAAKG,GAAG,EAAGH,OAAAA,IAAAA,CAD3BA,IAAAA,GAAAA,MAAAA,IAAAA,CALbI,OAAAA,GAAU,IAAI,CAACJ,IAAI,CAACI,OAAO,EAAA,IAAA,CAC3BC,YAAAA,GAAAA,CAA0C,aAAA,IAAI,CAACL,IAAI,KAAA,OAAA,KAAA,IAAT,WAAWK,YAAY,EAAA,IAExE,CAACV,mBAAkB,GAAgB,IAAI,CAACK,IAAI,CAACL,uLAAAA,CAAkB,IAAI,CAAC,GAAA,IAAA,CAmB5DW,SAAAA,GAAY;IAfpB;IAEA,IAAIC,kBAAkB;QACpB,qFAAqF;QACrF,+BAA+B;QAC/B,IAAI,CAACP,IAAI,CAACL,uLAAAA,CAAkB,GAAG,IAAI,CAACA,uLAAAA,CAAkB;QACtD,IAAI,CAACK,IAAI,CAACG,GAAG,GAAG,IAAI,CAACA,GAAG;QACxB,IAAI,CAACH,IAAI,CAACQ,OAAO,GAAG,IAAI,CAACA,OAAO;QAChC,OAAO,IAAI,CAACR,IAAI;IAClB;IAEA,IAAIO,gBAAgBE,KAAU,EAAE;QAC9B,IAAI,CAACT,IAAI,GAAGS;IACd;IAIA;;;;;;GAMC,GACMC,SAAS;QACd,IAAI,IAAI,CAACJ,SAAS,EAAE;YAClB,MAAM,IAAIK,MACR;QAEJ;QACA,IAAI,CAACL,SAAS,GAAG;QAEjB,OAAO,IAAIM,eAAe;YACxBC,OAAO,CAACC;gBACN,IAAI,CAACd,IAAI,CAACe,EAAE,CAAC,QAAQ,CAACC;oBACpBF,WAAWG,OAAO,CAAC,IAAIC,WAAWF;gBACpC;gBACA,IAAI,CAAChB,IAAI,CAACe,EAAE,CAAC,OAAO;oBAClBD,WAAWK,KAAK;gBAClB;gBACA,IAAI,CAACnB,IAAI,CAACe,EAAE,CAAC,SAAS,CAACK;oBACrBN,WAAWO,KAAK,CAACD;gBACnB;YACF;QACF;IACF;AACF;AAEO,MAAME,yBAAyBzB,4LAAAA;IAKpC,IAAI0B,mBAAmB;QACrB,IAAI7B,kMAAAA,IAA0B,IAAI,EAAE;YAClC,IAAI,CAAC8B,IAAI,CAAC9B,kMAAAA,CAAuB,GAAG,IAAI,CAACA,kMAAAA,CAAuB;QAClE;QAEA,OAAO,IAAI,CAAC8B,IAAI;IAClB;IAEAzB,YACUyB,IAA6D,CACrE;QACA,KAAK,CAACA,OAAAA,IAAAA,CAFEA,IAAAA,GAAAA,MAAAA,IAAAA,CAbFC,QAAAA,GAA+BC;IAgBvC;IAEA,IAAIC,OAAO;QACT,OAAO,IAAI,CAACH,IAAI,CAACI,QAAQ,IAAI,IAAI,CAACJ,IAAI,CAACK,WAAW;IACpD;IAEA,IAAIC,aAAa;QACf,OAAO,IAAI,CAACN,IAAI,CAACM,UAAU;IAC7B;IAEA,IAAIA,WAAWrB,KAAa,EAAE;QAC5B,IAAI,CAACe,IAAI,CAACM,UAAU,GAAGrB;IACzB;IAEA,IAAIsB,gBAAgB;QAClB,OAAO,IAAI,CAACP,IAAI,CAACO,aAAa;IAChC;IAEA,IAAIA,cAActB,KAAa,EAAE;QAC/B,IAAI,CAACe,IAAI,CAACO,aAAa,GAAGtB;IAC5B;IAEAuB,UAAUC,IAAY,EAAExB,KAAwB,EAAQ;QACtD,IAAI,CAACe,IAAI,CAACQ,SAAS,CAACC,MAAMxB;QAC1B,OAAO,IAAI;IACb;IAEAyB,aAAaD,IAAY,EAAQ;QAC/B,IAAI,CAACT,IAAI,CAACU,YAAY,CAACD;QACvB,OAAO,IAAI;IACb;IAEAE,gBAAgBF,IAAY,EAAwB;QAClD,MAAMG,SAAS,IAAI,CAACZ,IAAI,CAACa,SAAS,CAACJ;QAEnC,IAAIG,WAAWV,WAAW,OAAOA;QAEjC,OAAQY,CAAAA,MAAMC,OAAO,CAACH,UAAUA,SAAS;YAACA;SAAM,EAAGI,GAAG,CAAC,CAAC/B,QACtDA,MAAMgC,QAAQ;IAElB;IAEAC,UAAUT,IAAY,EAAW;QAC/B,OAAO,IAAI,CAACT,IAAI,CAACkB,SAAS,CAACT;IAC7B;IAEAI,UAAUJ,IAAY,EAAsB;QAC1C,MAAMG,SAAS,IAAI,CAACD,eAAe,CAACF;QACpC,OAAOK,MAAMC,OAAO,CAACH,UAAUA,OAAOO,IAAI,CAAC,OAAOjB;IACpD;IAEAkB,aAAkC;QAChC,OAAO,IAAI,CAACpB,IAAI,CAACoB,UAAU;IAC7B;IAEAC,aAAaZ,IAAY,EAAExB,KAAa,EAAQ;QAC9C,MAAMqC,gBAAgB,IAAI,CAACX,eAAe,CAACF,SAAS,EAAE;QAEtD,IAAI,CAACa,cAAcC,QAAQ,CAACtC,QAAQ;YAClC,IAAI,CAACe,IAAI,CAACQ,SAAS,CAACC,MAAM;mBAAIa;gBAAerC;aAAM;QACrD;QAEA,OAAO,IAAI;IACb;IAEAuC,KAAKvC,KAAa,EAAE;QAClB,IAAI,CAACgB,QAAQ,GAAGhB;QAChB,OAAO,IAAI;IACb;IAEAwC,OAAO;QACL,IAAI,CAACzB,IAAI,CAAC0B,GAAG,CAAC,IAAI,CAACzB,QAAQ;IAC7B;IAEO0B,QAAQC,QAAoB,EAAE;QACnC,IAAI,CAAC7B,gBAAgB,CAACR,EAAE,CAAC,SAASqC;IACpC;AACF","ignoreList":[0]}}, + {"offset": {"line": 4269, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/dynamic-rendering-utils.ts"],"sourcesContent":["import { InvariantError } from '../shared/lib/invariant-error'\nimport { createPromiseWithResolvers } from '../shared/lib/promise-with-resolvers'\nimport { EnsureStaticLevel } from './app-render/segment-config/ensure-static'\nimport {\n RenderStage,\n type StagedRenderingController,\n type AdvanceableRenderStage,\n} from './app-render/staged-rendering'\nimport { workAsyncStorage } from './app-render/work-async-storage.external'\nimport type {\n RequestStore,\n WorkUnitStore,\n} from './app-render/work-unit-async-storage.external'\nimport { workUnitAsyncStorage } from './app-render/work-unit-async-storage.external'\nimport { getServerReact, getClientReact } from './runtime-reacts.external'\n\nexport function isHangingPromiseRejectionError(\n err: unknown\n): err is HangingPromiseRejectionError {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false\n }\n\n return err.digest === HANGING_PROMISE_REJECTION\n}\n\nconst HANGING_PROMISE_REJECTION = 'HANGING_PROMISE_REJECTION'\n\nclass HangingPromiseRejectionError extends Error {\n public readonly digest = HANGING_PROMISE_REJECTION\n\n constructor(\n public readonly route: string,\n public readonly expression: string\n ) {\n super(\n `During prerendering, ${expression} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${expression} to a different context by using \\`setTimeout\\`, \\`after\\`, or similar functions you may observe this error and you should handle it in that context. This occurred at route \"${route}\".`\n )\n }\n}\n\nconst CLIENT_HOOK_DYNAMIC = 'CLIENT_HOOK_DYNAMIC'\n\nexport class ClientHookDynamicError extends Error {\n public readonly digest = CLIENT_HOOK_DYNAMIC\n\n constructor(route: string, expression: string) {\n super(\n `Route \"${route}\": Next.js encountered URL data \\`${expression}\\` in a Client Component outside of \\`\\`.\\n\\n` +\n `This blocks prerendering because the value is only available at runtime.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Wrap the component in \\`\\` so the hook value streams in after prerendering\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-client-hook`\n )\n }\n}\n\nexport function isClientHookDynamicError(\n err: unknown\n): err is ClientHookDynamicError {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false\n }\n\n return err.digest === CLIENT_HOOK_DYNAMIC\n}\n\ntype AbortListeners = Array<() => void>\nconst abortListenersBySignal = new WeakMap()\n\n/**\n * Constructs a promise that never resolves, standing in for *dynamic* data:\n * data that is only available during a real dynamic request and hangs in\n * every kind of prerender — `io()`, `connection()`, uncached `fetch()`.\n *\n * This is primarily useful for cacheComponents where we use promise\n * resolution timing to determine which parts of a render can be included in a\n * prerender.\n *\n * Records nothing on the prerender store: the promise's holes are only ever\n * filled by a real dynamic request, so a runtime prefetch response would have\n * the same holes as the static one. If the data source would resolve during a\n * runtime prerender, use `makeRuntimeHangingPromise` instead.\n */\nexport function makeDynamicHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string\n): Promise {\n return makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n}\n\nexport function makeUntrackedHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string\n): Promise {\n return makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n}\n\n/**\n * Constructs a promise that never resolves, standing in for session data\n * (which a runtime shell can access).\n * Examples: cookies, headers\n *\n * Awaiting one of these during a static prerender records on the prerender\n * store that a runtime shell would produce more content than the static\n * static shell, which the segment prefetch encoding uses\n * to tell the client whether a runtime request could be skipped.\n *\n * When unsure whether data is dynamic or runtime, prefer this method — the\n * cost of over-recording is a redundant runtime prefetch request; the cost of\n * under-recording is a permanently missing one.\n *\n * For fallback-param data — data a concrete (ISR-upgraded) prerender would\n * resolve — use `makeFallbackParamsHangingPromise` instead, so the access\n * is recorded with the right effect on the static-prefetch hint.\n */\nexport function makeSessionDataHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string,\n workUnitStore: WorkUnitStore\n): Promise {\n const promise = makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n return trackPromiseUsed(\n promise,\n trackSessionDataAccessed.bind(null, workUnitStore, expression)\n )\n}\n\n/**\n * Constructs a promise that never resolves, standing in for URL data,\n * which can be accessed in a runtime prefetch (but not a runtime shell).\n * Examples: fallback params, searchParams\n *\n * Awaiting one of these during a static prerender records on the prerender\n * store that a runtime prefetch would produce more content than the static\n * response, which the segment prefetch encoding uses\n * to tell the client whether a runtime prefetch request could be skipped.\n *\n * When unsure whether data is dynamic or runtime, prefer this method — the\n * cost of over-recording is a redundant runtime prefetch request; the cost of\n * under-recording is a permanently missing one.\n *\n * `workUnitStore` may be null ONLY when the caller tracks the access itself.\n * Such a caller MUST call `trackURLDataAccessed` from every path that\n * observes the promise (e.g. the proxy traps for `then`/`status`),\n * against the work unit store active at access time.\n *\n * For fallback-param data — data a concrete (ISR-upgraded) prerender would\n * resolve — use `makeFallbackParamsHangingPromise` instead, so the access\n * is recorded with the right effect on the static-prefetch hint.\n */\nexport function makeURLDataHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string,\n workUnitStore: WorkUnitStore | null\n): Promise {\n const promise = makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n if (workUnitStore === null) {\n return promise\n }\n return trackPromiseUsed(\n promise,\n trackURLDataAccessed.bind(null, workUnitStore, expression)\n )\n}\n\n/**\n * Creates a promise that stands in for a result that will either be session data\n * or URL data, but we don't know which.\n */\nexport function makeUnknownRuntimeDataHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string,\n workUnitStore: WorkUnitStore\n): Promise {\n // We don't know if this is session or URL data, i.e. if it should affect the shell\n // or only the prefetch. Track it conservatively as affecting both.\n return makeSessionDataHangingPromise(signal, route, expression, workUnitStore)\n}\n\n/**\n * Constructs a promise that never resolves, standing in for data that is only\n * accessible in the prefetch, but not in the shell, e.g. `prefetch()`.\n * This usage does *not* indicate that a runtime request is needed,\n * only that the data is not available in a shell.\n *\n * @internal\n */\nexport function makePrefetchHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string\n): Promise {\n return makeUntrackedHangingPromise(signal, route, expression)\n}\n\n/**\n * Variant of `makeRuntimeHangingPromise` for *fallback-param* data: fallback\n * route params and values derived solely from them (`params`, `rootParams`,\n * `pathname` during a fallback prerender). Like every runtime data access,\n * awaiting it records the access on the prerender store's response-level flag,\n * but its effect on the build-time static-prefetch hint differs — on a\n * fallback-upgradeable route the access is transient (a concrete prerender\n * resolves it), so it leaves the hint intact. See `trackFallbackParamsAccessed`.\n *\n * As with `makeRuntimeHangingPromise`, `workUnitStore` may be null ONLY when\n * the caller tracks the access itself by calling `trackFallbackParamsAccessed`\n * from every path that observes the promise.\n */\nexport function makeFallbackParamsHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string,\n workUnitStore: WorkUnitStore | null\n): Promise {\n const promise = makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n if (workUnitStore === null) {\n return promise\n }\n return trackPromiseUsed(\n promise,\n trackFallbackParamsAccessed.bind(null, workUnitStore, expression)\n )\n}\n\nexport type PrerenderDataTracking = {\n /**\n * Records when the render has accessed a request data source\n * that hangs during a static prerender but would resolve during a runtime\n * prerender — cookies, headers, fallback params, searchParams, and cache\n * entries excluded only from static prerenders.\n *\n * The client uses this promise as the actual source of truth for whether a segment\n * needs a runtime request. Prefetch hints can become stale after a revalidation,\n * so if a hint says a static request should be enough but `runtimeDataAccessed`\n * resolves to `true`, a follow-up runtime request will be issued.\n * This applies to both shells and prefetches.\n *\n * The promise is embedded in the RSC payload (`InitialRSCPayload['u']`),\n * and is meant to be rewindable. This means that the shell might not have\n * any runtime data accesses, even when the prefetch does.\n * (this has some subtleties; see `markRuntimeDataAccessWhenStageReached`\n * for more)\n *\n * After the prerender, the promise is consumed by `collectSegmentData` and each\n * static prefetch will contain it (`PrefetchFlightResponse['u']`).\n * However, all the segments for a route will use the same promise (because we're\n * only tracking this on the page level) so if one segment needs runtime data, then\n * all segments will be marked as such.\n * However, on the client `isPartial` takes precedence over `runtimeDataAccessed`,\n * so complete segments will not end up being deopted.\n */\n readonly runtimeDataAccessed: PromiseWithResolvers\n\n /** Corresponds to `PrefetchHint.ShouldAttemptStaticShell`. */\n shouldAttemptStaticShell: boolean\n /** Corresponds to `PrefetchHint.ShouldAttemptStaticPrefetch`. */\n shouldAttemptStaticPrefetch: boolean\n}\n\nexport function createPrerenderDataTracking(): PrerenderDataTracking {\n return {\n runtimeDataAccessed: createPromiseWithResolvers(),\n shouldAttemptStaticShell: true,\n shouldAttemptStaticPrefetch: true,\n }\n}\n\nexport function finishPrerenderDataTracking(\n prerenderDataTracking: PrerenderDataTracking\n) {\n // If a runtime data access already resolved this promise, this is a no-op.\n prerenderDataTracking.runtimeDataAccessed.resolve(false)\n}\n\n/**\n * Records on a static prerender store that the render accessed a data source\n * which would have resolved in a runtime shell (or runtime prefetch).\n * No-op for all other store types.\n *\n * Prefer `makeRuntimeHangingPromise`. Use this function only when implementing\n * similar tracking and that one is not enough.\n */\nfunction trackSessionDataAccessed(\n workUnitStore: WorkUnitStore,\n expression: string\n): void {\n trackRuntimeDataAccessed(\n workUnitStore,\n PrerenderDataKind.SessionData,\n expression\n )\n}\n\n/**\n * Records on a static prerender store that the render accessed a data source\n * which would have resolved in a runtime prefetch (but NOT in a runtime shell)\n * No-op for all other store types.\n *\n * Prefer `makeRuntimeHangingPromise`. Use this function only when implementing\n * similar tracking and that one is not enough.\n *\n * For fallback-param data, use `trackFallbackParamsAccessed` instead. When\n * unsure, this is the conservative choice.\n */\nexport function trackURLDataAccessed(\n workUnitStore: WorkUnitStore,\n expression: string\n): void {\n trackRuntimeDataAccessed(workUnitStore, PrerenderDataKind.UrlData, expression)\n}\n\n/**\n * Fallback-param variant of `trackRuntimeDataAccessed`, for accesses of\n * fallback route params and values derived solely from them. It records the\n * response-level flag all the same, but only clears the build-time\n * static-prefetch hint when the route is not fallback-upgradeable — on an\n * upgradeable route the access is transient, since ISR later produces a\n * concrete prerender that resolves it.\n */\nexport function trackFallbackParamsAccessed(\n workUnitStore: WorkUnitStore,\n expression: string\n): void {\n trackRuntimeDataAccessed(\n workUnitStore,\n PrerenderDataKind.FallbackParams,\n expression\n )\n}\n\nconst enum PrerenderDataKind {\n SessionData = 1,\n UrlData = 2,\n FallbackParams = 3,\n}\n\nfunction trackRuntimeDataAccessed(\n workUnitStore: WorkUnitStore,\n dataKind: PrerenderDataKind,\n expression: string\n): void {\n switch (workUnitStore.type) {\n case 'prerender': {\n const { prerenderDataTracking, stagedRendering } = workUnitStore\n if (!prerenderDataTracking || !stagedRendering) {\n return\n }\n const { currentStage } = stagedRendering\n if (currentStage === RenderStage.Before) {\n console.error(\n new InvariantError(\n 'Unexpected trackRuntimeDataAccessed in the Before stage.'\n )\n )\n return\n }\n if (currentStage >= RenderStage.NavigationStatic) {\n // Ignore any accesses that happen after `navigation()` resolves.\n // The purpose of this tracking is to judge whether a runtime prefetch\n // would give us a more complete result than a static one.\n // But `navigation()` wouldn't have resolved in a runtime prefetch,\n // so e.g. `await navigation(); await cookies()` wouldn't have more content\n // in those, and we shouldn't count it.\n return\n }\n\n const ensureStaticLevel =\n workUnitStore.ensureStaticLevel ?? EnsureStaticLevel.None\n\n // NOTE: In general, we keep hints in sync with `needsRuntimeRequest`, but they\n // don't have to always match. The client re-uses hints for the entire route,\n // while `needsRuntimeRequest` can vary across individual prerendered param values\n // (e.g. if cookies are accessed depending on a param value).\n // Hints can also become outdated if a route only starts using runtime data\n // after a revalidation, so we have to expect this and be resilient to it.\n // Also see the upgradeable fallback params case below, which deliberately\n // puts them out of sync.\n\n switch (dataKind) {\n case PrerenderDataKind.SessionData: {\n // Potentially deopt both the shell and the prefetch,\n // because if the shell accessed runtime data, so does the prefetch.\n // However, if we're already past the shell stage, the shell is not affected.\n // (which makes e.g. `await prefetch(); await cookies()` only affect the prefetch)\n let firstAffectedStage:\n | RenderStage.ShellStatic\n | RenderStage.PrefetchStatic\n | null = null\n\n if (\n currentStage <= RenderStage.ShellStatic &&\n // Only track if we're not forcing the shell to be static.\n ensureStaticLevel < EnsureStaticLevel.Shell\n ) {\n prerenderDataTracking.shouldAttemptStaticShell = false\n firstAffectedStage ??= RenderStage.ShellStatic\n logRuntimeDeopt?.(expression, 'shell')\n }\n\n if (\n currentStage <= RenderStage.PrefetchStatic &&\n // Only track if we're not forcing the prefetch to be static.\n ensureStaticLevel < EnsureStaticLevel.Prefetch\n ) {\n prerenderDataTracking.shouldAttemptStaticPrefetch = false\n // NOTE: if the shell is affected, don't override it.\n firstAffectedStage ??= RenderStage.PrefetchStatic\n logRuntimeDeopt?.(expression, 'prefetch')\n }\n\n if (firstAffectedStage !== null) {\n markRuntimeDataAccessWhenStageReached(\n prerenderDataTracking,\n stagedRendering,\n firstAffectedStage\n )\n }\n break\n }\n case PrerenderDataKind.FallbackParams: {\n if (workUnitStore.isFallbackUpgradeable) {\n // An fallback-param access is transient when the route is\n // fallback-upgradeable (i.e. ISR later produces the concrete prerender a\n // static prefetch would hit) so it does not indicate the need for a runtime\n // request and thus does not affect the static hints.\n //\n // If runtime prefetches are not disallowed by `ensureStatic`, then we still\n // set `runtimeDataAccessed` (while keeping the hints static). This means that\n // if the concrete prerender isn't ready yet and we served the fallback, then\n // the client knows it can use a *runtime* prefetch for speculative links --\n // a runtime prefetch can provide the same content (or more) as the concrete\n // prerender would.\n if (ensureStaticLevel < EnsureStaticLevel.Prefetch) {\n markRuntimeDataAccessWhenStageReached(\n prerenderDataTracking,\n stagedRendering,\n // `params` are URL data, so they only affect the prefetch\n RenderStage.PrefetchStatic\n )\n logRuntimeUpgradeableFallback?.()\n }\n break\n }\n // not an upgradeable fallback param access, so we treat it as URL data.\n // intentional fallthrough\n }\n case PrerenderDataKind.UrlData: {\n // Only deopt the prefetch, not the shell, which cannot access URL data anyway.\n if (\n currentStage <= RenderStage.PrefetchStatic &&\n ensureStaticLevel < EnsureStaticLevel.Prefetch\n ) {\n prerenderDataTracking.shouldAttemptStaticPrefetch = false\n logRuntimeDeopt?.(expression, 'prefetch')\n\n markRuntimeDataAccessWhenStageReached(\n prerenderDataTracking,\n stagedRendering,\n RenderStage.PrefetchStatic\n )\n }\n break\n }\n }\n\n break\n }\n case 'prerender-client':\n case 'prerender-legacy':\n case 'prerender-runtime':\n case 'validation-client':\n case 'request':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n // Only the modern server prerender tracks this; see the field docs on\n // PrerenderStoreModernServer.\n break\n default:\n workUnitStore satisfies never\n }\n}\n\n/**\n * Tracks a runtime data access on the `runtimeDataAccessed` promise,\n * but with a delay until `targetStage`.\n *\n * When we encounter a URL data access like `await params`, we need to mark the\n * *prefetch* as needing runtime data, but the *shell* should remain unaffected\n * (because it cannot access params anyway).\n *\n * However, the shell and the prefetch share one `runtimeDataAccessed` promise,\n * and it needs to be accurately rewindable by the client\n * In other words, we need to make sure that it reads as `false` when rewound\n * to a shell, but as `true` in the final response (the prefetch).\n *\n * This means that if the `await params` is encountered during the shell stage, we\n * cannot resolve `runtimeDataAccessed` immediately.\n * Instead, we delay the resolution until the PrefetchStatic stage, so the promise\n * will remain unresolved when rewound to the shell stage (which reads as `false`).\n */\nfunction markRuntimeDataAccessWhenStageReached(\n prerenderDataTracking: PrerenderDataTracking,\n stageController: StagedRenderingController,\n targetStage: AdvanceableRenderStage\n) {\n const { runtimeDataAccessed } = prerenderDataTracking\n // NOTE: If we're already in or past the target stage, we can avoid allocating a closure,\n // because `onStage` would've executed the callback immediately anyway.\n if (stageController.currentStage >= targetStage) {\n runtimeDataAccessed.resolve(true)\n } else {\n stageController.onStage(\n targetStage,\n runtimeDataAccessed.resolve.bind(null, true)\n )\n }\n}\n\nconst logRuntimeDeopt = process.env.NEXT_PRIVATE_DEBUG_RUNTIME_DATA\n ? (expression: string, kind: 'shell' | 'prefetch') => {\n const { route } = workAsyncStorage.getStore()!\n console.log(\n `Route '${route}': deopting to a runtime ${kind} because it used ${expression}`\n )\n }\n : undefined\n\nconst logRuntimeUpgradeableFallback = process.env\n .NEXT_PRIVATE_DEBUG_RUNTIME_DATA\n ? () => {\n const { route } = workAsyncStorage.getStore()!\n console.log(\n `Route '${route}': marking upgradeable fallback as runtime prefetchable`\n )\n }\n : undefined\n\n/**\n * Signals that we cannot recover both a runtime shell and a static (PPR) shell\n * from the same render. Use this whenever the stage of a promise varies on\n * `RequestStore.needsRuntimeShell`.\n * */\nexport function trackIncompatibleShellContent(\n workUnitStore: RequestStore,\n reason: string\n) {\n const { stagedRendering } = workUnitStore\n if (!stagedRendering) {\n return\n }\n\n // TODO(app-shells): optimize this to only consider stages that are relevant for validation.\n // We should only track incompatible content when it can affect them.\n // For now, we simply exclude everything that happens in the dynamic stage.\n // (Note that we also need to account for cache misses that move things to a\n // different stage -- those should also preemptively set `hasIncompatibleShellContent`\n // because there's a chance that a render with warm caches would set it)\n const { currentStage } = stagedRendering\n if (\n currentStage === RenderStage.Dynamic ||\n currentStage === RenderStage.Abandoned\n ) {\n return\n }\n if (process.env.NEXT_PRIVATE_DEBUG_VALIDATION) {\n const workStore = workAsyncStorage.getStore()!\n console.log(\n `Route ${workStore.route}: Incompatible shell content: ${reason}`\n )\n }\n workUnitStore.hasIncompatibleShellContent = true\n}\n\nexport function makeClientHookHangingPromise(\n signal: AbortSignal,\n error: ClientHookDynamicError\n): Promise {\n return makeHangingPromiseWithError(signal, error)\n}\n\nfunction makeHangingPromiseWithError(\n signal: AbortSignal,\n error: Error\n): Promise {\n if (signal.aborted) {\n return Promise.reject(error)\n } else {\n const hangingPromise = new Promise((_, reject) => {\n const boundRejection = reject.bind(null, error)\n let currentListeners = abortListenersBySignal.get(signal)\n if (currentListeners) {\n currentListeners.push(boundRejection)\n } else {\n const listeners = [boundRejection]\n abortListenersBySignal.set(signal, listeners)\n signal.addEventListener(\n 'abort',\n () => {\n for (let i = 0; i < listeners.length; i++) {\n listeners[i]()\n }\n },\n { once: true }\n )\n }\n })\n // We are fine if no one actually awaits this promise. We shouldn't consider this an unhandled rejection so\n // we attach a noop catch handler here to suppress this warning. If you actually await somewhere or construct\n // your own promise out of it you'll need to ensure you handle the error when it rejects.\n hangingPromise.catch(ignoreReject)\n return hangingPromise\n }\n}\n\nfunction ignoreReject() {}\n\n/**\n * Creates a promise that will be triggered when another promise resolves.\n * It will not emit unhandled rejections, which is important if the trigger\n * is a promise that might itself get rejected (e.g. when a prerender/render\n * are aborted due to sync IO)\n */\nexport function makePromiseFromTrigger(\n trigger: Promise,\n value: T\n): Promise {\n const promise = trigger.then(() => value)\n promise.catch(ignoreReject)\n return promise\n}\n\nexport function makeDevtoolsIOAwarePromise(\n underlying: T,\n requestStore: RequestStore,\n stage: AdvanceableRenderStage\n): Promise {\n if (requestStore.stagedRendering) {\n // We resolve each stage in a timeout, so React DevTools will pick this up as IO.\n return requestStore.stagedRendering.delayUntilStage(\n stage,\n undefined,\n underlying\n )\n }\n // in React DevTools if we resolve in a setTimeout we will observe\n // the promise resolution as something that can suspend a boundary or root.\n return new Promise((resolve) => {\n // Must use setTimeout to be considered IO React DevTools. setImmediate will not work.\n setTimeout(() => {\n resolve(underlying)\n }, 0)\n })\n}\n\n/**\n * Invokes `onUse` whenever `then()/catch()/finally()` are called on the promise\n * or when the promise is awaited. */\nexport function trackPromiseUsed(\n promise: Promise,\n onUse: () => void\n): Promise {\n // We can instrument `.then()/.catch()/.finally()` in one go by using a Promise subclass\n // that implements a custom `.then()`, because `catch` and `finally` delegate to it.\n //\n // Alternative implementation ideas that were tried and rejected:\n //\n // 1. Patching the methods directly via `promise.then = (..args) => { ... }`:\n // doesn't work, because Node does not call the monkeypatched methods for native `await`:\n // > Native Promise [...]: The promise is directly used and awaited natively, without calling `then()`.\n // > https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await#description\n //\n // 2. Wrapping in a proxy that returns a custom `then/catch/finally`:\n // breaks async stacks in React's IO tracking (stack becomes `Promise.then`)\n return TrackedPromise.from(promise, onUse)\n}\n\nclass TrackedPromise extends Promise {\n #onUse: (() => void) | null = null\n\n // We don't need derived promises to also be a TrackedPromise.\n // We only care about the first level of `.then()`.\n static get [Symbol.species]() {\n return Promise\n }\n\n static from(promise: Promise, onUse: () => void): TrackedPromise {\n // Whenever the promise we're tracking resolves/rejects, we should follow.\n const tracked = new TrackedPromise(promise.then.bind(promise))\n\n tracked.#onUse = onUse\n\n // Hanging promises catch rejections when created. Tracked promises are generally derived\n // from promises that may hang & reject, so we need to do the same.\n // However, we have to bypass the tracking we do in `TrackedPromise.then`.\n // (we're using `then` directly, because `catch` ends up delegating `TrackedPromise.then`)\n Promise.prototype.then.call(tracked, undefined, ignoreReject)\n\n return tracked\n }\n\n then(\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: unknown) => TResult2 | PromiseLike\n ): Promise {\n const onUse = this.#onUse\n if (onUse) {\n try {\n onUse()\n } catch (err) {\n // We don't want to break the method even if our tracking errored.\n console.error(err)\n }\n }\n\n return Promise.prototype.then.call(\n this,\n onFulfilled,\n onRejected\n ) as Promise\n }\n}\n\nexport const RENDER_STAGES_BY_DATA_KIND = {\n sessionData: RenderStage.ShellRuntime as const,\n /**\n * Statically-prerenderable URL data, like static `params`.\n * It may need to be pushed to a runtime stage in a runtime prerender,\n * but it's semantically distinct from `runtimeUrlData` like `searchParams`,\n * which is always excluded from static prerenders.\n * */\n staticUrlData: {\n /**\n * From that app's point of view, `prefetch()` is semantically the same as\n * `staticUrlData`, because it does not resolve in a shell but resolves in\n * a prefetch (even a static one).\n * We handle it separately to provide a specialized error in validation renders.\n */\n prefetchApi: {\n static: RenderStage.PrefetchStatic_prefetchApi as const,\n runtime: RenderStage.PrefetchRuntime_prefetchApi as const,\n },\n static: RenderStage.PrefetchStatic as const,\n runtime: RenderStage.PrefetchRuntime as const,\n },\n /**\n * URL data that is never statically-prerenderable, like static `searchParams`.\n * */\n runtimeUrlData: RenderStage.PrefetchRuntime as const,\n}\n\nexport function applyOwnerStack(error: Error): Error {\n if (process.env.NODE_ENV !== 'production') {\n let ownerStack: string | undefined | null\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n // captureOwnerStack() returns the owner stack for the current React\n // rendering context. Inside a cache scope this only includes the inner\n // component tree. The outer owner stack (captured before entering the\n // cache boundary in use-cache-wrapper.ts) is stored on the cache store.\n // We concatenate both to get the full component tree.\n const innerOwnerStack =\n getClientReact()?.captureOwnerStack?.() ??\n getServerReact()?.captureOwnerStack?.()\n\n switch (workUnitStore?.type) {\n case 'cache':\n case 'private-cache':\n ownerStack =\n (innerOwnerStack || '') + (workUnitStore.outerOwnerStack || '') ||\n undefined\n break\n case 'unstable-cache':\n case 'request':\n case 'prerender':\n case 'prerender-legacy':\n case 'prerender-runtime':\n case 'prerender-client':\n case 'validation-client':\n case 'build-time-generator':\n case undefined:\n ownerStack = innerOwnerStack\n break\n default:\n workUnitStore satisfies never\n }\n\n if (ownerStack) {\n let stack = ownerStack\n\n if (error.stack) {\n const frames: string[] = []\n\n for (const frame of error.stack.split('\\n').slice(1)) {\n if (frame.includes('react_stack_bottom_frame')) {\n break\n }\n\n frames.push(frame)\n }\n\n stack = '\\n' + frames.join('\\n') + stack\n }\n\n error.stack = error.name + ': ' + error.message + stack\n }\n }\n\n return error\n}\n"],"names":["InvariantError","createPromiseWithResolvers","EnsureStaticLevel","RenderStage","workAsyncStorage","workUnitAsyncStorage","getServerReact","getClientReact","isHangingPromiseRejectionError","err","digest","HANGING_PROMISE_REJECTION","HangingPromiseRejectionError","Error","constructor","route","expression","CLIENT_HOOK_DYNAMIC","ClientHookDynamicError","isClientHookDynamicError","abortListenersBySignal","WeakMap","makeDynamicHangingPromise","signal","makeHangingPromiseWithError","makeUntrackedHangingPromise","makeSessionDataHangingPromise","workUnitStore","promise","trackPromiseUsed","trackSessionDataAccessed","bind","makeURLDataHangingPromise","trackURLDataAccessed","makeUnknownRuntimeDataHangingPromise","makePrefetchHangingPromise","makeFallbackParamsHangingPromise","trackFallbackParamsAccessed","createPrerenderDataTracking","runtimeDataAccessed","shouldAttemptStaticShell","shouldAttemptStaticPrefetch","finishPrerenderDataTracking","prerenderDataTracking","resolve","trackRuntimeDataAccessed","dataKind","type","stagedRendering","currentStage","Before","console","error","NavigationStatic","ensureStaticLevel","None","firstAffectedStage","ShellStatic","Shell","logRuntimeDeopt","PrefetchStatic","Prefetch","markRuntimeDataAccessWhenStageReached","isFallbackUpgradeable","logRuntimeUpgradeableFallback","stageController","targetStage","onStage","process","env","NEXT_PRIVATE_DEBUG_RUNTIME_DATA","kind","getStore","log","undefined","trackIncompatibleShellContent","reason","Dynamic","Abandoned","NEXT_PRIVATE_DEBUG_VALIDATION","workStore","hasIncompatibleShellContent","makeClientHookHangingPromise","aborted","Promise","reject","hangingPromise","_","boundRejection","currentListeners","get","push","listeners","set","addEventListener","i","length","once","catch","ignoreReject","makePromiseFromTrigger","trigger","value","then","makeDevtoolsIOAwarePromise","underlying","requestStore","stage","delayUntilStage","setTimeout","onUse","TrackedPromise","from","Symbol","species","tracked","prototype","call","onFulfilled","onRejected","RENDER_STAGES_BY_DATA_KIND","sessionData","ShellRuntime","staticUrlData","prefetchApi","static","PrefetchStatic_prefetchApi","runtime","PrefetchRuntime_prefetchApi","PrefetchRuntime","runtimeUrlData","applyOwnerStack","NODE_ENV","ownerStack","innerOwnerStack","captureOwnerStack","outerOwnerStack","stack","frames","frame","split","slice","includes","join","name","message"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 4751, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/instrumentation/utils.ts"],"sourcesContent":["export function getRevalidateReason(params: {\n isOnDemandRevalidate?: boolean\n isStaticGeneration?: boolean\n}): 'on-demand' | 'stale' | undefined {\n if (params.isOnDemandRevalidate) {\n return 'on-demand'\n }\n if (params.isStaticGeneration) {\n return 'stale'\n }\n return undefined\n}\n"],"names":["getRevalidateReason","params","isOnDemandRevalidate","isStaticGeneration","undefined"],"mappings":";;;;AAAO,SAASA,oBAAoBC,MAGnC;IACC,IAAIA,OAAOC,oBAAoB,EAAE;QAC/B,OAAO;IACT;IACA,IAAID,OAAOE,kBAAkB,EAAE;QAC7B,OAAO;IACT;IACA,OAAOC;AACT","ignoreList":[0]}}, + {"offset": {"line": 4768, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/app-dir-module.ts"],"sourcesContent":["import type { AppDirModules } from '../../build/webpack/loaders/next-app-loader'\nimport { DEFAULT_SEGMENT_KEY } from '../../shared/lib/segment'\n\n/**\n * LoaderTree is generated in next-app-loader.\n */\nexport type LoaderTree = [\n segment: string,\n parallelRoutes: { [parallelRouterKey: string]: LoaderTree },\n modules: AppDirModules,\n /**\n * At build time, for each dynamic segment, we compute the list of static\n * sibling segments that exist at the same URL path level. This is used by\n * the client router to determine if a prefetch can be reused.\n *\n * For example, given the following file structure:\n * /app/(group1)/products/sale/page.tsx -> /products/sale\n * /app/(group2)/products/[id]/page.tsx -> /products/[id]\n *\n * The [id] segment would have staticSiblings: ['sale']\n *\n * This accounts for route groups, which may place sibling routes in\n * different parts of the file system tree but at the same URL level.\n *\n * A value of `null` means the static siblings are unknown (e.g., in webpack\n * dev mode where routes are compiled on-demand).\n */\n staticSiblings: readonly string[] | null,\n]\n\nexport async function getLayoutOrPageModule(loaderTree: LoaderTree) {\n const { layout, page, defaultPage } = loaderTree[2]\n const isLayout = typeof layout !== 'undefined'\n const isPage = typeof page !== 'undefined'\n const isDefaultPage =\n typeof defaultPage !== 'undefined' && loaderTree[0] === DEFAULT_SEGMENT_KEY\n\n let mod = undefined\n let modType: 'layout' | 'page' | undefined = undefined\n let filePath = undefined\n\n if (isLayout) {\n mod = await layout[0]()\n modType = 'layout'\n filePath = layout[1]\n } else if (isPage) {\n mod = await page[0]()\n modType = 'page'\n filePath = page[1]\n } else if (isDefaultPage) {\n mod = await defaultPage[0]()\n modType = 'page'\n filePath = defaultPage[1]\n }\n\n return { mod, modType, filePath }\n}\n\nexport async function getComponentTypeModule(\n loaderTree: LoaderTree,\n moduleType: 'layout' | 'not-found' | 'forbidden' | 'unauthorized'\n) {\n const { [moduleType]: module } = loaderTree[2]\n if (typeof module !== 'undefined') {\n return await module[0]()\n }\n return undefined\n}\n"],"names":["DEFAULT_SEGMENT_KEY","getLayoutOrPageModule","loaderTree","layout","page","defaultPage","isLayout","isPage","isDefaultPage","mod","undefined","modType","filePath","getComponentTypeModule","moduleType","module"],"mappings":";;;;;;AACA,SAASA,mBAAmB,QAAQ,2BAA0B;;AA6BvD,eAAeC,sBAAsBC,UAAsB;IAChE,MAAM,EAAEC,MAAM,EAAEC,IAAI,EAAEC,WAAW,EAAE,GAAGH,UAAU,CAAC,EAAE;IACnD,MAAMI,WAAW,OAAOH,WAAW;IACnC,MAAMI,SAAS,OAAOH,SAAS;IAC/B,MAAMI,gBACJ,OAAOH,gBAAgB,eAAeH,UAAU,CAAC,EAAE,KAAKF,wLAAAA;IAE1D,IAAIS,MAAMC;IACV,IAAIC,UAAyCD;IAC7C,IAAIE,WAAWF;IAEf,IAAIJ,UAAU;QACZG,MAAM,MAAMN,MAAM,CAAC,EAAE;QACrBQ,UAAU;QACVC,WAAWT,MAAM,CAAC,EAAE;IACtB,OAAO,IAAII,QAAQ;QACjBE,MAAM,MAAML,IAAI,CAAC,EAAE;QACnBO,UAAU;QACVC,WAAWR,IAAI,CAAC,EAAE;IACpB,OAAO,IAAII,eAAe;QACxBC,MAAM,MAAMJ,WAAW,CAAC,EAAE;QAC1BM,UAAU;QACVC,WAAWP,WAAW,CAAC,EAAE;IAC3B;IAEA,OAAO;QAAEI;QAAKE;QAASC;IAAS;AAClC;AAEO,eAAeC,uBACpBX,UAAsB,EACtBY,UAAiE;IAEjE,MAAM,EAAE,CAACA,WAAW,EAAEC,MAAM,EAAE,GAAGb,UAAU,CAAC,EAAE;IAC9C,IAAI,OAAOa,WAAW,aAAa;QACjC,OAAO,MAAMA,MAAM,CAAC,EAAE;IACxB;IACA,OAAOL;AACT","ignoreList":[0]}}, + {"offset": {"line": 4814, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/cache-control.ts"],"sourcesContent":["import { CACHE_ONE_YEAR_SECONDS } from '../../lib/constants'\n\n/**\n * The revalidate option used internally for pages. A value of `false` means\n * that the page should not be revalidated. A number means that the page\n * should be revalidated after the given number of seconds (this also includes\n * `1` which means to revalidate after 1 second). A value of `0` is not a valid\n * value for this option.\n */\nexport type Revalidate = number | false\n\nexport interface CacheControl {\n revalidate: Revalidate\n expire: number | undefined\n}\n\nexport function getCacheControlHeader({\n revalidate,\n expire,\n}: CacheControl): string {\n const swrHeader =\n typeof revalidate === 'number' &&\n expire !== undefined &&\n revalidate < expire\n ? `, stale-while-revalidate=${expire - revalidate}`\n : ''\n\n if (revalidate === 0) {\n return 'private, no-cache, no-store, max-age=0, must-revalidate'\n } else if (typeof revalidate === 'number') {\n return `s-maxage=${revalidate}${swrHeader}`\n }\n\n return `s-maxage=${CACHE_ONE_YEAR_SECONDS}${swrHeader}`\n}\n"],"names":["CACHE_ONE_YEAR_SECONDS","getCacheControlHeader","revalidate","expire","swrHeader","undefined"],"mappings":";;;;AAAA,SAASA,sBAAsB,QAAQ,sBAAqB;;AAgBrD,SAASC,sBAAsB,EACpCC,UAAU,EACVC,MAAM,EACO;IACb,MAAMC,YACJ,OAAOF,eAAe,YACtBC,WAAWE,aACXH,aAAaC,SACT,CAAC,yBAAyB,EAAEA,SAASD,YAAY,GACjD;IAEN,IAAIA,eAAe,GAAG;QACpB,OAAO;IACT,OAAO,IAAI,OAAOA,eAAe,UAAU;QACzC,OAAO,CAAC,SAAS,EAAEA,aAAaE,WAAW;IAC7C;IAEA,OAAO,CAAC,SAAS,EAAEJ,mLAAAA,GAAyBI,WAAW;AACzD","ignoreList":[0]}}, + {"offset": {"line": 4833, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/clone-response.ts"],"sourcesContent":["const noop = () => {}\n\nlet registry: FinalizationRegistry> | undefined\n\nif (globalThis.FinalizationRegistry) {\n registry = new FinalizationRegistry((weakRef: WeakRef) => {\n const stream = weakRef.deref()\n if (stream && !stream.locked) {\n stream.cancel('Response object has been garbage collected').then(noop)\n }\n })\n}\n\n/**\n * Clones a response by teeing the body so we can return two independent\n * ReadableStreams from it. This avoids the bug in the undici library around\n * response cloning.\n *\n * After cloning, the original response's body will be consumed and closed.\n *\n * @see https://github.com/vercel/next.js/pull/73274\n *\n * @param original - The original response to clone.\n * @returns A tuple containing two independent clones of the original response.\n */\nexport function cloneResponse(original: Response): [Response, Response] {\n // If the response has no body, then we can just return the original response\n // twice because it's immutable.\n if (!original.body) {\n return [original, original]\n }\n\n const [body1, body2] = original.body.tee()\n\n const cloned1 = new Response(body1, {\n status: original.status,\n statusText: original.statusText,\n headers: original.headers,\n })\n\n Object.defineProperty(cloned1, 'url', {\n value: original.url,\n // How the original response.url behaves\n configurable: true,\n enumerable: true,\n writable: false,\n })\n\n const cloned2 = new Response(body2, {\n status: original.status,\n statusText: original.statusText,\n headers: original.headers,\n })\n\n Object.defineProperty(cloned2, 'url', {\n value: original.url,\n // How the original response.url behaves\n configurable: true,\n enumerable: true,\n writable: false,\n })\n\n // The Fetch Standard allows users to skip consuming the response body by\n // relying on garbage collection to release connection resources.\n // https://github.com/nodejs/undici?tab=readme-ov-file#garbage-collection\n //\n // To cancel the stream you then need to cancel both resulting branches.\n // Teeing a stream will generally lock it for the duration, preventing other\n // readers from locking it.\n // https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/tee\n if (registry) {\n if (cloned1.body) {\n registry.register(cloned1, new WeakRef(cloned1.body))\n }\n\n if (cloned2.body) {\n registry.register(cloned2, new WeakRef(cloned2.body))\n }\n }\n\n return [cloned1, cloned2]\n}\n"],"names":["noop","registry","globalThis","FinalizationRegistry","weakRef","stream","deref","locked","cancel","then","cloneResponse","original","body","body1","body2","tee","cloned1","Response","status","statusText","headers","Object","defineProperty","value","url","configurable","enumerable","writable","cloned2","register","WeakRef"],"mappings":";;;;AAAA,MAAMA,OAAO,KAAO;AAEpB,IAAIC;AAEJ,IAAIC,WAAWC,oBAAoB,EAAE;IACnCF,WAAW,IAAIE,qBAAqB,CAACC;QACnC,MAAMC,SAASD,QAAQE,KAAK;QAC5B,IAAID,UAAU,CAACA,OAAOE,MAAM,EAAE;YAC5BF,OAAOG,MAAM,CAAC,8CAA8CC,IAAI,CAACT;QACnE;IACF;AACF;AAcO,SAASU,cAAcC,QAAkB;IAC9C,6EAA6E;IAC7E,gCAAgC;IAChC,IAAI,CAACA,SAASC,IAAI,EAAE;QAClB,OAAO;YAACD;YAAUA;SAAS;IAC7B;IAEA,MAAM,CAACE,OAAOC,MAAM,GAAGH,SAASC,IAAI,CAACG,GAAG;IAExC,MAAMC,UAAU,IAAIC,SAASJ,OAAO;QAClCK,QAAQP,SAASO,MAAM;QACvBC,YAAYR,SAASQ,UAAU;QAC/BC,SAAST,SAASS,OAAO;IAC3B;IAEAC,OAAOC,cAAc,CAACN,SAAS,OAAO;QACpCO,OAAOZ,SAASa,GAAG;QACnB,wCAAwC;QACxCC,cAAc;QACdC,YAAY;QACZC,UAAU;IACZ;IAEA,MAAMC,UAAU,IAAIX,SAASH,OAAO;QAClCI,QAAQP,SAASO,MAAM;QACvBC,YAAYR,SAASQ,UAAU;QAC/BC,SAAST,SAASS,OAAO;IAC3B;IAEAC,OAAOC,cAAc,CAACM,SAAS,OAAO;QACpCL,OAAOZ,SAASa,GAAG;QACnB,wCAAwC;QACxCC,cAAc;QACdC,YAAY;QACZC,UAAU;IACZ;IAEA,yEAAyE;IACzE,iEAAiE;IACjE,yEAAyE;IACzE,EAAE;IACF,wEAAwE;IACxE,4EAA4E;IAC5E,2BAA2B;IAC3B,sEAAsE;IACtE,IAAI1B,UAAU;QACZ,IAAIe,QAAQJ,IAAI,EAAE;YAChBX,SAAS4B,QAAQ,CAACb,SAAS,IAAIc,QAAQd,QAAQJ,IAAI;QACrD;QAEA,IAAIgB,QAAQhB,IAAI,EAAE;YAChBX,SAAS4B,QAAQ,CAACD,SAAS,IAAIE,QAAQF,QAAQhB,IAAI;QACrD;IACF;IAEA,OAAO;QAACI;QAASY;KAAQ;AAC3B","ignoreList":[0]}}, + {"offset": {"line": 4906, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/dedupe-fetch.ts"],"sourcesContent":["/**\n * Based on https://github.com/facebook/react/blob/d4e78c42a94be027b4dc7ed2659a5fddfbf9bd4e/packages/react/src/ReactFetch.js\n */\nimport * as React from 'react'\nimport { cloneResponse } from './clone-response'\nimport { InvariantError } from '../../shared/lib/invariant-error'\n\nconst simpleCacheKey = '[\"GET\",[],null,\"follow\",null,null,null,null]' // generateCacheKey(new Request('https://blank'));\n\n// Headers that should not affect deduplication\n// traceparent and tracestate are used for distributed tracing and should not affect cache keys\nconst headersToExcludeInCacheKey = new Set(['traceparent', 'tracestate'])\n\nfunction generateCacheKey(request: Request): string {\n // We pick the fields that goes into the key used to dedupe requests.\n // We don't include the `cache` field, because we end up using whatever\n // caching resulted from the first request.\n // Notably we currently don't consider non-standard (or future) options.\n // This might not be safe. TODO: warn for non-standard extensions differing.\n // IF YOU CHANGE THIS UPDATE THE simpleCacheKey ABOVE.\n\n const filteredHeaders = Array.from(request.headers.entries()).filter(\n ([key]) => !headersToExcludeInCacheKey.has(key.toLowerCase())\n )\n\n return JSON.stringify([\n request.method,\n filteredHeaders,\n request.mode,\n request.redirect,\n request.credentials,\n request.referrer,\n request.referrerPolicy,\n request.integrity,\n ])\n}\n\ntype CacheEntry = [\n key: string,\n promise: Promise,\n response: Response | null,\n]\n\nexport function createDedupeFetch(originalFetch: typeof fetch) {\n const getCacheEntries = React.cache(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- url is the cache key\n (url: string): CacheEntry[] => []\n )\n\n return function dedupeFetch(\n resource: URL | RequestInfo,\n options?: RequestInit\n ): Promise {\n if (options && options.signal) {\n // If we're passed a signal, then we assume that\n // someone else controls the lifetime of this object and opts out of\n // caching. It's effectively the opt-out mechanism.\n // Ideally we should be able to check this on the Request but\n // it always gets initialized with its own signal so we don't\n // know if it's supposed to override - unless we also override the\n // Request constructor.\n return originalFetch(resource, options)\n }\n // Normalize the Request\n let url: string\n let cacheKey: string\n if (typeof resource === 'string' && !options) {\n // Fast path.\n cacheKey = simpleCacheKey\n url = resource\n } else {\n // Normalize the request.\n // if resource is not a string or a URL (its an instance of Request)\n // then do not instantiate a new Request but instead\n // reuse the request as to not disturb the body in the event it's a ReadableStream.\n const request =\n typeof resource === 'string' || resource instanceof URL\n ? new Request(resource, options)\n : resource\n if (\n (request.method !== 'GET' && request.method !== 'HEAD') ||\n request.keepalive\n ) {\n // We currently don't dedupe requests that might have side-effects. Those\n // have to be explicitly cached. We assume that the request doesn't have a\n // body if it's GET or HEAD.\n // keepalive gets treated the same as if you passed a custom cache signal.\n return originalFetch(resource, options)\n }\n cacheKey = generateCacheKey(request)\n url = request.url\n }\n\n const cacheEntries = getCacheEntries(url)\n for (let i = 0, j = cacheEntries.length; i < j; i += 1) {\n const [key, promise] = cacheEntries[i]\n if (key === cacheKey) {\n return promise.then(() => {\n const response = cacheEntries[i][2]\n if (!response) throw new InvariantError('No cached response')\n\n // We're cloning the response using this utility because there exists\n // a bug in the undici library around response cloning. See the\n // following pull request for more details:\n // https://github.com/vercel/next.js/pull/73274\n const [cloned1, cloned2] = cloneResponse(response)\n cacheEntries[i][2] = cloned2\n return cloned1\n })\n }\n }\n\n // We pass the original arguments here in case normalizing the Request\n // doesn't include all the options in this environment.\n const promise = originalFetch(resource, options)\n const entry: CacheEntry = [cacheKey, promise, null]\n cacheEntries.push(entry)\n\n return promise.then((response) => {\n // We're cloning the response using this utility because there exists\n // a bug in the undici library around response cloning. See the\n // following pull request for more details:\n // https://github.com/vercel/next.js/pull/73274\n const [cloned1, cloned2] = cloneResponse(response)\n entry[2] = cloned2\n return cloned1\n })\n }\n}\n"],"names":["React","cloneResponse","InvariantError","simpleCacheKey","headersToExcludeInCacheKey","Set","generateCacheKey","request","filteredHeaders","Array","from","headers","entries","filter","key","has","toLowerCase","JSON","stringify","method","mode","redirect","credentials","referrer","referrerPolicy","integrity","createDedupeFetch","originalFetch","getCacheEntries","cache","url","dedupeFetch","resource","options","signal","cacheKey","URL","Request","keepalive","cacheEntries","i","j","length","promise","then","response","cloned1","cloned2","entry","push"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 5022, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/encode-header-safe.ts"],"sourcesContent":["/**\n * Percent-encode every character other than horizontal tab and printable ASCII\n * so a value can be safely serialized into an HTTP header.\n *\n * Node's `validateHeaderValue` and `fetch`'s ByteString conversion accept\n * different character ranges. Restricting values to `\\t\\x20-\\x7e` produces a\n * conservative representation that both can serialize. Characters outside a\n * transport's accepted range (Hebrew, Arabic, Chinese, emoji, …) would\n * otherwise throw `ERR_INVALID_CHAR` or a `TypeError`, which crashes ISR or\n * fails a cache read on every affected request.\n *\n * Cache tags are encoded at the public boundaries — tag construction\n * (`getImplicitTags`, `validateTags`) and invalidation input\n * (`revalidatePath`, `revalidateTag`, `updateTag`) — so storage, comparison,\n * and the wire all see the same canonical form.\n *\n * The class is narrower than either transport accepts. Everything inside it\n * passes through byte-for-byte, including `,`, `/`, `%`, `[`, `]`, `_`, `-` and\n * `\\t`, which preserves the comma-separated header format and the\n * dynamic-segment markers in derived tags (`_N_T_/[slug]/page`).\n *\n * Properties:\n * - Fast-path: input that already fits the class is returned unchanged. This\n * makes the encoder idempotent on already-encoded `%xx` sequences.\n * - Matches *runs* of out-of-class code units so surrogate pairs (e.g. an\n * emoji) are handed to `encodeURIComponent` as a complete code point — a\n * per-code-unit regex would split the pair and throw `URIError`.\n */\nconst OUT_OF_CLASS_CHAR = /[^\\t\\x20-\\x7e]/\nconst OUT_OF_CLASS_RUN = /[^\\t\\x20-\\x7e]+/g\n\nexport function encodeHeaderSafe(value: string): string {\n return OUT_OF_CLASS_CHAR.test(value)\n ? value.replace(OUT_OF_CLASS_RUN, (run) => encodeURIComponent(run))\n : value\n}\n"],"names":["OUT_OF_CLASS_CHAR","OUT_OF_CLASS_RUN","encodeHeaderSafe","value","test","replace","run","encodeURIComponent"],"mappings":";;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BC,GACD,MAAMA,oBAAoB;AAC1B,MAAMC,mBAAmB;AAElB,SAASC,iBAAiBC,KAAa;IAC5C,OAAOH,kBAAkBI,IAAI,CAACD,SAC1BA,MAAME,OAAO,CAACJ,kBAAkB,CAACK,MAAQC,mBAAmBD,QAC5DH;AACN","ignoreList":[0]}}, + {"offset": {"line": 5062, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/lru-cache.ts"],"sourcesContent":["/**\n * Node in the doubly-linked list used for LRU tracking.\n * Each node represents a cache entry with bidirectional pointers.\n */\nclass LRUNode {\n public readonly key: string\n public data: T\n public size: number\n public prev: LRUNode | SentinelNode | null = null\n public next: LRUNode | SentinelNode | null = null\n\n constructor(key: string, data: T, size: number) {\n this.key = key\n this.data = data\n this.size = size\n }\n}\n\n/**\n * Sentinel node used for head/tail boundaries.\n * These nodes don't contain actual cache data but simplify list operations.\n */\nclass SentinelNode {\n public prev: LRUNode | SentinelNode | null = null\n public next: LRUNode | SentinelNode | null = null\n}\n\n/**\n * LRU (Least Recently Used) Cache implementation using a doubly-linked list\n * and hash map for O(1) operations.\n *\n * Algorithm:\n * - Uses a doubly-linked list to maintain access order (most recent at head)\n * - Hash map provides O(1) key-to-node lookup\n * - Sentinel head/tail nodes simplify edge case handling\n * - Size-based eviction supports custom size calculation functions\n *\n * Data Structure Layout:\n * HEAD <-> [most recent] <-> ... <-> [least recent] <-> TAIL\n *\n * Operations:\n * - get(): Move accessed node to head (mark as most recent)\n * - set(): Add new node at head, evict from tail if over capacity\n * - Eviction: Remove least recent node (tail.prev) when size exceeds limit\n */\nexport class LRUCache {\n private readonly cache: Map> = new Map()\n private readonly head: SentinelNode\n private readonly tail: SentinelNode\n private totalSize: number = 0\n private readonly maxSize: number\n private readonly calculateSize:\n | ((value: T, key: string) => number)\n | undefined\n private readonly onEvict: ((key: string, value: T) => void) | undefined\n\n constructor(\n maxSize: number,\n calculateSize?: (value: T, key: string) => number,\n onEvict?: (key: string, value: T) => void\n ) {\n this.maxSize = maxSize\n this.calculateSize = calculateSize\n this.onEvict = onEvict\n\n // Create sentinel nodes to simplify doubly-linked list operations\n // HEAD <-> TAIL (empty list)\n this.head = new SentinelNode()\n this.tail = new SentinelNode()\n this.head.next = this.tail\n this.tail.prev = this.head\n }\n\n /**\n * Adds a node immediately after the head (marks as most recently used).\n * Used when inserting new items or when an item is accessed.\n * PRECONDITION: node must be disconnected (prev/next should be null)\n */\n private addToHead(node: LRUNode): void {\n node.prev = this.head\n node.next = this.head.next\n // head.next is always non-null (points to tail or another node)\n this.head.next!.prev = node\n this.head.next = node\n }\n\n /**\n * Removes a node from its current position in the doubly-linked list.\n * Updates the prev/next pointers of adjacent nodes to maintain list integrity.\n * PRECONDITION: node must be connected (prev/next are non-null)\n */\n private removeNode(node: LRUNode): void {\n // Connected nodes always have non-null prev/next\n node.prev!.next = node.next\n node.next!.prev = node.prev\n }\n\n /**\n * Moves an existing node to the head position (marks as most recently used).\n * This is the core LRU operation - accessed items become most recent.\n */\n private moveToHead(node: LRUNode): void {\n this.removeNode(node)\n this.addToHead(node)\n }\n\n /**\n * Removes and returns the least recently used node (the one before tail).\n * This is called during eviction when the cache exceeds capacity.\n * PRECONDITION: cache is not empty (ensured by caller)\n */\n private removeTail(): LRUNode {\n const lastNode = this.tail.prev as LRUNode\n // tail.prev is always non-null and always LRUNode when cache is not empty\n this.removeNode(lastNode)\n return lastNode\n }\n\n /**\n * Sets a key-value pair in the cache.\n * If the key exists, updates the value and moves to head.\n * If new, adds at head and evicts from tail if necessary.\n *\n * Time Complexity:\n * - O(1) for uniform item sizes\n * - O(k) where k is the number of items evicted (can be O(N) for variable sizes)\n */\n public set(key: string, value: T): boolean {\n const size = this.calculateSize?.(value, key) ?? 1\n if (size <= 0) {\n throw new Error(\n `LRUCache: calculateSize returned ${size}, but size must be > 0. ` +\n `Items with size 0 would never be evicted, causing unbounded cache growth.`\n )\n }\n if (size > this.maxSize) {\n console.warn('Single item size exceeds maxSize')\n return false\n }\n\n const existing = this.cache.get(key)\n if (existing) {\n // Update existing node: adjust size and move to head (most recent)\n existing.data = value\n this.totalSize = this.totalSize - existing.size + size\n existing.size = size\n this.moveToHead(existing)\n } else {\n // Add new node at head (most recent position)\n const newNode = new LRUNode(key, value, size)\n this.cache.set(key, newNode)\n this.addToHead(newNode)\n this.totalSize += size\n }\n\n // Evict least recently used items until under capacity\n while (this.totalSize > this.maxSize && this.cache.size > 0) {\n const tail = this.removeTail()\n this.cache.delete(tail.key)\n this.totalSize -= tail.size\n this.onEvict?.(tail.key, tail.data)\n }\n\n return true\n }\n\n /**\n * Checks if a key exists in the cache.\n * This is a pure query operation - does NOT update LRU order.\n *\n * Time Complexity: O(1)\n */\n public has(key: string): boolean {\n return this.cache.has(key)\n }\n\n /**\n * Retrieves a value by key and marks it as most recently used.\n * Moving to head maintains the LRU property for future evictions.\n *\n * Time Complexity: O(1)\n */\n public get(key: string): T | undefined {\n const node = this.cache.get(key)\n if (!node) return undefined\n\n // Mark as most recently used by moving to head\n this.moveToHead(node)\n\n return node.data\n }\n\n /**\n * Returns an iterator over the cache entries. The order is outputted in the\n * order of most recently used to least recently used.\n */\n public *[Symbol.iterator](): IterableIterator<[string, T]> {\n let current = this.head.next\n while (current && current !== this.tail) {\n // Between head and tail, current is always LRUNode\n const node = current as LRUNode\n yield [node.key, node.data]\n current = current.next\n }\n }\n\n /**\n * Removes a specific key from the cache.\n * Updates both the hash map and doubly-linked list.\n *\n * Note: This is an explicit removal and does NOT trigger the `onEvict`\n * callback. Use this for intentional deletions where eviction tracking\n * is not needed.\n *\n * Time Complexity: O(1)\n */\n public remove(key: string): void {\n const node = this.cache.get(key)\n if (!node) return\n\n this.removeNode(node)\n this.cache.delete(key)\n this.totalSize -= node.size\n }\n\n /**\n * Returns the number of items in the cache.\n */\n public get size(): number {\n return this.cache.size\n }\n\n /**\n * Returns the current total size of all cached items.\n * This uses the custom size calculation if provided.\n */\n public get currentSize(): number {\n return this.totalSize\n }\n}\n"],"names":["LRUNode","constructor","key","data","size","prev","next","SentinelNode","LRUCache","maxSize","calculateSize","onEvict","cache","Map","totalSize","head","tail","addToHead","node","removeNode","moveToHead","removeTail","lastNode","set","value","Error","console","warn","existing","get","newNode","delete","has","undefined","Symbol","iterator","current","remove","currentSize"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 5245, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/patch-fetch.ts"],"sourcesContent":["import type {\n WorkAsyncStorage,\n WorkStore,\n} from '../app-render/work-async-storage.external'\n\nimport { AppRenderSpan, NextNodeServerSpan } from './trace/constants'\nimport {\n isRequestInsightsEnabled,\n recordRequestInsightFetch,\n} from './trace/request-insights'\nimport { getRequestInsightsIdentity } from './trace/request-insights-identity'\nimport { getTracer, SpanKind } from './trace/tracer'\nimport {\n CACHE_ONE_YEAR_SECONDS,\n INFINITE_CACHE,\n NEXT_CACHE_TAG_MAX_ITEMS,\n NEXT_CACHE_TAG_MAX_LENGTH,\n} from '../../lib/constants'\nimport { markCurrentScopeAsDynamic } from '../app-render/dynamic-rendering'\nimport { makeDynamicHangingPromise } from '../dynamic-rendering-utils'\nimport type { FetchMetric } from '../base-http'\nimport { createDedupeFetch } from './dedupe-fetch'\nimport {\n getCacheSignal,\n type RevalidateStore,\n type WorkUnitAsyncStorage,\n type WorkUnitStore,\n willConsumerServerCache,\n} from '../app-render/work-unit-async-storage.external'\nimport {\n CachedRouteKind,\n IncrementalCacheKind,\n type CachedFetchData,\n type ServerComponentsHmrCache,\n type SetIncrementalFetchCacheContext,\n} from '../response-cache'\nimport { cloneResponse } from './clone-response'\nimport type { IncrementalCache } from './incremental-cache'\nimport { RenderStage } from '../app-render/staged-rendering'\nimport { encodeHeaderSafe } from './encode-header-safe'\nimport type { Span } from './trace/tracer'\n\nconst isEdgeRuntime = process.env.NEXT_RUNTIME === 'edge'\n\n/**\n * Whether fetch cache configuration needs to be processed for the current work\n * unit before an origin fetch. Static prerender stores use it for dynamic\n * access tracking. Cache scopes apply it to their own cache policy, regardless\n * of which outer work unit created them. Development staged renders additionally\n * coordinate dynamic fetches with the dynamic render stage.\n */\nfunction shouldProcessFetchConfigForWorkUnit(\n workUnitStore: WorkUnitStore | undefined\n): boolean {\n if (!workUnitStore) {\n return false\n }\n\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'prerender-legacy':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n return true\n case 'request':\n return Boolean(\n process.env.NODE_ENV === 'development' &&\n process.env.__NEXT_CACHE_COMPONENTS &&\n workUnitStore.stagedRendering\n )\n case 'prerender-runtime':\n case 'validation-client':\n case 'build-time-generator':\n return false\n default:\n return workUnitStore satisfies never\n }\n}\n\ntype Fetcher = typeof fetch\n\ntype PatchedFetcher = Fetcher & {\n readonly __nextPatched: true\n readonly __nextGetStaticStore: () => WorkAsyncStorage\n readonly _nextOriginalFetch: Fetcher\n}\n\nexport const NEXT_PATCH_SYMBOL = Symbol.for('next-patch')\n\nfunction isFetchPatched() {\n return (globalThis as Record)[NEXT_PATCH_SYMBOL] === true\n}\n\nexport function validateRevalidate(\n revalidateVal: unknown,\n route: string\n): undefined | number {\n try {\n let normalizedRevalidate: number | undefined = undefined\n\n if (revalidateVal === false || revalidateVal === Infinity) {\n // Unlike Infinity, INFINITE_CACHE survives JSON serialization (e.g. in\n // the fetch cache).\n normalizedRevalidate = INFINITE_CACHE\n } else if (\n typeof revalidateVal === 'number' &&\n !isNaN(revalidateVal) &&\n revalidateVal > -1\n ) {\n normalizedRevalidate = revalidateVal\n } else if (typeof revalidateVal !== 'undefined') {\n throw new Error(\n `Invalid revalidate value \"${revalidateVal}\" on \"${route}\", must be a non-negative number or false`\n )\n }\n return normalizedRevalidate\n } catch (err: any) {\n // handle client component error from attempting to check revalidate value\n if (err instanceof Error && err.message.includes('Invalid revalidate')) {\n throw err\n }\n return undefined\n }\n}\n\nexport function validateTags(tags: any[], description: string) {\n const validTags: string[] = []\n const invalidTags: Array<{\n tag: any\n reason: string\n }> = []\n\n for (let i = 0; i < tags.length; i++) {\n const tag = tags[i]\n\n if (typeof tag !== 'string') {\n invalidTags.push({ tag, reason: 'invalid type, must be a string' })\n } else if (tag.length > NEXT_CACHE_TAG_MAX_LENGTH) {\n invalidTags.push({\n tag,\n reason: `exceeded max length of ${NEXT_CACHE_TAG_MAX_LENGTH}`,\n })\n } else {\n // Encode so a non-ASCII tag can be safely serialized into the\n // `x-next-cache-tags` HTTP header without tripping Node's header\n // validation. Length is checked on the raw input above.\n validTags.push(encodeHeaderSafe(tag))\n }\n\n if (validTags.length > NEXT_CACHE_TAG_MAX_ITEMS) {\n console.warn(\n `Warning: exceeded max tag count for ${description}, dropped tags:`,\n tags.slice(i).join(', ')\n )\n break\n }\n }\n\n if (invalidTags.length > 0) {\n console.warn(`Warning: invalid tags passed to ${description}: `)\n\n for (const { tag, reason } of invalidTags) {\n console.log(`tag: \"${tag}\" ${reason}`)\n }\n }\n return validTags\n}\n\nfunction trackFetchMetric(\n workStore: WorkStore,\n span: Span | undefined,\n ctx: Omit\n) {\n const metric = {\n ...ctx,\n end: performance.timeOrigin + performance.now(),\n idx: workStore.nextFetchId || 0,\n }\n\n span?.setAttributes({\n 'http.status_code': metric.status,\n 'next.fetch.idx': metric.idx,\n 'next.fetch.cache_status': metric.cacheStatus,\n 'next.fetch.cache_reason': metric.cacheReason,\n })\n\n if (isRequestInsightsEnabled()) {\n const requestInsightsIdentity = getRequestInsightsIdentity()\n const requestInsightsRequestId =\n requestInsightsIdentity?.requestId ?? workStore.requestId\n\n if (requestInsightsRequestId) {\n recordRequestInsightFetch(\n {\n requestId: requestInsightsRequestId,\n kind: requestInsightsIdentity?.kind,\n htmlRequestId:\n requestInsightsIdentity?.htmlRequestId ?? workStore.htmlRequestId,\n route: workStore.route,\n },\n {\n url: metric.url,\n method: metric.method,\n statusCode: metric.status,\n startTime: metric.start,\n durationMs: metric.end - metric.start,\n cacheStatus: metric.cacheStatus,\n cacheReason: metric.cacheReason,\n index: metric.idx,\n }\n )\n }\n }\n\n if (!workStore.shouldTrackFetchMetrics) {\n return\n }\n\n workStore.fetchMetrics ??= []\n\n workStore.fetchMetrics.push(metric)\n}\n\nasync function createCachedPrerenderResponse(\n res: Response,\n cacheKey: string,\n incrementalCacheContext: SetIncrementalFetchCacheContext | undefined,\n incrementalCache: IncrementalCache,\n revalidate: number,\n handleUnlock: () => Promise | void\n): Promise {\n // We are prerendering at build time or revalidate time with cacheComponents so we\n // need to buffer the response so we can guarantee it can be read in a\n // microtask.\n const bodyBuffer = await res.arrayBuffer()\n\n const fetchedData = {\n headers: Object.fromEntries(res.headers.entries()),\n body: Buffer.from(bodyBuffer).toString('base64'),\n status: res.status,\n url: res.url,\n }\n\n // We can skip setting the serverComponentsHmrCache because we aren't in dev\n // mode.\n\n if (incrementalCacheContext) {\n await incrementalCache.set(\n cacheKey,\n { kind: CachedRouteKind.FETCH, data: fetchedData, revalidate },\n incrementalCacheContext\n )\n }\n\n await handleUnlock()\n\n // We return a new Response to the caller.\n return new Response(bodyBuffer, {\n headers: res.headers,\n status: res.status,\n statusText: res.statusText,\n })\n}\n\nasync function createCachedDynamicResponse(\n workStore: WorkStore,\n res: Response,\n cacheKey: string,\n incrementalCacheContext: SetIncrementalFetchCacheContext | undefined,\n incrementalCache: IncrementalCache,\n serverComponentsHmrCache: ServerComponentsHmrCache | undefined,\n revalidate: number,\n input: RequestInfo | URL,\n handleUnlock: () => Promise | void,\n signal: AbortSignal | null\n): Promise {\n // We're cloning the response using this utility because there exists a bug in\n // the undici library around response cloning. See the following pull request\n // for more details: https://github.com/vercel/next.js/pull/73274\n const [cloned1, cloned2] = cloneResponse(res)\n\n // We are dynamically rendering including dev mode. We want to return the\n // response to the caller as soon as possible because it might stream over a\n // very long time.\n const cacheSetPromise = cloned1\n .arrayBuffer()\n .then(async (arrayBuffer) => {\n const bodyBuffer = Buffer.from(arrayBuffer)\n\n const fetchedData = {\n headers: Object.fromEntries(cloned1.headers.entries()),\n body: bodyBuffer.toString('base64'),\n status: cloned1.status,\n url: cloned1.url,\n }\n\n serverComponentsHmrCache?.set(cacheKey, fetchedData)\n\n if (incrementalCacheContext) {\n await incrementalCache.set(\n cacheKey,\n { kind: CachedRouteKind.FETCH, data: fetchedData, revalidate },\n incrementalCacheContext\n )\n }\n })\n .catch((error) => {\n // Don't warn if the request was aborted intentionally.\n if (!signal?.aborted) {\n console.warn(`Failed to set fetch cache`, input, error)\n }\n })\n .finally(handleUnlock)\n\n const pendingRevalidateKey = `cache-set-${cacheKey}`\n const pendingRevalidates = (workStore.pendingRevalidates ??= {})\n\n let pendingRevalidatePromise = Promise.resolve()\n if (pendingRevalidateKey in pendingRevalidates) {\n // There is already a pending revalidate entry that we need to await to\n // avoid race conditions.\n pendingRevalidatePromise = pendingRevalidates[pendingRevalidateKey]\n }\n\n pendingRevalidates[pendingRevalidateKey] = pendingRevalidatePromise\n .then(() => cacheSetPromise)\n .finally(() => {\n // If the pending revalidate is not present in the store, then we have\n // nothing to delete.\n if (!pendingRevalidates?.[pendingRevalidateKey]) {\n return\n }\n\n delete pendingRevalidates[pendingRevalidateKey]\n })\n\n return cloned2\n}\n\ninterface PatchableModule {\n workAsyncStorage: WorkAsyncStorage\n workUnitAsyncStorage: WorkUnitAsyncStorage\n}\n\nexport function createPatchedFetcher(\n originFetch: Fetcher,\n { workAsyncStorage, workUnitAsyncStorage }: PatchableModule\n): PatchedFetcher {\n // Create the patched fetch function.\n const patched = async function fetch(\n input: RequestInfo | URL,\n init: RequestInit | undefined\n ): Promise {\n let url: URL | undefined\n try {\n url = new URL(input instanceof Request ? input.url : input)\n url.username = ''\n url.password = ''\n } catch {\n // Error caused by malformed URL should be handled by native fetch\n url = undefined\n }\n const fetchUrl = url?.href ?? ''\n const method = init?.method?.toUpperCase() || 'GET'\n\n // Do create a new span trace for internal fetches in the\n // non-verbose mode.\n const isInternal = (init?.next as any)?.internal === true\n const hideSpan = process.env.NEXT_OTEL_FETCH_DISABLED === '1'\n // We don't track fetch metrics for internal fetches\n // so it's not critical that we have a start time, as it won't be recorded.\n // This is to workaround a flaky issue where performance APIs might\n // not be available and will require follow-up investigation.\n const fetchStart: number | undefined = isInternal\n ? undefined\n : performance.timeOrigin + performance.now()\n\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n let cacheSignal = workUnitStore ? getCacheSignal(workUnitStore) : null\n if (cacheSignal) {\n cacheSignal.beginRead()\n }\n\n const result = getTracer().trace(\n isInternal ? NextNodeServerSpan.internalFetch : AppRenderSpan.fetch,\n {\n hideSpan,\n kind: SpanKind.CLIENT,\n spanName: ['fetch', method, fetchUrl].filter(Boolean).join(' '),\n attributes: {\n 'http.url': fetchUrl,\n 'http.method': method,\n 'net.peer.name': url?.hostname,\n 'net.peer.port': url?.port || undefined,\n },\n },\n async (span) => {\n // If this is an internal fetch, we should not do any special treatment.\n if (isInternal) {\n return originFetch(input, init)\n }\n\n // If the workStore is not available, we can't do any\n // special treatment of fetch, therefore fallback to the original\n // fetch implementation.\n if (!workStore) {\n return originFetch(input, init)\n }\n\n // We should also fallback to the original fetch implementation if we\n // are in draft mode, it does not constitute a static generation.\n if (workStore.isDraftMode) {\n return originFetch(input, init)\n }\n\n const isRequestInput =\n input &&\n typeof input === 'object' &&\n typeof (input as Request).method === 'string'\n\n // With `fetch(new Request(url), init)`, native fetch lets `init`\n // override the base Request. Merge them into a single effective Request\n // so cacheability, the cache key, and the upstream request all describe\n // the same thing.\n if (isRequestInput && init) {\n // `next` (revalidate/tags) is Next-specific and dropped by\n // `new Request`, so keep it on `init` and move the rest onto input.\n const { next, ...overrides } = init\n input = new Request(input as Request, overrides)\n init = next ? { next } : undefined\n }\n\n const getRequestMeta = (field: string) => {\n // If request input is present but init is not, retrieve from input first.\n const value = (init as any)?.[field]\n return value || (isRequestInput ? (input as any)[field] : null)\n }\n\n let finalRevalidate: number | undefined = undefined\n const getNextField = (field: 'revalidate' | 'tags') => {\n return typeof init?.next?.[field] !== 'undefined'\n ? init?.next?.[field]\n : isRequestInput\n ? (input as any).next?.[field]\n : undefined\n }\n // RequestInit doesn't keep extra fields e.g. next so it's\n // only available if init is used separate\n const originalFetchRevalidate = getNextField('revalidate')\n let currentFetchRevalidate = originalFetchRevalidate\n const tags: string[] = validateTags(\n getNextField('tags') || [],\n `fetch ${input.toString()}`\n )\n\n let revalidateStore: RevalidateStore | undefined\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-runtime':\n // TODO: Stop accumulating tags in client prerender. (fallthrough)\n case 'prerender-client':\n case 'validation-client':\n case 'prerender-legacy':\n case 'cache':\n case 'private-cache':\n revalidateStore = workUnitStore\n break\n case 'request':\n case 'unstable-cache':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n if (revalidateStore) {\n if (Array.isArray(tags)) {\n // Collect tags onto parent caches or parent prerenders.\n const collectedTags =\n revalidateStore.tags ?? (revalidateStore.tags = [])\n for (const tag of tags) {\n if (!collectedTags.includes(tag)) {\n collectedTags.push(tag)\n }\n }\n }\n }\n\n const implicitTags = workUnitStore?.implicitTags\n\n let pageFetchCacheMode = workStore.fetchCache\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'unstable-cache':\n // Inside unstable-cache we treat it the same as force-no-store on\n // the page.\n pageFetchCacheMode = 'force-no-store'\n break\n case 'prerender':\n case 'prerender-client':\n case 'validation-client':\n case 'prerender-runtime':\n case 'prerender-legacy':\n case 'request':\n case 'cache':\n case 'private-cache':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n const isUsingNoStore = !!workStore.isUnstableNoStore\n\n let currentFetchCacheConfig = getRequestMeta('cache')\n let cacheReason = ''\n let cacheWarning: string | undefined\n\n if (\n typeof currentFetchCacheConfig === 'string' &&\n typeof currentFetchRevalidate !== 'undefined'\n ) {\n // If the revalidate value conflicts with the cache value, we should warn the user and unset the conflicting values.\n const isConflictingRevalidate =\n // revalidate: 0 and cache: force-cache\n (currentFetchCacheConfig === 'force-cache' &&\n currentFetchRevalidate === 0) ||\n // revalidate: >0 or revalidate: false and cache: no-store\n (currentFetchCacheConfig === 'no-store' &&\n (currentFetchRevalidate > 0 || currentFetchRevalidate === false))\n\n if (isConflictingRevalidate) {\n cacheWarning = `Specified \"cache: ${currentFetchCacheConfig}\" and \"revalidate: ${currentFetchRevalidate}\", only one should be specified.`\n currentFetchCacheConfig = undefined\n currentFetchRevalidate = undefined\n }\n }\n\n const hasExplicitFetchCacheOptOut =\n // fetch config itself signals not to cache\n currentFetchCacheConfig === 'no-cache' ||\n currentFetchCacheConfig === 'no-store' ||\n // the fetch isn't explicitly caching and the segment level cache config signals not to cache\n // note: `pageFetchCacheMode` is also set by being in an unstable_cache context.\n pageFetchCacheMode === 'force-no-store' ||\n pageFetchCacheMode === 'only-no-store'\n\n // If no explicit fetch cache mode is set, but dynamic = `force-dynamic` is set,\n // we shouldn't consider caching the fetch. This is because the `dynamic` cache\n // is considered a \"top-level\" cache mode, whereas something like `fetchCache` is more\n // fine-grained. Top-level modes are responsible for setting reasonable defaults for the\n // other configurations.\n const noFetchConfigAndForceDynamic =\n !pageFetchCacheMode &&\n !currentFetchCacheConfig &&\n !currentFetchRevalidate &&\n workStore.forceDynamic\n\n if (\n // force-cache was specified without a revalidate value. We set the revalidate value to false\n // which will signal the cache to not revalidate\n currentFetchCacheConfig === 'force-cache' &&\n typeof currentFetchRevalidate === 'undefined'\n ) {\n currentFetchRevalidate = false\n } else if (\n hasExplicitFetchCacheOptOut ||\n noFetchConfigAndForceDynamic\n ) {\n currentFetchRevalidate = 0\n }\n\n if (\n currentFetchCacheConfig === 'no-cache' ||\n currentFetchCacheConfig === 'no-store'\n ) {\n cacheReason = `cache: ${currentFetchCacheConfig}`\n }\n\n finalRevalidate = validateRevalidate(\n currentFetchRevalidate,\n workStore.route\n )\n\n const _headers = getRequestMeta('headers')\n const initHeaders: Headers =\n typeof _headers?.get === 'function'\n ? _headers\n : new Headers(_headers || {})\n\n const hasUnCacheableHeader =\n initHeaders.get('authorization') || initHeaders.get('cookie')\n\n const isUnCacheableMethod = !['get', 'head'].includes(\n getRequestMeta('method')?.toLowerCase() || 'get'\n )\n\n /**\n * We automatically disable fetch caching under the following conditions:\n * - Fetch cache configs are not set. Specifically:\n * - A page fetch cache mode is not set (export const fetchCache=...)\n * - A fetch cache mode is not set in the fetch call (fetch(url, { cache: ... }))\n * or the fetch cache mode is set to 'default'\n * - A fetch revalidate value is not set in the fetch call (fetch(url, { revalidate: ... }))\n * - OR the fetch comes after a configuration that triggered dynamic rendering (e.g., reading cookies())\n * and the fetch was considered uncacheable (e.g., POST method or has authorization headers)\n */\n const hasNoExplicitCacheConfig =\n // eslint-disable-next-line eqeqeq\n pageFetchCacheMode == undefined &&\n // eslint-disable-next-line eqeqeq\n (currentFetchCacheConfig == undefined ||\n // when considering whether to opt into the default \"no-cache\" fetch semantics,\n // a \"default\" cache config should be treated the same as no cache config\n currentFetchCacheConfig === 'default') &&\n // eslint-disable-next-line eqeqeq\n currentFetchRevalidate == undefined\n\n let autoNoCache = Boolean(\n (hasUnCacheableHeader || isUnCacheableMethod) &&\n revalidateStore?.revalidate === 0\n )\n\n let isImplicitBuildTimeCache = false\n\n if (!autoNoCache && hasNoExplicitCacheConfig) {\n // We don't enable automatic no-cache behavior during build-time\n // prerendering so that we can still leverage the fetch cache between\n // export workers.\n if (workStore.isBuildTimePrerendering) {\n isImplicitBuildTimeCache = true\n } else {\n autoNoCache = true\n }\n }\n\n // If we have no cache config, and we're in Dynamic I/O prerendering,\n // it'll be a dynamic call. We don't have to issue that dynamic call.\n if (hasNoExplicitCacheConfig && workUnitStore !== undefined) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-runtime':\n // While we don't want to do caching in the client scope we know the\n // fetch will be dynamic for cacheComponents so we may as well avoid the\n // call here. (fallthrough)\n case 'prerender-client':\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n\n return makeDynamicHangingPromise(\n workUnitStore.renderSignal,\n workStore.route,\n 'fetch()'\n )\n case 'validation-client':\n break\n case 'request':\n if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore.stagedRendering\n ) {\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n await workUnitStore.stagedRendering.waitForStage(\n RenderStage.Dynamic\n )\n }\n break\n case 'prerender-legacy':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n switch (pageFetchCacheMode) {\n case 'force-no-store': {\n cacheReason = 'fetchCache = force-no-store'\n break\n }\n case 'only-no-store': {\n if (\n currentFetchCacheConfig === 'force-cache' ||\n (typeof finalRevalidate !== 'undefined' && finalRevalidate > 0)\n ) {\n throw new Error(\n `cache: 'force-cache' used on fetch for ${fetchUrl} with 'export const fetchCache = 'only-no-store'`\n )\n }\n cacheReason = 'fetchCache = only-no-store'\n break\n }\n case 'only-cache': {\n if (currentFetchCacheConfig === 'no-store') {\n throw new Error(\n `cache: 'no-store' used on fetch for ${fetchUrl} with 'export const fetchCache = 'only-cache'`\n )\n }\n break\n }\n case 'force-cache': {\n if (\n typeof currentFetchRevalidate === 'undefined' ||\n currentFetchRevalidate === 0\n ) {\n cacheReason = 'fetchCache = force-cache'\n finalRevalidate = INFINITE_CACHE\n }\n break\n }\n case 'default-cache':\n case 'default-no-store':\n case 'auto':\n case undefined:\n // sometimes we won't match the above cases. the reason we don't move\n // everything to this switch is the use of autoNoCache which is not a fetchCacheMode\n // I suspect this could be unified with fetchCacheMode however in which case we could\n // simplify the switch case and ensure we have an exhaustive switch handling all modes\n break\n default:\n pageFetchCacheMode satisfies never\n }\n\n if (typeof finalRevalidate === 'undefined') {\n if (pageFetchCacheMode === 'default-cache' && !isUsingNoStore) {\n finalRevalidate = INFINITE_CACHE\n cacheReason = 'fetchCache = default-cache'\n } else if (pageFetchCacheMode === 'default-no-store') {\n finalRevalidate = 0\n cacheReason = 'fetchCache = default-no-store'\n } else if (isUsingNoStore) {\n finalRevalidate = 0\n cacheReason = 'noStore call'\n } else if (autoNoCache) {\n finalRevalidate = 0\n cacheReason = 'auto no cache'\n } else {\n // TODO: should we consider this case an invariant?\n cacheReason = 'auto cache'\n finalRevalidate = revalidateStore\n ? revalidateStore.revalidate\n : INFINITE_CACHE\n }\n } else if (!cacheReason) {\n cacheReason = `revalidate: ${finalRevalidate}`\n }\n\n if (\n // when force static is configured we don't bail from\n // `revalidate: 0` values\n !(workStore.forceStatic && finalRevalidate === 0) &&\n // we don't consider autoNoCache to switch to dynamic for ISR\n !autoNoCache &&\n // If the revalidate value isn't currently set or the value is less\n // than the current revalidate value, we should update the revalidate\n // value.\n revalidateStore &&\n finalRevalidate < revalidateStore.revalidate\n ) {\n // If we were setting the revalidate value to 0, we should try to\n // postpone instead first.\n if (finalRevalidate === 0) {\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'prerender-runtime':\n // If we're in an instant validation, a dynamic fetch won't\n // have time to resolve during the validation prerender anyway,\n // so we leave it hanging. This can cause false negatives in shared parents,\n // but we accept that for now, because client data fetching is non-idiomatic.\n // eslint-disable-next-line no-fallthrough\n case 'validation-client':\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n return makeDynamicHangingPromise(\n workUnitStore.renderSignal,\n workStore.route,\n 'fetch()'\n )\n case 'request':\n if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore.stagedRendering\n ) {\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n await workUnitStore.stagedRendering.waitForStage(\n RenderStage.Dynamic\n )\n }\n break\n case 'prerender-legacy':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n markCurrentScopeAsDynamic(\n workStore,\n workUnitStore,\n `revalidate: 0 fetch ${input} ${workStore.route}`\n )\n }\n\n // We only want to set the revalidate store's revalidate time if it\n // was explicitly set for the fetch call, i.e.\n // originalFetchRevalidate.\n if (revalidateStore && originalFetchRevalidate === finalRevalidate) {\n revalidateStore.revalidate = finalRevalidate\n }\n }\n\n const isCacheableRevalidate =\n typeof finalRevalidate === 'number' && finalRevalidate > 0\n\n let cacheKey: string | undefined\n const { incrementalCache } = workStore\n let isHmrRefresh = false\n let serverComponentsHmrCache: ServerComponentsHmrCache | undefined\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'request':\n case 'cache':\n case 'private-cache':\n isHmrRefresh = workUnitStore.isHmrRefresh ?? false\n serverComponentsHmrCache = workUnitStore.serverComponentsHmrCache\n break\n case 'prerender':\n case 'prerender-client':\n case 'validation-client':\n case 'prerender-runtime':\n case 'prerender-legacy':\n case 'unstable-cache':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n if (\n incrementalCache &&\n (isCacheableRevalidate || serverComponentsHmrCache)\n ) {\n try {\n cacheKey = await incrementalCache.generateCacheKey(\n fetchUrl,\n isRequestInput ? (input as RequestInit) : init\n )\n } catch (cause) {\n console.error(`Failed to generate cache key for`, input, cause)\n }\n }\n\n const fetchIdx = workStore.nextFetchId ?? 1\n workStore.nextFetchId = fetchIdx + 1\n\n let handleUnlock: () => Promise | void = () => {}\n\n const doOriginalFetch = async (\n isStale?: boolean,\n cacheReasonOverride?: string\n ) => {\n const requestInputFields = [\n 'cache',\n 'credentials',\n 'headers',\n 'integrity',\n 'keepalive',\n 'method',\n 'mode',\n 'redirect',\n 'referrer',\n 'referrerPolicy',\n 'window',\n 'duplex',\n\n // don't pass through signal when revalidating\n ...(isStale ? [] : ['signal']),\n ]\n\n if (isRequestInput) {\n const reqInput: Request = input as any\n const reqOptions: RequestInit = {\n body: (reqInput as any)._ogBody || reqInput.body,\n }\n\n for (const field of requestInputFields) {\n // @ts-expect-error custom fields\n reqOptions[field] = reqInput[field]\n }\n input = new Request(reqInput.url, reqOptions)\n } else if (init) {\n const { _ogBody, body, signal, ...otherInput } =\n init as RequestInit & { _ogBody?: any }\n init = {\n ...otherInput,\n body: _ogBody || body,\n signal: isStale ? undefined : signal,\n }\n }\n\n // add metadata to init without editing the original\n const clonedInit = {\n ...init,\n next: { ...init?.next, fetchType: 'origin', fetchIdx },\n }\n\n return originFetch(input, clonedInit)\n .then(async (res) => {\n if (!isStale && fetchStart) {\n trackFetchMetric(workStore, span, {\n start: fetchStart,\n url: fetchUrl,\n cacheReason: cacheReasonOverride || cacheReason,\n cacheStatus:\n finalRevalidate === 0 || cacheReasonOverride\n ? 'skip'\n : 'miss',\n cacheWarning,\n status: res.status,\n method: clonedInit.method || 'GET',\n })\n }\n if (\n res.status === 200 &&\n incrementalCache &&\n cacheKey &&\n (isCacheableRevalidate || serverComponentsHmrCache)\n ) {\n const normalizedRevalidate =\n finalRevalidate >= INFINITE_CACHE\n ? CACHE_ONE_YEAR_SECONDS\n : finalRevalidate\n\n const incrementalCacheConfig:\n | SetIncrementalFetchCacheContext\n | undefined = isCacheableRevalidate\n ? {\n fetchCache: true,\n fetchUrl,\n fetchIdx,\n tags,\n isImplicitBuildTimeCache,\n }\n : undefined\n\n switch (workUnitStore?.type) {\n case 'prerender':\n case 'prerender-client':\n case 'validation-client':\n case 'prerender-runtime':\n return createCachedPrerenderResponse(\n res,\n cacheKey,\n incrementalCacheConfig,\n incrementalCache,\n normalizedRevalidate,\n handleUnlock\n )\n case 'request':\n if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore.stagedRendering &&\n workUnitStore.cacheSignal &&\n isCacheableRevalidate\n ) {\n // We're filling caches for a staged render with an\n // explicit cache config, so we need to wait for the\n // response to finish instead of streaming. For HMR-only\n // caching (no explicit revalidate), we fall through to\n // createCachedDynamicResponse which handles streaming\n // and abort gracefully.\n return createCachedPrerenderResponse(\n res,\n cacheKey,\n incrementalCacheConfig,\n incrementalCache,\n normalizedRevalidate,\n handleUnlock\n )\n }\n // fallthrough\n case 'prerender-legacy':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n case undefined:\n return createCachedDynamicResponse(\n workStore,\n res,\n cacheKey,\n incrementalCacheConfig,\n incrementalCache,\n serverComponentsHmrCache,\n normalizedRevalidate,\n input,\n handleUnlock,\n getRequestMeta('signal')\n )\n default:\n workUnitStore satisfies never\n }\n }\n\n // we had response that we determined shouldn't be cached so we return it\n // and don't cache it. This also needs to unlock the cache lock we acquired.\n await handleUnlock()\n\n return res\n })\n .catch((error) => {\n handleUnlock()\n throw error\n })\n }\n\n let cacheReasonOverride\n let isForegroundRevalidate = false\n let isHmrRefreshCache = false\n\n if (cacheKey && incrementalCache) {\n let cachedFetchData: CachedFetchData | undefined\n\n if (isHmrRefresh && serverComponentsHmrCache) {\n cachedFetchData = serverComponentsHmrCache.get(cacheKey)\n isHmrRefreshCache = true\n }\n\n if (isCacheableRevalidate && !cachedFetchData) {\n handleUnlock = await incrementalCache.lock(cacheKey)\n const entry = workStore.isOnDemandRevalidate\n ? null\n : await incrementalCache.get(cacheKey, {\n kind: IncrementalCacheKind.FETCH,\n revalidate: finalRevalidate,\n fetchUrl,\n fetchIdx,\n tags,\n softTags: implicitTags?.tags,\n })\n\n if (hasNoExplicitCacheConfig && workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'validation-client':\n case 'prerender-runtime':\n // We sometimes use the cache to dedupe fetches that do not\n // specify a cache configuration. In these cases we want to\n // make sure we still exclude them from prerenders if\n // cacheComponents is on so we introduce an artificial task boundary\n // here.\n await getTimeoutBoundary()\n break\n case 'request':\n if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore.stagedRendering\n ) {\n await workUnitStore.stagedRendering.waitForStage(\n RenderStage.Dynamic\n )\n }\n break\n case 'prerender-legacy':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n if (entry) {\n await handleUnlock()\n } else {\n // in dev, incremental cache response will be null in case the browser adds `cache-control: no-cache` in the request headers\n // TODO: it seems like we also hit this after revalidates in dev?\n cacheReasonOverride = 'cache-control: no-cache (hard refresh)'\n }\n\n if (entry?.value && entry.value.kind === CachedRouteKind.FETCH) {\n // If the consumer will persist this result in a server cache,\n // wait for fresh data so it doesn't persist a stale value.\n if (willConsumerServerCache(workUnitStore) && entry.isStale) {\n isForegroundRevalidate = true\n } else {\n if (entry.isStale) {\n workStore.pendingRevalidates ??= {}\n if (!workStore.pendingRevalidates[cacheKey]) {\n const pendingRevalidate = doOriginalFetch(true)\n .then(async (response) => ({\n body: await response.arrayBuffer(),\n headers: response.headers,\n status: response.status,\n statusText: response.statusText,\n }))\n .finally(() => {\n workStore.pendingRevalidates ??= {}\n delete workStore.pendingRevalidates[cacheKey || '']\n })\n\n // Attach the empty catch here so we don't get a \"unhandled\n // promise rejection\" warning.\n pendingRevalidate.catch(console.error)\n\n workStore.pendingRevalidates[cacheKey] = pendingRevalidate\n }\n }\n\n cachedFetchData = entry.value.data\n }\n }\n }\n\n if (cachedFetchData) {\n if (fetchStart) {\n trackFetchMetric(workStore, span, {\n start: fetchStart,\n url: fetchUrl,\n cacheReason,\n cacheStatus: isHmrRefreshCache ? 'hmr' : 'hit',\n cacheWarning,\n status: cachedFetchData.status || 200,\n method: init?.method || 'GET',\n })\n }\n\n const response = new Response(\n Buffer.from(cachedFetchData.body, 'base64'),\n {\n headers: cachedFetchData.headers,\n status: cachedFetchData.status,\n }\n )\n\n Object.defineProperty(response, 'url', {\n value: cachedFetchData.url,\n })\n\n return response\n }\n }\n\n if (\n init &&\n typeof init === 'object' &&\n shouldProcessFetchConfigForWorkUnit(workUnitStore)\n ) {\n const { cache } = init\n\n // Delete `cache` property as Cloudflare Workers will throw an error\n if (isEdgeRuntime) delete init.cache\n\n if (cache === 'no-store') {\n // If enabled, we should bail out of static generation.\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'prerender-runtime':\n case 'validation-client':\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n return makeDynamicHangingPromise(\n workUnitStore.renderSignal,\n workStore.route,\n 'fetch()'\n )\n case 'request':\n if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore.stagedRendering\n ) {\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n await workUnitStore.stagedRendering.waitForStage(\n RenderStage.Dynamic\n )\n }\n break\n case 'prerender-legacy':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n markCurrentScopeAsDynamic(\n workStore,\n workUnitStore,\n `no-store fetch ${input} ${workStore.route}`\n )\n }\n\n const hasNextConfig = 'next' in init\n const { next = {} } = init\n if (\n typeof next.revalidate === 'number' &&\n revalidateStore &&\n next.revalidate < revalidateStore.revalidate\n ) {\n if (next.revalidate === 0) {\n // If enabled, we should bail out of static generation.\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'prerender-runtime':\n case 'validation-client':\n return makeDynamicHangingPromise(\n workUnitStore.renderSignal,\n workStore.route,\n 'fetch()'\n )\n case 'request':\n if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore.stagedRendering\n ) {\n await workUnitStore.stagedRendering.waitForStage(\n RenderStage.Dynamic\n )\n }\n break\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'prerender-legacy':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n markCurrentScopeAsDynamic(\n workStore,\n workUnitStore,\n `revalidate: 0 fetch ${input} ${workStore.route}`\n )\n }\n\n if (!workStore.forceStatic || next.revalidate !== 0) {\n revalidateStore.revalidate = next.revalidate\n }\n }\n if (hasNextConfig) delete init.next\n }\n\n // if we are revalidating the whole page via time or on-demand and\n // the fetch cache entry is stale we should still de-dupe the\n // origin hit if it's a cache-able entry\n if (cacheKey && isForegroundRevalidate) {\n const pendingRevalidateKey = cacheKey\n workStore.pendingRevalidates ??= {}\n let pendingRevalidate =\n workStore.pendingRevalidates[pendingRevalidateKey]\n\n if (pendingRevalidate) {\n const revalidatedResult: {\n body: ArrayBuffer\n headers: Headers\n status: number\n statusText: string\n } = await pendingRevalidate\n return new Response(revalidatedResult.body, {\n headers: revalidatedResult.headers,\n status: revalidatedResult.status,\n statusText: revalidatedResult.statusText,\n })\n }\n\n // We used to just resolve the Response and clone it however for\n // static generation with cacheComponents we need the response to be able to\n // be resolved in a microtask and cloning the response will never have\n // a body that can resolve in a microtask in node (as observed through\n // experimentation) So instead we await the body and then when it is\n // available we construct manually cloned Response objects with the\n // body as an ArrayBuffer. This will be resolvable in a microtask\n // making it compatible with cacheComponents.\n const pendingResponse = doOriginalFetch(true, cacheReasonOverride)\n // We're cloning the response using this utility because there\n // exists a bug in the undici library around response cloning.\n // See the following pull request for more details:\n // https://github.com/vercel/next.js/pull/73274\n .then(cloneResponse)\n\n pendingRevalidate = pendingResponse\n .then(async (responses) => {\n const response = responses[0]\n return {\n body: await response.arrayBuffer(),\n headers: response.headers,\n status: response.status,\n statusText: response.statusText,\n }\n })\n .finally(() => {\n // If the pending revalidate is not present in the store, then\n // we have nothing to delete.\n if (!workStore.pendingRevalidates?.[pendingRevalidateKey]) {\n return\n }\n\n delete workStore.pendingRevalidates[pendingRevalidateKey]\n })\n\n // Attach the empty catch here so we don't get a \"unhandled promise\n // rejection\" warning\n pendingRevalidate.catch(() => {})\n\n workStore.pendingRevalidates[pendingRevalidateKey] = pendingRevalidate\n\n return pendingResponse.then((responses) => responses[1])\n } else {\n return doOriginalFetch(false, cacheReasonOverride)\n }\n }\n )\n\n if (cacheSignal) {\n try {\n return await result\n } finally {\n if (cacheSignal) {\n cacheSignal.endRead()\n }\n }\n }\n return result\n }\n\n // Attach the necessary properties to the patched fetch function.\n // We don't use this to determine if the fetch function has been patched,\n // but for external consumers to determine if the fetch function has been\n // patched.\n patched.__nextPatched = true as const\n patched.__nextGetStaticStore = () => workAsyncStorage\n patched._nextOriginalFetch = originFetch\n ;(globalThis as Record)[NEXT_PATCH_SYMBOL] = true\n\n // Assign the function name also as a name property, so that it's preserved\n // even when mangling is enabled.\n Object.defineProperty(patched, 'name', { value: 'fetch', writable: false })\n\n return patched\n}\n\n// we patch fetch to collect cache information used for\n// determining if a page is static or not\nexport function patchFetch(options: PatchableModule) {\n // If we've already patched fetch, we should not patch it again.\n if (isFetchPatched()) return\n\n // Grab the original fetch function. We'll attach this so we can use it in\n // the patched fetch function.\n const original = createDedupeFetch(globalThis.fetch)\n\n // Set the global fetch to the patched fetch.\n globalThis.fetch = createPatchedFetcher(original, options)\n}\n\nlet currentTimeoutBoundary: null | Promise = null\nfunction getTimeoutBoundary() {\n if (!currentTimeoutBoundary) {\n currentTimeoutBoundary = new Promise((r) => {\n setTimeout(() => {\n currentTimeoutBoundary = null\n r()\n }, 0)\n })\n }\n return currentTimeoutBoundary\n}\n"],"names":["AppRenderSpan","NextNodeServerSpan","isRequestInsightsEnabled","recordRequestInsightFetch","getRequestInsightsIdentity","getTracer","SpanKind","CACHE_ONE_YEAR_SECONDS","INFINITE_CACHE","NEXT_CACHE_TAG_MAX_ITEMS","NEXT_CACHE_TAG_MAX_LENGTH","markCurrentScopeAsDynamic","makeDynamicHangingPromise","createDedupeFetch","getCacheSignal","willConsumerServerCache","CachedRouteKind","IncrementalCacheKind","cloneResponse","RenderStage","encodeHeaderSafe","isEdgeRuntime","process","env","NEXT_RUNTIME","shouldProcessFetchConfigForWorkUnit","workUnitStore","type","Boolean","NODE_ENV","__NEXT_CACHE_COMPONENTS","stagedRendering","NEXT_PATCH_SYMBOL","Symbol","for","isFetchPatched","globalThis","validateRevalidate","revalidateVal","route","normalizedRevalidate","undefined","Infinity","isNaN","Error","err","message","includes","validateTags","tags","description","validTags","invalidTags","i","length","tag","push","reason","console","warn","slice","join","log","trackFetchMetric","workStore","span","ctx","metric","end","performance","timeOrigin","now","idx","nextFetchId","setAttributes","status","cacheStatus","cacheReason","requestInsightsIdentity","requestInsightsRequestId","requestId","kind","htmlRequestId","url","method","statusCode","startTime","start","durationMs","index","shouldTrackFetchMetrics","fetchMetrics","createCachedPrerenderResponse","res","cacheKey","incrementalCacheContext","incrementalCache","revalidate","handleUnlock","bodyBuffer","arrayBuffer","fetchedData","headers","Object","fromEntries","entries","body","Buffer","from","toString","set","FETCH","data","Response","statusText","createCachedDynamicResponse","serverComponentsHmrCache","input","signal","cloned1","cloned2","cacheSetPromise","then","catch","error","aborted","finally","pendingRevalidateKey","pendingRevalidates","pendingRevalidatePromise","Promise","resolve","createPatchedFetcher","originFetch","workAsyncStorage","workUnitAsyncStorage","patched","fetch","init","URL","Request","username","password","fetchUrl","href","toUpperCase","isInternal","next","internal","hideSpan","NEXT_OTEL_FETCH_DISABLED","fetchStart","getStore","cacheSignal","beginRead","result","trace","internalFetch","CLIENT","spanName","filter","attributes","hostname","port","getRequestMeta","isDraftMode","isRequestInput","overrides","field","value","finalRevalidate","getNextField","originalFetchRevalidate","currentFetchRevalidate","revalidateStore","Array","isArray","collectedTags","implicitTags","pageFetchCacheMode","fetchCache","isUsingNoStore","isUnstableNoStore","currentFetchCacheConfig","cacheWarning","isConflictingRevalidate","hasExplicitFetchCacheOptOut","noFetchConfigAndForceDynamic","forceDynamic","_headers","initHeaders","get","Headers","hasUnCacheableHeader","isUnCacheableMethod","toLowerCase","hasNoExplicitCacheConfig","autoNoCache","isImplicitBuildTimeCache","isBuildTimePrerendering","endRead","renderSignal","waitForStage","Dynamic","forceStatic","isCacheableRevalidate","isHmrRefresh","generateCacheKey","cause","fetchIdx","doOriginalFetch","isStale","cacheReasonOverride","requestInputFields","reqInput","reqOptions","_ogBody","otherInput","clonedInit","fetchType","incrementalCacheConfig","isForegroundRevalidate","isHmrRefreshCache","cachedFetchData","lock","entry","isOnDemandRevalidate","softTags","getTimeoutBoundary","pendingRevalidate","response","defineProperty","cache","hasNextConfig","revalidatedResult","pendingResponse","responses","__nextPatched","__nextGetStaticStore","_nextOriginalFetch","writable","patchFetch","options","original","currentTimeoutBoundary","r","setTimeout"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 6269, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/route-cache-key.ts"],"sourcesContent":["import type { RouteDefinition } from '../route-definitions/route-definition'\nimport type {\n DynamicPrerenderManifestRoute,\n PrerenderManifestRoute,\n} from '../../build'\nimport { normalizePagePath } from '../../shared/lib/page-path/normalize-page-path'\nimport { normalizeLocalePath } from '../../shared/lib/i18n/normalize-locale-path'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport { AppPathnameNormalizer } from '../normalizers/built/app/app-pathname-normalizer'\nimport { RouteKind } from '../route-kind'\n\nexport const ROUTE_CACHE_DIRECTORY = 'route-cache'\n\nexport type ResponseCacheOwner = {\n readonly kind: RouteKind\n /** Canonical Pages pathname or full App module name, including groups and slots. */\n readonly sourceRoute: string\n}\n\nconst appPathnameNormalizer = new AppPathnameNormalizer()\n\n/** Convert a runtime route definition to the identity used by response caches. */\nexport function getResponseCacheOwner(\n definition: Pick\n): ResponseCacheOwner {\n return {\n kind: definition.kind,\n // Pages module names can include a trailing /index in Turbopack. Their\n // pathname matches the manifest's source in both bundlers. App modules\n // retain groups and parallel slots in their cache identity.\n sourceRoute:\n definition.kind === RouteKind.PAGES\n ? definition.pathname\n : definition.page,\n }\n}\n\n/**\n * Prerender metadata already identifies its source route. Compare that source\n * with the selected module before using its metadata, including negative\n * entries and partially specialized fallback shells. Cache storage continues\n * to use the full module identity, including groups and parallel slots.\n */\nexport function isRouteCacheOwner(\n pathname: string,\n owner: ResponseCacheOwner,\n prerender:\n | Pick\n | Pick\n | undefined,\n locales?: readonly string[]\n): boolean {\n if (!prerender) {\n return false\n }\n\n // Pages have JSON data routes, App Pages have RSC data routes, and App\n // Route Handlers have no separate data route.\n const kind =\n prerender.dataRoute === null\n ? RouteKind.APP_ROUTE\n : prerender.dataRoute.endsWith('.json')\n ? RouteKind.PAGES\n : prerender.dataRoute.endsWith('.rsc')\n ? RouteKind.APP_PAGE\n : undefined\n if (kind !== owner.kind) {\n return false\n }\n\n const source =\n 'srcRoute' in prerender ? prerender.srcRoute : prerender.fallbackSourceRoute\n const prerenderOwner =\n source ??\n (kind === RouteKind.PAGES\n ? normalizeLocalePath(pathname, locales).pathname\n : pathname)\n\n return (\n prerenderOwner ===\n (kind === RouteKind.PAGES\n ? owner.sourceRoute\n : appPathnameNormalizer.normalize(owner.sourceRoute))\n )\n}\n\n/**\n * Response keys are opaque to cache handlers. Hash the source route into one\n * fixed-length directory, preserving App groups and slots without expanding\n * Unicode names or repeating the source directory hierarchy on disk. The\n * pathname stays readable and is normalized exactly once before namespacing.\n */\nexport function getRouteCacheKey(\n pathname: string,\n owner: ResponseCacheOwner\n): string {\n if (!owner) {\n throw new InvariantError('Response cache requires a source route')\n }\n const { sourceRoute } = owner\n let source: string\n if (process.env.NEXT_RUNTIME === 'edge') {\n const sha256 =\n require('next/dist/compiled/hash.js/sha256') as typeof import('next/dist/compiled/hash.js/sha256')\n source = sha256()\n .update(new TextEncoder().encode(sourceRoute))\n .digest('hex')\n } else {\n const { createHash } = require('crypto') as typeof import('crypto')\n source = createHash('sha256').update(sourceRoute).digest('hex')\n }\n return `/${ROUTE_CACHE_DIRECTORY}/${owner.kind}/${source}/$${normalizePagePath(pathname)}`\n}\n"],"names":["normalizePagePath","normalizeLocalePath","InvariantError","AppPathnameNormalizer","RouteKind","ROUTE_CACHE_DIRECTORY","appPathnameNormalizer","getResponseCacheOwner","definition","kind","sourceRoute","PAGES","pathname","page","isRouteCacheOwner","owner","prerender","locales","dataRoute","APP_ROUTE","endsWith","APP_PAGE","undefined","source","srcRoute","fallbackSourceRoute","prerenderOwner","normalize","getRouteCacheKey","process","env","NEXT_RUNTIME","sha256","require","update","TextEncoder","encode","digest","createHash"],"mappings":";;;;;;;;;;AAKA,SAASA,iBAAiB,QAAQ,iDAAgD;AAClF,SAASC,mBAAmB,QAAQ,8CAA6C;AACjF,SAASC,cAAc,QAAQ,mCAAkC;AACjE,SAASC,qBAAqB,QAAQ,mDAAkD;AACxF,SAASC,SAAS,QAAQ,gBAAe;;;;;;AAElC,MAAMC,wBAAwB,cAAa;AAQlD,MAAMC,wBAAwB,IAAIH,wOAAAA;AAG3B,SAASI,sBACdC,UAA+D;IAE/D,OAAO;QACLC,MAAMD,WAAWC,IAAI;QACrB,uEAAuE;QACvE,uEAAuE;QACvE,4DAA4D;QAC5DC,aACEF,WAAWC,IAAI,KAAKL,6KAAAA,CAAUO,KAAK,GAC/BH,WAAWI,QAAQ,GACnBJ,WAAWK,IAAI;IACvB;AACF;AAQO,SAASC,kBACdF,QAAgB,EAChBG,KAAyB,EACzBC,SAGa,EACbC,OAA2B;IAE3B,IAAI,CAACD,WAAW;QACd,OAAO;IACT;IAEA,uEAAuE;IACvE,8CAA8C;IAC9C,MAAMP,OACJO,UAAUE,SAAS,KAAK,OACpBd,6KAAAA,CAAUe,SAAS,GACnBH,UAAUE,SAAS,CAACE,QAAQ,CAAC,WAC3BhB,6KAAAA,CAAUO,KAAK,GACfK,UAAUE,SAAS,CAACE,QAAQ,CAAC,UAC3BhB,6KAAAA,CAAUiB,QAAQ,GAClBC;IACV,IAAIb,SAASM,MAAMN,IAAI,EAAE;QACvB,OAAO;IACT;IAEA,MAAMc,SACJ,cAAcP,YAAYA,UAAUQ,QAAQ,GAAGR,UAAUS,mBAAmB;IAC9E,MAAMC,iBACJH,UACCd,CAAAA,SAASL,6KAAAA,CAAUO,KAAK,OACrBV,oNAAAA,EAAoBW,UAAUK,SAASL,QAAQ,GAC/CA,QAAO;IAEb,OACEc,mBACCjB,CAAAA,SAASL,6KAAAA,CAAUO,KAAK,GACrBI,MAAML,WAAW,GACjBJ,sBAAsBqB,SAAS,CAACZ,MAAML,WAAW,CAAA;AAEzD;AAQO,SAASkB,iBACdhB,QAAgB,EAChBG,KAAyB;IAEzB,IAAI,CAACA,OAAO;QACV,MAAM,IAAIb,8LAAAA,CAAe;IAC3B;IACA,MAAM,EAAEQ,WAAW,EAAE,GAAGK;IACxB,IAAIQ;IACJ,IAAIM,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;SAMlC;QACL,MAAM,EAAEO,UAAU,EAAE,GAAGL,QAAQ;QAC/BV,SAASe,WAAW,UAAUJ,MAAM,CAACxB,aAAa2B,MAAM,CAAC;IAC3D;IACA,OAAO,CAAC,CAAC,EAAEhC,sBAAsB,CAAC,EAAEU,MAAMN,IAAI,CAAC,CAAC,EAAEc,OAAO,EAAE,MAAEvB,wNAAAA,EAAkBY,WAAW;AAC5F","ignoreList":[0]}}, + {"offset": {"line": 6332, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/trace/constants.ts"],"sourcesContent":["/**\n * Contains predefined constants for the trace span name in next/server.\n *\n * Currently, next/server/tracer is internal implementation only for tracking\n * next.js's implementation only with known span names defined here.\n **/\n\n// eslint typescript has a bug with TS enums\n\nenum BaseServerSpan {\n handleRequest = 'BaseServer.handleRequest',\n run = 'BaseServer.run',\n pipe = 'BaseServer.pipe',\n getStaticHTML = 'BaseServer.getStaticHTML',\n render = 'BaseServer.render',\n renderToResponseWithComponents = 'BaseServer.renderToResponseWithComponents',\n renderToResponse = 'BaseServer.renderToResponse',\n renderToHTML = 'BaseServer.renderToHTML',\n renderError = 'BaseServer.renderError',\n renderErrorToResponse = 'BaseServer.renderErrorToResponse',\n renderErrorToHTML = 'BaseServer.renderErrorToHTML',\n render404 = 'BaseServer.render404',\n}\n\nenum LoadComponentsSpan {\n loadDefaultErrorComponents = 'LoadComponents.loadDefaultErrorComponents',\n loadComponents = 'LoadComponents.loadComponents',\n loadRouteModule = 'LoadComponents.loadRouteModule',\n}\n\nenum InstrumentationSpan {\n loadModule = 'Instrumentation.loadModule',\n register = 'Instrumentation.register',\n}\n\nenum NextServerSpan {\n getRequestHandler = 'NextServer.getRequestHandler',\n getRequestHandlerWithMetadata = 'NextServer.getRequestHandlerWithMetadata',\n getServer = 'NextServer.getServer',\n getServerRequestHandler = 'NextServer.getServerRequestHandler',\n createServer = 'createServer.createServer',\n}\n\nenum NextNodeServerSpan {\n compression = 'NextNodeServer.compression',\n getBuildId = 'NextNodeServer.getBuildId',\n createComponentTree = 'NextNodeServer.createComponentTree',\n clientComponentLoading = 'NextNodeServer.clientComponentLoading',\n getLayoutOrPageModule = 'NextNodeServer.getLayoutOrPageModule',\n generateStaticRoutes = 'NextNodeServer.generateStaticRoutes',\n generateFsStaticRoutes = 'NextNodeServer.generateFsStaticRoutes',\n generatePublicRoutes = 'NextNodeServer.generatePublicRoutes',\n generateImageRoutes = 'NextNodeServer.generateImageRoutes.route',\n sendRenderResult = 'NextNodeServer.sendRenderResult',\n proxyRequest = 'NextNodeServer.proxyRequest',\n runApi = 'NextNodeServer.runApi',\n render = 'NextNodeServer.render',\n renderHTML = 'NextNodeServer.renderHTML',\n imageOptimizer = 'NextNodeServer.imageOptimizer',\n getPagePath = 'NextNodeServer.getPagePath',\n getRoutesManifest = 'NextNodeServer.getRoutesManifest',\n findPageComponents = 'NextNodeServer.findPageComponents',\n getFontManifest = 'NextNodeServer.getFontManifest',\n getServerComponentManifest = 'NextNodeServer.getServerComponentManifest',\n getRequestHandler = 'NextNodeServer.getRequestHandler',\n renderToHTML = 'NextNodeServer.renderToHTML',\n renderError = 'NextNodeServer.renderError',\n renderErrorToHTML = 'NextNodeServer.renderErrorToHTML',\n render404 = 'NextNodeServer.render404',\n startResponse = 'NextNodeServer.startResponse',\n\n // nested inner span, does not require parent scope name\n route = 'route',\n onProxyReq = 'onProxyReq',\n apiResolver = 'apiResolver',\n internalFetch = 'internalFetch',\n}\n\nenum StartServerSpan {\n startServer = 'startServer.startServer',\n}\n\nenum RenderSpan {\n getServerSideProps = 'Render.getServerSideProps',\n getStaticProps = 'Render.getStaticProps',\n renderToString = 'Render.renderToString',\n renderDocument = 'Render.renderDocument',\n createBodyResult = 'Render.createBodyResult',\n}\n\nenum AppRenderSpan {\n renderToString = 'AppRender.renderToString',\n renderToReadableStream = 'AppRender.renderToReadableStream',\n getBodyResult = 'AppRender.getBodyResult',\n fetch = 'AppRender.fetch',\n waitShellReady = 'AppRender.waitShellReady',\n renderToNodeFizzStream = 'AppRender.renderToNodeFizzStream',\n instantInsights = 'AppRender.instantInsights',\n instantInsightsPrepareValidation = 'AppRender.instantInsights.prepareValidation',\n instantInsightsRunValidation = 'AppRender.instantInsights.runValidation',\n}\n\nenum DevBundlerServiceSpan {\n ensurePage = 'DevBundlerService.ensurePage',\n}\n\nenum RouterSpan {\n executeRoute = 'Router.executeRoute',\n}\n\nenum NodeSpan {\n runHandler = 'Node.runHandler',\n}\n\nenum AppRouteRouteHandlersSpan {\n runHandler = 'AppRouteRouteHandlers.runHandler',\n}\n\nenum AppRouteRouteModuleSpan {\n loadUserland = 'AppRouteRouteModule.loadUserland',\n}\n\nenum RouteModuleSpan {\n prepare = 'RouteModule.prepare',\n loadManifests = 'RouteModule.loadManifests',\n}\nenum ResolveMetadataSpan {\n generateMetadata = 'ResolveMetadata.generateMetadata',\n generateViewport = 'ResolveMetadata.generateViewport',\n}\n\nenum MiddlewareSpan {\n execute = 'Middleware.execute',\n}\n\ntype SpanTypes =\n | `${BaseServerSpan}`\n | `${LoadComponentsSpan}`\n | `${InstrumentationSpan}`\n | `${NextServerSpan}`\n | `${StartServerSpan}`\n | `${NextNodeServerSpan}`\n | `${RenderSpan}`\n | `${RouterSpan}`\n | `${AppRenderSpan}`\n | `${DevBundlerServiceSpan}`\n | `${NodeSpan}`\n | `${AppRouteRouteHandlersSpan}`\n | `${AppRouteRouteModuleSpan}`\n | `${RouteModuleSpan}`\n | `${ResolveMetadataSpan}`\n | `${MiddlewareSpan}`\n\n// This list is used to filter out spans that are not relevant to the user\nexport const NextVanillaSpanAllowlist = new Set([\n MiddlewareSpan.execute,\n BaseServerSpan.handleRequest,\n RenderSpan.getServerSideProps,\n RenderSpan.getStaticProps,\n AppRenderSpan.fetch,\n AppRenderSpan.getBodyResult,\n LoadComponentsSpan.loadRouteModule,\n RenderSpan.renderDocument,\n NodeSpan.runHandler,\n AppRouteRouteHandlersSpan.runHandler,\n AppRouteRouteModuleSpan.loadUserland,\n RouteModuleSpan.prepare,\n InstrumentationSpan.loadModule,\n InstrumentationSpan.register,\n ResolveMetadataSpan.generateMetadata,\n ResolveMetadataSpan.generateViewport,\n NextNodeServerSpan.createComponentTree,\n NextNodeServerSpan.findPageComponents,\n NextNodeServerSpan.getLayoutOrPageModule,\n NextNodeServerSpan.startResponse,\n NextNodeServerSpan.clientComponentLoading,\n])\n\n// These Spans are allowed to be always logged\n// when the otel log prefix env is set\nexport const LogSpanAllowList = new Set([\n NextNodeServerSpan.findPageComponents,\n NextNodeServerSpan.createComponentTree,\n NextNodeServerSpan.clientComponentLoading,\n])\n\nexport {\n BaseServerSpan,\n LoadComponentsSpan,\n InstrumentationSpan,\n NextServerSpan,\n NextNodeServerSpan,\n StartServerSpan,\n RenderSpan,\n RouterSpan,\n AppRenderSpan,\n DevBundlerServiceSpan,\n NodeSpan,\n AppRouteRouteHandlersSpan,\n AppRouteRouteModuleSpan,\n RouteModuleSpan,\n ResolveMetadataSpan,\n MiddlewareSpan,\n}\n\nexport type { SpanTypes }\n"],"names":["BaseServerSpan","LoadComponentsSpan","InstrumentationSpan","NextServerSpan","NextNodeServerSpan","StartServerSpan","RenderSpan","AppRenderSpan","DevBundlerServiceSpan","RouterSpan","NodeSpan","AppRouteRouteHandlersSpan","AppRouteRouteModuleSpan","RouteModuleSpan","ResolveMetadataSpan","MiddlewareSpan","NextVanillaSpanAllowlist","Set","LogSpanAllowList"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;EAKE,GAEF,4CAA4C;AAE5C,IAAKA,iBAAAA,WAAAA,GAAAA,SAAAA,cAAAA;;;;;;;;;;;;;WAAAA;EAAAA,kBAAAA,CAAAA;AAeL,IAAKC,qBAAAA,WAAAA,GAAAA,SAAAA,kBAAAA;;;;WAAAA;EAAAA,sBAAAA,CAAAA;AAML,IAAKC,sBAAAA,WAAAA,GAAAA,SAAAA,mBAAAA;;;WAAAA;EAAAA,uBAAAA,CAAAA;AAKL,IAAKC,iBAAAA,WAAAA,GAAAA,SAAAA,cAAAA;;;;;;WAAAA;EAAAA,kBAAAA,CAAAA;AAQL,IAAKC,qBAAAA,WAAAA,GAAAA,SAAAA,kBAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4BH,wDAAwD;;;;;WA5BrDA;EAAAA,sBAAAA,CAAAA;AAmCL,IAAKC,kBAAAA,WAAAA,GAAAA,SAAAA,eAAAA;;WAAAA;EAAAA,mBAAAA,CAAAA;AAIL,IAAKC,aAAAA,WAAAA,GAAAA,SAAAA,UAAAA;;;;;;WAAAA;EAAAA,cAAAA,CAAAA;AAQL,IAAKC,gBAAAA,WAAAA,GAAAA,SAAAA,aAAAA;;;;;;;;;;WAAAA;EAAAA,iBAAAA,CAAAA;AAYL,IAAKC,wBAAAA,WAAAA,GAAAA,SAAAA,qBAAAA;;WAAAA;EAAAA,yBAAAA,CAAAA;AAIL,IAAKC,aAAAA,WAAAA,GAAAA,SAAAA,UAAAA;;WAAAA;EAAAA,cAAAA,CAAAA;AAIL,IAAKC,WAAAA,WAAAA,GAAAA,SAAAA,QAAAA;;WAAAA;EAAAA,YAAAA,CAAAA;AAIL,IAAKC,4BAAAA,WAAAA,GAAAA,SAAAA,yBAAAA;;WAAAA;EAAAA,6BAAAA,CAAAA;AAIL,IAAKC,0BAAAA,WAAAA,GAAAA,SAAAA,uBAAAA;;WAAAA;EAAAA,2BAAAA,CAAAA;AAIL,IAAKC,kBAAAA,WAAAA,GAAAA,SAAAA,eAAAA;;;WAAAA;EAAAA,mBAAAA,CAAAA;AAIL,IAAKC,sBAAAA,WAAAA,GAAAA,SAAAA,mBAAAA;;;WAAAA;EAAAA,uBAAAA,CAAAA;AAKL,IAAKC,iBAAAA,WAAAA,GAAAA,SAAAA,cAAAA;;WAAAA;EAAAA,kBAAAA,CAAAA;AAuBE,MAAMC,2BAA2B,IAAIC,IAAI;;;;;;;;;;;;;;;;;;;;;;CAsB/C,EAAC;AAIK,MAAMC,mBAAmB,IAAID,IAAI;;;;CAIvC,EAAC","ignoreList":[0]}}, + {"offset": {"line": 6535, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/trace/request-insights-identity.ts"],"sourcesContent":["import type { AsyncLocalStorage } from 'async_hooks'\nimport type { RequestInsightKind } from '../../../next-devtools/shared/request-insights'\nimport { getOrCreateGlobalAsyncLocalStorage } from '../../app-render/async-local-storage'\n\nexport type RequestInsightsIdentity = {\n requestId: string\n kind?: RequestInsightKind\n htmlRequestId: string\n url: string | undefined\n}\n\n// This storage covers the part of BaseServer request handling that runs before\n// App Render creates workAsyncStorage. Once available, workStore remains the\n// primary identity source for locally recorded spans.\nfunction getRequestInsightsIdentityStorage(): AsyncLocalStorage {\n return getOrCreateGlobalAsyncLocalStorage('request-insights-identity-storage')\n}\n\nexport function runWithRequestInsightsIdentity(\n identity: RequestInsightsIdentity,\n fn: () => T\n): T {\n return getRequestInsightsIdentityStorage().run(identity, fn)\n}\n\nexport function getRequestInsightsIdentity():\n | RequestInsightsIdentity\n | undefined {\n return getRequestInsightsIdentityStorage().getStore()\n}\n"],"names":["getOrCreateGlobalAsyncLocalStorage","getRequestInsightsIdentityStorage","runWithRequestInsightsIdentity","identity","fn","run","getRequestInsightsIdentity","getStore"],"mappings":";;;;;;AAEA,SAASA,kCAAkC,QAAQ,uCAAsC;;AASzF,+EAA+E;AAC/E,6EAA6E;AAC7E,sDAAsD;AACtD,SAASC;IACP,WAAOD,mOAAAA,EAAmC;AAC5C;AAEO,SAASE,+BACdC,QAAiC,EACjCC,EAAW;IAEX,OAAOH,oCAAoCI,GAAG,CAACF,UAAUC;AAC3D;AAEO,SAASE;IAGd,OAAOL,oCAAoCM,QAAQ;AACrD","ignoreList":[0]}}, + {"offset": {"line": 6559, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/trace/request-insights.ts"],"sourcesContent":["import type { AttributeValue } from 'next/dist/compiled/@opentelemetry/api'\nimport type {\n RequestInsight,\n RequestInsightFetch,\n RequestInsightsSnapshot,\n} from '../../../next-devtools/shared/request-insights'\nimport type { RequestInsightKind } from '../../../shared/lib/request-insights'\nimport {\n getRequestInsightKey,\n getRequestInsightKind,\n} from '../../../shared/lib/request-insights'\nimport type { SpanStoreRecord } from './span-store'\nexport { isRequestInsightsEnabled } from './span-store'\n\nconst MAX_REQUEST_INSIGHTS = 100\nconst REQUEST_INSIGHTS_STORE_KEY = Symbol.for('@next/request-insights-store')\nconst CLIENT_COMPONENT_LOADING_SPAN_TYPE =\n 'NextNodeServer.clientComponentLoading'\n\ntype RequestInsightsListener = (insight: RequestInsight) => void\ntype RequestInsightIdentity = {\n requestId?: string\n kind?: RequestInsightKind\n htmlRequestId?: string\n route?: string\n url?: string\n}\n\nconst REDACTED_VALUE = 'redacted'\nconst SAFE_SPAN_ATTRIBUTE_KEYS = new Set([\n 'http.method',\n 'http.route',\n 'http.status_code',\n 'http.url',\n 'net.peer.name',\n 'net.peer.port',\n 'next.fetch.cache_reason',\n 'next.fetch.cache_status',\n 'next.fetch.idx',\n 'next.route',\n 'next.rsc',\n 'next.segment',\n 'next.span_category',\n 'next.span_name',\n 'next.span_type',\n])\nconst SENSITIVE_PARAM_NAME_RE =\n /(?:^|[_-])(?:access[_-]?token|api[_-]?key|auth|authorization|code|cookie|credential|id[_-]?token|jwt|key|password|secret|session|signature|sig|token)(?:$|[_-])/i\n\nclass InMemoryRequestInsightsStore {\n private readonly requests = new Map()\n private readonly requestTimings = new Map<\n string,\n { startTime: number; durationMs: number }\n >()\n private readonly requestOrder: string[] = []\n private readonly listeners = new Set()\n\n recordSpan(span: SpanStoreRecord): void {\n if (!span.requestId) {\n return\n }\n\n const insight = this.getOrCreateRequest(\n {\n requestId: span.requestId,\n kind: span.requestInsightKind,\n htmlRequestId: span.htmlRequestId,\n route: span.route,\n url: span.url,\n },\n span.startTime ?? span.timestamp\n )\n\n const spanStartTime = span.startTime ?? span.timestamp\n insight.htmlRequestId = span.htmlRequestId ?? insight.htmlRequestId\n insight.route = insight.route ?? span.route\n insight.url = insight.url ?? sanitizeUrl(span.url)\n this.updateTiming(\n insight,\n spanStartTime,\n span.durationMs,\n span.attributes?.['next.span_type'] === 'BaseServer.handleRequest'\n )\n insight.status =\n insight.status === 'error' || span.status === 'error'\n ? 'error'\n : span.status === 'ok'\n ? 'ok'\n : insight.status\n\n insight.spans.push({\n name: span.name,\n startTime: spanStartTime,\n durationMs: span.durationMs,\n status: span.status,\n traceId: span.traceId,\n spanId: span.spanId,\n parentSpanId: span.parentSpanId,\n attributes: sanitizeSpanAttributes(span.attributes),\n links: sanitizeSpanLinks(span.links),\n events: sanitizeSpanEvents(span.events),\n error: span.error,\n })\n\n const fetch = getFetchInsight(span)\n if (fetch) {\n this.recordFetchForInsight(insight, fetch)\n }\n\n this.notify(insight)\n }\n\n recordFetch(identity: RequestInsightIdentity, fetch: RequestInsightFetch) {\n if (!identity.requestId) {\n return\n }\n\n const fetchStartTime = fetch.startTime ?? getCurrentTimestamp()\n const insight = this.getOrCreateRequest(identity, fetchStartTime)\n this.updateTiming(insight, fetchStartTime, fetch.durationMs, false)\n this.recordFetchForInsight(insight, sanitizeFetchInsight(fetch))\n this.notify(insight)\n }\n\n getSnapshot(): RequestInsightsSnapshot {\n return {\n requests: this.requestOrder\n .map((insightKey) => this.requests.get(insightKey))\n .filter((request): request is RequestInsight => request !== undefined),\n }\n }\n\n subscribe(listener: RequestInsightsListener): () => void {\n this.listeners.add(listener)\n return () => {\n this.listeners.delete(listener)\n }\n }\n\n clear(): void {\n this.requests.clear()\n this.requestTimings.clear()\n this.requestOrder.length = 0\n }\n\n private updateTiming(\n insight: RequestInsight,\n startTime: number,\n durationMs: number | undefined,\n isRequestSpan: boolean\n ): void {\n const insightKey = getRequestInsightKey(insight)\n if (isRequestSpan && durationMs !== undefined) {\n const requestTiming = { startTime, durationMs }\n this.requestTimings.set(insightKey, requestTiming)\n insight.startTime = requestTiming.startTime\n insight.durationMs = requestTiming.durationMs\n return\n }\n\n const requestTiming = this.requestTimings.get(insightKey)\n if (requestTiming) {\n insight.startTime = requestTiming.startTime\n insight.durationMs = requestTiming.durationMs\n return\n }\n\n const endTime = startTime + (durationMs ?? 0)\n const requestEndTime = insight.startTime + (insight.durationMs ?? 0)\n insight.startTime = Math.min(insight.startTime, startTime)\n insight.durationMs = Math.max(requestEndTime, endTime) - insight.startTime\n }\n\n private notify(insight: RequestInsight): void {\n for (const listener of this.listeners) {\n listener(insight)\n }\n }\n\n private getOrCreateRequest(\n identity: RequestInsightIdentity,\n startTime: number\n ): RequestInsight {\n const requestId = identity.requestId!\n const insightKey = getRequestInsightKey({\n requestId,\n kind: identity.kind,\n })\n let insight = this.requests.get(insightKey)\n\n if (!insight) {\n insight = {\n requestId,\n kind: getRequestInsightKind(identity),\n htmlRequestId: identity.htmlRequestId ?? requestId,\n route: identity.route,\n url: sanitizeUrl(identity.url),\n startTime,\n status: 'pending',\n spans: [],\n fetches: [],\n }\n this.requests.set(insightKey, insight)\n this.requestOrder.push(insightKey)\n this.trim()\n }\n\n insight.htmlRequestId = identity.htmlRequestId ?? insight.htmlRequestId\n insight.route = insight.route ?? identity.route\n insight.url = insight.url ?? sanitizeUrl(identity.url)\n insight.startTime = Math.min(insight.startTime, startTime)\n\n return insight\n }\n\n private recordFetchForInsight(\n insight: RequestInsight,\n fetch: RequestInsightFetch\n ): void {\n if (\n insight.fetches.some(\n (existingFetch) =>\n existingFetch.url === fetch.url &&\n (existingFetch.index !== undefined && fetch.index !== undefined\n ? existingFetch.index === fetch.index\n : existingFetch.startTime === fetch.startTime)\n )\n ) {\n return\n }\n\n insight.fetches.push(sanitizeFetchInsight(fetch))\n }\n\n private trim(): void {\n while (this.requestOrder.length > MAX_REQUEST_INSIGHTS) {\n const insightKey = this.requestOrder.shift()\n if (insightKey) {\n this.requests.delete(insightKey)\n this.requestTimings.delete(insightKey)\n }\n }\n }\n}\n\nexport function recordRequestInsightSpan(span: SpanStoreRecord): void {\n if (\n span.attributes?.['next.span_type'] === CLIENT_COMPONENT_LOADING_SPAN_TYPE\n ) {\n return\n }\n\n getRequestInsightsStore().recordSpan(span)\n}\n\nexport function recordRequestInsightFetch(\n identity: RequestInsightIdentity,\n fetch: RequestInsightFetch\n): void {\n getRequestInsightsStore().recordFetch(identity, fetch)\n}\n\nexport function getRequestInsightsSnapshot(): RequestInsightsSnapshot {\n return getRequestInsightsStore().getSnapshot()\n}\n\nexport function subscribeRequestInsights(\n listener: RequestInsightsListener\n): () => void {\n return getRequestInsightsStore().subscribe(listener)\n}\n\nexport function clearRequestInsightsForTest(): void {\n getRequestInsightsStore().clear()\n}\n\nfunction getRequestInsightsStore(): InMemoryRequestInsightsStore {\n const globalStore = globalThis as typeof globalThis & {\n [REQUEST_INSIGHTS_STORE_KEY]?: InMemoryRequestInsightsStore\n }\n\n return (globalStore[REQUEST_INSIGHTS_STORE_KEY] ??=\n new InMemoryRequestInsightsStore())\n}\n\nfunction getFetchInsight(span: SpanStoreRecord): RequestInsightFetch | null {\n const attributes = span.attributes\n\n if (!attributes || attributes['next.span_type'] !== 'AppRender.fetch') {\n return null\n }\n\n return {\n url: sanitizeUrl(getStringAttribute(attributes['http.url']) ?? span.url),\n method: getStringAttribute(attributes['http.method']),\n statusCode: getNumberAttribute(attributes['http.status_code']),\n startTime: span.startTime ?? span.timestamp,\n durationMs: span.durationMs,\n cacheStatus: getStringAttribute(attributes['next.fetch.cache_status']),\n cacheReason: getStringAttribute(attributes['next.fetch.cache_reason']),\n index: getNumberAttribute(attributes['next.fetch.idx']),\n }\n}\n\nfunction sanitizeFetchInsight(fetch: RequestInsightFetch): RequestInsightFetch {\n return {\n ...fetch,\n url: sanitizeUrl(fetch.url),\n }\n}\n\nfunction getCurrentTimestamp(): number {\n return performance.timeOrigin + performance.now()\n}\n\nfunction sanitizeSpanAttributes(\n attributes: SpanStoreRecord['attributes']\n): SpanStoreRecord['attributes'] {\n if (!attributes) {\n return undefined\n }\n\n const sanitized: NonNullable = {}\n for (const [key, value] of Object.entries(attributes)) {\n if (!SAFE_SPAN_ATTRIBUTE_KEYS.has(key)) {\n continue\n }\n\n sanitized[key] = key === 'http.url' ? sanitizeUrlAttribute(value) : value\n }\n\n return Object.keys(sanitized).length > 0 ? sanitized : undefined\n}\n\nfunction sanitizeSpanEvents(\n events: SpanStoreRecord['events']\n): SpanStoreRecord['events'] {\n return events?.map((event) => ({\n ...event,\n attributes: sanitizeSpanAttributes(event.attributes),\n }))\n}\n\nfunction sanitizeSpanLinks(\n links: SpanStoreRecord['links']\n): SpanStoreRecord['links'] {\n return links?.map((link) => ({\n ...link,\n attributes: sanitizeSpanAttributes(link.attributes),\n }))\n}\n\nfunction sanitizeUrlAttribute(value: AttributeValue): AttributeValue {\n return typeof value === 'string' ? (sanitizeUrl(value) ?? '') : value\n}\n\nfunction sanitizeUrl(value: string | undefined): string | undefined {\n if (!value) {\n return value\n }\n\n const isRelativeUrl = value.startsWith('/')\n\n try {\n const url = isRelativeUrl ? new URL(value, 'http://n') : new URL(value)\n\n url.username = ''\n url.password = ''\n\n for (const name of Array.from(url.searchParams.keys())) {\n if (SENSITIVE_PARAM_NAME_RE.test(name)) {\n url.searchParams.set(name, REDACTED_VALUE)\n }\n }\n\n return isRelativeUrl ? `${url.pathname}${url.search}${url.hash}` : url.href\n } catch {\n return value\n }\n}\n\nfunction getStringAttribute(value: AttributeValue | undefined) {\n return typeof value === 'string' ? value : undefined\n}\n\nfunction getNumberAttribute(value: AttributeValue | undefined) {\n return typeof value === 'number' ? value : undefined\n}\n"],"names":["getRequestInsightKey","getRequestInsightKind","isRequestInsightsEnabled","MAX_REQUEST_INSIGHTS","REQUEST_INSIGHTS_STORE_KEY","Symbol","for","CLIENT_COMPONENT_LOADING_SPAN_TYPE","REDACTED_VALUE","SAFE_SPAN_ATTRIBUTE_KEYS","Set","SENSITIVE_PARAM_NAME_RE","InMemoryRequestInsightsStore","recordSpan","span","requestId","insight","getOrCreateRequest","kind","requestInsightKind","htmlRequestId","route","url","startTime","timestamp","spanStartTime","sanitizeUrl","updateTiming","durationMs","attributes","status","spans","push","name","traceId","spanId","parentSpanId","sanitizeSpanAttributes","links","sanitizeSpanLinks","events","sanitizeSpanEvents","error","fetch","getFetchInsight","recordFetchForInsight","notify","recordFetch","identity","fetchStartTime","getCurrentTimestamp","sanitizeFetchInsight","getSnapshot","requests","requestOrder","map","insightKey","get","filter","request","undefined","subscribe","listener","listeners","add","delete","clear","requestTimings","length","isRequestSpan","requestTiming","set","endTime","requestEndTime","Math","min","max","fetches","trim","some","existingFetch","index","shift","Map","recordRequestInsightSpan","getRequestInsightsStore","recordRequestInsightFetch","getRequestInsightsSnapshot","subscribeRequestInsights","clearRequestInsightsForTest","globalStore","globalThis","getStringAttribute","method","statusCode","getNumberAttribute","cacheStatus","cacheReason","performance","timeOrigin","now","sanitized","key","value","Object","entries","has","sanitizeUrlAttribute","keys","event","link","isRelativeUrl","startsWith","URL","username","password","Array","from","searchParams","test","pathname","search","hash","href"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 6844, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/trace/span-store.ts"],"sourcesContent":["import type { AttributeValue } from 'next/dist/compiled/@opentelemetry/api'\nimport type { RequestInsightKind } from '../../../next-devtools/shared/request-insights'\n\nexport type SpanStoreAttributes = Record\n\nexport type SpanStoreLink = {\n traceId: string\n spanId: string\n attributes?: SpanStoreAttributes\n}\n\nexport type SpanStoreEvent = {\n name: string\n timestamp: number\n attributes?: SpanStoreAttributes\n}\n\nexport type SpanStoreRecord = {\n name: string\n timestamp: number\n startTime?: number\n durationMs?: number\n status?: 'ok' | 'error'\n traceId?: string\n spanId?: string\n parentSpanId?: string\n requestId?: string\n requestInsightKind?: RequestInsightKind\n htmlRequestId?: string\n route?: string\n url?: string\n attributes?: SpanStoreAttributes\n links?: SpanStoreLink[]\n events?: SpanStoreEvent[]\n error?: {\n type?: string\n message?: string\n }\n}\n\ntype SpanRecorderForTest = (span: SpanStoreRecord) => void\n\nlet spanRecorderForTest: SpanRecorderForTest | undefined\n\nexport function recordSpan(record: Omit): void {\n if (!isLocalSpanRecordingEnabled()) {\n return\n }\n\n const spanRecord: SpanStoreRecord = {\n timestamp: getCurrentTimestamp(),\n ...record,\n }\n\n spanRecorderForTest?.(spanRecord)\n\n if (isRequestInsightsEnabled() && spanRecord.requestId) {\n const { recordRequestInsightSpan } =\n require('./request-insights') as typeof import('./request-insights')\n recordRequestInsightSpan(spanRecord)\n }\n}\n\nexport function setSpanRecorderForTest(\n recorder: SpanRecorderForTest | undefined\n): void {\n spanRecorderForTest = recorder\n}\n\nexport function isLocalSpanRecordingEnabled(): boolean {\n if (!process.env.__NEXT_DEV_SERVER) {\n return false\n }\n\n return spanRecorderForTest !== undefined || isRequestInsightsEnabled()\n}\n\nexport function isRequestInsightsEnabled(): boolean {\n if (!process.env.__NEXT_DEV_SERVER) {\n return false\n }\n\n const value = process.env.__NEXT_REQUEST_INSIGHTS\n return isEnabledEnvValue(value)\n}\n\nfunction isEnabledEnvValue(value: string | undefined): boolean {\n return value === '1' || value === 'true' || (value as unknown) === true\n}\n\nfunction getCurrentTimestamp(): number {\n return performance.timeOrigin + performance.now()\n}\n"],"names":["spanRecorderForTest","recordSpan","record","isLocalSpanRecordingEnabled","spanRecord","timestamp","getCurrentTimestamp","isRequestInsightsEnabled","requestId","recordRequestInsightSpan","require","setSpanRecorderForTest","recorder","process","env","__NEXT_DEV_SERVER","undefined","value","__NEXT_REQUEST_INSIGHTS","isEnabledEnvValue","performance","timeOrigin","now"],"mappings":";;;;;;;;;;AA0CA,IAAIA;AAEG,SAASC,WAAWC,MAA0C;IACnE,IAAI,CAACC,+BAA+B;QAClC;IACF;IAEA,MAAMC,aAA8B;QAClCC,WAAWC;QACX,GAAGJ,MAAM;IACX;IAEAF,uBAAAA,OAAAA,KAAAA,IAAAA,oBAAsBI;IAEtB,IAAIG,8BAA8BH,WAAWI,SAAS,EAAE;;AAK1D;AAEO,SAASG,uBACdC,QAAyC;IAEzCZ,sBAAsBY;AACxB;AAEO,SAAST;IACd,IAAI,CAACU,QAAQC,GAAG,CAACC,iBAAiB,EAAE;;IAIpC,OAAOf,wBAAwBgB,aAAaT;AAC9C;AAEO,SAASA;IACd,IAAI,CAACM,QAAQC,GAAG,CAACC,iBAAiB,EAAE;;IAIpC,MAAME,QAAQJ,QAAQC,GAAG,CAACI,uBAAuB;IACjD,OAAOC,kBAAkBF;AAC3B;AAEA,SAASE,kBAAkBF,KAAyB;IAClD,OAAOA,UAAU,OAAOA,UAAU,UAAWA,UAAsB;AACrE;AAEA,SAASX;IACP,OAAOc,YAAYC,UAAU,GAAGD,YAAYE,GAAG;AACjD","ignoreList":[0]}}, + {"offset": {"line": 6891, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/trace/tracer.ts"],"sourcesContent":["import type { FetchEventResult } from '../../web/types'\nimport type { TextMapSetter } from '@opentelemetry/api'\nimport type { SpanTypes } from './constants'\nimport type { LocalSpanRecorder } from './local-span-recorder'\nimport { LogSpanAllowList, NextVanillaSpanAllowlist } from './constants'\n\nimport type {\n Context,\n ContextAPI,\n Span,\n SpanOptions,\n Tracer,\n AttributeValue,\n TextMapGetter,\n} from 'next/dist/compiled/@opentelemetry/api'\nimport { isThenable } from '../../../shared/lib/is-thenable'\n\nconst NEXT_OTEL_PERFORMANCE_PREFIX = process.env.NEXT_OTEL_PERFORMANCE_PREFIX\nconst LOCAL_SPAN_RECORDER_KEY = Symbol.for('@next/local-span-recorder')\n\ntype GlobalWithLocalSpanRecorder = typeof globalThis & {\n [LOCAL_SPAN_RECORDER_KEY]?: LocalSpanRecorder\n}\n\nlet api: typeof import('next/dist/compiled/@opentelemetry/api')\n\nfunction getLocalSpanRecorder() {\n if (process.env.__NEXT_DEV_SERVER) {\n return (globalThis as GlobalWithLocalSpanRecorder)[LOCAL_SPAN_RECORDER_KEY]\n } else {\n return undefined\n }\n}\n\n// we want to allow users to use their own version of @opentelemetry/api if they\n// want to, so we try to require it first, and if it fails we fall back to the\n// version that is bundled with Next.js\n// this is because @opentelemetry/api has to be synced with the version of\n// @opentelemetry/tracing that is used, and we don't want to force users to use\n// the version that is bundled with Next.js.\n// the API is ~stable, so this should be fine\nif (process.env.NEXT_RUNTIME === 'edge') {\n api = require('@opentelemetry/api') as typeof import('@opentelemetry/api')\n} else {\n try {\n api = require('@opentelemetry/api') as typeof import('@opentelemetry/api')\n } catch (err) {\n api =\n require('next/dist/compiled/@opentelemetry/api') as typeof import('next/dist/compiled/@opentelemetry/api')\n }\n}\n\nconst { context, propagation, trace, SpanStatusCode, SpanKind, ROOT_CONTEXT } =\n api\n\nexport class BubbledError extends Error {\n constructor(\n public readonly bubble?: boolean,\n public readonly result?: FetchEventResult\n ) {\n super()\n }\n}\n\nexport function isBubbledError(error: unknown): error is BubbledError {\n if (typeof error !== 'object' || error === null) return false\n return error instanceof BubbledError\n}\n\nconst closeSpanWithError = (\n span: Span,\n error?: Error,\n endTime?: Parameters[0]\n) => {\n if (isBubbledError(error) && error.bubble) {\n span.setAttribute('next.bubble', true)\n } else {\n if (error) {\n span.recordException(error)\n span.setAttribute('error.type', error.name)\n }\n span.setStatus({ code: SpanStatusCode.ERROR, message: error?.message })\n }\n span.end(endTime)\n}\n\ntype TracerSpanOptions = Omit & {\n endTime?: Parameters[0]\n parentSpan?: Span\n spanName?: string\n attributes?: Partial>\n hideSpan?: boolean\n}\n\ninterface NextTracer {\n getContext(): ContextAPI\n\n /**\n * Instruments a function by automatically creating a span activated on its\n * scope.\n *\n * The span will automatically be finished when one of these conditions is\n * met:\n *\n * * The function returns a promise, in which case the span will finish when\n * the promise is resolved or rejected.\n * * The function takes a callback as its second parameter, in which case the\n * span will finish when that callback is called.\n * * The function doesn't accept a callback and doesn't return a promise, in\n * which case the span will finish at the end of the function execution.\n *\n */\n trace(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise\n ): Promise\n trace(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n trace(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise\n ): Promise\n trace(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n\n /**\n * Wrap a function to automatically create a span activated on its\n * scope when it's called.\n *\n * The span will automatically be finished when one of these conditions is\n * met:\n *\n * * The function returns a promise, in which case the span will finish when\n * the promise is resolved or rejected.\n * * The function takes a callback as its last parameter, in which case the\n * span will finish when that callback is called.\n * * The function doesn't accept a callback and doesn't return a promise, in\n * which case the span will finish at the end of the function execution.\n */\n wrap) => any>(type: SpanTypes, fn: T): T\n wrap) => any>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: T\n ): T\n wrap) => any>(\n type: SpanTypes,\n options: (...args: any[]) => TracerSpanOptions,\n fn: T\n ): T\n\n /**\n * Starts and returns a new Span representing a logical unit of work.\n *\n * This method do NOT modify the current Context by default. In result, any inner span will not\n * automatically set its parent context to the span created by this method unless manually activate\n * context via `tracer.getContext().with`. `trace`, or `wrap` is generally recommended as it gracefully\n * handles context activation. (ref: https://github.com/open-telemetry/opentelemetry-js/issues/1923)\n */\n startSpan(type: SpanTypes): Span\n startSpan(type: SpanTypes, options: TracerSpanOptions): Span\n\n /**\n * Returns currently activated span if current context is in the scope of the span.\n * Returns undefined otherwise.\n */\n getActiveScopeSpan(): Span | undefined\n\n /**\n * Returns trace propagation data for the currently active context. The format is equal to data provided\n * through the OpenTelemetry propagator API.\n */\n getTracePropagationData(): ClientTraceDataEntry[]\n\n /**\n * Executes a function with the given span set as the active span in the context.\n * This allows child spans created within the function to automatically parent to this span.\n */\n withSpan(span: Span, fn: () => T): T\n}\n\ntype NextAttributeNames =\n | 'next.route'\n | 'next.page'\n | 'next.rsc'\n | 'next.segment'\n | 'next.span_category'\n | 'next.span_name'\n | 'next.span_type'\n | 'next.clientComponentLoadCount'\ntype OTELAttributeNames = `http.${string}` | `net.${string}`\ntype AttributeNames = NextAttributeNames | OTELAttributeNames\n\n/** we use this map to propagate attributes from nested spans to the top span */\nconst rootSpanAttributesStore = new Map<\n number,\n Map\n>()\nconst rootSpanIdKey = api.createContextKey('next.rootSpanId')\nlet lastSpanId = 0\nconst getSpanId = () => lastSpanId++\n\nexport interface ClientTraceDataEntry {\n key: string\n value: string\n}\n\nconst clientTraceDataSetter: TextMapSetter = {\n set(carrier, key, value) {\n carrier.push({\n key,\n value,\n })\n },\n}\n\nclass NextTracerImpl implements NextTracer {\n /**\n * Returns an instance to the trace with configured name.\n * Since wrap / trace can be defined in any place prior to actual trace subscriber initialization,\n * This should be lazily evaluated.\n */\n private getTracerInstance(): Tracer {\n return trace.getTracer('next.js', process.env.__NEXT_VERSION)\n }\n\n private isOpenTelemetryEnabled(): boolean {\n const activeSpan = trace.getSpan(context.active())\n if (activeSpan?.isRecording()) {\n return true\n }\n\n const tracerProvider = trace.getTracerProvider() as {\n getDelegate?: () => { constructor?: { name?: string } } | undefined\n }\n\n if (!('getDelegate' in tracerProvider)) {\n return true\n }\n\n return (\n tracerProvider.getDelegate?.()?.constructor?.name !== 'NoopTracerProvider'\n )\n }\n\n public getContext(): ContextAPI {\n return context\n }\n\n public getTracePropagationData(): ClientTraceDataEntry[] {\n const activeContext = context.active()\n const entries: ClientTraceDataEntry[] = []\n propagation.inject(activeContext, entries, clientTraceDataSetter)\n return entries\n }\n\n public getActiveScopeSpan(): Span | undefined {\n const localSpanRecorder = getLocalSpanRecorder()\n const activeLocalSpan = localSpanRecorder?.getActiveLocalSpan()\n if (\n activeLocalSpan &&\n localSpanRecorder?.isOpenTelemetryIsolatedSpan(activeLocalSpan)\n ) {\n return activeLocalSpan\n }\n\n const activeSpan = trace.getSpan(context.active())\n if (activeSpan || !process.env.__NEXT_DEV_SERVER) {\n return activeSpan\n }\n return activeLocalSpan\n }\n\n /**\n * Run `fn` with the active span cleared, so spans created inside become new\n * roots (or parent to incoming propagated context). Used for in-process\n * Node.js middleware so its span is a sibling of the request span, matching\n * edge middleware which runs in a detached sandbox.\n */\n public runWithDetachedContext(fn: () => T): T {\n if (!NEXT_OTEL_PERFORMANCE_PREFIX && !this.isOpenTelemetryEnabled()) {\n return fn()\n }\n return context.with(ROOT_CONTEXT, fn)\n }\n\n public withPropagatedContext(\n carrier: C,\n fn: () => T,\n getter?: TextMapGetter,\n force = false\n ): T {\n const activeContext = context.active()\n\n if (\n !NEXT_OTEL_PERFORMANCE_PREFIX &&\n !this.isOpenTelemetryEnabled() &&\n !trace.getSpanContext(activeContext)\n ) {\n return fn()\n }\n\n if (force) {\n const remoteContext = propagation.extract(ROOT_CONTEXT, carrier, getter)\n\n if (trace.getSpanContext(remoteContext)) {\n return context.with(remoteContext, fn)\n }\n\n // Preserve the current active span while still merging any extracted\n // baggage/context values from the carrier.\n const mergedContext = propagation.extract(activeContext, carrier, getter)\n return context.with(mergedContext, fn)\n }\n\n if (trace.getSpanContext(activeContext)) {\n // Active span is already set, too late to propagate.\n return fn()\n }\n\n const remoteContext = propagation.extract(activeContext, carrier, getter)\n return context.with(remoteContext, fn)\n }\n\n // Trace, wrap implementation is inspired by datadog trace implementation\n // (https://datadoghq.dev/dd-trace-js/interfaces/tracer.html#trace).\n public trace(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise\n ): Promise\n public trace(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n public trace(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise\n ): Promise\n public trace(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n public trace(...args: Array) {\n const [type, fnOrOptions, fnOrEmpty] = args\n const tracingEnabled =\n Boolean(NEXT_OTEL_PERFORMANCE_PREFIX) || this.isOpenTelemetryEnabled()\n const localSpanRecorder = getLocalSpanRecorder()\n const localSpanRecordingEnabled =\n localSpanRecorder?.isLocalSpanRecordingEnabled() ?? false\n\n if (!tracingEnabled && !localSpanRecordingEnabled) {\n return typeof fnOrOptions === 'function' ? fnOrOptions() : fnOrEmpty()\n }\n\n // coerce options form overload\n const {\n fn,\n options,\n }: {\n fn: (span?: Span, done?: (error?: Error) => any) => T | Promise\n options: TracerSpanOptions\n } =\n typeof fnOrOptions === 'function'\n ? {\n fn: fnOrOptions,\n options: {},\n }\n : {\n fn: fnOrEmpty,\n options: { ...fnOrOptions },\n }\n\n const spanName = options.spanName ?? type\n\n const parentSpan = options.parentSpan ?? this.getActiveScopeSpan()\n const isolatedParentSpan =\n parentSpan && localSpanRecorder?.isOpenTelemetryIsolatedSpan(parentSpan)\n ? parentSpan\n : undefined\n const shouldDelegateSpan =\n !isolatedParentSpan &&\n (NextVanillaSpanAllowlist.has(type) ||\n process.env.NEXT_OTEL_VERBOSE === '1')\n const shouldTraceSpan =\n shouldDelegateSpan ||\n (localSpanRecorder?.isRequestInsightsEnabled() ?? false)\n\n if (!shouldTraceSpan || options.hideSpan) {\n return fn()\n }\n\n // Trying to get active scoped span to assign parent. If option specifies parent span manually, will try to use it.\n let spanContext = isolatedParentSpan\n ? context.active()\n : this.getSpanContext(parentSpan)\n\n if (!spanContext) {\n spanContext = context?.active() ?? ROOT_CONTEXT\n }\n // Check if there's already a root span in the store for this trace\n // We are intentionally not checking whether there is an active context\n // from outside of nextjs to ensure that we can provide the same level\n // of telemetry when using a custom server\n const existingRootSpanId = spanContext.getValue(rootSpanIdKey)\n const isRootSpan =\n typeof existingRootSpanId !== 'number' ||\n !rootSpanAttributesStore.has(existingRootSpanId)\n\n const spanId = getSpanId()\n\n options.attributes = {\n 'next.span_category': 'nextjs',\n 'next.span_name': spanName,\n 'next.span_type': type,\n ...options.attributes,\n }\n\n return context.with(spanContext.setValue(rootSpanIdKey, spanId), () =>\n this.runWithActiveSpan(\n spanName,\n options,\n spanContext,\n tracingEnabled && shouldDelegateSpan,\n localSpanRecordingEnabled,\n isolatedParentSpan,\n (span: Span) => {\n let startTime: number | undefined\n if (\n NEXT_OTEL_PERFORMANCE_PREFIX &&\n type &&\n LogSpanAllowList.has(type)\n ) {\n startTime =\n 'performance' in globalThis && 'measure' in performance\n ? globalThis.performance.now()\n : undefined\n }\n\n let cleanedUp = false\n const onCleanup = () => {\n if (cleanedUp) return\n cleanedUp = true\n rootSpanAttributesStore.delete(spanId)\n if (startTime) {\n performance.measure(\n `${NEXT_OTEL_PERFORMANCE_PREFIX}:next-${(\n type.split('.').pop() || ''\n ).replace(\n /[A-Z]/g,\n (match: string) => '-' + match.toLowerCase()\n )}`,\n {\n start: startTime,\n end: performance.now(),\n }\n )\n }\n }\n\n if (isRootSpan) {\n rootSpanAttributesStore.set(\n spanId,\n new Map(\n Object.entries(options.attributes ?? {}) as [\n AttributeNames,\n AttributeValue | undefined,\n ][]\n )\n )\n }\n if (fn.length > 1) {\n try {\n return fn(span, (err) => {\n if (err) {\n closeSpanWithError(span, err, options.endTime)\n } else {\n span.end(options.endTime)\n }\n })\n } catch (err: any) {\n closeSpanWithError(span, err, options.endTime)\n throw err\n } finally {\n onCleanup()\n }\n }\n\n try {\n const result = fn(span)\n if (isThenable(result)) {\n // If there's error make sure it throws\n return result\n .then((res) => {\n span.end(options.endTime)\n // Need to pass down the promise result,\n // it could be react stream response with error { error, stream }\n return res\n })\n .catch((err) => {\n closeSpanWithError(span, err, options.endTime)\n throw err\n })\n .finally(onCleanup)\n } else {\n span.end(options.endTime)\n onCleanup()\n }\n\n return result\n } catch (err: any) {\n closeSpanWithError(span, err, options.endTime)\n onCleanup()\n throw err\n }\n }\n )\n )\n }\n\n private runWithActiveSpan(\n spanName: string,\n options: TracerSpanOptions,\n parentContext: Context,\n tracingEnabled: boolean,\n localSpanRecordingEnabled: boolean,\n isolatedParentSpan: Span | undefined,\n fn: (span: Span) => T\n ): T {\n if (tracingEnabled) {\n return this.getTracerInstance().startActiveSpan(\n spanName,\n options,\n (span: Span) =>\n fn(\n localSpanRecordingEnabled\n ? this.createLocalRecordingSpan(\n spanName,\n options,\n parentContext,\n span,\n isolatedParentSpan\n )\n : span\n )\n )\n }\n\n const span = this.createLocalRecordingSpan(\n spanName,\n options,\n parentContext,\n undefined,\n isolatedParentSpan\n )\n const localSpanRecorder = getLocalSpanRecorder()!\n return localSpanRecorder.withLocalSpan(span, () =>\n localSpanRecorder.isOpenTelemetryIsolatedSpan(span)\n ? fn(span)\n : context.with(\n trace.setSpan(context.active(), span),\n fn,\n undefined,\n span\n )\n )\n }\n\n private createLocalRecordingSpan(\n name: string,\n options: TracerSpanOptions,\n parentContext: Context,\n delegateSpan?: Span,\n isolatedParentSpan?: Span\n ): Span {\n const parentSpanContext =\n isolatedParentSpan?.spanContext() ?? trace.getSpanContext(parentContext)\n const delegateSpanContext = delegateSpan?.spanContext()\n\n return getLocalSpanRecorder()!.createLocalSpan({\n name,\n attributes: options.attributes,\n links: options.links,\n startTime: options.startTime,\n delegateSpan,\n traceId: delegateSpanContext?.traceId ?? parentSpanContext?.traceId,\n spanId: delegateSpanContext?.spanId,\n parentSpanId: parentSpanContext?.spanId,\n isolateOpenTelemetry: isolatedParentSpan !== undefined,\n })\n }\n\n public wrap) => any>(type: SpanTypes, fn: T): T\n public wrap) => any>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: T\n ): T\n public wrap) => any>(\n type: SpanTypes,\n options: (...args: any[]) => TracerSpanOptions,\n fn: T\n ): T\n public wrap(...args: Array) {\n const tracer = this\n const [name, options, fn] =\n args.length === 3 ? args : [args[0], {}, args[1]]\n\n if (\n !NextVanillaSpanAllowlist.has(name) &&\n process.env.NEXT_OTEL_VERBOSE !== '1' &&\n !process.env.__NEXT_DEV_SERVER\n ) {\n return fn\n }\n\n return function (this: any) {\n let optionsObj = options\n if (typeof optionsObj === 'function' && typeof fn === 'function') {\n optionsObj = optionsObj.apply(this, arguments)\n }\n\n const lastArgId = arguments.length - 1\n const cb = arguments[lastArgId]\n\n if (typeof cb === 'function') {\n const scopeBoundCb = tracer.getContext().bind(context.active(), cb)\n return tracer.trace(name, optionsObj, (_span, done) => {\n arguments[lastArgId] = function (err: any) {\n done?.(err)\n return scopeBoundCb.apply(this, arguments)\n }\n\n return fn.apply(this, arguments)\n })\n } else {\n return tracer.trace(name, optionsObj, () => fn.apply(this, arguments))\n }\n }\n }\n\n public startSpan(type: SpanTypes): Span\n public startSpan(type: SpanTypes, options: TracerSpanOptions): Span\n public startSpan(...args: Array): Span {\n const [type, passedOptions]: [string, TracerSpanOptions | undefined] =\n args as any\n const options: TracerSpanOptions = passedOptions\n ? {\n ...passedOptions,\n attributes: {\n 'next.span_category': 'nextjs',\n ...passedOptions.attributes,\n },\n }\n : { attributes: { 'next.span_category': 'nextjs' } }\n\n const localSpanRecorder = getLocalSpanRecorder()\n const parentSpan = options.parentSpan ?? this.getActiveScopeSpan()\n const isolatedParentSpan =\n parentSpan && localSpanRecorder?.isOpenTelemetryIsolatedSpan(parentSpan)\n ? parentSpan\n : undefined\n const parentContext =\n (isolatedParentSpan ? undefined : this.getSpanContext(parentSpan)) ??\n context.active()\n const localSpanRecordingEnabled =\n localSpanRecorder?.isLocalSpanRecordingEnabled() ?? false\n\n if (!localSpanRecordingEnabled) {\n return this.getTracerInstance().startSpan(type, options, parentContext)\n }\n\n const delegateSpan =\n !isolatedParentSpan && this.isOpenTelemetryEnabled()\n ? this.getTracerInstance().startSpan(type, options, parentContext)\n : undefined\n\n return this.createLocalRecordingSpan(\n type,\n options,\n parentContext,\n delegateSpan,\n isolatedParentSpan\n )\n }\n\n private getSpanContext(parentSpan?: Span) {\n const spanContext = parentSpan\n ? trace.setSpan(context.active(), parentSpan)\n : undefined\n\n return spanContext\n }\n\n public getRootSpanAttributes() {\n const spanId = context.active().getValue(rootSpanIdKey) as number\n return rootSpanAttributesStore.get(spanId)\n }\n\n public setRootSpanAttribute(key: AttributeNames, value: AttributeValue) {\n const spanId = context.active().getValue(rootSpanIdKey) as number\n const attributes = rootSpanAttributesStore.get(spanId)\n if (attributes && !attributes.has(key)) {\n attributes.set(key, value)\n }\n\n if (process.env.__NEXT_DEV_SERVER) {\n const localSpan = getLocalSpanRecorder()?.getActiveLocalSpan()\n if (localSpan) {\n localSpan.setAttribute(key, value)\n }\n }\n }\n\n public withSpan(span: Span, fn: () => T): T {\n const recorder = getLocalSpanRecorder()\n if (recorder?.isLocalRecordingSpan(span)) {\n return recorder.withLocalSpan(span, () =>\n recorder.isOpenTelemetryIsolatedSpan(span)\n ? fn()\n : context.with(trace.setSpan(context.active(), span), fn)\n )\n }\n return context.with(trace.setSpan(context.active(), span), fn)\n }\n}\n\nconst getTracer = (() => {\n const tracer = new NextTracerImpl()\n\n return () => tracer\n})()\n\nexport { getTracer, SpanStatusCode, SpanKind }\nexport type { NextTracer, Span, SpanOptions, ContextAPI, TracerSpanOptions }\n"],"names":["LogSpanAllowList","NextVanillaSpanAllowlist","isThenable","NEXT_OTEL_PERFORMANCE_PREFIX","process","env","LOCAL_SPAN_RECORDER_KEY","Symbol","for","api","getLocalSpanRecorder","__NEXT_DEV_SERVER","globalThis","undefined","NEXT_RUNTIME","require","err","context","propagation","trace","SpanStatusCode","SpanKind","ROOT_CONTEXT","BubbledError","Error","constructor","bubble","result","isBubbledError","error","closeSpanWithError","span","endTime","setAttribute","recordException","name","setStatus","code","ERROR","message","end","rootSpanAttributesStore","Map","rootSpanIdKey","createContextKey","lastSpanId","getSpanId","clientTraceDataSetter","set","carrier","key","value","push","NextTracerImpl","getTracerInstance","getTracer","__NEXT_VERSION","isOpenTelemetryEnabled","tracerProvider","activeSpan","getSpan","active","isRecording","getTracerProvider","getDelegate","getContext","getTracePropagationData","activeContext","entries","inject","getActiveScopeSpan","localSpanRecorder","activeLocalSpan","getActiveLocalSpan","isOpenTelemetryIsolatedSpan","runWithDetachedContext","fn","with","withPropagatedContext","getter","force","getSpanContext","remoteContext","extract","mergedContext","args","type","fnOrOptions","fnOrEmpty","tracingEnabled","Boolean","localSpanRecordingEnabled","isLocalSpanRecordingEnabled","options","spanName","parentSpan","isolatedParentSpan","shouldDelegateSpan","has","NEXT_OTEL_VERBOSE","shouldTraceSpan","isRequestInsightsEnabled","hideSpan","spanContext","existingRootSpanId","getValue","isRootSpan","spanId","attributes","setValue","runWithActiveSpan","startTime","performance","now","cleanedUp","onCleanup","delete","measure","split","pop","replace","match","toLowerCase","start","Object","length","then","res","catch","finally","parentContext","startActiveSpan","createLocalRecordingSpan","withLocalSpan","setSpan","delegateSpan","parentSpanContext","delegateSpanContext","createLocalSpan","links","traceId","parentSpanId","isolateOpenTelemetry","wrap","tracer","optionsObj","apply","arguments","lastArgId","cb","scopeBoundCb","bind","_span","done","startSpan","passedOptions","getRootSpanAttributes","get","setRootSpanAttribute","localSpan","withSpan","recorder","isLocalRecordingSpan"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 7264, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/normalizers/built/app/app-pathname-normalizer.ts"],"sourcesContent":["import { normalizeAppPath } from '../../../../shared/lib/router/utils/app-paths'\nimport { Normalizers } from '../../normalizers'\nimport { wrapNormalizerFn } from '../../wrap-normalizer-fn'\nimport { UnderscoreNormalizer } from '../../underscore-normalizer'\nimport type { Normalizer } from '../../normalizer'\n\nexport class AppPathnameNormalizer extends Normalizers {\n constructor() {\n super([\n // The pathname to match should have the trailing `/page` and other route\n // group information stripped from it.\n wrapNormalizerFn(normalizeAppPath),\n // The page should have the `%5F` characters replaced with `_` characters.\n new UnderscoreNormalizer(),\n ])\n }\n\n public normalize(page: string): string {\n return super.normalize(page)\n }\n}\n\nexport class DevAppPathnameNormalizer extends Normalizers {\n constructor(pageNormalizer: Normalizer) {\n super([\n // This should normalize the filename to a page.\n pageNormalizer,\n // Normalize the app page to a pathname.\n new AppPathnameNormalizer(),\n ])\n }\n\n public normalize(filename: string): string {\n return super.normalize(filename)\n }\n}\n"],"names":["normalizeAppPath","Normalizers","wrapNormalizerFn","UnderscoreNormalizer","AppPathnameNormalizer","constructor","normalize","page","DevAppPathnameNormalizer","pageNormalizer","filename"],"mappings":";;;;;;AAAA,SAASA,gBAAgB,QAAQ,gDAA+C;AAChF,SAASC,WAAW,QAAQ,oBAAmB;AAC/C,SAASC,gBAAgB,QAAQ,2BAA0B;AAC3D,SAASC,oBAAoB,QAAQ,8BAA6B;;;;;AAG3D,MAAMC,8BAA8BH,4LAAAA;IACzCI,aAAc;QACZ,KAAK,CAAC;YACJ,yEAAyE;YACzE,sCAAsC;gBACtCH,8MAAAA,EAAiBF,6MAAAA;YACjB,0EAA0E;YAC1E,IAAIG,kNAAAA;SACL;IACH;IAEOG,UAAUC,IAAY,EAAU;QACrC,OAAO,KAAK,CAACD,UAAUC;IACzB;AACF;AAEO,MAAMC,iCAAiCP,4LAAAA;IAC5CI,YAAYI,cAA0B,CAAE;QACtC,KAAK,CAAC;YACJ,gDAAgD;YAChDA;YACA,wCAAwC;YACxC,IAAIL;SACL;IACH;IAEOE,UAAUI,QAAgB,EAAU;QACzC,OAAO,KAAK,CAACJ,UAAUI;IACzB;AACF","ignoreList":[0]}}, + {"offset": {"line": 7309, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/normalizers/normalizers.ts"],"sourcesContent":["import type { Normalizer } from './normalizer'\n\n/**\n * Normalizers combines many normalizers into a single normalizer interface that\n * will normalize the inputted pathname with each normalizer in order.\n */\nexport class Normalizers implements Normalizer {\n constructor(private readonly normalizers: Array = []) {}\n\n public push(normalizer: Normalizer) {\n this.normalizers.push(normalizer)\n }\n\n public normalize(pathname: string): string {\n return this.normalizers.reduce(\n (normalized, normalizer) => normalizer.normalize(normalized),\n pathname\n )\n }\n}\n"],"names":["Normalizers","constructor","normalizers","push","normalizer","normalize","pathname","reduce","normalized"],"mappings":"AAEA;;;CAGC,GACD;;;;AAAO,MAAMA;IACXC,YAA6BC,cAAiC,EAAE,CAAE;aAArCA,WAAAA,GAAAA;IAAsC;IAE5DC,KAAKC,UAAsB,EAAE;QAClC,IAAI,CAACF,WAAW,CAACC,IAAI,CAACC;IACxB;IAEOC,UAAUC,QAAgB,EAAU;QACzC,OAAO,IAAI,CAACJ,WAAW,CAACK,MAAM,CAC5B,CAACC,YAAYJ,aAAeA,WAAWC,SAAS,CAACG,aACjDF;IAEJ;AACF","ignoreList":[0]}}, + {"offset": {"line": 7331, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/normalizers/underscore-normalizer.ts"],"sourcesContent":["import type { Normalizer } from './normalizer'\n\n/**\n * UnderscoreNormalizer replaces all instances of %5F with _.\n */\nexport class UnderscoreNormalizer implements Normalizer {\n public normalize(pathname: string): string {\n return pathname.replace(/%5F/g, '_')\n }\n}\n"],"names":["UnderscoreNormalizer","normalize","pathname","replace"],"mappings":"AAEA;;CAEC,GACD;;;;AAAO,MAAMA;IACJC,UAAUC,QAAgB,EAAU;QACzC,OAAOA,SAASC,OAAO,CAAC,QAAQ;IAClC;AACF","ignoreList":[0]}}, + {"offset": {"line": 7346, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/normalizers/wrap-normalizer-fn.ts"],"sourcesContent":["import type { Normalizer } from './normalizer'\n\nexport function wrapNormalizerFn(fn: (pathname: string) => string): Normalizer {\n return { normalize: fn }\n}\n"],"names":["wrapNormalizerFn","fn","normalize"],"mappings":";;;;AAEO,SAASA,iBAAiBC,EAAgC;IAC/D,OAAO;QAAEC,WAAWD;IAAG;AACzB","ignoreList":[0]}}, + {"offset": {"line": 7359, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/pipe-readable.ts"],"sourcesContent":["import type { ServerResponse } from 'node:http'\nimport type { Readable } from 'node:stream'\n\nimport {\n ResponseAbortedName,\n createAbortController,\n} from './web/spec-extension/adapters/next-request'\nimport { createPromiseWithResolvers } from '../shared/lib/promise-with-resolvers'\nimport { getTracer } from './lib/trace/tracer'\nimport { NextNodeServerSpan } from './lib/trace/constants'\nimport type { ClientComponentLoadTracker } from './client-component-renderer-logger'\n\nexport function isAbortError(e: any): e is Error & { name: 'AbortError' } {\n return e?.name === 'AbortError' || e?.name === ResponseAbortedName\n}\n\nconst HAS_CLIENT_COMPONENT_METRICS_ENABLED =\n 'performance' in globalThis && process.env.NEXT_OTEL_PERFORMANCE_PREFIX\n\nfunction createWriterFromResponse(\n res: ServerResponse,\n waitUntilForEnd?: Promise,\n clientComponentLoadTracker?: ClientComponentLoadTracker\n): WritableStream {\n let started = false\n\n // Create a promise that will resolve once the response has drained. See\n // https://nodejs.org/api/stream.html#stream_event_drain\n let drained = createPromiseWithResolvers()\n function onDrain() {\n drained.resolve()\n }\n res.on('drain', onDrain)\n\n // If the finish event fires, it means we shouldn't block and wait for the\n // drain event.\n res.once('close', () => {\n res.off('drain', onDrain)\n drained.resolve()\n })\n\n // Create a promise that will resolve once the response has finished. See\n // https://nodejs.org/api/http.html#event-finish_1\n const finished = createPromiseWithResolvers()\n res.once('finish', () => {\n finished.resolve()\n })\n\n // Create a writable stream that will write to the response.\n return new WritableStream({\n write: async (chunk) => {\n // You'd think we'd want to use `start` instead of placing this in `write`\n // but this ensures that we don't actually flush the headers until we've\n // started writing chunks.\n if (!started) {\n started = true\n\n if (HAS_CLIENT_COMPONENT_METRICS_ENABLED) {\n const metrics = clientComponentLoadTracker?.snapshot()\n if (metrics) {\n performance.measure(\n `${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`,\n {\n start: metrics.clientComponentLoadStart,\n end:\n metrics.clientComponentLoadStart +\n metrics.clientComponentLoadTimes,\n }\n )\n }\n }\n\n res.flushHeaders()\n getTracer().trace(\n NextNodeServerSpan.startResponse,\n {\n spanName: 'start response',\n },\n () => undefined\n )\n }\n\n try {\n const ok = res.write(chunk)\n\n // Added by the `compression` middleware, this is a function that will\n // flush the partially-compressed response to the client.\n if ('flush' in res && typeof res.flush === 'function') {\n res.flush()\n }\n\n // If the write returns false, it means there's some backpressure, so\n // wait until it's streamed before continuing.\n if (!ok) {\n await drained.promise\n\n // Reset the drained promise so that we can wait for the next drain event.\n drained = createPromiseWithResolvers()\n }\n } catch (err) {\n res.end()\n throw new Error('failed to write chunk to response', { cause: err })\n }\n },\n abort: (err) => {\n if (res.writableFinished) return\n\n res.destroy(err)\n },\n close: async () => {\n // if a waitUntil promise was passed, wait for it to resolve before\n // ending the response.\n if (waitUntilForEnd) {\n await waitUntilForEnd\n }\n\n if (res.writableFinished) return\n\n res.end()\n return finished.promise\n },\n })\n}\n\nexport async function pipeToNodeResponse(\n readable: ReadableStream,\n res: ServerResponse,\n waitUntilForEnd?: Promise,\n clientComponentLoadTracker?: ClientComponentLoadTracker\n) {\n try {\n // If the response has already errored, then just return now.\n const { errored, destroyed } = res\n if (errored || destroyed) return\n\n // Create a new AbortController so that we can abort the readable if the\n // client disconnects.\n const controller = createAbortController(res)\n\n const writer = createWriterFromResponse(\n res,\n waitUntilForEnd,\n clientComponentLoadTracker\n )\n\n await readable.pipeTo(writer, { signal: controller.signal })\n } catch (err: any) {\n // If this isn't related to an abort error, re-throw it.\n if (isAbortError(err)) return\n\n throw new Error('failed to pipe response', { cause: err })\n }\n}\n\nexport async function pipeNodeReadableToNodeResponse(\n readable: Readable,\n res: ServerResponse,\n waitUntilForEnd?: Promise,\n clientComponentLoadTracker?: ClientComponentLoadTracker\n) {\n try {\n const { errored, destroyed } = res\n if (errored || destroyed) return\n\n let started = false\n\n const finished = createPromiseWithResolvers()\n\n // One `drain` listener for the whole response, as in\n // `createWriterFromResponse` above. It must not be `res.once('drain')` per\n // backpressured write: the `compression` middleware forwards `res.on` to\n // its zlib stream but leaves `removeListener` pointing at the response, so\n // a `once` listener is never removed from the stream it was added to. Each\n // backpressured write would leak one, and past ten Node reports the stream\n // as a probable leak via `MaxListenersExceededWarning`.\n //\n // TODO: the upstream fix for that asymmetry is\n // https://github.com/expressjs/compression/pull/153, which intercepts\n // `removeListener` so it reaches the zlib stream. It has been open since\n // 2019 and is not in upstream 1.8.1; we vendor 1.7.4. If it ever lands and\n // we upgrade, `res.off('drain', onDrain)` below would start working with\n // compression active and the caveat on the `close` handler could go away.\n let paused = false\n const onDrain = () => {\n // The listener outlives the readable: `off` below cannot reach the zlib\n // stream either, so a late drain can arrive after teardown.\n if (!paused || readable.destroyed) return\n\n paused = false\n readable.resume()\n }\n res.on('drain', onDrain)\n\n res.once('close', () => {\n // Only removes the listener when compression is inactive, which is the\n // case where it was added to the response itself. Otherwise it lives on\n // the zlib stream, which is released with the response.\n res.off('drain', onDrain)\n readable.destroy()\n finished.resolve()\n })\n\n readable.on('data', (chunk: Buffer) => {\n if (!started) {\n started = true\n\n if (\n 'performance' in globalThis &&\n process.env.NEXT_OTEL_PERFORMANCE_PREFIX\n ) {\n const metrics = clientComponentLoadTracker?.snapshot()\n if (metrics) {\n performance.measure(\n `${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`,\n {\n start: metrics.clientComponentLoadStart,\n end:\n metrics.clientComponentLoadStart +\n metrics.clientComponentLoadTimes,\n }\n )\n }\n }\n\n res.flushHeaders()\n getTracer().trace(\n NextNodeServerSpan.startResponse,\n {\n spanName: 'start response',\n },\n () => undefined\n )\n }\n\n const ok = res.write(chunk)\n\n if ('flush' in res && typeof res.flush === 'function') {\n res.flush()\n }\n\n if (!ok) {\n paused = true\n readable.pause()\n }\n })\n\n readable.on('end', async () => {\n if (waitUntilForEnd) {\n await waitUntilForEnd\n }\n\n if (!res.writableFinished) {\n res.end()\n }\n\n finished.resolve()\n })\n\n readable.on('error', (err) => {\n if (isAbortError(err)) {\n finished.resolve()\n return\n }\n\n res.destroy(err)\n finished.resolve()\n })\n\n await finished.promise\n } catch (err: any) {\n if (isAbortError(err)) return\n\n throw new Error('failed to pipe response', { cause: err })\n }\n}\n"],"names":["ResponseAbortedName","createAbortController","createPromiseWithResolvers","getTracer","NextNodeServerSpan","isAbortError","e","name","HAS_CLIENT_COMPONENT_METRICS_ENABLED","globalThis","process","env","NEXT_OTEL_PERFORMANCE_PREFIX","createWriterFromResponse","res","waitUntilForEnd","clientComponentLoadTracker","started","drained","onDrain","resolve","on","once","off","finished","WritableStream","write","chunk","metrics","snapshot","performance","measure","start","clientComponentLoadStart","end","clientComponentLoadTimes","flushHeaders","trace","startResponse","spanName","undefined","ok","flush","promise","err","Error","cause","abort","writableFinished","destroy","close","pipeToNodeResponse","readable","errored","destroyed","controller","writer","pipeTo","signal","pipeNodeReadableToNodeResponse","paused","resume","pause"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 7571, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/render-result.ts"],"sourcesContent":["import type { OutgoingHttpHeaders, ServerResponse } from 'http'\nimport type { Readable } from 'stream'\nimport type { CacheControl } from './lib/cache-control'\nimport type { FetchMetrics } from './base-http'\nimport type { PrefetchHints } from '../shared/lib/app-router-types'\nimport type { ClientComponentLoadTracker } from './client-component-renderer-logger'\n\nimport {\n chainStreams,\n streamFromBuffer,\n streamFromString,\n streamToString,\n} from './stream-utils/node-web-streams-helper'\nimport {\n isAbortError,\n pipeToNodeResponse,\n pipeNodeReadableToNodeResponse,\n} from './pipe-readable'\nimport type { RenderResumeDataCache } from './resume-data-cache/resume-data-cache'\nimport { InvariantError } from '../shared/lib/invariant-error'\nimport type {\n HTML_CONTENT_TYPE_HEADER,\n JSON_CONTENT_TYPE_HEADER,\n TEXT_PLAIN_CONTENT_TYPE_HEADER,\n} from '../lib/constants'\nimport type { RSC_CONTENT_TYPE_HEADER } from '../client/components/app-router-headers'\n\ntype ContentTypeOption =\n | typeof RSC_CONTENT_TYPE_HEADER // For App Page RSC responses\n | typeof HTML_CONTENT_TYPE_HEADER // For App Page, Pages HTML responses\n | typeof JSON_CONTENT_TYPE_HEADER // For API routes, Next.js data requests\n | typeof TEXT_PLAIN_CONTENT_TYPE_HEADER // For simplified errors\n\nexport type AppPageRenderResultMetadata = {\n /** Request-local metrics for the first response write. Never cache this. */\n clientComponentLoadTracker?: ClientComponentLoadTracker\n flightData?: Buffer\n cacheControl?: CacheControl\n staticBailoutInfo?: {\n stack?: string\n description?: string\n }\n\n /**\n * The postponed state if the render had postponed and needs to be resumed.\n */\n postponed?: string\n\n /**\n * Whether the prerender left any UI pending in a Suspense boundary. This is\n * reported directly by React's prerender result before Next.js resumes\n * client-only boundaries.\n */\n hasPendingUi?: boolean\n\n /**\n * The headers to set on the response that were added by the render.\n */\n headers?: OutgoingHttpHeaders\n statusCode?: number\n fetchTags?: string\n fetchMetrics?: FetchMetrics\n\n segmentData?: Map\n\n /**\n * Per-route prefetch hints computed at build time (e.g. segment inlining\n * decisions based on gzip sizes). Written to prefetch-hints.json by the\n * build pipeline.\n */\n prefetchHints?: PrefetchHints\n\n /**\n * In development, the resume data cache is warmed up before the render. This\n * is attached to the metadata so that it can be used during the render. When\n * prerendering, the filled resume data cache is also attached to the metadata\n * so that it can be used when prerendering matching fallback shells.\n */\n renderResumeDataCache?: RenderResumeDataCache\n}\n\nexport type PrerenderFailure = {\n readonly error: Error\n readonly result: RenderResult<\n Pick<\n AppPageRenderResultMetadata,\n 'headers' | 'flightData' | 'fetchMetrics' | 'postponed'\n >\n >\n}\n\nexport type PrerenderResult =\n | RenderResult\n | PrerenderFailure\n\nexport type PagesRenderResultMetadata = {\n pageData?: any\n cacheControl?: CacheControl\n isNotFound?: boolean\n isRedirect?: boolean\n}\n\nexport type StaticRenderResultMetadata = {}\n\nexport type RenderResultMetadata = AppPageRenderResultMetadata &\n PagesRenderResultMetadata &\n StaticRenderResultMetadata\n\nexport type RenderResultResponse =\n | ReadableStream[]\n | ReadableStream\n | Readable\n | string\n | Buffer\n | null\n\nexport type RenderResultOptions<\n Metadata extends RenderResultMetadata = RenderResultMetadata,\n> = {\n contentType: ContentTypeOption | null\n waitUntil?: Promise\n metadata: Metadata\n}\n\nfunction isNodeReadable(value: unknown): value is Readable {\n return (\n value !== null &&\n typeof value === 'object' &&\n typeof (value as Record).pipe === 'function' &&\n typeof (value as Record).on === 'function' &&\n !(value instanceof ReadableStream)\n )\n}\n\nexport default class RenderResult<\n Metadata extends RenderResultMetadata = RenderResultMetadata,\n> {\n /**\n * The detected content type for the response. This is used to set the\n * `Content-Type` header.\n */\n public readonly contentType: ContentTypeOption | null\n\n /**\n * The metadata for the response. This is used to set the revalidation times\n * and other metadata.\n */\n public readonly metadata: Readonly\n\n /**\n * The response itself. This can be a string, a stream, or null. If it's a\n * string, then it's a static response. If it's a stream, then it's a\n * dynamic response. If it's null, then the response was not found or was\n * already sent.\n */\n private response: RenderResultResponse\n\n /**\n * A render result that represents an empty response. This is used to\n * represent a response that was not found or was already sent.\n */\n public static readonly EMPTY = new RenderResult(\n null,\n { metadata: {}, contentType: null }\n )\n\n /**\n * Creates a new RenderResult instance from a static response.\n *\n * @param value the static response value\n * @param contentType the content type of the response\n * @returns a new RenderResult instance\n */\n public static fromStatic(\n value: string | Buffer,\n contentType: ContentTypeOption\n ) {\n return new RenderResult(value, {\n metadata: {},\n contentType,\n })\n }\n\n private readonly waitUntil?: Promise\n\n constructor(\n response: RenderResultResponse,\n { contentType, waitUntil, metadata }: RenderResultOptions\n ) {\n this.response = response\n this.contentType = contentType\n this.metadata = metadata\n this.waitUntil = waitUntil\n }\n\n public assignMetadata(metadata: Metadata) {\n Object.assign(this.metadata, metadata)\n }\n\n /**\n * Returns true if the response is null. It can be null if the response was\n * not found or was already sent.\n */\n public get isNull(): boolean {\n return this.response === null\n }\n\n /**\n * Returns false if the response is a string. It can be a string if the page\n * was prerendered. If it's not, then it was generated dynamically.\n */\n public get isDynamic(): boolean {\n return typeof this.response !== 'string'\n }\n\n /**\n * Returns the response if it is a string. If the page was dynamic, this will\n * return a promise if the `stream` option is true, or it will throw an error.\n *\n * @param stream Whether or not to return a promise if the response is dynamic\n * @returns The response as a string\n */\n public toUnchunkedString(stream?: false): string\n public toUnchunkedString(stream: true): Promise\n public toUnchunkedString(stream = false): Promise | string {\n if (this.response === null) {\n // If the response is null, return an empty string. This behavior is\n // intentional as we're now providing the `RenderResult.EMPTY` value.\n return ''\n }\n\n if (typeof this.response !== 'string') {\n if (!stream) {\n throw new InvariantError(\n 'dynamic responses cannot be unchunked. This is a bug in Next.js'\n )\n }\n\n return streamToString(this.readable)\n }\n\n return this.response\n }\n\n /**\n * Returns a readable stream of the response.\n */\n private get readable(): ReadableStream {\n if (this.response === null) {\n // If the response is null, return an empty stream. This behavior is\n // intentional as we're now providing the `RenderResult.EMPTY` value.\n return new ReadableStream({\n start(controller) {\n controller.close()\n },\n })\n }\n\n if (typeof this.response === 'string') {\n return streamFromString(this.response)\n }\n\n if (Buffer.isBuffer(this.response)) {\n return streamFromBuffer(this.response)\n }\n\n // If the response is an array of streams, then chain them together.\n if (Array.isArray(this.response)) {\n return chainStreams(...this.response)\n }\n\n if (isNodeReadable(this.response)) {\n if (process.env.NEXT_RUNTIME === 'edge') {\n throw new InvariantError(\n 'Node.js Readable cannot be converted to a web stream in the edge runtime'\n )\n } else {\n let Readable: typeof import('node:stream').Readable\n if (process.env.TURBOPACK) {\n Readable = (require('node:stream') as typeof import('node:stream'))\n .Readable\n } else {\n Readable = (\n __non_webpack_require__(\n 'node:stream'\n ) as typeof import('node:stream')\n ).Readable\n }\n return Readable.toWeb(this.response) as ReadableStream\n }\n }\n\n return this.response\n }\n\n /**\n * Coerces the response to an array of streams. This will convert the response\n * to an array of streams if it is not already one.\n *\n * @returns An array of streams\n */\n private coerce(): ReadableStream[] {\n if (this.response === null) {\n // If the response is null, return an empty stream. This behavior is\n // intentional as we're now providing the `RenderResult.EMPTY` value.\n return []\n }\n\n if (typeof this.response === 'string') {\n return [streamFromString(this.response)]\n } else if (Array.isArray(this.response)) {\n return this.response\n } else if (Buffer.isBuffer(this.response)) {\n return [streamFromBuffer(this.response)]\n } else if (isNodeReadable(this.response)) {\n if (process.env.NEXT_RUNTIME === 'edge') {\n throw new InvariantError(\n 'Node.js Readable cannot be converted to a web stream in the edge runtime'\n )\n } else {\n let Readable: typeof import('node:stream').Readable\n if (process.env.TURBOPACK) {\n Readable = (require('node:stream') as typeof import('node:stream'))\n .Readable\n } else {\n Readable = (\n __non_webpack_require__(\n 'node:stream'\n ) as typeof import('node:stream')\n ).Readable\n }\n return [Readable.toWeb(this.response) as ReadableStream]\n }\n } else {\n return [this.response]\n }\n }\n\n /**\n * Pipes the response through a transform stream. This converts the response\n * to a single readable stream (chaining if needed) and pipes it through the\n * provided transform.\n *\n * @param transform The transform stream to pipe through\n */\n public pipeThrough(transform: TransformStream): void {\n this.response = this.readable.pipeThrough(transform)\n }\n\n /**\n * Unshifts a new stream to the response. This will convert the response to an\n * array of streams if it is not already one and will add the new stream to\n * the start of the array. When this response is piped, all of the streams\n * will be piped one after the other.\n *\n * @param readable The new stream to unshift\n */\n public unshift(readable: ReadableStream): void {\n // Coerce the response to an array of streams.\n this.response = this.coerce()\n\n // Add the new stream to the start of the array.\n this.response.unshift(readable)\n }\n\n /**\n * Chains a new stream to the response. This will convert the response to an\n * array of streams if it is not already one and will add the new stream to\n * the end. When this response is piped, all of the streams will be piped\n * one after the other.\n *\n * @param readable The new stream to chain\n */\n public push(readable: ReadableStream): void {\n // Coerce the response to an array of streams.\n this.response = this.coerce()\n\n // Add the new stream to the end of the array.\n this.response.push(readable)\n }\n\n /**\n * Pipes the response to a writable stream. This will close/cancel the\n * writable stream if an error is encountered. If this doesn't throw, then\n * the writable stream will be closed or aborted.\n *\n * @param writable Writable stream to pipe the response to\n */\n public async pipeTo(writable: WritableStream): Promise {\n try {\n await this.readable.pipeTo(writable, {\n // We want to close the writable stream ourselves so that we can wait\n // for the waitUntil promise to resolve before closing it. If an error\n // is encountered, we'll abort the writable stream if we swallowed the\n // error.\n preventClose: true,\n })\n\n // If there is a waitUntil promise, wait for it to resolve before\n // closing the writable stream.\n if (this.waitUntil) await this.waitUntil\n\n // Close the writable stream.\n await writable.close()\n } catch (err) {\n // If this is an abort error, we should abort the writable stream (as we\n // took ownership of it when we started piping). We don't need to re-throw\n // because we handled the error.\n if (isAbortError(err)) {\n // Abort the writable stream if an error is encountered.\n await writable.abort(err)\n\n return\n }\n\n // We're not aborting the writer here as when this method throws it's not\n // clear as to how so the caller should assume it's their responsibility\n // to clean up the writer.\n throw err\n }\n }\n\n /**\n * Pipes the response to a node response. This will close/cancel the node\n * response if an error is encountered.\n *\n * @param res\n */\n public async pipeToNodeResponse(res: ServerResponse) {\n if (\n this.response !== null &&\n typeof this.response !== 'string' &&\n !Buffer.isBuffer(this.response) &&\n !Array.isArray(this.response) &&\n isNodeReadable(this.response)\n ) {\n await pipeNodeReadableToNodeResponse(\n this.response,\n res,\n this.waitUntil,\n this.metadata.clientComponentLoadTracker\n )\n return\n }\n await pipeToNodeResponse(\n this.readable,\n res,\n this.waitUntil,\n this.metadata.clientComponentLoadTracker\n )\n }\n}\n"],"names":["chainStreams","streamFromBuffer","streamFromString","streamToString","isAbortError","pipeToNodeResponse","pipeNodeReadableToNodeResponse","InvariantError","isNodeReadable","value","pipe","on","ReadableStream","RenderResult","EMPTY","metadata","contentType","fromStatic","constructor","response","waitUntil","assignMetadata","Object","assign","isNull","isDynamic","toUnchunkedString","stream","readable","start","controller","close","Buffer","isBuffer","Array","isArray","process","env","NEXT_RUNTIME","Readable","TURBOPACK","require","__non_webpack_require__","toWeb","coerce","pipeThrough","transform","unshift","push","pipeTo","writable","preventClose","err","abort","res","clientComponentLoadTracker"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 7802, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/request-meta.ts"],"sourcesContent":["import type { IncomingMessage, ServerResponse } from 'http'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { UrlWithParsedQuery } from 'url'\nimport type { BaseNextRequest } from './base-http'\nimport type { CloneableBody } from './body-streams'\nimport type { RouteMatch } from './route-matches/route-match'\nimport type { NEXT_RSC_UNION_QUERY } from '../client/components/app-router-headers'\nimport type {\n ResponseCacheEntry,\n ServerComponentsHmrCache,\n} from './response-cache'\nimport type { PagesDevOverlayBridgeType } from '../next-devtools/userspace/pages/pages-dev-overlay-setup'\nimport type { OpaqueFallbackRouteParams } from './request/fallback-params'\nimport type { IncrementalCache } from './lib/incremental-cache'\nimport type { RevalidateFn } from './lib/router-utils/router-server-context'\nimport type { NextRequest } from './web/exports'\n\n// FIXME: (wyattjoh) this is a temporary solution to allow us to pass data between bundled modules\nexport const NEXT_REQUEST_META = Symbol.for('NextInternalRequestMeta')\n\nexport type NextIncomingMessage = (\n | BaseNextRequest\n | IncomingMessage\n | NextRequest\n) & {\n [NEXT_REQUEST_META]?: RequestMeta\n}\n\n/**\n * The callback function to call when a response cache entry was generated or\n * looked up in the cache. When it returns true, the server assumes that the\n * handler has already responded to the request and will not do so itself.\n */\nexport type OnCacheEntryHandler = (\n /**\n * The response cache entry that was generated or looked up in the cache.\n */\n cacheEntry: ResponseCacheEntry,\n\n /**\n * The request metadata.\n */\n requestMeta: {\n /**\n * The URL that was used to make the request.\n */\n url: string | undefined\n }\n) => Promise | boolean | void\n\nexport interface RequestMeta {\n /**\n * The query that was used to make the request.\n */\n initQuery?: ParsedUrlQuery\n\n /**\n * The URL that was used to make the request.\n */\n initURL?: string\n\n /**\n * The protocol that was used to make the request.\n */\n initProtocol?: string\n\n /**\n * The body that was read from the request. This is used to allow the body to\n * be read multiple times.\n */\n clonableBody?: CloneableBody\n\n /**\n * True when the request matched a locale domain that was configured in the\n * next.config.js file.\n */\n isLocaleDomain?: boolean\n\n /**\n * True when the request had locale information stripped from the pathname\n * part of the URL.\n */\n didStripLocale?: boolean\n\n /**\n * If the request had its URL rewritten, this is the pathname it was rewritten\n * to (not a full URL, just the pathname).\n */\n rewrittenPathname?: string\n\n /**\n * The cookies that were added by middleware and were added to the response.\n */\n middlewareCookie?: string[]\n\n /**\n * The match on the request for a given route.\n */\n match?: RouteMatch\n\n /**\n * The incremental cache to use for the request.\n */\n incrementalCache?: IncrementalCache\n\n /**\n * The server components HMR cache, only for dev.\n */\n serverComponentsHmrCache?: ServerComponentsHmrCache\n\n /**\n * The hash of the most recent server component change (dev only), set by the\n * router-server from the hot-reloader. Included in `\"use cache\"` cache keys\n * so that cached entries are revalidated after an edit, for every client,\n * regardless of whether it runs the HMR client.\n */\n hmrRefreshHash?: string\n\n /**\n * Equals the segment path that was used for the prefetch RSC request.\n */\n segmentPrefetchRSCRequest?: string\n\n /**\n * True when the request is for the prefetch flight data.\n */\n isPrefetchRSCRequest?: true\n\n /**\n * True when the request is for the flight data.\n */\n isRSCRequest?: true\n\n /**\n * A search param set by the Next.js client when performing RSC requests.\n * Because some CDNs do not vary their cache entries on our custom headers,\n * this search param represents a hash of the header values. For any cached\n * RSC request, we should verify that the hash matches before responding.\n * Otherwise this can lead to cache poisoning.\n * TODO: Consider not using custom request headers at all, and instead encode\n * everything into the search param.\n */\n cacheBustingSearchParam?: string\n\n /**\n * True when the request is for the `/_next/data` route using the pages\n * router.\n */\n isNextDataReq?: true\n\n /**\n * Postponed state to use for resumption. When absent, the request is not a\n * resume request. A non-empty string contains the state to resume, while an\n * empty string represents a resume request without postponed state and\n * signals that the renderer should perform a full dynamic render.\n *\n * There are no guarantees that the page actually postponed, as verifying\n * that would incur an additional cache lookup.\n */\n postponed?: string\n\n /**\n * The action body extracted from a server action request when the postponed\n * state was prepended to the body by the proxy. This allows the action\n * handler to read the action payload without re-reading the consumed stream.\n */\n actionBody?: Buffer\n\n /**\n * If provided, this will be called when a response cache entry was generated\n * or looked up in the cache.\n *\n * @deprecated Use `onCacheEntryV2` instead.\n */\n onCacheEntry?: OnCacheEntryHandler\n\n /**\n * If provided, this will be called when a response cache entry was generated\n * or looked up in the cache.\n */\n onCacheEntryV2?: OnCacheEntryHandler\n\n /**\n * The previous revalidate before rendering 404 page for notFound: true\n */\n notFoundRevalidate?: number | false\n\n /**\n * In development, the original source page that returned a 404.\n */\n developmentNotFoundSourcePage?: string\n\n /**\n * The path we routed to and should be invoked\n */\n invokePath?: string\n\n /**\n * The specific page output we should be matching\n */\n invokeOutput?: string\n\n /**\n * The status we are invoking the request with from routing\n */\n invokeStatus?: number\n\n /**\n * The routing error we are invoking with\n */\n invokeError?: Error\n\n /**\n * The query parsed for the invocation\n */\n invokeQuery?: Record\n\n /**\n * Whether the request is a middleware invocation\n */\n middlewareInvoke?: boolean\n\n /**\n * Whether the request should render the fallback shell or not.\n */\n renderFallbackShell?: boolean\n\n /**\n * Route param keys that were explicitly resolved from partial nxtP*\n * query params during background revalidation. Used by app-page.ts to\n * determine which fallback params should remain deferred vs resolved\n * in intermediate PPR shells.\n */\n resolvedRouteParamKeys?: Set\n\n /**\n * Whether the request is for the custom error page.\n */\n customErrorRender?: true\n\n /**\n * Whether to bubble up the NoFallbackError to the caller when a 404 is\n * returned.\n */\n bubbleNoFallback?: true\n\n /**\n * True when the request had locale information inferred from the default\n * locale.\n */\n localeInferredFromDefault?: true\n\n /**\n * The locale that was inferred or explicitly set for the request.\n */\n locale?: string\n\n /**\n * The default locale that was inferred or explicitly set for the request.\n */\n defaultLocale?: string\n\n /**\n * The relative project dir the server is running in from project root\n */\n relativeProjectDir?: string\n\n /**\n * The dist directory the server is currently using\n */\n distDir?: string\n\n /**\n Optional hostname used by route handlers when constructing absolute URLs.\n hostname: '127.0.0.1',\n */\n hostname?: string\n\n /**\n Optional internal revalidate function to avoid revalidating over the network\n */\n revalidate?: RevalidateFn\n\n /**\n Optional function to render the 404 page for pages router `notFound: true`\n */\n render404?: (\n req: IncomingMessage,\n res: ServerResponse,\n parsedUrl?: UrlWithParsedQuery,\n setHeaders?: boolean\n ) => Promise\n\n /**\n * The query after resolving routes\n */\n query?: ParsedUrlQuery\n\n /**\n * The params after resolving routes\n */\n params?: ParsedUrlQuery\n\n /**\n * ErrorOverlay component to use in development for pages router\n */\n PagesErrorDebug?: PagesDevOverlayBridgeType\n\n /**\n * Whether server is in minimal mode (this will be replaced with more\n * specific flags in future)\n */\n minimalMode?: boolean\n\n /**\n * Staged renders defer these route params until after the static stage. They\n * keep their concrete request values instead of replacing them with\n * placeholders. Dev static-shell validation uses the same set for the\n * selected shell.\n *\n * For `/t2/items/b2` with selected shell `/t2/items/[bottom]`, this map\n * contains only `bottom`:\n * - A layout's `params` containing only `top` can resolve statically.\n * - A page's `params` containing `bottom` waits until after the static stage.\n *\n * A set recorded in postponed state overrides this metadata on a resume,\n * including an explicitly empty set.\n */\n stagedFallbackParams?: OpaqueFallbackRouteParams | null\n\n /**\n * Dev static-shell debug renders use these params to prerender the matched\n * source shell. The Instant Navigation Testing API uses this path too. The\n * prerender substitutes opaque placeholders for these params rather than\n * using their request values.\n *\n * Suppose `generateStaticParams` returns `[{ top: 't1' }]` for\n * `/[top]/items/[bottom]`. A request for `/t2/items/b2` has:\n * - Source `/[top]/items/[bottom]`: `top` and `bottom` are unresolved.\n * - Completed shell `/t2/items/[bottom]`: only `bottom` is unresolved.\n *\n * This map contains the source's `top` and `bottom`. A debug render of that\n * source also uses this map as `stagedFallbackParams`.\n */\n fallbackRouteParams?: OpaqueFallbackRouteParams | null\n\n /** DEV only: parameter matching rejected this request as not found. */\n devParamMatchingRejected?: boolean\n\n /** DEV only: closed parameters, including for successful allowed values. */\n devNotFoundParams?: readonly string[]\n\n /**\n * DEV only: Request timings in process.hrtime.bigint()\n */\n devRequestTimingStart?: bigint\n devRequestTimingMiddlewareStart?: bigint\n devRequestTimingMiddlewareEnd?: bigint\n devRequestTimingInternalsEnd?: bigint\n\n /**\n * DEV only: The duration of getStaticPaths/generateStaticParams in process.hrtime.bigint()\n */\n devGenerateStaticParamsDuration?: bigint\n\n /**\n * DEV only: Server action log info to be logged after the request log\n */\n devServerActionLog?: {\n functionName: string\n args: unknown[]\n location: string\n duration: number\n }\n}\n\n/**\n * Gets the request metadata. If no key is provided, the entire metadata object\n * is returned.\n *\n * @param req the request to get the metadata from\n * @param key the key to get from the metadata (optional)\n * @returns the value for the key or the entire metadata object\n */\nexport function getRequestMeta(\n req: NextIncomingMessage,\n key?: undefined\n): RequestMeta\nexport function getRequestMeta(\n req: NextIncomingMessage,\n key: K\n): RequestMeta[K]\nexport function getRequestMeta(\n req: NextIncomingMessage,\n key?: K\n): RequestMeta | RequestMeta[K] {\n const meta = req[NEXT_REQUEST_META] || {}\n return typeof key === 'string' ? meta[key] : meta\n}\n\n/**\n * Sets the request metadata.\n *\n * @param req the request to set the metadata on\n * @param meta the metadata to set\n * @returns the mutated request metadata\n */\nexport function setRequestMeta(req: NextIncomingMessage, meta: RequestMeta) {\n req[NEXT_REQUEST_META] = meta\n return meta\n}\n\n/**\n * Adds a value to the request metadata.\n *\n * @param request the request to mutate\n * @param key the key to set\n * @param value the value to set\n * @returns the mutated request metadata\n */\nexport function addRequestMeta(\n request: NextIncomingMessage,\n key: K,\n value: RequestMeta[K]\n) {\n const meta = getRequestMeta(request)\n meta[key] = value\n return setRequestMeta(request, meta)\n}\n\n/**\n * Removes a key from the request metadata.\n *\n * @param request the request to mutate\n * @param key the key to remove\n * @returns the mutated request metadata\n */\nexport function removeRequestMeta(\n request: NextIncomingMessage,\n key: K\n) {\n const meta = getRequestMeta(request)\n delete meta[key]\n return setRequestMeta(request, meta)\n}\n\ntype NextQueryMetadata = {\n /**\n * The `_rsc` query parameter used for cache busting to ensure that the RSC\n * requests do not get cached by the browser explicitly.\n */\n [NEXT_RSC_UNION_QUERY]?: string\n}\n\nexport type NextParsedUrlQuery = ParsedUrlQuery & NextQueryMetadata\n\n/**\n * subset of `url.parse` return value\n */\ninterface LegacyUrl {\n auth?: string | null\n hash: string | null\n hostname: string | null\n href: string\n pathname: string | null\n protocol: string | null\n search: string | null\n slashes: boolean | null\n port: string | null\n query: string | null | ParsedUrlQuery\n}\ninterface LegacyUrlWithParsedQuery extends LegacyUrl {\n query: ParsedUrlQuery\n}\n\n// TODO: Remove in favor of WHATWG URLs\nexport interface NextUrlWithParsedQuery extends LegacyUrlWithParsedQuery {\n query: NextParsedUrlQuery\n}\n"],"names":["NEXT_REQUEST_META","Symbol","for","getRequestMeta","req","key","meta","setRequestMeta","addRequestMeta","request","value","removeRequestMeta"],"mappings":"AAiBA,kGAAkG;;;;;;;;;;;;;AAC3F,MAAMA,oBAAoBC,OAAOC,GAAG,CAAC,2BAA0B;AAsX/D,SAASC,eACdC,GAAwB,EACxBC,GAAO;IAEP,MAAMC,OAAOF,GAAG,CAACJ,kBAAkB,IAAI,CAAC;IACxC,OAAO,OAAOK,QAAQ,WAAWC,IAAI,CAACD,IAAI,GAAGC;AAC/C;AASO,SAASC,eAAeH,GAAwB,EAAEE,IAAiB;IACxEF,GAAG,CAACJ,kBAAkB,GAAGM;IACzB,OAAOA;AACT;AAUO,SAASE,eACdC,OAA4B,EAC5BJ,GAAM,EACNK,KAAqB;IAErB,MAAMJ,OAAOH,eAAeM;IAC5BH,IAAI,CAACD,IAAI,GAAGK;IACZ,OAAOH,eAAeE,SAASH;AACjC;AASO,SAASK,kBACdF,OAA4B,EAC5BJ,GAAM;IAEN,MAAMC,OAAOH,eAAeM;IAC5B,OAAOH,IAAI,CAACD,IAAI;IAChB,OAAOE,eAAeE,SAASH;AACjC","ignoreList":[0]}}, + {"offset": {"line": 7838, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/response-cache/index.ts"],"sourcesContent":["import type { ResponseCacheOwner } from '../lib/route-cache-key'\nimport type {\n ResponseCacheResult,\n ResponseGenerator,\n ResponseCacheBase,\n IncrementalResponseCacheEntry,\n IncrementalResponseCache,\n GetIncrementalResponseCacheContext,\n GetIncrementalImageCacheContext,\n} from './types'\nimport { IncrementalCacheKind } from './types'\nimport { InvariantError } from '../../shared/lib/invariant-error'\n\nimport { Batcher } from '../../lib/batcher'\nimport { LRUCache } from '../lib/lru-cache'\nimport { warnOnce } from '../../build/output/log'\nimport { scheduleOnNextTick } from '../../lib/scheduler'\nimport {\n fromResponseCacheEntry,\n routeKindToIncrementalCacheKind,\n toResponseCacheEntry,\n} from './utils'\nimport type { RouteKind } from '../route-kind'\nimport type { PrerenderFailure } from '../render-result'\n\ntype IncrementalResponseCacheResult =\n | IncrementalResponseCacheEntry\n | PrerenderFailure\n | null\n\n/**\n * Parses an environment variable as a positive integer, returning the fallback\n * if the value is missing, not a number, or not positive.\n */\nfunction parsePositiveInt(\n envValue: string | undefined,\n fallback: number\n): number {\n if (!envValue) return fallback\n const parsed = parseInt(envValue, 10)\n return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback\n}\n\n/**\n * Default TTL (in milliseconds) for minimal mode response cache entries.\n * Used for cache hit validation as a fallback for providers that don't\n * send the x-invocation-id header yet.\n *\n * 10 seconds chosen because:\n * - Long enough to dedupe rapid successive requests (e.g., page + data)\n * - Short enough to not serve stale data across unrelated requests\n *\n * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_TTL` environment variable.\n */\nconst DEFAULT_TTL_MS = parsePositiveInt(\n process.env.NEXT_PRIVATE_RESPONSE_CACHE_TTL,\n 10_000\n)\n\n/**\n * Default maximum number of entries in the response cache.\n * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE` environment variable.\n */\nconst DEFAULT_MAX_SIZE = parsePositiveInt(\n process.env.NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE,\n 150\n)\n\n/**\n * Separator used in compound cache keys to join pathname and invocationID.\n * Using null byte (\\0) since it cannot appear in valid URL paths or UUIDs.\n */\nconst KEY_SEPARATOR = '\\0'\n\n/**\n * Sentinel value used for TTL-based cache entries (when invocationID is undefined).\n * Chosen to be a clearly reserved marker for internal cache keys.\n */\nconst TTL_SENTINEL = '__ttl_sentinel__'\n\n/**\n * Entry stored in the LRU cache.\n */\ntype CacheEntry = {\n entry: IncrementalResponseCacheResult\n /**\n * TTL expiration timestamp in milliseconds. Used as a fallback for\n * cache hit validation when providers don't send x-invocation-id.\n * Memory pressure is managed by LRU eviction rather than timers.\n */\n expiresAt: number\n}\n\n/**\n * Creates a compound cache key from pathname and invocationID.\n */\nfunction createCacheKey(\n pathname: string,\n invocationID: string | undefined\n): string {\n return `${pathname}${KEY_SEPARATOR}${invocationID ?? TTL_SENTINEL}`\n}\n\n/**\n * Extracts the invocationID from a compound cache key.\n * Returns undefined if the key used TTL_SENTINEL.\n */\nfunction extractInvocationID(compoundKey: string): string | undefined {\n const separatorIndex = compoundKey.lastIndexOf(KEY_SEPARATOR)\n if (separatorIndex === -1) return undefined\n\n const invocationID = compoundKey.slice(separatorIndex + 1)\n return invocationID === TTL_SENTINEL ? undefined : invocationID\n}\n\nexport * from './types'\n\nexport default class ResponseCache implements ResponseCacheBase {\n // The get and revalidate batchers share pending renders across invocation\n // IDs, including failures. Invocation IDs scope reuse of completed results in\n // the LRU below.\n private readonly getBatcher = Batcher.create<\n { key: string; isOnDemandRevalidate: boolean },\n IncrementalResponseCacheResult,\n string\n >({\n // Ensure on-demand revalidate doesn't block normal requests, it should be\n // safe to run an on-demand revalidate for the same key as a normal request.\n cacheKeyFn: ({ key, isOnDemandRevalidate }) =>\n `${key}-${isOnDemandRevalidate ? '1' : '0'}`,\n // We wait to do any async work until after we've added our promise to\n // `pendingResponses` to ensure that any any other calls will reuse the\n // same promise until we've fully finished our work.\n schedulerFn: scheduleOnNextTick,\n })\n\n private readonly revalidateBatcher = Batcher.create<\n string,\n IncrementalResponseCacheResult\n >({\n // We wait to do any async work until after we've added our promise to\n // `pendingResponses` to ensure that any any other calls will reuse the\n // same promise until we've fully finished our work.\n schedulerFn: scheduleOnNextTick,\n })\n\n /**\n * LRU cache for minimal mode using compound keys (pathname + invocationID).\n * This allows multiple invocations to cache the same pathname without\n * overwriting each other's entries.\n */\n private readonly cache: LRUCache\n\n /**\n * Set of invocation IDs that have had cache entries evicted.\n * Used to detect when the cache size may be too small.\n * Bounded to prevent memory growth.\n */\n private readonly evictedInvocationIDs: Set = new Set()\n\n /**\n * The configured max size, stored for logging.\n */\n private readonly maxSize: number\n\n /**\n * The configured TTL for cache entries in milliseconds.\n */\n private readonly ttl: number\n\n // we don't use minimal_mode name here as this.minimal_mode is\n // statically replace for server runtimes but we need it to\n // be dynamic here\n private minimal_mode?: boolean\n\n private readonly route: ResponseCacheOwner | 'image'\n\n constructor({\n minimalMode,\n route,\n maxSize = DEFAULT_MAX_SIZE,\n ttl = DEFAULT_TTL_MS,\n }: {\n minimalMode: boolean\n route: ResponseCacheOwner | 'image'\n maxSize?: number\n ttl?: number\n }) {\n if (!route) {\n throw new InvariantError('Response cache requires a source route')\n }\n this.route = route\n this.minimal_mode = minimalMode\n this.maxSize = maxSize\n this.ttl = ttl\n\n // Create the LRU cache with eviction tracking\n this.cache = new LRUCache(maxSize, undefined, (compoundKey) => {\n const invocationID = extractInvocationID(compoundKey)\n if (invocationID) {\n // Bound to 100 entries to prevent unbounded memory growth.\n // FIFO eviction is acceptable here because:\n // 1. Invocations are short-lived (single request lifecycle), so older\n // invocations are unlikely to still be active after 100 newer ones\n // 2. This warning mechanism is best-effort for developer guidance—\n // missing occasional eviction warnings doesn't affect correctness\n // 3. If a long-running invocation is somehow evicted and then has\n // another cache entry evicted, it will simply be re-added\n if (this.evictedInvocationIDs.size >= 100) {\n const first = this.evictedInvocationIDs.values().next().value\n if (first) this.evictedInvocationIDs.delete(first)\n }\n this.evictedInvocationIDs.add(invocationID)\n }\n })\n }\n\n /**\n * Gets the response cache entry for the given key.\n *\n * @param key - The key to get the response cache entry for.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param context - The context for the get request.\n * @returns The response cache entry.\n */\n public async get(\n key: string | null,\n responseGenerator: ResponseGenerator,\n context: {\n routeKind: RouteKind\n isOnDemandRevalidate?: boolean\n isPrefetch?: boolean\n incrementalCache: IncrementalResponseCache\n isRoutePPREnabled?: boolean\n isFallback?: boolean\n waitUntil?: (prom: Promise) => void\n\n /**\n * The invocation ID from the infrastructure. Used to scope the in-memory\n * cache to a single revalidation request in minimal mode. Concurrent\n * invocations can still share a pending render through the batchers.\n */\n invocationID?: string\n }\n ): Promise {\n // If there is no key for the cache, we can't possibly look this up in the\n // cache so just return the result of the response generator.\n if (!key) {\n return responseGenerator({\n hasResolved: false,\n previousCacheEntry: null,\n })\n }\n\n // Check minimal mode cache before doing any other work.\n if (this.minimal_mode) {\n const cacheKey = createCacheKey(key, context.invocationID)\n const cachedItem = this.cache.get(cacheKey)\n\n if (cachedItem) {\n // With invocationID: exact match found - always a hit\n // With TTL mode: must check expiration\n if (context.invocationID !== undefined) {\n return cachedItem.entry !== null && 'error' in cachedItem.entry\n ? cachedItem.entry\n : toResponseCacheEntry(cachedItem.entry)\n }\n\n // TTL entries can be reused by unrelated requests. Exclude failures so\n // those requests can retry instead of receiving a cached error.\n const now = Date.now()\n if (\n (cachedItem.entry === null || !('error' in cachedItem.entry)) &&\n cachedItem.expiresAt > now\n ) {\n return toResponseCacheEntry(cachedItem.entry)\n }\n\n // TTL expired - clean up\n this.cache.remove(cacheKey)\n }\n\n // Warn if this invocation had entries evicted - indicates cache may be too small.\n if (\n context.invocationID &&\n this.evictedInvocationIDs.has(context.invocationID)\n ) {\n warnOnce(\n `Response cache entry was evicted for invocation ${context.invocationID}. ` +\n `Consider increasing NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE (current: ${this.maxSize}).`\n )\n }\n }\n\n const {\n incrementalCache,\n isOnDemandRevalidate = false,\n isFallback = false,\n isRoutePPREnabled = false,\n isPrefetch = false,\n waitUntil,\n invocationID,\n } = context\n\n const response = await this.getBatcher.batch(\n { key, isOnDemandRevalidate },\n ({ resolve }) => {\n const promise = this.handleGet(\n key,\n responseGenerator,\n {\n incrementalCache,\n isOnDemandRevalidate,\n isFallback,\n isRoutePPREnabled,\n isPrefetch,\n invocationID,\n },\n resolve\n )\n\n // We need to ensure background revalidates are passed to waitUntil.\n if (waitUntil) waitUntil(promise)\n\n return promise\n }\n )\n\n // In minimal mode, each caller with an invocation ID stores the shared\n // failure under its own ID for reuse by related requests. Callers without\n // an invocation ID receive the failure but do not store it in the LRU.\n if (\n this.minimal_mode &&\n response &&\n ('error' in response ? invocationID !== undefined : response.cacheControl)\n ) {\n const cacheKey = createCacheKey(key, invocationID)\n this.cache.set(cacheKey, {\n entry: response,\n expiresAt: Date.now() + this.ttl,\n })\n }\n\n return response !== null && 'error' in response\n ? response\n : toResponseCacheEntry(response)\n }\n\n /**\n * Handles the get request for the response cache.\n *\n * @param key - The key to get the response cache entry for.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param context - The context for the get request.\n * @param resolve - The resolve function to use to resolve the response cache entry.\n * @returns The response cache entry.\n */\n private async handleGet(\n key: string,\n responseGenerator: ResponseGenerator,\n context: {\n incrementalCache: IncrementalResponseCache\n isOnDemandRevalidate: boolean\n isFallback: boolean\n isRoutePPREnabled: boolean\n isPrefetch: boolean\n invocationID: string | undefined\n },\n resolve: (value: IncrementalResponseCacheResult) => void\n ): Promise {\n let previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null =\n null\n let resolved = false\n\n try {\n // Get the previous cache entry if not in minimal mode\n previousIncrementalCacheEntry = !this.minimal_mode\n ? await context.incrementalCache.get(\n key,\n this.getCacheContext(context.isRoutePPREnabled, context.isFallback)\n )\n : null\n\n // `isStale === -1` signals that the entry is past its `expire` (either\n // via an expired tag or, with `cacheLife({ expire })`, past the route's\n // expire time in the prerender manifest). In that case we must NOT\n // early-resolve with the stale value — instead we fall through to a\n // blocking revalidation so the response returned to the user is fresh.\n if (\n previousIncrementalCacheEntry &&\n !context.isOnDemandRevalidate &&\n previousIncrementalCacheEntry.isStale !== -1\n ) {\n resolve(previousIncrementalCacheEntry)\n resolved = true\n\n if (!previousIncrementalCacheEntry.isStale || context.isPrefetch) {\n // The cached value is still valid, so we don't need to update it yet.\n return previousIncrementalCacheEntry\n }\n }\n\n // Revalidate the cache entry.\n //\n // A prefetch request that missed must run its own response generator\n // rather than joining an in-flight revalidation through the batcher. A\n // background revalidation may be regenerating the concrete (non-fallback)\n // entry for this route — e.g. an ISR fallback-shell upgrade scheduled by\n // an earlier prefetch sub-request. Joining it would serve that concrete\n // result to the prefetch instead of the fallback shell, and which segment\n // wins would depend purely on request timing. Running the generator\n // directly lets every prefetch segment take the same fallback-shell path,\n // independent of any concurrent background upgrade.\n const incrementalResponseCacheEntry =\n context.isPrefetch && previousIncrementalCacheEntry === null\n ? await this.handleRevalidate(\n key,\n context.incrementalCache,\n context.isRoutePPREnabled,\n context.isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n resolved\n )\n : await this.revalidate(\n key,\n context.incrementalCache,\n context.isRoutePPREnabled,\n context.isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n resolved\n )\n\n if (\n incrementalResponseCacheEntry !== null &&\n 'error' in incrementalResponseCacheEntry &&\n resolved\n ) {\n // The caller already received the stale entry. Report the background\n // failure here, as the catch below does for a thrown error.\n console.error(incrementalResponseCacheEntry.error)\n return null\n }\n\n // Handle null response\n if (!incrementalResponseCacheEntry) {\n // Remove the cache item if it was set so we don't use it again.\n if (this.minimal_mode) {\n const cacheKey = createCacheKey(key, context.invocationID)\n this.cache.remove(cacheKey)\n }\n return null\n }\n\n // Resolve for on-demand revalidation or if not already resolved\n if (context.isOnDemandRevalidate && !resolved) {\n return incrementalResponseCacheEntry\n }\n\n return incrementalResponseCacheEntry\n } catch (err) {\n // If we've already resolved the cache entry, we can't reject as we\n // already resolved the cache entry so log the error here.\n if (resolved) {\n console.error(err)\n return null\n }\n\n throw err\n }\n }\n\n /**\n * Revalidates the cache entry for the given key.\n *\n * @param key - The key to revalidate the cache entry for.\n * @param incrementalCache - The incremental cache to use to revalidate the cache entry.\n * @param isRoutePPREnabled - Whether the route is PPR enabled.\n * @param isFallback - Whether the route is a fallback.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param previousIncrementalCacheEntry - The previous cache entry to use to revalidate the cache entry.\n * @param hasResolved - Whether the response has been resolved.\n * @param waitUntil - Optional function to register background work.\n * @param invocationID - The invocation ID for cache key scoping.\n * @returns The revalidated cache entry.\n */\n public async revalidate(\n key: string,\n incrementalCache: IncrementalResponseCache,\n isRoutePPREnabled: boolean,\n isFallback: boolean,\n responseGenerator: ResponseGenerator,\n previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null,\n hasResolved: boolean,\n waitUntil?: (prom: Promise) => void\n ) {\n return this.revalidateBatcher.batch(key, () => {\n const promise = this.handleRevalidate(\n key,\n incrementalCache,\n isRoutePPREnabled,\n isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n hasResolved\n )\n\n // We need to ensure background revalidates are passed to waitUntil.\n if (waitUntil) waitUntil(promise)\n\n return promise\n })\n }\n\n private async handleRevalidate(\n key: string,\n incrementalCache: IncrementalResponseCache,\n isRoutePPREnabled: boolean,\n isFallback: boolean,\n responseGenerator: ResponseGenerator,\n previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null,\n hasResolved: boolean\n ): Promise {\n let failure: PrerenderFailure\n try {\n // Generate the response cache entry using the response generator.\n const responseCacheEntry = await responseGenerator({\n hasResolved,\n previousCacheEntry: previousIncrementalCacheEntry,\n isRevalidating: true,\n })\n if (!responseCacheEntry) {\n return null\n }\n\n if ('error' in responseCacheEntry) {\n failure = responseCacheEntry\n } else {\n // Convert the response cache entry to an incremental response cache entry.\n const incrementalResponseCacheEntry = await fromResponseCacheEntry({\n ...responseCacheEntry,\n isMiss: !previousIncrementalCacheEntry,\n })\n\n // We want to persist the result only if it has a cache control value\n // defined. The minimal mode LRU write is handled in get() so that every\n // caller, including batched invocations, populates the cache.\n if (incrementalResponseCacheEntry.cacheControl && !this.minimal_mode) {\n await incrementalCache.set(key, incrementalResponseCacheEntry.value, {\n ...this.getCacheContext(isRoutePPREnabled, isFallback),\n cacheControl: incrementalResponseCacheEntry.cacheControl,\n })\n }\n\n return incrementalResponseCacheEntry\n }\n } catch (err) {\n await this.retainPreviousCacheEntry(\n key,\n incrementalCache,\n isRoutePPREnabled,\n isFallback,\n previousIncrementalCacheEntry\n )\n throw err\n }\n\n await this.retainPreviousCacheEntry(\n key,\n incrementalCache,\n isRoutePPREnabled,\n isFallback,\n previousIncrementalCacheEntry\n )\n return failure\n }\n\n // Retain the previous successful value and delay retries after revalidation\n // fails.\n private async retainPreviousCacheEntry(\n key: string,\n incrementalCache: IncrementalResponseCache,\n isRoutePPREnabled: boolean,\n isFallback: boolean,\n previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null\n ): Promise {\n if (previousIncrementalCacheEntry?.cacheControl) {\n const revalidate = Math.min(\n Math.max(previousIncrementalCacheEntry.cacheControl.revalidate || 3, 3),\n 30\n )\n const expire =\n previousIncrementalCacheEntry.cacheControl.expire === undefined\n ? undefined\n : Math.max(\n revalidate + 3,\n previousIncrementalCacheEntry.cacheControl.expire\n )\n\n await incrementalCache.set(key, previousIncrementalCacheEntry.value, {\n ...this.getCacheContext(isRoutePPREnabled, isFallback),\n cacheControl: { revalidate: revalidate, expire: expire },\n })\n }\n }\n\n private getCacheContext(\n isRoutePPREnabled: boolean,\n isFallback: boolean\n ): GetIncrementalResponseCacheContext | GetIncrementalImageCacheContext {\n if (this.route === 'image') {\n return { kind: IncrementalCacheKind.IMAGE, isFallback: false }\n }\n const kind = routeKindToIncrementalCacheKind(this.route.kind)\n if (kind === IncrementalCacheKind.IMAGE) {\n throw new InvariantError('Images must use the image response cache')\n }\n return { route: this.route, kind, isRoutePPREnabled, isFallback }\n }\n}\n"],"names":["IncrementalCacheKind","InvariantError","Batcher","LRUCache","warnOnce","scheduleOnNextTick","fromResponseCacheEntry","routeKindToIncrementalCacheKind","toResponseCacheEntry","parsePositiveInt","envValue","fallback","parsed","parseInt","Number","isFinite","DEFAULT_TTL_MS","process","env","NEXT_PRIVATE_RESPONSE_CACHE_TTL","DEFAULT_MAX_SIZE","NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE","KEY_SEPARATOR","TTL_SENTINEL","createCacheKey","pathname","invocationID","extractInvocationID","compoundKey","separatorIndex","lastIndexOf","undefined","slice","ResponseCache","constructor","minimalMode","route","maxSize","ttl","getBatcher","create","cacheKeyFn","key","isOnDemandRevalidate","schedulerFn","revalidateBatcher","evictedInvocationIDs","Set","minimal_mode","cache","size","first","values","next","value","delete","add","get","responseGenerator","context","hasResolved","previousCacheEntry","cacheKey","cachedItem","entry","now","Date","expiresAt","remove","has","incrementalCache","isFallback","isRoutePPREnabled","isPrefetch","waitUntil","response","batch","resolve","promise","handleGet","cacheControl","set","previousIncrementalCacheEntry","resolved","getCacheContext","isStale","incrementalResponseCacheEntry","handleRevalidate","revalidate","console","error","err","failure","responseCacheEntry","isRevalidating","isMiss","retainPreviousCacheEntry","Math","min","max","expire","kind","IMAGE"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 8189, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/response-cache/types.ts"],"sourcesContent":["import type { ResponseCacheOwner } from '../lib/route-cache-key'\nimport type { OutgoingHttpHeaders } from 'http'\nimport type RenderResult from '../render-result'\nimport type { CacheControl, Revalidate } from '../lib/cache-control'\nimport type { RouteKind } from '../route-kind'\nimport type { PrerenderFailure } from '../render-result'\n\nexport interface ResponseCacheBase {\n get(\n key: string | null,\n responseGenerator: ResponseGenerator,\n context: {\n isOnDemandRevalidate?: boolean\n isPrefetch?: boolean\n incrementalCache: IncrementalCache\n /**\n * This is a hint to the cache to help it determine what kind of route\n * this is so it knows where to look up the cache entry from. If not\n * provided it will test the filesystem to check.\n */\n routeKind: RouteKind\n\n /**\n * True if this is a fallback request.\n */\n isFallback?: boolean\n\n /**\n * True if the route is enabled for PPR.\n */\n isRoutePPREnabled?: boolean\n }\n ): Promise\n}\n\n// The server components HMR cache might store other data as well in the future,\n// at which point this should be refactored to a discriminated union type.\nexport interface ServerComponentsHmrCache {\n get(key: string): CachedFetchData | undefined\n set(key: string, data: CachedFetchData): void\n}\n\nexport type CachedFetchData = {\n headers: Record\n body: string\n url: string\n status?: number\n}\n\nexport const enum CachedRouteKind {\n APP_PAGE = 'APP_PAGE',\n APP_ROUTE = 'APP_ROUTE',\n PAGES = 'PAGES',\n FETCH = 'FETCH',\n REDIRECT = 'REDIRECT',\n IMAGE = 'IMAGE',\n}\n\nexport interface CachedFetchValue {\n kind: CachedRouteKind.FETCH\n data: CachedFetchData\n // tags are only present with file-system-cache\n // fetch cache stores tags outside of cache entry\n tags?: string[]\n revalidate: number\n}\n\nexport interface CachedRedirectValue {\n kind: CachedRouteKind.REDIRECT\n props: Object\n}\n\nexport interface CachedAppPageValue {\n kind: CachedRouteKind.APP_PAGE\n // this needs to be a RenderResult so since renderResponse\n // expects that type instead of a string\n html: RenderResult\n rscData: Buffer | undefined\n status: number | undefined\n postponed: string | undefined\n headers: OutgoingHttpHeaders | undefined\n segmentData: Map | undefined\n}\n\nexport interface CachedPageValue {\n kind: CachedRouteKind.PAGES\n // this needs to be a RenderResult so since renderResponse\n // expects that type instead of a string\n html: RenderResult\n pageData: Object\n status: number | undefined\n headers: OutgoingHttpHeaders | undefined\n}\n\nexport interface CachedRouteValue {\n kind: CachedRouteKind.APP_ROUTE\n // this needs to be a RenderResult so since renderResponse\n // expects that type instead of a string\n body: Buffer\n status: number\n headers: OutgoingHttpHeaders\n}\n\nexport interface CachedImageValue {\n kind: CachedRouteKind.IMAGE\n etag: string\n upstreamEtag: string\n buffer: Buffer\n extension: string\n revalidate?: number\n isMiss?: boolean\n isStale?: boolean\n}\n\nexport interface IncrementalCachedAppPageValue {\n kind: CachedRouteKind.APP_PAGE\n // this needs to be a string since the cache expects to store\n // the string value\n html: string\n rscData: Buffer | undefined\n headers: OutgoingHttpHeaders | undefined\n postponed: string | undefined\n status: number | undefined\n segmentData: Map | undefined\n}\n\nexport interface IncrementalCachedPageValue {\n kind: CachedRouteKind.PAGES\n // this needs to be a string since the cache expects to store\n // the string value\n html: string\n pageData: Object\n headers: OutgoingHttpHeaders | undefined\n status: number | undefined\n}\n\nexport interface IncrementalResponseCacheEntry {\n cacheControl?: CacheControl\n /**\n * timestamp in milliseconds to revalidate after\n */\n revalidateAfter?: Revalidate\n /**\n * `-1` here dictates a blocking revalidate should be used\n */\n isStale?: boolean | -1\n isMiss?: boolean\n isFallback?: boolean\n value: Exclude | null\n}\n\nexport interface IncrementalFetchCacheEntry {\n /**\n * `-1` here dictates a blocking revalidate should be used\n */\n isStale?: boolean | -1\n value: CachedFetchValue\n}\n\nexport type IncrementalCacheEntry =\n | IncrementalResponseCacheEntry\n | IncrementalFetchCacheEntry\n\nexport type IncrementalCacheValue =\n | CachedRedirectValue\n | IncrementalCachedPageValue\n | IncrementalCachedAppPageValue\n | CachedImageValue\n | CachedFetchValue\n | CachedRouteValue\n\nexport type ResponseCacheValue =\n | CachedRedirectValue\n | CachedPageValue\n | CachedAppPageValue\n | CachedImageValue\n | CachedRouteValue\n\nexport type ResponseCacheEntry = {\n cacheControl?: CacheControl\n value: ResponseCacheValue | null\n isStale?: boolean | -1\n isMiss?: boolean\n isFallback?: boolean\n}\n\nexport type ResponseCacheResult = ResponseCacheEntry | PrerenderFailure | null\n\n/**\n * @param hasResolved whether the responseGenerator has resolved it's promise\n * @param previousCacheEntry the previous cache entry if it exists or the current\n */\nexport type ResponseGenerator = (state: {\n hasResolved: boolean\n previousCacheEntry?: IncrementalResponseCacheEntry | null\n isRevalidating?: boolean\n span?: any\n\n /**\n * When true, this indicates that the response generator is being called in a\n * context where the response must be generated statically.\n *\n * CRITICAL: This should only currently be used when revalidating due to a\n * dynamic RSC request.\n */\n forceStaticRender?: boolean\n}) => Promise\n\nexport const enum IncrementalCacheKind {\n APP_PAGE = 'APP_PAGE',\n APP_ROUTE = 'APP_ROUTE',\n PAGES = 'PAGES',\n FETCH = 'FETCH',\n IMAGE = 'IMAGE',\n}\n\nexport interface GetIncrementalFetchCacheContext {\n kind: IncrementalCacheKind.FETCH\n revalidate?: Revalidate\n fetchUrl?: string\n fetchIdx?: number\n tags?: string[]\n softTags?: string[]\n}\n\nexport interface GetIncrementalResponseCacheHandlerContext {\n kind: Exclude<\n IncrementalCacheKind,\n IncrementalCacheKind.FETCH | IncrementalCacheKind.IMAGE\n >\n\n /**\n * True if the route is enabled for PPR.\n */\n isRoutePPREnabled?: boolean\n\n /**\n * True if this is a fallback request.\n */\n isFallback: boolean\n}\n\nexport interface GetIncrementalResponseCacheContext\n extends GetIncrementalResponseCacheHandlerContext {\n /** Internal ownership used before invoking the storage handler. */\n route: ResponseCacheOwner\n}\n\nexport interface SetIncrementalFetchCacheContext {\n fetchCache: true\n fetchUrl?: string\n fetchIdx?: number\n tags?: string[]\n isImplicitBuildTimeCache?: boolean\n}\n\nexport interface SetIncrementalResponseCacheHandlerContext {\n fetchCache?: false\n cacheControl?: CacheControl\n\n /**\n * True if the route is enabled for PPR.\n */\n isRoutePPREnabled?: boolean\n\n /**\n * True if this is a fallback request.\n */\n isFallback?: boolean\n}\n\nexport interface SetIncrementalResponseCacheContext\n extends SetIncrementalResponseCacheHandlerContext {\n /** Internal ownership used before invoking the storage handler. */\n route: ResponseCacheOwner\n}\n\nexport interface GetIncrementalImageCacheContext {\n kind: IncrementalCacheKind.IMAGE\n route?: never\n isFallback: false\n isRoutePPREnabled?: false\n}\n\nexport interface SetIncrementalImageCacheContext {\n kind: IncrementalCacheKind.IMAGE\n route?: never\n fetchCache?: false\n cacheControl?: CacheControl\n}\n\nexport interface IncrementalResponseCache {\n get(\n cacheKey: string,\n ctx: GetIncrementalResponseCacheContext | GetIncrementalImageCacheContext\n ): Promise\n set(\n key: string,\n data: Exclude | null,\n ctx: SetIncrementalResponseCacheContext | SetIncrementalImageCacheContext\n ): Promise\n}\n\nexport interface IncrementalCache extends IncrementalResponseCache {\n get(\n cacheKey: string,\n ctx: GetIncrementalFetchCacheContext\n ): Promise\n get(\n cacheKey: string,\n ctx: GetIncrementalResponseCacheContext | GetIncrementalImageCacheContext\n ): Promise\n set(\n key: string,\n data: CachedFetchValue | null,\n ctx: SetIncrementalFetchCacheContext\n ): Promise\n set(\n key: string,\n data: Exclude | null,\n ctx: SetIncrementalResponseCacheContext | SetIncrementalImageCacheContext\n ): Promise\n revalidateTag(\n tags: string | string[],\n durations?: { expire?: number }\n ): Promise\n}\n"],"names":["CachedRouteKind","IncrementalCacheKind"],"mappings":";;;;;;AAiDO,IAAWA,kBAAAA,WAAAA,GAAAA,SAAAA,eAAAA;;;;;;;WAAAA;MAOjB;AAwJM,IAAWC,uBAAAA,WAAAA,GAAAA,SAAAA,oBAAAA;;;;;;WAAAA;MAMjB","ignoreList":[0]}}, + {"offset": {"line": 8216, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/response-cache/utils.ts"],"sourcesContent":["import {\n CachedRouteKind,\n IncrementalCacheKind,\n type CachedAppPageValue,\n type CachedPageValue,\n type IncrementalResponseCacheEntry,\n type ResponseCacheEntry,\n} from './types'\n\nimport RenderResult from '../render-result'\nimport { RouteKind } from '../route-kind'\nimport { HTML_CONTENT_TYPE_HEADER } from '../../lib/constants'\n\nexport async function fromResponseCacheEntry(\n cacheEntry: ResponseCacheEntry\n): Promise {\n return {\n ...cacheEntry,\n value:\n cacheEntry.value?.kind === CachedRouteKind.PAGES\n ? {\n kind: CachedRouteKind.PAGES,\n html: await cacheEntry.value.html.toUnchunkedString(true),\n pageData: cacheEntry.value.pageData,\n headers: cacheEntry.value.headers,\n status: cacheEntry.value.status,\n }\n : cacheEntry.value?.kind === CachedRouteKind.APP_PAGE\n ? {\n kind: CachedRouteKind.APP_PAGE,\n html: await cacheEntry.value.html.toUnchunkedString(true),\n postponed: cacheEntry.value.postponed,\n rscData: cacheEntry.value.rscData,\n headers: cacheEntry.value.headers,\n status: cacheEntry.value.status,\n segmentData: cacheEntry.value.segmentData,\n }\n : cacheEntry.value,\n }\n}\n\nexport async function toResponseCacheEntry(\n response: IncrementalResponseCacheEntry | null\n): Promise {\n if (!response) return null\n\n return {\n isMiss: response.isMiss,\n isStale: response.isStale,\n cacheControl: response.cacheControl,\n isFallback: response.isFallback,\n value:\n response.value?.kind === CachedRouteKind.PAGES\n ? ({\n kind: CachedRouteKind.PAGES,\n html: RenderResult.fromStatic(\n response.value.html,\n HTML_CONTENT_TYPE_HEADER\n ),\n pageData: response.value.pageData,\n headers: response.value.headers,\n status: response.value.status,\n } satisfies CachedPageValue)\n : response.value?.kind === CachedRouteKind.APP_PAGE\n ? ({\n kind: CachedRouteKind.APP_PAGE,\n html: RenderResult.fromStatic(\n response.value.html,\n HTML_CONTENT_TYPE_HEADER\n ),\n rscData: response.value.rscData,\n headers: response.value.headers,\n status: response.value.status,\n postponed: response.value.postponed,\n segmentData: response.value.segmentData,\n } satisfies CachedAppPageValue)\n : response.value,\n }\n}\n\nexport function routeKindToIncrementalCacheKind(\n routeKind: RouteKind\n): Exclude {\n switch (routeKind) {\n case RouteKind.PAGES:\n return IncrementalCacheKind.PAGES\n case RouteKind.APP_PAGE:\n return IncrementalCacheKind.APP_PAGE\n case RouteKind.IMAGE:\n return IncrementalCacheKind.IMAGE\n case RouteKind.APP_ROUTE:\n return IncrementalCacheKind.APP_ROUTE\n case RouteKind.PAGES_API:\n // Pages Router API routes are not cached in the incremental cache.\n throw new Error(`Unexpected route kind ${routeKind}`)\n default:\n return routeKind satisfies never\n }\n}\n"],"names":["CachedRouteKind","IncrementalCacheKind","RenderResult","RouteKind","HTML_CONTENT_TYPE_HEADER","fromResponseCacheEntry","cacheEntry","value","kind","PAGES","html","toUnchunkedString","pageData","headers","status","APP_PAGE","postponed","rscData","segmentData","toResponseCacheEntry","response","isMiss","isStale","cacheControl","isFallback","fromStatic","routeKindToIncrementalCacheKind","routeKind","IMAGE","APP_ROUTE","PAGES_API","Error"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 8299, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/route-kind.ts"],"sourcesContent":["export const enum RouteKind {\n /**\n * `PAGES` represents all the React pages that are under `pages/`.\n */\n PAGES = 'PAGES',\n /**\n * `PAGES_API` represents all the API routes under `pages/api/`.\n */\n PAGES_API = 'PAGES_API',\n /**\n * `APP_PAGE` represents all the React pages that are under `app/` with the\n * filename of `page.{j,t}s{,x}`.\n */\n APP_PAGE = 'APP_PAGE',\n /**\n * `APP_ROUTE` represents all the API routes and metadata routes that are under `app/` with the\n * filename of `route.{j,t}s{,x}`.\n */\n APP_ROUTE = 'APP_ROUTE',\n\n /**\n * `IMAGE` represents all the images that are generated by `next/image`.\n */\n IMAGE = 'IMAGE',\n}\n"],"names":["RouteKind"],"mappings":";;;;AAAO,IAAWA,YAAAA,WAAAA,GAAAA,SAAAA,SAAAA;IAChB;;GAEC,GAAA,SAAA,CAAA,QAAA,GAAA;IAED;;GAEC,GAAA,SAAA,CAAA,YAAA,GAAA;IAED;;;GAGC,GAAA,SAAA,CAAA,WAAA,GAAA;IAED;;;GAGC,GAAA,SAAA,CAAA,YAAA,GAAA;IAGD;;GAEC,GAAA,SAAA,CAAA,QAAA,GAAA;WAtBeA;MAwBjB","ignoreList":[0]}}, + {"offset": {"line": 8327, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/send-response.ts"],"sourcesContent":["import type { BaseNextRequest, BaseNextResponse } from './base-http'\nimport { isNodeNextResponse } from './base-http/helpers'\n\nimport { pipeToNodeResponse } from './pipe-readable'\nimport { splitCookiesString } from './web/utils'\n\n/**\n * Sends the response on the underlying next response object.\n *\n * @param req the underlying request object\n * @param res the underlying response object\n * @param response the response to send\n */\nexport async function sendResponse(\n req: BaseNextRequest,\n res: BaseNextResponse,\n response: Response,\n waitUntil?: Promise\n): Promise {\n if (\n // The type check here ensures that `req` is correctly typed, and the\n // environment variable check provides dead code elimination.\n process.env.NEXT_RUNTIME !== 'edge' &&\n isNodeNextResponse(res)\n ) {\n // Copy over the response status.\n res.statusCode = response.status\n res.statusMessage = response.statusText\n\n // TODO: this is not spec-compliant behavior and we should not restrict\n // headers that are allowed to appear many times.\n //\n // See:\n // https://github.com/vercel/next.js/pull/70127\n const headersWithMultipleValuesAllowed = [\n // can add more headers to this list if needed\n 'set-cookie',\n 'www-authenticate',\n 'proxy-authenticate',\n 'vary',\n ]\n\n // Copy over the response headers.\n response.headers?.forEach((value, name) => {\n // `x-middleware-set-cookie` is an internal header not needed for the response\n if (name.toLowerCase() === 'x-middleware-set-cookie') {\n return\n }\n\n // The append handling is special cased for `set-cookie`.\n if (name.toLowerCase() === 'set-cookie') {\n // TODO: (wyattjoh) replace with native response iteration when we can upgrade undici\n for (const cookie of splitCookiesString(value)) {\n res.appendHeader(name, cookie)\n }\n } else {\n // only append the header if it is either not present in the outbound response\n // or if the header supports multiple values\n const isHeaderPresent = typeof res.getHeader(name) !== 'undefined'\n if (\n headersWithMultipleValuesAllowed.includes(name.toLowerCase()) ||\n !isHeaderPresent\n ) {\n res.appendHeader(name, value)\n }\n }\n })\n\n /**\n * The response can't be directly piped to the underlying response. The\n * following is duplicated from the edge runtime handler.\n *\n * See packages/next/server/next-server.ts\n */\n\n const { originalResponse } = res\n\n // A response body must not be sent for HEAD requests. See https://httpwg.org/specs/rfc9110.html#HEAD\n if (response.body && req.method !== 'HEAD') {\n await pipeToNodeResponse(response.body, originalResponse, waitUntil)\n } else {\n originalResponse.end()\n }\n }\n}\n"],"names":["isNodeNextResponse","pipeToNodeResponse","splitCookiesString","sendResponse","req","res","response","waitUntil","process","env","NEXT_RUNTIME","statusCode","status","statusMessage","statusText","headersWithMultipleValuesAllowed","headers","forEach","value","name","toLowerCase","cookie","appendHeader","isHeaderPresent","getHeader","includes","originalResponse","body","method","end"],"mappings":";;;;AACA,SAASA,kBAAkB,QAAQ,sBAAqB;AAExD,SAASC,kBAAkB,QAAQ,kBAAiB;AACpD,SAASC,kBAAkB,QAAQ,cAAa;;;;AASzC,eAAeC,aACpBC,GAAoB,EACpBC,GAAqB,EACrBC,QAAkB,EAClBC,SAA4B;IAE5B,IACE,AACA,6DAA6D,QADQ;IAErEC,QAAQC,GAAG,CAACC,YAAY,uBAAK,cAC7BV,gMAAAA,EAAmBK,MACnB;YAkBA,AACAC,kCADkC;QAjBlC,iCAAiC;QACjCD,IAAIM,UAAU,GAAGL,SAASM,MAAM;QAChCP,IAAIQ,aAAa,GAAGP,SAASQ,UAAU;QAEvC,uEAAuE;QACvE,iDAAiD;QACjD,EAAE;QACF,OAAO;QACP,+CAA+C;QAC/C,MAAMC,mCAAmC;YACvC,8CAA8C;YAC9C;YACA;YACA;YACA;SACD;SAGDT,oBAAAA,SAASU,OAAO,KAAA,OAAA,KAAA,IAAhBV,kBAAkBW,OAAO,CAAC,CAACC,OAAOC;YAChC,8EAA8E;YAC9E,IAAIA,KAAKC,WAAW,OAAO,2BAA2B;gBACpD;YACF;YAEA,yDAAyD;YACzD,IAAID,KAAKC,WAAW,OAAO,cAAc;gBACvC,qFAAqF;gBACrF,KAAK,MAAMC,cAAUnB,qLAAAA,EAAmBgB,OAAQ;oBAC9Cb,IAAIiB,YAAY,CAACH,MAAME;gBACzB;YACF,OAAO;gBACL,8EAA8E;gBAC9E,4CAA4C;gBAC5C,MAAME,kBAAkB,OAAOlB,IAAImB,SAAS,CAACL,UAAU;gBACvD,IACEJ,iCAAiCU,QAAQ,CAACN,KAAKC,WAAW,OAC1D,CAACG,iBACD;oBACAlB,IAAIiB,YAAY,CAACH,MAAMD;gBACzB;YACF;QACF;QAEA;;;;;KAKC,GAED,MAAM,EAAEQ,gBAAgB,EAAE,GAAGrB;QAE7B,qGAAqG;QACrG,IAAIC,SAASqB,IAAI,IAAIvB,IAAIwB,MAAM,KAAK,QAAQ;YAC1C,UAAM3B,yLAAAA,EAAmBK,SAASqB,IAAI,EAAED,kBAAkBnB;QAC5D,OAAO;YACLmB,iBAAiBG,GAAG;QACtB;IACF;AACF","ignoreList":[0]}}, + {"offset": {"line": 8394, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/stream-utils/encoded-tags.ts"],"sourcesContent":["export const ENCODED_TAGS = {\n // opening tags do not have the closing `>` since they can contain other attributes such as ``\n OPENING: {\n // \n HEAD: new Uint8Array([60, 47, 104, 101, 97, 100, 62]),\n // \n BODY: new Uint8Array([60, 47, 98, 111, 100, 121, 62]),\n // \n HTML: new Uint8Array([60, 47, 104, 116, 109, 108, 62]),\n // \n BODY_AND_HTML: new Uint8Array([\n 60, 47, 98, 111, 100, 121, 62, 60, 47, 104, 116, 109, 108, 62,\n ]),\n },\n META: {\n // Only the match the prefix cause the suffix can be different whether it's xml compatible or not \">\" or \"/>\"\n // (\n ...streams: ReadableStream[]\n): ReadableStream {\n // If we have no streams, return an empty stream. This behavior is\n // intentional as we're now providing the `RenderResult.EMPTY` value.\n if (streams.length === 0) {\n return new ReadableStream({\n start(controller) {\n controller.close()\n },\n })\n }\n\n // If we only have 1 stream we fast path it by returning just this stream\n if (streams.length === 1) {\n return streams[0]\n }\n\n const { readable, writable } = new TransformStream()\n\n // We always initiate pipeTo immediately. We know we have at least 2 streams\n // so we need to avoid closing the writable when this one finishes.\n let promise = streams[0].pipeTo(writable, { preventClose: true })\n\n let i = 1\n for (; i < streams.length - 1; i++) {\n const nextStream = streams[i]\n promise = promise.then(() =>\n nextStream.pipeTo(writable, { preventClose: true })\n )\n }\n\n // We can omit the length check because we halted before the last stream and there\n // is at least two streams so the lastStream here will always be defined\n const lastStream = streams[i]\n promise = promise.then(() => lastStream.pipeTo(writable))\n\n // Catch any errors from the streams and ignore them, they will be handled\n // by whatever is consuming the readable stream.\n promise.catch(voidCatch)\n\n return readable\n}\n\nexport function streamFromString(str: string): ReadableStream {\n return new ReadableStream({\n start(controller) {\n controller.enqueue(encoder.encode(str))\n controller.close()\n },\n })\n}\n\n/**\n * Creates a stream that delivers `chunk` and then closes.\n *\n * The stream is a default stream, and it has to stay one. A byte stream (`type:\n * 'bytes'`) transfers the buffer of each chunk that it receives, which detaches\n * `chunk`. A caller that keeps `chunk` to serve more than one read, such as an\n * in-memory cache handler, loses the data on the first read.\n *\n * Every reader receives the same `chunk` instance. A reader that modifies it\n * changes what later readers see.\n */\nexport function streamFromBuffer(chunk: Buffer): ReadableStream {\n return new ReadableStream({\n start(controller) {\n controller.enqueue(chunk)\n controller.close()\n },\n })\n}\n\nasync function streamToChunks(\n stream: ReadableStream\n): Promise> {\n const reader = stream.getReader()\n const chunks: Array = []\n\n while (true) {\n const { done, value } = await reader.read()\n if (done) {\n break\n }\n\n chunks.push(value)\n }\n\n return chunks\n}\n\nfunction concatUint8Arrays(chunks: Array): Uint8Array {\n const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0)\n const result = new Uint8Array(totalLength)\n let offset = 0\n for (const chunk of chunks) {\n result.set(chunk, offset)\n offset += chunk.length\n }\n return result\n}\n\nexport async function webstreamToUint8Array(\n stream: ReadableStream\n): Promise {\n return concatUint8Arrays(await streamToChunks(stream))\n}\n\nfunction webToReadable(\n stream: ReadableStream | import('node:stream').Readable\n): import('node:stream').Readable {\n if (process.env.NEXT_RUNTIME === 'edge') {\n throw new Error('webToReadable cannot be used in the edge runtime')\n } else {\n let Readable: typeof import('node:stream').Readable\n if (process.env.TURBOPACK) {\n Readable = (require('node:stream') as typeof import('node:stream'))\n .Readable\n } else if (\n process.env.__NEXT_BUNDLER === 'Webpack' ||\n process.env.__NEXT_BUNDLER === 'Rspack'\n ) {\n Readable = (\n __non_webpack_require__('node:stream') as typeof import('node:stream')\n ).Readable\n } else {\n Readable = (require('node:stream') as typeof import('node:stream'))\n .Readable\n }\n if (stream instanceof Readable) {\n return stream\n }\n return Readable.fromWeb(stream as import('stream/web').ReadableStream)\n }\n}\n\nexport async function nodestreamToUint8Array(\n stream: AnyStream\n): Promise {\n const chunks: Buffer[] = []\n for await (const chunk of webToReadable(stream)) {\n chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk)\n }\n return Buffer.concat(chunks)\n}\n\nexport async function streamToUint8Array(stream: AnyStream) {\n if (process.env.NEXT_RUNTIME === 'edge') {\n // Edge runtime always uses web streams\n return webstreamToUint8Array(stream as ReadableStream)\n } else {\n let Readable: typeof import('node:stream').Readable\n if (process.env.TURBOPACK) {\n Readable = (require('node:stream') as typeof import('node:stream'))\n .Readable\n } else if (\n process.env.__NEXT_BUNDLER === 'Webpack' ||\n process.env.__NEXT_BUNDLER === 'Rspack'\n ) {\n Readable = (\n __non_webpack_require__('node:stream') as typeof import('node:stream')\n ).Readable\n } else {\n Readable = (require('node:stream') as typeof import('node:stream'))\n .Readable\n }\n\n if (stream instanceof Readable) {\n return nodestreamToUint8Array(stream)\n }\n\n return webstreamToUint8Array(stream)\n }\n}\n\nexport async function streamToBuffer(\n stream: ReadableStream\n): Promise {\n return Buffer.concat(await streamToChunks(stream))\n}\n\nexport async function streamToString(\n stream: ReadableStream,\n signal?: AbortSignal\n): Promise {\n const decoder = new TextDecoder('utf-8', { fatal: true })\n let string = ''\n\n for await (const chunk of stream) {\n if (signal?.aborted) {\n return string\n }\n\n string += decoder.decode(chunk, { stream: true })\n }\n\n string += decoder.decode()\n\n return string\n}\n\nexport type BufferedTransformOptions = {\n /**\n * Flush synchronously once the buffer reaches this many bytes.\n */\n readonly maxBufferByteLength?: number\n}\n\nexport function createBufferedTransformStream(\n options: BufferedTransformOptions = {}\n): TransformStream {\n const { maxBufferByteLength = Infinity } = options\n\n let bufferedChunks: Array = []\n let bufferByteLength: number = 0\n let pending: PromiseWithResolvers | undefined\n\n const flush = (controller: TransformStreamDefaultController) => {\n try {\n if (bufferedChunks.length === 0) {\n return\n }\n\n const chunk = new Uint8Array(bufferByteLength)\n let copiedBytes = 0\n\n for (let i = 0; i < bufferedChunks.length; i++) {\n const bufferedChunk = bufferedChunks[i]\n chunk.set(bufferedChunk, copiedBytes)\n copiedBytes += bufferedChunk.byteLength\n }\n // We just wrote all the buffered chunks so we need to reset the bufferedChunks array\n // and our bufferByteLength to prepare for the next round of buffered chunks\n bufferedChunks.length = 0\n bufferByteLength = 0\n controller.enqueue(chunk)\n } catch {\n // If an error occurs while enqueuing, it can't be due to this\n // transformer. It's most likely caused by the controller having been\n // errored (for example, if the stream was cancelled).\n }\n }\n\n const scheduleFlush = (controller: TransformStreamDefaultController) => {\n if (pending) {\n return\n }\n\n const detached = createPromiseWithResolvers()\n pending = detached\n\n scheduleImmediate(() => {\n try {\n flush(controller)\n } finally {\n pending = undefined\n detached.resolve()\n }\n })\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n // Combine the previous buffer with the new chunk.\n bufferedChunks.push(chunk)\n bufferByteLength += chunk.byteLength\n\n if (bufferByteLength >= maxBufferByteLength) {\n flush(controller)\n } else {\n scheduleFlush(controller)\n }\n },\n flush() {\n return pending?.promise\n },\n })\n}\n\n// TODO this is currently unused but once we add proper output:export support, it needs to be\n// revisited. See https://github.com/vercel/next.js/pull/89478 for more details\n//\n// function createPrefetchCommentStream(\n// isBuildTimePrerendering: boolean,\n// buildId: string\n// ): TransformStream {\n// // Insert an extra comment at the beginning of the HTML document. This must\n// // come after the DOCTYPE, which is inserted by React.\n// //\n// // The first chunk sent by React will contain the doctype. After that, we can\n// // pass through the rest of the chunks as-is.\n// let didTransformFirstChunk = false\n// return new TransformStream({\n// transform(chunk, controller) {\n// if (isBuildTimePrerendering && !didTransformFirstChunk) {\n// didTransformFirstChunk = true\n// const decoder = new TextDecoder('utf-8', { fatal: true })\n// const chunkStr = decoder.decode(chunk, {\n// stream: true,\n// })\n// const updatedChunkStr = insertBuildIdComment(chunkStr, buildId)\n// controller.enqueue(encoder.encode(updatedChunkStr))\n// return\n// }\n// controller.enqueue(chunk)\n// },\n// })\n// }\n\nexport function renderToInitialFizzStream({\n ReactDOMServer,\n element,\n streamOptions,\n}: {\n ReactDOMServer: {\n renderToReadableStream: typeof import('react-dom/server').renderToReadableStream\n }\n element: React.ReactElement\n streamOptions?: Parameters[1]\n}): Promise {\n return getTracer().trace(AppRenderSpan.renderToReadableStream, async () =>\n ReactDOMServer.renderToReadableStream(element, streamOptions)\n )\n}\n\nexport function createMetadataTransformStream(\n insert: () => Promise | string\n): TransformStream {\n let chunkIndex = -1\n let isMarkRemoved = false\n\n return new TransformStream({\n async transform(chunk, controller) {\n let iconMarkIndex = -1\n let closedHeadIndex = -1\n chunkIndex++\n\n if (isMarkRemoved) {\n controller.enqueue(chunk)\n return\n }\n let iconMarkLength = 0\n // Only search for the closed head tag once\n if (iconMarkIndex === -1) {\n iconMarkIndex = indexOfUint8Array(chunk, ENCODED_TAGS.META.ICON_MARK)\n if (iconMarkIndex === -1) {\n controller.enqueue(chunk)\n return\n } else {\n // When we found the `` or `>`, checking the next char to ensure we cover both cases.\n iconMarkLength = ENCODED_TAGS.META.ICON_MARK.length\n // Check if next char is /, this is for xml mode.\n if (chunk[iconMarkIndex + iconMarkLength] === 47) {\n iconMarkLength += 2\n } else {\n // The last char is `>`\n iconMarkLength++\n }\n }\n }\n\n // Check if icon mark is inside tag in the first chunk.\n if (chunkIndex === 0) {\n closedHeadIndex = indexOfUint8Array(chunk, ENCODED_TAGS.CLOSED.HEAD)\n if (iconMarkIndex !== -1) {\n // The mark icon is located in the 1st chunk before the head tag.\n // We do not need to insert the script tag in this case because it's in the head.\n // Just remove the icon mark from the chunk.\n if (iconMarkIndex < closedHeadIndex) {\n const replaced = new Uint8Array(chunk.length - iconMarkLength)\n\n // Remove the icon mark from the chunk.\n replaced.set(chunk.subarray(0, iconMarkIndex))\n replaced.set(\n chunk.subarray(iconMarkIndex + iconMarkLength),\n iconMarkIndex\n )\n chunk = replaced\n } else {\n // The icon mark is after the head tag, replace and insert the script tag at that position.\n const insertion = await insert()\n const encodedInsertion = encoder.encode(insertion)\n const insertionLength = encodedInsertion.length\n const replaced = new Uint8Array(\n chunk.length - iconMarkLength + insertionLength\n )\n replaced.set(chunk.subarray(0, iconMarkIndex))\n replaced.set(encodedInsertion, iconMarkIndex)\n replaced.set(\n chunk.subarray(iconMarkIndex + iconMarkLength),\n iconMarkIndex + insertionLength\n )\n chunk = replaced\n }\n isMarkRemoved = true\n }\n // If there's no icon mark located, it will be handled later when if present in the following chunks.\n } else {\n // When it's appeared in the following chunks, we'll need to\n // remove the mark and then insert the script tag at that position.\n const insertion = await insert()\n const encodedInsertion = encoder.encode(insertion)\n const insertionLength = encodedInsertion.length\n // Replace the icon mark with the hoist script or empty string.\n const replaced = new Uint8Array(\n chunk.length - iconMarkLength + insertionLength\n )\n // Set the first part of the chunk, before the icon mark.\n replaced.set(chunk.subarray(0, iconMarkIndex))\n // Set the insertion after the icon mark.\n replaced.set(encodedInsertion, iconMarkIndex)\n\n // Set the rest of the chunk after the icon mark.\n replaced.set(\n chunk.subarray(iconMarkIndex + iconMarkLength),\n iconMarkIndex + insertionLength\n )\n chunk = replaced\n isMarkRemoved = true\n }\n controller.enqueue(chunk)\n },\n })\n}\n\nexport function createHeadInsertionTransformStream(\n insert: () => Promise\n): TransformStream {\n let inserted = false\n\n // We need to track if this transform saw any bytes because if it didn't\n // we won't want to insert any server HTML at all\n let hasBytes = false\n\n return new TransformStream({\n async transform(chunk, controller) {\n hasBytes = true\n\n const insertion = await insert()\n if (inserted) {\n if (insertion) {\n const encodedInsertion = encoder.encode(insertion)\n controller.enqueue(encodedInsertion)\n }\n controller.enqueue(chunk)\n } else {\n // TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for.\n const index = indexOfUint8Array(chunk, ENCODED_TAGS.CLOSED.HEAD)\n // In fully static rendering or non PPR rendering cases:\n // `/head>` will always be found in the chunk in first chunk rendering.\n if (index !== -1) {\n if (insertion) {\n const encodedInsertion = encoder.encode(insertion)\n // Get the total count of the bytes in the chunk and the insertion\n // e.g.\n // chunk = \n // insertion = \n // output = [ ] \n const insertedHeadContent = new Uint8Array(\n chunk.length + encodedInsertion.length\n )\n // Append the first part of the chunk, before the head tag\n insertedHeadContent.set(chunk.slice(0, index))\n // Append the server inserted content\n insertedHeadContent.set(encodedInsertion, index)\n // Append the rest of the chunk\n insertedHeadContent.set(\n chunk.slice(index),\n index + encodedInsertion.length\n )\n controller.enqueue(insertedHeadContent)\n } else {\n controller.enqueue(chunk)\n }\n inserted = true\n } else {\n // This will happens in PPR rendering during next start, when the page is partially rendered.\n // When the page resumes, the head tag will be found in the middle of the chunk.\n // Where we just need to append the insertion and chunk to the current stream.\n // e.g.\n // PPR-static: ... [ resume content ] \n // PPR-resume: [ insertion ] [ rest content ]\n if (insertion) {\n controller.enqueue(encoder.encode(insertion))\n }\n controller.enqueue(chunk)\n inserted = true\n }\n }\n },\n async flush(controller) {\n // Check before closing if there's anything remaining to insert.\n if (hasBytes) {\n const insertion = await insert()\n if (insertion) {\n controller.enqueue(encoder.encode(insertion))\n }\n }\n },\n })\n}\n\nasync function createClientResumeScriptInsertionTransformStream(): Promise<\n TransformStream\n> {\n const segmentPath = '/_full'\n const cacheBustingHeader = await computeCacheBustingSearchParam(\n '1', // headers[NEXT_ROUTER_PREFETCH_HEADER]\n '/_full', // headers[NEXT_ROUTER_SEGMENT_PREFETCH_HEADER]\n undefined, // headers[NEXT_ROUTER_STATE_TREE_HEADER]\n undefined // headers[NEXT_URL]\n )\n const searchStr = `${NEXT_RSC_UNION_QUERY}=${cacheBustingHeader}`\n const NEXT_CLIENT_RESUME_SCRIPT = ``\n\n let didAlreadyInsert = false\n return new TransformStream({\n transform(chunk, controller) {\n if (didAlreadyInsert) {\n // Already inserted the script into the head. Pass through.\n controller.enqueue(chunk)\n return\n }\n // TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for.\n const headClosingTagIndex = indexOfUint8Array(\n chunk,\n ENCODED_TAGS.CLOSED.HEAD\n )\n\n if (headClosingTagIndex === -1) {\n // In fully static rendering or non PPR rendering cases:\n // `/head>` will always be found in the chunk in first chunk rendering.\n controller.enqueue(chunk)\n return\n }\n\n const encodedInsertion = encoder.encode(NEXT_CLIENT_RESUME_SCRIPT)\n // Get the total count of the bytes in the chunk and the insertion\n // e.g.\n // chunk = \n // insertion = \n // output = [ ] \n const insertedHeadContent = new Uint8Array(\n chunk.length + encodedInsertion.length\n )\n // Append the first part of the chunk, before the head tag\n insertedHeadContent.set(chunk.slice(0, headClosingTagIndex))\n // Append the server inserted content\n insertedHeadContent.set(encodedInsertion, headClosingTagIndex)\n // Append the rest of the chunk\n insertedHeadContent.set(\n chunk.slice(headClosingTagIndex),\n headClosingTagIndex + encodedInsertion.length\n )\n\n controller.enqueue(insertedHeadContent)\n didAlreadyInsert = true\n },\n })\n}\n\n// Suffix after main body content - scripts before ,\n// but wait for the major chunks to be enqueued.\nexport function createDeferredSuffixStream(\n suffix: string\n): TransformStream {\n let flushed = false\n let pending: PromiseWithResolvers | undefined\n\n const flush = (controller: TransformStreamDefaultController) => {\n const detached = createPromiseWithResolvers()\n pending = detached\n\n scheduleImmediate(() => {\n try {\n controller.enqueue(encoder.encode(suffix))\n } catch {\n // If an error occurs while enqueuing it can't be due to this\n // transformers fault. It's likely due to the controller being\n // errored due to the stream being cancelled.\n } finally {\n pending = undefined\n detached.resolve()\n }\n })\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n controller.enqueue(chunk)\n\n // If we've already flushed, we're done.\n if (flushed) return\n\n // Schedule the flush to happen.\n flushed = true\n flush(controller)\n },\n flush(controller) {\n if (pending) return pending.promise\n if (flushed) return\n\n // Flush now.\n controller.enqueue(encoder.encode(suffix))\n },\n })\n}\n\nexport function createFlightDataInjectionTransformStream(\n stream: ReadableStream,\n delayDataUntilFirstHtmlChunk: boolean\n): TransformStream {\n let htmlStreamFinished = false\n\n let pull: Promise | null = null\n let donePulling = false\n\n function startOrContinuePulling(\n controller: TransformStreamDefaultController\n ) {\n if (!pull) {\n pull = startPulling(controller)\n }\n return pull\n }\n\n async function startPulling(controller: TransformStreamDefaultController) {\n const reader = stream.getReader()\n\n if (delayDataUntilFirstHtmlChunk) {\n // NOTE: streaming flush\n // We are buffering here for the inlined data stream because the\n // \"shell\" stream might be chunkenized again by the underlying stream\n // implementation, e.g. with a specific high-water mark. To ensure it's\n // the safe timing to pipe the data stream, this extra tick is\n // necessary.\n\n // We don't start reading until we've left the current Task to ensure\n // that it's inserted after flushing the shell. Note that this implementation\n // might get stale if impl details of Fizz change in the future.\n await atLeastOneTask()\n }\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) {\n donePulling = true\n return\n }\n\n // We want to prioritize HTML over RSC data.\n // The SSR render is based on the same RSC stream, so when we get a new RSC chunk,\n // we're likely to produce an HTML chunk as well, so give it a chance to flush first.\n if (!delayDataUntilFirstHtmlChunk && !htmlStreamFinished) {\n await atLeastOneTask()\n }\n controller.enqueue(value)\n }\n } catch (err) {\n controller.error(err)\n }\n }\n\n return new TransformStream({\n start(controller) {\n if (!delayDataUntilFirstHtmlChunk) {\n startOrContinuePulling(controller)\n }\n },\n transform(chunk, controller) {\n controller.enqueue(chunk)\n\n // Start the streaming if it hasn't already been started yet.\n if (delayDataUntilFirstHtmlChunk) {\n startOrContinuePulling(controller)\n }\n },\n flush(controller) {\n htmlStreamFinished = true\n if (donePulling) {\n return\n }\n return startOrContinuePulling(controller)\n },\n })\n}\n\nexport const CLOSE_TAG = ''\n\n/**\n * This transform stream moves the suffix to the end of the stream, so results\n * like `` will be transformed to\n * ``.\n */\nexport function createMoveSuffixStream(): TransformStream<\n Uint8Array,\n Uint8Array\n> {\n let foundSuffix = false\n\n return new TransformStream({\n transform(chunk, controller) {\n if (foundSuffix) {\n return controller.enqueue(chunk)\n }\n\n const index = indexOfUint8Array(chunk, ENCODED_TAGS.CLOSED.BODY_AND_HTML)\n if (index > -1) {\n foundSuffix = true\n\n // If the whole chunk is the suffix, then don't write anything, it will\n // be written in the flush.\n if (chunk.length === ENCODED_TAGS.CLOSED.BODY_AND_HTML.length) {\n return\n }\n\n // Write out the part before the suffix.\n const before = chunk.slice(0, index)\n controller.enqueue(before)\n\n // In the case where the suffix is in the middle of the chunk, we need\n // to split the chunk into two parts.\n if (chunk.length > ENCODED_TAGS.CLOSED.BODY_AND_HTML.length + index) {\n // Write out the part after the suffix.\n const after = chunk.slice(\n index + ENCODED_TAGS.CLOSED.BODY_AND_HTML.length\n )\n controller.enqueue(after)\n }\n } else {\n controller.enqueue(chunk)\n }\n },\n flush(controller) {\n // Even if we didn't find the suffix, the HTML is not valid if we don't\n // add it, so insert it at the end.\n controller.enqueue(ENCODED_TAGS.CLOSED.BODY_AND_HTML)\n },\n })\n}\n\nfunction createStripDocumentClosingTagsTransform(): TransformStream<\n Uint8Array,\n Uint8Array\n> {\n return new TransformStream({\n transform(chunk, controller) {\n // We rely on the assumption that chunks will never break across a code unit.\n // This is reasonable because we currently concat all of React's output from a single\n // flush into one chunk before streaming it forward which means the chunk will represent\n // a single coherent utf-8 string. This is not safe to use if we change our streaming to no\n // longer do this large buffered chunk\n if (\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.BODY_AND_HTML) ||\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.BODY) ||\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.HTML)\n ) {\n // the entire chunk is the closing tags; return without enqueueing anything.\n return\n }\n\n // We assume these tags will go at together at the end of the document and that\n // they won't appear anywhere else in the document. This is not really a safe assumption\n // but until we revamp our streaming infra this is a performant way to string the tags\n chunk = removeFromUint8Array(chunk, ENCODED_TAGS.CLOSED.BODY)\n chunk = removeFromUint8Array(chunk, ENCODED_TAGS.CLOSED.HTML)\n\n controller.enqueue(chunk)\n },\n })\n}\n\nexport function createHtmlDataDplIdTransformStream(\n dplId: string\n): TransformStream {\n let didTransform = false\n\n return new TransformStream({\n transform(chunk, controller) {\n if (didTransform) {\n controller.enqueue(chunk)\n return\n }\n\n const htmlTagIndex = indexOfUint8Array(chunk, ENCODED_TAGS.OPENING.HTML)\n if (htmlTagIndex === -1) {\n controller.enqueue(chunk)\n return\n }\n\n // Insert the data-dpl-id attribute right after \" {\n let foundHtml = false\n let foundBody = false\n return new TransformStream({\n async transform(chunk, controller) {\n // Peek into the streamed chunk to see if the tags are present.\n if (\n !foundHtml &&\n indexOfUint8Array(chunk, ENCODED_TAGS.OPENING.HTML) > -1\n ) {\n foundHtml = true\n }\n\n if (\n !foundBody &&\n indexOfUint8Array(chunk, ENCODED_TAGS.OPENING.BODY) > -1\n ) {\n foundBody = true\n }\n\n controller.enqueue(chunk)\n },\n flush(controller) {\n const missingTags: ('html' | 'body')[] = []\n if (!foundHtml) missingTags.push('html')\n if (!foundBody) missingTags.push('body')\n\n if (!missingTags.length) return\n\n controller.enqueue(\n encoder.encode(\n `\n `<${c}>`)\n .join(\n missingTags.length > 1 ? ' and ' : ''\n )} tags in the root layout.\\nRead more at https://nextjs.org/docs/messages/missing-root-layout-tags\"\n data-next-error-digest=\"${MISSING_ROOT_TAGS_ERROR}\"\n data-next-error-stack=\"\"\n >\n `\n )\n )\n },\n })\n}\n\nexport function chainTransformers(\n readable: ReadableStream,\n transformers: ReadonlyArray | null>\n): ReadableStream {\n let stream = readable\n for (const transformer of transformers) {\n if (!transformer) continue\n\n stream = stream.pipeThrough(transformer)\n }\n return stream\n}\n\nexport type ContinueStreamOptions = {\n inlinedDataStream: ReadableStream | undefined\n waitForAllReady: boolean\n deploymentId: string | undefined\n getServerInsertedHTML: () => Promise\n getServerInsertedMetadata: () => Promise\n validateRootLayout?: boolean\n /**\n * Suffix to inject after the buffered data, but before the close tags.\n */\n suffix?: string | undefined\n}\n\nexport async function continueFizzStream(\n renderStream: ReactDOMServerReadableStream,\n {\n suffix,\n inlinedDataStream,\n waitForAllReady,\n deploymentId,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n validateRootLayout,\n }: ContinueStreamOptions\n): Promise> {\n // Suffix itself might contain close tags at the end, so we need to split it.\n const suffixUnclosed = suffix ? suffix.split(CLOSE_TAG, 1)[0] : null\n\n if (waitForAllReady) {\n // Wait for all Suspense boundaries to resolve before continuing.\n await renderStream.allReady\n } else {\n // Otherwise, we want to make sure Fizz is done with all microtasky work\n // before we start pulling the stream and cause a flush.\n await waitAtLeastOneReactRenderTask()\n }\n\n return chainTransformers(renderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n\n // Insert data-dpl-id attribute on the html tag\n deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,\n\n // Transform metadata\n createMetadataTransformStream(getServerInsertedMetadata),\n\n // Insert suffix content\n suffixUnclosed != null && suffixUnclosed.length > 0\n ? createDeferredSuffixStream(suffixUnclosed)\n : null,\n\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n inlinedDataStream\n ? createFlightDataInjectionTransformStream(inlinedDataStream, true)\n : null,\n\n // Validate the root layout for missing html or body tags\n validateRootLayout ? createRootLayoutValidatorStream() : null,\n\n // Close tags should always be deferred to the end\n createMoveSuffixStream(),\n\n // Special head insertions\n // TODO-APP: Insert server side html to end of head in app layout rendering, to avoid\n // hydration errors. Remove this once it's ready to be handled by react itself.\n createHeadInsertionTransformStream(getServerInsertedHTML),\n ])\n}\n\ntype ContinueDynamicPrerenderOptions = {\n getServerInsertedHTML: () => Promise\n getServerInsertedMetadata: () => Promise\n deploymentId: string | undefined\n}\n\nexport async function continueDynamicPrerender(\n prerenderStream: ReadableStream,\n {\n getServerInsertedHTML,\n getServerInsertedMetadata,\n deploymentId,\n }: ContinueDynamicPrerenderOptions\n) {\n return chainTransformers(prerenderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n createStripDocumentClosingTagsTransform(),\n // Insert data-dpl-id attribute on the html tag\n deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,\n // Insert generated tags to head\n createHeadInsertionTransformStream(getServerInsertedHTML),\n // Transform metadata\n createMetadataTransformStream(getServerInsertedMetadata),\n ])\n}\n\ntype ContinueStaticPrerenderOptions = {\n inlinedDataStream: ReadableStream\n getServerInsertedHTML: () => Promise\n getServerInsertedMetadata: () => Promise\n deploymentId: string | undefined\n}\n\nexport async function continueStaticPrerender(\n prerenderStream: ReadableStream,\n {\n inlinedDataStream,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n deploymentId,\n }: ContinueStaticPrerenderOptions\n) {\n return chainTransformers(prerenderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n // Add build id comment to start of the HTML document (in export mode)\n // Insert data-dpl-id attribute on the html tag\n deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,\n // Insert generated tags to head\n createHeadInsertionTransformStream(getServerInsertedHTML),\n // Transform metadata\n createMetadataTransformStream(getServerInsertedMetadata),\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n createFlightDataInjectionTransformStream(inlinedDataStream, true),\n // Close tags should always be deferred to the end\n createMoveSuffixStream(),\n ])\n}\n\nexport async function continueStaticFallbackPrerender(\n prerenderStream: ReadableStream,\n {\n inlinedDataStream,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n deploymentId,\n }: ContinueStaticPrerenderOptions\n) {\n // Same as `continueStaticPrerender`, but also inserts an additional script\n // to instruct the client to start fetching the hydration data as early\n // as possible.\n return chainTransformers(prerenderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n // Insert data-dpl-id attribute on the html tag\n deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,\n // Insert generated tags to head\n createHeadInsertionTransformStream(getServerInsertedHTML),\n // Insert the client resume script into the head\n await createClientResumeScriptInsertionTransformStream(),\n // Transform metadata\n createMetadataTransformStream(getServerInsertedMetadata),\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n createFlightDataInjectionTransformStream(inlinedDataStream, true),\n // Close tags should always be deferred to the end\n createMoveSuffixStream(),\n ])\n}\n\ntype ContinueResumeOptions = {\n inlinedDataStream: ReadableStream\n getServerInsertedHTML: () => Promise\n getServerInsertedMetadata: () => Promise\n delayDataUntilFirstHtmlChunk: boolean\n deploymentId: string | undefined\n}\n\nexport async function continueDynamicHTMLResume(\n renderStream: ReadableStream,\n {\n delayDataUntilFirstHtmlChunk,\n inlinedDataStream,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n deploymentId,\n }: ContinueResumeOptions\n) {\n return chainTransformers(renderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n // Insert data-dpl-id attribute on the html tag\n deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,\n // Insert generated tags to head\n createHeadInsertionTransformStream(getServerInsertedHTML),\n // Transform metadata\n createMetadataTransformStream(getServerInsertedMetadata),\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n createFlightDataInjectionTransformStream(\n inlinedDataStream,\n delayDataUntilFirstHtmlChunk\n ),\n // Close tags should always be deferred to the end\n createMoveSuffixStream(),\n ])\n}\n\nexport function createDocumentClosingStream(): ReadableStream {\n return streamFromString(CLOSE_TAG)\n}\n\n// ---------------------------------------------------------------------------\n// Runtime prefetch transform (Web streams)\n// ---------------------------------------------------------------------------\n\n/**\n * Web TransformStream that replaces the runtime prefetch sentinel in an RSC\n * payload stream: `[]` -> `[,]`.\n *\n * This is the web equivalent of createRuntimePrefetchNodeTransform\n * in node-stream-helpers.ts.\n */\nexport function createRuntimePrefetchTransformStream(\n sentinel: number,\n isPartial: boolean,\n staleTime: number\n): TransformStream {\n const enc = new TextEncoder()\n\n // Search for: []\n // Replace with: [,]\n const search = enc.encode(`[${sentinel}]`)\n const first = search[0]\n const replace = enc.encode(`[${isPartial},${staleTime}]`)\n const searchLen = search.length\n\n let currentChunk: Uint8Array | null = null\n let found = false\n\n function processChunk(\n controller: TransformStreamDefaultController,\n nextChunk: null | Uint8Array\n ) {\n if (found) {\n if (nextChunk) {\n controller.enqueue(nextChunk)\n }\n return\n }\n\n if (currentChunk) {\n // We can't search past the index that can contain a full match\n let exclusiveUpperBound = currentChunk.length - (searchLen - 1)\n if (nextChunk) {\n // If we have any overflow bytes we can search up to the chunk's final byte\n exclusiveUpperBound += Math.min(nextChunk.length, searchLen - 1)\n }\n if (exclusiveUpperBound < 1) {\n // we can't match the current chunk.\n controller.enqueue(currentChunk)\n currentChunk = nextChunk // advance so we don't process this chunk again\n return\n }\n\n let currentIndex = currentChunk.indexOf(first)\n\n // check the current candidate match if it is within the bounds of our search space for the currentChunk\n candidateLoop: while (\n -1 < currentIndex &&\n currentIndex < exclusiveUpperBound\n ) {\n // We already know index 0 matches because we used indexOf to find the candidateIndex so we start at index 1\n let matchIndex = 1\n while (matchIndex < searchLen) {\n const candidateIndex = currentIndex + matchIndex\n const candidateValue =\n candidateIndex < currentChunk.length\n ? currentChunk[candidateIndex]\n : // if we ever hit this condition it is because there is a nextChunk we can read from\n nextChunk![candidateIndex - currentChunk.length]\n if (candidateValue !== search[matchIndex]) {\n // No match, reset and continue the search from the next position\n currentIndex = currentChunk.indexOf(first, currentIndex + 1)\n continue candidateLoop\n }\n matchIndex++\n }\n // We found a complete match. currentIndex is our starting point to replace the value.\n found = true\n // enqueue everything up to the match\n controller.enqueue(currentChunk.subarray(0, currentIndex))\n // enqueue the replacement value\n controller.enqueue(replace)\n // If there are bytes in the currentChunk after the match enqueue them\n if (currentIndex + searchLen < currentChunk.length) {\n controller.enqueue(currentChunk.slice(currentIndex + searchLen))\n }\n // If we have a next chunk we enqueue it now\n if (nextChunk) {\n // if replacement spills over to the next chunk we first exclude the replaced bytes\n const overflowBytes = currentIndex + searchLen - currentChunk.length\n const truncatedChunk =\n overflowBytes > 0 ? nextChunk!.subarray(overflowBytes) : nextChunk\n controller.enqueue(truncatedChunk)\n }\n // We are now in found mode and don't need to track currentChunk anymore\n currentChunk = null\n return\n }\n // No match found in this chunk, emit it and wait for the next one\n controller.enqueue(currentChunk)\n }\n\n // Advance to the next chunk\n currentChunk = nextChunk\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n processChunk(controller, chunk)\n },\n flush(controller) {\n processChunk(controller, null)\n },\n })\n}\n"],"names":["getTracer","AppRenderSpan","createPromiseWithResolvers","scheduleImmediate","atLeastOneTask","waitAtLeastOneReactRenderTask","ENCODED_TAGS","indexOfUint8Array","isEquivalentUint8Arrays","removeFromUint8Array","MISSING_ROOT_TAGS_ERROR","RSC_HEADER","NEXT_ROUTER_PREFETCH_HEADER","NEXT_ROUTER_SEGMENT_PREFETCH_HEADER","NEXT_RSC_UNION_QUERY","computeCacheBustingSearchParam","voidCatch","encoder","TextEncoder","chainStreams","streams","length","ReadableStream","start","controller","close","readable","writable","TransformStream","promise","pipeTo","preventClose","i","nextStream","then","lastStream","catch","streamFromString","str","enqueue","encode","streamFromBuffer","chunk","streamToChunks","stream","reader","getReader","chunks","done","value","read","push","concatUint8Arrays","totalLength","reduce","sum","result","Uint8Array","offset","set","webstreamToUint8Array","webToReadable","process","env","NEXT_RUNTIME","Error","Readable","TURBOPACK","require","__NEXT_BUNDLER","__non_webpack_require__","fromWeb","nodestreamToUint8Array","Buffer","from","concat","streamToUint8Array","streamToBuffer","streamToString","signal","decoder","TextDecoder","fatal","string","aborted","decode","createBufferedTransformStream","options","maxBufferByteLength","Infinity","bufferedChunks","bufferByteLength","pending","flush","copiedBytes","bufferedChunk","byteLength","scheduleFlush","detached","undefined","resolve","transform","renderToInitialFizzStream","ReactDOMServer","element","streamOptions","trace","renderToReadableStream","createMetadataTransformStream","insert","chunkIndex","isMarkRemoved","iconMarkIndex","closedHeadIndex","iconMarkLength","META","ICON_MARK","CLOSED","HEAD","replaced","subarray","insertion","encodedInsertion","insertionLength","createHeadInsertionTransformStream","inserted","hasBytes","index","insertedHeadContent","slice","createClientResumeScriptInsertionTransformStream","segmentPath","cacheBustingHeader","searchStr","NEXT_CLIENT_RESUME_SCRIPT","didAlreadyInsert","headClosingTagIndex","createDeferredSuffixStream","suffix","flushed","createFlightDataInjectionTransformStream","delayDataUntilFirstHtmlChunk","htmlStreamFinished","pull","donePulling","startOrContinuePulling","startPulling","err","error","CLOSE_TAG","createMoveSuffixStream","foundSuffix","BODY_AND_HTML","before","after","createStripDocumentClosingTagsTransform","BODY","HTML","createHtmlDataDplIdTransformStream","dplId","didTransform","htmlTagIndex","OPENING","insertionPoint","attribute","encodedAttribute","modifiedChunk","createRootLayoutValidatorStream","foundHtml","foundBody","missingTags","map","c","join","chainTransformers","transformers","transformer","pipeThrough","continueFizzStream","renderStream","inlinedDataStream","waitForAllReady","deploymentId","getServerInsertedHTML","getServerInsertedMetadata","validateRootLayout","suffixUnclosed","split","allReady","continueDynamicPrerender","prerenderStream","continueStaticPrerender","continueStaticFallbackPrerender","continueDynamicHTMLResume","createDocumentClosingStream","createRuntimePrefetchTransformStream","sentinel","isPartial","staleTime","enc","search","first","replace","searchLen","currentChunk","found","processChunk","nextChunk","exclusiveUpperBound","Math","min","currentIndex","indexOf","candidateLoop","matchIndex","candidateIndex","candidateValue","overflowBytes","truncatedChunk"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 9387, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/stream-utils/uint8array-helpers.ts"],"sourcesContent":["/**\n * Find the starting index of Uint8Array `b` within Uint8Array `a`.\n */\nexport function indexOfUint8Array(a: Uint8Array, b: Uint8Array) {\n if (b.length === 0) return 0\n if (a.length === 0 || b.length > a.length) return -1\n\n // Use Node's native implementation when available.\n if (typeof Buffer !== 'undefined') {\n const haystack = Buffer.isBuffer(a)\n ? a\n : Buffer.from(a.buffer, a.byteOffset, a.byteLength)\n return haystack.indexOf(b)\n }\n\n // start iterating through `a`\n for (let i = 0; i <= a.length - b.length; i++) {\n let completeMatch = true\n // from index `i`, iterate through `b` and check for mismatch\n for (let j = 0; j < b.length; j++) {\n // if the values do not match, then this isn't a complete match, exit `b` iteration early and iterate to next index of `a`.\n if (a[i + j] !== b[j]) {\n completeMatch = false\n break\n }\n }\n\n if (completeMatch) {\n return i\n }\n }\n\n return -1\n}\n\n/**\n * Check if two Uint8Arrays are strictly equivalent.\n */\nexport function isEquivalentUint8Arrays(a: Uint8Array, b: Uint8Array) {\n if (a.length !== b.length) return false\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false\n }\n\n return true\n}\n\n/**\n * Remove Uint8Array `b` from Uint8Array `a`.\n *\n * If `b` is not in `a`, `a` is returned unchanged.\n *\n * Otherwise, the function returns a new Uint8Array instance with size `a.length - b.length`\n */\nexport function removeFromUint8Array(a: Uint8Array, b: Uint8Array) {\n const tagIndex = indexOfUint8Array(a, b)\n if (tagIndex === 0) return a.subarray(b.length)\n if (tagIndex > -1) {\n const removed = new Uint8Array(a.length - b.length)\n removed.set(a.subarray(0, tagIndex))\n removed.set(a.subarray(tagIndex + b.length), tagIndex)\n return removed\n } else {\n return a\n }\n}\n"],"names":["indexOfUint8Array","a","b","length","Buffer","haystack","isBuffer","from","buffer","byteOffset","byteLength","indexOf","i","completeMatch","j","isEquivalentUint8Arrays","removeFromUint8Array","tagIndex","subarray","removed","Uint8Array","set"],"mappings":"AAAA;;CAEC,GACD;;;;;;;;AAAO,SAASA,kBAAkBC,CAAa,EAAEC,CAAa;IAC5D,IAAIA,EAAEC,MAAM,KAAK,GAAG,OAAO;IAC3B,IAAIF,EAAEE,MAAM,KAAK,KAAKD,EAAEC,MAAM,GAAGF,EAAEE,MAAM,EAAE,OAAO,CAAC;IAEnD,mDAAmD;IACnD,IAAI,OAAOC,WAAW,aAAa;QACjC,MAAMC,WAAWD,OAAOE,QAAQ,CAACL,KAC7BA,IACAG,OAAOG,IAAI,CAACN,EAAEO,MAAM,EAAEP,EAAEQ,UAAU,EAAER,EAAES,UAAU;QACpD,OAAOL,SAASM,OAAO,CAACT;IAC1B;IAEA,8BAA8B;IAC9B,IAAK,IAAIU,IAAI,GAAGA,KAAKX,EAAEE,MAAM,GAAGD,EAAEC,MAAM,EAAES,IAAK;QAC7C,IAAIC,gBAAgB;QACpB,6DAA6D;QAC7D,IAAK,IAAIC,IAAI,GAAGA,IAAIZ,EAAEC,MAAM,EAAEW,IAAK;YACjC,2HAA2H;YAC3H,IAAIb,CAAC,CAACW,IAAIE,EAAE,KAAKZ,CAAC,CAACY,EAAE,EAAE;gBACrBD,gBAAgB;gBAChB;YACF;QACF;QAEA,IAAIA,eAAe;YACjB,OAAOD;QACT;IACF;IAEA,OAAO,CAAC;AACV;AAKO,SAASG,wBAAwBd,CAAa,EAAEC,CAAa;IAClE,IAAID,EAAEE,MAAM,KAAKD,EAAEC,MAAM,EAAE,OAAO;IAElC,IAAK,IAAIS,IAAI,GAAGA,IAAIX,EAAEE,MAAM,EAAES,IAAK;QACjC,IAAIX,CAAC,CAACW,EAAE,KAAKV,CAAC,CAACU,EAAE,EAAE,OAAO;IAC5B;IAEA,OAAO;AACT;AASO,SAASI,qBAAqBf,CAAa,EAAEC,CAAa;IAC/D,MAAMe,WAAWjB,kBAAkBC,GAAGC;IACtC,IAAIe,aAAa,GAAG,OAAOhB,EAAEiB,QAAQ,CAAChB,EAAEC,MAAM;IAC9C,IAAIc,WAAW,CAAC,GAAG;QACjB,MAAME,UAAU,IAAIC,WAAWnB,EAAEE,MAAM,GAAGD,EAAEC,MAAM;QAClDgB,QAAQE,GAAG,CAACpB,EAAEiB,QAAQ,CAAC,GAAGD;QAC1BE,QAAQE,GAAG,CAACpB,EAAEiB,QAAQ,CAACD,WAAWf,EAAEC,MAAM,GAAGc;QAC7C,OAAOE;IACT,OAAO;QACL,OAAOlB;IACT;AACF","ignoreList":[0]}}, + {"offset": {"line": 9445, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/error.ts"],"sourcesContent":["export class PageSignatureError extends Error {\n constructor({ page }: { page: string }) {\n super(`The middleware \"${page}\" accepts an async API directly with the form:\n \n export function middleware(request, event) {\n return NextResponse.redirect('/new-location')\n }\n \n Read more: https://nextjs.org/docs/messages/middleware-new-signature\n `)\n }\n}\n\nexport class RemovedPageError extends Error {\n constructor() {\n super(`The request.page has been deprecated in favour of \\`URLPattern\\`.\n Read more: https://nextjs.org/docs/messages/middleware-request-page\n `)\n }\n}\n\nexport class RemovedUAError extends Error {\n constructor() {\n super(`The request.ua has been removed in favour of \\`userAgent\\` function.\n Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent\n `)\n }\n}\n"],"names":["PageSignatureError","Error","constructor","page","RemovedPageError","RemovedUAError"],"mappings":";;;;;;;;AAAO,MAAMA,2BAA2BC;IACtCC,YAAY,EAAEC,IAAI,EAAoB,CAAE;QACtC,KAAK,CAAC,CAAC,gBAAgB,EAAEA,KAAK;;;;;;;EAOhC,CAAC;IACD;AACF;AAEO,MAAMC,yBAAyBH;IACpCC,aAAc;QACZ,KAAK,CAAC,CAAC;;EAET,CAAC;IACD;AACF;AAEO,MAAMG,uBAAuBJ;IAClCC,aAAc;QACZ,KAAK,CAAC,CAAC;;EAET,CAAC;IACD;AACF","ignoreList":[0]}}, + {"offset": {"line": 9483, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/next-url.ts"],"sourcesContent":["import type { OutgoingHttpHeaders } from 'http'\nimport type { DomainLocale, I18NConfig } from '../config-shared'\nimport type { I18NProvider } from '../lib/i18n-provider'\n\nimport { detectDomainLocale } from '../../shared/lib/i18n/detect-domain-locale'\nimport { formatNextPathnameInfo } from '../../shared/lib/router/utils/format-next-pathname-info'\nimport { getHostname } from '../../shared/lib/get-hostname'\nimport { getNextPathnameInfo } from '../../shared/lib/router/utils/get-next-pathname-info'\n\ninterface Options {\n base?: string | URL\n headers?: OutgoingHttpHeaders\n forceLocale?: boolean\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig | null\n trailingSlash?: boolean\n }\n i18nProvider?: I18NProvider\n}\n\nconst REGEX_LOCALHOST_HOSTNAME =\n /^(?:127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\\[::1\\]|localhost)$/\n\nfunction parseURL(url: string | URL, base?: string | URL) {\n const parsed = new URL(String(url), base && String(base))\n if (REGEX_LOCALHOST_HOSTNAME.test(parsed.hostname)) {\n parsed.hostname = 'localhost'\n }\n return parsed\n}\n\nconst Internal = Symbol('NextURLInternal')\n\nexport class NextURL {\n private [Internal]: {\n basePath: string\n buildId?: string\n flightSearchParameters?: Record\n defaultLocale?: string\n domainLocale?: DomainLocale\n locale?: string\n options: Options\n trailingSlash?: boolean\n url: URL\n }\n\n constructor(input: string | URL, base?: string | URL, opts?: Options)\n constructor(input: string | URL, opts?: Options)\n constructor(\n input: string | URL,\n baseOrOpts?: string | URL | Options,\n opts?: Options\n ) {\n let base: undefined | string | URL\n let options: Options\n\n if (\n (typeof baseOrOpts === 'object' && 'pathname' in baseOrOpts) ||\n typeof baseOrOpts === 'string'\n ) {\n base = baseOrOpts\n options = opts || {}\n } else {\n options = opts || baseOrOpts || {}\n }\n\n this[Internal] = {\n url: parseURL(input, base ?? options.base),\n options: options,\n basePath: '',\n }\n\n this.analyze()\n }\n\n private analyze() {\n const info = getNextPathnameInfo(this[Internal].url.pathname, {\n nextConfig: this[Internal].options.nextConfig,\n parseData: !process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE,\n i18nProvider: this[Internal].options.i18nProvider,\n })\n\n const hostname = getHostname(\n this[Internal].url,\n this[Internal].options.headers\n )\n this[Internal].domainLocale = this[Internal].options.i18nProvider\n ? this[Internal].options.i18nProvider.detectDomainLocale(hostname)\n : detectDomainLocale(\n this[Internal].options.nextConfig?.i18n?.domains,\n hostname\n )\n\n const defaultLocale =\n this[Internal].domainLocale?.defaultLocale ||\n this[Internal].options.nextConfig?.i18n?.defaultLocale\n\n this[Internal].url.pathname = info.pathname\n this[Internal].defaultLocale = defaultLocale\n this[Internal].basePath = info.basePath ?? ''\n this[Internal].buildId = info.buildId\n this[Internal].locale = info.locale ?? defaultLocale\n this[Internal].trailingSlash = info.trailingSlash\n }\n\n private formatPathname() {\n return formatNextPathnameInfo({\n basePath: this[Internal].basePath,\n buildId: this[Internal].buildId,\n defaultLocale: !this[Internal].options.forceLocale\n ? this[Internal].defaultLocale\n : undefined,\n locale: this[Internal].locale,\n pathname: this[Internal].url.pathname,\n trailingSlash: this[Internal].trailingSlash,\n })\n }\n\n private formatSearch() {\n return this[Internal].url.search\n }\n\n public get buildId() {\n return this[Internal].buildId\n }\n\n public set buildId(buildId: string | undefined) {\n this[Internal].buildId = buildId\n }\n\n public get locale() {\n return this[Internal].locale ?? ''\n }\n\n public set locale(locale: string) {\n if (\n !this[Internal].locale ||\n !this[Internal].options.nextConfig?.i18n?.locales.includes(locale)\n ) {\n throw new TypeError(\n `The NextURL configuration includes no locale \"${locale}\"`\n )\n }\n\n this[Internal].locale = locale\n }\n\n get defaultLocale() {\n return this[Internal].defaultLocale\n }\n\n get domainLocale() {\n return this[Internal].domainLocale\n }\n\n get searchParams() {\n return this[Internal].url.searchParams\n }\n\n get host() {\n return this[Internal].url.host\n }\n\n set host(value: string) {\n this[Internal].url.host = value\n }\n\n get hostname() {\n return this[Internal].url.hostname\n }\n\n set hostname(value: string) {\n this[Internal].url.hostname = value\n }\n\n get port() {\n return this[Internal].url.port\n }\n\n set port(value: string) {\n this[Internal].url.port = value\n }\n\n get protocol() {\n return this[Internal].url.protocol\n }\n\n set protocol(value: string) {\n this[Internal].url.protocol = value\n }\n\n get href() {\n const pathname = this.formatPathname()\n const search = this.formatSearch()\n return `${this.protocol}//${this.host}${pathname}${search}${this.hash}`\n }\n\n set href(url: string) {\n this[Internal].url = parseURL(url)\n this.analyze()\n }\n\n get origin() {\n return this[Internal].url.origin\n }\n\n get pathname() {\n return this[Internal].url.pathname\n }\n\n set pathname(value: string) {\n this[Internal].url.pathname = value\n }\n\n get hash() {\n return this[Internal].url.hash\n }\n\n set hash(value: string) {\n this[Internal].url.hash = value\n }\n\n get search() {\n return this[Internal].url.search\n }\n\n set search(value: string) {\n this[Internal].url.search = value\n }\n\n get password() {\n return this[Internal].url.password\n }\n\n set password(value: string) {\n this[Internal].url.password = value\n }\n\n get username() {\n return this[Internal].url.username\n }\n\n set username(value: string) {\n this[Internal].url.username = value\n }\n\n get basePath() {\n return this[Internal].basePath\n }\n\n set basePath(value: string) {\n this[Internal].basePath = value.startsWith('/') ? value : `/${value}`\n }\n\n toString() {\n return this.href\n }\n\n toJSON() {\n return this.href\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n href: this.href,\n origin: this.origin,\n protocol: this.protocol,\n username: this.username,\n password: this.password,\n host: this.host,\n hostname: this.hostname,\n port: this.port,\n pathname: this.pathname,\n search: this.search,\n searchParams: this.searchParams,\n hash: this.hash,\n }\n }\n\n clone() {\n return new NextURL(String(this), this[Internal].options)\n }\n}\n"],"names":["detectDomainLocale","formatNextPathnameInfo","getHostname","getNextPathnameInfo","REGEX_LOCALHOST_HOSTNAME","parseURL","url","base","parsed","URL","String","test","hostname","Internal","Symbol","NextURL","constructor","input","baseOrOpts","opts","options","basePath","analyze","info","pathname","nextConfig","parseData","process","env","__NEXT_NO_MIDDLEWARE_URL_NORMALIZE","i18nProvider","headers","domainLocale","i18n","domains","defaultLocale","buildId","locale","trailingSlash","formatPathname","forceLocale","undefined","formatSearch","search","locales","includes","TypeError","searchParams","host","value","port","protocol","href","hash","origin","password","username","startsWith","toString","toJSON","for","clone"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 9678, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/adapters/headers.ts"],"sourcesContent":["import type { IncomingHttpHeaders } from 'http'\n\nimport { ReflectAdapter } from './reflect'\n\n/**\n * @internal\n */\nexport class ReadonlyHeadersError extends Error {\n constructor() {\n super(\n 'Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers'\n )\n }\n\n public static callable() {\n throw new ReadonlyHeadersError()\n }\n}\n\nexport type ReadonlyHeaders = Headers & {\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n append(...args: any[]): void\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n set(...args: any[]): void\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n delete(...args: any[]): void\n}\n\n/**\n * The read methods that a sealed view provides itself instead of forwarding to\n * the underlying `Headers`. Deriving the type from `Headers` keeps the\n * implementations in step with the platform signatures.\n */\ntype SealedHeaderMethods = Pick<\n Headers,\n | 'get'\n | 'has'\n | 'getSetCookie'\n | 'keys'\n | 'values'\n | 'entries'\n | 'forEach'\n | typeof Symbol.iterator\n>\n\n/**\n * Builds the read methods for a sealed view that exposes all of `target`.\n */\nfunction createPassThroughMethods(\n target: Headers,\n sealed: ReadonlyHeaders\n): SealedHeaderMethods {\n return {\n get: target.get.bind(target),\n has: target.has.bind(target),\n getSetCookie: target.getSetCookie.bind(target),\n keys: target.keys.bind(target),\n values: target.values.bind(target),\n entries: target.entries.bind(target),\n [Symbol.iterator]: target[Symbol.iterator].bind(target),\n // The native method passes the unsealed target as the callback's `parent`\n // argument. That is a mutable handle on the underlying headers. Pass the\n // sealed view instead.\n forEach(callbackfn, thisArg) {\n for (const [name, value] of target.entries()) {\n callbackfn.call(thisArg, value, name, sealed)\n }\n },\n }\n}\n\n/**\n * Builds the read methods for a sealed view that omits the header names matched\n * by `isHidden`.\n */\nfunction createHidingMethods(\n target: Headers,\n sealed: ReadonlyHeaders,\n isHidden: (name: string) => boolean\n): SealedHeaderMethods {\n function* entries(): HeadersIterator<[string, string]> {\n for (const entry of target.entries()) {\n if (!isHidden(entry[0])) {\n yield entry\n }\n }\n }\n\n return {\n entries,\n [Symbol.iterator]: entries,\n get: (name) => (isHidden(name) ? null : target.get(name)),\n has: (name) => (isHidden(name) ? false : target.has(name)),\n getSetCookie: () => (isHidden('set-cookie') ? [] : target.getSetCookie()),\n *keys(): HeadersIterator {\n for (const name of target.keys()) {\n if (!isHidden(name)) {\n yield name\n }\n }\n },\n *values(): HeadersIterator {\n for (const [, value] of entries()) {\n yield value\n }\n },\n // The native method passes the unsealed target as the callback's `parent`\n // argument. That is a mutable handle on the underlying headers. Pass the\n // sealed view instead.\n forEach(callbackfn, thisArg) {\n for (const [name, value] of entries()) {\n callbackfn.call(thisArg, value, name, sealed)\n }\n },\n }\n}\n\nexport class HeadersAdapter extends Headers {\n private readonly headers: IncomingHttpHeaders\n\n constructor(headers: IncomingHttpHeaders) {\n // We've already overridden the methods that would be called, so we're just\n // calling the super constructor to ensure that the instanceof check works.\n super()\n\n this.headers = new Proxy(headers, {\n get(target, prop, receiver) {\n // Because this is just an object, we expect that all \"get\" operations\n // are for properties. If it's a \"get\" for a symbol, we'll just return\n // the symbol.\n if (typeof prop === 'symbol') {\n return ReflectAdapter.get(target, prop, receiver)\n }\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return undefined.\n if (typeof original === 'undefined') return\n\n // If the original casing exists, return the value.\n return ReflectAdapter.get(target, original, receiver)\n },\n set(target, prop, value, receiver) {\n if (typeof prop === 'symbol') {\n return ReflectAdapter.set(target, prop, value, receiver)\n }\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, use the prop as the key.\n return ReflectAdapter.set(target, original ?? prop, value, receiver)\n },\n has(target, prop) {\n if (typeof prop === 'symbol') return ReflectAdapter.has(target, prop)\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return false.\n if (typeof original === 'undefined') return false\n\n // If the original casing exists, return true.\n return ReflectAdapter.has(target, original)\n },\n deleteProperty(target, prop) {\n if (typeof prop === 'symbol')\n return ReflectAdapter.deleteProperty(target, prop)\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return true.\n if (typeof original === 'undefined') return true\n\n // If the original casing exists, delete the property.\n return ReflectAdapter.deleteProperty(target, original)\n },\n })\n }\n\n /**\n * Seals a Headers instance to prevent modification by throwing an error when\n * any mutating method is called.\n *\n * The sealed view stays live. Later writes to `headers` remain visible\n * through it.\n *\n * `hidden` omits the given header names from every read operation (`get`,\n * `has`, `getSetCookie`, `forEach`, and iteration). The names must be\n * lowercase. The underlying headers are neither copied nor mutated, so hidden\n * headers remain available to the framework.\n */\n public static seal(\n headers: Headers,\n hidden?: ReadonlySet\n ): ReadonlyHeaders {\n const isHidden =\n hidden && hidden.size > 0\n ? (name: string): boolean => hidden.has(name.toLowerCase())\n : null\n\n // The methods are built once per sealed view and reused, so repeated access\n // returns the same function instead of a fresh closure. They are assigned\n // after the proxy exists because `forEach` hands the proxy to its callback.\n // Creating the proxy runs no trap, so nothing can read them before then.\n let methods: SealedHeaderMethods\n\n const sealed: ReadonlyHeaders = new Proxy(headers, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'append':\n case 'delete':\n case 'set':\n return ReadonlyHeadersError.callable\n case Symbol.iterator:\n return methods[Symbol.iterator]\n case 'get':\n case 'has':\n case 'getSetCookie':\n case 'keys':\n case 'values':\n case 'entries':\n case 'forEach':\n return methods[prop]\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n\n methods = isHidden\n ? createHidingMethods(headers, sealed, isHidden)\n : createPassThroughMethods(headers, sealed)\n\n return sealed\n }\n\n /**\n * @param headers\n * @returns A fresh object identity backed by the original value\n */\n public static fresh(headers: ReadonlyHeaders): ReadonlyHeaders {\n return new Proxy(headers, {\n get(target, prop, receiver) {\n return ReflectAdapter.get(target, prop, receiver)\n },\n })\n }\n\n /**\n * Merges a header value into a string. This stores multiple values as an\n * array, so we need to merge them into a string.\n *\n * @param value a header value\n * @returns a merged header value (a string)\n */\n private merge(value: string | string[]): string {\n if (Array.isArray(value)) return value.join(', ')\n\n return value\n }\n\n /**\n * Creates a Headers instance from a plain object or a Headers instance.\n *\n * @param headers a plain object or a Headers instance\n * @returns a headers instance\n */\n public static from(headers: IncomingHttpHeaders | Headers): Headers {\n if (headers instanceof Headers) return headers\n\n return new HeadersAdapter(headers)\n }\n\n public append(name: string, value: string): void {\n const existing = this.headers[name]\n if (typeof existing === 'string') {\n this.headers[name] = [existing, value]\n } else if (Array.isArray(existing)) {\n existing.push(value)\n } else {\n this.headers[name] = value\n }\n }\n\n public delete(name: string): void {\n delete this.headers[name]\n }\n\n public get(name: string): string | null {\n const value = this.headers[name]\n if (typeof value !== 'undefined') return this.merge(value)\n\n return null\n }\n\n public has(name: string): boolean {\n return typeof this.headers[name] !== 'undefined'\n }\n\n public set(name: string, value: string): void {\n this.headers[name] = value\n }\n\n public forEach(\n callbackfn: (value: string, name: string, parent: Headers) => void,\n thisArg?: any\n ): void {\n for (const [name, value] of this.entries()) {\n callbackfn.call(thisArg, value, name, this)\n }\n }\n\n public *entries(): HeadersIterator<[string, string]> {\n for (const key of Object.keys(this.headers)) {\n const name = key.toLowerCase()\n // We assert here that this is a string because we got it from the\n // Object.keys() call above.\n const value = this.get(name) as string\n\n yield [name, value] as [string, string]\n }\n }\n\n public *keys(): HeadersIterator {\n for (const key of Object.keys(this.headers)) {\n const name = key.toLowerCase()\n yield name\n }\n }\n\n public *values(): HeadersIterator {\n for (const key of Object.keys(this.headers)) {\n // We assert here that this is a string because we got it from the\n // Object.keys() call above.\n const value = this.get(key) as string\n\n yield value\n }\n }\n\n public [Symbol.iterator](): HeadersIterator<[string, string]> {\n return this.entries()\n }\n}\n"],"names":["ReflectAdapter","ReadonlyHeadersError","Error","constructor","callable","createPassThroughMethods","target","sealed","get","bind","has","getSetCookie","keys","values","entries","Symbol","iterator","forEach","callbackfn","thisArg","name","value","call","createHidingMethods","isHidden","entry","HeadersAdapter","Headers","headers","Proxy","prop","receiver","lowercased","toLowerCase","original","Object","find","o","set","deleteProperty","seal","hidden","size","methods","fresh","merge","Array","isArray","join","from","append","existing","push","delete","key"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 9953, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/adapters/next-request.ts"],"sourcesContent":["import type { BaseNextRequest } from '../../../base-http'\nimport type { NodeNextRequest } from '../../../base-http/node'\nimport type { WebNextRequest } from '../../../base-http/web'\nimport type { Writable } from 'node:stream'\n\nimport { getRequestMeta } from '../../../request-meta'\nimport { fromNodeOutgoingHttpHeaders } from '../../utils'\nimport { NextRequest } from '../request'\nimport { isNodeNextRequest, isWebNextRequest } from '../../../base-http/helpers'\n\nexport const ResponseAbortedName = 'ResponseAborted'\nexport class ResponseAborted extends Error {\n public readonly name = ResponseAbortedName\n}\n\n/**\n * Creates an AbortController tied to the closing of a ServerResponse (or other\n * appropriate Writable).\n *\n * If the `close` event is fired before the `finish` event, then we'll send the\n * `abort` signal.\n */\nexport function createAbortController(response: Writable): AbortController {\n const controller = new AbortController()\n\n // If `finish` fires first, then `res.end()` has been called and the close is\n // just us finishing the stream on our side. If `close` fires first, then we\n // know the client disconnected before we finished.\n response.once('close', () => {\n if (response.writableFinished) return\n\n controller.abort(new ResponseAborted())\n })\n\n return controller\n}\n\n/**\n * Creates an AbortSignal tied to the closing of a ServerResponse (or other\n * appropriate Writable).\n *\n * This cannot be done with the request (IncomingMessage or Readable) because\n * the `abort` event will not fire if to data has been fully read (because that\n * will \"close\" the readable stream and nothing fires after that).\n */\nexport function signalFromNodeResponse(response: Writable): AbortSignal {\n const { errored, destroyed } = response\n if (errored || destroyed) {\n return AbortSignal.abort(errored ?? new ResponseAborted())\n }\n\n const { signal } = createAbortController(response)\n return signal\n}\n\nexport class NextRequestAdapter {\n public static fromBaseNextRequest(\n request: BaseNextRequest,\n signal: AbortSignal\n ): NextRequest {\n if (\n // The type check here ensures that `req` is correctly typed, and the\n // environment variable check provides dead code elimination.\n process.env.NEXT_RUNTIME === 'edge' &&\n isWebNextRequest(request)\n ) {\n return NextRequestAdapter.fromWebNextRequest(request)\n } else if (\n // The type check here ensures that `req` is correctly typed, and the\n // environment variable check provides dead code elimination.\n process.env.NEXT_RUNTIME !== 'edge' &&\n isNodeNextRequest(request)\n ) {\n return NextRequestAdapter.fromNodeNextRequest(request, signal)\n } else {\n throw new Error('Invariant: Unsupported NextRequest type')\n }\n }\n\n public static fromNodeNextRequest(\n request: NodeNextRequest,\n signal: AbortSignal\n ): NextRequest {\n // HEAD and GET requests can not have a body.\n let body: BodyInit | null = null\n if (request.method !== 'GET' && request.method !== 'HEAD' && request.body) {\n // @ts-expect-error - this is handled by undici, when streams/web land use it instead\n body = request.body\n }\n\n let url: URL\n if (request.url.startsWith('http')) {\n url = new URL(request.url)\n } else {\n // Grab the full URL from the request metadata.\n const base = getRequestMeta(request, 'initURL')\n if (!base || !base.startsWith('http')) {\n // Because the URL construction relies on the fact that the URL provided\n // is absolute, we need to provide a base URL. We can't use the request\n // URL because it's relative, so we use a dummy URL instead.\n url = new URL(request.url, 'http://n')\n } else {\n url = new URL(request.url, base)\n }\n }\n\n return new NextRequest(url, {\n method: request.method,\n headers: fromNodeOutgoingHttpHeaders(request.headers),\n duplex: 'half',\n signal,\n // geo\n // ip\n // nextConfig\n\n // body can not be passed if request was aborted\n // or we get a Request body was disturbed error\n ...(signal.aborted\n ? {}\n : {\n body,\n }),\n })\n }\n\n public static fromWebNextRequest(request: WebNextRequest): NextRequest {\n // HEAD and GET requests can not have a body.\n let body: ReadableStream | null = null\n if (request.method !== 'GET' && request.method !== 'HEAD') {\n body = request.body\n }\n\n return new NextRequest(request.url, {\n method: request.method,\n headers: fromNodeOutgoingHttpHeaders(request.headers),\n duplex: 'half',\n signal: request.request.signal,\n // geo\n // ip\n // nextConfig\n\n // body can not be passed if request was aborted\n // or we get a Request body was disturbed error\n ...(request.request.signal.aborted\n ? {}\n : {\n body,\n }),\n })\n }\n}\n"],"names":["getRequestMeta","fromNodeOutgoingHttpHeaders","NextRequest","isNodeNextRequest","isWebNextRequest","ResponseAbortedName","ResponseAborted","Error","name","createAbortController","response","controller","AbortController","once","writableFinished","abort","signalFromNodeResponse","errored","destroyed","AbortSignal","signal","NextRequestAdapter","fromBaseNextRequest","request","process","env","NEXT_RUNTIME","fromWebNextRequest","fromNodeNextRequest","body","method","url","startsWith","URL","base","headers","duplex","aborted"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 10073, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/adapters/reflect.ts"],"sourcesContent":["export class ReflectAdapter {\n static get(\n target: T,\n prop: string | symbol,\n receiver: unknown\n ): any {\n const value = Reflect.get(target, prop, receiver)\n if (typeof value === 'function') {\n return value.bind(target)\n }\n\n return value\n }\n\n static set(\n target: T,\n prop: string | symbol,\n value: any,\n receiver: any\n ): boolean {\n return Reflect.set(target, prop, value, receiver)\n }\n\n static has(target: T, prop: string | symbol): boolean {\n return Reflect.has(target, prop)\n }\n\n static deleteProperty(\n target: T,\n prop: string | symbol\n ): boolean {\n return Reflect.deleteProperty(target, prop)\n }\n}\n"],"names":["ReflectAdapter","get","target","prop","receiver","value","Reflect","bind","set","has","deleteProperty"],"mappings":";;;;AAAO,MAAMA;IACX,OAAOC,IACLC,MAAS,EACTC,IAAqB,EACrBC,QAAiB,EACZ;QACL,MAAMC,QAAQC,QAAQL,GAAG,CAACC,QAAQC,MAAMC;QACxC,IAAI,OAAOC,UAAU,YAAY;YAC/B,OAAOA,MAAME,IAAI,CAACL;QACpB;QAEA,OAAOG;IACT;IAEA,OAAOG,IACLN,MAAS,EACTC,IAAqB,EACrBE,KAAU,EACVD,QAAa,EACJ;QACT,OAAOE,QAAQE,GAAG,CAACN,QAAQC,MAAME,OAAOD;IAC1C;IAEA,OAAOK,IAAsBP,MAAS,EAAEC,IAAqB,EAAW;QACtE,OAAOG,QAAQG,GAAG,CAACP,QAAQC;IAC7B;IAEA,OAAOO,eACLR,MAAS,EACTC,IAAqB,EACZ;QACT,OAAOG,QAAQI,cAAc,CAACR,QAAQC;IACxC;AACF","ignoreList":[0]}}, + {"offset": {"line": 10099, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/cookies.ts"],"sourcesContent":["export {\n RequestCookies,\n ResponseCookies,\n stringifyCookie,\n} from 'next/dist/compiled/@edge-runtime/cookies'\n"],"names":["RequestCookies","ResponseCookies","stringifyCookie"],"mappings":";AAAA,SACEA,cAAc,EACdC,eAAe,EACfC,eAAe,QACV,2CAA0C","ignoreList":[0]}}, + {"offset": {"line": 10106, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/request.ts"],"sourcesContent":["import type { I18NConfig } from '../../config-shared'\nimport { NextURL } from '../next-url'\nimport { toNodeOutgoingHttpHeaders, validateURL } from '../utils'\nimport { RemovedUAError, RemovedPageError } from '../error'\nimport { RequestCookies } from './cookies'\n\nexport const INTERNALS = Symbol('internal request')\n\n/**\n * This class extends the [Web `Request` API](https://developer.mozilla.org/docs/Web/API/Request) with additional convenience methods.\n *\n * Read more: [Next.js Docs: `NextRequest`](https://nextjs.org/docs/app/api-reference/functions/next-request)\n */\nexport class NextRequest extends Request {\n /** @internal */\n [INTERNALS]: {\n cookies: RequestCookies\n url: string\n nextUrl: NextURL\n }\n\n constructor(input: URL | RequestInfo, init: RequestInit = {}) {\n const url =\n typeof input !== 'string' && 'url' in input ? input.url : String(input)\n\n validateURL(url)\n\n // node Request instance requires duplex option when a body\n // is present or it errors, we don't handle this for\n // Request being passed in since it would have already\n // errored if this wasn't configured\n if (process.env.NEXT_RUNTIME !== 'edge') {\n if (init.body && init.duplex !== 'half') {\n init.duplex = 'half'\n }\n }\n\n if (input instanceof Request) super(input, init)\n else super(url, init)\n\n const nextUrl = new NextURL(url, {\n headers: toNodeOutgoingHttpHeaders(this.headers),\n nextConfig: init.nextConfig,\n })\n this[INTERNALS] = {\n cookies: new RequestCookies(this.headers),\n nextUrl,\n url: process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE\n ? url\n : nextUrl.toString(),\n }\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n cookies: this.cookies,\n nextUrl: this.nextUrl,\n url: this.url,\n // rest of props come from Request\n bodyUsed: this.bodyUsed,\n cache: this.cache,\n credentials: this.credentials,\n destination: this.destination,\n headers: Object.fromEntries(this.headers),\n integrity: this.integrity,\n keepalive: this.keepalive,\n method: this.method,\n mode: this.mode,\n redirect: this.redirect,\n referrer: this.referrer,\n referrerPolicy: this.referrerPolicy,\n signal: this.signal,\n }\n }\n\n public get cookies() {\n return this[INTERNALS].cookies\n }\n\n public get nextUrl() {\n return this[INTERNALS].nextUrl\n }\n\n /**\n * @deprecated\n * `page` has been deprecated in favour of `URLPattern`.\n * Read more: https://nextjs.org/docs/messages/middleware-request-page\n */\n public get page() {\n throw new RemovedPageError()\n }\n\n /**\n * @deprecated\n * `ua` has been removed in favour of \\`userAgent\\` function.\n * Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent\n */\n public get ua() {\n throw new RemovedUAError()\n }\n\n public get url() {\n return this[INTERNALS].url\n }\n}\n\nexport interface RequestInit extends globalThis.RequestInit {\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig | null\n trailingSlash?: boolean\n }\n signal?: AbortSignal\n // see https://github.com/whatwg/fetch/pull/1457\n duplex?: 'half'\n}\n"],"names":["NextURL","toNodeOutgoingHttpHeaders","validateURL","RemovedUAError","RemovedPageError","RequestCookies","INTERNALS","Symbol","NextRequest","Request","constructor","input","init","url","String","process","env","NEXT_RUNTIME","body","duplex","nextUrl","headers","nextConfig","cookies","__NEXT_NO_MIDDLEWARE_URL_NORMALIZE","toString","for","bodyUsed","cache","credentials","destination","Object","fromEntries","integrity","keepalive","method","mode","redirect","referrer","referrerPolicy","signal","page","ua"],"mappings":";;;;;;AACA,SAASA,OAAO,QAAQ,cAAa;AACrC,SAASC,yBAAyB,EAAEC,WAAW,QAAQ,WAAU;AACjE,SAASC,cAAc,EAAEC,gBAAgB,QAAQ,WAAU;;AAC3D,SAASC,cAAc,QAAQ,YAAW;;;;;AAEnC,MAAMC,YAAYC,OAAO,oBAAmB;AAO5C,MAAMC,oBAAoBC;IAQ/BC,YAAYC,KAAwB,EAAEC,OAAoB,CAAC,CAAC,CAAE;QAC5D,MAAMC,MACJ,OAAOF,UAAU,YAAY,SAASA,QAAQA,MAAME,GAAG,GAAGC,OAAOH;YAEnET,8KAAAA,EAAYW;QAEZ,2DAA2D;QAC3D,oDAAoD;QACpD,sDAAsD;QACtD,oCAAoC;QACpC,IAAIE,QAAQC,GAAG,CAACC,YAAY,KAAK,OAAQ;YACvC,IAAIL,KAAKM,IAAI,IAAIN,KAAKO,MAAM,KAAK,QAAQ;gBACvCP,KAAKO,MAAM,GAAG;YAChB;QACF;QAEA,IAAIR,iBAAiBF,SAAS,KAAK,CAACE,OAAOC;aACtC,KAAK,CAACC,KAAKD;QAEhB,MAAMQ,UAAU,IAAIpB,gLAAAA,CAAQa,KAAK;YAC/BQ,aAASpB,4LAAAA,EAA0B,IAAI,CAACoB,OAAO;YAC/CC,YAAYV,KAAKU,UAAU;QAC7B;QACA,IAAI,CAAChB,UAAU,GAAG;YAChBiB,SAAS,IAAIlB,qMAAAA,CAAe,IAAI,CAACgB,OAAO;YACxCD;YACAP,KAAKE,QAAQC,GAAG,CAACQ,0BACbX,QAD+C,kBAE/CO,QAAQK,QAAQ;QACtB;IACF;IAEA,CAAClB,OAAOmB,GAAG,CAAC,+BAA+B,GAAG;QAC5C,OAAO;YACLH,SAAS,IAAI,CAACA,OAAO;YACrBH,SAAS,IAAI,CAACA,OAAO;YACrBP,KAAK,IAAI,CAACA,GAAG;YACb,kCAAkC;YAClCc,UAAU,IAAI,CAACA,QAAQ;YACvBC,OAAO,IAAI,CAACA,KAAK;YACjBC,aAAa,IAAI,CAACA,WAAW;YAC7BC,aAAa,IAAI,CAACA,WAAW;YAC7BT,SAASU,OAAOC,WAAW,CAAC,IAAI,CAACX,OAAO;YACxCY,WAAW,IAAI,CAACA,SAAS;YACzBC,WAAW,IAAI,CAACA,SAAS;YACzBC,QAAQ,IAAI,CAACA,MAAM;YACnBC,MAAM,IAAI,CAACA,IAAI;YACfC,UAAU,IAAI,CAACA,QAAQ;YACvBC,UAAU,IAAI,CAACA,QAAQ;YACvBC,gBAAgB,IAAI,CAACA,cAAc;YACnCC,QAAQ,IAAI,CAACA,MAAM;QACrB;IACF;IAEA,IAAWjB,UAAU;QACnB,OAAO,IAAI,CAACjB,UAAU,CAACiB,OAAO;IAChC;IAEA,IAAWH,UAAU;QACnB,OAAO,IAAI,CAACd,UAAU,CAACc,OAAO;IAChC;IAEA;;;;GAIC,GACD,IAAWqB,OAAO;QAChB,MAAM,IAAIrC,mLAAAA;IACZ;IAEA;;;;GAIC,GACD,IAAWsC,KAAK;QACd,MAAM,IAAIvC,iLAAAA;IACZ;IAEA,IAAWU,MAAM;QACf,OAAO,IAAI,CAACP,UAAU,CAACO,GAAG;IAC5B;AACF","ignoreList":[0]}}, + {"offset": {"line": 10196, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/utils.ts"],"sourcesContent":["import type { OutgoingHttpHeaders } from 'http'\nimport {\n NEXT_INTERCEPTION_MARKER_PREFIX,\n NEXT_QUERY_PARAM_PREFIX,\n} from '../../lib/constants'\n\n/**\n * Converts a Node.js IncomingHttpHeaders object to a Headers object. Any\n * headers with multiple values will be joined with a comma and space. Any\n * headers that have an undefined value will be ignored and others will be\n * coerced to strings.\n *\n * @param nodeHeaders the headers object to convert\n * @returns the converted headers object\n */\nexport function fromNodeOutgoingHttpHeaders(\n nodeHeaders: OutgoingHttpHeaders\n): Headers {\n const headers = new Headers()\n for (let [key, value] of Object.entries(nodeHeaders)) {\n const values = Array.isArray(value) ? value : [value]\n for (let v of values) {\n if (typeof v === 'undefined') continue\n if (typeof v === 'number') {\n v = v.toString()\n }\n\n headers.append(key, v)\n }\n }\n return headers\n}\n\n/*\n Set-Cookie header field-values are sometimes comma joined in one string. This splits them without choking on commas\n that are within a single set-cookie field-value, such as in the Expires portion.\n This is uncommon, but explicitly allowed - see https://tools.ietf.org/html/rfc2616#section-4.2\n Node.js does this for every header *except* set-cookie - see https://github.com/nodejs/node/blob/d5e363b77ebaf1caf67cd7528224b651c86815c1/lib/_http_incoming.js#L128\n React Native's fetch does this for *every* header, including set-cookie.\n \n Based on: https://github.com/google/j2objc/commit/16820fdbc8f76ca0c33472810ce0cb03d20efe25\n Credits to: https://github.com/tomball for original and https://github.com/chrusart for JavaScript implementation\n*/\nexport function splitCookiesString(cookiesString: string) {\n var cookiesStrings = []\n var pos = 0\n var start\n var ch\n var lastComma\n var nextStart\n var cookiesSeparatorFound\n\n function skipWhitespace() {\n while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n pos += 1\n }\n return pos < cookiesString.length\n }\n\n function notSpecialChar() {\n ch = cookiesString.charAt(pos)\n\n return ch !== '=' && ch !== ';' && ch !== ','\n }\n\n while (pos < cookiesString.length) {\n start = pos\n cookiesSeparatorFound = false\n\n while (skipWhitespace()) {\n ch = cookiesString.charAt(pos)\n if (ch === ',') {\n // ',' is a cookie separator if we have later first '=', not ';' or ','\n lastComma = pos\n pos += 1\n\n skipWhitespace()\n nextStart = pos\n\n while (pos < cookiesString.length && notSpecialChar()) {\n pos += 1\n }\n\n // currently special character\n if (pos < cookiesString.length && cookiesString.charAt(pos) === '=') {\n // we found cookies separator\n cookiesSeparatorFound = true\n // pos is inside the next cookie, so back up and return it.\n pos = nextStart\n cookiesStrings.push(cookiesString.substring(start, lastComma))\n start = pos\n } else {\n // in param ',' or param separator ';',\n // we continue from that comma\n pos = lastComma + 1\n }\n } else {\n pos += 1\n }\n }\n\n if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n cookiesStrings.push(cookiesString.substring(start, cookiesString.length))\n }\n }\n\n return cookiesStrings\n}\n\n/**\n * Converts a Headers object to a Node.js OutgoingHttpHeaders object. This is\n * required to support the set-cookie header, which may have multiple values.\n *\n * @param headers the headers object to convert\n * @returns the converted headers object\n */\nexport function toNodeOutgoingHttpHeaders(\n headers: Headers\n): OutgoingHttpHeaders {\n const nodeHeaders: OutgoingHttpHeaders = {}\n const cookies: string[] = []\n if (headers) {\n for (const [key, value] of headers.entries()) {\n if (key.toLowerCase() === 'set-cookie') {\n // We may have gotten a comma joined string of cookies, or multiple\n // set-cookie headers. We need to merge them into one header array\n // to represent all the cookies.\n cookies.push(...splitCookiesString(value))\n nodeHeaders[key] = cookies.length === 1 ? cookies[0] : cookies\n } else {\n nodeHeaders[key] = value\n }\n }\n }\n return nodeHeaders\n}\n\n/**\n * Validate the correctness of a user-provided URL.\n */\nexport function validateURL(url: string | URL): string {\n try {\n return String(new URL(String(url)))\n } catch (error: any) {\n throw new Error(\n `URL is malformed \"${String(\n url\n )}\". Please use only absolute URLs - https://nextjs.org/docs/messages/middleware-relative-urls`,\n { cause: error }\n )\n }\n}\n\n/**\n * Normalizes `nxtP` and `nxtI` query param values to remove the prefix.\n * This function does not mutate the input key.\n */\nexport function normalizeNextQueryParam(key: string): null | string {\n const prefixes = [NEXT_QUERY_PARAM_PREFIX, NEXT_INTERCEPTION_MARKER_PREFIX]\n for (const prefix of prefixes) {\n if (key !== prefix && key.startsWith(prefix)) {\n return key.substring(prefix.length)\n }\n }\n return null\n}\n"],"names":["NEXT_INTERCEPTION_MARKER_PREFIX","NEXT_QUERY_PARAM_PREFIX","fromNodeOutgoingHttpHeaders","nodeHeaders","headers","Headers","key","value","Object","entries","values","Array","isArray","v","toString","append","splitCookiesString","cookiesString","cookiesStrings","pos","start","ch","lastComma","nextStart","cookiesSeparatorFound","skipWhitespace","length","test","charAt","notSpecialChar","push","substring","toNodeOutgoingHttpHeaders","cookies","toLowerCase","validateURL","url","String","URL","error","Error","cause","normalizeNextQueryParam","prefixes","prefix","startsWith"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 10324, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/errors/constants.ts"],"sourcesContent":["export const MISSING_ROOT_TAGS_ERROR = 'NEXT_MISSING_ROOT_TAGS'\n"],"names":["MISSING_ROOT_TAGS_ERROR"],"mappings":";;;;AAAO,MAAMA,0BAA0B,yBAAwB","ignoreList":[0]}}, + {"offset": {"line": 10333, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/get-hostname.ts"],"sourcesContent":["import type { OutgoingHttpHeaders } from 'http'\n\n/**\n * Takes an object with a hostname property (like a parsed URL) and some\n * headers that may contain Host and returns the preferred hostname.\n * @param parsed An object containing a hostname property.\n * @param headers A dictionary with headers containing a `host`.\n */\nexport function getHostname(\n parsed: { hostname?: string | null },\n headers?: OutgoingHttpHeaders\n): string | undefined {\n // Get the hostname from the headers if it exists, otherwise use the parsed\n // hostname.\n let hostname: string\n if (headers?.host && !Array.isArray(headers.host)) {\n hostname = headers.host.toString().split(':', 1)[0]\n } else if (parsed.hostname) {\n hostname = parsed.hostname\n } else return\n\n return hostname.toLowerCase()\n}\n"],"names":["getHostname","parsed","headers","hostname","host","Array","isArray","toString","split","toLowerCase"],"mappings":"AAEA;;;;;CAKC,GACD;;;;AAAO,SAASA,YACdC,MAAoC,EACpCC,OAA6B;IAE7B,2EAA2E;IAC3E,YAAY;IACZ,IAAIC;IACJ,IAAID,SAASE,QAAQ,CAACC,MAAMC,OAAO,CAACJ,QAAQE,IAAI,GAAG;QACjDD,WAAWD,QAAQE,IAAI,CAACG,QAAQ,GAAGC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE;IACrD,OAAO,IAAIP,OAAOE,QAAQ,EAAE;QAC1BA,WAAWF,OAAOE,QAAQ;IAC5B,OAAO;IAEP,OAAOA,SAASM,WAAW;AAC7B","ignoreList":[0]}}, + {"offset": {"line": 10357, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/hash.ts"],"sourcesContent":["// http://www.cse.yorku.ca/~oz/hash.html\n// More specifically, 32-bit hash via djbxor\n// (ref: https://gist.github.com/eplawless/52813b1d8ad9af510d85?permalink_comment_id=3367765#gistcomment-3367765)\n// This is due to number type differences between rust for turbopack to js number types,\n// where rust does not have easy way to repreesnt js's 53-bit float number type for the matching\n// overflow behavior. This is more `correct` in terms of having canonical hash across different runtime / implementation\n// as can gaurantee determinstic output from 32bit hash.\nexport function djb2Hash(str: string) {\n let hash = 5381\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i)\n hash = ((hash << 5) + hash + char) & 0xffffffff\n }\n return hash >>> 0\n}\n\nexport function hexHash(str: string) {\n return djb2Hash(str).toString(36).slice(0, 5)\n}\n"],"names":["djb2Hash","str","hash","i","length","char","charCodeAt","hexHash","toString","slice"],"mappings":"AAAA,wCAAwC;AACxC,4CAA4C;AAC5C,iHAAiH;AACjH,wFAAwF;AACxF,gGAAgG;AAChG,wHAAwH;AACxH,wDAAwD;;;;;;;AACjD,SAASA,SAASC,GAAW;IAClC,IAAIC,OAAO;IACX,IAAK,IAAIC,IAAI,GAAGA,IAAIF,IAAIG,MAAM,EAAED,IAAK;QACnC,MAAME,OAAOJ,IAAIK,UAAU,CAACH;QAC5BD,OAASA,CAAAA,QAAQ,CAAA,IAAKA,OAAOG,OAAQ;IACvC;IACA,OAAOH,SAAS;AAClB;AAEO,SAASK,QAAQN,GAAW;IACjC,OAAOD,SAASC,KAAKO,QAAQ,CAAC,IAAIC,KAAK,CAAC,GAAG;AAC7C","ignoreList":[0]}}, + {"offset": {"line": 10385, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/i18n/detect-domain-locale.ts"],"sourcesContent":["import type { DomainLocale } from '../../../server/config-shared'\n\nexport function detectDomainLocale(\n domainItems?: readonly DomainLocale[],\n hostname?: string,\n detectedLocale?: string\n) {\n if (!domainItems) return\n\n if (detectedLocale) {\n detectedLocale = detectedLocale.toLowerCase()\n }\n\n for (const item of domainItems) {\n // remove port if present\n const domainHostname = item.domain?.split(':', 1)[0].toLowerCase()\n if (\n hostname === domainHostname ||\n detectedLocale === item.defaultLocale.toLowerCase() ||\n item.locales?.some((locale) => locale.toLowerCase() === detectedLocale)\n ) {\n return item\n }\n }\n}\n"],"names":["detectDomainLocale","domainItems","hostname","detectedLocale","toLowerCase","item","domainHostname","domain","split","defaultLocale","locales","some","locale"],"mappings":";;;;AAEO,SAASA,mBACdC,WAAqC,EACrCC,QAAiB,EACjBC,cAAuB;IAEvB,IAAI,CAACF,aAAa;IAElB,IAAIE,gBAAgB;QAClBA,iBAAiBA,eAAeC,WAAW;IAC7C;IAEA,KAAK,MAAMC,QAAQJ,YAAa;QAC9B,yBAAyB;QACzB,MAAMK,iBAAiBD,KAAKE,MAAM,EAAEC,MAAM,KAAK,EAAE,CAAC,EAAE,CAACJ;QACrD,IACEF,aAAaI,kBACbH,mBAAmBE,KAAKI,aAAa,CAACL,WAAW,MACjDC,KAAKK,OAAO,EAAEC,KAAK,CAACC,SAAWA,OAAOR,WAAW,OAAOD,iBACxD;YACA,OAAOE;QACT;IACF;AACF","ignoreList":[0]}}, + {"offset": {"line": 10406, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/i18n/normalize-locale-path.ts"],"sourcesContent":["export interface PathLocale {\n detectedLocale?: string\n pathname: string\n}\n\n/**\n * A cache of lowercased locales for each list of locales. This is stored as a\n * WeakMap so if the locales are garbage collected, the cache entry will be\n * removed as well.\n */\nconst cache = new WeakMap()\n\n/**\n * For a pathname that may include a locale from a list of locales, it\n * removes the locale from the pathname returning it alongside with the\n * detected locale.\n *\n * @param pathname A pathname that may include a locale.\n * @param locales A list of locales.\n * @returns The detected locale and pathname without locale\n */\nexport function normalizeLocalePath(\n pathname: string,\n locales?: readonly string[]\n): PathLocale {\n // If locales is undefined, return the pathname as is.\n if (!locales) return { pathname }\n\n // Get the cached lowercased locales or create a new cache entry.\n let lowercasedLocales = cache.get(locales)\n if (!lowercasedLocales) {\n lowercasedLocales = locales.map((locale) => locale.toLowerCase())\n cache.set(locales, lowercasedLocales)\n }\n\n let detectedLocale: string | undefined\n\n // The first segment will be empty, because it has a leading `/`. If\n // there is no further segment, there is no locale (or it's the default).\n const segments = pathname.split('/', 2)\n\n // If there's no second segment (ie, the pathname is just `/`), there's no\n // locale.\n if (!segments[1]) return { pathname }\n\n // The second segment will contain the locale part if any.\n const segment = segments[1].toLowerCase()\n\n // See if the segment matches one of the locales. If it doesn't, there is\n // no locale (or it's the default).\n const index = lowercasedLocales.indexOf(segment)\n if (index < 0) return { pathname }\n\n // Return the case-sensitive locale.\n detectedLocale = locales[index]\n\n // Remove the `/${locale}` part of the pathname.\n pathname = pathname.slice(detectedLocale.length + 1) || '/'\n\n return { pathname, detectedLocale }\n}\n"],"names":["cache","WeakMap","normalizeLocalePath","pathname","locales","lowercasedLocales","get","map","locale","toLowerCase","set","detectedLocale","segments","split","segment","index","indexOf","slice","length"],"mappings":";;;;AAKA;;;;CAIC,GACD,MAAMA,QAAQ,IAAIC;AAWX,SAASC,oBACdC,QAAgB,EAChBC,OAA2B;IAE3B,sDAAsD;IACtD,IAAI,CAACA,SAAS,OAAO;QAAED;IAAS;IAEhC,iEAAiE;IACjE,IAAIE,oBAAoBL,MAAMM,GAAG,CAACF;IAClC,IAAI,CAACC,mBAAmB;QACtBA,oBAAoBD,QAAQG,GAAG,CAAC,CAACC,SAAWA,OAAOC,WAAW;QAC9DT,MAAMU,GAAG,CAACN,SAASC;IACrB;IAEA,IAAIM;IAEJ,oEAAoE;IACpE,yEAAyE;IACzE,MAAMC,WAAWT,SAASU,KAAK,CAAC,KAAK;IAErC,0EAA0E;IAC1E,UAAU;IACV,IAAI,CAACD,QAAQ,CAAC,EAAE,EAAE,OAAO;QAAET;IAAS;IAEpC,0DAA0D;IAC1D,MAAMW,UAAUF,QAAQ,CAAC,EAAE,CAACH,WAAW;IAEvC,yEAAyE;IACzE,mCAAmC;IACnC,MAAMM,QAAQV,kBAAkBW,OAAO,CAACF;IACxC,IAAIC,QAAQ,GAAG,OAAO;QAAEZ;IAAS;IAEjC,oCAAoC;IACpCQ,iBAAiBP,OAAO,CAACW,MAAM;IAE/B,gDAAgD;IAChDZ,WAAWA,SAASc,KAAK,CAACN,eAAeO,MAAM,GAAG,MAAM;IAExD,OAAO;QAAEf;QAAUQ;IAAe;AACpC","ignoreList":[0]}}, + {"offset": {"line": 10456, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/instant-messages.ts"],"sourcesContent":["export function createUnrenderedSegmentError(\n route: string,\n missingFiles: readonly string[]\n): Error {\n let message = `Route \"${route}\": Could not validate that a segment in your UI has instant navigation.`\n if (missingFiles.length > 0) {\n const label =\n missingFiles.length === 1 ? 'Dropped segment' : 'Dropped segments'\n message +=\n `\\n\\nThis segment was dropped from rendering. Issues that would prevent instant navigation will go undetected.` +\n `\\n\\n${label}:\\n${missingFiles.map((p) => ` ${p}`).join('\\n')}` +\n `\\n\\nWays to fix this:` +\n `\\n - [render] Render the dropped segment` +\n `\\n - [ignore] Set \\`export const instant = false\\` to opt the dropped segment out of instant-navigation validation` +\n `\\n\\nLearn more: https://nextjs.org/docs/messages/instant-unrendered-segment`\n }\n return new Error(message)\n}\n\nexport function createLinkPrefetchPartialError(pathname: string): Error {\n return new Error(\n `Next.js encountered dynamic data during prefetching for \"${pathname}\".\\n\\n` +\n `This will lead to slower, more expensive prefetches.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [upgrade] Opt into Partial Prefetching by exporting \\`const prefetch = 'partial'\\` from the page or layout, or by setting \\`partialPrefetching: true\\` in next.config to opt the whole app in\\n` +\n ` - [disable] Remove \\`prefetch={true}\\` from the to use the default prefetch\\n` +\n ` - [ignore] Set \\`export const instant = false\\` to opt the route out of instant-navigation validation\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-link-prefetch-partial`\n )\n}\n"],"names":["createUnrenderedSegmentError","route","missingFiles","message","length","label","map","p","join","Error","createLinkPrefetchPartialError","pathname"],"mappings":";;;;;;AAAO,SAASA,6BACdC,KAAa,EACbC,YAA+B;IAE/B,IAAIC,UAAU,CAAC,OAAO,EAAEF,MAAM,uEAAuE,CAAC;IACtG,IAAIC,aAAaE,MAAM,GAAG,GAAG;QAC3B,MAAMC,QACJH,aAAaE,MAAM,KAAK,IAAI,oBAAoB;QAClDD,WACE,CAAC,6GAA6G,CAAC,GAC/G,CAAC,IAAI,EAAEE,MAAM,GAAG,EAAEH,aAAaI,GAAG,CAAC,CAACC,IAAM,CAAC,EAAE,EAAEA,GAAG,EAAEC,IAAI,CAAC,OAAO,GAChE,CAAC,qBAAqB,CAAC,GACvB,CAAC,yCAAyC,CAAC,GAC3C,CAAC,mHAAmH,CAAC,GACrH,CAAC,2EAA2E,CAAC;IACjF;IACA,OAAO,IAAIC,MAAMN;AACnB;AAEO,SAASO,+BAA+BC,QAAgB;IAC7D,OAAO,IAAIF,MACT,CAAC,yDAAyD,EAAEE,SAAS,MAAM,CAAC,GAC1E,CAAC,wDAAwD,CAAC,GAC1D,CAAC,mBAAmB,CAAC,GACrB,CAAC,mMAAmM,CAAC,GACrM,CAAC,sFAAsF,CAAC,GACxF,CAAC,2GAA2G,CAAC,GAC7G,CAAC,0EAA0E,CAAC;AAElF","ignoreList":[0]}}, + {"offset": {"line": 10477, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/invariant-error.ts"],"sourcesContent":["export class InvariantError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(\n `Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`,\n options\n )\n this.name = 'InvariantError'\n }\n}\n"],"names":["InvariantError","Error","constructor","message","options","endsWith","name"],"mappings":";;;;AAAO,MAAMA,uBAAuBC;IAClCC,YAAYC,OAAe,EAAEC,OAAsB,CAAE;QACnD,KAAK,CACH,CAAC,WAAW,EAAED,QAAQE,QAAQ,CAAC,OAAOF,UAAUA,UAAU,IAAI,0BAA0B,CAAC,EACzFC;QAEF,IAAI,CAACE,IAAI,GAAG;IACd;AACF","ignoreList":[0]}}, + {"offset": {"line": 10491, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/is-thenable.ts"],"sourcesContent":["/**\n * Check to see if a value is Thenable.\n *\n * @param promise the maybe-thenable value\n * @returns true if the value is thenable\n */\nexport function isThenable(\n promise: Promise | T\n): promise is Promise {\n return (\n promise !== null &&\n typeof promise === 'object' &&\n 'then' in promise &&\n typeof promise.then === 'function'\n )\n}\n"],"names":["isThenable","promise","then"],"mappings":"AAAA;;;;;CAKC,GACD;;;;AAAO,SAASA,WACdC,OAAuB;IAEvB,OACEA,YAAY,QACZ,OAAOA,YAAY,YACnB,UAAUA,WACV,OAAOA,QAAQC,IAAI,KAAK;AAE5B","ignoreList":[0]}}, + {"offset": {"line": 10507, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/lazy-dynamic/react-browser-bailout.ts"],"sourcesContent":["// This module is bundled separately into user code and the precompiled App\n// Router runtime. Use the global symbol registry so both copies recognize the\n// same browser bailout reason.\nconst REACT_BROWSER_BAILOUT_REASON = Symbol.for('next.browser-bailout-reason')\n\ntype ReactBrowserBailoutReason = {\n $$typeof: symbol\n reason: string\n}\n\nexport function createReactBrowserBailoutReason(\n reason: string\n): ReactBrowserBailoutReason {\n return {\n $$typeof: REACT_BROWSER_BAILOUT_REASON,\n reason,\n }\n}\n\nexport function getReactBrowserBailoutReason(\n error: unknown\n): string | undefined {\n const cause = (error as Error)?.cause as ReactBrowserBailoutReason | undefined\n\n return cause?.$$typeof === REACT_BROWSER_BAILOUT_REASON\n ? cause.reason\n : undefined\n}\n\nexport function isNextBrowserBailoutError(error: unknown): boolean {\n return getReactBrowserBailoutReason(error) !== undefined\n}\n"],"names":["REACT_BROWSER_BAILOUT_REASON","Symbol","for","createReactBrowserBailoutReason","reason","$$typeof","getReactBrowserBailoutReason","error","cause","undefined","isNextBrowserBailoutError"],"mappings":";;;;;;;;AAAA,2EAA2E;AAC3E,8EAA8E;AAC9E,+BAA+B;AAC/B,MAAMA,+BAA+BC,OAAOC,GAAG,CAAC;AAOzC,SAASC,gCACdC,MAAc;IAEd,OAAO;QACLC,UAAUL;QACVI;IACF;AACF;AAEO,SAASE,6BACdC,KAAc;IAEd,MAAMC,QAASD,OAAiBC;IAEhC,OAAOA,OAAOH,aAAaL,+BACvBQ,MAAMJ,MAAM,GACZK;AACN;AAEO,SAASC,0BAA0BH,KAAc;IACtD,OAAOD,6BAA6BC,WAAWE;AACjD","ignoreList":[0]}}, + {"offset": {"line": 10536, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/page-path/ensure-leading-slash.ts"],"sourcesContent":["/**\n * For a given page path, this function ensures that there is a leading slash.\n * If there is not a leading slash, one is added, otherwise it is noop.\n */\nexport function ensureLeadingSlash(path: string) {\n return path.startsWith('/') ? path : `/${path}`\n}\n"],"names":["ensureLeadingSlash","path","startsWith"],"mappings":"AAAA;;;CAGC,GACD;;;;AAAO,SAASA,mBAAmBC,IAAY;IAC7C,OAAOA,KAAKC,UAAU,CAAC,OAAOD,OAAO,CAAC,CAAC,EAAEA,MAAM;AACjD","ignoreList":[0]}}, + {"offset": {"line": 10550, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/page-path/normalize-page-path.ts"],"sourcesContent":["import { ensureLeadingSlash } from './ensure-leading-slash'\nimport { isDynamicRoute } from '../router/utils'\nimport { NormalizeError } from '../utils'\n\n/**\n * Takes a page and transforms it into its file counterpart ensuring that the\n * output is normalized. Note this function is not idempotent because a page\n * `/index` can be referencing `/index/index.js` and `/index/index` could be\n * referencing `/index/index/index.js`. Examples:\n * - `/` -> `/index`\n * - `/index/foo` -> `/index/index/foo`\n * - `/index` -> `/index/index`\n */\nexport function normalizePagePath(page: string): string {\n const normalized =\n /^\\/index(\\/|$)/.test(page) && !isDynamicRoute(page)\n ? `/index${page}`\n : page === '/'\n ? '/index'\n : ensureLeadingSlash(page)\n\n if (process.env.NEXT_RUNTIME !== 'edge') {\n const { posix } = require('path') as typeof import('path')\n const resolvedPage = posix.normalize(normalized)\n if (resolvedPage !== normalized) {\n throw new NormalizeError(\n `Requested and resolved page mismatch: ${normalized} ${resolvedPage}`\n )\n }\n }\n\n return normalized\n}\n"],"names":["ensureLeadingSlash","isDynamicRoute","NormalizeError","normalizePagePath","page","normalized","test","process","env","NEXT_RUNTIME","posix","require","resolvedPage","normalize"],"mappings":";;;;AAAA,SAASA,kBAAkB,QAAQ,yBAAwB;;AAC3D,SAASC,cAAc,QAAQ,kBAAiB;AAChD,SAASC,cAAc,QAAQ,WAAU;;;;AAWlC,SAASC,kBAAkBC,IAAY;IAC5C,MAAMC,aACJ,iBAAiBC,IAAI,CAACF,SAAS,KAACH,4MAAAA,EAAeG,QAC3C,CAAC,MAAM,EAAEA,MAAM,GACfA,SAAS,MACP,eACAJ,0NAAAA,EAAmBI;IAE3B,IAAIG,QAAQC,GAAG,CAACC,YAAY,KAAK,OAAQ;QACvC,MAAM,EAAEC,KAAK,EAAE,GAAGC,QAAQ;QAC1B,MAAMC,eAAeF,MAAMG,SAAS,CAACR;QACrC,IAAIO,iBAAiBP,YAAY;YAC/B,MAAM,IAAIH,iLAAAA,CACR,CAAC,sCAAsC,EAAEG,WAAW,CAAC,EAAEO,cAAc;QAEzE;IACF;IAEA,OAAOP;AACT","ignoreList":[0]}}, + {"offset": {"line": 10576, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/promise-with-resolvers.ts"],"sourcesContent":["export function createPromiseWithResolvers(): PromiseWithResolvers {\n // Shim of Stage 4 Promise.withResolvers proposal\n let resolve: (value: T | PromiseLike) => void\n let reject: (reason: any) => void\n const promise = new Promise((res, rej) => {\n resolve = res\n reject = rej\n })\n return { resolve: resolve!, reject: reject!, promise }\n}\n"],"names":["createPromiseWithResolvers","resolve","reject","promise","Promise","res","rej"],"mappings":";;;;AAAO,SAASA;IACd,iDAAiD;IACjD,IAAIC;IACJ,IAAIC;IACJ,MAAMC,UAAU,IAAIC,QAAW,CAACC,KAAKC;QACnCL,UAAUI;QACVH,SAASI;IACX;IACA,OAAO;QAAEL,SAASA;QAAUC,QAAQA;QAASC;IAAQ;AACvD","ignoreList":[0]}}, + {"offset": {"line": 10598, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/request-insights.ts"],"sourcesContent":["export type RequestInsightKind = 'request' | 'instant-insights'\n\nexport type RequestInsightIdentity = {\n requestId: string\n kind?: RequestInsightKind\n}\n\nexport function getRequestInsightKind(\n insight: Pick\n): RequestInsightKind {\n return insight.kind ?? 'request'\n}\n\nexport function getRequestInsightKey(insight: RequestInsightIdentity): string {\n return `${getRequestInsightKind(insight)}:${insight.requestId}`\n}\n"],"names":["getRequestInsightKind","insight","kind","getRequestInsightKey","requestId"],"mappings":";;;;;;AAOO,SAASA,sBACdC,OAA6C;IAE7C,OAAOA,QAAQC,IAAI,IAAI;AACzB;AAEO,SAASC,qBAAqBF,OAA+B;IAClE,OAAO,GAAGD,sBAAsBC,SAAS,CAAC,EAAEA,QAAQG,SAAS,EAAE;AACjE","ignoreList":[0]}}, + {"offset": {"line": 10614, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/add-locale.ts"],"sourcesContent":["import { addPathPrefix } from './add-path-prefix'\nimport { pathHasPrefix } from './path-has-prefix'\n\n/**\n * For a given path and a locale, if the locale is given, it will prefix the\n * locale. The path shouldn't be an API path. If a default locale is given the\n * prefix will be omitted if the locale is already the default locale.\n */\nexport function addLocale(\n path: string,\n locale?: string | false,\n defaultLocale?: string,\n ignorePrefix?: boolean\n) {\n // If no locale was given or the locale is the default locale, we don't need\n // to prefix the path.\n if (!locale || locale === defaultLocale) return path\n\n const lower = path.toLowerCase()\n\n // If the path is an API path or the path already has the locale prefix, we\n // don't need to prefix the path.\n if (!ignorePrefix) {\n if (pathHasPrefix(lower, '/api')) return path\n if (pathHasPrefix(lower, `/${locale.toLowerCase()}`)) return path\n }\n\n // Add the locale prefix to the path.\n return addPathPrefix(path, `/${locale}`)\n}\n"],"names":["addPathPrefix","pathHasPrefix","addLocale","path","locale","defaultLocale","ignorePrefix","lower","toLowerCase"],"mappings":";;;;AAAA,SAASA,aAAa,QAAQ,oBAAmB;AACjD,SAASC,aAAa,QAAQ,oBAAmB;;;AAO1C,SAASC,UACdC,IAAY,EACZC,MAAuB,EACvBC,aAAsB,EACtBC,YAAsB;IAEtB,4EAA4E;IAC5E,sBAAsB;IACtB,IAAI,CAACF,UAAUA,WAAWC,eAAe,OAAOF;IAEhD,MAAMI,QAAQJ,KAAKK,WAAW;IAE9B,2EAA2E;IAC3E,iCAAiC;IACjC,IAAI,CAACF,cAAc;QACjB,QAAIL,mNAAAA,EAAcM,OAAO,SAAS,OAAOJ;QACzC,QAAIF,mNAAAA,EAAcM,OAAO,CAAC,CAAC,EAAEH,OAAOI,WAAW,IAAI,GAAG,OAAOL;IAC/D;IAEA,qCAAqC;IACrC,WAAOH,mNAAAA,EAAcG,MAAM,CAAC,CAAC,EAAEC,QAAQ;AACzC","ignoreList":[0]}}, + {"offset": {"line": 10640, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/add-path-prefix.ts"],"sourcesContent":["import { parsePath } from './parse-path'\n\n/**\n * Adds the provided prefix to the given path. It first ensures that the path\n * is indeed starting with a slash.\n */\nexport function addPathPrefix(path: string, prefix?: string) {\n if (!path.startsWith('/') || !prefix) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n return `${prefix}${pathname}${query}${hash}`\n}\n"],"names":["parsePath","addPathPrefix","path","prefix","startsWith","pathname","query","hash"],"mappings":";;;;AAAA,SAASA,SAAS,QAAQ,eAAc;;AAMjC,SAASC,cAAcC,IAAY,EAAEC,MAAe;IACzD,IAAI,CAACD,KAAKE,UAAU,CAAC,QAAQ,CAACD,QAAQ;QACpC,OAAOD;IACT;IAEA,MAAM,EAAEG,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAE,OAAGP,uMAAAA,EAAUE;IAC5C,OAAO,GAAGC,SAASE,WAAWC,QAAQC,MAAM;AAC9C","ignoreList":[0]}}, + {"offset": {"line": 10657, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/add-path-suffix.ts"],"sourcesContent":["import { parsePath } from './parse-path'\n\n/**\n * Similarly to `addPathPrefix`, this function adds a suffix at the end on the\n * provided path. It also works only for paths ensuring the argument starts\n * with a slash.\n */\nexport function addPathSuffix(path: string, suffix?: string) {\n if (!path.startsWith('/') || !suffix) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n return `${pathname}${suffix}${query}${hash}`\n}\n"],"names":["parsePath","addPathSuffix","path","suffix","startsWith","pathname","query","hash"],"mappings":";;;;AAAA,SAASA,SAAS,QAAQ,eAAc;;AAOjC,SAASC,cAAcC,IAAY,EAAEC,MAAe;IACzD,IAAI,CAACD,KAAKE,UAAU,CAAC,QAAQ,CAACD,QAAQ;QACpC,OAAOD;IACT;IAEA,MAAM,EAAEG,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAE,OAAGP,uMAAAA,EAAUE;IAC5C,OAAO,GAAGG,WAAWF,SAASG,QAAQC,MAAM;AAC9C","ignoreList":[0]}}, + {"offset": {"line": 10674, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/app-paths.ts"],"sourcesContent":["import { ensureLeadingSlash } from '../../page-path/ensure-leading-slash'\nimport { isGroupSegment } from '../../segment'\n\n/**\n * Normalizes an app route so it represents the actual request path. Essentially\n * performing the following transformations:\n *\n * - `/(dashboard)/user/[id]/page` to `/user/[id]`\n * - `/(dashboard)/account/page` to `/account`\n * - `/user/[id]/page` to `/user/[id]`\n * - `/account/page` to `/account`\n * - `/page` to `/`\n * - `/(dashboard)/user/[id]/route` to `/user/[id]`\n * - `/(dashboard)/account/route` to `/account`\n * - `/user/[id]/route` to `/user/[id]`\n * - `/account/route` to `/account`\n * - `/route` to `/`\n * - `/` to `/`\n *\n * @param route the app route to normalize\n * @returns the normalized pathname\n */\nexport function normalizeAppPath(route: string) {\n return ensureLeadingSlash(\n route.split('/').reduce((pathname, segment, index, segments) => {\n // Empty segments are ignored.\n if (!segment) {\n return pathname\n }\n\n // Groups are ignored.\n if (isGroupSegment(segment)) {\n return pathname\n }\n\n // Parallel segments are ignored.\n if (segment[0] === '@') {\n return pathname\n }\n\n // The last segment (if it's a leaf) should be ignored.\n if (\n (segment === 'page' || segment === 'route') &&\n index === segments.length - 1\n ) {\n return pathname\n }\n\n return `${pathname}/${segment}`\n }, '')\n )\n}\n\n/**\n * Comparator for sorting app paths so that parallel slot paths (containing\n * `/@`) come before the children/root page path. This keeps the direct\n * children/root page last so it can be selected as the canonical entry.\n *\n * Without this, route group prefixes like `(group)` (char code 0x28) sort\n * before `@` (0x40), causing the children page to sort first instead of last\n * and leading to a manifest mismatch / 404 in webpack dev mode.\n */\nexport function compareAppPaths(a: string, b: string): number {\n const aHasSlot = a.includes('/@')\n const bHasSlot = b.includes('/@')\n if (aHasSlot && !bHasSlot) return -1\n if (!aHasSlot && bHasSlot) return 1\n return a.localeCompare(b)\n}\n\nfunction normalizeAppPageEntryPathname(appPath: string): string {\n // Webpack app entries preserve escaped underscore segments as `%5F`, while\n // normalized request pathnames expose the decoded `_` segment.\n return normalizeAppPath(appPath).replace(/%5F/g, '_')\n}\n\n/**\n * Selects the app path that owns the compiled entry for a normalized route.\n * Catch-all normalization can add app paths from other routes, so only direct\n * paths are candidates. Among those, compareAppPaths deterministically prefers\n * the children/root page, or a stable slot when the route only has slots.\n */\nexport function selectAppPageEntry(\n pathname: string,\n appPaths: readonly string[],\n normalizePathname: (appPath: string) => string = normalizeAppPageEntryPathname\n): string {\n let entry: string | undefined\n\n for (const appPath of appPaths) {\n if (normalizePathname(appPath) !== pathname) continue\n\n if (entry === undefined || compareAppPaths(entry, appPath) < 0) {\n entry = appPath\n }\n }\n\n if (entry === undefined) {\n throw new Error(`Invariant: no direct app page entry found for ${pathname}`)\n }\n\n return entry\n}\n\n/**\n * Strips the `.rsc` extension if it's in the pathname.\n * Since this function is used on full urls it checks `?` for searchParams handling.\n */\nexport function normalizeRscURL(url: string) {\n return url.replace(\n /\\.rsc($|\\?)/,\n // $1 ensures `?` is preserved\n '$1'\n )\n}\n"],"names":["ensureLeadingSlash","isGroupSegment","normalizeAppPath","route","split","reduce","pathname","segment","index","segments","length","compareAppPaths","a","b","aHasSlot","includes","bHasSlot","localeCompare","normalizeAppPageEntryPathname","appPath","replace","selectAppPageEntry","appPaths","normalizePathname","entry","undefined","Error","normalizeRscURL","url"],"mappings":";;;;;;;;;;AAAA,SAASA,kBAAkB,QAAQ,uCAAsC;AACzE,SAASC,cAAc,QAAQ,gBAAe;;;AAqBvC,SAASC,iBAAiBC,KAAa;IAC5C,WAAOH,0NAAAA,EACLG,MAAMC,KAAK,CAAC,KAAKC,MAAM,CAAC,CAACC,UAAUC,SAASC,OAAOC;QACjD,8BAA8B;QAC9B,IAAI,CAACF,SAAS;YACZ,OAAOD;QACT;QAEA,sBAAsB;QACtB,QAAIL,mLAAAA,EAAeM,UAAU;YAC3B,OAAOD;QACT;QAEA,iCAAiC;QACjC,IAAIC,OAAO,CAAC,EAAE,KAAK,KAAK;YACtB,OAAOD;QACT;QAEA,uDAAuD;QACvD,IACGC,CAAAA,YAAY,UAAUA,YAAY,OAAM,KACzCC,UAAUC,SAASC,MAAM,GAAG,GAC5B;YACA,OAAOJ;QACT;QAEA,OAAO,GAAGA,SAAS,CAAC,EAAEC,SAAS;IACjC,GAAG;AAEP;AAWO,SAASI,gBAAgBC,CAAS,EAAEC,CAAS;IAClD,MAAMC,WAAWF,EAAEG,QAAQ,CAAC;IAC5B,MAAMC,WAAWH,EAAEE,QAAQ,CAAC;IAC5B,IAAID,YAAY,CAACE,UAAU,OAAO,CAAC;IACnC,IAAI,CAACF,YAAYE,UAAU,OAAO;IAClC,OAAOJ,EAAEK,aAAa,CAACJ;AACzB;AAEA,SAASK,8BAA8BC,OAAe;IACpD,2EAA2E;IAC3E,+DAA+D;IAC/D,OAAOjB,iBAAiBiB,SAASC,OAAO,CAAC,QAAQ;AACnD;AAQO,SAASC,mBACdf,QAAgB,EAChBgB,QAA2B,EAC3BC,oBAAiDL,6BAA6B;IAE9E,IAAIM;IAEJ,KAAK,MAAML,WAAWG,SAAU;QAC9B,IAAIC,kBAAkBJ,aAAab,UAAU;QAE7C,IAAIkB,UAAUC,aAAad,gBAAgBa,OAAOL,WAAW,GAAG;YAC9DK,QAAQL;QACV;IACF;IAEA,IAAIK,UAAUC,WAAW;QACvB,MAAM,IAAIC,MAAM,CAAC,8CAA8C,EAAEpB,UAAU;IAC7E;IAEA,OAAOkB;AACT;AAMO,SAASG,gBAAgBC,GAAW;IACzC,OAAOA,IAAIR,OAAO,CAChB,eACA,AACA,8BAD8B;AAGlC","ignoreList":[0]}}, + {"offset": {"line": 10741, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/cache-busting-search-param.ts"],"sourcesContent":["import { hexHash } from '../../hash'\n\nconst CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES = 12\nconst textEncoder = new TextEncoder()\n\nfunction encodeCacheBustingSearchParam(bytes: Uint8Array): string {\n let binary = ''\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i])\n }\n\n return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '')\n}\n\nfunction normalizeCacheBustingInput(\n value: string | string[] | undefined\n): string {\n if (value === undefined) {\n return '0'\n }\n return Array.isArray(value) ? value.join(',') : value\n}\n\nfunction createCacheBustingSearchParamInput(\n prefetchHeader: '1' | '2' | '3' | '0' | undefined,\n segmentPrefetchHeader: string | string[] | undefined,\n stateTreeHeader: string | string[] | undefined,\n nextUrlHeader: string | string[] | undefined\n): string | null {\n if (\n (prefetchHeader === undefined || prefetchHeader === '0') &&\n segmentPrefetchHeader === undefined &&\n stateTreeHeader === undefined &&\n nextUrlHeader === undefined\n ) {\n return null\n }\n\n return [\n prefetchHeader ?? '0',\n normalizeCacheBustingInput(segmentPrefetchHeader),\n normalizeCacheBustingInput(stateTreeHeader),\n normalizeCacheBustingInput(nextUrlHeader),\n ].join(',')\n}\n\nasync function computeCacheBustingSearchParamFromInput(\n input: string\n): Promise {\n // Truncate SHA-256 to 96 bits to keep `_rsc` compact\n const digest = await globalThis.crypto.subtle.digest(\n 'SHA-256',\n textEncoder.encode(input)\n )\n return encodeCacheBustingSearchParam(\n new Uint8Array(digest).subarray(0, CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES)\n )\n}\n\nexport async function computeCacheBustingSearchParam(\n prefetchHeader: '1' | '2' | '3' | '0' | undefined,\n segmentPrefetchHeader: string | string[] | undefined,\n stateTreeHeader: string | string[] | undefined,\n nextUrlHeader: string | string[] | undefined\n): Promise {\n const input = createCacheBustingSearchParamInput(\n prefetchHeader,\n segmentPrefetchHeader,\n stateTreeHeader,\n nextUrlHeader\n )\n if (input === null) {\n return ''\n }\n\n return computeCacheBustingSearchParamFromInput(input)\n}\n\nexport function computeLegacyCacheBustingSearchParam(\n prefetchHeader: '1' | '2' | '3' | '0' | undefined,\n segmentPrefetchHeader: string | string[] | undefined,\n stateTreeHeader: string | string[] | undefined,\n nextUrlHeader: string | string[] | undefined\n): string {\n const input = createCacheBustingSearchParamInput(\n prefetchHeader,\n segmentPrefetchHeader,\n stateTreeHeader,\n nextUrlHeader\n )\n if (input === null) {\n return ''\n }\n\n return hexHash(input)\n}\n"],"names":["hexHash","CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES","textEncoder","TextEncoder","encodeCacheBustingSearchParam","bytes","binary","i","length","String","fromCharCode","btoa","replace","normalizeCacheBustingInput","value","undefined","Array","isArray","join","createCacheBustingSearchParamInput","prefetchHeader","segmentPrefetchHeader","stateTreeHeader","nextUrlHeader","computeCacheBustingSearchParamFromInput","input","digest","globalThis","crypto","subtle","encode","Uint8Array","subarray","computeCacheBustingSearchParam","computeLegacyCacheBustingSearchParam"],"mappings":";;;;;;AAAA,SAASA,OAAO,QAAQ,aAAY;;AAEpC,MAAMC,0CAA0C;AAChD,MAAMC,cAAc,IAAIC;AAExB,SAASC,8BAA8BC,KAAiB;IACtD,IAAIC,SAAS;IACb,IAAK,IAAIC,IAAI,GAAGA,IAAIF,MAAMG,MAAM,EAAED,IAAK;QACrCD,UAAUG,OAAOC,YAAY,CAACL,KAAK,CAACE,EAAE;IACxC;IAEA,OAAOI,KAAKL,QAAQM,OAAO,CAAC,OAAO,KAAKA,OAAO,CAAC,OAAO,KAAKA,OAAO,CAAC,OAAO;AAC7E;AAEA,SAASC,2BACPC,KAAoC;IAEpC,IAAIA,UAAUC,WAAW;QACvB,OAAO;IACT;IACA,OAAOC,MAAMC,OAAO,CAACH,SAASA,MAAMI,IAAI,CAAC,OAAOJ;AAClD;AAEA,SAASK,mCACPC,cAAiD,EACjDC,qBAAoD,EACpDC,eAA8C,EAC9CC,aAA4C;IAE5C,IACGH,CAAAA,mBAAmBL,aAAaK,mBAAmB,GAAE,KACtDC,0BAA0BN,aAC1BO,oBAAoBP,aACpBQ,kBAAkBR,WAClB;QACA,OAAO;IACT;IAEA,OAAO;QACLK,kBAAkB;QAClBP,2BAA2BQ;QAC3BR,2BAA2BS;QAC3BT,2BAA2BU;KAC5B,CAACL,IAAI,CAAC;AACT;AAEA,eAAeM,wCACbC,KAAa;IAEb,qDAAqD;IACrD,MAAMC,SAAS,MAAMC,WAAWC,MAAM,CAACC,MAAM,CAACH,MAAM,CAClD,WACAxB,YAAY4B,MAAM,CAACL;IAErB,OAAOrB,8BACL,IAAI2B,WAAWL,QAAQM,QAAQ,CAAC,GAAG/B;AAEvC;AAEO,eAAegC,+BACpBb,cAAiD,EACjDC,qBAAoD,EACpDC,eAA8C,EAC9CC,aAA4C;IAE5C,MAAME,QAAQN,mCACZC,gBACAC,uBACAC,iBACAC;IAEF,IAAIE,UAAU,MAAM;QAClB,OAAO;IACT;IAEA,OAAOD,wCAAwCC;AACjD;AAEO,SAASS,qCACdd,cAAiD,EACjDC,qBAAoD,EACpDC,eAA8C,EAC9CC,aAA4C;IAE5C,MAAME,QAAQN,mCACZC,gBACAC,uBACAC,iBACAC;IAEF,IAAIE,UAAU,MAAM;QAClB,OAAO;IACT;IAEA,WAAOzB,yKAAAA,EAAQyB;AACjB","ignoreList":[0]}}, + {"offset": {"line": 10798, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/format-next-pathname-info.ts"],"sourcesContent":["import type { NextPathnameInfo } from './get-next-pathname-info'\nimport { removeTrailingSlash } from './remove-trailing-slash'\nimport { addPathPrefix } from './add-path-prefix'\nimport { addPathSuffix } from './add-path-suffix'\nimport { addLocale } from './add-locale'\n\ninterface ExtendedInfo extends NextPathnameInfo {\n defaultLocale?: string\n ignorePrefix?: boolean\n}\n\nexport function formatNextPathnameInfo(info: ExtendedInfo) {\n let pathname = addLocale(\n info.pathname,\n info.locale,\n info.buildId ? undefined : info.defaultLocale,\n info.ignorePrefix\n )\n\n if (info.buildId || !info.trailingSlash) {\n pathname = removeTrailingSlash(pathname)\n }\n\n if (info.buildId) {\n pathname = addPathSuffix(\n addPathPrefix(pathname, `/_next/data/${info.buildId}`),\n info.pathname === '/' ? 'index.json' : '.json'\n )\n }\n\n pathname = addPathPrefix(pathname, info.basePath)\n return !info.buildId && info.trailingSlash\n ? !pathname.endsWith('/')\n ? addPathSuffix(pathname, '/')\n : pathname\n : removeTrailingSlash(pathname)\n}\n"],"names":["removeTrailingSlash","addPathPrefix","addPathSuffix","addLocale","formatNextPathnameInfo","info","pathname","locale","buildId","undefined","defaultLocale","ignorePrefix","trailingSlash","basePath","endsWith"],"mappings":";;;;AACA,SAASA,mBAAmB,QAAQ,0BAAyB;AAC7D,SAASC,aAAa,QAAQ,oBAAmB;AACjD,SAASC,aAAa,QAAQ,oBAAmB;AACjD,SAASC,SAAS,QAAQ,eAAc;;;;;AAOjC,SAASC,uBAAuBC,IAAkB;IACvD,IAAIC,eAAWH,uMAAAA,EACbE,KAAKC,QAAQ,EACbD,KAAKE,MAAM,EACXF,KAAKG,OAAO,GAAGC,YAAYJ,KAAKK,aAAa,EAC7CL,KAAKM,YAAY;IAGnB,IAAIN,KAAKG,OAAO,IAAI,CAACH,KAAKO,aAAa,EAAE;QACvCN,eAAWN,+NAAAA,EAAoBM;IACjC;IAEA,IAAID,KAAKG,OAAO,EAAE;QAChBF,eAAWJ,mNAAAA,MACTD,mNAAAA,EAAcK,UAAU,CAAC,YAAY,EAAED,KAAKG,OAAO,EAAE,GACrDH,KAAKC,QAAQ,KAAK,MAAM,eAAe;IAE3C;IAEAA,eAAWL,mNAAAA,EAAcK,UAAUD,KAAKQ,QAAQ;IAChD,OAAO,CAACR,KAAKG,OAAO,IAAIH,KAAKO,aAAa,GACtC,CAACN,SAASQ,QAAQ,CAAC,WACjBZ,mNAAAA,EAAcI,UAAU,OACxBA,eACFN,+NAAAA,EAAoBM;AAC1B","ignoreList":[0]}}, + {"offset": {"line": 10825, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/get-next-pathname-info.ts"],"sourcesContent":["import { normalizeLocalePath } from '../../i18n/normalize-locale-path'\nimport { removePathPrefix } from './remove-path-prefix'\nimport { pathHasPrefix } from './path-has-prefix'\nimport type { I18NProvider } from '../../../../server/lib/i18n-provider'\n\nexport interface NextPathnameInfo {\n /**\n * The base path in case the pathname included it.\n */\n basePath?: string\n /**\n * The buildId for when the parsed URL is a data URL. Parsing it can be\n * disabled with the `parseData` option.\n */\n buildId?: string\n /**\n * If there was a locale in the pathname, this will hold its value.\n */\n locale?: string\n /**\n * The processed pathname without a base path, locale, or data URL elements\n * when parsing it is enabled.\n */\n pathname: string\n /**\n * A boolean telling if the pathname had a trailingSlash. This can be only\n * true if trailingSlash is enabled.\n */\n trailingSlash?: boolean\n}\n\ninterface Options {\n /**\n * When passed to true, this function will also parse Nextjs data URLs.\n */\n parseData?: boolean\n /**\n * A partial of the Next.js configuration to parse the URL.\n */\n nextConfig?: {\n basePath?: string\n i18n?: { locales?: readonly string[] } | null\n trailingSlash?: boolean\n }\n\n /**\n * If provided, this normalizer will be used to detect the locale instead of\n * the default locale detection.\n */\n i18nProvider?: I18NProvider\n}\n\nexport function getNextPathnameInfo(\n pathname: string,\n options: Options\n): NextPathnameInfo {\n const { basePath, i18n, trailingSlash } = options.nextConfig ?? {}\n const info: NextPathnameInfo = {\n pathname,\n trailingSlash: pathname !== '/' ? pathname.endsWith('/') : trailingSlash,\n }\n\n if (basePath && pathHasPrefix(info.pathname, basePath)) {\n info.pathname = removePathPrefix(info.pathname, basePath)\n info.basePath = basePath\n }\n let pathnameNoDataPrefix = info.pathname\n\n if (\n info.pathname.startsWith('/_next/data/') &&\n info.pathname.endsWith('.json')\n ) {\n const paths = info.pathname\n .replace(/^\\/_next\\/data\\//, '')\n .replace(/\\.json$/, '')\n .split('/')\n\n const buildId = paths[0]\n info.buildId = buildId\n pathnameNoDataPrefix =\n paths[1] !== 'index' ? `/${paths.slice(1).join('/')}` : '/'\n\n // update pathname with normalized if enabled although\n // we use normalized to populate locale info still\n if (options.parseData === true) {\n info.pathname = pathnameNoDataPrefix\n }\n }\n\n // If provided, use the locale route normalizer to detect the locale instead\n // of the function below.\n if (i18n) {\n let result = options.i18nProvider\n ? options.i18nProvider.analyze(info.pathname)\n : normalizeLocalePath(info.pathname, i18n.locales)\n\n info.locale = result.detectedLocale\n info.pathname = result.pathname ?? info.pathname\n\n if (!result.detectedLocale && info.buildId) {\n result = options.i18nProvider\n ? options.i18nProvider.analyze(pathnameNoDataPrefix)\n : normalizeLocalePath(pathnameNoDataPrefix, i18n.locales)\n\n if (result.detectedLocale) {\n info.locale = result.detectedLocale\n }\n }\n }\n return info\n}\n"],"names":["normalizeLocalePath","removePathPrefix","pathHasPrefix","getNextPathnameInfo","pathname","options","basePath","i18n","trailingSlash","nextConfig","info","endsWith","pathnameNoDataPrefix","startsWith","paths","replace","split","buildId","slice","join","parseData","result","i18nProvider","analyze","locales","locale","detectedLocale"],"mappings":";;;;AAAA,SAASA,mBAAmB,QAAQ,mCAAkC;AACtE,SAASC,gBAAgB,QAAQ,uBAAsB;AACvD,SAASC,aAAa,QAAQ,oBAAmB;;;;AAkD1C,SAASC,oBACdC,QAAgB,EAChBC,OAAgB;IAEhB,MAAM,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,aAAa,EAAE,GAAGH,QAAQI,UAAU,IAAI,CAAC;IACjE,MAAMC,OAAyB;QAC7BN;QACAI,eAAeJ,aAAa,MAAMA,SAASO,QAAQ,CAAC,OAAOH;IAC7D;IAEA,IAAIF,gBAAYJ,mNAAAA,EAAcQ,KAAKN,QAAQ,EAAEE,WAAW;QACtDI,KAAKN,QAAQ,OAAGH,yNAAAA,EAAiBS,KAAKN,QAAQ,EAAEE;QAChDI,KAAKJ,QAAQ,GAAGA;IAClB;IACA,IAAIM,uBAAuBF,KAAKN,QAAQ;IAExC,IACEM,KAAKN,QAAQ,CAACS,UAAU,CAAC,mBACzBH,KAAKN,QAAQ,CAACO,QAAQ,CAAC,UACvB;QACA,MAAMG,QAAQJ,KAAKN,QAAQ,CACxBW,OAAO,CAAC,oBAAoB,IAC5BA,OAAO,CAAC,WAAW,IACnBC,KAAK,CAAC;QAET,MAAMC,UAAUH,KAAK,CAAC,EAAE;QACxBJ,KAAKO,OAAO,GAAGA;QACfL,uBACEE,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC,EAAEA,MAAMI,KAAK,CAAC,GAAGC,IAAI,CAAC,MAAM,GAAG;QAE1D,sDAAsD;QACtD,kDAAkD;QAClD,IAAId,QAAQe,SAAS,KAAK,MAAM;YAC9BV,KAAKN,QAAQ,GAAGQ;QAClB;IACF;IAEA,4EAA4E;IAC5E,yBAAyB;IACzB,IAAIL,MAAM;QACR,IAAIc,SAAShB,QAAQiB,YAAY,GAC7BjB,QAAQiB,YAAY,CAACC,OAAO,CAACb,KAAKN,QAAQ,QAC1CJ,oNAAAA,EAAoBU,KAAKN,QAAQ,EAAEG,KAAKiB,OAAO;QAEnDd,KAAKe,MAAM,GAAGJ,OAAOK,cAAc;QACnChB,KAAKN,QAAQ,GAAGiB,OAAOjB,QAAQ,IAAIM,KAAKN,QAAQ;QAEhD,IAAI,CAACiB,OAAOK,cAAc,IAAIhB,KAAKO,OAAO,EAAE;YAC1CI,SAAShB,QAAQiB,YAAY,GACzBjB,QAAQiB,YAAY,CAACC,OAAO,CAACX,4BAC7BZ,oNAAAA,EAAoBY,sBAAsBL,KAAKiB,OAAO;YAE1D,IAAIH,OAAOK,cAAc,EAAE;gBACzBhB,KAAKe,MAAM,GAAGJ,OAAOK,cAAc;YACrC;QACF;IACF;IACA,OAAOhB;AACT","ignoreList":[0]}}, + {"offset": {"line": 10876, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/index.ts"],"sourcesContent":["export { getSortedRoutes, getSortedRouteObjects } from './sorted-routes'\nexport { isDynamicRoute } from './is-dynamic'\n"],"names":["getSortedRoutes","getSortedRouteObjects","isDynamicRoute"],"mappings":";AACA,SAASE,cAAc,QAAQ,eAAc","ignoreList":[0]}}, + {"offset": {"line": 10884, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/interception-routes.ts"],"sourcesContent":["import { normalizeAppPath } from './app-paths'\n\n// order matters here, the first match will be used\nexport const INTERCEPTION_ROUTE_MARKERS = [\n '(..)(..)',\n '(.)',\n '(..)',\n '(...)',\n] as const\n\nexport type InterceptionMarker = (typeof INTERCEPTION_ROUTE_MARKERS)[number]\n\nexport type MissingCanonicalInterceptionRoute = {\n interceptionRoute: string\n canonicalRoute: string\n}\n\ntype RoutePattern = {\n prefix: Array\n minLength: number\n unbounded: boolean\n}\n\nfunction parseRoutePattern(route: string): RoutePattern {\n const segments = route.split('/').filter(Boolean)\n const tail = segments.at(-1)\n const isOptionalCatchAll =\n tail !== undefined && tail.startsWith('[[...') && tail.endsWith(']]')\n const isCatchAll =\n tail !== undefined && tail.startsWith('[...') && tail.endsWith(']')\n const unbounded = isOptionalCatchAll || isCatchAll\n const prefixSegments = unbounded ? segments.slice(0, -1) : segments\n\n return {\n prefix: prefixSegments.map((segment) =>\n segment.startsWith('[') && segment.endsWith(']') ? null : segment\n ),\n minLength:\n prefixSegments.length + (isCatchAll && !isOptionalCatchAll ? 1 : 0),\n unbounded,\n }\n}\n\nfunction acceptsLength(pattern: RoutePattern, length: number): boolean {\n return pattern.unbounded\n ? length >= pattern.minLength\n : length === pattern.minLength\n}\n\nfunction prefixCovers(\n canonical: RoutePattern,\n intercepted: RoutePattern\n): boolean {\n return canonical.prefix.every((canonicalSegment, index) => {\n if (canonicalSegment === null) return true\n\n const interceptedSegment = intercepted.prefix[index]\n return (\n interceptedSegment !== undefined &&\n interceptedSegment !== null &&\n canonicalSegment === interceptedSegment\n )\n })\n}\n\nfunction patternCoversAtLength(\n canonical: RoutePattern,\n intercepted: RoutePattern,\n length: number\n): boolean {\n return (\n acceptsLength(canonical, length) &&\n acceptsLength(intercepted, length) &&\n prefixCovers(canonical, intercepted)\n )\n}\n\n/** Returns whether ordinary route patterns cover every URL in `route`. */\nfunction isRoutePatternCovered(route: string, ordinaryRoutes: RoutePattern[]) {\n const intercepted = parseRoutePattern(route)\n\n if (!intercepted.unbounded) {\n return ordinaryRoutes.some((pattern) =>\n patternCoversAtLength(pattern, intercepted, intercepted.minLength)\n )\n }\n\n let unboundedCoverageStart = Infinity\n for (const pattern of ordinaryRoutes) {\n if (pattern.unbounded && prefixCovers(pattern, intercepted)) {\n unboundedCoverageStart = Math.min(\n unboundedCoverageStart,\n Math.max(intercepted.minLength, pattern.minLength)\n )\n }\n }\n\n if (unboundedCoverageStart === Infinity) return false\n\n // An optional or required catchall can have its shorter paths covered by\n // fixed routes before another catchall takes over the remaining suffix.\n for (\n let length = intercepted.minLength;\n length < unboundedCoverageStart;\n length++\n ) {\n if (\n !ordinaryRoutes.some((pattern) =>\n patternCoversAtLength(pattern, intercepted, length)\n )\n ) {\n return false\n }\n }\n\n return true\n}\n\nexport function isInterceptionRouteAppPath(path: string): boolean {\n // TODO-APP: add more serious validation\n return (\n path\n .split('/')\n .find((segment) =>\n INTERCEPTION_ROUTE_MARKERS.find((m) => segment.startsWith(m))\n ) !== undefined\n )\n}\n\ntype InterceptionRouteInformation = {\n /**\n * The intercepting route. This is the route that is being intercepted or the\n * route that the user was coming from. This is matched by the Next-Url\n * header.\n */\n interceptingRoute: string\n\n /**\n * The intercepted route. This is the route that is being intercepted or the\n * route that the user is going to. This is matched by the request pathname.\n */\n interceptedRoute: string\n}\n\nexport function extractInterceptionRouteInformation(\n path: string\n): InterceptionRouteInformation {\n let interceptingRoute: string | undefined\n let marker: (typeof INTERCEPTION_ROUTE_MARKERS)[number] | undefined\n let interceptedRoute: string | undefined\n\n for (const segment of path.split('/')) {\n marker = INTERCEPTION_ROUTE_MARKERS.find((m) => segment.startsWith(m))\n if (marker) {\n ;[interceptingRoute, interceptedRoute] = path.split(marker, 2)\n break\n }\n }\n\n if (!interceptingRoute || !marker || !interceptedRoute) {\n throw new Error(\n `Invalid interception route: ${path}. Must be in the format //(..|...|..)(..)/`\n )\n }\n\n interceptingRoute = normalizeAppPath(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed\n\n switch (marker) {\n case '(.)':\n // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route\n if (interceptingRoute === '/') {\n interceptedRoute = `/${interceptedRoute}`\n } else {\n interceptedRoute = interceptingRoute + '/' + interceptedRoute\n }\n break\n case '(..)':\n // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route\n if (interceptingRoute === '/') {\n throw new Error(\n `Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`\n )\n }\n interceptedRoute = interceptingRoute\n .split('/')\n .slice(0, -1)\n .concat(interceptedRoute)\n .join('/')\n break\n case '(...)':\n // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route\n interceptedRoute = '/' + interceptedRoute\n break\n case '(..)(..)':\n // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route\n\n const splitInterceptingRoute = interceptingRoute.split('/')\n if (splitInterceptingRoute.length <= 2) {\n throw new Error(\n `Invalid interception route: ${path}. Cannot use (..)(..) marker at the root level or one level up.`\n )\n }\n\n interceptedRoute = splitInterceptingRoute\n .slice(0, -2)\n .concat(interceptedRoute)\n .join('/')\n break\n default:\n throw new Error('Invariant: unexpected marker')\n }\n\n return { interceptingRoute, interceptedRoute }\n}\n\n/**\n * Finds interception matchers that cannot be loaded as an ordinary request.\n *\n * This must run after catch-all normalization and pruning so `appPaths`\n * contains the final matcher set rather than every possible matcher candidate.\n */\nexport function findMissingCanonicalInterceptionRoutes(\n appPaths: Record\n): MissingCanonicalInterceptionRoute[] {\n const canonicalRoutes = Object.keys(appPaths).filter(\n (route) => !isInterceptionRouteAppPath(route)\n )\n const canonicalRoutePatterns = canonicalRoutes.map(parseRoutePattern)\n\n return Object.keys(appPaths)\n .filter(isInterceptionRouteAppPath)\n .map((interceptionRoute) => ({\n interceptionRoute,\n canonicalRoute:\n extractInterceptionRouteInformation(interceptionRoute).interceptedRoute,\n }))\n .filter(\n ({ canonicalRoute }) =>\n !isRoutePatternCovered(canonicalRoute, canonicalRoutePatterns)\n )\n .sort((a, b) => a.interceptionRoute.localeCompare(b.interceptionRoute))\n}\n"],"names":["normalizeAppPath","INTERCEPTION_ROUTE_MARKERS","parseRoutePattern","route","segments","split","filter","Boolean","tail","at","isOptionalCatchAll","undefined","startsWith","endsWith","isCatchAll","unbounded","prefixSegments","slice","prefix","map","segment","minLength","length","acceptsLength","pattern","prefixCovers","canonical","intercepted","every","canonicalSegment","index","interceptedSegment","patternCoversAtLength","isRoutePatternCovered","ordinaryRoutes","some","unboundedCoverageStart","Infinity","Math","min","max","isInterceptionRouteAppPath","path","find","m","extractInterceptionRouteInformation","interceptingRoute","marker","interceptedRoute","Error","concat","join","splitInterceptingRoute","findMissingCanonicalInterceptionRoutes","appPaths","canonicalRoutes","Object","keys","canonicalRoutePatterns","interceptionRoute","canonicalRoute","sort","a","b","localeCompare"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 11018, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/is-dynamic.ts"],"sourcesContent":["import {\n extractInterceptionRouteInformation,\n isInterceptionRouteAppPath,\n} from './interception-routes'\n\n// Identify /.*[param].*/ in route string\nconst TEST_ROUTE = /\\/[^/]*\\[[^/]+\\][^/]*(?=\\/|$)/\n\n// Identify /[param]/ in route string\nconst TEST_STRICT_ROUTE = /\\/\\[[^/]+\\](?=\\/|$)/\n\n/**\n * Check if a route is dynamic.\n *\n * @param route - The route to check.\n * @param strict - Whether to use strict mode which prohibits segments with prefixes/suffixes (default: true).\n * @returns Whether the route is dynamic.\n */\nexport function isDynamicRoute(route: string, strict: boolean = true): boolean {\n if (isInterceptionRouteAppPath(route)) {\n route = extractInterceptionRouteInformation(route).interceptedRoute\n }\n\n if (strict) {\n return TEST_STRICT_ROUTE.test(route)\n }\n\n return TEST_ROUTE.test(route)\n}\n"],"names":["extractInterceptionRouteInformation","isInterceptionRouteAppPath","TEST_ROUTE","TEST_STRICT_ROUTE","isDynamicRoute","route","strict","interceptedRoute","test"],"mappings":";;;;AAAA,SACEA,mCAAmC,EACnCC,0BAA0B,QACrB,wBAAuB;;AAE9B,yCAAyC;AACzC,MAAMC,aAAa;AAEnB,qCAAqC;AACrC,MAAMC,oBAAoB;AASnB,SAASC,eAAeC,KAAa,EAAEC,SAAkB,IAAI;IAClE,QAAIL,iOAAAA,EAA2BI,QAAQ;QACrCA,YAAQL,0OAAAA,EAAoCK,OAAOE,gBAAgB;IACrE;IAEA,IAAID,QAAQ;QACV,OAAOH,kBAAkBK,IAAI,CAACH;IAChC;IAEA,OAAOH,WAAWM,IAAI,CAACH;AACzB","ignoreList":[0]}}, + {"offset": {"line": 11041, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/parse-loader-tree.ts"],"sourcesContent":["import { DEFAULT_SEGMENT_KEY } from '../../segment'\nimport type { LoaderTree } from '../../../../server/lib/app-dir-module'\n\nexport function parseLoaderTree(tree: LoaderTree) {\n const [segment, parallelRoutes, modules, staticSiblings] = tree\n const { layout, template } = modules\n let { page } = modules\n // a __DEFAULT__ segment means that this route didn't match any of the\n // segments in the route, so we should use the default page\n page = segment === DEFAULT_SEGMENT_KEY ? modules.defaultPage : page\n\n const conventionPath = layout?.[1] || template?.[1] || page?.[1]\n\n return {\n page,\n segment,\n modules,\n /* it can be either layout / template / page */\n conventionPath,\n parallelRoutes,\n staticSiblings,\n }\n}\n"],"names":["DEFAULT_SEGMENT_KEY","parseLoaderTree","tree","segment","parallelRoutes","modules","staticSiblings","layout","template","page","defaultPage","conventionPath"],"mappings":";;;;AAAA,SAASA,mBAAmB,QAAQ,gBAAe;;AAG5C,SAASC,gBAAgBC,IAAgB;IAC9C,MAAM,CAACC,SAASC,gBAAgBC,SAASC,eAAe,GAAGJ;IAC3D,MAAM,EAAEK,MAAM,EAAEC,QAAQ,EAAE,GAAGH;IAC7B,IAAI,EAAEI,IAAI,EAAE,GAAGJ;IACf,sEAAsE;IACtE,2DAA2D;IAC3DI,OAAON,YAAYH,wLAAAA,GAAsBK,QAAQK,WAAW,GAAGD;IAE/D,MAAME,iBAAiBJ,QAAQ,CAAC,EAAE,IAAIC,UAAU,CAAC,EAAE,IAAIC,MAAM,CAAC,EAAE;IAEhE,OAAO;QACLA;QACAN;QACAE;QACA,6CAA6C,GAC7CM;QACAP;QACAE;IACF;AACF","ignoreList":[0]}}, + {"offset": {"line": 11068, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/parse-path.ts"],"sourcesContent":["/**\n * Given a path this function will find the pathname, query and hash and return\n * them. This is useful to parse full paths on the client side.\n * @param path A path to parse e.g. /foo/bar?id=1#hash\n */\nexport function parsePath(path: string) {\n const hashIndex = path.indexOf('#')\n const queryIndex = path.indexOf('?')\n const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex)\n\n if (hasQuery || hashIndex > -1) {\n return {\n pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),\n query: hasQuery\n ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined)\n : '',\n hash: hashIndex > -1 ? path.slice(hashIndex) : '',\n }\n }\n\n return { pathname: path, query: '', hash: '' }\n}\n"],"names":["parsePath","path","hashIndex","indexOf","queryIndex","hasQuery","pathname","substring","query","undefined","hash","slice"],"mappings":"AAAA;;;;CAIC,GACD;;;;AAAO,SAASA,UAAUC,IAAY;IACpC,MAAMC,YAAYD,KAAKE,OAAO,CAAC;IAC/B,MAAMC,aAAaH,KAAKE,OAAO,CAAC;IAChC,MAAME,WAAWD,aAAa,CAAC,KAAMF,CAAAA,YAAY,KAAKE,aAAaF,SAAQ;IAE3E,IAAIG,YAAYH,YAAY,CAAC,GAAG;QAC9B,OAAO;YACLI,UAAUL,KAAKM,SAAS,CAAC,GAAGF,WAAWD,aAAaF;YACpDM,OAAOH,WACHJ,KAAKM,SAAS,CAACH,YAAYF,YAAY,CAAC,IAAIA,YAAYO,aACxD;YACJC,MAAMR,YAAY,CAAC,IAAID,KAAKU,KAAK,CAACT,aAAa;QACjD;IACF;IAEA,OAAO;QAAEI,UAAUL;QAAMO,OAAO;QAAIE,MAAM;IAAG;AAC/C","ignoreList":[0]}}, + {"offset": {"line": 11097, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/path-has-prefix.ts"],"sourcesContent":["import { parsePath } from './parse-path'\n\n/**\n * Checks if a given path starts with a given prefix. It ensures it matches\n * exactly without containing extra chars. e.g. prefix /docs should replace\n * for /docs, /docs/, /docs/a but not /docsss\n * @param path The path to check.\n * @param prefix The prefix to check against.\n */\nexport function pathHasPrefix(path: string, prefix: string) {\n if (typeof path !== 'string') {\n return false\n }\n\n const { pathname } = parsePath(path)\n return pathname === prefix || pathname.startsWith(prefix + '/')\n}\n"],"names":["parsePath","pathHasPrefix","path","prefix","pathname","startsWith"],"mappings":";;;;AAAA,SAASA,SAAS,QAAQ,eAAc;;AASjC,SAASC,cAAcC,IAAY,EAAEC,MAAc;IACxD,IAAI,OAAOD,SAAS,UAAU;QAC5B,OAAO;IACT;IAEA,MAAM,EAAEE,QAAQ,EAAE,OAAGJ,uMAAAA,EAAUE;IAC/B,OAAOE,aAAaD,UAAUC,SAASC,UAAU,CAACF,SAAS;AAC7D","ignoreList":[0]}}, + {"offset": {"line": 11114, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/remove-path-prefix.ts"],"sourcesContent":["import { pathHasPrefix } from './path-has-prefix'\n\n/**\n * Given a path and a prefix it will remove the prefix when it exists in the\n * given path. It ensures it matches exactly without containing extra chars\n * and if the prefix is not there it will be noop.\n *\n * @param path The path to remove the prefix from.\n * @param prefix The prefix to be removed.\n */\nexport function removePathPrefix(path: string, prefix: string): string {\n // If the path doesn't start with the prefix we can return it as is. This\n // protects us from situations where the prefix is a substring of the path\n // prefix such as:\n //\n // For prefix: /blog\n //\n // /blog -> true\n // /blog/ -> true\n // /blog/1 -> true\n // /blogging -> false\n // /blogging/ -> false\n // /blogging/1 -> false\n if (!pathHasPrefix(path, prefix)) {\n return path\n }\n\n // Remove the prefix from the path via slicing.\n const withoutPrefix = path.slice(prefix.length)\n\n // If the path without the prefix starts with a `/` we can return it as is.\n if (withoutPrefix.startsWith('/')) {\n return withoutPrefix\n }\n\n // If the path without the prefix doesn't start with a `/` we need to add it\n // back to the path to make sure it's a valid path.\n return `/${withoutPrefix}`\n}\n"],"names":["pathHasPrefix","removePathPrefix","path","prefix","withoutPrefix","slice","length","startsWith"],"mappings":";;;;AAAA,SAASA,aAAa,QAAQ,oBAAmB;;AAU1C,SAASC,iBAAiBC,IAAY,EAAEC,MAAc;IAC3D,yEAAyE;IACzE,0EAA0E;IAC1E,kBAAkB;IAClB,EAAE;IACF,oBAAoB;IACpB,EAAE;IACF,kBAAkB;IAClB,mBAAmB;IACnB,oBAAoB;IACpB,uBAAuB;IACvB,wBAAwB;IACxB,yBAAyB;IACzB,IAAI,KAACH,mNAAAA,EAAcE,MAAMC,SAAS;QAChC,OAAOD;IACT;IAEA,+CAA+C;IAC/C,MAAME,gBAAgBF,KAAKG,KAAK,CAACF,OAAOG,MAAM;IAE9C,2EAA2E;IAC3E,IAAIF,cAAcG,UAAU,CAAC,MAAM;QACjC,OAAOH;IACT;IAEA,4EAA4E;IAC5E,mDAAmD;IACnD,OAAO,CAAC,CAAC,EAAEA,eAAe;AAC5B","ignoreList":[0]}}, + {"offset": {"line": 11150, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/remove-trailing-slash.ts"],"sourcesContent":["/**\n * Removes the trailing slash for a given route or page path. Examples:\n * - `/foo/bar/` -> `/foo/bar`\n * - `/foo/bar` -> `/foo/bar`\n *\n * Uses charCodeAt (47 === '/') instead of regex to avoid the overhead of\n * compiling and executing a RegExp on every call (~3-5x faster).\n */\nexport function removeTrailingSlash(route: string) {\n return route.charCodeAt(route.length - 1) === 47 && route.length > 1\n ? route.slice(0, -1)\n : route\n}\n"],"names":["removeTrailingSlash","route","charCodeAt","length","slice"],"mappings":"AAAA;;;;;;;CAOC,GACD;;;;AAAO,SAASA,oBAAoBC,KAAa;IAC/C,OAAOA,MAAMC,UAAU,CAACD,MAAME,MAAM,GAAG,OAAO,MAAMF,MAAME,MAAM,GAAG,IAC/DF,MAAMG,KAAK,CAAC,GAAG,CAAC,KAChBH;AACN","ignoreList":[0]}}, + {"offset": {"line": 11168, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/segment.ts"],"sourcesContent":["import type { FlightRouterState, Segment } from './app-router-types'\n\nexport function getSegmentValue(segment: Segment) {\n return Array.isArray(segment) ? segment[1] : segment\n}\n\nexport function isGroupSegment(segment: string) {\n // Use array[0] for performant purpose\n return segment[0] === '(' && segment.endsWith(')')\n}\n\nexport function isParallelRouteSegment(segment: string) {\n return segment.startsWith('@') && segment !== '@children'\n}\n\nexport function computeSelectedLayoutSegment(\n segments: string[] | null,\n parallelRouteKey: string\n): string | null {\n if (!segments || segments.length === 0) {\n return null\n }\n\n // For 'children', use first segment; for other parallel routes, use last segment\n const rawSegment =\n parallelRouteKey === 'children'\n ? segments[0]\n : segments[segments.length - 1]\n\n // If the default slot is showing, return null since it's not technically \"selected\" (it's a fallback)\n // Returning an internal value like `__DEFAULT__` would be confusing\n return rawSegment === DEFAULT_SEGMENT_KEY ? null : rawSegment\n}\n\n/** Get the canonical parameters from the current level to the leaf node. */\nexport function getSelectedLayoutSegmentPath(\n tree: FlightRouterState,\n parallelRouteKey: string,\n first = true,\n segmentPath: string[] = []\n): string[] {\n let node: FlightRouterState\n if (first) {\n // Use the provided parallel route key on the first parallel route\n node = tree[1][parallelRouteKey]\n } else {\n // After first parallel route prefer children, if there's no children pick the first parallel route.\n const parallelRoutes = tree[1]\n node = parallelRoutes.children ?? Object.values(parallelRoutes)[0]\n }\n\n if (!node) return segmentPath\n const segment = node[0]\n\n let segmentValue = getSegmentValue(segment)\n\n if (!segmentValue || segmentValue === PAGE_SEGMENT_KEY) {\n return segmentPath\n }\n\n segmentPath.push(segmentValue)\n\n return getSelectedLayoutSegmentPath(\n node,\n parallelRouteKey,\n false,\n segmentPath\n )\n}\n\nexport const PAGE_SEGMENT_KEY = '__PAGE__'\nexport const DEFAULT_SEGMENT_KEY = '__DEFAULT__'\nexport const NOT_FOUND_SEGMENT_KEY = '/_not-found'\n"],"names":["getSegmentValue","segment","Array","isArray","isGroupSegment","endsWith","isParallelRouteSegment","startsWith","computeSelectedLayoutSegment","segments","parallelRouteKey","length","rawSegment","DEFAULT_SEGMENT_KEY","getSelectedLayoutSegmentPath","tree","first","segmentPath","node","parallelRoutes","children","Object","values","segmentValue","PAGE_SEGMENT_KEY","push","NOT_FOUND_SEGMENT_KEY"],"mappings":";;;;;;;;;;;;;;;;;;AAEO,SAASA,gBAAgBC,OAAgB;IAC9C,OAAOC,MAAMC,OAAO,CAACF,WAAWA,OAAO,CAAC,EAAE,GAAGA;AAC/C;AAEO,SAASG,eAAeH,OAAe;IAC5C,sCAAsC;IACtC,OAAOA,OAAO,CAAC,EAAE,KAAK,OAAOA,QAAQI,QAAQ,CAAC;AAChD;AAEO,SAASC,uBAAuBL,OAAe;IACpD,OAAOA,QAAQM,UAAU,CAAC,QAAQN,YAAY;AAChD;AAEO,SAASO,6BACdC,QAAyB,EACzBC,gBAAwB;IAExB,IAAI,CAACD,YAAYA,SAASE,MAAM,KAAK,GAAG;QACtC,OAAO;IACT;IAEA,iFAAiF;IACjF,MAAMC,aACJF,qBAAqB,aACjBD,QAAQ,CAAC,EAAE,GACXA,QAAQ,CAACA,SAASE,MAAM,GAAG,EAAE;IAEnC,sGAAsG;IACtG,oEAAoE;IACpE,OAAOC,eAAeC,sBAAsB,OAAOD;AACrD;AAGO,SAASE,6BACdC,IAAuB,EACvBL,gBAAwB,EACxBM,QAAQ,IAAI,EACZC,cAAwB,EAAE;IAE1B,IAAIC;IACJ,IAAIF,OAAO;QACT,kEAAkE;QAClEE,OAAOH,IAAI,CAAC,EAAE,CAACL,iBAAiB;IAClC,OAAO;QACL,oGAAoG;QACpG,MAAMS,iBAAiBJ,IAAI,CAAC,EAAE;QAC9BG,OAAOC,eAAeC,QAAQ,IAAIC,OAAOC,MAAM,CAACH,eAAe,CAAC,EAAE;IACpE;IAEA,IAAI,CAACD,MAAM,OAAOD;IAClB,MAAMhB,UAAUiB,IAAI,CAAC,EAAE;IAEvB,IAAIK,eAAevB,gBAAgBC;IAEnC,IAAI,CAACsB,gBAAgBA,iBAAiBC,kBAAkB;QACtD,OAAOP;IACT;IAEAA,YAAYQ,IAAI,CAACF;IAEjB,OAAOT,6BACLI,MACAR,kBACA,OACAO;AAEJ;AAEO,MAAMO,mBAAmB,WAAU;AACnC,MAAMX,sBAAsB,cAAa;AACzC,MAAMa,wBAAwB,cAAa","ignoreList":[0]}}, + {"offset": {"line": 11232, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/server-reference-info.ts"],"sourcesContent":["export interface ServerReferenceInfo {\n type: 'server-action' | 'use-cache'\n usedArgs: [boolean, boolean, boolean, boolean, boolean, boolean]\n hasRestArgs: boolean\n}\n\nexport const SERVER_REFERENCE_ID_LENGTH = 42\n\nexport function mightBeServerReferenceId(id: string): boolean {\n return id.length === SERVER_REFERENCE_ID_LENGTH\n}\n\n/**\n * Extracts info about the server reference for the given server reference ID by\n * parsing the first byte of the hex-encoded ID.\n *\n * ```\n * Bit positions: [7] [6] [5] [4] [3] [2] [1] [0]\n * Bits: typeBit argMask restArgs\n * ```\n *\n * If the `typeBit` is `1` the server reference represents a `\"use cache\"`\n * function, otherwise a server action.\n *\n * The `argMask` encodes whether the function uses the argument at the\n * respective position.\n *\n * The `restArgs` bit indicates whether the function uses a rest parameter. It's\n * also set to 1 if the function has more than 6 args.\n *\n * @param id hex-encoded server reference ID\n */\nexport function extractInfoFromServerReferenceId(\n id: string\n): ServerReferenceInfo {\n const infoByte = parseInt(id.slice(0, 2), 16)\n const typeBit = (infoByte >> 7) & 0x1\n const argMask = (infoByte >> 1) & 0x3f\n const restArgs = infoByte & 0x1\n const usedArgs = Array(6)\n\n for (let index = 0; index < 6; index++) {\n const bitPosition = 5 - index\n const bit = (argMask >> bitPosition) & 0x1\n usedArgs[index] = bit === 1\n }\n\n return {\n type: typeBit === 1 ? 'use-cache' : 'server-action',\n usedArgs: usedArgs as [\n boolean,\n boolean,\n boolean,\n boolean,\n boolean,\n boolean,\n ],\n hasRestArgs: restArgs === 1,\n }\n}\n\n/**\n * Creates a sparse array containing only the used arguments based on the\n * provided action info.\n */\nexport function omitUnusedArgs(\n args: unknown[],\n info: ServerReferenceInfo\n): unknown[] {\n const filteredArgs = new Array(args.length)\n let length = 0\n\n for (let index = 0; index < args.length; index++) {\n if (\n (index < 6 && info.usedArgs[index]) ||\n // This assumes that the server reference info byte has the restArgs bit\n // set to 1 if there are more than 6 args.\n (index >= 6 && info.hasRestArgs)\n ) {\n filteredArgs[index] = args[index]\n length = index + 1\n }\n }\n\n // Trim trailing unused args from the array.\n filteredArgs.length = length\n\n return filteredArgs\n}\n"],"names":["SERVER_REFERENCE_ID_LENGTH","mightBeServerReferenceId","id","length","extractInfoFromServerReferenceId","infoByte","parseInt","slice","typeBit","argMask","restArgs","usedArgs","Array","index","bitPosition","bit","type","hasRestArgs","omitUnusedArgs","args","info","filteredArgs"],"mappings":";;;;;;;;;;AAMO,MAAMA,6BAA6B,GAAE;AAErC,SAASC,yBAAyBC,EAAU;IACjD,OAAOA,GAAGC,MAAM,KAAKH;AACvB;AAsBO,SAASI,iCACdF,EAAU;IAEV,MAAMG,WAAWC,SAASJ,GAAGK,KAAK,CAAC,GAAG,IAAI;IAC1C,MAAMC,UAAWH,YAAY,IAAK;IAClC,MAAMI,UAAWJ,YAAY,IAAK;IAClC,MAAMK,WAAWL,WAAW;IAC5B,MAAMM,WAAWC,MAAM;IAEvB,IAAK,IAAIC,QAAQ,GAAGA,QAAQ,GAAGA,QAAS;QACtC,MAAMC,cAAc,IAAID;QACxB,MAAME,MAAON,WAAWK,cAAe;QACvCH,QAAQ,CAACE,MAAM,GAAGE,QAAQ;IAC5B;IAEA,OAAO;QACLC,MAAMR,YAAY,IAAI,cAAc;QACpCG,UAAUA;QAQVM,aAAaP,aAAa;IAC5B;AACF;AAMO,SAASQ,eACdC,IAAe,EACfC,IAAyB;IAEzB,MAAMC,eAAe,IAAIT,MAAMO,KAAKhB,MAAM;IAC1C,IAAIA,SAAS;IAEb,IAAK,IAAIU,QAAQ,GAAGA,QAAQM,KAAKhB,MAAM,EAAEU,QAAS;QAChD,IACGA,QAAQ,KAAKO,KAAKT,QAAQ,CAACE,MAAM,IAClC,wEAAwE;QACxE,0CAA0C;QACzCA,SAAS,KAAKO,KAAKH,WAAW,EAC/B;YACAI,YAAY,CAACR,MAAM,GAAGM,IAAI,CAACN,MAAM;YACjCV,SAASU,QAAQ;QACnB;IACF;IAEA,4CAA4C;IAC5CQ,aAAalB,MAAM,GAAGA;IAEtB,OAAOkB;AACT","ignoreList":[0]}}, + {"offset": {"line": 11282, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/utils.ts"],"sourcesContent":["import type { HtmlProps } from './html-context.shared-runtime'\nimport type { ComponentType, JSX } from 'react'\nimport type { DomainLocale } from '../../server/config'\nimport type { Env } from '@next/env'\nimport type { IncomingMessage, ServerResponse } from 'http'\nimport type { NextRouter } from './router/router'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { PreviewData } from '../../types'\nimport type { COMPILER_NAMES } from './constants'\nimport type fs from 'fs'\n\nexport type NextComponentType<\n Context extends BaseContext = NextPageContext,\n InitialProps = {},\n Props = {},\n> = ComponentType & {\n /**\n * Used for initial page load data population. Data returned from `getInitialProps` is serialized when server rendered.\n * Make sure to return plain `Object` without using `Date`, `Map`, `Set`.\n * @param context Context of `page`\n */\n getInitialProps?(context: Context): InitialProps | Promise\n}\n\nexport type DocumentType = NextComponentType<\n DocumentContext,\n DocumentInitialProps,\n DocumentProps\n>\n\nexport type AppType

= NextComponentType<\n AppContextType,\n P,\n AppPropsType\n>\n\nexport type AppTreeType = ComponentType<\n AppInitialProps & { [name: string]: any }\n>\n\n/**\n * Web vitals provided to _app.reportWebVitals by Core Web Vitals plugin developed by Google Chrome team.\n * https://nextjs.org/blog/next-9-4#integrated-web-vitals-reporting\n */\nexport const WEB_VITALS = ['CLS', 'FCP', 'INP', 'LCP', 'TTFB'] as const\nexport type NextWebVitalsMetric = {\n id: string\n startTime: number\n value: number\n attribution?: { [key: string]: unknown }\n} & (\n | {\n label: 'web-vital'\n name: (typeof WEB_VITALS)[number]\n }\n | {\n label: 'custom'\n name:\n | 'Next.js-hydration'\n | 'Next.js-route-change-to-render'\n | 'Next.js-render'\n }\n)\n\nexport type Enhancer = (Component: C) => C\n\nexport type ComponentsEnhancer =\n | {\n enhanceApp?: Enhancer\n enhanceComponent?: Enhancer\n }\n | Enhancer\n\nexport type RenderPageResult = {\n html: string\n head?: Array\n}\n\nexport type RenderPage = (\n options?: ComponentsEnhancer\n) => DocumentInitialProps | Promise\n\nexport type BaseContext = {\n res?: ServerResponse\n [k: string]: any\n}\n\nexport type NEXT_DATA = {\n props: Record\n page: string\n query: ParsedUrlQuery\n buildId: string\n assetPrefix?: string\n nextExport?: boolean\n autoExport?: boolean\n isFallback?: boolean\n isExperimentalCompile?: boolean\n dynamicIds?: (string | number)[]\n err?: Error & {\n statusCode?: number\n source?: typeof COMPILER_NAMES.server | typeof COMPILER_NAMES.edgeServer\n }\n gsp?: boolean\n gssp?: boolean\n customServer?: boolean\n gip?: boolean\n appGip?: boolean\n locale?: string\n locales?: readonly string[]\n defaultLocale?: string\n domainLocales?: readonly DomainLocale[]\n scriptLoader?: any[]\n isPreview?: boolean\n notFoundSrcPage?: string\n}\n\n/**\n * `Next` context\n */\nexport interface NextPageContext {\n /**\n * Error object if encountered during rendering\n */\n err?: (Error & { statusCode?: number }) | null\n /**\n * `HTTP` request object.\n */\n req?: IncomingMessage\n /**\n * `HTTP` response object.\n */\n res?: ServerResponse\n /**\n * Path section of `URL`.\n */\n pathname: string\n /**\n * Query string section of `URL` parsed as an object.\n */\n query: ParsedUrlQuery\n /**\n * `String` of the actual path including query.\n */\n asPath?: string\n /**\n * The currently active locale\n */\n locale?: string\n /**\n * All configured locales\n */\n locales?: readonly string[]\n /**\n * The configured default locale\n */\n defaultLocale?: string\n /**\n * `Component` the tree of the App to use if needing to render separately\n */\n AppTree: AppTreeType\n}\n\nexport type AppContextType = {\n Component: NextComponentType\n AppTree: AppTreeType\n ctx: NextPageContext\n router: Router\n}\n\nexport type AppInitialProps = {\n pageProps: PageProps\n}\n\nexport type AppPropsType<\n Router extends NextRouter = NextRouter,\n PageProps = {},\n> = AppInitialProps & {\n Component: NextComponentType\n router: Router\n __N_SSG?: boolean\n __N_SSP?: boolean\n}\n\nexport type DocumentContext = NextPageContext & {\n renderPage: RenderPage\n defaultGetInitialProps(\n ctx: DocumentContext,\n options?: { nonce?: string }\n ): Promise\n}\n\nexport type DocumentInitialProps = RenderPageResult & {\n styles?: React.ReactElement[] | Iterable | JSX.Element\n}\n\nexport type DocumentProps = DocumentInitialProps & HtmlProps\n\n/**\n * Next `API` route request\n */\nexport interface NextApiRequest extends IncomingMessage {\n /**\n * Object of `query` values from url\n */\n query: Partial<{\n [key: string]: string | string[]\n }>\n /**\n * Object of `cookies` from header\n */\n cookies: Partial<{\n [key: string]: string\n }>\n\n body: any\n\n env: Env\n\n draftMode?: boolean\n\n preview?: boolean\n /**\n * Preview data set on the request, if any\n * */\n previewData?: PreviewData\n}\n\n/**\n * Send body of response\n */\ntype Send = (body: T) => void\n\n/**\n * Next `API` route response\n */\nexport type NextApiResponse = ServerResponse & {\n /**\n * Send data `any` data in response\n */\n send: Send\n /**\n * Send data `json` data in response\n */\n json: Send\n status: (statusCode: number) => NextApiResponse\n redirect(url: string): NextApiResponse\n redirect(status: number, url: string): NextApiResponse\n\n /**\n * Set draft mode\n */\n setDraftMode: (options: { enable: boolean }) => NextApiResponse\n\n /**\n * Set preview data for Next.js' prerender mode\n */\n setPreviewData: (\n data: object | string,\n options?: {\n /**\n * Specifies the number (in seconds) for the preview session to last for.\n * The given number will be converted to an integer by rounding down.\n * By default, no maximum age is set and the preview session finishes\n * when the client shuts down (browser is closed).\n */\n maxAge?: number\n /**\n * Specifies the path for the preview session to work under. By default,\n * the path is considered the \"default path\", i.e., any pages under \"/\".\n */\n path?: string\n }\n ) => NextApiResponse\n\n /**\n * Clear preview data for Next.js' prerender mode\n */\n clearPreviewData: (options?: { path?: string }) => NextApiResponse\n\n /**\n * Revalidate a specific page and regenerate it using On-Demand Incremental\n * Static Regeneration.\n * The path should be an actual path, not a rewritten path. E.g. for\n * \"/blog/[slug]\" this should be \"/blog/post-1\".\n * @link https://nextjs.org/docs/app/building-your-application/data-fetching/incremental-static-regeneration#on-demand-revalidation-with-revalidatepath\n */\n revalidate: (\n urlPath: string,\n opts?: {\n unstable_onlyGenerated?: boolean\n }\n ) => Promise\n}\n\n/**\n * Next `API` route handler\n */\nexport type NextApiHandler = (\n req: NextApiRequest,\n res: NextApiResponse\n) => unknown | Promise\n\n/**\n * Utils\n */\nexport function execOnce ReturnType>(\n fn: T\n): T {\n let used = false\n let result: ReturnType\n\n return ((...args: any[]) => {\n if (!used) {\n used = true\n result = fn(...args)\n }\n return result\n }) as T\n}\n\n// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1\n// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\nconst ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/\nexport const isAbsoluteUrl = (url: string) => {\n // Fast path: an absolute URL must start with a letter (the scheme).\n // Check for a-z and A-Z without the cost of the regex.\n const c = url.charCodeAt(0)\n const isLetter =\n (c >= 65 /* A */ && c <= 90) /* Z */ ||\n (c >= 97 /* a */ && c <= 122) /* z */\n if (!isLetter) {\n return false\n }\n\n return ABSOLUTE_URL_REGEX.test(url)\n}\n\nexport function getLocationOrigin() {\n const { protocol, hostname, port } = window.location\n return `${protocol}//${hostname}${port ? ':' + port : ''}`\n}\n\nexport function getURL() {\n const { href } = window.location\n const origin = getLocationOrigin()\n return href.substring(origin.length)\n}\n\nexport function getDisplayName

(Component: ComponentType

) {\n return typeof Component === 'string'\n ? Component\n : Component.displayName || Component.name || 'Unknown'\n}\n\nexport function isResSent(res: ServerResponse) {\n return res.finished || res.headersSent\n}\n\nexport function normalizeRepeatedSlashes(url: string) {\n const urlParts = url.split('?')\n const urlNoQuery = urlParts[0]\n\n return (\n urlNoQuery\n // first we replace any non-encoded backslashes with forward\n // then normalize repeated forward slashes\n .replace(/\\\\/g, '/')\n .replace(/\\/\\/+/g, '/') +\n (urlParts[1] ? `?${urlParts.slice(1).join('?')}` : '')\n )\n}\n\nexport async function loadGetInitialProps<\n C extends BaseContext,\n IP = {},\n P = {},\n>(App: NextComponentType, ctx: C): Promise {\n if (process.env.NODE_ENV !== 'production') {\n if (App.prototype?.getInitialProps) {\n const message = `\"${getDisplayName(\n App\n )}.getInitialProps()\" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.`\n throw new Error(message)\n }\n }\n // when called from _app `ctx` is nested in `ctx`\n const res = ctx.res || (ctx.ctx && ctx.ctx.res)\n\n if (!App.getInitialProps) {\n if (ctx.ctx && ctx.Component) {\n // @ts-ignore pageProps default\n return {\n pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx),\n }\n }\n return {} as IP\n }\n\n const props = await App.getInitialProps(ctx)\n\n if (res && isResSent(res)) {\n return props\n }\n\n if (!props) {\n const message = `\"${getDisplayName(\n App\n )}.getInitialProps()\" should resolve to an object. But found \"${props}\" instead.`\n throw new Error(message)\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (Object.keys(props).length === 0 && !ctx.ctx) {\n console.warn(\n `${getDisplayName(\n App\n )} returned an empty object from \\`getInitialProps\\`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps`\n )\n }\n }\n\n return props\n}\n\nexport const SP = typeof performance !== 'undefined'\nexport const ST =\n SP &&\n (['mark', 'measure', 'getEntriesByName'] as const).every(\n (method) => typeof performance[method] === 'function'\n )\n\nexport class DecodeError extends Error {}\nexport class NormalizeError extends Error {}\nexport class PageNotFoundError extends Error {\n code: string\n\n constructor(page: string) {\n super()\n this.code = 'ENOENT'\n this.name = 'PageNotFoundError'\n this.message = `Cannot find module for page: ${page}`\n }\n}\n\nexport class MissingStaticPage extends Error {\n constructor(page: string, message: string) {\n super()\n this.message = `Failed to load static file for page: ${page} ${message}`\n }\n}\n\nexport class MiddlewareNotFoundError extends Error {\n code: string\n constructor() {\n super()\n this.code = 'ENOENT'\n this.message = `Cannot find the middleware module`\n }\n}\n\nexport interface CacheFs {\n existsSync: typeof fs.existsSync\n readFile: typeof fs.promises.readFile\n readFileSync: typeof fs.readFileSync\n writeFile(f: string, d: any): Promise\n /** Publish a complete file without replacing an existing destination. */\n writeFileAtomic?(f: string, d: any): Promise\n mkdir(dir: string): Promise\n stat(f: string): Promise<{ mtime: Date }>\n}\n\nexport function stringifyError(error: Error) {\n return JSON.stringify({ message: error.message, stack: error.stack })\n}\n"],"names":["WEB_VITALS","execOnce","fn","used","result","args","ABSOLUTE_URL_REGEX","isAbsoluteUrl","url","c","charCodeAt","isLetter","test","getLocationOrigin","protocol","hostname","port","window","location","getURL","href","origin","substring","length","getDisplayName","Component","displayName","name","isResSent","res","finished","headersSent","normalizeRepeatedSlashes","urlParts","split","urlNoQuery","replace","slice","join","loadGetInitialProps","App","ctx","process","env","NODE_ENV","prototype","getInitialProps","message","Error","pageProps","props","Object","keys","console","warn","SP","performance","ST","every","method","DecodeError","NormalizeError","PageNotFoundError","constructor","page","code","MissingStaticPage","MiddlewareNotFoundError","stringifyError","error","JSON","stringify","stack"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 11448, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/utils/reflect-utils.ts"],"sourcesContent":["// This regex will have fast negatives meaning valid identifiers may not pass\n// this test. However this is only used during static generation to provide hints\n// about why a page bailed out of some or all prerendering and we can use bracket notation\n// for example while `ಠ_ಠ` is a valid identifier it's ok to print `searchParams['ಠ_ಠ']`\n// even if this would have been fine too `searchParams.ಠ_ಠ`\nconst isDefinitelyAValidIdentifier = /^[A-Za-z_$][A-Za-z0-9_$]*$/\n\nexport function describeStringPropertyAccess(target: string, prop: string) {\n if (isDefinitelyAValidIdentifier.test(prop)) {\n return `\\`${target}.${prop}\\``\n }\n return `\\`${target}[${JSON.stringify(prop)}]\\``\n}\n\nexport function describeHasCheckingStringProperty(\n target: string,\n prop: string\n) {\n const stringifiedProp = JSON.stringify(prop)\n return `\\`Reflect.has(${target}, ${stringifiedProp})\\`, \\`${stringifiedProp} in ${target}\\`, or similar`\n}\n\nexport const wellKnownProperties = new Set([\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toString',\n 'valueOf',\n 'toLocaleString',\n\n // Promise prototype\n 'then',\n 'catch',\n 'finally',\n\n // React Promise extension\n 'status',\n // 'value',\n // 'error',\n\n // React introspection\n 'displayName',\n '_debugInfo',\n\n // Common tested properties\n 'toJSON',\n '$$typeof',\n '__esModule',\n\n // Tested by flight when checking for iterables\n '@@iterator',\n])\n"],"names":["isDefinitelyAValidIdentifier","describeStringPropertyAccess","target","prop","test","JSON","stringify","describeHasCheckingStringProperty","stringifiedProp","wellKnownProperties","Set"],"mappings":";;;;;;;;AAAA,6EAA6E;AAC7E,iFAAiF;AACjF,0FAA0F;AAC1F,uFAAuF;AACvF,2DAA2D;AAC3D,MAAMA,+BAA+B;AAE9B,SAASC,6BAA6BC,MAAc,EAAEC,IAAY;IACvE,IAAIH,6BAA6BI,IAAI,CAACD,OAAO;QAC3C,OAAO,CAAC,EAAE,EAAED,OAAO,CAAC,EAAEC,KAAK,EAAE,CAAC;IAChC;IACA,OAAO,CAAC,EAAE,EAAED,OAAO,CAAC,EAAEG,KAAKC,SAAS,CAACH,MAAM,GAAG,CAAC;AACjD;AAEO,SAASI,kCACdL,MAAc,EACdC,IAAY;IAEZ,MAAMK,kBAAkBH,KAAKC,SAAS,CAACH;IACvC,OAAO,CAAC,cAAc,EAAED,OAAO,EAAE,EAAEM,gBAAgB,OAAO,EAAEA,gBAAgB,IAAI,EAAEN,OAAO,cAAc,CAAC;AAC1G;AAEO,MAAMO,sBAAsB,IAAIC,IAAI;IACzC;IACA;IACA;IACA;IACA;IACA;IAEA,oBAAoB;IACpB;IACA;IACA;IAEA,0BAA0B;IAC1B;IACA,WAAW;IACX,WAAW;IAEX,sBAAsB;IACtB;IACA;IAEA,2BAA2B;IAC3B;IACA;IACA;IAEA,+CAA+C;IAC/C;CACD,EAAC","ignoreList":[0]}}, + {"offset": {"line": 11501, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/lib/constants.ts"],"sourcesContent":["import type { ServerRuntime } from '../types'\n\nexport const TEXT_PLAIN_CONTENT_TYPE_HEADER = 'text/plain'\nexport const HTML_CONTENT_TYPE_HEADER = 'text/html; charset=utf-8'\nexport const JSON_CONTENT_TYPE_HEADER = 'application/json; charset=utf-8'\nexport const NEXT_QUERY_PARAM_PREFIX = 'nxtP'\nexport const NEXT_INTERCEPTION_MARKER_PREFIX = 'nxtI'\n\nexport const MATCHED_PATH_HEADER = 'x-matched-path'\nexport const PRERENDER_REVALIDATE_HEADER = 'x-prerender-revalidate'\nexport const PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER =\n 'x-prerender-revalidate-if-generated'\n\nexport const RSC_SEGMENTS_DIR_SUFFIX = '.segments'\nexport const RSC_SEGMENT_SUFFIX = '.segment.rsc'\nexport const RSC_SUFFIX = '.rsc'\nexport const ACTION_SUFFIX = '.action'\nexport const NEXT_DATA_SUFFIX = '.json'\nexport const NEXT_META_SUFFIX = '.meta'\nexport const NEXT_BODY_SUFFIX = '.body'\n\nexport const NEXT_NAV_DEPLOYMENT_ID_HEADER = 'x-nextjs-deployment-id'\n\nexport const NEXT_CACHE_TAGS_HEADER = 'x-next-cache-tags'\nexport const NEXT_CACHE_REVALIDATED_TAGS_HEADER = 'x-next-revalidated-tags'\nexport const NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER =\n 'x-next-revalidate-tag-token'\n\nexport const NEXT_RESUME_HEADER = 'next-resume'\nexport const NEXT_RESUME_STATE_LENGTH_HEADER = 'x-next-resume-state-length'\n\n// if these change make sure we update the related\n// documentation as well\nexport const NEXT_CACHE_TAG_MAX_ITEMS = 128\nexport const NEXT_CACHE_TAG_MAX_LENGTH = 256\nexport const NEXT_CACHE_SOFT_TAG_MAX_LENGTH = 1024\nexport const NEXT_CACHE_IMPLICIT_TAG_ID = '_N_T_'\nexport const NEXT_CACHE_ROOT_PARAM_TAG_ID = '_N_RP_'\n\n// in seconds\nexport const CACHE_ONE_YEAR_SECONDS = 31536000\n\n// in seconds, represents revalidate=false. I.e. never revaliate.\n// We use this value since it can be represented as a V8 SMI for optimal performance.\n// It can also be serialized as JSON if it ever leaks accidentally as an actual value.\nexport const INFINITE_CACHE = 0xfffffffe\n\n// Patterns to detect middleware files\nexport const MIDDLEWARE_FILENAME = 'middleware'\nexport const MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}`\n\n// Patterns to detect proxy files (replacement for middleware)\nexport const PROXY_FILENAME = 'proxy'\nexport const PROXY_LOCATION_REGEXP = `(?:src/)?${PROXY_FILENAME}`\n\n// Pattern to detect instrumentation hooks file\nexport const INSTRUMENTATION_HOOK_FILENAME = 'instrumentation'\n\n// Because on Windows absolute paths in the generated code can break because of numbers, eg 1 in the path,\n// we have to use a private alias\nexport const PAGES_DIR_ALIAS = 'private-next-pages'\nexport const DOT_NEXT_ALIAS = 'private-dot-next'\nexport const ROOT_DIR_ALIAS = 'private-next-root-dir'\nexport const APP_DIR_ALIAS = 'private-next-app-dir'\nexport const RSC_MOD_REF_PROXY_ALIAS = 'private-next-rsc-mod-ref-proxy'\nexport const RSC_ACTION_VALIDATE_ALIAS = 'private-next-rsc-action-validate'\nexport const RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-server-reference'\nexport const RSC_CACHE_WRAPPER_ALIAS = 'private-next-rsc-cache-wrapper'\nexport const RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS =\n 'private-next-rsc-track-dynamic-import'\nexport const RSC_ACTION_ENCRYPTION_ALIAS = 'private-next-rsc-action-encryption'\nexport const RSC_ACTION_CLIENT_WRAPPER_ALIAS =\n 'private-next-rsc-action-client-wrapper'\n\nexport const PUBLIC_DIR_MIDDLEWARE_CONFLICT = `You can not have a '_next' folder inside of your public folder. This conflicts with the internal '/_next' route. https://nextjs.org/docs/messages/public-next-folder-conflict`\n\nexport const SSG_GET_INITIAL_PROPS_CONFLICT = `You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps`\n\nexport const SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.`\n\nexport const SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps`\n\nexport const STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR = `can not have getInitialProps/getServerSideProps, https://nextjs.org/docs/messages/404-get-initial-props`\n\nexport const SERVER_PROPS_EXPORT_ERROR = `pages with \\`getServerSideProps\\` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export`\n\nexport const GSP_NO_RETURNED_VALUE =\n 'Your `getStaticProps` function did not return an object. Did you forget to add a `return`?'\nexport const GSSP_NO_RETURNED_VALUE =\n 'Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?'\n\nexport const UNSTABLE_REVALIDATE_RENAME_ERROR =\n 'The `unstable_revalidate` property is available for general use.\\n' +\n 'Please use `revalidate` instead.'\n\nexport const GSSP_COMPONENT_MEMBER_ERROR = `can not be attached to a page's component and must be exported from the page. See more info here: https://nextjs.org/docs/messages/gssp-component-member`\n\nexport const NON_STANDARD_NODE_ENV = `You are using a non-standard \"NODE_ENV\" value in your environment. This creates inconsistencies in the project and is strongly advised against. Read more: https://nextjs.org/docs/messages/non-standard-node-env`\n\nexport const SSG_FALLBACK_EXPORT_ERROR = `Pages with \\`fallback\\` enabled in \\`getStaticPaths\\` can not be exported. See more info here: https://nextjs.org/docs/messages/ssg-fallback-true-export`\n\nexport const ESLINT_DEFAULT_DIRS = ['app', 'pages', 'components', 'lib', 'src']\n\nexport const SERVER_RUNTIME: Record = {\n edge: 'edge',\n experimentalEdge: 'experimental-edge',\n nodejs: 'nodejs',\n}\n\nexport const WEB_SOCKET_MAX_RECONNECTIONS = 12\n\n/**\n * The names of the webpack layers. These layers are the primitives for the\n * webpack chunks.\n */\nconst WEBPACK_LAYERS_NAMES = {\n /**\n * The layer for the shared code between the client and server bundles.\n */\n shared: 'shared',\n /**\n * The layer for server-only runtime and picking up `react-server` export conditions.\n * Including app router RSC pages and app router custom routes and metadata routes.\n */\n reactServerComponents: 'rsc',\n /**\n * Server Side Rendering layer for app (ssr).\n */\n serverSideRendering: 'ssr',\n /**\n * The browser client bundle layer for actions.\n */\n actionBrowser: 'action-browser',\n /**\n * The Node.js bundle layer for the API routes.\n */\n apiNode: 'api-node',\n /**\n * The Edge Lite bundle layer for the API routes.\n */\n apiEdge: 'api-edge',\n /**\n * The layer for the middleware code.\n */\n middleware: 'middleware',\n /**\n * The layer for the instrumentation hooks.\n */\n instrument: 'instrument',\n /**\n * The layer for assets on the edge.\n */\n edgeAsset: 'edge-asset',\n /**\n * The browser client bundle layer for App directory.\n */\n appPagesBrowser: 'app-pages-browser',\n /**\n * The browser client bundle layer for Pages directory.\n */\n pagesDirBrowser: 'pages-dir-browser',\n /**\n * The Edge Lite bundle layer for Pages directory.\n */\n pagesDirEdge: 'pages-dir-edge',\n /**\n * The Node.js bundle layer for Pages directory.\n */\n pagesDirNode: 'pages-dir-node',\n} as const\n\nexport type WebpackLayerName =\n (typeof WEBPACK_LAYERS_NAMES)[keyof typeof WEBPACK_LAYERS_NAMES]\n\nconst WEBPACK_LAYERS = {\n ...WEBPACK_LAYERS_NAMES,\n GROUP: {\n builtinReact: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n ],\n serverOnly: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware,\n ],\n neutralTarget: [\n // pages api\n WEBPACK_LAYERS_NAMES.apiNode,\n WEBPACK_LAYERS_NAMES.apiEdge,\n ],\n clientOnly: [\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n ],\n bundled: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.shared,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware,\n ],\n appPages: [\n // app router pages and layouts\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n ],\n },\n}\n\nconst WEBPACK_RESOURCE_QUERIES = {\n edgeSSREntry: '__next_edge_ssr_entry__',\n metadata: '__next_metadata__',\n metadataRoute: '__next_metadata_route__',\n metadataImageMeta: '__next_metadata_image_meta__',\n}\n\nexport { WEBPACK_LAYERS, WEBPACK_RESOURCE_QUERIES }\n"],"names":["ACTION_SUFFIX","APP_DIR_ALIAS","CACHE_ONE_YEAR_SECONDS","DOT_NEXT_ALIAS","ESLINT_DEFAULT_DIRS","GSP_NO_RETURNED_VALUE","GSSP_COMPONENT_MEMBER_ERROR","GSSP_NO_RETURNED_VALUE","HTML_CONTENT_TYPE_HEADER","INFINITE_CACHE","INSTRUMENTATION_HOOK_FILENAME","JSON_CONTENT_TYPE_HEADER","MATCHED_PATH_HEADER","MIDDLEWARE_FILENAME","MIDDLEWARE_LOCATION_REGEXP","NEXT_BODY_SUFFIX","NEXT_CACHE_IMPLICIT_TAG_ID","NEXT_CACHE_REVALIDATED_TAGS_HEADER","NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER","NEXT_CACHE_ROOT_PARAM_TAG_ID","NEXT_CACHE_SOFT_TAG_MAX_LENGTH","NEXT_CACHE_TAGS_HEADER","NEXT_CACHE_TAG_MAX_ITEMS","NEXT_CACHE_TAG_MAX_LENGTH","NEXT_DATA_SUFFIX","NEXT_INTERCEPTION_MARKER_PREFIX","NEXT_META_SUFFIX","NEXT_NAV_DEPLOYMENT_ID_HEADER","NEXT_QUERY_PARAM_PREFIX","NEXT_RESUME_HEADER","NEXT_RESUME_STATE_LENGTH_HEADER","NON_STANDARD_NODE_ENV","PAGES_DIR_ALIAS","PRERENDER_REVALIDATE_HEADER","PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER","PROXY_FILENAME","PROXY_LOCATION_REGEXP","PUBLIC_DIR_MIDDLEWARE_CONFLICT","ROOT_DIR_ALIAS","RSC_ACTION_CLIENT_WRAPPER_ALIAS","RSC_ACTION_ENCRYPTION_ALIAS","RSC_ACTION_PROXY_ALIAS","RSC_ACTION_VALIDATE_ALIAS","RSC_CACHE_WRAPPER_ALIAS","RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS","RSC_MOD_REF_PROXY_ALIAS","RSC_SEGMENTS_DIR_SUFFIX","RSC_SEGMENT_SUFFIX","RSC_SUFFIX","SERVER_PROPS_EXPORT_ERROR","SERVER_PROPS_GET_INIT_PROPS_CONFLICT","SERVER_PROPS_SSG_CONFLICT","SERVER_RUNTIME","SSG_FALLBACK_EXPORT_ERROR","SSG_GET_INITIAL_PROPS_CONFLICT","STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR","TEXT_PLAIN_CONTENT_TYPE_HEADER","UNSTABLE_REVALIDATE_RENAME_ERROR","WEBPACK_LAYERS","WEBPACK_RESOURCE_QUERIES","WEB_SOCKET_MAX_RECONNECTIONS","edge","experimentalEdge","nodejs","WEBPACK_LAYERS_NAMES","shared","reactServerComponents","serverSideRendering","actionBrowser","apiNode","apiEdge","middleware","instrument","edgeAsset","appPagesBrowser","pagesDirBrowser","pagesDirEdge","pagesDirNode","GROUP","builtinReact","serverOnly","neutralTarget","clientOnly","bundled","appPages","edgeSSREntry","metadata","metadataRoute","metadataImageMeta"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 11922, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/lib/framework/boundary-constants.tsx"],"sourcesContent":["export const METADATA_BOUNDARY_NAME = '__next_metadata_boundary__'\nexport const VIEWPORT_BOUNDARY_NAME = '__next_viewport_boundary__'\nexport const OUTLET_BOUNDARY_NAME = '__next_outlet_boundary__'\nexport const ROOT_LAYOUT_BOUNDARY_NAME = '__next_root_layout_boundary__'\n"],"names":["METADATA_BOUNDARY_NAME","OUTLET_BOUNDARY_NAME","ROOT_LAYOUT_BOUNDARY_NAME","VIEWPORT_BOUNDARY_NAME"],"mappings":";;;;;;;;;;;;;;;;IAAaA,sBAAsB,EAAA;eAAtBA;;IAEAC,oBAAoB,EAAA;eAApBA;;IACAC,yBAAyB,EAAA;eAAzBA;;IAFAC,sBAAsB,EAAA;eAAtBA;;;AADN,MAAMH,yBAAyB;AAC/B,MAAMG,yBAAyB;AAC/B,MAAMF,uBAAuB;AAC7B,MAAMC,4BAA4B","ignoreList":[0]}}, + {"offset": {"line": 11959, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/lib/scheduler.ts"],"sourcesContent":["export type ScheduledFn = () => T | PromiseLike\nexport type SchedulerFn = (cb: ScheduledFn) => void\n\n/**\n * Schedules a function to be called on the next tick after the other promises\n * have been resolved.\n *\n * @param cb the function to schedule\n */\nexport const scheduleOnNextTick = (cb: ScheduledFn) => {\n // We use Promise.resolve().then() here so that the operation is scheduled at\n // the end of the promise job queue, we then add it to the next process tick\n // to ensure it's evaluated afterwards.\n //\n // This was inspired by the implementation of the DataLoader interface: https://github.com/graphql/dataloader/blob/d336bd15282664e0be4b4a657cb796f09bafbc6b/src/index.js#L213-L255\n //\n Promise.resolve().then(() => {\n if (process.env.NEXT_RUNTIME === 'edge') {\n setTimeout(cb, 0)\n } else {\n process.nextTick(cb)\n }\n })\n}\n\n/**\n * Schedules a function to be called using `setImmediate` or `setTimeout` if\n * `setImmediate` is not available (like in the Edge runtime).\n *\n * @param cb the function to schedule\n */\nexport const scheduleImmediate = (cb: ScheduledFn): void => {\n if (process.env.NEXT_RUNTIME === 'edge') {\n setTimeout(cb, 0)\n } else {\n setImmediate(cb)\n }\n}\n\n/**\n * returns a promise than resolves in a future task. There is no guarantee that the task it resolves in\n * will be the next task but if you await it you can at least be sure that the current task is over and\n * most usefully that the entire microtask queue of the current task has been emptied.\n */\nexport function atLeastOneTask() {\n return new Promise((resolve) => scheduleImmediate(resolve))\n}\n\n/**\n * This utility function is extracted to make it easier to find places where we are doing\n * specific timing tricks to try to schedule work after React has rendered. This is especially\n * important at the moment because Next.js uses the edge builds of React which use setTimeout to\n * schedule work when you might expect that something like setImmediate would do the trick.\n *\n * Long term we should switch to the node versions of React rendering when possible and then\n * update this to use setImmediate rather than setTimeout\n */\nexport function waitAtLeastOneReactRenderTask(): Promise {\n if (process.env.NEXT_RUNTIME === 'edge') {\n return new Promise((r) => setTimeout(r, 0))\n } else {\n return new Promise((r) => setImmediate(r))\n }\n}\n"],"names":["atLeastOneTask","scheduleImmediate","scheduleOnNextTick","waitAtLeastOneReactRenderTask","cb","Promise","resolve","then","process","env","NEXT_RUNTIME","setTimeout","nextTick","setImmediate","r"],"mappings":";;;;;;;;;;;;;;;;IA4CgBA,cAAc,EAAA;eAAdA;;IAbHC,iBAAiB,EAAA;eAAjBA;;IAtBAC,kBAAkB,EAAA;eAAlBA;;IAgDGC,6BAA6B,EAAA;eAA7BA;;;AAhDT,MAAMD,qBAAqB,CAACE;IACjC,6EAA6E;IAC7E,4EAA4E;IAC5E,uCAAuC;IACvC,EAAE;IACF,kLAAkL;IAClL,EAAE;IACFC,QAAQC,OAAO,GAAGC,IAAI,CAAC;QACrB,IAAIC,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;aAElC;YACLF,QAAQI,QAAQ,CAACR;QACnB;IACF;AACF;AAQO,MAAMH,oBAAoB,CAACG;IAChC,IAAII,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;SAElC;QACLG,aAAaT;IACf;AACF;AAOO,SAASJ;IACd,OAAO,IAAIK,QAAc,CAACC,UAAYL,kBAAkBK;AAC1D;AAWO,SAASH;IACd,IAAIK,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;SAElC;QACL,OAAO,IAAIL,QAAQ,CAACS,IAAMD,aAAaC;IACzC;AACF","ignoreList":[0]}}, + {"offset": {"line": 12024, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/after/after.ts"],"sourcesContent":["import { workAsyncStorage } from '../app-render/work-async-storage.external'\nimport { workUnitAsyncStorage } from '../app-render/work-unit-async-storage.external'\n\nexport type AfterTask = Promise | AfterCallback\nexport type AfterCallback = () => T | Promise\n\n/**\n * This function allows you to schedule callbacks to be executed after the current request finishes.\n */\nexport function after(task: AfterTask): void {\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n if (!workStore || !workUnitStore) {\n // TODO(after): the linked docs page talks about *dynamic* APIs, which after soon won't be anymore\n throw new Error(\n '`after` was called outside a request scope. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context'\n )\n }\n\n const { afterContext } = workStore\n return afterContext.after(task, workUnitStore)\n}\n"],"names":["after","task","workStore","workAsyncStorage","getStore","workUnitStore","workUnitAsyncStorage","Error","afterContext"],"mappings":";;;+BASgBA,SAAAA;;;eAAAA;;;0CATiB;8CACI;AAQ9B,SAASA,MAASC,IAAkB;IACzC,MAAMC,YAAYC,0BAAAA,gBAAgB,CAACC,QAAQ;IAC3C,MAAMC,gBAAgBC,8BAAAA,oBAAoB,CAACF,QAAQ;IAEnD,IAAI,CAACF,aAAa,CAACG,eAAe;QAChC,kGAAkG;QAClG,MAAM,IAAIE,MACR;IAEJ;IAEA,MAAM,EAAEC,YAAY,EAAE,GAAGN;IACzB,OAAOM,aAAaR,KAAK,CAACC,MAAMI;AAClC","ignoreList":[0]}}, + {"offset": {"line": 12049, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/after/index.ts"],"sourcesContent":["export * from './after'\n"],"names":[],"mappings":";;;;qBAAc,oGAAA","ignoreList":[0]}}, + {"offset": {"line": 12071, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/blocking-route-messages.ts"],"sourcesContent":["export function createRuntimeBodyError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data during prerendering.\\n\\n` +\n `\\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` accessed outside of \\`\\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-runtime`\n )\n}\n\nexport function createDynamicBodyError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data during prerendering.\\n\\n` +\n `\\`fetch(...)\\` or \\`connection()\\` accessed outside of \\`\\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [cache] Cache the data access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`\n )\n}\n\nexport function createRuntimeBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data during prerendering or a navigation.\\n\\n` +\n `\\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` accessed outside of \\`\\` prevents the route from being prerendered or the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-runtime`\n )\n}\n\nexport function createLinkBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered URL data during prerendering or a navigation.\\n\\n` +\n `\\`params\\` or \\`searchParams\\` accessed outside of \\`\\` may prevent the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-shell-url-data`\n )\n}\n\nexport function createNavigationBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`navigation()\\` during prerendering or a navigation.\\n\\n` +\n `\\`navigation()\\` called outside of \\`\\` may prevent the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the component that calls \\`navigation()\\`\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage`\n )\n}\n\nexport function createPrefetchBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`prefetch()\\` during prerendering or a navigation.\\n\\n` +\n `\\`prefetch()\\` called outside of \\`\\` may prevent the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the component that calls \\`prefetch()\\`\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage`\n )\n}\n\nexport function createDynamicBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data during prerendering or a navigation.\\n\\n` +\n `\\`fetch(...)\\` or \\`connection()\\` accessed outside of \\`\\` prevents the route from being prerendered or the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [cache] Cache the data access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`\n )\n}\n\n/**\n * NOTE: Prefer `createRuntimeBodyError` or `createDynamicBodyError`.\n * Only use this in situations like build-time static validation, where\n * we can't pinpoint a more specific reason.\n */\nexport function createDynamicOrRuntimeBodyError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data during prerendering.\\n\\n` +\n `\\`fetch(...)\\`, \\`cookies()\\`, \\`headers()\\`, \\`params\\`, \\`searchParams\\`, or \\`connection()\\` accessed outside of \\`\\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [cache] For uncached data (\\`fetch\\`, database calls): cache the access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`\n )\n}\n\nexport function createLinkMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered URL data in \\`generateMetadata()\\`.\\n\\n` +\n `This route's metadata is blocked, but the rest of its content can be prefetched. \\`params\\` or \\`searchParams\\` accessed in \\`generateMetadata()\\` prevent it from being prefetched.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static metadata export instead of \\`generateMetadata()\\`\\n` +\n ` - [dynamic] Render a marker component that calls \\`await connection()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`\n )\n}\n\nexport function createRuntimeMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data in \\`generateMetadata()\\`.\\n\\n` +\n `This route's metadata is blocked, but the rest of its content can be prerendered. \\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` accessed in \\`generateMetadata()\\` cause it to run dynamically.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static metadata export instead of \\`generateMetadata()\\`\\n` +\n ` - [dynamic] Render a marker component that calls \\`await connection()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`\n )\n}\n\nexport function createNavigationMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`navigation()\\` in \\`generateMetadata()\\`.\\n\\n` +\n `Metadata can already stream without blocking the route's UI, so delaying it until navigation may be unintentional.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [remove] Remove \\`navigation()\\` from \\`generateMetadata()\\`\\n` +\n ` - [mark] Render a marker component that calls \\`await navigation()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-metadata`\n )\n}\n\nexport function createPrefetchMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`prefetch()\\` in \\`generateMetadata()\\`.\\n\\n` +\n `Metadata can already stream without blocking the route's UI, so delaying it until a per-link prefetch or navigation may be unintentional.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [remove] Remove \\`prefetch()\\` from \\`generateMetadata()\\`\\n` +\n ` - [mark] Render a marker component that calls \\`await prefetch()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-metadata`\n )\n}\n\nexport function createDynamicMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data in \\`generateMetadata()\\`.\\n\\n` +\n `This route's metadata is blocked, but the rest of its content can be prerendered. \\`fetch(...)\\` or \\`connection()\\` accessed in \\`generateMetadata()\\` cause it to run dynamically.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] Cache the metadata with \\`\"use cache\"\\` in \\`generateMetadata()\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [dynamic] Render a marker component that calls \\`await connection()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-dynamic`\n )\n}\n\nexport function createLinkViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered URL data in \\`generateViewport()\\`.\\n\\n` +\n `\\`params\\` or \\`searchParams\\` in \\`generateViewport()\\` prevents the page from being prerendered, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static viewport export instead of \\`generateViewport()\\`\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`\n )\n}\n\nexport function createRuntimeViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data in \\`generateViewport()\\`.\\n\\n` +\n `\\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` in \\`generateViewport()\\` prevents the page from being prerendered, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static viewport export instead of \\`generateViewport()\\`\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`\n )\n}\n\nexport function createNavigationViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`navigation()\\` in \\`generateViewport()\\`.\\n\\n` +\n `This prevents Next.js from creating the App Shell, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [remove] Remove \\`navigation()\\` from \\`generateViewport()\\`\\n` +\n ` - [ignore] Set \\`export const instant = false\\` to disable validation for this segment\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-viewport`\n )\n}\n\nexport function createPrefetchViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`prefetch()\\` in \\`generateViewport()\\`.\\n\\n` +\n `This prevents Next.js from creating the App Shell, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [remove] Remove \\`prefetch()\\` from \\`generateViewport()\\`\\n` +\n ` - [ignore] Set \\`export const instant = false\\` to disable validation for this segment\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-viewport`\n )\n}\n\nexport function createDynamicViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data in \\`generateViewport()\\`.\\n\\n` +\n `\\`fetch(...)\\` or \\`connection()\\` in \\`generateViewport()\\` prevents the page from being prerendered, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] Cache the viewport data with \\`\"use cache\"\\` in \\`generateViewport()\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-dynamic`\n )\n}\n\n/**\n * NOTE: Prefer `createRuntimeViewportError` or `createDynamicViewportError`.\n * Only use this in situations like build-time static validation, where\n * we can't pinpoint a more specific reason.\n */\nexport function createDynamicOrRuntimeViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data in \\`generateViewport()\\`.\\n\\n` +\n `This prevents the page from being prerendered, leading to a slower user experience. Unlike metadata, viewport cannot be streamed behind \\`\\` because it affects the initial page load.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static viewport export instead of \\`generateViewport()\\`\\n` +\n ` - [cache] For uncached data (\\`fetch\\`, database calls): cache the viewport with \\`\"use cache\"\\` in \\`generateViewport()\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`\n )\n}\n\n/**\n * NOTE: Prefer `createRuntimeMetadataError` or `createDynamicMetadataError`.\n * Only use this in situations like build-time static validation, where\n * we can't pinpoint a more specific reason.\n */\nexport function createDynamicOrRuntimeMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data in \\`generateMetadata()\\`.\\n\\n` +\n `This route's metadata is blocked, but the rest of its content can be prerendered.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static metadata export instead of \\`generateMetadata()\\`\\n` +\n ` - [cache] Cache the metadata with \\`\"use cache\"\\` in \\`generateMetadata()\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [dynamic] Render a marker component that calls \\`await connection()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`\n )\n}\n\n//====================================================\n// Static routes (with `ensureStatic = \"navigation\"`)\n//====================================================\n\nexport function createRuntimeBodyErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but runtime data from \\`cookies()\\`, \\`headers()\\`, \\`params\\`, \\`searchParams\\`, or a short-lived cache requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [remove] Remove the data access\\n` +\n ` - [client] Read the data on the client\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-route-runtime`\n )\n}\n\nexport function createDynamicBodyErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but an uncached \\`fetch(...)\\`, database call, or \\`connection()\\` requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] Cache the data access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [remove] Remove the data access\\n` +\n ` - [client] Read the data on the client\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-route-dynamic`\n )\n}\n\nexport function createNonPrerenderableBodyErrorInStaticRoute(\n route: string\n): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but some data requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] For uncached data (\\`fetch\\`, database calls): cache the access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [remove] Remove the data access\\n` +\n ` - [client] Read the data on the client\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-route-dynamic`\n )\n}\n\nexport function createRuntimeMetadataErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data in \\`generateMetadata()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but runtime data from \\`cookies()\\`, \\`headers()\\`, \\`params\\`, \\`searchParams\\`, or a short-lived cache requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Replace the dynamic data used by \\`generateMetadata()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-metadata-runtime`\n )\n}\n\nexport function createDynamicMetadataErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data in \\`generateMetadata()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but an uncached \\`fetch(...)\\`, database call, or \\`connection()\\` requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] Cache the data used by \\`generateMetadata()\\` with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [static] Replace the dynamic data used by \\`generateMetadata()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-metadata-dynamic`\n )\n}\n\nexport function createNonPrerenderableMetadataErrorInStaticRoute(\n route: string\n): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data in \\`generateMetadata()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but some data requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] For uncached data: cache the data used by \\`generateMetadata()\\` with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [static] Replace the dynamic data used by \\`generateMetadata()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-metadata-dynamic`\n )\n}\n\nexport function createRuntimeViewportErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data in \\`generateViewport()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but runtime data from \\`cookies()\\`, \\`headers()\\`, \\`params\\`, \\`searchParams\\`, or a short-lived cache requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Replace the dynamic data used by \\`generateViewport()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-viewport-runtime`\n )\n}\n\nexport function createDynamicViewportErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data in \\`generateViewport()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but an uncached \\`fetch(...)\\`, database call, or \\`connection()\\` requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] Cache the data used by \\`generateViewport()\\` with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [static] Replace the dynamic data used by \\`generateViewport()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-viewport-dynamic`\n )\n}\n\nexport function createNonPrerenderableViewportErrorInStaticRoute(\n route: string\n): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data in \\`generateViewport()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but some data requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] For uncached data: cache the data used by \\`generateViewport()\\` with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [static] Replace the dynamic data used by \\`generateViewport()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-viewport-dynamic`\n )\n}\n\nexport function logBuildDebugHint(route: string): void {\n if (process.env.NODE_ENV !== 'development') {\n console.error(\n `To get a more detailed stack trace and pinpoint the issue, try one of the following:\\n` +\n ` - Start the app in development mode by running \\`next dev\\`, then open \"${route}\" in your browser to investigate the error.\\n` +\n ` - Rerun the production build with \\`next build --debug-prerender\\` to generate better stack traces.`\n )\n } else if (!process.env.__NEXT_DEV_SERVER) {\n console.error(\n `To debug the issue, start the app in development mode by running \\`next dev\\`, then open \"${route}\" in your browser to investigate the error.`\n )\n }\n}\n"],"names":["createDynamicBodyError","createDynamicBodyErrorInNavigation","createDynamicBodyErrorInStaticRoute","createDynamicMetadataError","createDynamicMetadataErrorInStaticRoute","createDynamicOrRuntimeBodyError","createDynamicOrRuntimeMetadataError","createDynamicOrRuntimeViewportError","createDynamicViewportError","createDynamicViewportErrorInStaticRoute","createLinkBodyErrorInNavigation","createLinkMetadataError","createLinkViewportError","createNavigationBodyErrorInNavigation","createNavigationMetadataError","createNavigationViewportError","createNonPrerenderableBodyErrorInStaticRoute","createNonPrerenderableMetadataErrorInStaticRoute","createNonPrerenderableViewportErrorInStaticRoute","createPrefetchBodyErrorInNavigation","createPrefetchMetadataError","createPrefetchViewportError","createRuntimeBodyError","createRuntimeBodyErrorInNavigation","createRuntimeBodyErrorInStaticRoute","createRuntimeMetadataError","createRuntimeMetadataErrorInStaticRoute","createRuntimeViewportError","createRuntimeViewportErrorInStaticRoute","logBuildDebugHint","route","Error","process","env","NODE_ENV","console","error","__NEXT_DEV_SERVER"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 12301, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/dynamic-rendering.ts"],"sourcesContent":["/**\n * The functions provided by this module are used to communicate certain properties\n * about the currently running code so that Next.js can make decisions on how to handle\n * the current execution in different rendering modes such as pre-rendering, resuming, and SSR.\n *\n * Today Next.js treats all code as potentially static. Certain APIs may only make sense when dynamically rendering.\n * Traditionally this meant deopting the entire render to dynamic however with PPR we can now deopt parts\n * of a React tree as dynamic while still keeping other parts static. There are really two different kinds of\n * Dynamic indications.\n *\n * The first is simply an intention to be dynamic. unstable_noStore is an example of this where\n * the currently executing code simply declares that the current scope is dynamic but if you use it\n * inside unstable_cache it can still be cached. This type of indication can be removed if we ever\n * make the default dynamic to begin with because the only way you would ever be static is inside\n * a cache scope which this indication does not affect.\n *\n * The second is an indication that a dynamic data source was read. This is a stronger form of dynamic\n * because it means that it is inappropriate to cache this at all. using a dynamic data source inside\n * unstable_cache should error. If you want to use some dynamic data inside unstable_cache you should\n * read that data outside the cache and pass it in as an argument to the cached function.\n */\n\nimport type { WorkStore } from './work-async-storage.external'\nimport type {\n RequestStore,\n WorkUnitStore,\n PrerenderStoreLegacy,\n PrerenderStoreModern,\n ValidationStoreClient,\n PrerenderStoreModernServer,\n} from './work-unit-async-storage.external'\n\n// Once postpone is in stable we should switch to importing the postpone export directly\nimport React from 'react'\n\nimport { DynamicServerError } from '../../client/components/hooks-server-context'\nimport { StaticGenBailoutError } from '../../client/components/static-generation-bailout'\nimport { getStagedRenderingController } from './work-unit-async-storage.external'\nimport { isClientHookDynamicError } from '../dynamic-rendering-utils'\nimport {\n METADATA_BOUNDARY_NAME,\n VIEWPORT_BOUNDARY_NAME,\n OUTLET_BOUNDARY_NAME,\n ROOT_LAYOUT_BOUNDARY_NAME,\n} from '../../lib/framework/boundary-constants'\nimport { scheduleOnNextTick } from '../../lib/scheduler'\nimport {\n createRuntimeBodyError,\n createDynamicBodyError,\n createRuntimeBodyErrorInNavigation,\n createNavigationBodyErrorInNavigation,\n createPrefetchBodyErrorInNavigation,\n createDynamicBodyErrorInNavigation,\n createDynamicOrRuntimeBodyError,\n createRuntimeMetadataError,\n createDynamicMetadataError,\n createRuntimeViewportError,\n createNavigationViewportError,\n createPrefetchViewportError,\n createDynamicViewportError,\n createDynamicOrRuntimeViewportError,\n createDynamicOrRuntimeMetadataError,\n logBuildDebugHint,\n createLinkBodyErrorInNavigation,\n createLinkMetadataError,\n createLinkViewportError,\n createNavigationMetadataError,\n createPrefetchMetadataError,\n createNonPrerenderableMetadataErrorInStaticRoute,\n createNonPrerenderableViewportErrorInStaticRoute,\n createNonPrerenderableBodyErrorInStaticRoute,\n createRuntimeBodyErrorInStaticRoute,\n createDynamicBodyErrorInStaticRoute,\n createRuntimeMetadataErrorInStaticRoute,\n createDynamicMetadataErrorInStaticRoute,\n createRuntimeViewportErrorInStaticRoute,\n createDynamicViewportErrorInStaticRoute,\n} from './blocking-route-messages'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport {\n INSTANT_VALIDATION_BOUNDARY_NAME,\n INSTANT_SLOT_MARKER_PREFIX,\n INSTANT_SLOT_MARKER_SUFFIX,\n} from './instant-validation/boundary-constants'\nimport {\n type ValidationBoundaryTracking,\n allRequiredBoundariesRendered,\n} from './instant-validation/boundary-tracking'\nimport type { InstantValidationSampleTracking } from './instant-validation/instant-samples'\nimport { createUnrenderedSegmentError } from '../../shared/lib/instant-messages'\nimport { getReactBrowserBailoutReason } from '../../shared/lib/lazy-dynamic/react-browser-bailout'\n\nexport type DynamicAccess = {\n /**\n * If debugging, this will contain the stack trace of where the dynamic access\n * occurred. This is used to provide more information to the user about why\n * their page is being rendered dynamically.\n */\n stack?: string\n\n /**\n * The expression that was accessed dynamically.\n */\n expression: string\n}\n\n// Stores dynamic reasons used during an RSC render.\nexport type DynamicTrackingState = {\n /**\n * When true, stack information will also be tracked during dynamic access.\n */\n readonly isDebugDynamicAccesses: boolean | undefined\n\n /**\n * The dynamic accesses that occurred during the render.\n */\n readonly dynamicAccesses: Array\n\n syncDynamicErrorWithStack: null | Error\n syncDynamicErrorWithStackPostMicrotask: boolean\n}\n\n// Stores dynamic reasons used during an SSR render.\nexport type DynamicValidationState = {\n hasSuspenseAboveBody: boolean\n hasDynamicMetadata: boolean\n dynamicMetadata: null | Error\n hasDynamicViewport: boolean\n hasAllowedDynamic: boolean\n dynamicErrors: Array\n}\n\nexport function createDynamicTrackingState(\n isDebugDynamicAccesses: boolean | undefined\n): DynamicTrackingState {\n return {\n isDebugDynamicAccesses,\n dynamicAccesses: [],\n syncDynamicErrorWithStack: null,\n syncDynamicErrorWithStackPostMicrotask: false,\n }\n}\n\nexport function createDynamicValidationState(): DynamicValidationState {\n return {\n hasSuspenseAboveBody: false,\n hasDynamicMetadata: false,\n dynamicMetadata: null,\n hasDynamicViewport: false,\n hasAllowedDynamic: false,\n dynamicErrors: [],\n }\n}\n\nfunction getPendingClientSyncDynamicError(\n clientDynamic: DynamicTrackingState\n): null | Error {\n return clientDynamic.syncDynamicErrorWithStackPostMicrotask\n ? null\n : clientDynamic.syncDynamicErrorWithStack\n}\n\nexport function getFirstDynamicReason(\n trackingState: DynamicTrackingState\n): undefined | string {\n return trackingState.dynamicAccesses[0]?.expression\n}\n\n/**\n * This function communicates that the current scope should be treated as dynamic.\n *\n * In most cases this function is a no-op but if called during\n * a PPR prerender it will postpone the current sub-tree and calling\n * it during a normal prerender will cause the entire prerender to abort\n */\nexport function markCurrentScopeAsDynamic(\n store: WorkStore,\n workUnitStore: undefined | Exclude,\n expression: string\n): void {\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'cache':\n case 'unstable-cache':\n // Inside cache scopes, marking a scope as dynamic has no effect,\n // because the outer cache scope creates a cache boundary. This is\n // subtly different from reading a dynamic data source, which is\n // forbidden inside a cache scope.\n return\n case 'private-cache':\n // A private cache scope is already dynamic by definition.\n return\n case 'prerender-legacy':\n case 'request':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n // If we're forcing dynamic rendering or we're forcing static rendering, we\n // don't need to do anything here because the entire page is already dynamic\n // or it's static and it should not throw or postpone here.\n if (store.forceDynamic || store.forceStatic) return\n\n if (store.dynamicShouldError) {\n throw new StaticGenBailoutError(\n `Route ${store.route} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`\n )\n }\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender-legacy':\n workUnitStore.revalidate = 0\n\n // We aren't prerendering, but we are generating a static page. We need\n // to bail out of static generation.\n const err = new DynamicServerError(\n `Route ${store.route} couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n store.dynamicUsageDescription = expression\n store.dynamicUsageStack = err.stack\n\n throw err\n case 'request':\n markRequestStoreAsDynamic(workUnitStore)\n break\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n}\n\n/**\n * This function is meant to be used when prerendering without cacheComponents or PPR.\n * When called during a build it will cause Next.js to consider the route as dynamic.\n *\n * @internal\n */\nexport function throwToInterruptStaticGeneration(\n expression: string,\n store: WorkStore,\n prerenderStore: PrerenderStoreLegacy\n): never {\n // We aren't prerendering but we are generating a static page. We need to bail out of static generation\n const err = new DynamicServerError(\n `Route ${store.route} couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n\n prerenderStore.revalidate = 0\n\n store.dynamicUsageDescription = expression\n store.dynamicUsageStack = err.stack\n\n throw err\n}\n\n/**\n * This function should be used to track whether something dynamic happened even when\n * we are in a dynamic render. This is useful for Dev where all renders are dynamic but\n * we still track whether dynamic APIs were accessed for helpful messaging\n *\n * @internal\n */\nexport function trackDynamicDataInDynamicRender(workUnitStore: WorkUnitStore) {\n switch (workUnitStore.type) {\n case 'cache':\n case 'unstable-cache':\n // Inside cache scopes, marking a scope as dynamic has no effect,\n // because the outer cache scope creates a cache boundary. This is\n // subtly different from reading a dynamic data source, which is\n // forbidden inside a cache scope.\n return\n case 'private-cache':\n // A private cache scope is already dynamic by definition.\n return\n case 'prerender':\n case 'prerender-runtime':\n case 'prerender-legacy':\n case 'prerender-client':\n case 'validation-client':\n case 'build-time-generator':\n break\n case 'request':\n markRequestStoreAsDynamic(workUnitStore)\n break\n default:\n workUnitStore satisfies never\n }\n}\n\nfunction markRequestStoreAsDynamic(requestStore: RequestStore): void {\n if (process.env.__NEXT_DEV_SERVER && requestStore.phase === 'render') {\n requestStore.usedDynamic = true\n }\n}\n\nfunction abortOnSynchronousDynamicDataAccess(\n route: string,\n expression: string,\n prerenderStore: PrerenderStoreModern\n): void {\n const reason = `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`\n\n const error = createPrerenderInterruptedError(reason)\n\n prerenderStore.controller.abort(error)\n\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n // When we aren't debugging, we don't need to create another error for the\n // stack trace.\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n}\n\nexport function abortOnSynchronousPlatformIOAccess(\n route: string,\n expression: string,\n errorWithStack: Error,\n prerenderStore: PrerenderStoreModern\n): void {\n const dynamicTracking = prerenderStore.dynamicTracking\n\n if (dynamicTracking && dynamicTracking.syncDynamicErrorWithStack === null) {\n dynamicTracking.syncDynamicErrorWithStack = errorWithStack\n // React completes the task that is currently rendering before scheduled\n // abort cleanup. Client tracking can attribute the sync IO only during\n // that current task; server tracking keeps the error regardless.\n queueMicrotask(() => {\n dynamicTracking.syncDynamicErrorWithStackPostMicrotask = true\n })\n }\n\n abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore)\n}\n\n/**\n * use this function when prerendering with cacheComponents. If we are doing a\n * prospective prerender we don't actually abort because we want to discover\n * all caches for the shell. If this is the actual prerender we do abort.\n *\n * This function accepts a prerenderStore but the caller should ensure we're\n * actually running in cacheComponents mode.\n *\n * @internal\n */\nexport function abortAndThrowOnSynchronousRequestDataAccess(\n route: string,\n expression: string,\n errorWithStack: Error,\n prerenderStore: PrerenderStoreModern\n): never {\n const prerenderSignal = prerenderStore.controller.signal\n if (prerenderSignal.aborted === false) {\n // TODO it would be better to move this aborted check into the callsite so we can avoid making\n // the error object when it isn't relevant to the aborting of the prerender however\n // since we need the throw semantics regardless of whether we abort it is easier to land\n // this way. See how this was handled with `abortOnSynchronousPlatformIOAccess` for a closer\n // to ideal implementation\n abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore)\n // Preserve the exact server-side dynamic access for final validation after\n // interrupting this render.\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n if (dynamicTracking.syncDynamicErrorWithStack === null) {\n dynamicTracking.syncDynamicErrorWithStack = errorWithStack\n }\n }\n }\n throw createPrerenderInterruptedError(\n `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`\n )\n}\n\nconst NEXT_PRERENDER_INTERRUPTED = 'NEXT_PRERENDER_INTERRUPTED'\n\nfunction createPrerenderInterruptedError(message: string): Error {\n const error = new Error(message)\n ;(error as any).digest = NEXT_PRERENDER_INTERRUPTED\n return error\n}\n\ntype DigestError = Error & {\n digest: string\n}\n\nexport function isPrerenderInterruptedError(\n error: unknown\n): error is DigestError {\n return (\n typeof error === 'object' &&\n error !== null &&\n (error as any).digest === NEXT_PRERENDER_INTERRUPTED &&\n 'name' in error &&\n 'message' in error &&\n error instanceof Error\n )\n}\n\nexport function accessedDynamicData(\n dynamicAccesses: Array\n): boolean {\n return dynamicAccesses.length > 0\n}\n\nexport function consumeDynamicAccess(\n serverDynamic: DynamicTrackingState,\n clientDynamic: DynamicTrackingState\n): DynamicTrackingState['dynamicAccesses'] {\n // We mutate because we only call this once we are no longer writing\n // to the dynamicTrackingState and it's more efficient than creating a new\n // array.\n serverDynamic.dynamicAccesses.push(...clientDynamic.dynamicAccesses)\n return serverDynamic.dynamicAccesses\n}\n\nexport function formatDynamicAPIAccesses(\n dynamicAccesses: Array\n): string[] {\n return dynamicAccesses\n .filter(\n (access): access is Required =>\n typeof access.stack === 'string' && access.stack.length > 0\n )\n .map(({ expression, stack }) => {\n stack = stack\n .split('\\n')\n // Remove the \"Error: \" prefix from the first line of the stack trace as\n // well as the first 4 lines of the stack trace which is the distance\n // from the user code and the `new Error().stack` call.\n .slice(4)\n .filter((line) => {\n // Exclude Next.js internals from the stack trace.\n if (line.includes('node_modules/next/')) {\n return false\n }\n\n // Exclude anonymous functions from the stack trace.\n if (line.includes(' ()')) {\n return false\n }\n\n // Exclude Node.js internals from the stack trace.\n if (line.includes(' (node:')) {\n return false\n }\n\n return true\n })\n .join('\\n')\n return `Dynamic API Usage Debug - ${expression}:\\n${stack}`\n })\n}\n\n/**\n * In a prerender, we may end up with hanging Promises as inputs due them\n * stalling on connection() or because they're loading dynamic data. In that\n * case we need to abort the encoding of arguments since they'll never complete.\n */\nexport function createHangingInputAbortSignal(\n workUnitStore: PrerenderStoreModernServer\n): AbortSignal\nexport function createHangingInputAbortSignal(\n workUnitStore: WorkUnitStore\n): AbortSignal | undefined\nexport function createHangingInputAbortSignal(\n workUnitStore: WorkUnitStore\n): AbortSignal | undefined {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-runtime':\n const controller = new AbortController()\n\n if (workUnitStore.cacheSignal) {\n // If we have a cacheSignal it means we're in a prospective render. If\n // the input we're waiting on is coming from another cache, we do want\n // to wait for it so that we can resolve this cache entry too.\n workUnitStore.cacheSignal.inputReady().then(() => {\n controller.abort()\n })\n } else {\n // Otherwise we're in the final render and we should already have all\n // our caches filled.\n // If the prerender uses stages, we have wait until the final stage.\n // if an input didn't resolve at that point, then we can assume it never will.\n //\n // We might still be waiting on some microtasks so we\n // wait one tick before giving up. When we give up, we still want to\n // render the content of this cache as deeply as we can so that we can\n // suspend as deeply as possible in the tree or not at all if we don't\n // end up waiting for the input.\n\n const stagedRendering = getStagedRenderingController(workUnitStore)\n if (stagedRendering && stagedRendering.finalStage !== null) {\n stagedRendering\n .waitForStage(stagedRendering.finalStage)\n .then(() => scheduleOnNextTick(() => controller.abort()), noop)\n } else {\n scheduleOnNextTick(() => controller.abort())\n }\n }\n\n return controller.signal\n case 'prerender-client':\n case 'validation-client':\n case 'prerender-legacy':\n case 'request':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n return undefined\n default:\n workUnitStore satisfies never\n }\n}\n\nfunction noop() {}\n\nexport function annotateDynamicAccess(\n expression: string,\n prerenderStore: PrerenderStoreModern | ValidationStoreClient\n) {\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n}\n\nconst hasSuspenseRegex = /\\n\\s+at Suspense \\(\\)/\n\n// Common implicit body tags that React will treat as body when placed directly in html\nconst bodyAndImplicitTags =\n 'body|div|main|section|article|aside|header|footer|nav|form|p|span|h1|h2|h3|h4|h5|h6'\n\n// Detects when RootLayoutBoundary (our framework marker component) appears\n// after Suspense in the component stack, indicating the root layout is wrapped\n// within a Suspense boundary. Ensures no body/html/implicit-body components are in between.\n//\n// Example matches:\n// at Suspense ()\n// at __next_root_layout_boundary__ ()\n//\n// Or with other components in between (but not body/html/implicit-body):\n// at Suspense ()\n// at SomeComponent ()\n// at __next_root_layout_boundary__ ()\nconst hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex = new RegExp(\n `\\\\n\\\\s+at Suspense \\\\(\\\\)(?:(?!\\\\n\\\\s+at (?:${bodyAndImplicitTags}) \\\\(\\\\))[\\\\s\\\\S])*?\\\\n\\\\s+at ${ROOT_LAYOUT_BOUNDARY_NAME} \\\\([^\\\\n]*\\\\)`\n)\n\nconst hasMetadataRegex = new RegExp(\n `\\\\n\\\\s+at ${METADATA_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst hasViewportRegex = new RegExp(\n `\\\\n\\\\s+at ${VIEWPORT_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst hasOutletRegex = new RegExp(`\\\\n\\\\s+at ${OUTLET_BOUNDARY_NAME}[\\\\n\\\\s]`)\n\nconst hasInstantValidationBoundaryRegex = new RegExp(\n `\\\\n\\\\s+at ${INSTANT_VALIDATION_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst slotMarkerRegex = new RegExp(\n `\\\\n\\\\s+at ${INSTANT_SLOT_MARKER_PREFIX}(\\\\d+)${INSTANT_SLOT_MARKER_SUFFIX}[\\\\n\\\\s]`\n)\n\n/** Look up the config factory for the slot this error belongs to.\n * Checks the component stack for a slot marker (__next_instant_slot_N__)\n * and returns the config at that index. Falls back to index 0 (root\n * config) when no slot marker is found or the slot has no config. */\nfunction resolveInstantStack(\n componentStack: string,\n dynamicValidation: InstantValidationState\n): (() => Error) | null {\n const { slotStacks } = dynamicValidation\n if (slotStacks.length > 1) {\n const match = slotMarkerRegex.exec(componentStack)\n if (match) {\n // Slot markers are 0-indexed in the component name but\n // slotStacks is 1-indexed (index 0 is the root config).\n const slotIndex = parseInt(match[1], 10) + 1\n const slotStack = slotStacks[slotIndex]\n if (slotStack != null) {\n return slotStack\n }\n }\n }\n // Fall back to root config (index 0)\n return slotStacks[0] ?? null\n}\n\n/**\n * Inspects the component stack of an outlet boundary to discover whether the\n * user placed a Suspense boundary above the document body, and records the\n * opt-in on `dynamicValidation.hasSuspenseAboveBody` if so.\n *\n * The outlet itself isn't a meaningful source of dynamic — it only resolves\n * when metadata/viewport are dynamic, which we track via their own boundaries.\n * However, the outlet renders alongside the page content, so its stack passes\n * through the user's layout chain (typically reaching into `` via the\n * root layout). That makes the outlet stack our best opportunity to spot a\n * Suspense boundary above the body, even when no real body content is dynamic.\n * Without this, a route whose only dynamic source is `generateViewport()` would\n * miss the Suspense-above-body opt-in, because the viewport's stack lives in\n * the head and never sees the user's root layout.\n *\n * We deliberately only set `hasSuspenseAboveBody`, not `hasAllowedDynamic`. The\n * latter tracks whether the body has dynamic content that's been wrapped in\n * Suspense (i.e., the page is partially dynamic). The outlet rendering tells us\n * about the structural opt-in for an empty shell, not about the body being\n * partially dynamic. The distinction matters because dynamic metadata is only\n * acceptable when the page is partially dynamic (via real body holes), and we\n * don't want this outlet-based detection to mask that case.\n */\nfunction trackOutletSuspenseAboveBody(\n componentStack: string,\n dynamicValidation: DynamicValidationState\n): void {\n if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n dynamicValidation.hasSuspenseAboveBody = true\n }\n}\n\nexport function trackDynamicAccessInStaticRoute(\n dynamicReason: unknown,\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n clientDynamic: DynamicTrackingState,\n isServerPartial: boolean,\n kind: StaticValidationHoleKind\n) {\n const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic)\n\n if (hasOutletRegex.test(componentStack)) {\n trackOutletSuspenseAboveBody(componentStack, dynamicValidation)\n return\n }\n if (hasMetadataRegex.test(componentStack)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(\n createMetadataErrorInStaticRoute(kind, workStore.route),\n componentStack,\n null\n )\n )\n return\n }\n if (hasViewportRegex.test(componentStack)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(\n createViewportErrorInStaticRoute(kind, workStore.route),\n componentStack,\n null\n )\n )\n return\n }\n\n let hasSuspense = false\n if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n // this error had a Suspense boundary above it, and it's above the body as well.\n dynamicValidation.hasSuspenseAboveBody = true\n hasSuspense = true\n } else if (hasSuspenseRegex.test(componentStack)) {\n // this error had a Suspense boundary above it.\n hasSuspense = true\n }\n\n if (hasSuspense) {\n if (!isServerPartial) {\n // If we don't have holes caused by server data, then any holes must be caused\n // by client-only code, which is allowed.\n dynamicValidation.hasAllowedDynamic = true\n return\n }\n\n // We have holes that may be caused by server data.\n if (syncDynamicError || isClientHookDynamicError(dynamicReason)) {\n // We know this hole wasn't caused by server data, so it's allowed\n // (because it's wrapped in a Suspense)\n dynamicValidation.hasAllowedDynamic = true\n return\n }\n\n // Any remaining hole may be caused by a server hole.\n // These are not allowed even with Suspense.\n // (NOTE: this may misreport valid client dynamic holes as server holes)\n dynamicValidation.dynamicErrors.push(\n addErrorContext(\n createBodyErrorInStaticRoute(kind, workStore.route),\n componentStack,\n null\n )\n )\n return\n }\n\n if (syncDynamicError) {\n dynamicValidation.dynamicErrors.push(syncDynamicError)\n return\n }\n\n if (isClientHookDynamicError(dynamicReason)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(dynamicReason, componentStack, null)\n )\n return\n }\n\n const error = addErrorContext(\n isServerPartial\n ? // This hole may be caused by server data.\n // (NOTE: this may misreport client dynamic holes as server holes)\n createBodyErrorInStaticRoute(kind, workStore.route)\n : // TODO(ensure-static): this could be something client-specific because we know\n // that server data is complete\n createBodyError(kind, workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicErrors.push(error)\n}\n\nexport function trackAllowedDynamicAccess(\n dynamicReason: unknown,\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n clientDynamic: DynamicTrackingState\n) {\n const dynamicHoleKind = DynamicHoleKind.RuntimeOrDynamic\n\n const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic)\n\n if (hasOutletRegex.test(componentStack)) {\n trackOutletSuspenseAboveBody(componentStack, dynamicValidation)\n return\n } else if (hasMetadataRegex.test(componentStack)) {\n dynamicValidation.hasDynamicMetadata = true\n return\n } else if (hasViewportRegex.test(componentStack)) {\n dynamicValidation.hasDynamicViewport = true\n return\n } else if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule.\n // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense\n // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering.\n dynamicValidation.hasAllowedDynamic = true\n dynamicValidation.hasSuspenseAboveBody = true\n return\n } else if (hasSuspenseRegex.test(componentStack)) {\n // this error had a Suspense boundary above it so we don't need to report it as a source\n // of disallowed\n dynamicValidation.hasAllowedDynamic = true\n return\n } else if (syncDynamicError) {\n dynamicValidation.dynamicErrors.push(syncDynamicError)\n return\n }\n\n if (isClientHookDynamicError(dynamicReason)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(dynamicReason, componentStack, null)\n )\n return\n }\n\n const error = addErrorContext(\n createBodyError(dynamicHoleKind, workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n}\n\nexport enum DynamicHoleKind {\n /** We know that this hole is caused by runtime data. */\n Runtime = 1,\n /** We know that this hole is caused by link data. */\n Link = 2,\n /** We know that this hole is caused by navigation(). */\n Navigation = 3,\n /** We know that this hole is caused by prefetch(). */\n Prefetch = 4,\n /** We know that this hole is caused by dynamic data. */\n Dynamic = 5,\n /** We know that this hole is caused by runtime or dynamic data, but don't know which. */\n RuntimeOrDynamic = 6,\n}\n\n// In Instant Validation we can always discriminate between runtime and dynamic.\nexport type InstantValidationHoleKind = Exclude<\n DynamicHoleKind,\n DynamicHoleKind.RuntimeOrDynamic\n>\n\nexport type StaticValidationHoleKind =\n // During dev-time static validation we can discriminate runtime and dynamic.\n | DynamicHoleKind.Runtime\n | DynamicHoleKind.Dynamic\n // During build-time static validation we can't discriminate runtime and dynamic.\n | DynamicHoleKind.RuntimeOrDynamic\n\n/** Stores dynamic reasons used during an SSR render in instant validation. */\nexport type InstantValidationState = {\n hasDynamicMetadata: boolean\n hasAllowedClientDynamicAboveBoundary: boolean\n dynamicMetadata: null | Error\n hasDynamicViewport: boolean\n hasAllowedDynamic: boolean\n dynamicErrors: Array\n validationPreventingErrors: Array\n thrownErrorsOutsideBoundary: Array\n /** Per-slot config factories. Index 0 is the root config (fallback).\n * Indices 1+ correspond to slot marker components in the tree. */\n slotStacks: Array<(() => Error) | null>\n}\n\nexport function createInstantValidationState(\n slotStacks: Array<(() => Error) | null>\n): InstantValidationState {\n return {\n hasDynamicMetadata: false,\n hasAllowedClientDynamicAboveBoundary: false,\n dynamicMetadata: null,\n hasDynamicViewport: false,\n hasAllowedDynamic: false,\n dynamicErrors: [],\n validationPreventingErrors: [],\n thrownErrorsOutsideBoundary: [],\n slotStacks,\n }\n}\n\nexport function trackDynamicHoleInNavigation(\n dynamicReason: unknown,\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: InstantValidationState,\n clientDynamic: DynamicTrackingState,\n kind: InstantValidationHoleKind,\n boundaryState: ValidationBoundaryTracking\n) {\n const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic)\n\n if (hasOutletRegex.test(componentStack)) {\n // We don't need to track that this is dynamic. It is only so when something else is also dynamic.\n return\n }\n // Resolve the config stack for this specific error. If the error\n // is inside a slot marker, use that slot's config. Otherwise fall\n // back to the default.\n const effectiveCreateInstantStack = resolveInstantStack(\n componentStack,\n dynamicValidation\n )\n\n if (hasMetadataRegex.test(componentStack)) {\n const error = addErrorContext(\n createMetadataError(kind, workStore.route),\n componentStack,\n effectiveCreateInstantStack\n )\n dynamicValidation.dynamicMetadata = error\n return\n }\n if (hasViewportRegex.test(componentStack)) {\n const error = addErrorContext(\n createViewportError(kind, workStore.route),\n componentStack,\n effectiveCreateInstantStack\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n }\n\n const boundaryLocation =\n hasInstantValidationBoundaryRegex.exec(componentStack)\n if (!boundaryLocation) {\n // We don't see the validation boundary in the component stack,\n // so this hole must be coming from a shared parent.\n // Shared parents are fully resolved and don't have RSC holes,\n // but they can still suspend in a client component during SSR.\n\n // If we managed to render all the validation boundaries, that means\n // that the client holes aren't blocking validation and we can disregard them.\n // Note that we don't even care whether they have suspense or not.\n if (allRequiredBoundariesRendered(boundaryState)) {\n dynamicValidation.hasAllowedClientDynamicAboveBoundary = true\n dynamicValidation.hasAllowedDynamic = true // Holes outside the boundary contribute to allowing dynamic metadata\n return\n } else {\n // TODO(instant-validation) TODO(NAR-787)\n // If shared parents blocked us from validating, we should only log\n // the errors from the innermost (segments), i.e. omit layouts whose\n // slots managed to render (because clearly they didn't block validation)\n const message = `Route \"${workStore.route}\": Could not validate \\`instant\\` because a Client Component in a parent segment prevented the page from rendering.`\n const error = addErrorContext(\n new Error(message),\n componentStack,\n effectiveCreateInstantStack\n )\n dynamicValidation.validationPreventingErrors.push(error)\n return\n }\n } else {\n // The hole originates inside the validation boundary.\n //\n // Check if we have a Suspense above the hole, but below the validation boundary.\n // If we do, then this dynamic usage wouldn't block a navigation to this subtree.\n // Conversely, if the nearest suspense is above the validation boundary, then this subtree would block.\n //\n // Note that in the component stack, children come before parents.\n //\n // Valid:\n // ...\n // at Suspense\n // ...\n // at __next_prefetch_validation_boundary__\n //\n // Invalid:\n // ...\n // at __next_prefetch_validation_boundary__\n // ...\n // at Suspense\n //\n const suspenseLocation = hasSuspenseRegex.exec(componentStack)\n if (suspenseLocation) {\n if (suspenseLocation.index < boundaryLocation.index) {\n dynamicValidation.hasAllowedDynamic = true\n return\n } else {\n // invalid - fallthrough\n }\n }\n }\n\n if (syncDynamicError) {\n if (\n effectiveCreateInstantStack !== null &&\n syncDynamicError.cause === undefined\n ) {\n syncDynamicError.cause = effectiveCreateInstantStack()\n }\n dynamicValidation.dynamicErrors.push(syncDynamicError)\n return\n }\n\n if (isClientHookDynamicError(dynamicReason)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(\n dynamicReason,\n componentStack,\n effectiveCreateInstantStack\n )\n )\n return\n }\n\n const error = addErrorContext(\n createBodyErrorInNavigation(kind, workStore.route),\n componentStack,\n effectiveCreateInstantStack\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n}\n\nfunction createBodyError(kind: StaticValidationHoleKind, route: string): Error {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeBodyError(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicBodyError(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createDynamicOrRuntimeBodyError(route)\n }\n}\n\nfunction createBodyErrorInNavigation(\n kind: InstantValidationHoleKind,\n route: string\n): Error {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeBodyErrorInNavigation(route)\n case DynamicHoleKind.Link:\n return createLinkBodyErrorInNavigation(route)\n case DynamicHoleKind.Navigation:\n return createNavigationBodyErrorInNavigation(route)\n case DynamicHoleKind.Prefetch:\n return createPrefetchBodyErrorInNavigation(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicBodyErrorInNavigation(route)\n }\n}\n\nfunction createMetadataError(kind: DynamicHoleKind, route: string): Error {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeMetadataError(route)\n case DynamicHoleKind.Link:\n return createLinkMetadataError(route)\n case DynamicHoleKind.Navigation:\n return createNavigationMetadataError(route)\n case DynamicHoleKind.Prefetch:\n return createPrefetchMetadataError(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicMetadataError(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createDynamicOrRuntimeMetadataError(route)\n }\n}\n\nfunction createViewportError(kind: DynamicHoleKind, route: string): Error {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeViewportError(route)\n case DynamicHoleKind.Link:\n return createLinkViewportError(route)\n case DynamicHoleKind.Navigation:\n return createNavigationViewportError(route)\n case DynamicHoleKind.Prefetch:\n return createPrefetchViewportError(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicViewportError(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createDynamicOrRuntimeViewportError(route)\n }\n}\n\nfunction createBodyErrorInStaticRoute(\n kind: StaticValidationHoleKind,\n route: string\n): Error {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeBodyErrorInStaticRoute(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicBodyErrorInStaticRoute(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createNonPrerenderableBodyErrorInStaticRoute(route)\n }\n}\n\nfunction createMetadataErrorInStaticRoute(\n kind: StaticValidationHoleKind,\n route: string\n) {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeMetadataErrorInStaticRoute(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicMetadataErrorInStaticRoute(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createNonPrerenderableMetadataErrorInStaticRoute(route)\n }\n}\n\nfunction createViewportErrorInStaticRoute(\n kind: StaticValidationHoleKind,\n route: string\n) {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeViewportErrorInStaticRoute(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicViewportErrorInStaticRoute(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createNonPrerenderableViewportErrorInStaticRoute(route)\n }\n}\n\nexport function trackThrownErrorInNavigation(\n workStore: WorkStore,\n dynamicValidation: InstantValidationState,\n thrownValue: unknown,\n componentStack: string,\n reactBrowserBailout: boolean\n) {\n const boundaryLocation =\n hasInstantValidationBoundaryRegex.exec(componentStack)\n if (!boundaryLocation) {\n // There's no validation boundary on the component stack.\n // This error may have blocked a boundary from rendering.\n\n // Wrap the error to provide component context.\n // This helps for errors from node_modules which would otherwise\n // have no useful stack information due to ignore-listing,\n // e.g. next/dynamic with `ssr: false`.\n if (reactBrowserBailout) {\n // React preserves Next's branded bailout reason as the error cause.\n // Replace the internal wrapper before storing the user-facing diagnostic.\n const browserBailoutReason = getReactBrowserBailoutReason(thrownValue)\n if (browserBailoutReason !== undefined) {\n const browserBailoutError = thrownValue as Error\n browserBailoutError.cause = browserBailoutReason\n }\n }\n\n const error = addErrorContext(\n new Error(\n 'An error occurred while attempting to validate instant UI. This error may be preventing the validation from completing.',\n { cause: thrownValue }\n ),\n componentStack,\n null\n )\n dynamicValidation.thrownErrorsOutsideBoundary.push(error)\n } else {\n // There's validation boundary on the component stack,\n // so we know this error didn't block a validation boundary from rendering.\n // However, this error might be hiding be hiding dynamic content that would\n // cause validation to fail.\n const suspenseLocation = hasSuspenseRegex.exec(componentStack)\n if (suspenseLocation) {\n if (suspenseLocation.index < boundaryLocation.index) {\n // There's a Suspense below the validation boundary but above this error's location.\n // This subtree can't fail instant validation because any potential\n // dynamic holes would be guarded by the Suspense anyway,\n // so we can allow this.\n return\n } else {\n // invalid - fallthrough\n }\n }\n if (reactBrowserBailout) {\n // React preserves Next's branded bailout reason as the error cause.\n // Replace the internal wrapper before storing the user-facing diagnostic.\n const browserBailoutReason = getReactBrowserBailoutReason(thrownValue)\n if (browserBailoutReason !== undefined) {\n const browserBailoutError = thrownValue as Error\n browserBailoutError.cause = browserBailoutReason\n }\n }\n\n const message = `Route \"${workStore.route}\": Could not validate \\`instant\\` because an error prevented the target segment from rendering.`\n const error = addErrorContext(\n new Error(message, { cause: thrownValue }),\n componentStack,\n null // TODO(instant-validation-build): conflicting use of cause\n )\n dynamicValidation.validationPreventingErrors.push(error)\n }\n}\n\nexport function trackDynamicHoleInStaticShell(\n dynamicReason: unknown,\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n clientDynamic: DynamicTrackingState,\n kind: DynamicHoleKind.Runtime | DynamicHoleKind.Dynamic\n) {\n const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic)\n\n if (hasOutletRegex.test(componentStack)) {\n trackOutletSuspenseAboveBody(componentStack, dynamicValidation)\n return\n } else if (hasMetadataRegex.test(componentStack)) {\n const error = addErrorContext(\n createMetadataError(kind, workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicMetadata = error\n return\n } else if (hasViewportRegex.test(componentStack)) {\n const error = addErrorContext(\n createViewportError(kind, workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n } else if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule.\n // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense\n // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering.\n dynamicValidation.hasAllowedDynamic = true\n dynamicValidation.hasSuspenseAboveBody = true\n return\n } else if (hasSuspenseRegex.test(componentStack)) {\n // this error had a Suspense boundary above it so we don't need to report it as a source\n // of disallowed\n dynamicValidation.hasAllowedDynamic = true\n return\n } else if (syncDynamicError) {\n dynamicValidation.dynamicErrors.push(syncDynamicError)\n return\n }\n\n if (isClientHookDynamicError(dynamicReason)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(dynamicReason, componentStack, null)\n )\n return\n }\n\n const error = addErrorContext(\n kind === DynamicHoleKind.Runtime\n ? createRuntimeBodyError(workStore.route)\n : createDynamicBodyError(workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n}\n\n/**\n * In dev mode, we prefer using the owner stack, otherwise the provided\n * component stack is used.\n */\nfunction addErrorContext(\n error: Error,\n componentStack: string,\n createInstantStack: (() => Error) | null\n) {\n const ownerStack =\n process.env.NODE_ENV !== 'production' && React.captureOwnerStack\n ? React.captureOwnerStack()\n : null\n\n if (createInstantStack !== null) {\n error.cause = createInstantStack()\n }\n // TODO go back to owner stack here if available. This is temporarily using componentStack to get the right\n //\n error.stack =\n error.name + ': ' + error.message + (ownerStack || componentStack)\n return error\n}\n\nexport enum PreludeState {\n Full = 0,\n Empty = 1,\n Errored = 2,\n}\n\nexport function logDisallowedDynamicError(\n workStore: WorkStore,\n error: Error\n): void {\n console.error(error)\n logBuildDebugHint(workStore.route)\n}\n\nexport function throwIfSyncIOUsed(\n workStore: WorkStore,\n serverDynamic: DynamicTrackingState\n) {\n if (serverDynamic.syncDynamicErrorWithStack) {\n logDisallowedDynamicError(\n workStore,\n serverDynamic.syncDynamicErrorWithStack\n )\n throw new StaticGenBailoutError()\n }\n}\n\nexport function throwIfDisallowedDynamic(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: DynamicValidationState,\n serverDynamic: DynamicTrackingState,\n allowEmptyStaticShell: boolean\n): void {\n const dynamicHoleKind = DynamicHoleKind.RuntimeOrDynamic\n\n throwIfSyncIOUsed(workStore, serverDynamic)\n\n // The dynamic metadata error is a mistake-detection signal. It fires when the\n // rest of the shell is otherwise fully static apart from metadata, suggesting\n // the dynamic data access in `generateMetadata` was probably unintentional.\n // That condition is independent of whether the user or build phase accepted\n // an empty shell, so we surface it before any opt-in bypass.\n if (\n prelude === PreludeState.Full &&\n dynamicValidation.hasAllowedDynamic === false &&\n dynamicValidation.hasDynamicMetadata\n ) {\n console.error(createMetadataError(dynamicHoleKind, workStore.route).message)\n throw new StaticGenBailoutError()\n }\n\n // Either flag expresses \"this shell is allowed to be empty/blocking\":\n // - `allowEmptyStaticShell` covers `instant = false` (user opt-in)\n // and the build-phase fallback-shell case.\n // - `hasSuspenseAboveBody` is the structural opt-in inside the user's root\n // layout.\n // Treat them as synonyms for the purpose of bypassing shell-failure errors.\n if (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody) {\n return\n }\n\n if (prelude !== PreludeState.Full) {\n // We didn't have any sync bailouts but there may be user code which\n // blocked the root. We would have captured these during the prerender\n // and can log them here and then terminate the build/validating render\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n for (let i = 0; i < dynamicErrors.length; i++) {\n logDisallowedDynamicError(workStore, dynamicErrors[i])\n }\n\n throw new StaticGenBailoutError()\n }\n\n // If we got this far then the only other thing that could be blocking\n // the root is dynamic Viewport. If this is dynamic then\n // you need to opt into that by adding a Suspense boundary above the body\n // to indicate your are ok with fully dynamic rendering.\n if (dynamicValidation.hasDynamicViewport) {\n console.error(\n createViewportError(dynamicHoleKind, workStore.route).message\n )\n throw new StaticGenBailoutError()\n }\n\n if (prelude === PreludeState.Empty) {\n // If we ever get this far then we messed up the tracking of invalid dynamic.\n // We still adhere to the constraint that you must produce a shell but invite the\n // user to report this as a bug in Next.js.\n console.error(\n `Route \"${workStore.route}\" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`\n )\n throw new StaticGenBailoutError()\n }\n }\n}\n\nexport function throwIfDisallowedDynamicInStaticRoute(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: DynamicValidationState,\n serverDynamic: DynamicTrackingState,\n isFallbackShell: boolean,\n allowEmptyStaticShell: boolean,\n isServerPartial: boolean\n): void {\n const reasons = getDisallowedReasonsInStaticRoute(\n workStore,\n prelude,\n dynamicValidation,\n serverDynamic,\n isFallbackShell,\n allowEmptyStaticShell,\n isServerPartial\n )\n if (reasons.length > 0) {\n for (const reason of reasons) {\n logDisallowedDynamicError(workStore, reason)\n }\n throw new StaticGenBailoutError()\n }\n}\n\nexport function getDisallowedReasonsInStaticRoute(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: DynamicValidationState,\n serverDynamic: DynamicTrackingState | null,\n isFallbackShell: boolean,\n allowEmptyStaticShell: boolean,\n isServerPartial: boolean\n): Error[] {\n if (serverDynamic && serverDynamic.syncDynamicErrorWithStack) {\n return [serverDynamic.syncDynamicErrorWithStack]\n }\n\n // We do a fallback shell prerender, but it's not meant to be validated --\n // we just need it to create the relevant prerender outputs.\n if (isFallbackShell) {\n return []\n }\n\n // Suspense-above-body and `instant = false` bypass reporting\n // that the shell is blocked. However, if we have non-prerenderable server\n // data, we still have to error, regardless of those two.\n if (\n !isServerPartial &&\n (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody)\n ) {\n return []\n }\n\n const { dynamicErrors } = dynamicValidation\n if (dynamicErrors.length > 0) {\n return dynamicErrors\n }\n\n // Dynamic data may have been passed into a client component without calling `use()`,\n // in which case we wouldn't see it during the prerender, but still need to error.\n // Fall back to a generic error message.\n if (isServerPartial) {\n return [\n new Error(\n `Route \"${workStore.route}\": Next.js encountered data that is not available during a static prerender, but is unable to provide a location.`\n ),\n ]\n }\n\n if (prelude === PreludeState.Empty || prelude === PreludeState.Errored) {\n // We've somehow ended up with an empty prelude but no dynamic errors.\n // We must've messed up the tracking somehow.\n return [\n new InvariantError(\n `Route \"${workStore.route}\" did not produce a static shell and Next.js was unable to determine a reason.`\n ),\n ]\n }\n return []\n}\n\nexport function getStaticShellDisallowedDynamicReasons(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: DynamicValidationState,\n allowEmptyStaticShell: boolean\n): Array {\n // The dynamic metadata error is a mistake-detection signal. It fires when the\n // rest of the shell is otherwise fully static apart from metadata, suggesting\n // the dynamic data access in `generateMetadata` was probably unintentional.\n // That condition is independent of whether the user or build phase accepted\n // an empty shell, so we surface it before any opt-in bypass.\n if (\n prelude === PreludeState.Full &&\n dynamicValidation.hasAllowedDynamic === false &&\n dynamicValidation.dynamicErrors.length === 0 &&\n dynamicValidation.dynamicMetadata\n ) {\n return [dynamicValidation.dynamicMetadata]\n }\n\n // Either flag expresses \"this shell is allowed to be empty/blocking\":\n // - `allowEmptyStaticShell` covers `instant = false` (user opt-in)\n // and the build-phase fallback-shell case.\n // - `hasSuspenseAboveBody` is the structural opt-in inside the user's root\n // layout.\n // Treat them as synonyms for the purpose of bypassing shell-failure errors.\n if (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody) {\n return []\n }\n\n if (prelude !== PreludeState.Full) {\n // We didn't have any sync bailouts but there may be user code which\n // blocked the root. We would have captured these during the prerender\n // and can log them here and then terminate the build/validating render\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n return dynamicErrors\n }\n\n if (prelude === PreludeState.Empty) {\n // If we ever get this far then we messed up the tracking of invalid dynamic.\n // We still adhere to the constraint that you must produce a shell but invite the\n // user to report this as a bug in Next.js.\n return [\n new InvariantError(\n `Route \"${workStore.route}\" did not produce a static shell and Next.js was unable to determine a reason.`\n ),\n ]\n }\n }\n // We had a non-empty prelude and there are no dynamic holes\n return []\n}\n\n/**\n * `errors` are validation failures that should be surfaced immediately.\n * `deferredFallback` carries a missing-boundary explanation that the caller\n * should hold back until *every* validation depth has been tried — a missing\n * boundary often just means a parent layout intentionally omitted a slot, and\n * a different depth's validation may surface a more meaningful error.\n */\nexport type NavigationValidationResult =\n // instances that block instant navigation\n | Array\n // validation was blocked with zero or more reasons\n | Error\n | AggregateError\n\nexport function getNavigationDisallowedDynamicReasons(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: InstantValidationState,\n validationSampleTracking: InstantValidationSampleTracking | null,\n boundaryState: ValidationBoundaryTracking,\n devRenderDidError: boolean\n): NavigationValidationResult {\n // If we have errors related to missing samples, those should take precedence over everything else.\n if (validationSampleTracking) {\n const { missingSampleErrors } = validationSampleTracking\n if (missingSampleErrors.length > 0) {\n return missingSampleErrors\n }\n }\n\n const { validationPreventingErrors } = dynamicValidation\n if (validationPreventingErrors.length > 0) {\n if (process.env.__NEXT_DEV_SERVER && devRenderDidError) {\n // The dev render already surfaced server errors to the user.\n // The same errors likely caused validation to be inconclusive,\n // so reporting them again as validation failures would be noisy.\n return []\n }\n return validationPreventingErrors\n }\n\n // NOTE: We don't care about Suspense above body here,\n // we're only concerned with the validation boundary\n if (prelude !== PreludeState.Full) {\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n return dynamicErrors\n }\n\n if (\n prelude === PreludeState.Empty &&\n !dynamicValidation.hasAllowedClientDynamicAboveBoundary &&\n allRequiredBoundariesRendered(boundaryState)\n ) {\n // If we ever get this far then we messed up the tracking of invalid\n // dynamic. (When boundaries are missing the deferred fallback below\n // will surface a more useful error.)\n return new InvariantError(\n `Route \"${workStore.route}\" failed to render during instant validation and Next.js was unable to determine a reason.`\n )\n }\n } else {\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n return dynamicErrors\n }\n\n if (\n dynamicValidation.hasAllowedDynamic === false &&\n dynamicValidation.dynamicMetadata\n ) {\n return [dynamicValidation.dynamicMetadata]\n }\n }\n\n // Missing boundaries on their own aren't a strong signal — a parent\n // layout may legitimately omit a slot. Defer this so the caller can\n // try shallower validation depths first; if every depth comes up\n // empty we still want to surface this so the user is made aware that\n // validation didn't complete. When we add a markers API, the\n // marker-based variant of this check can become strict again.\n if (!allRequiredBoundariesRendered(boundaryState)) {\n const { thrownErrorsOutsideBoundary } = dynamicValidation\n const rootInstantStack = dynamicValidation.slotStacks[0]\n if (thrownErrorsOutsideBoundary.length === 0) {\n const missingFiles: string[] = []\n for (const [id, filePaths] of boundaryState.requiredIds) {\n if (!boundaryState.renderedIds.has(id)) {\n for (const filePath of filePaths) {\n let normalized = filePath\n .replace(/^\\[project\\][\\\\/]?/, '')\n .replace(process.cwd() + '/', '')\n .replace(process.cwd() + '\\\\', '')\n missingFiles.push(normalized)\n }\n }\n }\n missingFiles.sort()\n return createUnrenderedSegmentError(workStore.route, missingFiles)\n } else if (process.env.__NEXT_DEV_SERVER && devRenderDidError) {\n // Errors outside the boundary likely blocked it from rendering,\n // but they're already being reported to the user via the dev\n // render. Suppress the validation failure to avoid noise.\n return []\n } else if (thrownErrorsOutsideBoundary.length === 1) {\n const message = `Route \"${workStore.route}\": Could not validate \\`instant\\` because the target segment was prevented from rendering, likely due to the following error.`\n const error = rootInstantStack !== null ? rootInstantStack() : new Error()\n error.name = 'Error'\n error.message = message\n return new AggregateError([\n error,\n thrownErrorsOutsideBoundary[0] as Error,\n ])\n } else {\n const message = `Route \"${workStore.route}\": Could not validate \\`instant\\` because the target segment was prevented from rendering, likely due to one of the following errors.`\n const error = rootInstantStack !== null ? rootInstantStack() : new Error()\n error.name = 'Error'\n error.message = message\n return new AggregateError([\n error,\n ...(thrownErrorsOutsideBoundary as Error[]),\n ])\n }\n }\n\n // We had a non-empty prelude and there are no dynamic holes\n return []\n}\n"],"names":["DynamicHoleKind","PreludeState","abortAndThrowOnSynchronousRequestDataAccess","abortOnSynchronousPlatformIOAccess","accessedDynamicData","annotateDynamicAccess","consumeDynamicAccess","createDynamicTrackingState","createDynamicValidationState","createHangingInputAbortSignal","createInstantValidationState","formatDynamicAPIAccesses","getDisallowedReasonsInStaticRoute","getFirstDynamicReason","getNavigationDisallowedDynamicReasons","getStaticShellDisallowedDynamicReasons","isPrerenderInterruptedError","logDisallowedDynamicError","markCurrentScopeAsDynamic","throwIfDisallowedDynamic","throwIfDisallowedDynamicInStaticRoute","throwIfSyncIOUsed","throwToInterruptStaticGeneration","trackAllowedDynamicAccess","trackDynamicAccessInStaticRoute","trackDynamicDataInDynamicRender","trackDynamicHoleInNavigation","trackDynamicHoleInStaticShell","trackThrownErrorInNavigation","isDebugDynamicAccesses","dynamicAccesses","syncDynamicErrorWithStack","syncDynamicErrorWithStackPostMicrotask","hasSuspenseAboveBody","hasDynamicMetadata","dynamicMetadata","hasDynamicViewport","hasAllowedDynamic","dynamicErrors","getPendingClientSyncDynamicError","clientDynamic","trackingState","expression","store","workUnitStore","type","forceDynamic","forceStatic","dynamicShouldError","StaticGenBailoutError","route","revalidate","err","DynamicServerError","dynamicUsageDescription","dynamicUsageStack","stack","markRequestStoreAsDynamic","prerenderStore","requestStore","process","env","__NEXT_DEV_SERVER","phase","usedDynamic","abortOnSynchronousDynamicDataAccess","reason","error","createPrerenderInterruptedError","controller","abort","dynamicTracking","push","Error","undefined","errorWithStack","queueMicrotask","prerenderSignal","signal","aborted","NEXT_PRERENDER_INTERRUPTED","message","digest","length","serverDynamic","filter","access","map","split","slice","line","includes","join","AbortController","cacheSignal","inputReady","then","stagedRendering","getStagedRenderingController","finalStage","waitForStage","scheduleOnNextTick","noop","hasSuspenseRegex","bodyAndImplicitTags","hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex","RegExp","ROOT_LAYOUT_BOUNDARY_NAME","hasMetadataRegex","METADATA_BOUNDARY_NAME","hasViewportRegex","VIEWPORT_BOUNDARY_NAME","hasOutletRegex","OUTLET_BOUNDARY_NAME","hasInstantValidationBoundaryRegex","INSTANT_VALIDATION_BOUNDARY_NAME","slotMarkerRegex","INSTANT_SLOT_MARKER_PREFIX","INSTANT_SLOT_MARKER_SUFFIX","resolveInstantStack","componentStack","dynamicValidation","slotStacks","match","exec","slotIndex","parseInt","slotStack","trackOutletSuspenseAboveBody","test","dynamicReason","workStore","isServerPartial","kind","syncDynamicError","addErrorContext","createMetadataErrorInStaticRoute","createViewportErrorInStaticRoute","hasSuspense","isClientHookDynamicError","createBodyErrorInStaticRoute","createBodyError","dynamicHoleKind","hasAllowedClientDynamicAboveBoundary","validationPreventingErrors","thrownErrorsOutsideBoundary","boundaryState","effectiveCreateInstantStack","createMetadataError","createViewportError","boundaryLocation","allRequiredBoundariesRendered","suspenseLocation","index","cause","createBodyErrorInNavigation","createRuntimeBodyError","createDynamicBodyError","createDynamicOrRuntimeBodyError","createRuntimeBodyErrorInNavigation","createLinkBodyErrorInNavigation","createNavigationBodyErrorInNavigation","createPrefetchBodyErrorInNavigation","createDynamicBodyErrorInNavigation","createRuntimeMetadataError","createLinkMetadataError","createNavigationMetadataError","createPrefetchMetadataError","createDynamicMetadataError","createDynamicOrRuntimeMetadataError","createRuntimeViewportError","createLinkViewportError","createNavigationViewportError","createPrefetchViewportError","createDynamicViewportError","createDynamicOrRuntimeViewportError","createRuntimeBodyErrorInStaticRoute","createDynamicBodyErrorInStaticRoute","createNonPrerenderableBodyErrorInStaticRoute","createRuntimeMetadataErrorInStaticRoute","createDynamicMetadataErrorInStaticRoute","createNonPrerenderableMetadataErrorInStaticRoute","createRuntimeViewportErrorInStaticRoute","createDynamicViewportErrorInStaticRoute","createNonPrerenderableViewportErrorInStaticRoute","thrownValue","reactBrowserBailout","browserBailoutReason","getReactBrowserBailoutReason","browserBailoutError","createInstantStack","ownerStack","NODE_ENV","React","captureOwnerStack","name","console","logBuildDebugHint","prelude","allowEmptyStaticShell","i","isFallbackShell","reasons","InvariantError","validationSampleTracking","devRenderDidError","missingSampleErrors","rootInstantStack","missingFiles","id","filePaths","requiredIds","renderedIds","has","filePath","normalized","replace","cwd","sort","createUnrenderedSegmentError","AggregateError"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 13432, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/instant-validation/boundary-constants.ts"],"sourcesContent":["export const INSTANT_VALIDATION_BOUNDARY_NAME =\n '__next_instant_validation_boundary__'\n\nexport const INSTANT_SLOT_MARKER_PREFIX = '__next_instant_slot_'\nexport const INSTANT_SLOT_MARKER_SUFFIX = '__'\n"],"names":["INSTANT_SLOT_MARKER_PREFIX","INSTANT_SLOT_MARKER_SUFFIX","INSTANT_VALIDATION_BOUNDARY_NAME"],"mappings":";;;;;;;;;;;;;;;IAGaA,0BAA0B,EAAA;eAA1BA;;IACAC,0BAA0B,EAAA;eAA1BA;;IAJAC,gCAAgC,EAAA;eAAhCA;;;AAAN,MAAMA,mCACX;AAEK,MAAMF,6BAA6B;AACnC,MAAMC,6BAA6B","ignoreList":[0]}}, + {"offset": {"line": 13464, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/instant-validation/boundary-tracking.tsx"],"sourcesContent":["export type ValidationBoundaryTracking = {\n /**\n * Map from boundary id (the SegmentPath where a validation boundary is\n * placed) to the file paths of modules inside that boundary's subtree.\n * When the boundary spans multiple parallel slots, each slot contributes\n * its own first-found module path so all unrendered segments can be\n * reported together.\n */\n requiredIds: Map\n renderedIds: Set\n}\n\nexport function createValidationBoundaryTracking(\n /** Pass if the render is expected to render the same IDs as a previous one. */\n matchPrevious?: ValidationBoundaryTracking\n): ValidationBoundaryTracking {\n return {\n requiredIds: matchPrevious ? new Map(matchPrevious.requiredIds) : new Map(),\n renderedIds: new Set(),\n }\n}\n\nexport function allRequiredBoundariesRendered(\n state: ValidationBoundaryTracking\n): boolean {\n for (const id of state.requiredIds.keys()) {\n if (!state.renderedIds.has(id)) {\n return false\n }\n }\n return true\n}\n"],"names":["allRequiredBoundariesRendered","createValidationBoundaryTracking","matchPrevious","requiredIds","Map","renderedIds","Set","state","id","keys","has"],"mappings":";;;;;;;;;;;;;;IAsBgBA,6BAA6B,EAAA;eAA7BA;;IAVAC,gCAAgC,EAAA;eAAhCA;;;AAAT,SAASA,iCACd,6EAA6E,GAC7EC,aAA0C;IAE1C,OAAO;QACLC,aAAaD,gBAAgB,IAAIE,IAAIF,cAAcC,WAAW,IAAI,IAAIC;QACtEC,aAAa,IAAIC;IACnB;AACF;AAEO,SAASN,8BACdO,KAAiC;IAEjC,KAAK,MAAMC,MAAMD,MAAMJ,WAAW,CAACM,IAAI,GAAI;QACzC,IAAI,CAACF,MAAMF,WAAW,CAACK,GAAG,CAACF,KAAK;YAC9B,OAAO;QACT;IACF;IACA,OAAO;AACT","ignoreList":[0]}}, + {"offset": {"line": 13503, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/segment-config/ensure-static.ts"],"sourcesContent":["import type {\n AppSegmentConfig,\n EnsureStatic,\n} from '../../../build/segment-config/app/app-segment-config'\nimport { parseLoaderTree } from '../../../shared/lib/router/utils/parse-loader-tree'\nimport {\n getLayoutOrPageModule,\n type LoaderTree,\n} from '../../lib/app-dir-module'\n\n/**\n * The outcome of resolving a route's `ensureStatic` config.\n * The ordering is intentional -- higher values indicate a\n * more constrained route that forces more request kinds to be static.\n *\n * A constraint also implies all its predecessors:\n * - `Prefetch` implies `Shell`, i.e. if prefetches are static, so are shells.\n * - `Navigation` implies `Prefetch` and `Shell`, i.e. if the whole page is static,\n * then so are its shells and prefetches.\n *\n * Note that this flattens `\"auto\"` and `false` into `None`.\n * This is because rendering code does not need to distinguish them --\n * both indicate that the route follows normal Partial Prefetching semantics\n * and does not force anything to be static.\n * However, it is only correct to collapse them into one *after* resolving the\n * config for the entire route, because they have different interactions with\n * configs from other segments on the same route.\n */\nexport enum EnsureStaticLevel {\n /** The route follows standard Partial Prefetching semantics. */\n None = 0,\n /** The route requires that app shells must be statically prerendered. */\n Shell = 1,\n /** The route requires that app shells and prefetches must be statically prerendered. */\n Prefetch = 2,\n /** The route requires that app shells, prefetches, and the whole page must be statically prerendered. */\n Navigation = 3,\n}\n\nfunction getEnsureStaticLevel(ensureStatic: EnsureStatic) {\n switch (ensureStatic) {\n case 'auto':\n case false: {\n return EnsureStaticLevel.None\n }\n case 'shell': {\n return EnsureStaticLevel.Shell\n }\n case 'prefetch': {\n return EnsureStaticLevel.Prefetch\n }\n case 'navigation': {\n return EnsureStaticLevel.Navigation\n }\n }\n}\n\nexport async function resolveEnsureStaticLevel(\n tree: LoaderTree,\n partialPrefetching: boolean\n): Promise {\n return getEnsureStaticLevel(\n await resolveEnsureStaticConfig(tree, partialPrefetching)\n )\n}\n\nexport async function resolveEnsureStaticConfig(\n tree: LoaderTree,\n partialPrefetching: boolean\n): Promise> {\n let { config, filePath } = await resolveEnsureStaticConfigImpl(tree)\n\n if (!partialPrefetching) {\n // If Partial Prefetching is not enabled for this route, we only support\n // a subset of `ensureStatic` values.\n // (We error in `getAppPageStaticInfo` if `ensureStatic` is used without enabling\n // Cache Components, so we don't have to assert that here)\n switch (config) {\n case 'auto': {\n // Default to the equivalent of Cache Components prefetching behavior.\n config = 'prefetch'\n break\n }\n case false:\n case 'shell': {\n // Not meaningful in Cache Components without Partial Prefetching\n const originalConfig = config\n config = 'prefetch'\n console.warn(\n `${formatEnsureStaticExport(originalConfig)} has no effect unless the route is using Partial Prefetching.` +\n `\\n (from: ${filePath})`\n )\n break\n }\n case 'prefetch':\n // Equivalent to regular Cache Components behavior, so we allow it\n // without warning to avoid noise when doing gradual opt-in\n break\n case 'navigation':\n // Meaningful in Cache Components, even without Partial Prefetching\n break\n default:\n config satisfies never\n }\n }\n\n if (config === false) {\n // `false` and \"auto\" are equivalent once resolved.\n return 'auto'\n } else {\n return config\n }\n}\n\ntype EnsureStaticWithSource = {\n config: EnsureStatic\n filePath: string | null\n}\n\nasync function resolveEnsureStaticConfigImpl(\n tree: LoaderTree\n): Promise {\n const { mod: layoutOrPageMod, filePath } = await getLayoutOrPageModule(tree)\n\n const config = getEnsureStaticConfigForModule(layoutOrPageMod)\n\n const parentResult: EnsureStaticWithSource = {\n config,\n filePath: filePath ?? null,\n }\n\n // Walk the slots if any and validate that they don't have incompatible configs\n // with each other. If compatible, pick the most constrained value from the slots.\n let slotsResult: EnsureStaticWithSource | null = null\n let slotResultKey: string | null = null\n const { parallelRoutes } = parseLoaderTree(tree)\n for (const parallelRouteKey in parallelRoutes) {\n const parallelRoute = parallelRoutes[parallelRouteKey]\n const childResult = await resolveEnsureStaticConfigImpl(parallelRoute)\n if (!slotsResult) {\n slotsResult = childResult\n slotResultKey = parallelRouteKey\n } else {\n // Check if the child is compatible with the current result for the slots.\n switch (compareEnsureStatic(childResult.config, slotsResult.config)) {\n case Comparison.Compatible: {\n // 'auto' is compatible with anything, but if the current result is 'auto' and the new one isn't,\n // we want to use the more specific result.\n if (slotsResult.config === 'auto' && childResult.config !== 'auto') {\n slotsResult = childResult\n slotResultKey = parallelRouteKey\n }\n break\n }\n case Comparison.Incompatible:\n case Comparison.LessConstrained:\n case Comparison.MoreConstrained: {\n throw new Error(\n `Parallel slots cannot have incompatible \\`ensureStatic\\`.` +\n `\\n ${formatParallelSlot(slotResultKey!)}: ` +\n `\\n ${formatEnsureStaticExport(slotsResult.config)}` +\n `\\n (from: ${slotsResult.filePath})` +\n `\\n` +\n `\\n ${formatParallelSlot(parallelRouteKey)}: ` +\n `\\n ${formatEnsureStaticExport(childResult.config)}` +\n `\\n (from: ${childResult.filePath})` +\n `\\n` +\n `\\n Possible fixes:` +\n `\\n - Remove one of the \\`ensureStatic\\` exports` +\n `\\n - Change one of the \\`ensureStatic\\` exports to match the other`\n )\n }\n }\n }\n }\n\n // Child segments can override the config from the parent with a more constrained value,\n // but they cannot have a less constrained value.\n if (!slotsResult) {\n return parentResult\n } else {\n const comparison = compareEnsureStatic(\n slotsResult.config,\n parentResult.config\n )\n switch (comparison) {\n case Comparison.Compatible: {\n // 'auto' is compatible with anything, but if the parent result is 'auto' and the slots one isn't,\n // we want to use the more constrained result.\n if (parentResult.config === 'auto' && slotsResult.config !== 'auto') {\n return slotsResult\n } else {\n return parentResult\n }\n }\n case Comparison.MoreConstrained: {\n return slotsResult\n }\n case Comparison.LessConstrained:\n case Comparison.Incompatible: {\n throw new Error(\n (comparison === Comparison.LessConstrained\n ? `A child segment cannot override a parent segment with a less-constrained \\`ensureStatic\\`.`\n : `A child segment cannot override a parent segment with an incompatible \\`ensureStatic\\`.`) +\n `\\n Parent has: ` +\n `\\n ${formatEnsureStaticExport(parentResult.config)}` +\n `\\n (from: ${parentResult.filePath})` +\n `\\n Child has: ` +\n `\\n ${formatEnsureStaticExport(slotsResult.config)}` +\n `\\n (from: ${slotsResult.filePath})` +\n `\\n` +\n `\\n Possible fixes:` +\n `\\n - Remove one of the \\`ensureStatic\\` exports` +\n `\\n - Change one of the \\`ensureStatic\\` exports to match the other`\n )\n }\n }\n }\n}\n\nfunction formatParallelSlot(slot: string) {\n return slot === 'children' ? slot : `@${slot}`\n}\n\nfunction formatEnsureStaticExport(config: EnsureStatic) {\n return `export const ensureStatic = ${JSON.stringify(config)}`\n}\n\nenum Comparison {\n LessConstrained = 1,\n Compatible = 2,\n MoreConstrained = 3,\n Incompatible = 4,\n}\n\nconst ENSURE_STATIC_ORDER: Exclude[] = [\n 'shell',\n 'prefetch',\n 'navigation',\n]\n\nfunction compareEnsureStatic(\n left: EnsureStatic,\n right: EnsureStatic\n): Comparison {\n // 'auto' is compatible with everything.\n if (left === 'auto' || right === 'auto') {\n return Comparison.Compatible\n }\n\n // `false` is compatible with false.\n if (left === false && right === false) {\n return Comparison.Compatible\n }\n // If only one of the values is `false` (we know it's not both), it's incompatible.\n if (left === false || right === false) {\n return Comparison.Incompatible\n }\n\n const leftSort = ENSURE_STATIC_ORDER.indexOf(left)\n const rightSort = ENSURE_STATIC_ORDER.indexOf(right)\n return leftSort < rightSort\n ? Comparison.LessConstrained\n : leftSort === rightSort\n ? Comparison.Compatible\n : Comparison.MoreConstrained\n}\n\nfunction getEnsureStaticConfigForModule(\n mod: Record | undefined\n): EnsureStatic {\n return (mod ? (mod as AppSegmentConfig).ensureStatic : undefined) ?? 'auto'\n}\n"],"names":["EnsureStaticLevel","resolveEnsureStaticConfig","resolveEnsureStaticLevel","getEnsureStaticLevel","ensureStatic","tree","partialPrefetching","config","filePath","resolveEnsureStaticConfigImpl","originalConfig","console","warn","formatEnsureStaticExport","mod","layoutOrPageMod","getLayoutOrPageModule","getEnsureStaticConfigForModule","parentResult","slotsResult","slotResultKey","parallelRoutes","parseLoaderTree","parallelRouteKey","parallelRoute","childResult","compareEnsureStatic","Error","formatParallelSlot","comparison","slot","JSON","stringify","Comparison","ENSURE_STATIC_ORDER","left","right","leftSort","indexOf","rightSort","undefined"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 13710, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/staged-rendering.ts"],"sourcesContent":["import { InvariantError } from '../../shared/lib/invariant-error'\nimport { createPromiseWithResolvers } from '../../shared/lib/promise-with-resolvers'\n\nexport enum RenderStage {\n Before = 1,\n //\n ShellStatic = 10,\n /** Discrimination-only stage: `prefetch()` in validation renders (static) */\n PrefetchStatic_prefetchApi = 11,\n PrefetchStatic = 12,\n NavigationStatic = 13,\n Static = 14,\n //\n ShellRuntime = 20,\n /** Discrimination-only stage: `prefetch()` in validation renders (runtime) */\n PrefetchRuntime_prefetchApi = 21,\n PrefetchRuntime = 22,\n NavigationRuntime = 23,\n //\n Dynamic = 30,\n Abandoned = 40,\n}\n\nexport type AdvanceableRenderStage = Exclude<\n RenderStage,\n RenderStage.Before | RenderStage.Abandoned\n>\n\nexport const RENDER_STAGE_ADVANCE_ORDER: AdvanceableRenderStage[] = [\n RenderStage.ShellStatic,\n RenderStage.PrefetchStatic_prefetchApi,\n RenderStage.PrefetchStatic,\n RenderStage.NavigationStatic,\n RenderStage.Static,\n //\n RenderStage.ShellRuntime,\n RenderStage.PrefetchRuntime_prefetchApi,\n RenderStage.PrefetchRuntime,\n RenderStage.NavigationRuntime,\n //\n RenderStage.Dynamic,\n]\n\nexport function getNextStage(\n stage: Exclude\n) {\n return RENDER_STAGE_ADVANCE_ORDER[\n RENDER_STAGE_ADVANCE_ORDER.indexOf(stage) + 1\n ]\n}\n\nexport function isAdvanceableRenderStage(\n stage: RenderStage\n): stage is AdvanceableRenderStage {\n return RenderStage.Before < stage && stage <= RenderStage.Dynamic\n}\n\nexport enum SyncIOMode {\n /** Sync IO does not error in any stage. */\n Untracked = 1,\n /** Before `partialPrefetching`: Sync IO errors in static stages, and is allowed otherwise. */\n AllowedInRuntimeOrDynamic = 2,\n /** After `partialPrefetching`: Sync IO errors in all stages other than dynamic. */\n AllowedInDynamic = 3,\n}\n\nexport class StagedRenderingController {\n private abortSignal: AbortSignal | null\n private abandonController: AbortController | null\n private syncIOMode: SyncIOMode\n public readonly finalStage: AdvanceableRenderStage | null\n\n currentStage: RenderStage = RenderStage.Before\n\n syncInterruptReason: Error | null = null\n\n triggers: Record =\n createAdvanceableStageTriggers()\n\n constructor({\n abortSignal,\n abandonController,\n syncIO,\n finalStage,\n }: {\n abortSignal: AbortSignal | null\n abandonController: AbortController | null\n syncIO: SyncIOMode\n finalStage: AdvanceableRenderStage | null\n }) {\n this.abortSignal = abortSignal\n this.abandonController = abandonController\n this.syncIOMode = syncIO\n this.finalStage = finalStage\n\n if (abortSignal) {\n abortSignal.addEventListener(\n 'abort',\n () => {\n // Reject all stage promises that haven't already been resolved.\n // `cancelStageTrigger` is a noop if the trigger already resolved.\n const { reason } = abortSignal\n for (const trigger of Object.values(this.triggers)) {\n cancelStageTrigger(trigger, reason)\n }\n },\n { once: true }\n )\n }\n\n if (abandonController) {\n abandonController.signal.addEventListener(\n 'abort',\n () => {\n this.abandonRender()\n },\n { once: true }\n )\n }\n }\n\n /**\n * Schedules a callback that will execute synchronously when the controller is advanced\n * to `stage` or past it, before any promises for that stage are resolved.\n * If the controller is already past `stage`, the callback is executed immediately.\n * */\n onStage(stage: AdvanceableRenderStage, callback: () => void) {\n addSyncTriggerListener(this.triggers[stage], callback)\n }\n\n shouldTrackSyncInterrupt(): boolean {\n const { syncIOMode, currentStage } = this\n switch (syncIOMode) {\n case SyncIOMode.Untracked: {\n return false\n }\n case SyncIOMode.AllowedInRuntimeOrDynamic: {\n // Legacy: track Sync IO only in static stages.\n // Do not track it before the render, or in runtime/dynamic stages.\n return (\n currentStage > RenderStage.Before &&\n currentStage <= RenderStage.Static\n )\n }\n case SyncIOMode.AllowedInDynamic: {\n // Track sync IO in all cacheable stages.\n // This means all stages except:\n // - before the render\n // - in the dynamic stage\n return (\n currentStage > RenderStage.Before &&\n currentStage < RenderStage.Dynamic\n )\n }\n }\n }\n\n /** Note: only call this if `shouldTrackSyncInterrupt()` returned true */\n syncInterruptCurrentStageWithReason(reason: Error) {\n const { currentStage } = this\n if (\n currentStage === RenderStage.Before ||\n currentStage === RenderStage.Dynamic ||\n currentStage === RenderStage.Abandoned\n ) {\n // Not interruptible. Defensive noop.\n return\n }\n\n // If Sync IO occurs during an abandonable render, we trigger the abandon.\n // The abandon listener will call abandonRender which advances through\n // stages to let caches fill before marking as Abandoned.\n if (this.abandonController) {\n this.abandonController.abort()\n return\n }\n\n if (this.abortSignal) {\n // If this is an abortable render, we capture the interruption reason and stop advancing.\n // We don't release any more promises.\n // The caller is expected to abort the signal.\n this.syncInterruptReason = reason\n this.currentStage = RenderStage.Abandoned\n return\n }\n\n // If we're in a non-abandonable & non-abortable render,\n // we need to advance to the Dynamic stage and capture the interruption reason.\n // (in dev, this will be the restarted render)\n this.syncInterruptReason = reason\n this.advanceStage(RenderStage.Dynamic)\n }\n\n getSyncInterruptReason() {\n return this.syncInterruptReason\n }\n\n getStageEndTime(stage: Exclude) {\n return this.triggers[getNextStage(stage)].triggeredAt ?? Infinity\n }\n\n private abandonRender() {\n // In staged rendering, only the initial render is abandonable.\n // We can abandon the initial render if\n // 1. We notice a cache miss, and need to wait for caches to fill\n // 2. A sync IO error occurs, and the render should be interrupted\n // (this might be a lazy intitialization of a module,\n // so we still want to restart in this case and see if it still occurs)\n // In either case, we'll be doing another render after this one,\n // so we only want to unblock the next stage, not Dynamic, because\n // unblocking the dynamic stage would likely lead to wasted (uncached) IO.\n\n const { currentStage } = this\n\n if (currentStage === RenderStage.Before) {\n throw new InvariantError(\n \"A render that hasn't started yet cannot be abandoned\"\n )\n }\n if (\n currentStage === RenderStage.Dynamic ||\n currentStage === RenderStage.Abandoned\n ) {\n // We shouldn't ever trigger an abandon in these. Defensive noop.\n return\n }\n\n // Resolve all stages after the current one, up to runtime (excluding dynamic)\n const nextStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(currentStage) + 1\n const dynamicStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(\n RenderStage.Dynamic\n )\n for (let i = nextStageIx; i < dynamicStageIx; i++) {\n this.resolveStage(RENDER_STAGE_ADVANCE_ORDER[i])\n }\n\n this.currentStage = RenderStage.Abandoned\n }\n\n advanceStage(targetStage: AdvanceableRenderStage) {\n if (this.finalStage !== null && targetStage > this.finalStage) {\n throw new InvariantError(\n `Attempted to advance to stage ${RenderStage[targetStage]} but the render is limited to ${RenderStage[this.finalStage]}`\n )\n }\n const { currentStage } = this\n\n if (\n currentStage === RenderStage.Dynamic ||\n currentStage === RenderStage.Abandoned\n ) {\n // Terminal stages, nowhere left to advance.\n return\n }\n\n // If we're already at the target stage or beyond, do nothing.\n if (targetStage <= currentStage) {\n return\n }\n\n this.currentStage = targetStage\n\n // Resolve all stages between the current stage and the target.\n const nextStageIx =\n currentStage === RenderStage.Before\n ? 0\n : RENDER_STAGE_ADVANCE_ORDER.indexOf(currentStage) + 1\n const targetStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(targetStage)\n for (let i = nextStageIx; i <= targetStageIx; i++) {\n this.resolveStage(RENDER_STAGE_ADVANCE_ORDER[i])\n }\n }\n\n private resolveStage(stage: AdvanceableRenderStage) {\n fireStageTrigger(this.triggers[stage])\n }\n\n private getStagePromise(stage: AdvanceableRenderStage): Promise {\n return this.triggers[stage].promise\n }\n\n waitForStage(stage: AdvanceableRenderStage) {\n return this.getStagePromise(stage)\n }\n\n delayUntilStage(\n stage: AdvanceableRenderStage,\n displayName: string | undefined,\n resolvedValue: T\n ): Promise {\n const stagePromise = this.getStagePromise(stage)\n\n const promise =\n process.env.NODE_ENV === 'development'\n ? makeDevtoolsIOPromiseFromIOTrigger(\n stagePromise,\n displayName,\n resolvedValue\n )\n : stagePromise.then(() => resolvedValue)\n\n // Analogously to `makeDynamicHangingPromise`, we might reject this promise if the signal is invoked.\n // (e.g. in the case where we don't want want the render to proceed to the dynamic stage and abort it).\n // We shouldn't consider this an unhandled rejection, so we attach a noop catch handler here to suppress this warning.\n if (this.abortSignal) {\n promise.catch(ignoreReject)\n }\n return promise\n }\n}\n\nfunction createAdvanceableStageTriggers(): Record<\n AdvanceableRenderStage,\n StageTrigger\n> {\n const triggers: Partial> = {}\n for (const stage of RENDER_STAGE_ADVANCE_ORDER) {\n triggers[stage] = createStageTrigger()\n }\n return triggers as Record\n}\n\nfunction ignoreReject() {}\n\n// TODO(restart-on-cache-miss): the layering of `delayUntilStage`,\n// `makeDevtoolsIOPromiseFromIOTrigger` and and `makeDevtoolsIOAwarePromise`\n// is confusing, we should clean it up.\nfunction makeDevtoolsIOPromiseFromIOTrigger(\n ioTrigger: Promise,\n displayName: string | undefined,\n resolvedValue: T\n): Promise {\n // If we create a `new Promise` and give it a displayName\n // (with no userspace code above us in the stack)\n // React Devtools will use it as the IO cause when determining \"suspended by\".\n // In particular, it should shadow any inner IO that resolved/rejected the promise\n // (in case of staged rendering, this will be the `setTimeout` that triggers the relevant stage)\n const promise = new Promise((resolve, reject) => {\n ioTrigger.then(resolve.bind(null, resolvedValue), reject)\n })\n if (displayName !== undefined) {\n // @ts-expect-error\n promise.displayName = displayName\n }\n return promise\n}\n\ntype StageTrigger = {\n state: 'pending' | 'triggered' | 'cancelled'\n triggeredAt: number | null\n promise: Promise\n _listeners: Array<() => void>\n _resolvePromise: () => void\n _rejectPromise: (reason: unknown) => void\n}\n\nfunction addSyncTriggerListener(trigger: StageTrigger, listener: () => void) {\n if (trigger.state === 'pending') {\n trigger._listeners.push(listener)\n } else {\n listener()\n }\n}\n\nfunction createStageTrigger(): StageTrigger {\n const { promise, resolve, reject } = createPromiseWithResolvers()\n return {\n state: 'pending',\n triggeredAt: null,\n promise,\n _listeners: [],\n _resolvePromise: resolve,\n _rejectPromise: reject,\n }\n}\n\nfunction fireStageTrigger(trigger: StageTrigger) {\n if (trigger.state !== 'pending') {\n return\n }\n trigger.state = 'triggered'\n trigger.triggeredAt = performance.now() + performance.timeOrigin\n try {\n const { _listeners: listeners } = trigger\n for (let i = 0; i < listeners.length; i++) {\n listeners[i]()\n }\n listeners.length = 0\n } finally {\n trigger._resolvePromise()\n }\n}\n\nfunction cancelStageTrigger(trigger: StageTrigger, reason: unknown) {\n if (trigger.state !== 'pending') {\n return\n }\n trigger.state = 'cancelled'\n // we didn't trigger, so don't save `triggeredAt`.\n\n // We're not gonna fire the listeners, we may as well free them.\n trigger._listeners.length = 0\n\n // Suppress unhandled rejection warnings for promises that no one is awaiting.\n trigger.promise.catch(ignoreReject)\n trigger._rejectPromise(reason)\n}\n"],"names":["RENDER_STAGE_ADVANCE_ORDER","RenderStage","StagedRenderingController","SyncIOMode","getNextStage","isAdvanceableRenderStage","stage","indexOf","constructor","abortSignal","abandonController","syncIO","finalStage","currentStage","syncInterruptReason","triggers","createAdvanceableStageTriggers","syncIOMode","addEventListener","reason","trigger","Object","values","cancelStageTrigger","once","signal","abandonRender","onStage","callback","addSyncTriggerListener","shouldTrackSyncInterrupt","syncInterruptCurrentStageWithReason","abort","advanceStage","getSyncInterruptReason","getStageEndTime","triggeredAt","Infinity","InvariantError","nextStageIx","dynamicStageIx","i","resolveStage","targetStage","targetStageIx","fireStageTrigger","getStagePromise","promise","waitForStage","delayUntilStage","displayName","resolvedValue","stagePromise","process","env","NODE_ENV","makeDevtoolsIOPromiseFromIOTrigger","then","catch","ignoreReject","createStageTrigger","ioTrigger","Promise","resolve","reject","bind","undefined","listener","state","_listeners","push","createPromiseWithResolvers","_resolvePromise","_rejectPromise","performance","now","timeOrigin","listeners","length"],"mappings":";;;;;;;;;;;;;;;;;;IA4BaA,0BAA0B,EAAA;eAA1BA;;IAzBDC,WAAW,EAAA;eAAXA;;IA+DCC,yBAAyB,EAAA;eAAzBA;;IATDC,UAAU,EAAA;eAAVA;;IAdIC,YAAY,EAAA;eAAZA;;IAQAC,wBAAwB,EAAA;eAAxBA;;;gCAnDe;sCACY;AAEpC,IAAKJ,cAAAA,WAAAA,GAAAA,SAAAA,WAAAA;;IAEV,EAAE;;IAEF,2EAA2E,GAAA,WAAA,CAAA,WAAA,CAAA,6BAAA,GAAA,GAAA,GAAA;;;;IAK3E,EAAE;;IAEF,4EAA4E,GAAA,WAAA,CAAA,WAAA,CAAA,8BAAA,GAAA,GAAA,GAAA;;;IAI5E,EAAE;;;WAfQA;;AAyBL,MAAMD,6BAAuD;;;;;;;;;;;CAanE;AAEM,SAASI,aACdE,KAA2D;IAE3D,OAAON,0BAA0B,CAC/BA,2BAA2BO,OAAO,CAACD,SAAS,EAC7C;AACH;AAEO,SAASD,yBACdC,KAAkB;IAElB,OAAOL,IAAqBK,SAASA,SAAAA;AACvC;AAEO,IAAKH,aAAAA,WAAAA,GAAAA,SAAAA,UAAAA;IACV,yCAAyC,GAAA,UAAA,CAAA,UAAA,CAAA,YAAA,GAAA,EAAA,GAAA;IAEzC,4FAA4F,GAAA,UAAA,CAAA,UAAA,CAAA,4BAAA,GAAA,EAAA,GAAA;IAE5F,iFAAiF,GAAA,UAAA,CAAA,UAAA,CAAA,mBAAA,GAAA,EAAA,GAAA;WALvEA;;AASL,MAAMD;IAaXM,YAAY,EACVC,WAAW,EACXC,iBAAiB,EACjBC,MAAM,EACNC,UAAU,EAMX,CAAE;aAjBHC,YAAAA,GAAAA;aAEAC,mBAAAA,GAAoC;aAEpCC,QAAAA,GACEC;QAaA,IAAI,CAACP,WAAW,GAAGA;QACnB,IAAI,CAACC,iBAAiB,GAAGA;QACzB,IAAI,CAACO,UAAU,GAAGN;QAClB,IAAI,CAACC,UAAU,GAAGA;QAElB,IAAIH,aAAa;YACfA,YAAYS,gBAAgB,CAC1B,SACA;gBACE,gEAAgE;gBAChE,kEAAkE;gBAClE,MAAM,EAAEC,MAAM,EAAE,GAAGV;gBACnB,KAAK,MAAMW,WAAWC,OAAOC,MAAM,CAAC,IAAI,CAACP,QAAQ,EAAG;oBAClDQ,mBAAmBH,SAASD;gBAC9B;YACF,GACA;gBAAEK,MAAM;YAAK;QAEjB;QAEA,IAAId,mBAAmB;YACrBA,kBAAkBe,MAAM,CAACP,gBAAgB,CACvC,SACA;gBACE,IAAI,CAACQ,aAAa;YACpB,GACA;gBAAEF,MAAM;YAAK;QAEjB;IACF;IAEA;;;;KAIG,GACHG,QAAQrB,KAA6B,EAAEsB,QAAoB,EAAE;QAC3DC,uBAAuB,IAAI,CAACd,QAAQ,CAACT,MAAM,EAAEsB;IAC/C;IAEAE,2BAAoC;QAClC,MAAM,EAAEb,UAAU,EAAEJ,YAAY,EAAE,GAAG,IAAI;QACzC,OAAQI;YACN,KAAA;gBAA2B;oBACzB,OAAO;gBACT;YACA,KAAA;gBAA2C;oBACzC,+CAA+C;oBAC/C,mEAAmE;oBACnE,OACEJ,eAAAA,KACAA,gBAAAA;gBAEJ;YACA,KAAA;gBAAkC;oBAChC,yCAAyC;oBACzC,gCAAgC;oBAChC,sBAAsB;oBACtB,yBAAyB;oBACzB,OACEA,eAAAA,KACAA,eAAAA;gBAEJ;QACF;IACF;IAEA,uEAAuE,GACvEkB,oCAAoCZ,MAAa,EAAE;QACjD,MAAM,EAAEN,YAAY,EAAE,GAAG,IAAI;QAC7B,IACEA,iBAAAA,KACAA,iBAAAA,MACAA,iBAAAA,IACA;YACA,qCAAqC;YACrC;QACF;QAEA,0EAA0E;QAC1E,sEAAsE;QACtE,yDAAyD;QACzD,IAAI,IAAI,CAACH,iBAAiB,EAAE;YAC1B,IAAI,CAACA,iBAAiB,CAACsB,KAAK;YAC5B;QACF;QAEA,IAAI,IAAI,CAACvB,WAAW,EAAE;YACpB,yFAAyF;YACzF,sCAAsC;YACtC,8CAA8C;YAC9C,IAAI,CAACK,mBAAmB,GAAGK;YAC3B,IAAI,CAACN,YAAY,GAAA;YACjB;QACF;QAEA,wDAAwD;QACxD,+EAA+E;QAC/E,8CAA8C;QAC9C,IAAI,CAACC,mBAAmB,GAAGK;QAC3B,IAAI,CAACc,YAAY,CAAA;IACnB;IAEAC,yBAAyB;QACvB,OAAO,IAAI,CAACpB,mBAAmB;IACjC;IAEAqB,gBAAgB7B,KAA2D,EAAE;QAC3E,OAAO,IAAI,CAACS,QAAQ,CAACX,aAAaE,OAAO,CAAC8B,WAAW,IAAIC;IAC3D;IAEQX,gBAAgB;QACtB,+DAA+D;QAC/D,uCAAuC;QACvC,mEAAmE;QACnE,oEAAoE;QACpE,0DAA0D;QAC1D,6EAA6E;QAC7E,gEAAgE;QAChE,kEAAkE;QAClE,0EAA0E;QAE1E,MAAM,EAAEb,YAAY,EAAE,GAAG,IAAI;QAE7B,IAAIA,iBAAAA,GAAqC;YACvC,MAAM,IAAIyB,gBAAAA,cAAc,CACtB;QAEJ;QACA,IACEzB,iBAAAA,MACAA,iBAAAA,IACA;YACA,iEAAiE;YACjE;QACF;QAEA,8EAA8E;QAC9E,MAAM0B,cAAcvC,2BAA2BO,OAAO,CAACM,gBAAgB;QACvE,MAAM2B,iBAAiBxC,2BAA2BO,OAAO,CAAA;QAGzD,IAAK,IAAIkC,IAAIF,aAAaE,IAAID,gBAAgBC,IAAK;YACjD,IAAI,CAACC,YAAY,CAAC1C,0BAA0B,CAACyC,EAAE;QACjD;QAEA,IAAI,CAAC5B,YAAY,GAAA;IACnB;IAEAoB,aAAaU,WAAmC,EAAE;QAChD,IAAI,IAAI,CAAC/B,UAAU,KAAK,QAAQ+B,cAAc,IAAI,CAAC/B,UAAU,EAAE;YAC7D,MAAM,IAAI0B,gBAAAA,cAAc,CACtB,CAAC,8BAA8B,EAAErC,WAAW,CAAC0C,YAAY,CAAC,8BAA8B,EAAE1C,WAAW,CAAC,IAAI,CAACW,UAAU,CAAC,EAAE;QAE5H;QACA,MAAM,EAAEC,YAAY,EAAE,GAAG,IAAI;QAE7B,IACEA,iBAAAA,MACAA,iBAAAA,IACA;YACA,4CAA4C;YAC5C;QACF;QAEA,8DAA8D;QAC9D,IAAI8B,eAAe9B,cAAc;YAC/B;QACF;QAEA,IAAI,CAACA,YAAY,GAAG8B;QAEpB,+DAA+D;QAC/D,MAAMJ,cACJ1B,iBAAAA,IACI,IACAb,2BAA2BO,OAAO,CAACM,gBAAgB;QACzD,MAAM+B,gBAAgB5C,2BAA2BO,OAAO,CAACoC;QACzD,IAAK,IAAIF,IAAIF,aAAaE,KAAKG,eAAeH,IAAK;YACjD,IAAI,CAACC,YAAY,CAAC1C,0BAA0B,CAACyC,EAAE;QACjD;IACF;IAEQC,aAAapC,KAA6B,EAAE;QAClDuC,iBAAiB,IAAI,CAAC9B,QAAQ,CAACT,MAAM;IACvC;IAEQwC,gBAAgBxC,KAA6B,EAAiB;QACpE,OAAO,IAAI,CAACS,QAAQ,CAACT,MAAM,CAACyC,OAAO;IACrC;IAEAC,aAAa1C,KAA6B,EAAE;QAC1C,OAAO,IAAI,CAACwC,eAAe,CAACxC;IAC9B;IAEA2C,gBACE3C,KAA6B,EAC7B4C,WAA+B,EAC/BC,aAAgB,EACJ;QACZ,MAAMC,eAAe,IAAI,CAACN,eAAe,CAACxC;QAE1C,MAAMyC,UACJM,QAAQC,GAAG,CAACC,QAAQ,KAAK,cACrBC,mCACEJ,cACAF,aACAC,iBAEFC,aAAaK,IAAI,CAAC,IAAMN;QAE9B,qGAAqG;QACrG,uGAAuG;QACvG,sHAAsH;QACtH,IAAI,IAAI,CAAC1C,WAAW,EAAE;YACpBsC,QAAQW,KAAK,CAACC;QAChB;QACA,OAAOZ;IACT;AACF;AAEA,SAAS/B;IAIP,MAAMD,WAAkE,CAAC;IACzE,KAAK,MAAMT,SAASN,2BAA4B;QAC9Ce,QAAQ,CAACT,MAAM,GAAGsD;IACpB;IACA,OAAO7C;AACT;AAEA,SAAS4C,gBAAgB;AAEzB,kEAAkE;AAClE,4EAA4E;AAC5E,uCAAuC;AACvC,SAASH,mCACPK,SAAuB,EACvBX,WAA+B,EAC/BC,aAAgB;IAEhB,yDAAyD;IACzD,iDAAiD;IACjD,8EAA8E;IAC9E,kFAAkF;IAClF,gGAAgG;IAChG,MAAMJ,UAAU,IAAIe,QAAW,CAACC,SAASC;QACvCH,UAAUJ,IAAI,CAACM,QAAQE,IAAI,CAAC,MAAMd,gBAAgBa;IACpD;IACA,IAAId,gBAAgBgB,WAAW;QAC7B,mBAAmB;QACnBnB,QAAQG,WAAW,GAAGA;IACxB;IACA,OAAOH;AACT;AAWA,SAASlB,uBAAuBT,OAAqB,EAAE+C,QAAoB;IACzE,IAAI/C,QAAQgD,KAAK,KAAK,WAAW;QAC/BhD,QAAQiD,UAAU,CAACC,IAAI,CAACH;IAC1B,OAAO;QACLA;IACF;AACF;AAEA,SAASP;IACP,MAAM,EAAEb,OAAO,EAAEgB,OAAO,EAAEC,MAAM,EAAE,GAAGO,CAAAA,GAAAA,sBAAAA,0BAA0B;IAC/D,OAAO;QACLH,OAAO;QACPhC,aAAa;QACbW;QACAsB,YAAY,EAAE;QACdG,iBAAiBT;QACjBU,gBAAgBT;IAClB;AACF;AAEA,SAASnB,iBAAiBzB,OAAqB;IAC7C,IAAIA,QAAQgD,KAAK,KAAK,WAAW;QAC/B;IACF;IACAhD,QAAQgD,KAAK,GAAG;IAChBhD,QAAQgB,WAAW,GAAGsC,YAAYC,GAAG,KAAKD,YAAYE,UAAU;IAChE,IAAI;QACF,MAAM,EAAEP,YAAYQ,SAAS,EAAE,GAAGzD;QAClC,IAAK,IAAIqB,IAAI,GAAGA,IAAIoC,UAAUC,MAAM,EAAErC,IAAK;YACzCoC,SAAS,CAACpC,EAAE;QACd;QACAoC,UAAUC,MAAM,GAAG;IACrB,SAAU;QACR1D,QAAQoD,eAAe;IACzB;AACF;AAEA,SAASjD,mBAAmBH,OAAqB,EAAED,MAAe;IAChE,IAAIC,QAAQgD,KAAK,KAAK,WAAW;QAC/B;IACF;IACAhD,QAAQgD,KAAK,GAAG;IAChB,kDAAkD;IAElD,gEAAgE;IAChEhD,QAAQiD,UAAU,CAACS,MAAM,GAAG;IAE5B,8EAA8E;IAC9E1D,QAAQ2B,OAAO,CAACW,KAAK,CAACC;IACtBvC,QAAQqD,cAAc,CAACtD;AACzB","ignoreList":[0]}}, + {"offset": {"line": 14027, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/create-deduped-by-callsite-server-error-logger.ts"],"sourcesContent":["import * as React from 'react'\n\nconst errorRef: { current: null | Error } = { current: null }\n\n// React.cache is currently only available in canary/experimental React channels.\nconst cache =\n typeof React.cache === 'function'\n ? React.cache\n : (fn: (key: unknown) => void) => fn\n\n// When Cache Components is enabled, we record these as errors so that they\n// are captured by the dev overlay as it's more critical to fix these\n// when enabled.\nconst logErrorOrWarn = process.env.__NEXT_CACHE_COMPONENTS\n ? console.error\n : console.warn\n\n// We don't want to dedupe across requests.\n// The developer might've just attempted to fix the warning so we should warn again if it still happens.\nconst flushCurrentErrorIfNew = cache(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- cache key\n (key: unknown) => {\n try {\n logErrorOrWarn(errorRef.current)\n } finally {\n errorRef.current = null\n }\n }\n)\n\n/**\n * Creates a function that logs an error message that is deduped by the userland\n * callsite.\n * This requires no indirection between the call of this function and the userland\n * callsite i.e. there's only a single library frame above this.\n * Do not use on the Client where sourcemaps and ignore listing might be enabled.\n * Only use that for warnings need a fix independent of the callstack.\n *\n * @param getMessage\n * @returns\n */\nexport function createDedupedByCallsiteServerErrorLoggerDev(\n getMessage: (...args: Args) => Error\n) {\n return function logDedupedError(...args: Args) {\n const message = getMessage(...args)\n\n if (process.env.NODE_ENV !== 'production') {\n const callStackFrames = new Error().stack?.split('\\n')\n if (callStackFrames === undefined || callStackFrames.length < 4) {\n logErrorOrWarn(message)\n } else {\n // Error:\n // logDedupedError\n // asyncApiBeingAccessedSynchronously\n // \n // TODO: This breaks if sourcemaps with ignore lists are enabled.\n const key = callStackFrames[4]\n errorRef.current = message\n flushCurrentErrorIfNew(key)\n }\n } else {\n logErrorOrWarn(message)\n }\n }\n}\n"],"names":["createDedupedByCallsiteServerErrorLoggerDev","errorRef","current","cache","React","fn","logErrorOrWarn","process","env","__NEXT_CACHE_COMPONENTS","console","error","warn","flushCurrentErrorIfNew","key","getMessage","logDedupedError","args","message","NODE_ENV","callStackFrames","Error","stack","split","undefined","length"],"mappings":";;;+BAyCgBA,+CAAAA;;;eAAAA;;;+DAzCO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEvB,MAAMC,WAAsC;IAAEC,SAAS;AAAK;AAE5D,iFAAiF;AACjF,MAAMC,QACJ,OAAOC,OAAMD,KAAK,KAAK,aACnBC,OAAMD,KAAK,GACX,CAACE,KAA+BA;AAEtC,2EAA2E;AAC3E,qEAAqE;AACrE,gBAAgB;AAChB,MAAMC,iBAAiBC,QAAQC,GAAG,CAACC,uBAAuB,IACtDC,QAAQC,KAAK,GACbD,QAAQE,IAAI;AAEhB,2CAA2C;AAC3C,wGAAwG;AACxG,MAAMC,yBAAyBV,MAC7B,AACA,CAACW,yEADyE;IAExE,IAAI;QACFR,eAAeL,SAASC,OAAO;IACjC,SAAU;QACRD,SAASC,OAAO,GAAG;IACrB;AACF;AAcK,SAASF,4CACde,UAAoC;IAEpC,OAAO,SAASC,gBAAgB,GAAGC,IAAU;QAC3C,MAAMC,UAAUH,cAAcE;QAE9B,IAAIV,QAAQC,GAAG,CAACW,QAAQ,KAAK,WAAc;gBACjB;YAAxB,MAAMC,kBAAAA,CAAkB,SAAA,IAAIC,QAAQC,KAAK,KAAA,OAAA,KAAA,IAAjB,OAAmBC,KAAK,CAAC;YACjD,IAAIH,oBAAoBI,aAAaJ,gBAAgBK,MAAM,GAAG,GAAG;gBAC/DnB,eAAeY;YACjB,OAAO;gBACL,SAAS;gBACT,oBAAoB;gBACpB,uCAAuC;gBACvC,wBAAwB;gBACxB,iEAAiE;gBACjE,MAAMJ,MAAMM,eAAe,CAAC,EAAE;gBAC9BnB,SAASC,OAAO,GAAGgB;gBACnBL,uBAAuBC;YACzB;QACF,OAAO;;IAGT;AACF","ignoreList":[0]}}, + {"offset": {"line": 14122, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/dynamic-rendering-utils.ts"],"sourcesContent":["import { InvariantError } from '../shared/lib/invariant-error'\nimport { createPromiseWithResolvers } from '../shared/lib/promise-with-resolvers'\nimport { EnsureStaticLevel } from './app-render/segment-config/ensure-static'\nimport {\n RenderStage,\n type StagedRenderingController,\n type AdvanceableRenderStage,\n} from './app-render/staged-rendering'\nimport { workAsyncStorage } from './app-render/work-async-storage.external'\nimport type {\n RequestStore,\n WorkUnitStore,\n} from './app-render/work-unit-async-storage.external'\nimport { workUnitAsyncStorage } from './app-render/work-unit-async-storage.external'\nimport { getServerReact, getClientReact } from './runtime-reacts.external'\n\nexport function isHangingPromiseRejectionError(\n err: unknown\n): err is HangingPromiseRejectionError {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false\n }\n\n return err.digest === HANGING_PROMISE_REJECTION\n}\n\nconst HANGING_PROMISE_REJECTION = 'HANGING_PROMISE_REJECTION'\n\nclass HangingPromiseRejectionError extends Error {\n public readonly digest = HANGING_PROMISE_REJECTION\n\n constructor(\n public readonly route: string,\n public readonly expression: string\n ) {\n super(\n `During prerendering, ${expression} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${expression} to a different context by using \\`setTimeout\\`, \\`after\\`, or similar functions you may observe this error and you should handle it in that context. This occurred at route \"${route}\".`\n )\n }\n}\n\nconst CLIENT_HOOK_DYNAMIC = 'CLIENT_HOOK_DYNAMIC'\n\nexport class ClientHookDynamicError extends Error {\n public readonly digest = CLIENT_HOOK_DYNAMIC\n\n constructor(route: string, expression: string) {\n super(\n `Route \"${route}\": Next.js encountered URL data \\`${expression}\\` in a Client Component outside of \\`\\`.\\n\\n` +\n `This blocks prerendering because the value is only available at runtime.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Wrap the component in \\`\\` so the hook value streams in after prerendering\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-client-hook`\n )\n }\n}\n\nexport function isClientHookDynamicError(\n err: unknown\n): err is ClientHookDynamicError {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false\n }\n\n return err.digest === CLIENT_HOOK_DYNAMIC\n}\n\ntype AbortListeners = Array<() => void>\nconst abortListenersBySignal = new WeakMap()\n\n/**\n * Constructs a promise that never resolves, standing in for *dynamic* data:\n * data that is only available during a real dynamic request and hangs in\n * every kind of prerender — `io()`, `connection()`, uncached `fetch()`.\n *\n * This is primarily useful for cacheComponents where we use promise\n * resolution timing to determine which parts of a render can be included in a\n * prerender.\n *\n * Records nothing on the prerender store: the promise's holes are only ever\n * filled by a real dynamic request, so a runtime prefetch response would have\n * the same holes as the static one. If the data source would resolve during a\n * runtime prerender, use `makeRuntimeHangingPromise` instead.\n */\nexport function makeDynamicHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string\n): Promise {\n return makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n}\n\nexport function makeUntrackedHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string\n): Promise {\n return makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n}\n\n/**\n * Constructs a promise that never resolves, standing in for session data\n * (which a runtime shell can access).\n * Examples: cookies, headers\n *\n * Awaiting one of these during a static prerender records on the prerender\n * store that a runtime shell would produce more content than the static\n * static shell, which the segment prefetch encoding uses\n * to tell the client whether a runtime request could be skipped.\n *\n * When unsure whether data is dynamic or runtime, prefer this method — the\n * cost of over-recording is a redundant runtime prefetch request; the cost of\n * under-recording is a permanently missing one.\n *\n * For fallback-param data — data a concrete (ISR-upgraded) prerender would\n * resolve — use `makeFallbackParamsHangingPromise` instead, so the access\n * is recorded with the right effect on the static-prefetch hint.\n */\nexport function makeSessionDataHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string,\n workUnitStore: WorkUnitStore\n): Promise {\n const promise = makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n return trackPromiseUsed(\n promise,\n trackSessionDataAccessed.bind(null, workUnitStore, expression)\n )\n}\n\n/**\n * Constructs a promise that never resolves, standing in for URL data,\n * which can be accessed in a runtime prefetch (but not a runtime shell).\n * Examples: fallback params, searchParams\n *\n * Awaiting one of these during a static prerender records on the prerender\n * store that a runtime prefetch would produce more content than the static\n * response, which the segment prefetch encoding uses\n * to tell the client whether a runtime prefetch request could be skipped.\n *\n * When unsure whether data is dynamic or runtime, prefer this method — the\n * cost of over-recording is a redundant runtime prefetch request; the cost of\n * under-recording is a permanently missing one.\n *\n * `workUnitStore` may be null ONLY when the caller tracks the access itself.\n * Such a caller MUST call `trackURLDataAccessed` from every path that\n * observes the promise (e.g. the proxy traps for `then`/`status`),\n * against the work unit store active at access time.\n *\n * For fallback-param data — data a concrete (ISR-upgraded) prerender would\n * resolve — use `makeFallbackParamsHangingPromise` instead, so the access\n * is recorded with the right effect on the static-prefetch hint.\n */\nexport function makeURLDataHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string,\n workUnitStore: WorkUnitStore | null\n): Promise {\n const promise = makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n if (workUnitStore === null) {\n return promise\n }\n return trackPromiseUsed(\n promise,\n trackURLDataAccessed.bind(null, workUnitStore, expression)\n )\n}\n\n/**\n * Creates a promise that stands in for a result that will either be session data\n * or URL data, but we don't know which.\n */\nexport function makeUnknownRuntimeDataHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string,\n workUnitStore: WorkUnitStore\n): Promise {\n // We don't know if this is session or URL data, i.e. if it should affect the shell\n // or only the prefetch. Track it conservatively as affecting both.\n return makeSessionDataHangingPromise(signal, route, expression, workUnitStore)\n}\n\n/**\n * Constructs a promise that never resolves, standing in for data that is only\n * accessible in the prefetch, but not in the shell, e.g. `prefetch()`.\n * This usage does *not* indicate that a runtime request is needed,\n * only that the data is not available in a shell.\n *\n * @internal\n */\nexport function makePrefetchHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string\n): Promise {\n return makeUntrackedHangingPromise(signal, route, expression)\n}\n\n/**\n * Variant of `makeRuntimeHangingPromise` for *fallback-param* data: fallback\n * route params and values derived solely from them (`params`, `rootParams`,\n * `pathname` during a fallback prerender). Like every runtime data access,\n * awaiting it records the access on the prerender store's response-level flag,\n * but its effect on the build-time static-prefetch hint differs — on a\n * fallback-upgradeable route the access is transient (a concrete prerender\n * resolves it), so it leaves the hint intact. See `trackFallbackParamsAccessed`.\n *\n * As with `makeRuntimeHangingPromise`, `workUnitStore` may be null ONLY when\n * the caller tracks the access itself by calling `trackFallbackParamsAccessed`\n * from every path that observes the promise.\n */\nexport function makeFallbackParamsHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string,\n workUnitStore: WorkUnitStore | null\n): Promise {\n const promise = makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n if (workUnitStore === null) {\n return promise\n }\n return trackPromiseUsed(\n promise,\n trackFallbackParamsAccessed.bind(null, workUnitStore, expression)\n )\n}\n\nexport type PrerenderDataTracking = {\n /**\n * Records when the render has accessed a request data source\n * that hangs during a static prerender but would resolve during a runtime\n * prerender — cookies, headers, fallback params, searchParams, and cache\n * entries excluded only from static prerenders.\n *\n * The client uses this promise as the actual source of truth for whether a segment\n * needs a runtime request. Prefetch hints can become stale after a revalidation,\n * so if a hint says a static request should be enough but `runtimeDataAccessed`\n * resolves to `true`, a follow-up runtime request will be issued.\n * This applies to both shells and prefetches.\n *\n * The promise is embedded in the RSC payload (`InitialRSCPayload['u']`),\n * and is meant to be rewindable. This means that the shell might not have\n * any runtime data accesses, even when the prefetch does.\n * (this has some subtleties; see `markRuntimeDataAccessWhenStageReached`\n * for more)\n *\n * After the prerender, the promise is consumed by `collectSegmentData` and each\n * static prefetch will contain it (`PrefetchFlightResponse['u']`).\n * However, all the segments for a route will use the same promise (because we're\n * only tracking this on the page level) so if one segment needs runtime data, then\n * all segments will be marked as such.\n * However, on the client `isPartial` takes precedence over `runtimeDataAccessed`,\n * so complete segments will not end up being deopted.\n */\n readonly runtimeDataAccessed: PromiseWithResolvers\n\n /** Corresponds to `PrefetchHint.ShouldAttemptStaticShell`. */\n shouldAttemptStaticShell: boolean\n /** Corresponds to `PrefetchHint.ShouldAttemptStaticPrefetch`. */\n shouldAttemptStaticPrefetch: boolean\n}\n\nexport function createPrerenderDataTracking(): PrerenderDataTracking {\n return {\n runtimeDataAccessed: createPromiseWithResolvers(),\n shouldAttemptStaticShell: true,\n shouldAttemptStaticPrefetch: true,\n }\n}\n\nexport function finishPrerenderDataTracking(\n prerenderDataTracking: PrerenderDataTracking\n) {\n // If a runtime data access already resolved this promise, this is a no-op.\n prerenderDataTracking.runtimeDataAccessed.resolve(false)\n}\n\n/**\n * Records on a static prerender store that the render accessed a data source\n * which would have resolved in a runtime shell (or runtime prefetch).\n * No-op for all other store types.\n *\n * Prefer `makeRuntimeHangingPromise`. Use this function only when implementing\n * similar tracking and that one is not enough.\n */\nfunction trackSessionDataAccessed(\n workUnitStore: WorkUnitStore,\n expression: string\n): void {\n trackRuntimeDataAccessed(\n workUnitStore,\n PrerenderDataKind.SessionData,\n expression\n )\n}\n\n/**\n * Records on a static prerender store that the render accessed a data source\n * which would have resolved in a runtime prefetch (but NOT in a runtime shell)\n * No-op for all other store types.\n *\n * Prefer `makeRuntimeHangingPromise`. Use this function only when implementing\n * similar tracking and that one is not enough.\n *\n * For fallback-param data, use `trackFallbackParamsAccessed` instead. When\n * unsure, this is the conservative choice.\n */\nexport function trackURLDataAccessed(\n workUnitStore: WorkUnitStore,\n expression: string\n): void {\n trackRuntimeDataAccessed(workUnitStore, PrerenderDataKind.UrlData, expression)\n}\n\n/**\n * Fallback-param variant of `trackRuntimeDataAccessed`, for accesses of\n * fallback route params and values derived solely from them. It records the\n * response-level flag all the same, but only clears the build-time\n * static-prefetch hint when the route is not fallback-upgradeable — on an\n * upgradeable route the access is transient, since ISR later produces a\n * concrete prerender that resolves it.\n */\nexport function trackFallbackParamsAccessed(\n workUnitStore: WorkUnitStore,\n expression: string\n): void {\n trackRuntimeDataAccessed(\n workUnitStore,\n PrerenderDataKind.FallbackParams,\n expression\n )\n}\n\nconst enum PrerenderDataKind {\n SessionData = 1,\n UrlData = 2,\n FallbackParams = 3,\n}\n\nfunction trackRuntimeDataAccessed(\n workUnitStore: WorkUnitStore,\n dataKind: PrerenderDataKind,\n expression: string\n): void {\n switch (workUnitStore.type) {\n case 'prerender': {\n const { prerenderDataTracking, stagedRendering } = workUnitStore\n if (!prerenderDataTracking || !stagedRendering) {\n return\n }\n const { currentStage } = stagedRendering\n if (currentStage === RenderStage.Before) {\n console.error(\n new InvariantError(\n 'Unexpected trackRuntimeDataAccessed in the Before stage.'\n )\n )\n return\n }\n if (currentStage >= RenderStage.NavigationStatic) {\n // Ignore any accesses that happen after `navigation()` resolves.\n // The purpose of this tracking is to judge whether a runtime prefetch\n // would give us a more complete result than a static one.\n // But `navigation()` wouldn't have resolved in a runtime prefetch,\n // so e.g. `await navigation(); await cookies()` wouldn't have more content\n // in those, and we shouldn't count it.\n return\n }\n\n const ensureStaticLevel =\n workUnitStore.ensureStaticLevel ?? EnsureStaticLevel.None\n\n // NOTE: In general, we keep hints in sync with `needsRuntimeRequest`, but they\n // don't have to always match. The client re-uses hints for the entire route,\n // while `needsRuntimeRequest` can vary across individual prerendered param values\n // (e.g. if cookies are accessed depending on a param value).\n // Hints can also become outdated if a route only starts using runtime data\n // after a revalidation, so we have to expect this and be resilient to it.\n // Also see the upgradeable fallback params case below, which deliberately\n // puts them out of sync.\n\n switch (dataKind) {\n case PrerenderDataKind.SessionData: {\n // Potentially deopt both the shell and the prefetch,\n // because if the shell accessed runtime data, so does the prefetch.\n // However, if we're already past the shell stage, the shell is not affected.\n // (which makes e.g. `await prefetch(); await cookies()` only affect the prefetch)\n let firstAffectedStage:\n | RenderStage.ShellStatic\n | RenderStage.PrefetchStatic\n | null = null\n\n if (\n currentStage <= RenderStage.ShellStatic &&\n // Only track if we're not forcing the shell to be static.\n ensureStaticLevel < EnsureStaticLevel.Shell\n ) {\n prerenderDataTracking.shouldAttemptStaticShell = false\n firstAffectedStage ??= RenderStage.ShellStatic\n logRuntimeDeopt?.(expression, 'shell')\n }\n\n if (\n currentStage <= RenderStage.PrefetchStatic &&\n // Only track if we're not forcing the prefetch to be static.\n ensureStaticLevel < EnsureStaticLevel.Prefetch\n ) {\n prerenderDataTracking.shouldAttemptStaticPrefetch = false\n // NOTE: if the shell is affected, don't override it.\n firstAffectedStage ??= RenderStage.PrefetchStatic\n logRuntimeDeopt?.(expression, 'prefetch')\n }\n\n if (firstAffectedStage !== null) {\n markRuntimeDataAccessWhenStageReached(\n prerenderDataTracking,\n stagedRendering,\n firstAffectedStage\n )\n }\n break\n }\n case PrerenderDataKind.FallbackParams: {\n if (workUnitStore.isFallbackUpgradeable) {\n // An fallback-param access is transient when the route is\n // fallback-upgradeable (i.e. ISR later produces the concrete prerender a\n // static prefetch would hit) so it does not indicate the need for a runtime\n // request and thus does not affect the static hints.\n //\n // If runtime prefetches are not disallowed by `ensureStatic`, then we still\n // set `runtimeDataAccessed` (while keeping the hints static). This means that\n // if the concrete prerender isn't ready yet and we served the fallback, then\n // the client knows it can use a *runtime* prefetch for speculative links --\n // a runtime prefetch can provide the same content (or more) as the concrete\n // prerender would.\n if (ensureStaticLevel < EnsureStaticLevel.Prefetch) {\n markRuntimeDataAccessWhenStageReached(\n prerenderDataTracking,\n stagedRendering,\n // `params` are URL data, so they only affect the prefetch\n RenderStage.PrefetchStatic\n )\n logRuntimeUpgradeableFallback?.()\n }\n break\n }\n // not an upgradeable fallback param access, so we treat it as URL data.\n // intentional fallthrough\n }\n case PrerenderDataKind.UrlData: {\n // Only deopt the prefetch, not the shell, which cannot access URL data anyway.\n if (\n currentStage <= RenderStage.PrefetchStatic &&\n ensureStaticLevel < EnsureStaticLevel.Prefetch\n ) {\n prerenderDataTracking.shouldAttemptStaticPrefetch = false\n logRuntimeDeopt?.(expression, 'prefetch')\n\n markRuntimeDataAccessWhenStageReached(\n prerenderDataTracking,\n stagedRendering,\n RenderStage.PrefetchStatic\n )\n }\n break\n }\n }\n\n break\n }\n case 'prerender-client':\n case 'prerender-legacy':\n case 'prerender-runtime':\n case 'validation-client':\n case 'request':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n // Only the modern server prerender tracks this; see the field docs on\n // PrerenderStoreModernServer.\n break\n default:\n workUnitStore satisfies never\n }\n}\n\n/**\n * Tracks a runtime data access on the `runtimeDataAccessed` promise,\n * but with a delay until `targetStage`.\n *\n * When we encounter a URL data access like `await params`, we need to mark the\n * *prefetch* as needing runtime data, but the *shell* should remain unaffected\n * (because it cannot access params anyway).\n *\n * However, the shell and the prefetch share one `runtimeDataAccessed` promise,\n * and it needs to be accurately rewindable by the client\n * In other words, we need to make sure that it reads as `false` when rewound\n * to a shell, but as `true` in the final response (the prefetch).\n *\n * This means that if the `await params` is encountered during the shell stage, we\n * cannot resolve `runtimeDataAccessed` immediately.\n * Instead, we delay the resolution until the PrefetchStatic stage, so the promise\n * will remain unresolved when rewound to the shell stage (which reads as `false`).\n */\nfunction markRuntimeDataAccessWhenStageReached(\n prerenderDataTracking: PrerenderDataTracking,\n stageController: StagedRenderingController,\n targetStage: AdvanceableRenderStage\n) {\n const { runtimeDataAccessed } = prerenderDataTracking\n // NOTE: If we're already in or past the target stage, we can avoid allocating a closure,\n // because `onStage` would've executed the callback immediately anyway.\n if (stageController.currentStage >= targetStage) {\n runtimeDataAccessed.resolve(true)\n } else {\n stageController.onStage(\n targetStage,\n runtimeDataAccessed.resolve.bind(null, true)\n )\n }\n}\n\nconst logRuntimeDeopt = process.env.NEXT_PRIVATE_DEBUG_RUNTIME_DATA\n ? (expression: string, kind: 'shell' | 'prefetch') => {\n const { route } = workAsyncStorage.getStore()!\n console.log(\n `Route '${route}': deopting to a runtime ${kind} because it used ${expression}`\n )\n }\n : undefined\n\nconst logRuntimeUpgradeableFallback = process.env\n .NEXT_PRIVATE_DEBUG_RUNTIME_DATA\n ? () => {\n const { route } = workAsyncStorage.getStore()!\n console.log(\n `Route '${route}': marking upgradeable fallback as runtime prefetchable`\n )\n }\n : undefined\n\n/**\n * Signals that we cannot recover both a runtime shell and a static (PPR) shell\n * from the same render. Use this whenever the stage of a promise varies on\n * `RequestStore.needsRuntimeShell`.\n * */\nexport function trackIncompatibleShellContent(\n workUnitStore: RequestStore,\n reason: string\n) {\n const { stagedRendering } = workUnitStore\n if (!stagedRendering) {\n return\n }\n\n // TODO(app-shells): optimize this to only consider stages that are relevant for validation.\n // We should only track incompatible content when it can affect them.\n // For now, we simply exclude everything that happens in the dynamic stage.\n // (Note that we also need to account for cache misses that move things to a\n // different stage -- those should also preemptively set `hasIncompatibleShellContent`\n // because there's a chance that a render with warm caches would set it)\n const { currentStage } = stagedRendering\n if (\n currentStage === RenderStage.Dynamic ||\n currentStage === RenderStage.Abandoned\n ) {\n return\n }\n if (process.env.NEXT_PRIVATE_DEBUG_VALIDATION) {\n const workStore = workAsyncStorage.getStore()!\n console.log(\n `Route ${workStore.route}: Incompatible shell content: ${reason}`\n )\n }\n workUnitStore.hasIncompatibleShellContent = true\n}\n\nexport function makeClientHookHangingPromise(\n signal: AbortSignal,\n error: ClientHookDynamicError\n): Promise {\n return makeHangingPromiseWithError(signal, error)\n}\n\nfunction makeHangingPromiseWithError(\n signal: AbortSignal,\n error: Error\n): Promise {\n if (signal.aborted) {\n return Promise.reject(error)\n } else {\n const hangingPromise = new Promise((_, reject) => {\n const boundRejection = reject.bind(null, error)\n let currentListeners = abortListenersBySignal.get(signal)\n if (currentListeners) {\n currentListeners.push(boundRejection)\n } else {\n const listeners = [boundRejection]\n abortListenersBySignal.set(signal, listeners)\n signal.addEventListener(\n 'abort',\n () => {\n for (let i = 0; i < listeners.length; i++) {\n listeners[i]()\n }\n },\n { once: true }\n )\n }\n })\n // We are fine if no one actually awaits this promise. We shouldn't consider this an unhandled rejection so\n // we attach a noop catch handler here to suppress this warning. If you actually await somewhere or construct\n // your own promise out of it you'll need to ensure you handle the error when it rejects.\n hangingPromise.catch(ignoreReject)\n return hangingPromise\n }\n}\n\nfunction ignoreReject() {}\n\n/**\n * Creates a promise that will be triggered when another promise resolves.\n * It will not emit unhandled rejections, which is important if the trigger\n * is a promise that might itself get rejected (e.g. when a prerender/render\n * are aborted due to sync IO)\n */\nexport function makePromiseFromTrigger(\n trigger: Promise,\n value: T\n): Promise {\n const promise = trigger.then(() => value)\n promise.catch(ignoreReject)\n return promise\n}\n\nexport function makeDevtoolsIOAwarePromise(\n underlying: T,\n requestStore: RequestStore,\n stage: AdvanceableRenderStage\n): Promise {\n if (requestStore.stagedRendering) {\n // We resolve each stage in a timeout, so React DevTools will pick this up as IO.\n return requestStore.stagedRendering.delayUntilStage(\n stage,\n undefined,\n underlying\n )\n }\n // in React DevTools if we resolve in a setTimeout we will observe\n // the promise resolution as something that can suspend a boundary or root.\n return new Promise((resolve) => {\n // Must use setTimeout to be considered IO React DevTools. setImmediate will not work.\n setTimeout(() => {\n resolve(underlying)\n }, 0)\n })\n}\n\n/**\n * Invokes `onUse` whenever `then()/catch()/finally()` are called on the promise\n * or when the promise is awaited. */\nexport function trackPromiseUsed(\n promise: Promise,\n onUse: () => void\n): Promise {\n // We can instrument `.then()/.catch()/.finally()` in one go by using a Promise subclass\n // that implements a custom `.then()`, because `catch` and `finally` delegate to it.\n //\n // Alternative implementation ideas that were tried and rejected:\n //\n // 1. Patching the methods directly via `promise.then = (..args) => { ... }`:\n // doesn't work, because Node does not call the monkeypatched methods for native `await`:\n // > Native Promise [...]: The promise is directly used and awaited natively, without calling `then()`.\n // > https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await#description\n //\n // 2. Wrapping in a proxy that returns a custom `then/catch/finally`:\n // breaks async stacks in React's IO tracking (stack becomes `Promise.then`)\n return TrackedPromise.from(promise, onUse)\n}\n\nclass TrackedPromise extends Promise {\n #onUse: (() => void) | null = null\n\n // We don't need derived promises to also be a TrackedPromise.\n // We only care about the first level of `.then()`.\n static get [Symbol.species]() {\n return Promise\n }\n\n static from(promise: Promise, onUse: () => void): TrackedPromise {\n // Whenever the promise we're tracking resolves/rejects, we should follow.\n const tracked = new TrackedPromise(promise.then.bind(promise))\n\n tracked.#onUse = onUse\n\n // Hanging promises catch rejections when created. Tracked promises are generally derived\n // from promises that may hang & reject, so we need to do the same.\n // However, we have to bypass the tracking we do in `TrackedPromise.then`.\n // (we're using `then` directly, because `catch` ends up delegating `TrackedPromise.then`)\n Promise.prototype.then.call(tracked, undefined, ignoreReject)\n\n return tracked\n }\n\n then(\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: unknown) => TResult2 | PromiseLike\n ): Promise {\n const onUse = this.#onUse\n if (onUse) {\n try {\n onUse()\n } catch (err) {\n // We don't want to break the method even if our tracking errored.\n console.error(err)\n }\n }\n\n return Promise.prototype.then.call(\n this,\n onFulfilled,\n onRejected\n ) as Promise\n }\n}\n\nexport const RENDER_STAGES_BY_DATA_KIND = {\n sessionData: RenderStage.ShellRuntime as const,\n /**\n * Statically-prerenderable URL data, like static `params`.\n * It may need to be pushed to a runtime stage in a runtime prerender,\n * but it's semantically distinct from `runtimeUrlData` like `searchParams`,\n * which is always excluded from static prerenders.\n * */\n staticUrlData: {\n /**\n * From that app's point of view, `prefetch()` is semantically the same as\n * `staticUrlData`, because it does not resolve in a shell but resolves in\n * a prefetch (even a static one).\n * We handle it separately to provide a specialized error in validation renders.\n */\n prefetchApi: {\n static: RenderStage.PrefetchStatic_prefetchApi as const,\n runtime: RenderStage.PrefetchRuntime_prefetchApi as const,\n },\n static: RenderStage.PrefetchStatic as const,\n runtime: RenderStage.PrefetchRuntime as const,\n },\n /**\n * URL data that is never statically-prerenderable, like static `searchParams`.\n * */\n runtimeUrlData: RenderStage.PrefetchRuntime as const,\n}\n\nexport function applyOwnerStack(error: Error): Error {\n if (process.env.NODE_ENV !== 'production') {\n let ownerStack: string | undefined | null\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n // captureOwnerStack() returns the owner stack for the current React\n // rendering context. Inside a cache scope this only includes the inner\n // component tree. The outer owner stack (captured before entering the\n // cache boundary in use-cache-wrapper.ts) is stored on the cache store.\n // We concatenate both to get the full component tree.\n const innerOwnerStack =\n getClientReact()?.captureOwnerStack?.() ??\n getServerReact()?.captureOwnerStack?.()\n\n switch (workUnitStore?.type) {\n case 'cache':\n case 'private-cache':\n ownerStack =\n (innerOwnerStack || '') + (workUnitStore.outerOwnerStack || '') ||\n undefined\n break\n case 'unstable-cache':\n case 'request':\n case 'prerender':\n case 'prerender-legacy':\n case 'prerender-runtime':\n case 'prerender-client':\n case 'validation-client':\n case 'build-time-generator':\n case undefined:\n ownerStack = innerOwnerStack\n break\n default:\n workUnitStore satisfies never\n }\n\n if (ownerStack) {\n let stack = ownerStack\n\n if (error.stack) {\n const frames: string[] = []\n\n for (const frame of error.stack.split('\\n').slice(1)) {\n if (frame.includes('react_stack_bottom_frame')) {\n break\n }\n\n frames.push(frame)\n }\n\n stack = '\\n' + frames.join('\\n') + stack\n }\n\n error.stack = error.name + ': ' + error.message + stack\n }\n }\n\n return error\n}\n"],"names":["ClientHookDynamicError","RENDER_STAGES_BY_DATA_KIND","applyOwnerStack","createPrerenderDataTracking","finishPrerenderDataTracking","isClientHookDynamicError","isHangingPromiseRejectionError","makeClientHookHangingPromise","makeDevtoolsIOAwarePromise","makeDynamicHangingPromise","makeFallbackParamsHangingPromise","makePrefetchHangingPromise","makePromiseFromTrigger","makeSessionDataHangingPromise","makeURLDataHangingPromise","makeUnknownRuntimeDataHangingPromise","makeUntrackedHangingPromise","trackFallbackParamsAccessed","trackIncompatibleShellContent","trackPromiseUsed","trackURLDataAccessed","err","digest","HANGING_PROMISE_REJECTION","HangingPromiseRejectionError","Error","constructor","route","expression","CLIENT_HOOK_DYNAMIC","abortListenersBySignal","WeakMap","signal","makeHangingPromiseWithError","workUnitStore","promise","trackSessionDataAccessed","bind","runtimeDataAccessed","createPromiseWithResolvers","shouldAttemptStaticShell","shouldAttemptStaticPrefetch","prerenderDataTracking","resolve","trackRuntimeDataAccessed","dataKind","type","stagedRendering","currentStage","RenderStage","Before","console","error","InvariantError","NavigationStatic","ensureStaticLevel","EnsureStaticLevel","None","firstAffectedStage","ShellStatic","Shell","logRuntimeDeopt","PrefetchStatic","Prefetch","markRuntimeDataAccessWhenStageReached","isFallbackUpgradeable","logRuntimeUpgradeableFallback","stageController","targetStage","onStage","process","env","NEXT_PRIVATE_DEBUG_RUNTIME_DATA","kind","workAsyncStorage","getStore","log","undefined","reason","Dynamic","Abandoned","NEXT_PRIVATE_DEBUG_VALIDATION","workStore","hasIncompatibleShellContent","aborted","Promise","reject","hangingPromise","_","boundRejection","currentListeners","get","push","listeners","set","addEventListener","i","length","once","catch","ignoreReject","trigger","value","then","underlying","requestStore","stage","delayUntilStage","setTimeout","onUse","TrackedPromise","from","Symbol","species","tracked","prototype","call","onFulfilled","onRejected","sessionData","ShellRuntime","staticUrlData","prefetchApi","static","PrefetchStatic_prefetchApi","runtime","PrefetchRuntime_prefetchApi","PrefetchRuntime","runtimeUrlData","NODE_ENV","getClientReact","getServerReact","ownerStack","workUnitAsyncStorage","innerOwnerStack","captureOwnerStack","outerOwnerStack","stack","frames","frame","split","slice","includes","join","name","message"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 14650, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/app-dir-module.ts"],"sourcesContent":["import type { AppDirModules } from '../../build/webpack/loaders/next-app-loader'\nimport { DEFAULT_SEGMENT_KEY } from '../../shared/lib/segment'\n\n/**\n * LoaderTree is generated in next-app-loader.\n */\nexport type LoaderTree = [\n segment: string,\n parallelRoutes: { [parallelRouterKey: string]: LoaderTree },\n modules: AppDirModules,\n /**\n * At build time, for each dynamic segment, we compute the list of static\n * sibling segments that exist at the same URL path level. This is used by\n * the client router to determine if a prefetch can be reused.\n *\n * For example, given the following file structure:\n * /app/(group1)/products/sale/page.tsx -> /products/sale\n * /app/(group2)/products/[id]/page.tsx -> /products/[id]\n *\n * The [id] segment would have staticSiblings: ['sale']\n *\n * This accounts for route groups, which may place sibling routes in\n * different parts of the file system tree but at the same URL level.\n *\n * A value of `null` means the static siblings are unknown (e.g., in webpack\n * dev mode where routes are compiled on-demand).\n */\n staticSiblings: readonly string[] | null,\n]\n\nexport async function getLayoutOrPageModule(loaderTree: LoaderTree) {\n const { layout, page, defaultPage } = loaderTree[2]\n const isLayout = typeof layout !== 'undefined'\n const isPage = typeof page !== 'undefined'\n const isDefaultPage =\n typeof defaultPage !== 'undefined' && loaderTree[0] === DEFAULT_SEGMENT_KEY\n\n let mod = undefined\n let modType: 'layout' | 'page' | undefined = undefined\n let filePath = undefined\n\n if (isLayout) {\n mod = await layout[0]()\n modType = 'layout'\n filePath = layout[1]\n } else if (isPage) {\n mod = await page[0]()\n modType = 'page'\n filePath = page[1]\n } else if (isDefaultPage) {\n mod = await defaultPage[0]()\n modType = 'page'\n filePath = defaultPage[1]\n }\n\n return { mod, modType, filePath }\n}\n\nexport async function getComponentTypeModule(\n loaderTree: LoaderTree,\n moduleType: 'layout' | 'not-found' | 'forbidden' | 'unauthorized'\n) {\n const { [moduleType]: module } = loaderTree[2]\n if (typeof module !== 'undefined') {\n return await module[0]()\n }\n return undefined\n}\n"],"names":["getComponentTypeModule","getLayoutOrPageModule","loaderTree","layout","page","defaultPage","isLayout","isPage","isDefaultPage","DEFAULT_SEGMENT_KEY","mod","undefined","modType","filePath","moduleType","module"],"mappings":";;;;;;;;;;;;;;IA0DsBA,sBAAsB,EAAA;eAAtBA;;IA5BAC,qBAAqB,EAAA;eAArBA;;;yBA7Bc;AA6B7B,eAAeA,sBAAsBC,UAAsB;IAChE,MAAM,EAAEC,MAAM,EAAEC,IAAI,EAAEC,WAAW,EAAE,GAAGH,UAAU,CAAC,EAAE;IACnD,MAAMI,WAAW,OAAOH,WAAW;IACnC,MAAMI,SAAS,OAAOH,SAAS;IAC/B,MAAMI,gBACJ,OAAOH,gBAAgB,eAAeH,UAAU,CAAC,EAAE,KAAKO,SAAAA,mBAAmB;IAE7E,IAAIC,MAAMC;IACV,IAAIC,UAAyCD;IAC7C,IAAIE,WAAWF;IAEf,IAAIL,UAAU;QACZI,MAAM,MAAMP,MAAM,CAAC,EAAE;QACrBS,UAAU;QACVC,WAAWV,MAAM,CAAC,EAAE;IACtB,OAAO,IAAII,QAAQ;QACjBG,MAAM,MAAMN,IAAI,CAAC,EAAE;QACnBQ,UAAU;QACVC,WAAWT,IAAI,CAAC,EAAE;IACpB,OAAO,IAAII,eAAe;QACxBE,MAAM,MAAML,WAAW,CAAC,EAAE;QAC1BO,UAAU;QACVC,WAAWR,WAAW,CAAC,EAAE;IAC3B;IAEA,OAAO;QAAEK;QAAKE;QAASC;IAAS;AAClC;AAEO,eAAeb,uBACpBE,UAAsB,EACtBY,UAAiE;IAEjE,MAAM,EAAE,CAACA,WAAW,EAAEC,OAAM,EAAE,GAAGb,UAAU,CAAC,EAAE;IAC9C,IAAI,OAAOa,YAAW,aAAa;QACjC,OAAO,MAAMA,OAAM,CAAC,EAAE;IACxB;IACA,OAAOJ;AACT","ignoreList":[0]}}, + {"offset": {"line": 14710, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/request/connection.ts"],"sourcesContent":["import { workAsyncStorage } from '../app-render/work-async-storage.external'\nimport {\n throwForMissingRequestStore,\n workUnitAsyncStorage,\n} from '../app-render/work-unit-async-storage.external'\nimport {\n throwToInterruptStaticGeneration,\n trackDynamicDataInDynamicRender,\n} from '../app-render/dynamic-rendering'\nimport { StaticGenBailoutError } from '../../client/components/static-generation-bailout'\nimport {\n makeDynamicHangingPromise,\n makeDevtoolsIOAwarePromise,\n} from '../dynamic-rendering-utils'\nimport { isRequestApiAllowedInCurrentPhase } from './utils'\nimport { applyOwnerStack } from '../dynamic-rendering-utils'\nimport { RenderStage } from '../app-render/staged-rendering'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport {\n createConnectionInPublicUseCacheError,\n createConnectionInPrivateUseCacheError,\n createConnectionInUnstableCacheError,\n} from '../use-cache/use-cache-messages'\n\n/**\n * This function allows you to indicate that you require an actual user Request before continuing.\n *\n * During prerendering it will never resolve and during rendering it resolves immediately.\n */\nexport function connection(): Promise {\n const callingExpression = 'connection'\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n if (workStore) {\n if (workUnitStore && !isRequestApiAllowedInCurrentPhase(workUnitStore)) {\n throw new Error(\n `Route ${workStore.route} used \\`connection()\\` inside \\`after()\\` while rendering. The \\`connection()\\` function is used to indicate the subsequent code must only run when there is an actual Request, but \\`after()\\` executes after the request, so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/app/api-reference/functions/after`\n )\n }\n\n if (workStore.forceStatic) {\n // When using forceStatic, we override all other logic and always just\n // return a resolving promise without tracking.\n return Promise.resolve(undefined)\n }\n\n if (workStore.dynamicShouldError) {\n throw new StaticGenBailoutError(\n `Route ${workStore.route} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used \\`connection()\\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`\n )\n }\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'cache': {\n const error = createConnectionInPublicUseCacheError(workStore.route)\n Error.captureStackTrace(error, connection)\n applyOwnerStack(error)\n workStore.invalidDynamicUsageError ??= error\n throw error\n }\n case 'private-cache': {\n // It might not be intuitive to throw for private caches as well, but\n // we don't consider runtime prefetches as \"actual requests\" (in the\n // navigation sense), despite allowing them to read cookies.\n const error = createConnectionInPrivateUseCacheError(workStore.route)\n Error.captureStackTrace(error, connection)\n applyOwnerStack(error)\n workStore.invalidDynamicUsageError ??= error\n throw error\n }\n case 'unstable-cache':\n throw createConnectionInUnstableCacheError(workStore.route)\n case 'build-time-generator':\n throw new Error(\n `Route ${workStore.route} used \\`connection()\\` inside \\`${workUnitStore.functionName}\\`. This is not supported because \\`${workUnitStore.functionName}\\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`\n )\n case 'prerender':\n case 'prerender-client':\n case 'prerender-runtime':\n // We return a promise that never resolves to allow the prerender to\n // stall at this point.\n return makeDynamicHangingPromise(\n workUnitStore.renderSignal,\n workStore.route,\n '`connection()`'\n )\n case 'validation-client': {\n // TODO(NAR-789): make this consistent with the actual browser behavior when we change it.\n // Until then, erroring is fine.\n const exportName = '`connection`'\n throw new InvariantError(\n `${exportName} must not be used within a Client Component. Next.js should be preventing ${exportName} from being included in Client Components statically, but did not in this case.`\n )\n }\n case 'prerender-legacy':\n // We throw an error here to interrupt prerendering to mark the route\n // as dynamic\n return throwToInterruptStaticGeneration(\n 'connection',\n workStore,\n workUnitStore\n )\n case 'request':\n trackDynamicDataInDynamicRender(workUnitStore)\n if (process.env.NODE_ENV === 'development') {\n // Semantically we only need the dev tracking when running in `next dev`\n // but since you would never use next dev with production NODE_ENV we use this\n // as a proxy so we can statically exclude this code from production builds.\n if (workUnitStore.asyncApiPromises) {\n return workUnitStore.asyncApiPromises.connection\n }\n return makeDevtoolsIOAwarePromise(\n undefined,\n workUnitStore,\n RenderStage.Dynamic\n )\n } else if (workUnitStore.asyncApiPromises) {\n return workUnitStore.asyncApiPromises.connection\n } else {\n return Promise.resolve(undefined)\n }\n default:\n workUnitStore satisfies never\n }\n }\n }\n\n // If we end up here, there was no work store or work unit store present.\n // TODO(NAR-789): connection() is not currently statically prevented from being imported in client components,\n // so we always error about a missing work unit store.\n throwForMissingRequestStore(callingExpression)\n}\n"],"names":["connection","callingExpression","workStore","workAsyncStorage","getStore","workUnitStore","workUnitAsyncStorage","isRequestApiAllowedInCurrentPhase","Error","route","forceStatic","Promise","resolve","undefined","dynamicShouldError","StaticGenBailoutError","type","error","createConnectionInPublicUseCacheError","captureStackTrace","applyOwnerStack","invalidDynamicUsageError","createConnectionInPrivateUseCacheError","createConnectionInUnstableCacheError","functionName","makeDynamicHangingPromise","renderSignal","exportName","InvariantError","throwToInterruptStaticGeneration","trackDynamicDataInDynamicRender","process","env","NODE_ENV","asyncApiPromises","makeDevtoolsIOAwarePromise","RenderStage","Dynamic","throwForMissingRequestStore"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 14812, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/request/cookies.ts"],"sourcesContent":["import {\n type ReadonlyRequestCookies,\n areCookiesMutableInCurrentPhase,\n RequestCookiesAdapter,\n} from '../web/spec-extension/adapters/request-cookies'\nimport { RequestCookies } from '../web/spec-extension/cookies'\nimport {\n workAsyncStorage,\n type WorkStore,\n} from '../app-render/work-async-storage.external'\nimport {\n throwForMissingRequestStore,\n workUnitAsyncStorage,\n type PrerenderStoreModern,\n type RequestStore,\n} from '../app-render/work-unit-async-storage.external'\nimport {\n throwToInterruptStaticGeneration,\n trackDynamicDataInDynamicRender,\n} from '../app-render/dynamic-rendering'\nimport { StaticGenBailoutError } from '../../client/components/static-generation-bailout'\nimport {\n makeDevtoolsIOAwarePromise,\n makeSessionDataHangingPromise,\n RENDER_STAGES_BY_DATA_KIND,\n} from '../dynamic-rendering-utils'\nimport { createDedupedByCallsiteServerErrorLoggerDev } from '../create-deduped-by-callsite-server-error-logger'\nimport { isRequestApiAllowedInCurrentPhase } from './utils'\nimport { applyOwnerStack } from '../dynamic-rendering-utils'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport {\n createCookiesInUseCacheError,\n createCookiesInUnstableCacheError,\n} from '../use-cache/use-cache-messages'\n\nexport function cookies(): Promise {\n const callingExpression = 'cookies'\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n if (workStore) {\n if (workUnitStore && !isRequestApiAllowedInCurrentPhase(workUnitStore)) {\n throw new Error(\n `Route ${workStore.route} used \\`cookies()\\` inside \\`after()\\` while rendering. This is not supported. If you need this data inside an \\`after()\\` callback, use \\`cookies()\\` outside of the callback. See more info here: https://nextjs.org/docs/app/api-reference/functions/after`\n )\n }\n\n if (workStore.forceStatic) {\n // When using forceStatic we override all other logic and always just return an empty\n // cookies object without tracking\n const underlyingCookies = createEmptyCookies()\n return makeUntrackedCookies(underlyingCookies)\n }\n\n if (workStore.dynamicShouldError) {\n throw new StaticGenBailoutError(\n `Route ${workStore.route} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used \\`cookies()\\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`\n )\n }\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'cache':\n const error = createCookiesInUseCacheError(workStore.route)\n Error.captureStackTrace(error, cookies)\n applyOwnerStack(error)\n workStore.invalidDynamicUsageError ??= error\n throw error\n case 'unstable-cache':\n throw createCookiesInUnstableCacheError(workStore.route)\n case 'build-time-generator':\n throw new Error(\n `Route ${workStore.route} used \\`cookies()\\` inside \\`${workUnitStore.functionName}\\`. This is not supported because \\`${workUnitStore.functionName}\\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`\n )\n case 'prerender':\n return makeHangingCookies(workStore, workUnitStore)\n case 'prerender-client':\n case 'validation-client':\n const exportName = '`cookies`'\n throw new InvariantError(\n `${exportName} must not be used within a Client Component. Next.js should be preventing ${exportName} from being included in Client Components statically, but did not in this case.`\n )\n case 'prerender-legacy':\n // We track dynamic access here so we don't need to wrap the cookies\n // in individual property access tracking.\n return throwToInterruptStaticGeneration(\n callingExpression,\n workStore,\n workUnitStore\n )\n case 'prerender-runtime': {\n const { stagedRendering } = workUnitStore\n if (stagedRendering) {\n return stagedRendering.delayUntilStage(\n RENDER_STAGES_BY_DATA_KIND.sessionData,\n 'cookies',\n workUnitStore.cookies\n )\n } else {\n return makeUntrackedCookies(workUnitStore.cookies)\n }\n }\n case 'private-cache':\n // Private caches are delayed until the runtime stage in use-cache-wrapper,\n // so we don't need an additional delay here.\n return makeUntrackedCookies(workUnitStore.cookies)\n case 'request':\n trackDynamicDataInDynamicRender(workUnitStore)\n\n let underlyingCookies: ReadonlyRequestCookies\n\n if (areCookiesMutableInCurrentPhase(workUnitStore)) {\n // We can't conditionally return different types here based on the context.\n // To avoid confusion, we always return the readonly type here.\n underlyingCookies =\n workUnitStore.userspaceMutableCookies as unknown as ReadonlyRequestCookies\n } else {\n underlyingCookies = workUnitStore.cookies\n }\n\n if (process.env.NODE_ENV === 'development') {\n // Semantically we only need the dev tracking when running in `next dev`\n // but since you would never use next dev with production NODE_ENV we use this\n // as a proxy so we can statically exclude this code from production builds.\n return makeUntrackedCookiesWithDevWarnings(\n workUnitStore,\n underlyingCookies,\n workStore?.route\n )\n } else if (workUnitStore.asyncApiPromises) {\n if (underlyingCookies === workUnitStore.mutableCookies) {\n return workUnitStore.asyncApiPromises.mutableCookies\n } else {\n return workUnitStore.asyncApiPromises.cookies\n }\n } else {\n return makeUntrackedCookies(underlyingCookies)\n }\n default:\n workUnitStore satisfies never\n }\n }\n }\n\n // If we end up here, there was no work store or work unit store present.\n throwForMissingRequestStore(callingExpression)\n}\n\nfunction createEmptyCookies(): ReadonlyRequestCookies {\n return RequestCookiesAdapter.seal(new RequestCookies(new Headers({})))\n}\n\ninterface CacheLifetime {}\nconst CachedCookies = new WeakMap<\n CacheLifetime,\n Promise\n>()\n\nfunction makeHangingCookies(\n workStore: WorkStore,\n prerenderStore: PrerenderStoreModern\n): Promise {\n const cachedPromise = CachedCookies.get(prerenderStore)\n if (cachedPromise) {\n return cachedPromise\n }\n\n const promise = makeSessionDataHangingPromise(\n prerenderStore.renderSignal,\n workStore.route,\n '`cookies()`',\n prerenderStore\n )\n CachedCookies.set(prerenderStore, promise)\n\n return promise\n}\n\nfunction makeUntrackedCookies(\n underlyingCookies: ReadonlyRequestCookies\n): Promise {\n const cachedCookies = CachedCookies.get(underlyingCookies)\n if (cachedCookies) {\n return cachedCookies\n }\n\n const promise = Promise.resolve(underlyingCookies)\n CachedCookies.set(underlyingCookies, promise)\n\n return promise\n}\n\nfunction makeUntrackedCookiesWithDevWarnings(\n requestStore: RequestStore,\n underlyingCookies: ReadonlyRequestCookies,\n route?: string\n): Promise {\n if (requestStore.asyncApiPromises) {\n let promise: Promise\n if (underlyingCookies === requestStore.mutableCookies) {\n promise = requestStore.asyncApiPromises.mutableCookies\n } else if (underlyingCookies === requestStore.cookies) {\n promise = requestStore.asyncApiPromises.cookies\n } else {\n throw new InvariantError(\n 'Received an underlying cookies object that does not match either `cookies` or `mutableCookies`'\n )\n }\n return instrumentCookiesPromiseWithDevWarnings(promise, route)\n }\n\n const cachedCookies = CachedCookies.get(underlyingCookies)\n if (cachedCookies) {\n return cachedCookies\n }\n\n const promise = makeDevtoolsIOAwarePromise(\n underlyingCookies,\n requestStore,\n RENDER_STAGES_BY_DATA_KIND.sessionData\n )\n\n const proxiedPromise = instrumentCookiesPromiseWithDevWarnings(promise, route)\n\n CachedCookies.set(underlyingCookies, proxiedPromise)\n\n return proxiedPromise\n}\n\nconst warnForSyncAccess = createDedupedByCallsiteServerErrorLoggerDev(\n createCookiesAccessError\n)\n\nfunction instrumentCookiesPromiseWithDevWarnings(\n promise: Promise,\n route: string | undefined\n) {\n Object.defineProperties(promise, {\n [Symbol.iterator]: replaceableWarningDescriptorForSymbolIterator(\n promise,\n route\n ),\n size: replaceableWarningDescriptor(promise, 'size', route),\n get: replaceableWarningDescriptor(promise, 'get', route),\n getAll: replaceableWarningDescriptor(promise, 'getAll', route),\n has: replaceableWarningDescriptor(promise, 'has', route),\n set: replaceableWarningDescriptor(promise, 'set', route),\n delete: replaceableWarningDescriptor(promise, 'delete', route),\n clear: replaceableWarningDescriptor(promise, 'clear', route),\n toString: replaceableWarningDescriptor(promise, 'toString', route),\n })\n return promise\n}\n\nfunction replaceableWarningDescriptor(\n target: unknown,\n prop: string,\n route: string | undefined\n) {\n return {\n enumerable: false,\n get() {\n warnForSyncAccess(route, `\\`cookies().${prop}\\``)\n return undefined\n },\n set(value: unknown) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n configurable: true,\n })\n },\n configurable: true,\n }\n}\n\nfunction replaceableWarningDescriptorForSymbolIterator(\n target: unknown,\n route: string | undefined\n) {\n return {\n enumerable: false,\n get() {\n warnForSyncAccess(route, '`...cookies()` or similar iteration')\n return undefined\n },\n set(value: unknown) {\n Object.defineProperty(target, Symbol.iterator, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n })\n },\n configurable: true,\n }\n}\n\nfunction createCookiesAccessError(\n route: string | undefined,\n expression: string\n) {\n const prefix = route ? `Route \"${route}\" ` : 'This route '\n return new Error(\n `${prefix}used ${expression}. ` +\n `\\`cookies()\\` returns a Promise and must be unwrapped with \\`await\\` or \\`React.use()\\` before accessing its properties. ` +\n `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`\n )\n}\n"],"names":["cookies","callingExpression","workStore","workAsyncStorage","getStore","workUnitStore","workUnitAsyncStorage","isRequestApiAllowedInCurrentPhase","Error","route","forceStatic","underlyingCookies","createEmptyCookies","makeUntrackedCookies","dynamicShouldError","StaticGenBailoutError","type","error","createCookiesInUseCacheError","captureStackTrace","applyOwnerStack","invalidDynamicUsageError","createCookiesInUnstableCacheError","functionName","makeHangingCookies","exportName","InvariantError","throwToInterruptStaticGeneration","stagedRendering","delayUntilStage","RENDER_STAGES_BY_DATA_KIND","sessionData","trackDynamicDataInDynamicRender","areCookiesMutableInCurrentPhase","userspaceMutableCookies","process","env","NODE_ENV","makeUntrackedCookiesWithDevWarnings","asyncApiPromises","mutableCookies","throwForMissingRequestStore","RequestCookiesAdapter","seal","RequestCookies","Headers","CachedCookies","WeakMap","prerenderStore","cachedPromise","get","promise","makeSessionDataHangingPromise","renderSignal","set","cachedCookies","Promise","resolve","requestStore","instrumentCookiesPromiseWithDevWarnings","makeDevtoolsIOAwarePromise","proxiedPromise","warnForSyncAccess","createDedupedByCallsiteServerErrorLoggerDev","createCookiesAccessError","Object","defineProperties","Symbol","iterator","replaceableWarningDescriptorForSymbolIterator","size","replaceableWarningDescriptor","getAll","has","delete","clear","toString","target","prop","enumerable","undefined","value","defineProperty","writable","configurable","expression","prefix"],"mappings":";;;+BAmCgBA,WAAAA;;;eAAAA;;;gCA/BT;yBACwB;0CAIxB;8CAMA;kCAIA;yCAC+B;uCAK/B;0DACqD;uBACV;gCAEnB;kCAIxB;AAEA,SAASA;IACd,MAAMC,oBAAoB;IAC1B,MAAMC,YAAYC,0BAAAA,gBAAgB,CAACC,QAAQ;IAC3C,MAAMC,gBAAgBC,8BAAAA,oBAAoB,CAACF,QAAQ;IAEnD,IAAIF,WAAW;QACb,IAAIG,iBAAiB,CAACE,CAAAA,GAAAA,OAAAA,iCAAiC,EAACF,gBAAgB;YACtE,MAAM,IAAIG,MACR,CAAC,MAAM,EAAEN,UAAUO,KAAK,CAAC,6PAA6P,CAAC;QAE3R;QAEA,IAAIP,UAAUQ,WAAW,EAAE;YACzB,qFAAqF;YACrF,kCAAkC;YAClC,MAAMC,oBAAoBC;YAC1B,OAAOC,qBAAqBF;QAC9B;QAEA,IAAIT,UAAUY,kBAAkB,EAAE;YAChC,MAAM,IAAIC,yBAAAA,qBAAqB,CAC7B,CAAC,MAAM,EAAEb,UAAUO,KAAK,CAAC,mNAAmN,CAAC;QAEjP;QAEA,IAAIJ,eAAe;YACjB,OAAQA,cAAcW,IAAI;gBACxB,KAAK;oBACH,MAAMC,QAAQC,CAAAA,GAAAA,kBAAAA,4BAA4B,EAAChB,UAAUO,KAAK;oBAC1DD,MAAMW,iBAAiB,CAACF,OAAOjB;oBAC/BoB,CAAAA,GAAAA,uBAAAA,eAAe,EAACH;oBAChBf,UAAUmB,wBAAwB,KAAKJ;oBACvC,MAAMA;gBACR,KAAK;oBACH,MAAMK,CAAAA,GAAAA,kBAAAA,iCAAiC,EAACpB,UAAUO,KAAK;gBACzD,KAAK;oBACH,MAAM,IAAID,MACR,CAAC,MAAM,EAAEN,UAAUO,KAAK,CAAC,6BAA6B,EAAEJ,cAAckB,YAAY,CAAC,oCAAoC,EAAElB,cAAckB,YAAY,CAAC,yHAAyH,CAAC;gBAElR,KAAK;oBACH,OAAOC,mBAAmBtB,WAAWG;gBACvC,KAAK;gBACL,KAAK;oBACH,MAAMoB,aAAa;oBACnB,MAAM,IAAIC,gBAAAA,cAAc,CACtB,GAAGD,WAAW,0EAA0E,EAAEA,WAAW,+EAA+E,CAAC;gBAEzL,KAAK;oBACH,oEAAoE;oBACpE,0CAA0C;oBAC1C,OAAOE,CAAAA,GAAAA,kBAAAA,gCAAgC,EACrC1B,mBACAC,WACAG;gBAEJ,KAAK;oBAAqB;wBACxB,MAAM,EAAEuB,eAAe,EAAE,GAAGvB;wBAC5B,IAAIuB,iBAAiB;4BACnB,OAAOA,gBAAgBC,eAAe,CACpCC,uBAAAA,0BAA0B,CAACC,WAAW,EACtC,WACA1B,cAAcL,OAAO;wBAEzB,OAAO;4BACL,OAAOa,qBAAqBR,cAAcL,OAAO;wBACnD;oBACF;gBACA,KAAK;oBACH,2EAA2E;oBAC3E,6CAA6C;oBAC7C,OAAOa,qBAAqBR,cAAcL,OAAO;gBACnD,KAAK;oBACHgC,CAAAA,GAAAA,kBAAAA,+BAA+B,EAAC3B;oBAEhC,IAAIM;oBAEJ,IAAIsB,CAAAA,GAAAA,gBAAAA,+BAA+B,EAAC5B,gBAAgB;wBAClD,2EAA2E;wBAC3E,+DAA+D;wBAC/DM,oBACEN,cAAc6B,uBAAuB;oBACzC,OAAO;wBACLvB,oBAAoBN,cAAcL,OAAO;oBAC3C;oBAEA,IAAImC,QAAQC,GAAG,CAACC,QAAQ,KAAK,WAAe;wBAC1C,wEAAwE;wBACxE,8EAA8E;wBAC9E,4EAA4E;wBAC5E,OAAOC,oCACLjC,eACAM,mBACAT,aAAAA,OAAAA,KAAAA,IAAAA,UAAWO,KAAK;oBAEpB,OAAO,IAAIJ,cAAckC,gBAAgB,EAAE;;gBAS7C;oBACElC;YACJ;QACF;IACF;IAEA,yEAAyE;IACzEoC,CAAAA,GAAAA,8BAAAA,2BAA2B,EAACxC;AAC9B;AAEA,SAASW;IACP,OAAO8B,gBAAAA,qBAAqB,CAACC,IAAI,CAAC,IAAIC,SAAAA,cAAc,CAAC,IAAIC,QAAQ,CAAC;AACpE;AAGA,MAAMC,gBAAgB,IAAIC;AAK1B,SAASvB,mBACPtB,SAAoB,EACpB8C,cAAoC;IAEpC,MAAMC,gBAAgBH,cAAcI,GAAG,CAACF;IACxC,IAAIC,eAAe;QACjB,OAAOA;IACT;IAEA,MAAME,UAAUC,CAAAA,GAAAA,uBAAAA,6BAA6B,EAC3CJ,eAAeK,YAAY,EAC3BnD,UAAUO,KAAK,EACf,eACAuC;IAEFF,cAAcQ,GAAG,CAACN,gBAAgBG;IAElC,OAAOA;AACT;AAEA,SAAStC,qBACPF,iBAAyC;IAEzC,MAAM4C,gBAAgBT,cAAcI,GAAG,CAACvC;IACxC,IAAI4C,eAAe;QACjB,OAAOA;IACT;IAEA,MAAMJ,UAAUK,QAAQC,OAAO,CAAC9C;IAChCmC,cAAcQ,GAAG,CAAC3C,mBAAmBwC;IAErC,OAAOA;AACT;AAEA,SAASb,oCACPoB,YAA0B,EAC1B/C,iBAAyC,EACzCF,KAAc;IAEd,IAAIiD,aAAanB,gBAAgB,EAAE;QACjC,IAAIY;QACJ,IAAIxC,sBAAsB+C,aAAalB,cAAc,EAAE;YACrDW,UAAUO,aAAanB,gBAAgB,CAACC,cAAc;QACxD,OAAO,IAAI7B,sBAAsB+C,aAAa1D,OAAO,EAAE;YACrDmD,UAAUO,aAAanB,gBAAgB,CAACvC,OAAO;QACjD,OAAO;YACL,MAAM,IAAI0B,gBAAAA,cAAc,CACtB;QAEJ;QACA,OAAOiC,wCAAwCR,SAAS1C;IAC1D;IAEA,MAAM8C,gBAAgBT,cAAcI,GAAG,CAACvC;IACxC,IAAI4C,eAAe;QACjB,OAAOA;IACT;IAEA,MAAMJ,UAAUS,CAAAA,GAAAA,uBAAAA,0BAA0B,EACxCjD,mBACA+C,cACA5B,uBAAAA,0BAA0B,CAACC,WAAW;IAGxC,MAAM8B,iBAAiBF,wCAAwCR,SAAS1C;IAExEqC,cAAcQ,GAAG,CAAC3C,mBAAmBkD;IAErC,OAAOA;AACT;AAEA,MAAMC,oBAAoBC,CAAAA,GAAAA,0CAAAA,2CAA2C,EACnEC;AAGF,SAASL,wCACPR,OAAwC,EACxC1C,KAAyB;IAEzBwD,OAAOC,gBAAgB,CAACf,SAAS;QAC/B,CAACgB,OAAOC,QAAQ,CAAC,EAAEC,8CACjBlB,SACA1C;QAEF6D,MAAMC,6BAA6BpB,SAAS,QAAQ1C;QACpDyC,KAAKqB,6BAA6BpB,SAAS,OAAO1C;QAClD+D,QAAQD,6BAA6BpB,SAAS,UAAU1C;QACxDgE,KAAKF,6BAA6BpB,SAAS,OAAO1C;QAClD6C,KAAKiB,6BAA6BpB,SAAS,OAAO1C;QAClDiE,QAAQH,6BAA6BpB,SAAS,UAAU1C;QACxDkE,OAAOJ,6BAA6BpB,SAAS,SAAS1C;QACtDmE,UAAUL,6BAA6BpB,SAAS,YAAY1C;IAC9D;IACA,OAAO0C;AACT;AAEA,SAASoB,6BACPM,MAAe,EACfC,IAAY,EACZrE,KAAyB;IAEzB,OAAO;QACLsE,YAAY;QACZ7B;YACEY,kBAAkBrD,OAAO,CAAC,YAAY,EAAEqE,KAAK,EAAE,CAAC;YAChD,OAAOE;QACT;QACA1B,KAAI2B,KAAc;YAChBhB,OAAOiB,cAAc,CAACL,QAAQC,MAAM;gBAClCG;gBACAE,UAAU;gBACVC,cAAc;YAChB;QACF;QACAA,cAAc;IAChB;AACF;AAEA,SAASf,8CACPQ,MAAe,EACfpE,KAAyB;IAEzB,OAAO;QACLsE,YAAY;QACZ7B;YACEY,kBAAkBrD,OAAO;YACzB,OAAOuE;QACT;QACA1B,KAAI2B,KAAc;YAChBhB,OAAOiB,cAAc,CAACL,QAAQV,OAAOC,QAAQ,EAAE;gBAC7Ca;gBACAE,UAAU;gBACVJ,YAAY;gBACZK,cAAc;YAChB;QACF;QACAA,cAAc;IAChB;AACF;AAEA,SAASpB,yBACPvD,KAAyB,EACzB4E,UAAkB;IAElB,MAAMC,SAAS7E,QAAQ,CAAC,OAAO,EAAEA,MAAM,EAAE,CAAC,GAAG;IAC7C,OAAO,IAAID,MACT,GAAG8E,OAAO,KAAK,EAAED,WAAW,EAAE,CAAC,GAC7B,CAAC,yHAAyH,CAAC,GAC3H,CAAC,8DAA8D,CAAC;AAEtE","ignoreList":[0]}}, + {"offset": {"line": 15010, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/request/draft-mode.ts"],"sourcesContent":["import {\n getDraftModeProviderForCacheScope,\n throwForMissingRequestStore,\n} from '../app-render/work-unit-async-storage.external'\n\nimport type { DraftModeProvider } from '../async-storage/draft-mode-provider'\n\nimport {\n workAsyncStorage,\n type WorkStore,\n} from '../app-render/work-async-storage.external'\nimport { workUnitAsyncStorage } from '../app-render/work-unit-async-storage.external'\nimport {\n abortAndThrowOnSynchronousRequestDataAccess,\n trackDynamicDataInDynamicRender,\n} from '../app-render/dynamic-rendering'\nimport { createDedupedByCallsiteServerErrorLoggerDev } from '../create-deduped-by-callsite-server-error-logger'\nimport { StaticGenBailoutError } from '../../client/components/static-generation-bailout'\nimport { DynamicServerError } from '../../client/components/hooks-server-context'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport {\n createDraftModeMutationInUseCacheError,\n createDraftModeMutationInUnstableCacheError,\n} from '../use-cache/use-cache-messages'\nimport { ReflectAdapter } from '../web/spec-extension/adapters/reflect'\nimport {\n applyOwnerStack,\n RENDER_STAGES_BY_DATA_KIND,\n} from '../dynamic-rendering-utils'\n\nexport function draftMode(): Promise {\n const callingExpression = 'draftMode'\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n if (!workStore || !workUnitStore) {\n throwForMissingRequestStore(callingExpression)\n }\n\n switch (workUnitStore.type) {\n case 'prerender-runtime': {\n // TODO(runtime-ppr): does it make sense to delay this? normally it's always microtasky\n const { stagedRendering } = workUnitStore\n if (stagedRendering) {\n return stagedRendering.delayUntilStage(\n RENDER_STAGES_BY_DATA_KIND.sessionData,\n 'draftMode',\n new DraftMode(workUnitStore.draftMode)\n )\n } else {\n return createOrGetCachedDraftMode(workUnitStore.draftMode, workStore)\n }\n }\n case 'request':\n return createOrGetCachedDraftMode(workUnitStore.draftMode, workStore)\n\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n // Inside of `\"use cache\"` or `unstable_cache`, draft mode is available if\n // the outmost work unit store is a request store (or a runtime prerender),\n // and if draft mode is enabled.\n const draftModeProvider = getDraftModeProviderForCacheScope(\n workStore,\n workUnitStore\n )\n\n if (draftModeProvider) {\n return createOrGetCachedDraftMode(draftModeProvider, workStore)\n }\n\n // Otherwise, we fall through to providing an empty draft mode.\n // eslint-disable-next-line no-fallthrough\n case 'prerender':\n case 'prerender-legacy':\n // Return empty draft mode\n return createOrGetCachedDraftMode(null, workStore)\n case 'prerender-client':\n case 'validation-client': {\n const exportName = '`draftMode`'\n throw new InvariantError(\n `${exportName} must not be used within a Client Component. Next.js should be preventing ${exportName} from being included in Client Components statically, but did not in this case.`\n )\n }\n case 'build-time-generator':\n throw new Error(\n `Route ${workStore.route} used \\`${callingExpression}()\\` inside \\`${workUnitStore.functionName}\\`. This is not supported because \\`${workUnitStore.functionName}\\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`\n )\n\n default:\n return workUnitStore satisfies never\n }\n}\n\nfunction createOrGetCachedDraftMode(\n draftModeProvider: DraftModeProvider | null,\n workStore: WorkStore | undefined\n): Promise {\n const cacheKey = draftModeProvider ?? NullDraftMode\n const cachedDraftMode = CachedDraftModes.get(cacheKey)\n\n if (cachedDraftMode) {\n return cachedDraftMode\n }\n\n if (process.env.NODE_ENV === 'development' && !workStore?.isPrefetchRequest) {\n const route = workStore?.route\n return createDraftModeWithDevWarnings(draftModeProvider, route)\n } else {\n return Promise.resolve(new DraftMode(draftModeProvider))\n }\n}\n\ninterface CacheLifetime {}\nconst NullDraftMode = {}\nconst CachedDraftModes = new WeakMap>()\n\nfunction createDraftModeWithDevWarnings(\n underlyingProvider: null | DraftModeProvider,\n route: undefined | string\n): Promise {\n const instance = new DraftMode(underlyingProvider)\n const promise = Promise.resolve(instance)\n\n const proxiedPromise = new Proxy(promise, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'isEnabled':\n warnForSyncAccess(route, `\\`draftMode().${prop}\\``)\n break\n case 'enable':\n case 'disable': {\n warnForSyncAccess(route, `\\`draftMode().${prop}()\\``)\n break\n }\n default: {\n // We only warn for well-defined properties of the draftMode object.\n }\n }\n\n return ReflectAdapter.get(target, prop, receiver)\n },\n })\n\n return proxiedPromise\n}\n\nclass DraftMode {\n /**\n * @internal - this declaration is stripped via `tsc --stripInternal`\n */\n private readonly _provider: null | DraftModeProvider\n\n constructor(provider: null | DraftModeProvider) {\n this._provider = provider\n }\n get isEnabled() {\n if (this._provider !== null) {\n return this._provider.isEnabled\n }\n return false\n }\n public enable() {\n // We have a store we want to track dynamic data access to ensure we\n // don't statically generate routes that manipulate draft mode.\n trackDynamicDraftMode('draftMode().enable()', this.enable)\n if (this._provider !== null) {\n this._provider.enable()\n }\n }\n public disable() {\n trackDynamicDraftMode('draftMode().disable()', this.disable)\n if (this._provider !== null) {\n this._provider.disable()\n }\n }\n}\nconst warnForSyncAccess = createDedupedByCallsiteServerErrorLoggerDev(\n createDraftModeAccessError\n)\n\nfunction createDraftModeAccessError(\n route: string | undefined,\n expression: string\n) {\n const prefix = route ? `Route \"${route}\" ` : 'This route '\n return new Error(\n `${prefix}used ${expression}. ` +\n `\\`draftMode()\\` returns a Promise and must be unwrapped with \\`await\\` or \\`React.use()\\` before accessing its properties. ` +\n `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`\n )\n}\n\nfunction trackDynamicDraftMode(expression: string, constructorOpt: Function) {\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n if (workStore) {\n // We have a store we want to track dynamic data access to ensure we\n // don't statically generate routes that manipulate draft mode.\n if (workUnitStore?.phase === 'after') {\n throw new Error(\n `Route ${workStore.route} used \"${expression}\" inside \\`after()\\`. The enabled status of \\`draftMode()\\` can be read inside \\`after()\\` but you cannot enable or disable \\`draftMode()\\`. See more info here: https://nextjs.org/docs/app/api-reference/functions/after`\n )\n }\n\n if (workStore.dynamicShouldError) {\n throw new StaticGenBailoutError(\n `Route ${workStore.route} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`\n )\n }\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'cache':\n case 'private-cache': {\n const error = createDraftModeMutationInUseCacheError(\n workStore.route,\n expression\n )\n Error.captureStackTrace(error, constructorOpt)\n applyOwnerStack(error)\n workStore.invalidDynamicUsageError ??= error\n throw error\n }\n case 'unstable-cache':\n throw createDraftModeMutationInUnstableCacheError(\n workStore.route,\n expression\n )\n\n case 'prerender':\n case 'prerender-runtime': {\n const error = new Error(\n `Route ${workStore.route} used ${expression} without first calling \\`await connection()\\`. See more info here: https://nextjs.org/docs/messages/next-prerender-sync-headers`\n )\n return abortAndThrowOnSynchronousRequestDataAccess(\n workStore.route,\n expression,\n error,\n workUnitStore\n )\n }\n case 'prerender-client':\n case 'validation-client':\n const exportName = '`draftMode`'\n throw new InvariantError(\n `${exportName} must not be used within a Client Component. Next.js should be preventing ${exportName} from being included in Client Components statically, but did not in this case.`\n )\n case 'prerender-legacy':\n workUnitStore.revalidate = 0\n\n const err = new DynamicServerError(\n `Route ${workStore.route} couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n workStore.dynamicUsageDescription = expression\n workStore.dynamicUsageStack = err.stack\n\n throw err\n case 'request':\n trackDynamicDataInDynamicRender(workUnitStore)\n break\n case 'build-time-generator':\n throw new Error(\n `Route ${workStore.route} used \\`${expression}\\` inside \\`${workUnitStore.functionName}\\`. This is not supported because \\`${workUnitStore.functionName}\\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`\n )\n default:\n workUnitStore satisfies never\n }\n }\n }\n}\n"],"names":["draftMode","callingExpression","workStore","workAsyncStorage","getStore","workUnitStore","workUnitAsyncStorage","throwForMissingRequestStore","type","stagedRendering","delayUntilStage","RENDER_STAGES_BY_DATA_KIND","sessionData","DraftMode","createOrGetCachedDraftMode","draftModeProvider","getDraftModeProviderForCacheScope","exportName","InvariantError","Error","route","functionName","cacheKey","NullDraftMode","cachedDraftMode","CachedDraftModes","get","process","env","NODE_ENV","isPrefetchRequest","createDraftModeWithDevWarnings","Promise","resolve","WeakMap","underlyingProvider","instance","promise","proxiedPromise","Proxy","target","prop","receiver","warnForSyncAccess","ReflectAdapter","constructor","provider","_provider","isEnabled","enable","trackDynamicDraftMode","disable","createDedupedByCallsiteServerErrorLoggerDev","createDraftModeAccessError","expression","prefix","constructorOpt","phase","dynamicShouldError","StaticGenBailoutError","error","createDraftModeMutationInUseCacheError","captureStackTrace","applyOwnerStack","invalidDynamicUsageError","createDraftModeMutationInUnstableCacheError","abortAndThrowOnSynchronousRequestDataAccess","revalidate","err","DynamicServerError","dynamicUsageDescription","dynamicUsageStack","stack","trackDynamicDataInDynamicRender"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 15203, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/request/headers.ts"],"sourcesContent":["import {\n HeadersAdapter,\n type ReadonlyHeaders,\n} from '../web/spec-extension/adapters/headers'\nimport {\n workAsyncStorage,\n type WorkStore,\n} from '../app-render/work-async-storage.external'\nimport {\n throwForMissingRequestStore,\n workUnitAsyncStorage,\n type PrerenderStoreModern,\n type RequestStore,\n} from '../app-render/work-unit-async-storage.external'\nimport {\n throwToInterruptStaticGeneration,\n trackDynamicDataInDynamicRender,\n} from '../app-render/dynamic-rendering'\nimport { StaticGenBailoutError } from '../../client/components/static-generation-bailout'\nimport {\n makeDevtoolsIOAwarePromise,\n makeSessionDataHangingPromise,\n RENDER_STAGES_BY_DATA_KIND,\n} from '../dynamic-rendering-utils'\nimport { createDedupedByCallsiteServerErrorLoggerDev } from '../create-deduped-by-callsite-server-error-logger'\nimport { isRequestApiAllowedInCurrentPhase } from './utils'\nimport { applyOwnerStack } from '../dynamic-rendering-utils'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport {\n createHeadersInUseCacheError,\n createHeadersInUnstableCacheError,\n} from '../use-cache/use-cache-messages'\n\n/**\n * This function allows you to read the HTTP incoming request headers in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers) and\n * [Middleware](https://nextjs.org/docs/app/building-your-application/routing/middleware).\n *\n * Read more: [Next.js Docs: `headers`](https://nextjs.org/docs/app/api-reference/functions/headers)\n */\nexport function headers(): Promise {\n const callingExpression = 'headers'\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n if (workStore) {\n if (workUnitStore && !isRequestApiAllowedInCurrentPhase(workUnitStore)) {\n throw new Error(\n `Route ${workStore.route} used \\`headers()\\` inside \\`after()\\` while rendering. This is not supported. If you need this data inside an \\`after()\\` callback, use \\`headers()\\` outside of the callback. See more info here: https://nextjs.org/docs/app/api-reference/functions/after`\n )\n }\n\n if (workStore.forceStatic) {\n // When using forceStatic we override all other logic and always just return an empty\n // headers object without tracking\n const underlyingHeaders = HeadersAdapter.seal(new Headers({}))\n return makeUntrackedHeaders(underlyingHeaders)\n }\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'cache': {\n const error = createHeadersInUseCacheError(workStore.route)\n Error.captureStackTrace(error, headers)\n applyOwnerStack(error)\n workStore.invalidDynamicUsageError ??= error\n throw error\n }\n case 'unstable-cache':\n throw createHeadersInUnstableCacheError(workStore.route)\n case 'build-time-generator':\n throw new Error(\n `Route ${workStore.route} used \\`headers()\\` inside \\`${workUnitStore.functionName}\\`. This is not supported because \\`${workUnitStore.functionName}\\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`\n )\n case 'prerender':\n case 'prerender-client':\n case 'validation-client':\n case 'private-cache':\n case 'prerender-runtime':\n case 'prerender-legacy':\n case 'request':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n if (workStore.dynamicShouldError) {\n throw new StaticGenBailoutError(\n `Route ${workStore.route} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used \\`headers()\\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`\n )\n }\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n return makeHangingHeaders(workStore, workUnitStore)\n case 'prerender-client':\n case 'validation-client':\n const exportName = '`headers`'\n throw new InvariantError(\n `${exportName} must not be used within a client component. Next.js should be preventing ${exportName} from being included in client components statically, but did not in this case.`\n )\n case 'prerender-legacy':\n // Legacy Prerender\n // We are in a legacy static generation mode while prerendering\n // We track dynamic access here so we don't need to wrap the headers in\n // individual property access tracking.\n return throwToInterruptStaticGeneration(\n callingExpression,\n workStore,\n workUnitStore\n )\n case 'prerender-runtime': {\n const { stagedRendering } = workUnitStore\n if (stagedRendering) {\n return stagedRendering.delayUntilStage(\n RENDER_STAGES_BY_DATA_KIND.sessionData,\n 'headers',\n workUnitStore.headers\n )\n } else {\n return makeUntrackedHeaders(workUnitStore.headers)\n }\n }\n case 'private-cache':\n // Private caches are delayed until the runtime stage in use-cache-wrapper,\n // so we don't need an additional delay here.\n return makeUntrackedHeaders(workUnitStore.headers)\n case 'request':\n trackDynamicDataInDynamicRender(workUnitStore)\n\n if (process.env.NODE_ENV === 'development') {\n // Semantically we only need the dev tracking when running in `next dev`\n // but since you would never use next dev with production NODE_ENV we use this\n // as a proxy so we can statically exclude this code from production builds.\n return makeUntrackedHeadersWithDevWarnings(\n workUnitStore.headers,\n workStore?.route,\n workUnitStore\n )\n } else if (workUnitStore.asyncApiPromises) {\n return workUnitStore.asyncApiPromises.headers\n } else {\n return makeUntrackedHeaders(workUnitStore.headers)\n }\n break\n default:\n workUnitStore satisfies never\n }\n }\n }\n\n // If we end up here, there was no work store or work unit store present.\n throwForMissingRequestStore(callingExpression)\n}\n\ninterface CacheLifetime {}\nconst CachedHeaders = new WeakMap>()\n\nfunction makeHangingHeaders(\n workStore: WorkStore,\n prerenderStore: PrerenderStoreModern\n): Promise {\n const cachedHeaders = CachedHeaders.get(prerenderStore)\n if (cachedHeaders) {\n return cachedHeaders\n }\n\n const promise = makeSessionDataHangingPromise(\n prerenderStore.renderSignal,\n workStore.route,\n '`headers()`',\n prerenderStore\n )\n CachedHeaders.set(prerenderStore, promise)\n\n return promise\n}\n\nfunction makeUntrackedHeaders(\n underlyingHeaders: ReadonlyHeaders\n): Promise {\n const cachedHeaders = CachedHeaders.get(underlyingHeaders)\n if (cachedHeaders) {\n return cachedHeaders\n }\n\n const promise = Promise.resolve(underlyingHeaders)\n CachedHeaders.set(underlyingHeaders, promise)\n\n return promise\n}\n\nfunction makeUntrackedHeadersWithDevWarnings(\n underlyingHeaders: ReadonlyHeaders,\n route: string | undefined,\n requestStore: RequestStore\n): Promise {\n if (requestStore.asyncApiPromises) {\n return instrumentHeadersPromiseWithDevWarnings(\n requestStore.asyncApiPromises.headers,\n route\n )\n }\n\n const cachedHeaders = CachedHeaders.get(underlyingHeaders)\n if (cachedHeaders) {\n return cachedHeaders\n }\n\n const promise = makeDevtoolsIOAwarePromise(\n underlyingHeaders,\n requestStore,\n RENDER_STAGES_BY_DATA_KIND.sessionData\n )\n\n const proxiedPromise = instrumentHeadersPromiseWithDevWarnings(promise, route)\n\n CachedHeaders.set(underlyingHeaders, proxiedPromise)\n\n return proxiedPromise\n}\n\nconst warnForSyncAccess = createDedupedByCallsiteServerErrorLoggerDev(\n createHeadersAccessError\n)\n\nfunction instrumentHeadersPromiseWithDevWarnings(\n promise: Promise,\n route: string | undefined\n) {\n Object.defineProperties(promise, {\n [Symbol.iterator]: replaceableWarningDescriptorForSymbolIterator(\n promise,\n route\n ),\n append: replaceableWarningDescriptor(promise, 'append', route),\n delete: replaceableWarningDescriptor(promise, 'delete', route),\n get: replaceableWarningDescriptor(promise, 'get', route),\n has: replaceableWarningDescriptor(promise, 'has', route),\n set: replaceableWarningDescriptor(promise, 'set', route),\n getSetCookie: replaceableWarningDescriptor(promise, 'getSetCookie', route),\n forEach: replaceableWarningDescriptor(promise, 'forEach', route),\n keys: replaceableWarningDescriptor(promise, 'keys', route),\n values: replaceableWarningDescriptor(promise, 'values', route),\n entries: replaceableWarningDescriptor(promise, 'entries', route),\n })\n return promise\n}\n\nfunction replaceableWarningDescriptor(\n target: unknown,\n prop: string,\n route: string | undefined\n) {\n return {\n enumerable: false,\n get() {\n warnForSyncAccess(route, `\\`headers().${prop}\\``)\n return undefined\n },\n set(value: unknown) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n configurable: true,\n })\n },\n configurable: true,\n }\n}\n\nfunction replaceableWarningDescriptorForSymbolIterator(\n target: unknown,\n route: string | undefined\n) {\n return {\n enumerable: false,\n get() {\n warnForSyncAccess(route, '`...headers()` or similar iteration')\n return undefined\n },\n set(value: unknown) {\n Object.defineProperty(target, Symbol.iterator, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n })\n },\n configurable: true,\n }\n}\n\nfunction createHeadersAccessError(\n route: string | undefined,\n expression: string\n) {\n const prefix = route ? `Route \"${route}\" ` : 'This route '\n return new Error(\n `${prefix}used ${expression}. ` +\n `\\`headers()\\` returns a Promise and must be unwrapped with \\`await\\` or \\`React.use()\\` before accessing its properties. ` +\n `Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`\n )\n}\n"],"names":["headers","callingExpression","workStore","workAsyncStorage","getStore","workUnitStore","workUnitAsyncStorage","isRequestApiAllowedInCurrentPhase","Error","route","forceStatic","underlyingHeaders","HeadersAdapter","seal","Headers","makeUntrackedHeaders","type","error","createHeadersInUseCacheError","captureStackTrace","applyOwnerStack","invalidDynamicUsageError","createHeadersInUnstableCacheError","functionName","dynamicShouldError","StaticGenBailoutError","makeHangingHeaders","exportName","InvariantError","throwToInterruptStaticGeneration","stagedRendering","delayUntilStage","RENDER_STAGES_BY_DATA_KIND","sessionData","trackDynamicDataInDynamicRender","process","env","NODE_ENV","makeUntrackedHeadersWithDevWarnings","asyncApiPromises","throwForMissingRequestStore","CachedHeaders","WeakMap","prerenderStore","cachedHeaders","get","promise","makeSessionDataHangingPromise","renderSignal","set","Promise","resolve","requestStore","instrumentHeadersPromiseWithDevWarnings","makeDevtoolsIOAwarePromise","proxiedPromise","warnForSyncAccess","createDedupedByCallsiteServerErrorLoggerDev","createHeadersAccessError","Object","defineProperties","Symbol","iterator","replaceableWarningDescriptorForSymbolIterator","append","replaceableWarningDescriptor","delete","has","getSetCookie","forEach","keys","values","entries","target","prop","enumerable","undefined","value","defineProperty","writable","configurable","expression","prefix"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 15403, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/request/utils.ts"],"sourcesContent":["import { StaticGenBailoutError } from '../../client/components/static-generation-bailout'\nimport { actionAsyncStorage } from '../app-render/action-async-storage.external'\nimport { afterTaskAsyncStorage } from '../app-render/after-task-async-storage.external'\nimport type { WorkStore } from '../app-render/work-async-storage.external'\nimport { createSearchParamsInUseCacheError } from '../use-cache/use-cache-messages'\nimport type { WorkUnitStore } from '../app-render/work-unit-async-storage.external'\n\nexport function throwWithStaticGenerationBailoutErrorWithDynamicError(\n route: string,\n expression: string\n): never {\n throw new StaticGenBailoutError(\n `Route ${route} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`\n )\n}\n\nexport function throwForSearchParamsAccessInUseCache(\n workStore: WorkStore,\n constructorOpt: Function\n): never {\n const error = createSearchParamsInUseCacheError(workStore.route)\n\n Error.captureStackTrace(error, constructorOpt)\n workStore.invalidDynamicUsageError ??= error\n\n throw error\n}\n\nexport function isRequestApiAllowedInCurrentPhase(\n workUnitStore: WorkUnitStore\n): boolean {\n switch (workUnitStore.phase) {\n case 'action':\n case 'render': {\n // The request is still in progress. The API may be disallowed for other reasons,\n // but not because of phase.\n return true\n }\n case 'after': {\n // The request has finished.\n\n // If we're in a Route Handler or a Server Action,\n // request APIs can be called everywhere, even in after().\n const actionStore = actionAsyncStorage.getStore()\n if (actionStore && (actionStore.isAppRoute || actionStore.isAction)) {\n return true\n }\n\n const afterTaskStore = afterTaskAsyncStorage.getStore()\n if (afterTaskStore) {\n // We're in an `after` callback. Request APIs are callable if\n // the `after()` call happened in an action phase:\n // - in a Route Handler\n // - in a Server Action's body (but not the render after)\n //\n // TODO(after): Is it even possible to have `phase === 'action'` but no `actionStore`?\n // We should revisit this setup and simplify this.\n return afterTaskStore.rootTaskSpawnPhase === 'action'\n }\n\n // Otherwise, we must be in a page, in the `after` phase.\n // We don't allow calling request APIs here because we'd miss\n // them during prerendering and wouldn't know that the page is dynamic.\n return false\n }\n }\n}\n"],"names":["isRequestApiAllowedInCurrentPhase","throwForSearchParamsAccessInUseCache","throwWithStaticGenerationBailoutErrorWithDynamicError","route","expression","StaticGenBailoutError","workStore","constructorOpt","error","createSearchParamsInUseCacheError","Error","captureStackTrace","invalidDynamicUsageError","workUnitStore","phase","actionStore","actionAsyncStorage","getStore","isAppRoute","isAction","afterTaskStore","afterTaskAsyncStorage","rootTaskSpawnPhase"],"mappings":";;;;;;;;;;;;;;;IA4BgBA,iCAAiC,EAAA;eAAjCA;;IAZAC,oCAAoC,EAAA;eAApCA;;IATAC,qDAAqD,EAAA;eAArDA;;;yCAPsB;4CACH;+CACG;kCAEY;AAG3C,SAASA,sDACdC,KAAa,EACbC,UAAkB;IAElB,MAAM,IAAIC,yBAAAA,qBAAqB,CAC7B,CAAC,MAAM,EAAEF,MAAM,4EAA4E,EAAEC,WAAW,0HAA0H,CAAC;AAEvO;AAEO,SAASH,qCACdK,SAAoB,EACpBC,cAAwB;IAExB,MAAMC,QAAQC,CAAAA,GAAAA,kBAAAA,iCAAiC,EAACH,UAAUH,KAAK;IAE/DO,MAAMC,iBAAiB,CAACH,OAAOD;IAC/BD,UAAUM,wBAAwB,KAAKJ;IAEvC,MAAMA;AACR;AAEO,SAASR,kCACda,aAA4B;IAE5B,OAAQA,cAAcC,KAAK;QACzB,KAAK;QACL,KAAK;YAAU;gBACb,iFAAiF;gBACjF,4BAA4B;gBAC5B,OAAO;YACT;QACA,KAAK;YAAS;gBACZ,4BAA4B;gBAE5B,kDAAkD;gBAClD,0DAA0D;gBAC1D,MAAMC,cAAcC,4BAAAA,kBAAkB,CAACC,QAAQ;gBAC/C,IAAIF,eAAgBA,CAAAA,YAAYG,UAAU,IAAIH,YAAYI,QAAO,GAAI;oBACnE,OAAO;gBACT;gBAEA,MAAMC,iBAAiBC,+BAAAA,qBAAqB,CAACJ,QAAQ;gBACrD,IAAIG,gBAAgB;oBAClB,6DAA6D;oBAC7D,kDAAkD;oBAClD,uBAAuB;oBACvB,yDAAyD;oBACzD,EAAE;oBACF,sFAAsF;oBACtF,kDAAkD;oBAClD,OAAOA,eAAeE,kBAAkB,KAAK;gBAC/C;gBAEA,yDAAyD;gBACzD,6DAA6D;gBAC7D,uEAAuE;gBACvE,OAAO;YACT;IACF;AACF","ignoreList":[0]}}, + {"offset": {"line": 15481, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/route-modules/app-page/module.compiled.js"],"sourcesContent":["if (process.env.NEXT_RUNTIME === 'edge') {\n module.exports = require('next/dist/server/route-modules/app-page/module.js')\n} else {\n if (process.env.__NEXT_EXPERIMENTAL_REACT) {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.prod.js')\n }\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.prod.js')\n }\n }\n }\n}\n"],"names":["process","env","NEXT_RUNTIME","module","exports","require","__NEXT_EXPERIMENTAL_REACT","NODE_ENV","TURBOPACK"],"mappings":"AAAA,IAAIA,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;KAElC;IACL,IAAIF,QAAQC,GAAG,CAACK,yBAAyB,EAAE;;SAcpC;QACL,IAAIN,QAAQC,GAAG,CAACM,QAAQ,KAAK,WAAe;YAC1C,IAAIP,QAAQC,GAAG,CAACO,SAAS,eAAE;gBACzBL,OAAOC,OAAO,GAAGC,QAAQ;YAC3B,OAAO;;QAGT,OAAO;;IAOT;AACF","ignoreList":[0]}}, + {"offset": {"line": 15500, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/route-modules/app-page/vendored/rsc/react.ts"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-rsc']!.React\n"],"names":["module","exports","require","vendored","React"],"mappings":"AAAAA,OAAOC,OAAO,GACZC,QAAQ,8HACRC,QAAQ,CAAC,YAAY,CAAEC,KAAK","ignoreList":[0]}}, + {"offset": {"line": 15505, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/use-cache/use-cache-messages.ts"],"sourcesContent":["/**\n * Centralized error factories for cached function and revalidation misuse.\n * State the scope and constraint, explain non-obvious boundaries, give the\n * immediate fix, then link to the relevant docs.\n */\n\nimport type { BuildTimeGeneratorName } from '../app-render/work-unit-async-storage.external'\n\nconst NEXT_REQUEST_IN_USE_CACHE =\n 'https://nextjs.org/docs/messages/next-request-in-use-cache'\n\nconst UNSTABLE_CACHE_API_DOCS =\n 'https://nextjs.org/docs/app/api-reference/functions/unstable_cache'\n\nconst USE_CACHE_PRIVATE_API_DOCS =\n 'https://nextjs.org/docs/app/api-reference/directives/use-cache-private'\n\nconst CACHE_TAG_OUTSIDE_USE_CACHE =\n 'https://nextjs.org/docs/messages/cache-tag-outside-use-cache'\n\nconst CACHE_LIFE_OUTSIDE_USE_CACHE =\n 'https://nextjs.org/docs/messages/cache-life-outside-use-cache'\n\nconst USE_CACHE_PRIVATE_COMPOSITION =\n 'https://nextjs.org/docs/messages/use-cache-private-composition'\n\nconst REVALIDATE_IN_USE_CACHE =\n 'https://nextjs.org/docs/messages/revalidate-in-use-cache'\n\nconst NESTED_USE_CACHE_NO_EXPLICIT_CACHELIFE =\n 'https://nextjs.org/docs/messages/nested-use-cache-no-explicit-cachelife'\n\n// Request data accessed in caches\n\nexport function createCookiesInUseCacheError(route: string): Error {\n return new Error(\n `Route \"${route}\": \\`cookies()\\` can't be read inside \\`\"use cache\"\\`. Read it outside the cached function and pass what you need as an argument.\\nLearn more: ${NEXT_REQUEST_IN_USE_CACHE}`\n )\n}\n\nexport function createCookiesInUnstableCacheError(route: string): Error {\n return new Error(\n `Route \"${route}\": \\`cookies()\\` can't be read inside \\`unstable_cache()\\`. Read it outside the cached function and pass what you need as an argument.\\nLearn more: ${UNSTABLE_CACHE_API_DOCS}`\n )\n}\n\nexport function createHeadersInUseCacheError(route: string): Error {\n return new Error(\n `Route \"${route}\": \\`headers()\\` can't be read inside \\`\"use cache\"\\`. Read it outside the cached function and pass what you need as an argument.\\nLearn more: ${NEXT_REQUEST_IN_USE_CACHE}`\n )\n}\n\nexport function createHeadersInUnstableCacheError(route: string): Error {\n return new Error(\n `Route \"${route}\": \\`headers()\\` can't be read inside \\`unstable_cache()\\`. Read it outside the cached function and pass what you need as an argument.\\nLearn more: ${UNSTABLE_CACHE_API_DOCS}`\n )\n}\n\nexport function createSearchParamsInUseCacheError(route: string): Error {\n return new Error(\n `Route \"${route}\": \\`searchParams\\` can't be read inside \\`\"use cache\"\\`. Await it outside the cached function and pass what you need as an argument.\\nLearn more: ${NEXT_REQUEST_IN_USE_CACHE}`\n )\n}\n\nexport function createConnectionInPublicUseCacheError(route: string): Error {\n return new Error(\n `Route \"${route}\": \\`connection()\\` can't be called inside \\`\"use cache\"\\` because cached functions may run during prerendering, without an incoming request. Call it outside the cached function.\\nLearn more: ${NEXT_REQUEST_IN_USE_CACHE}`\n )\n}\n\nexport function createConnectionInPrivateUseCacheError(route: string): Error {\n return new Error(\n `Route \"${route}\": \\`connection()\\` can't be called inside \\`\"use cache: private\"\\` because private cached functions may run during prefetching, without a navigation request. Call it outside the cached function.\\nLearn more: ${USE_CACHE_PRIVATE_API_DOCS}`\n )\n}\n\nexport function createConnectionInUnstableCacheError(route: string): Error {\n return new Error(\n `Route \"${route}\": \\`connection()\\` can't be called inside \\`unstable_cache()\\` because cached functions may run during prerendering, without an incoming request. Call it outside the cached function.\\nLearn more: ${UNSTABLE_CACHE_API_DOCS}`\n )\n}\n\nexport function createRouteHandlerRequestInUseCacheError(\n route: string,\n expression: string\n): Error {\n return new Error(\n `Route \"${route}\": \\`${expression}\\` can't be read inside \\`\"use cache\"\\`. Read it outside the cached function and pass what you need as an argument.\\nLearn more: ${NEXT_REQUEST_IN_USE_CACHE}`\n )\n}\n\nexport function createRouteHandlerRequestInUnstableCacheError(\n route: string,\n expression: string\n): Error {\n return new Error(\n `Route \"${route}\": \\`${expression}\\` can't be read inside \\`unstable_cache()\\`. Read it outside the cached function and pass what you need as an argument.\\nLearn more: ${UNSTABLE_CACHE_API_DOCS}`\n )\n}\n\n// Mutations inside caches and render\n\n/**\n * Used when `draftMode().enable()` or `.disable()` is called inside\n * `\"use cache\"` or `\"use cache: private\"`. Reading `draftMode()` is fine\n * inside a cached function, but toggling it is not.\n */\nexport function createDraftModeMutationInUseCacheError(\n route: string,\n expression: string\n): Error {\n return new Error(\n `Route \"${route}\": \\`${expression}\\` can't be called inside \\`\"use cache\"\\`. Draft mode can be read inside a cached function, but enabling or disabling it must happen outside.\\nLearn more: ${NEXT_REQUEST_IN_USE_CACHE}`\n )\n}\n\nexport function createDraftModeMutationInUnstableCacheError(\n route: string,\n expression: string\n): Error {\n return new Error(\n `Route \"${route}\": \\`${expression}\\` can't be called inside \\`unstable_cache()\\`. Draft mode can be read inside a cached function, but enabling or disabling it must happen outside.\\nLearn more: ${UNSTABLE_CACHE_API_DOCS}`\n )\n}\n\nexport function createRevalidateDuringRenderError(\n route: string,\n expression: string\n): Error {\n return new Error(\n `Route \"${route}\": \\`${expression}\\` can't be called during render. Call it from a Server Action or Route Handler instead.\\nLearn more: ${REVALIDATE_IN_USE_CACHE}`\n )\n}\n\nexport function createRevalidateInCachedFunctionError(\n route: string,\n expression: string\n): Error {\n return new Error(\n `Route \"${route}\": \\`${expression}\\` can't be called inside a cached function. Call it from a Server Action or Route Handler instead.\\nLearn more: ${REVALIDATE_IN_USE_CACHE}`\n )\n}\n\nexport function createRevalidateInBuildTimeGeneratorError(\n route: string,\n expression: string,\n generatorName: BuildTimeGeneratorName\n): Error {\n return new Error(\n `Route \"${route}\": \\`${expression}\\` can't be called inside \\`${generatorName}\\`. Call it from a Server Action or Route Handler instead.\\nLearn more: ${REVALIDATE_IN_USE_CACHE}`\n )\n}\n\n// Cache configuration and nesting\n\nfunction routePrefix(route: string | undefined): string {\n return route === undefined ? '' : `Route \"${route}\": `\n}\n\nexport function createCacheTagOutsideUseCacheError(\n route: string | undefined\n): Error {\n return new Error(\n `${routePrefix(route)}\\`cacheTag()\\` can only be called inside a \\`\"use cache\"\\` or \\`\"use cache: private\"\\` function.\\nLearn more: ${CACHE_TAG_OUTSIDE_USE_CACHE}`\n )\n}\n\nexport function createCacheLifeOutsideUseCacheError(\n route: string | undefined\n): Error {\n return new Error(\n `${routePrefix(route)}\\`cacheLife()\\` can only be called inside a \\`\"use cache\"\\` or \\`\"use cache: private\"\\` function.\\nLearn more: ${CACHE_LIFE_OUTSIDE_USE_CACHE}`\n )\n}\n\nexport function createNestedCacheZeroRevalidateError(\n route: string,\n cause: Error | undefined\n): Error {\n return new Error(\n `Route \"${route}\": A nested \\`\"use cache\"\\` with \\`revalidate: 0\\` is inside an outer \\`\"use cache\"\\` that has no \\`cacheLife()\\`. Add \\`cacheLife()\\` to the outer one to choose whether to prerender it with a non-zero \\`revalidate\\` or keep it dynamic with \\`revalidate: 0\\`.\\nLearn more: ${NESTED_USE_CACHE_NO_EXPLICIT_CACHELIFE}`,\n { cause }\n )\n}\n\nexport function createNestedCacheShortExpireError(\n route: string,\n cause: Error | undefined\n): Error {\n return new Error(\n `Route \"${route}\": A nested \\`\"use cache\"\\` with a short \\`expire\\` (under 5 minutes) is inside an outer \\`\"use cache\"\\` that has no \\`cacheLife()\\`. Add \\`cacheLife()\\` to the outer one to choose whether to prerender it with a longer \\`expire\\` or keep it dynamic with a short \\`expire\\`.\\nLearn more: ${NESTED_USE_CACHE_NO_EXPLICIT_CACHELIFE}`,\n { cause }\n )\n}\n\n// Private cache composition and request context\n\nexport function createUseCachePrivateInsidePublicUseCacheError(\n route: string\n): Error {\n return new Error(\n `Route \"${route}\": \\`\"use cache: private\"\\` can't be nested inside \\`\"use cache\"\\` because a shared cached function can't depend on private request data. Nest it only inside another \\`\"use cache: private\"\\`.\\nLearn more: ${USE_CACHE_PRIVATE_COMPOSITION}`\n )\n}\n\nexport function createUseCachePrivateInsideUnstableCacheError(\n route: string\n): Error {\n return new Error(\n `Route \"${route}\": \\`\"use cache: private\"\\` can't be used inside \\`unstable_cache()\\` because \\`unstable_cache()\\` uses a shared cache that can't contain private request data. Call the private cached function outside \\`unstable_cache()\\`.\\nLearn more: ${USE_CACHE_PRIVATE_COMPOSITION}`\n )\n}\n\nexport function createUseCachePrivateOutsideRequestContextError(\n route: string,\n functionName: string\n): Error {\n return new Error(\n `Route \"${route}\": \\`\"use cache: private\"\\` needs an active request, so it can't be used during \\`${functionName}\\` or other build-time contexts. Move it to a request-time component or function.\\nLearn more: ${USE_CACHE_PRIVATE_COMPOSITION}`\n )\n}\n"],"names":["createCacheLifeOutsideUseCacheError","createCacheTagOutsideUseCacheError","createConnectionInPrivateUseCacheError","createConnectionInPublicUseCacheError","createConnectionInUnstableCacheError","createCookiesInUnstableCacheError","createCookiesInUseCacheError","createDraftModeMutationInUnstableCacheError","createDraftModeMutationInUseCacheError","createHeadersInUnstableCacheError","createHeadersInUseCacheError","createNestedCacheShortExpireError","createNestedCacheZeroRevalidateError","createRevalidateDuringRenderError","createRevalidateInBuildTimeGeneratorError","createRevalidateInCachedFunctionError","createRouteHandlerRequestInUnstableCacheError","createRouteHandlerRequestInUseCacheError","createSearchParamsInUseCacheError","createUseCachePrivateInsidePublicUseCacheError","createUseCachePrivateInsideUnstableCacheError","createUseCachePrivateOutsideRequestContextError","NEXT_REQUEST_IN_USE_CACHE","UNSTABLE_CACHE_API_DOCS","USE_CACHE_PRIVATE_API_DOCS","CACHE_TAG_OUTSIDE_USE_CACHE","CACHE_LIFE_OUTSIDE_USE_CACHE","USE_CACHE_PRIVATE_COMPOSITION","REVALIDATE_IN_USE_CACHE","NESTED_USE_CACHE_NO_EXPLICIT_CACHELIFE","route","Error","expression","generatorName","routePrefix","undefined","cause","functionName"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 15696, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/error.ts"],"sourcesContent":["export class PageSignatureError extends Error {\n constructor({ page }: { page: string }) {\n super(`The middleware \"${page}\" accepts an async API directly with the form:\n \n export function middleware(request, event) {\n return NextResponse.redirect('/new-location')\n }\n \n Read more: https://nextjs.org/docs/messages/middleware-new-signature\n `)\n }\n}\n\nexport class RemovedPageError extends Error {\n constructor() {\n super(`The request.page has been deprecated in favour of \\`URLPattern\\`.\n Read more: https://nextjs.org/docs/messages/middleware-request-page\n `)\n }\n}\n\nexport class RemovedUAError extends Error {\n constructor() {\n super(`The request.ua has been removed in favour of \\`userAgent\\` function.\n Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent\n `)\n }\n}\n"],"names":["PageSignatureError","RemovedPageError","RemovedUAError","Error","constructor","page"],"mappings":";;;;;;;;;;;;;;;IAAaA,kBAAkB,EAAA;eAAlBA;;IAaAC,gBAAgB,EAAA;eAAhBA;;IAQAC,cAAc,EAAA;eAAdA;;;AArBN,MAAMF,2BAA2BG;IACtCC,YAAY,EAAEC,IAAI,EAAoB,CAAE;QACtC,KAAK,CAAC,CAAC,gBAAgB,EAAEA,KAAK;;;;;;;EAOhC,CAAC;IACD;AACF;AAEO,MAAMJ,yBAAyBE;IACpCC,aAAc;QACZ,KAAK,CAAC,CAAC;;EAET,CAAC;IACD;AACF;AAEO,MAAMF,uBAAuBC;IAClCC,aAAc;QACZ,KAAK,CAAC,CAAC;;EAET,CAAC;IACD;AACF","ignoreList":[0]}}, + {"offset": {"line": 15751, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/next-url.ts"],"sourcesContent":["import type { OutgoingHttpHeaders } from 'http'\nimport type { DomainLocale, I18NConfig } from '../config-shared'\nimport type { I18NProvider } from '../lib/i18n-provider'\n\nimport { detectDomainLocale } from '../../shared/lib/i18n/detect-domain-locale'\nimport { formatNextPathnameInfo } from '../../shared/lib/router/utils/format-next-pathname-info'\nimport { getHostname } from '../../shared/lib/get-hostname'\nimport { getNextPathnameInfo } from '../../shared/lib/router/utils/get-next-pathname-info'\n\ninterface Options {\n base?: string | URL\n headers?: OutgoingHttpHeaders\n forceLocale?: boolean\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig | null\n trailingSlash?: boolean\n }\n i18nProvider?: I18NProvider\n}\n\nconst REGEX_LOCALHOST_HOSTNAME =\n /^(?:127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\\[::1\\]|localhost)$/\n\nfunction parseURL(url: string | URL, base?: string | URL) {\n const parsed = new URL(String(url), base && String(base))\n if (REGEX_LOCALHOST_HOSTNAME.test(parsed.hostname)) {\n parsed.hostname = 'localhost'\n }\n return parsed\n}\n\nconst Internal = Symbol('NextURLInternal')\n\nexport class NextURL {\n private [Internal]: {\n basePath: string\n buildId?: string\n flightSearchParameters?: Record\n defaultLocale?: string\n domainLocale?: DomainLocale\n locale?: string\n options: Options\n trailingSlash?: boolean\n url: URL\n }\n\n constructor(input: string | URL, base?: string | URL, opts?: Options)\n constructor(input: string | URL, opts?: Options)\n constructor(\n input: string | URL,\n baseOrOpts?: string | URL | Options,\n opts?: Options\n ) {\n let base: undefined | string | URL\n let options: Options\n\n if (\n (typeof baseOrOpts === 'object' && 'pathname' in baseOrOpts) ||\n typeof baseOrOpts === 'string'\n ) {\n base = baseOrOpts\n options = opts || {}\n } else {\n options = opts || baseOrOpts || {}\n }\n\n this[Internal] = {\n url: parseURL(input, base ?? options.base),\n options: options,\n basePath: '',\n }\n\n this.analyze()\n }\n\n private analyze() {\n const info = getNextPathnameInfo(this[Internal].url.pathname, {\n nextConfig: this[Internal].options.nextConfig,\n parseData: !process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE,\n i18nProvider: this[Internal].options.i18nProvider,\n })\n\n const hostname = getHostname(\n this[Internal].url,\n this[Internal].options.headers\n )\n this[Internal].domainLocale = this[Internal].options.i18nProvider\n ? this[Internal].options.i18nProvider.detectDomainLocale(hostname)\n : detectDomainLocale(\n this[Internal].options.nextConfig?.i18n?.domains,\n hostname\n )\n\n const defaultLocale =\n this[Internal].domainLocale?.defaultLocale ||\n this[Internal].options.nextConfig?.i18n?.defaultLocale\n\n this[Internal].url.pathname = info.pathname\n this[Internal].defaultLocale = defaultLocale\n this[Internal].basePath = info.basePath ?? ''\n this[Internal].buildId = info.buildId\n this[Internal].locale = info.locale ?? defaultLocale\n this[Internal].trailingSlash = info.trailingSlash\n }\n\n private formatPathname() {\n return formatNextPathnameInfo({\n basePath: this[Internal].basePath,\n buildId: this[Internal].buildId,\n defaultLocale: !this[Internal].options.forceLocale\n ? this[Internal].defaultLocale\n : undefined,\n locale: this[Internal].locale,\n pathname: this[Internal].url.pathname,\n trailingSlash: this[Internal].trailingSlash,\n })\n }\n\n private formatSearch() {\n return this[Internal].url.search\n }\n\n public get buildId() {\n return this[Internal].buildId\n }\n\n public set buildId(buildId: string | undefined) {\n this[Internal].buildId = buildId\n }\n\n public get locale() {\n return this[Internal].locale ?? ''\n }\n\n public set locale(locale: string) {\n if (\n !this[Internal].locale ||\n !this[Internal].options.nextConfig?.i18n?.locales.includes(locale)\n ) {\n throw new TypeError(\n `The NextURL configuration includes no locale \"${locale}\"`\n )\n }\n\n this[Internal].locale = locale\n }\n\n get defaultLocale() {\n return this[Internal].defaultLocale\n }\n\n get domainLocale() {\n return this[Internal].domainLocale\n }\n\n get searchParams() {\n return this[Internal].url.searchParams\n }\n\n get host() {\n return this[Internal].url.host\n }\n\n set host(value: string) {\n this[Internal].url.host = value\n }\n\n get hostname() {\n return this[Internal].url.hostname\n }\n\n set hostname(value: string) {\n this[Internal].url.hostname = value\n }\n\n get port() {\n return this[Internal].url.port\n }\n\n set port(value: string) {\n this[Internal].url.port = value\n }\n\n get protocol() {\n return this[Internal].url.protocol\n }\n\n set protocol(value: string) {\n this[Internal].url.protocol = value\n }\n\n get href() {\n const pathname = this.formatPathname()\n const search = this.formatSearch()\n return `${this.protocol}//${this.host}${pathname}${search}${this.hash}`\n }\n\n set href(url: string) {\n this[Internal].url = parseURL(url)\n this.analyze()\n }\n\n get origin() {\n return this[Internal].url.origin\n }\n\n get pathname() {\n return this[Internal].url.pathname\n }\n\n set pathname(value: string) {\n this[Internal].url.pathname = value\n }\n\n get hash() {\n return this[Internal].url.hash\n }\n\n set hash(value: string) {\n this[Internal].url.hash = value\n }\n\n get search() {\n return this[Internal].url.search\n }\n\n set search(value: string) {\n this[Internal].url.search = value\n }\n\n get password() {\n return this[Internal].url.password\n }\n\n set password(value: string) {\n this[Internal].url.password = value\n }\n\n get username() {\n return this[Internal].url.username\n }\n\n set username(value: string) {\n this[Internal].url.username = value\n }\n\n get basePath() {\n return this[Internal].basePath\n }\n\n set basePath(value: string) {\n this[Internal].basePath = value.startsWith('/') ? value : `/${value}`\n }\n\n toString() {\n return this.href\n }\n\n toJSON() {\n return this.href\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n href: this.href,\n origin: this.origin,\n protocol: this.protocol,\n username: this.username,\n password: this.password,\n host: this.host,\n hostname: this.hostname,\n port: this.port,\n pathname: this.pathname,\n search: this.search,\n searchParams: this.searchParams,\n hash: this.hash,\n }\n }\n\n clone() {\n return new NextURL(String(this), this[Internal].options)\n }\n}\n"],"names":["NextURL","REGEX_LOCALHOST_HOSTNAME","parseURL","url","base","parsed","URL","String","test","hostname","Internal","Symbol","constructor","input","baseOrOpts","opts","options","basePath","analyze","info","getNextPathnameInfo","pathname","nextConfig","parseData","process","env","__NEXT_NO_MIDDLEWARE_URL_NORMALIZE","i18nProvider","getHostname","headers","domainLocale","detectDomainLocale","i18n","domains","defaultLocale","buildId","locale","trailingSlash","formatPathname","formatNextPathnameInfo","forceLocale","undefined","formatSearch","search","locales","includes","TypeError","searchParams","host","value","port","protocol","href","hash","origin","password","username","startsWith","toString","toJSON","for","clone"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 15947, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/adapters/headers.ts"],"sourcesContent":["import type { IncomingHttpHeaders } from 'http'\n\nimport { ReflectAdapter } from './reflect'\n\n/**\n * @internal\n */\nexport class ReadonlyHeadersError extends Error {\n constructor() {\n super(\n 'Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers'\n )\n }\n\n public static callable() {\n throw new ReadonlyHeadersError()\n }\n}\n\nexport type ReadonlyHeaders = Headers & {\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n append(...args: any[]): void\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n set(...args: any[]): void\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n delete(...args: any[]): void\n}\n\n/**\n * The read methods that a sealed view provides itself instead of forwarding to\n * the underlying `Headers`. Deriving the type from `Headers` keeps the\n * implementations in step with the platform signatures.\n */\ntype SealedHeaderMethods = Pick<\n Headers,\n | 'get'\n | 'has'\n | 'getSetCookie'\n | 'keys'\n | 'values'\n | 'entries'\n | 'forEach'\n | typeof Symbol.iterator\n>\n\n/**\n * Builds the read methods for a sealed view that exposes all of `target`.\n */\nfunction createPassThroughMethods(\n target: Headers,\n sealed: ReadonlyHeaders\n): SealedHeaderMethods {\n return {\n get: target.get.bind(target),\n has: target.has.bind(target),\n getSetCookie: target.getSetCookie.bind(target),\n keys: target.keys.bind(target),\n values: target.values.bind(target),\n entries: target.entries.bind(target),\n [Symbol.iterator]: target[Symbol.iterator].bind(target),\n // The native method passes the unsealed target as the callback's `parent`\n // argument. That is a mutable handle on the underlying headers. Pass the\n // sealed view instead.\n forEach(callbackfn, thisArg) {\n for (const [name, value] of target.entries()) {\n callbackfn.call(thisArg, value, name, sealed)\n }\n },\n }\n}\n\n/**\n * Builds the read methods for a sealed view that omits the header names matched\n * by `isHidden`.\n */\nfunction createHidingMethods(\n target: Headers,\n sealed: ReadonlyHeaders,\n isHidden: (name: string) => boolean\n): SealedHeaderMethods {\n function* entries(): HeadersIterator<[string, string]> {\n for (const entry of target.entries()) {\n if (!isHidden(entry[0])) {\n yield entry\n }\n }\n }\n\n return {\n entries,\n [Symbol.iterator]: entries,\n get: (name) => (isHidden(name) ? null : target.get(name)),\n has: (name) => (isHidden(name) ? false : target.has(name)),\n getSetCookie: () => (isHidden('set-cookie') ? [] : target.getSetCookie()),\n *keys(): HeadersIterator {\n for (const name of target.keys()) {\n if (!isHidden(name)) {\n yield name\n }\n }\n },\n *values(): HeadersIterator {\n for (const [, value] of entries()) {\n yield value\n }\n },\n // The native method passes the unsealed target as the callback's `parent`\n // argument. That is a mutable handle on the underlying headers. Pass the\n // sealed view instead.\n forEach(callbackfn, thisArg) {\n for (const [name, value] of entries()) {\n callbackfn.call(thisArg, value, name, sealed)\n }\n },\n }\n}\n\nexport class HeadersAdapter extends Headers {\n private readonly headers: IncomingHttpHeaders\n\n constructor(headers: IncomingHttpHeaders) {\n // We've already overridden the methods that would be called, so we're just\n // calling the super constructor to ensure that the instanceof check works.\n super()\n\n this.headers = new Proxy(headers, {\n get(target, prop, receiver) {\n // Because this is just an object, we expect that all \"get\" operations\n // are for properties. If it's a \"get\" for a symbol, we'll just return\n // the symbol.\n if (typeof prop === 'symbol') {\n return ReflectAdapter.get(target, prop, receiver)\n }\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return undefined.\n if (typeof original === 'undefined') return\n\n // If the original casing exists, return the value.\n return ReflectAdapter.get(target, original, receiver)\n },\n set(target, prop, value, receiver) {\n if (typeof prop === 'symbol') {\n return ReflectAdapter.set(target, prop, value, receiver)\n }\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, use the prop as the key.\n return ReflectAdapter.set(target, original ?? prop, value, receiver)\n },\n has(target, prop) {\n if (typeof prop === 'symbol') return ReflectAdapter.has(target, prop)\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return false.\n if (typeof original === 'undefined') return false\n\n // If the original casing exists, return true.\n return ReflectAdapter.has(target, original)\n },\n deleteProperty(target, prop) {\n if (typeof prop === 'symbol')\n return ReflectAdapter.deleteProperty(target, prop)\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return true.\n if (typeof original === 'undefined') return true\n\n // If the original casing exists, delete the property.\n return ReflectAdapter.deleteProperty(target, original)\n },\n })\n }\n\n /**\n * Seals a Headers instance to prevent modification by throwing an error when\n * any mutating method is called.\n *\n * The sealed view stays live. Later writes to `headers` remain visible\n * through it.\n *\n * `hidden` omits the given header names from every read operation (`get`,\n * `has`, `getSetCookie`, `forEach`, and iteration). The names must be\n * lowercase. The underlying headers are neither copied nor mutated, so hidden\n * headers remain available to the framework.\n */\n public static seal(\n headers: Headers,\n hidden?: ReadonlySet\n ): ReadonlyHeaders {\n const isHidden =\n hidden && hidden.size > 0\n ? (name: string): boolean => hidden.has(name.toLowerCase())\n : null\n\n // The methods are built once per sealed view and reused, so repeated access\n // returns the same function instead of a fresh closure. They are assigned\n // after the proxy exists because `forEach` hands the proxy to its callback.\n // Creating the proxy runs no trap, so nothing can read them before then.\n let methods: SealedHeaderMethods\n\n const sealed: ReadonlyHeaders = new Proxy(headers, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'append':\n case 'delete':\n case 'set':\n return ReadonlyHeadersError.callable\n case Symbol.iterator:\n return methods[Symbol.iterator]\n case 'get':\n case 'has':\n case 'getSetCookie':\n case 'keys':\n case 'values':\n case 'entries':\n case 'forEach':\n return methods[prop]\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n\n methods = isHidden\n ? createHidingMethods(headers, sealed, isHidden)\n : createPassThroughMethods(headers, sealed)\n\n return sealed\n }\n\n /**\n * @param headers\n * @returns A fresh object identity backed by the original value\n */\n public static fresh(headers: ReadonlyHeaders): ReadonlyHeaders {\n return new Proxy(headers, {\n get(target, prop, receiver) {\n return ReflectAdapter.get(target, prop, receiver)\n },\n })\n }\n\n /**\n * Merges a header value into a string. This stores multiple values as an\n * array, so we need to merge them into a string.\n *\n * @param value a header value\n * @returns a merged header value (a string)\n */\n private merge(value: string | string[]): string {\n if (Array.isArray(value)) return value.join(', ')\n\n return value\n }\n\n /**\n * Creates a Headers instance from a plain object or a Headers instance.\n *\n * @param headers a plain object or a Headers instance\n * @returns a headers instance\n */\n public static from(headers: IncomingHttpHeaders | Headers): Headers {\n if (headers instanceof Headers) return headers\n\n return new HeadersAdapter(headers)\n }\n\n public append(name: string, value: string): void {\n const existing = this.headers[name]\n if (typeof existing === 'string') {\n this.headers[name] = [existing, value]\n } else if (Array.isArray(existing)) {\n existing.push(value)\n } else {\n this.headers[name] = value\n }\n }\n\n public delete(name: string): void {\n delete this.headers[name]\n }\n\n public get(name: string): string | null {\n const value = this.headers[name]\n if (typeof value !== 'undefined') return this.merge(value)\n\n return null\n }\n\n public has(name: string): boolean {\n return typeof this.headers[name] !== 'undefined'\n }\n\n public set(name: string, value: string): void {\n this.headers[name] = value\n }\n\n public forEach(\n callbackfn: (value: string, name: string, parent: Headers) => void,\n thisArg?: any\n ): void {\n for (const [name, value] of this.entries()) {\n callbackfn.call(thisArg, value, name, this)\n }\n }\n\n public *entries(): HeadersIterator<[string, string]> {\n for (const key of Object.keys(this.headers)) {\n const name = key.toLowerCase()\n // We assert here that this is a string because we got it from the\n // Object.keys() call above.\n const value = this.get(name) as string\n\n yield [name, value] as [string, string]\n }\n }\n\n public *keys(): HeadersIterator {\n for (const key of Object.keys(this.headers)) {\n const name = key.toLowerCase()\n yield name\n }\n }\n\n public *values(): HeadersIterator {\n for (const key of Object.keys(this.headers)) {\n // We assert here that this is a string because we got it from the\n // Object.keys() call above.\n const value = this.get(key) as string\n\n yield value\n }\n }\n\n public [Symbol.iterator](): HeadersIterator<[string, string]> {\n return this.entries()\n }\n}\n"],"names":["HeadersAdapter","ReadonlyHeadersError","Error","constructor","callable","createPassThroughMethods","target","sealed","get","bind","has","getSetCookie","keys","values","entries","Symbol","iterator","forEach","callbackfn","thisArg","name","value","call","createHidingMethods","isHidden","entry","Headers","headers","Proxy","prop","receiver","ReflectAdapter","lowercased","toLowerCase","original","Object","find","o","set","deleteProperty","seal","hidden","size","methods","fresh","merge","Array","isArray","join","from","append","existing","push","delete","key"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 16236, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/adapters/reflect.ts"],"sourcesContent":["export class ReflectAdapter {\n static get(\n target: T,\n prop: string | symbol,\n receiver: unknown\n ): any {\n const value = Reflect.get(target, prop, receiver)\n if (typeof value === 'function') {\n return value.bind(target)\n }\n\n return value\n }\n\n static set(\n target: T,\n prop: string | symbol,\n value: any,\n receiver: any\n ): boolean {\n return Reflect.set(target, prop, value, receiver)\n }\n\n static has(target: T, prop: string | symbol): boolean {\n return Reflect.has(target, prop)\n }\n\n static deleteProperty(\n target: T,\n prop: string | symbol\n ): boolean {\n return Reflect.deleteProperty(target, prop)\n }\n}\n"],"names":["ReflectAdapter","get","target","prop","receiver","value","Reflect","bind","set","has","deleteProperty"],"mappings":";;;+BAAaA,kBAAAA;;;eAAAA;;;AAAN,MAAMA;IACX,OAAOC,IACLC,MAAS,EACTC,IAAqB,EACrBC,QAAiB,EACZ;QACL,MAAMC,QAAQC,QAAQL,GAAG,CAACC,QAAQC,MAAMC;QACxC,IAAI,OAAOC,UAAU,YAAY;YAC/B,OAAOA,MAAME,IAAI,CAACL;QACpB;QAEA,OAAOG;IACT;IAEA,OAAOG,IACLN,MAAS,EACTC,IAAqB,EACrBE,KAAU,EACVD,QAAa,EACJ;QACT,OAAOE,QAAQE,GAAG,CAACN,QAAQC,MAAME,OAAOD;IAC1C;IAEA,OAAOK,IAAsBP,MAAS,EAAEC,IAAqB,EAAW;QACtE,OAAOG,QAAQG,GAAG,CAACP,QAAQC;IAC7B;IAEA,OAAOO,eACLR,MAAS,EACTC,IAAqB,EACZ;QACT,OAAOG,QAAQI,cAAc,CAACR,QAAQC;IACxC;AACF","ignoreList":[0]}}, + {"offset": {"line": 16267, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/adapters/request-cookies.ts"],"sourcesContent":["import { RequestCookies } from '../cookies'\n\nimport { ResponseCookies } from '../cookies'\nimport { ReflectAdapter } from './reflect'\nimport { workAsyncStorage } from '../../../app-render/work-async-storage.external'\nimport type { RequestStore } from '../../../app-render/work-unit-async-storage.external'\nimport { ActionDidRevalidateStaticAndDynamic } from '../../../../shared/lib/action-revalidation-kind'\n\n/**\n * @internal\n */\nexport class ReadonlyRequestCookiesError extends Error {\n constructor() {\n super(\n 'Cookies can only be modified in a Server Action or Route Handler. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options'\n )\n }\n\n public static callable() {\n throw new ReadonlyRequestCookiesError()\n }\n}\n\n// We use this to type some APIs but we don't construct instances directly\nexport type { ResponseCookies }\n\n// The `cookies()` API is a mix of request and response cookies. For `.get()` methods,\n// we want to return the request cookie if it exists. For mutative methods like `.set()`,\n// we want to return the response cookie.\nexport type ReadonlyRequestCookies = Omit<\n RequestCookies,\n 'set' | 'clear' | 'delete'\n> &\n Pick\n\nexport class RequestCookiesAdapter {\n public static seal(cookies: RequestCookies): ReadonlyRequestCookies {\n return new Proxy(cookies as any, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'clear':\n case 'delete':\n case 'set':\n return ReadonlyRequestCookiesError.callable\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n }\n\n /**\n * @param cookies\n * @returns A fresh object identity backed by the original value\n */\n public static fresh(cookies: ReadonlyRequestCookies): ReadonlyRequestCookies {\n return new Proxy(cookies, {\n get(target, prop, receiver) {\n return ReflectAdapter.get(target, prop, receiver)\n },\n })\n }\n}\n\nconst SYMBOL_MODIFY_COOKIE_VALUES = Symbol.for('next.mutated.cookies')\n\nexport function getModifiedCookieValues(\n cookies: ResponseCookies\n): ResponseCookie[] {\n const modified: ResponseCookie[] | undefined = (cookies as unknown as any)[\n SYMBOL_MODIFY_COOKIE_VALUES\n ]\n if (!modified || !Array.isArray(modified) || modified.length === 0) {\n return []\n }\n\n return modified\n}\n\ntype SetCookieArgs =\n | [key: string, value: string, cookie?: Partial]\n | [options: ResponseCookie]\n\nexport function appendMutableCookies(\n headers: Headers,\n mutableCookies: ResponseCookies\n): boolean {\n const modifiedCookieValues = getModifiedCookieValues(mutableCookies)\n if (modifiedCookieValues.length === 0) {\n return false\n }\n\n // Return a new response that extends the response with\n // the modified cookies as fallbacks. `res` cookies\n // will still take precedence.\n const resCookies = new ResponseCookies(headers)\n const returnedCookies = resCookies.getAll()\n\n // Set the modified cookies as fallbacks.\n for (const cookie of modifiedCookieValues) {\n resCookies.set(cookie)\n }\n\n // Set the original cookies as the final values.\n for (const cookie of returnedCookies) {\n resCookies.set(cookie)\n }\n\n return true\n}\n\ntype ResponseCookie = NonNullable<\n ReturnType['get']>\n>\n\nexport class MutableRequestCookiesAdapter {\n public static wrap(\n cookies: RequestCookies,\n onUpdateCookies?: (cookies: string[]) => void\n ): ResponseCookies {\n const responseCookies = new ResponseCookies(new Headers())\n for (const cookie of cookies.getAll()) {\n responseCookies.set(cookie)\n }\n\n let modifiedValues: ResponseCookie[] = []\n const modifiedCookies = new Set()\n const updateResponseCookies = () => {\n // TODO-APP: change method of getting workStore\n const workStore = workAsyncStorage.getStore()\n if (workStore) {\n workStore.pathWasRevalidated = ActionDidRevalidateStaticAndDynamic\n }\n\n const allCookies = responseCookies.getAll()\n modifiedValues = allCookies.filter((c) => modifiedCookies.has(c.name))\n if (onUpdateCookies) {\n const serializedCookies: string[] = []\n for (const cookie of modifiedValues) {\n const tempCookies = new ResponseCookies(new Headers())\n tempCookies.set(cookie)\n serializedCookies.push(tempCookies.toString())\n }\n\n onUpdateCookies(serializedCookies)\n }\n }\n\n const wrappedCookies = new Proxy(responseCookies, {\n get(target, prop, receiver) {\n switch (prop) {\n // A special symbol to get the modified cookie values\n case SYMBOL_MODIFY_COOKIE_VALUES:\n return modifiedValues\n\n // TODO: Throw error if trying to set a cookie after the response\n // headers have been set.\n case 'delete':\n return function (...args: [string] | [ResponseCookie]) {\n modifiedCookies.add(\n typeof args[0] === 'string' ? args[0] : args[0].name\n )\n try {\n target.delete(...args)\n return wrappedCookies\n } finally {\n updateResponseCookies()\n }\n }\n case 'set':\n return function (...args: SetCookieArgs) {\n modifiedCookies.add(\n typeof args[0] === 'string' ? args[0] : args[0].name\n )\n try {\n target.set(...args)\n return wrappedCookies\n } finally {\n updateResponseCookies()\n }\n }\n\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n\n return wrappedCookies\n }\n}\n\nexport function createCookiesWithMutableAccessCheck(\n requestStore: RequestStore\n): ResponseCookies {\n const wrappedCookies = new Proxy(requestStore.mutableCookies, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'delete':\n return function (...args: [string] | [ResponseCookie]) {\n ensureCookiesAreStillMutable(requestStore, 'cookies().delete')\n target.delete(...args)\n return wrappedCookies\n }\n case 'set':\n return function (...args: SetCookieArgs) {\n ensureCookiesAreStillMutable(requestStore, 'cookies().set')\n target.set(...args)\n return wrappedCookies\n }\n\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n return wrappedCookies\n}\n\nexport function areCookiesMutableInCurrentPhase(requestStore: RequestStore) {\n return requestStore.phase === 'action'\n}\n\n/** Ensure that cookies() starts throwing on mutation\n * if we changed phases and can no longer mutate.\n *\n * This can happen when going:\n * 'render' -> 'after'\n * 'action' -> 'render'\n * */\nfunction ensureCookiesAreStillMutable(\n requestStore: RequestStore,\n _callingExpression: string\n) {\n if (!areCookiesMutableInCurrentPhase(requestStore)) {\n // TODO: maybe we can give a more precise error message based on callingExpression?\n throw new ReadonlyRequestCookiesError()\n }\n}\n\nexport function responseCookiesToRequestCookies(\n responseCookies: ResponseCookies\n): RequestCookies {\n const requestCookies = new RequestCookies(new Headers())\n for (const cookie of responseCookies.getAll()) {\n requestCookies.set(cookie)\n }\n return requestCookies\n}\n"],"names":["MutableRequestCookiesAdapter","ReadonlyRequestCookiesError","RequestCookiesAdapter","appendMutableCookies","areCookiesMutableInCurrentPhase","createCookiesWithMutableAccessCheck","getModifiedCookieValues","responseCookiesToRequestCookies","Error","constructor","callable","seal","cookies","Proxy","get","target","prop","receiver","ReflectAdapter","fresh","SYMBOL_MODIFY_COOKIE_VALUES","Symbol","for","modified","Array","isArray","length","headers","mutableCookies","modifiedCookieValues","resCookies","ResponseCookies","returnedCookies","getAll","cookie","set","wrap","onUpdateCookies","responseCookies","Headers","modifiedValues","modifiedCookies","Set","updateResponseCookies","workStore","workAsyncStorage","getStore","pathWasRevalidated","ActionDidRevalidateStaticAndDynamic","allCookies","filter","c","has","name","serializedCookies","tempCookies","push","toString","wrappedCookies","args","add","delete","requestStore","ensureCookiesAreStillMutable","phase","_callingExpression","requestCookies","RequestCookies"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 16489, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/cookies.ts"],"sourcesContent":["export {\n RequestCookies,\n ResponseCookies,\n stringifyCookie,\n} from 'next/dist/compiled/@edge-runtime/cookies'\n"],"names":["RequestCookies","ResponseCookies","stringifyCookie"],"mappings":";;;;;;;;;;;;;;;IACEA,cAAc,EAAA;eAAdA,SAAAA,cAAc;;IACdC,eAAe,EAAA;eAAfA,SAAAA,eAAe;;IACfC,eAAe,EAAA;eAAfA,SAAAA,eAAe;;;yBACV","ignoreList":[0]}}, + {"offset": {"line": 16519, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/image-response.ts"],"sourcesContent":["/**\n * @deprecated ImageResponse moved from \"next/server\" to \"next/og\" since Next.js 14, please import from \"next/og\" instead.\n * Migration with codemods: https://nextjs.org/docs/app/building-your-application/upgrading/codemods#next-og-import\n */\nexport function ImageResponse(): never {\n throw new Error(\n 'ImageResponse moved from \"next/server\" to \"next/og\" since Next.js 14, please import from \"next/og\" instead'\n )\n}\n"],"names":["ImageResponse","Error"],"mappings":"AAAA;;;CAGC;;;+BACeA,iBAAAA;;;eAAAA;;;AAAT,SAASA;IACd,MAAM,IAAIC,MACR;AAEJ","ignoreList":[0]}}, + {"offset": {"line": 16538, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/request.ts"],"sourcesContent":["import type { I18NConfig } from '../../config-shared'\nimport { NextURL } from '../next-url'\nimport { toNodeOutgoingHttpHeaders, validateURL } from '../utils'\nimport { RemovedUAError, RemovedPageError } from '../error'\nimport { RequestCookies } from './cookies'\n\nexport const INTERNALS = Symbol('internal request')\n\n/**\n * This class extends the [Web `Request` API](https://developer.mozilla.org/docs/Web/API/Request) with additional convenience methods.\n *\n * Read more: [Next.js Docs: `NextRequest`](https://nextjs.org/docs/app/api-reference/functions/next-request)\n */\nexport class NextRequest extends Request {\n /** @internal */\n [INTERNALS]: {\n cookies: RequestCookies\n url: string\n nextUrl: NextURL\n }\n\n constructor(input: URL | RequestInfo, init: RequestInit = {}) {\n const url =\n typeof input !== 'string' && 'url' in input ? input.url : String(input)\n\n validateURL(url)\n\n // node Request instance requires duplex option when a body\n // is present or it errors, we don't handle this for\n // Request being passed in since it would have already\n // errored if this wasn't configured\n if (process.env.NEXT_RUNTIME !== 'edge') {\n if (init.body && init.duplex !== 'half') {\n init.duplex = 'half'\n }\n }\n\n if (input instanceof Request) super(input, init)\n else super(url, init)\n\n const nextUrl = new NextURL(url, {\n headers: toNodeOutgoingHttpHeaders(this.headers),\n nextConfig: init.nextConfig,\n })\n this[INTERNALS] = {\n cookies: new RequestCookies(this.headers),\n nextUrl,\n url: process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE\n ? url\n : nextUrl.toString(),\n }\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n cookies: this.cookies,\n nextUrl: this.nextUrl,\n url: this.url,\n // rest of props come from Request\n bodyUsed: this.bodyUsed,\n cache: this.cache,\n credentials: this.credentials,\n destination: this.destination,\n headers: Object.fromEntries(this.headers),\n integrity: this.integrity,\n keepalive: this.keepalive,\n method: this.method,\n mode: this.mode,\n redirect: this.redirect,\n referrer: this.referrer,\n referrerPolicy: this.referrerPolicy,\n signal: this.signal,\n }\n }\n\n public get cookies() {\n return this[INTERNALS].cookies\n }\n\n public get nextUrl() {\n return this[INTERNALS].nextUrl\n }\n\n /**\n * @deprecated\n * `page` has been deprecated in favour of `URLPattern`.\n * Read more: https://nextjs.org/docs/messages/middleware-request-page\n */\n public get page() {\n throw new RemovedPageError()\n }\n\n /**\n * @deprecated\n * `ua` has been removed in favour of \\`userAgent\\` function.\n * Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent\n */\n public get ua() {\n throw new RemovedUAError()\n }\n\n public get url() {\n return this[INTERNALS].url\n }\n}\n\nexport interface RequestInit extends globalThis.RequestInit {\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig | null\n trailingSlash?: boolean\n }\n signal?: AbortSignal\n // see https://github.com/whatwg/fetch/pull/1457\n duplex?: 'half'\n}\n"],"names":["INTERNALS","NextRequest","Symbol","Request","constructor","input","init","url","String","validateURL","process","env","NEXT_RUNTIME","body","duplex","nextUrl","NextURL","headers","toNodeOutgoingHttpHeaders","nextConfig","cookies","RequestCookies","__NEXT_NO_MIDDLEWARE_URL_NORMALIZE","toString","for","bodyUsed","cache","credentials","destination","Object","fromEntries","integrity","keepalive","method","mode","redirect","referrer","referrerPolicy","signal","page","RemovedPageError","ua","RemovedUAError"],"mappings":";;;;;;;;;;;;;;IAMaA,SAAS,EAAA;eAATA;;IAOAC,WAAW,EAAA;eAAXA;;;yBAZW;uBAC+B;uBACN;yBAClB;AAExB,MAAMD,YAAYE,OAAO;AAOzB,MAAMD,oBAAoBE;IAQ/BC,YAAYC,KAAwB,EAAEC,OAAoB,CAAC,CAAC,CAAE;QAC5D,MAAMC,MACJ,OAAOF,UAAU,YAAY,SAASA,QAAQA,MAAME,GAAG,GAAGC,OAAOH;QAEnEI,CAAAA,GAAAA,OAAAA,WAAW,EAACF;QAEZ,2DAA2D;QAC3D,oDAAoD;QACpD,sDAAsD;QACtD,oCAAoC;QACpC,IAAIG,QAAQC,GAAG,CAACC,YAAY,KAAK,OAAQ;YACvC,IAAIN,KAAKO,IAAI,IAAIP,KAAKQ,MAAM,KAAK,QAAQ;gBACvCR,KAAKQ,MAAM,GAAG;YAChB;QACF;QAEA,IAAIT,iBAAiBF,SAAS,KAAK,CAACE,OAAOC;aACtC,KAAK,CAACC,KAAKD;QAEhB,MAAMS,UAAU,IAAIC,SAAAA,OAAO,CAACT,KAAK;YAC/BU,SAASC,CAAAA,GAAAA,OAAAA,yBAAyB,EAAC,IAAI,CAACD,OAAO;YAC/CE,YAAYb,KAAKa,UAAU;QAC7B;QACA,IAAI,CAACnB,UAAU,GAAG;YAChBoB,SAAS,IAAIC,SAAAA,cAAc,CAAC,IAAI,CAACJ,OAAO;YACxCF;YACAR,KAAKG,QAAQC,GAAG,CAACW,0BACbf,QAD+C,kBAE/CQ,QAAQQ,QAAQ;QACtB;IACF;IAEA,CAACrB,OAAOsB,GAAG,CAAC,+BAA+B,GAAG;QAC5C,OAAO;YACLJ,SAAS,IAAI,CAACA,OAAO;YACrBL,SAAS,IAAI,CAACA,OAAO;YACrBR,KAAK,IAAI,CAACA,GAAG;YACb,kCAAkC;YAClCkB,UAAU,IAAI,CAACA,QAAQ;YACvBC,OAAO,IAAI,CAACA,KAAK;YACjBC,aAAa,IAAI,CAACA,WAAW;YAC7BC,aAAa,IAAI,CAACA,WAAW;YAC7BX,SAASY,OAAOC,WAAW,CAAC,IAAI,CAACb,OAAO;YACxCc,WAAW,IAAI,CAACA,SAAS;YACzBC,WAAW,IAAI,CAACA,SAAS;YACzBC,QAAQ,IAAI,CAACA,MAAM;YACnBC,MAAM,IAAI,CAACA,IAAI;YACfC,UAAU,IAAI,CAACA,QAAQ;YACvBC,UAAU,IAAI,CAACA,QAAQ;YACvBC,gBAAgB,IAAI,CAACA,cAAc;YACnCC,QAAQ,IAAI,CAACA,MAAM;QACrB;IACF;IAEA,IAAWlB,UAAU;QACnB,OAAO,IAAI,CAACpB,UAAU,CAACoB,OAAO;IAChC;IAEA,IAAWL,UAAU;QACnB,OAAO,IAAI,CAACf,UAAU,CAACe,OAAO;IAChC;IAEA;;;;GAIC,GACD,IAAWwB,OAAO;QAChB,MAAM,IAAIC,OAAAA,gBAAgB;IAC5B;IAEA;;;;GAIC,GACD,IAAWC,KAAK;QACd,MAAM,IAAIC,OAAAA,cAAc;IAC1B;IAEA,IAAWnC,MAAM;QACf,OAAO,IAAI,CAACP,UAAU,CAACO,GAAG;IAC5B;AACF","ignoreList":[0]}}, + {"offset": {"line": 16638, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/response.ts"],"sourcesContent":["import { stringifyCookie } from '../../web/spec-extension/cookies'\nimport type { I18NConfig } from '../../config-shared'\nimport { NextURL } from '../next-url'\nimport { toNodeOutgoingHttpHeaders, validateURL } from '../utils'\nimport { ReflectAdapter } from './adapters/reflect'\n\nimport { ResponseCookies } from './cookies'\n\nconst INTERNALS = Symbol('internal response')\nconst REDIRECTS = new Set([301, 302, 303, 307, 308])\n\nfunction handleMiddlewareField(\n init: MiddlewareResponseInit | undefined,\n headers: Headers\n) {\n if (init?.request?.headers) {\n if (!(init.request.headers instanceof Headers)) {\n throw new Error('request.headers must be an instance of Headers')\n }\n\n const keys = []\n for (const [key, value] of init.request.headers) {\n headers.set('x-middleware-request-' + key, value)\n keys.push(key)\n }\n\n headers.set('x-middleware-override-headers', keys.join(','))\n }\n}\n\n/**\n * This class extends the [Web `Response` API](https://developer.mozilla.org/docs/Web/API/Response) with additional convenience methods.\n *\n * Read more: [Next.js Docs: `NextResponse`](https://nextjs.org/docs/app/api-reference/functions/next-response)\n */\nexport class NextResponse extends Response {\n [INTERNALS]: {\n cookies: ResponseCookies\n url?: NextURL\n body?: Body\n }\n\n constructor(body?: BodyInit | null, init: ResponseInit = {}) {\n super(body, init)\n\n const headers = this.headers\n const cookies = new ResponseCookies(headers)\n\n const cookiesProxy = new Proxy(cookies, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'delete':\n case 'set': {\n return (...args: [string, string]) => {\n const result = Reflect.apply(target[prop], target, args)\n const newHeaders = new Headers(headers)\n\n if (result instanceof ResponseCookies) {\n headers.set(\n 'x-middleware-set-cookie',\n result\n .getAll()\n .map((cookie) => stringifyCookie(cookie))\n .join(',')\n )\n }\n\n handleMiddlewareField(init, newHeaders)\n return result\n }\n }\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n\n this[INTERNALS] = {\n cookies: cookiesProxy,\n url: init.url\n ? new NextURL(init.url, {\n headers: toNodeOutgoingHttpHeaders(headers),\n nextConfig: init.nextConfig,\n })\n : undefined,\n }\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n cookies: this.cookies,\n url: this.url,\n // rest of props come from Response\n body: this.body,\n bodyUsed: this.bodyUsed,\n headers: Object.fromEntries(this.headers),\n ok: this.ok,\n redirected: this.redirected,\n status: this.status,\n statusText: this.statusText,\n type: this.type,\n }\n }\n\n public get cookies() {\n return this[INTERNALS].cookies\n }\n\n static json(\n body: JsonBody,\n init?: ResponseInit\n ): NextResponse {\n const response: Response = Response.json(body, init)\n return new NextResponse(response.body, response)\n }\n\n static redirect(url: string | NextURL | URL, init?: number | ResponseInit) {\n const status = typeof init === 'number' ? init : (init?.status ?? 307)\n if (!REDIRECTS.has(status)) {\n throw new RangeError(\n 'Failed to execute \"redirect\" on \"response\": Invalid status code'\n )\n }\n const initObj = typeof init === 'object' ? init : {}\n const headers = new Headers(initObj?.headers)\n headers.set('Location', validateURL(url))\n\n return new NextResponse(null, {\n ...initObj,\n headers,\n status,\n })\n }\n\n static rewrite(\n destination: string | NextURL | URL,\n init?: MiddlewareResponseInit\n ) {\n const headers = new Headers(init?.headers)\n headers.set('x-middleware-rewrite', validateURL(destination))\n\n handleMiddlewareField(init, headers)\n return new NextResponse(null, { ...init, headers })\n }\n\n static next(init?: MiddlewareResponseInit) {\n const headers = new Headers(init?.headers)\n headers.set('x-middleware-next', '1')\n\n handleMiddlewareField(init, headers)\n return new NextResponse(null, { ...init, headers })\n }\n}\n\ninterface ResponseInit extends globalThis.ResponseInit {\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig\n trailingSlash?: boolean\n }\n url?: string\n}\n\ninterface ModifiedRequest {\n /**\n * If this is set, the request headers will be overridden with this value.\n */\n headers?: Headers\n}\n\ninterface MiddlewareResponseInit extends globalThis.ResponseInit {\n /**\n * These fields will override the request from clients.\n */\n request?: ModifiedRequest\n}\n"],"names":["NextResponse","INTERNALS","Symbol","REDIRECTS","Set","handleMiddlewareField","init","headers","request","Headers","Error","keys","key","value","set","push","join","Response","constructor","body","cookies","ResponseCookies","cookiesProxy","Proxy","get","target","prop","receiver","args","result","Reflect","apply","newHeaders","getAll","map","cookie","stringifyCookie","ReflectAdapter","url","NextURL","toNodeOutgoingHttpHeaders","nextConfig","undefined","for","bodyUsed","Object","fromEntries","ok","redirected","status","statusText","type","json","response","redirect","has","RangeError","initObj","validateURL","rewrite","destination","next"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 16767, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/url-pattern.ts"],"sourcesContent":["const GlobalURLPattern =\n typeof URLPattern === 'undefined' ? undefined : URLPattern\n\nexport { GlobalURLPattern as URLPattern }\n"],"names":["URLPattern","GlobalURLPattern","undefined"],"mappings":";;;+BAG6BA,cAAAA;;;eAApBC;;;AAHT,MAAMA,mBACJ,OAAOD,eAAe,cAAcE,YAAYF","ignoreList":[0]}}, + {"offset": {"line": 16781, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/user-agent.ts"],"sourcesContent":["import parseua from 'next/dist/compiled/ua-parser-js'\n\ninterface UserAgent {\n isBot: boolean\n ua: string\n browser: {\n name?: string\n version?: string\n major?: string\n }\n device: {\n model?: string\n type?: string\n vendor?: string\n }\n engine: {\n name?: string\n version?: string\n }\n os: {\n name?: string\n version?: string\n }\n cpu: {\n architecture?: string\n }\n}\n\nexport function isBot(input: string): boolean {\n return /Googlebot|Mediapartners-Google|AdsBot-Google|googleweblight|Storebot-Google|Google-PageRenderer|Google-InspectionTool|Bingbot|BingPreview|Slurp|DuckDuckBot|baiduspider|yandex|sogou|LinkedInBot|bitlybot|tumblr|vkShare|quora link preview|facebookexternalhit|facebookcatalog|Twitterbot|applebot|redditbot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|ia_archiver|GPTBot/i.test(\n input\n )\n}\n\nexport function userAgentFromString(input: string | undefined): UserAgent {\n return {\n ...parseua(input),\n isBot: input === undefined ? false : isBot(input),\n }\n}\n\nexport function userAgent({ headers }: { headers: Headers }): UserAgent {\n return userAgentFromString(headers.get('user-agent') || undefined)\n}\n"],"names":["isBot","userAgent","userAgentFromString","input","test","parseua","undefined","headers","get"],"mappings":";;;;;;;;;;;;;;;IA4BgBA,KAAK,EAAA;eAALA;;IAaAC,SAAS,EAAA;eAATA;;IAPAC,mBAAmB,EAAA;eAAnBA;;;mEAlCI;;;;;;AA4Bb,SAASF,MAAMG,KAAa;IACjC,OAAO,iXAAiXC,IAAI,CAC1XD;AAEJ;AAEO,SAASD,oBAAoBC,KAAyB;IAC3D,OAAO;QACL,GAAGE,CAAAA,GAAAA,YAAAA,OAAO,EAACF,MAAM;QACjBH,OAAOG,UAAUG,YAAY,QAAQN,MAAMG;IAC7C;AACF;AAEO,SAASF,UAAU,EAAEM,OAAO,EAAwB;IACzD,OAAOL,oBAAoBK,QAAQC,GAAG,CAAC,iBAAiBF;AAC1D","ignoreList":[0]}}, + {"offset": {"line": 16828, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/utils.ts"],"sourcesContent":["import type { OutgoingHttpHeaders } from 'http'\nimport {\n NEXT_INTERCEPTION_MARKER_PREFIX,\n NEXT_QUERY_PARAM_PREFIX,\n} from '../../lib/constants'\n\n/**\n * Converts a Node.js IncomingHttpHeaders object to a Headers object. Any\n * headers with multiple values will be joined with a comma and space. Any\n * headers that have an undefined value will be ignored and others will be\n * coerced to strings.\n *\n * @param nodeHeaders the headers object to convert\n * @returns the converted headers object\n */\nexport function fromNodeOutgoingHttpHeaders(\n nodeHeaders: OutgoingHttpHeaders\n): Headers {\n const headers = new Headers()\n for (let [key, value] of Object.entries(nodeHeaders)) {\n const values = Array.isArray(value) ? value : [value]\n for (let v of values) {\n if (typeof v === 'undefined') continue\n if (typeof v === 'number') {\n v = v.toString()\n }\n\n headers.append(key, v)\n }\n }\n return headers\n}\n\n/*\n Set-Cookie header field-values are sometimes comma joined in one string. This splits them without choking on commas\n that are within a single set-cookie field-value, such as in the Expires portion.\n This is uncommon, but explicitly allowed - see https://tools.ietf.org/html/rfc2616#section-4.2\n Node.js does this for every header *except* set-cookie - see https://github.com/nodejs/node/blob/d5e363b77ebaf1caf67cd7528224b651c86815c1/lib/_http_incoming.js#L128\n React Native's fetch does this for *every* header, including set-cookie.\n \n Based on: https://github.com/google/j2objc/commit/16820fdbc8f76ca0c33472810ce0cb03d20efe25\n Credits to: https://github.com/tomball for original and https://github.com/chrusart for JavaScript implementation\n*/\nexport function splitCookiesString(cookiesString: string) {\n var cookiesStrings = []\n var pos = 0\n var start\n var ch\n var lastComma\n var nextStart\n var cookiesSeparatorFound\n\n function skipWhitespace() {\n while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n pos += 1\n }\n return pos < cookiesString.length\n }\n\n function notSpecialChar() {\n ch = cookiesString.charAt(pos)\n\n return ch !== '=' && ch !== ';' && ch !== ','\n }\n\n while (pos < cookiesString.length) {\n start = pos\n cookiesSeparatorFound = false\n\n while (skipWhitespace()) {\n ch = cookiesString.charAt(pos)\n if (ch === ',') {\n // ',' is a cookie separator if we have later first '=', not ';' or ','\n lastComma = pos\n pos += 1\n\n skipWhitespace()\n nextStart = pos\n\n while (pos < cookiesString.length && notSpecialChar()) {\n pos += 1\n }\n\n // currently special character\n if (pos < cookiesString.length && cookiesString.charAt(pos) === '=') {\n // we found cookies separator\n cookiesSeparatorFound = true\n // pos is inside the next cookie, so back up and return it.\n pos = nextStart\n cookiesStrings.push(cookiesString.substring(start, lastComma))\n start = pos\n } else {\n // in param ',' or param separator ';',\n // we continue from that comma\n pos = lastComma + 1\n }\n } else {\n pos += 1\n }\n }\n\n if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n cookiesStrings.push(cookiesString.substring(start, cookiesString.length))\n }\n }\n\n return cookiesStrings\n}\n\n/**\n * Converts a Headers object to a Node.js OutgoingHttpHeaders object. This is\n * required to support the set-cookie header, which may have multiple values.\n *\n * @param headers the headers object to convert\n * @returns the converted headers object\n */\nexport function toNodeOutgoingHttpHeaders(\n headers: Headers\n): OutgoingHttpHeaders {\n const nodeHeaders: OutgoingHttpHeaders = {}\n const cookies: string[] = []\n if (headers) {\n for (const [key, value] of headers.entries()) {\n if (key.toLowerCase() === 'set-cookie') {\n // We may have gotten a comma joined string of cookies, or multiple\n // set-cookie headers. We need to merge them into one header array\n // to represent all the cookies.\n cookies.push(...splitCookiesString(value))\n nodeHeaders[key] = cookies.length === 1 ? cookies[0] : cookies\n } else {\n nodeHeaders[key] = value\n }\n }\n }\n return nodeHeaders\n}\n\n/**\n * Validate the correctness of a user-provided URL.\n */\nexport function validateURL(url: string | URL): string {\n try {\n return String(new URL(String(url)))\n } catch (error: any) {\n throw new Error(\n `URL is malformed \"${String(\n url\n )}\". Please use only absolute URLs - https://nextjs.org/docs/messages/middleware-relative-urls`,\n { cause: error }\n )\n }\n}\n\n/**\n * Normalizes `nxtP` and `nxtI` query param values to remove the prefix.\n * This function does not mutate the input key.\n */\nexport function normalizeNextQueryParam(key: string): null | string {\n const prefixes = [NEXT_QUERY_PARAM_PREFIX, NEXT_INTERCEPTION_MARKER_PREFIX]\n for (const prefix of prefixes) {\n if (key !== prefix && key.startsWith(prefix)) {\n return key.substring(prefix.length)\n }\n }\n return null\n}\n"],"names":["fromNodeOutgoingHttpHeaders","normalizeNextQueryParam","splitCookiesString","toNodeOutgoingHttpHeaders","validateURL","nodeHeaders","headers","Headers","key","value","Object","entries","values","Array","isArray","v","toString","append","cookiesString","cookiesStrings","pos","start","ch","lastComma","nextStart","cookiesSeparatorFound","skipWhitespace","length","test","charAt","notSpecialChar","push","substring","cookies","toLowerCase","url","String","URL","error","Error","cause","prefixes","NEXT_QUERY_PARAM_PREFIX","NEXT_INTERCEPTION_MARKER_PREFIX","prefix","startsWith"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 16976, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/action-revalidation-kind.ts"],"sourcesContent":["export type ActionRevalidationKind = 0 | 1 | 2\n\nexport const ActionDidNotRevalidate = 0\nexport const ActionDidRevalidateStaticAndDynamic = 1\nexport const ActionDidRevalidateDynamicOnly = 2\n"],"names":["ActionDidNotRevalidate","ActionDidRevalidateDynamicOnly","ActionDidRevalidateStaticAndDynamic"],"mappings":";;;;;;;;;;;;;;;IAEaA,sBAAsB,EAAA;eAAtBA;;IAEAC,8BAA8B,EAAA;eAA9BA;;IADAC,mCAAmC,EAAA;eAAnCA;;;AADN,MAAMF,yBAAyB;AAC/B,MAAME,sCAAsC;AAC5C,MAAMD,iCAAiC","ignoreList":[0]}}, + {"offset": {"line": 17008, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/get-hostname.ts"],"sourcesContent":["import type { OutgoingHttpHeaders } from 'http'\n\n/**\n * Takes an object with a hostname property (like a parsed URL) and some\n * headers that may contain Host and returns the preferred hostname.\n * @param parsed An object containing a hostname property.\n * @param headers A dictionary with headers containing a `host`.\n */\nexport function getHostname(\n parsed: { hostname?: string | null },\n headers?: OutgoingHttpHeaders\n): string | undefined {\n // Get the hostname from the headers if it exists, otherwise use the parsed\n // hostname.\n let hostname: string\n if (headers?.host && !Array.isArray(headers.host)) {\n hostname = headers.host.toString().split(':', 1)[0]\n } else if (parsed.hostname) {\n hostname = parsed.hostname\n } else return\n\n return hostname.toLowerCase()\n}\n"],"names":["getHostname","parsed","headers","hostname","host","Array","isArray","toString","split","toLowerCase"],"mappings":";;;+BAQgBA,eAAAA;;;eAAAA;;;AAAT,SAASA,YACdC,MAAoC,EACpCC,OAA6B;IAE7B,2EAA2E;IAC3E,YAAY;IACZ,IAAIC;IACJ,IAAID,SAASE,QAAQ,CAACC,MAAMC,OAAO,CAACJ,QAAQE,IAAI,GAAG;QACjDD,WAAWD,QAAQE,IAAI,CAACG,QAAQ,GAAGC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE;IACrD,OAAO,IAAIP,OAAOE,QAAQ,EAAE;QAC1BA,WAAWF,OAAOE,QAAQ;IAC5B,OAAO;IAEP,OAAOA,SAASM,WAAW;AAC7B","ignoreList":[0]}}, + {"offset": {"line": 17032, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/i18n/detect-domain-locale.ts"],"sourcesContent":["import type { DomainLocale } from '../../../server/config-shared'\n\nexport function detectDomainLocale(\n domainItems?: readonly DomainLocale[],\n hostname?: string,\n detectedLocale?: string\n) {\n if (!domainItems) return\n\n if (detectedLocale) {\n detectedLocale = detectedLocale.toLowerCase()\n }\n\n for (const item of domainItems) {\n // remove port if present\n const domainHostname = item.domain?.split(':', 1)[0].toLowerCase()\n if (\n hostname === domainHostname ||\n detectedLocale === item.defaultLocale.toLowerCase() ||\n item.locales?.some((locale) => locale.toLowerCase() === detectedLocale)\n ) {\n return item\n }\n }\n}\n"],"names":["detectDomainLocale","domainItems","hostname","detectedLocale","toLowerCase","item","domainHostname","domain","split","defaultLocale","locales","some","locale"],"mappings":";;;+BAEgBA,sBAAAA;;;eAAAA;;;AAAT,SAASA,mBACdC,WAAqC,EACrCC,QAAiB,EACjBC,cAAuB;IAEvB,IAAI,CAACF,aAAa;IAElB,IAAIE,gBAAgB;QAClBA,iBAAiBA,eAAeC,WAAW;IAC7C;IAEA,KAAK,MAAMC,QAAQJ,YAAa;QAC9B,yBAAyB;QACzB,MAAMK,iBAAiBD,KAAKE,MAAM,EAAEC,MAAM,KAAK,EAAE,CAAC,EAAE,CAACJ;QACrD,IACEF,aAAaI,kBACbH,mBAAmBE,KAAKI,aAAa,CAACL,WAAW,MACjDC,KAAKK,OAAO,EAAEC,KAAK,CAACC,SAAWA,OAAOR,WAAW,OAAOD,iBACxD;YACA,OAAOE;QACT;IACF;AACF","ignoreList":[0]}}, + {"offset": {"line": 17058, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/i18n/normalize-locale-path.ts"],"sourcesContent":["export interface PathLocale {\n detectedLocale?: string\n pathname: string\n}\n\n/**\n * A cache of lowercased locales for each list of locales. This is stored as a\n * WeakMap so if the locales are garbage collected, the cache entry will be\n * removed as well.\n */\nconst cache = new WeakMap()\n\n/**\n * For a pathname that may include a locale from a list of locales, it\n * removes the locale from the pathname returning it alongside with the\n * detected locale.\n *\n * @param pathname A pathname that may include a locale.\n * @param locales A list of locales.\n * @returns The detected locale and pathname without locale\n */\nexport function normalizeLocalePath(\n pathname: string,\n locales?: readonly string[]\n): PathLocale {\n // If locales is undefined, return the pathname as is.\n if (!locales) return { pathname }\n\n // Get the cached lowercased locales or create a new cache entry.\n let lowercasedLocales = cache.get(locales)\n if (!lowercasedLocales) {\n lowercasedLocales = locales.map((locale) => locale.toLowerCase())\n cache.set(locales, lowercasedLocales)\n }\n\n let detectedLocale: string | undefined\n\n // The first segment will be empty, because it has a leading `/`. If\n // there is no further segment, there is no locale (or it's the default).\n const segments = pathname.split('/', 2)\n\n // If there's no second segment (ie, the pathname is just `/`), there's no\n // locale.\n if (!segments[1]) return { pathname }\n\n // The second segment will contain the locale part if any.\n const segment = segments[1].toLowerCase()\n\n // See if the segment matches one of the locales. If it doesn't, there is\n // no locale (or it's the default).\n const index = lowercasedLocales.indexOf(segment)\n if (index < 0) return { pathname }\n\n // Return the case-sensitive locale.\n detectedLocale = locales[index]\n\n // Remove the `/${locale}` part of the pathname.\n pathname = pathname.slice(detectedLocale.length + 1) || '/'\n\n return { pathname, detectedLocale }\n}\n"],"names":["normalizeLocalePath","cache","WeakMap","pathname","locales","lowercasedLocales","get","map","locale","toLowerCase","set","detectedLocale","segments","split","segment","index","indexOf","slice","length"],"mappings":";;;+BAqBgBA,uBAAAA;;;eAAAA;;;AAhBhB;;;;CAIC,GACD,MAAMC,QAAQ,IAAIC;AAWX,SAASF,oBACdG,QAAgB,EAChBC,OAA2B;IAE3B,sDAAsD;IACtD,IAAI,CAACA,SAAS,OAAO;QAAED;IAAS;IAEhC,iEAAiE;IACjE,IAAIE,oBAAoBJ,MAAMK,GAAG,CAACF;IAClC,IAAI,CAACC,mBAAmB;QACtBA,oBAAoBD,QAAQG,GAAG,CAAC,CAACC,SAAWA,OAAOC,WAAW;QAC9DR,MAAMS,GAAG,CAACN,SAASC;IACrB;IAEA,IAAIM;IAEJ,oEAAoE;IACpE,yEAAyE;IACzE,MAAMC,WAAWT,SAASU,KAAK,CAAC,KAAK;IAErC,0EAA0E;IAC1E,UAAU;IACV,IAAI,CAACD,QAAQ,CAAC,EAAE,EAAE,OAAO;QAAET;IAAS;IAEpC,0DAA0D;IAC1D,MAAMW,UAAUF,QAAQ,CAAC,EAAE,CAACH,WAAW;IAEvC,yEAAyE;IACzE,mCAAmC;IACnC,MAAMM,QAAQV,kBAAkBW,OAAO,CAACF;IACxC,IAAIC,QAAQ,GAAG,OAAO;QAAEZ;IAAS;IAEjC,oCAAoC;IACpCQ,iBAAiBP,OAAO,CAACW,MAAM;IAE/B,gDAAgD;IAChDZ,WAAWA,SAASc,KAAK,CAACN,eAAeO,MAAM,GAAG,MAAM;IAExD,OAAO;QAAEf;QAAUQ;IAAe;AACpC","ignoreList":[0]}}, + {"offset": {"line": 17113, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/instant-messages.ts"],"sourcesContent":["export function createUnrenderedSegmentError(\n route: string,\n missingFiles: readonly string[]\n): Error {\n let message = `Route \"${route}\": Could not validate that a segment in your UI has instant navigation.`\n if (missingFiles.length > 0) {\n const label =\n missingFiles.length === 1 ? 'Dropped segment' : 'Dropped segments'\n message +=\n `\\n\\nThis segment was dropped from rendering. Issues that would prevent instant navigation will go undetected.` +\n `\\n\\n${label}:\\n${missingFiles.map((p) => ` ${p}`).join('\\n')}` +\n `\\n\\nWays to fix this:` +\n `\\n - [render] Render the dropped segment` +\n `\\n - [ignore] Set \\`export const instant = false\\` to opt the dropped segment out of instant-navigation validation` +\n `\\n\\nLearn more: https://nextjs.org/docs/messages/instant-unrendered-segment`\n }\n return new Error(message)\n}\n\nexport function createLinkPrefetchPartialError(pathname: string): Error {\n return new Error(\n `Next.js encountered dynamic data during prefetching for \"${pathname}\".\\n\\n` +\n `This will lead to slower, more expensive prefetches.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [upgrade] Opt into Partial Prefetching by exporting \\`const prefetch = 'partial'\\` from the page or layout, or by setting \\`partialPrefetching: true\\` in next.config to opt the whole app in\\n` +\n ` - [disable] Remove \\`prefetch={true}\\` from the to use the default prefetch\\n` +\n ` - [ignore] Set \\`export const instant = false\\` to opt the route out of instant-navigation validation\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-link-prefetch-partial`\n )\n}\n"],"names":["createLinkPrefetchPartialError","createUnrenderedSegmentError","route","missingFiles","message","length","label","map","p","join","Error","pathname"],"mappings":";;;;;;;;;;;;;;IAmBgBA,8BAA8B,EAAA;eAA9BA;;IAnBAC,4BAA4B,EAAA;eAA5BA;;;AAAT,SAASA,6BACdC,KAAa,EACbC,YAA+B;IAE/B,IAAIC,UAAU,CAAC,OAAO,EAAEF,MAAM,uEAAuE,CAAC;IACtG,IAAIC,aAAaE,MAAM,GAAG,GAAG;QAC3B,MAAMC,QACJH,aAAaE,MAAM,KAAK,IAAI,oBAAoB;QAClDD,WACE,CAAC,6GAA6G,CAAC,GAC/G,CAAC,IAAI,EAAEE,MAAM,GAAG,EAAEH,aAAaI,GAAG,CAAC,CAACC,IAAM,CAAC,EAAE,EAAEA,GAAG,EAAEC,IAAI,CAAC,OAAO,GAChE,CAAC,qBAAqB,CAAC,GACvB,CAAC,yCAAyC,CAAC,GAC3C,CAAC,mHAAmH,CAAC,GACrH,CAAC,2EAA2E,CAAC;IACjF;IACA,OAAO,IAAIC,MAAMN;AACnB;AAEO,SAASJ,+BAA+BW,QAAgB;IAC7D,OAAO,IAAID,MACT,CAAC,yDAAyD,EAAEC,SAAS,MAAM,CAAC,GAC1E,CAAC,wDAAwD,CAAC,GAC1D,CAAC,mBAAmB,CAAC,GACrB,CAAC,mMAAmM,CAAC,GACrM,CAAC,sFAAsF,CAAC,GACxF,CAAC,2GAA2G,CAAC,GAC7G,CAAC,0EAA0E,CAAC;AAElF","ignoreList":[0]}}, + {"offset": {"line": 17149, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/invariant-error.ts"],"sourcesContent":["export class InvariantError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(\n `Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`,\n options\n )\n this.name = 'InvariantError'\n }\n}\n"],"names":["InvariantError","Error","constructor","message","options","endsWith","name"],"mappings":";;;+BAAaA,kBAAAA;;;eAAAA;;;AAAN,MAAMA,uBAAuBC;IAClCC,YAAYC,OAAe,EAAEC,OAAsB,CAAE;QACnD,KAAK,CACH,CAAC,WAAW,EAAED,QAAQE,QAAQ,CAAC,OAAOF,UAAUA,UAAU,IAAI,0BAA0B,CAAC,EACzFC;QAEF,IAAI,CAACE,IAAI,GAAG;IACd;AACF","ignoreList":[0]}}, + {"offset": {"line": 17168, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/lazy-dynamic/react-browser-bailout.ts"],"sourcesContent":["// This module is bundled separately into user code and the precompiled App\n// Router runtime. Use the global symbol registry so both copies recognize the\n// same browser bailout reason.\nconst REACT_BROWSER_BAILOUT_REASON = Symbol.for('next.browser-bailout-reason')\n\ntype ReactBrowserBailoutReason = {\n $$typeof: symbol\n reason: string\n}\n\nexport function createReactBrowserBailoutReason(\n reason: string\n): ReactBrowserBailoutReason {\n return {\n $$typeof: REACT_BROWSER_BAILOUT_REASON,\n reason,\n }\n}\n\nexport function getReactBrowserBailoutReason(\n error: unknown\n): string | undefined {\n const cause = (error as Error)?.cause as ReactBrowserBailoutReason | undefined\n\n return cause?.$$typeof === REACT_BROWSER_BAILOUT_REASON\n ? cause.reason\n : undefined\n}\n\nexport function isNextBrowserBailoutError(error: unknown): boolean {\n return getReactBrowserBailoutReason(error) !== undefined\n}\n"],"names":["createReactBrowserBailoutReason","getReactBrowserBailoutReason","isNextBrowserBailoutError","REACT_BROWSER_BAILOUT_REASON","Symbol","for","reason","$$typeof","error","cause","undefined"],"mappings":"AAAA,2EAA2E;AAC3E,8EAA8E;AAC9E,+BAA+B;;;;;;;;;;;;;;;;IAQfA,+BAA+B,EAAA;eAA/BA;;IASAC,4BAA4B,EAAA;eAA5BA;;IAUAC,yBAAyB,EAAA;eAAzBA;;;AA1BhB,MAAMC,+BAA+BC,OAAOC,GAAG,CAAC;AAOzC,SAASL,gCACdM,MAAc;IAEd,OAAO;QACLC,UAAUJ;QACVG;IACF;AACF;AAEO,SAASL,6BACdO,KAAc;IAEd,MAAMC,QAASD,OAAiBC;IAEhC,OAAOA,OAAOF,aAAaJ,+BACvBM,MAAMH,MAAM,GACZI;AACN;AAEO,SAASR,0BAA0BM,KAAc;IACtD,OAAOP,6BAA6BO,WAAWE;AACjD","ignoreList":[0]}}, + {"offset": {"line": 17214, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/promise-with-resolvers.ts"],"sourcesContent":["export function createPromiseWithResolvers(): PromiseWithResolvers {\n // Shim of Stage 4 Promise.withResolvers proposal\n let resolve: (value: T | PromiseLike) => void\n let reject: (reason: any) => void\n const promise = new Promise((res, rej) => {\n resolve = res\n reject = rej\n })\n return { resolve: resolve!, reject: reject!, promise }\n}\n"],"names":["createPromiseWithResolvers","resolve","reject","promise","Promise","res","rej"],"mappings":";;;+BAAgBA,8BAAAA;;;eAAAA;;;AAAT,SAASA;IACd,iDAAiD;IACjD,IAAIC;IACJ,IAAIC;IACJ,MAAMC,UAAU,IAAIC,QAAW,CAACC,KAAKC;QACnCL,UAAUI;QACVH,SAASI;IACX;IACA,OAAO;QAAEL,SAASA;QAAUC,QAAQA;QAASC;IAAQ;AACvD","ignoreList":[0]}}, + {"offset": {"line": 17241, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/add-locale.ts"],"sourcesContent":["import { addPathPrefix } from './add-path-prefix'\nimport { pathHasPrefix } from './path-has-prefix'\n\n/**\n * For a given path and a locale, if the locale is given, it will prefix the\n * locale. The path shouldn't be an API path. If a default locale is given the\n * prefix will be omitted if the locale is already the default locale.\n */\nexport function addLocale(\n path: string,\n locale?: string | false,\n defaultLocale?: string,\n ignorePrefix?: boolean\n) {\n // If no locale was given or the locale is the default locale, we don't need\n // to prefix the path.\n if (!locale || locale === defaultLocale) return path\n\n const lower = path.toLowerCase()\n\n // If the path is an API path or the path already has the locale prefix, we\n // don't need to prefix the path.\n if (!ignorePrefix) {\n if (pathHasPrefix(lower, '/api')) return path\n if (pathHasPrefix(lower, `/${locale.toLowerCase()}`)) return path\n }\n\n // Add the locale prefix to the path.\n return addPathPrefix(path, `/${locale}`)\n}\n"],"names":["addLocale","path","locale","defaultLocale","ignorePrefix","lower","toLowerCase","pathHasPrefix","addPathPrefix"],"mappings":";;;+BAQgBA,aAAAA;;;eAAAA;;;+BARc;+BACA;AAOvB,SAASA,UACdC,IAAY,EACZC,MAAuB,EACvBC,aAAsB,EACtBC,YAAsB;IAEtB,4EAA4E;IAC5E,sBAAsB;IACtB,IAAI,CAACF,UAAUA,WAAWC,eAAe,OAAOF;IAEhD,MAAMI,QAAQJ,KAAKK,WAAW;IAE9B,2EAA2E;IAC3E,iCAAiC;IACjC,IAAI,CAACF,cAAc;QACjB,IAAIG,CAAAA,GAAAA,eAAAA,aAAa,EAACF,OAAO,SAAS,OAAOJ;QACzC,IAAIM,CAAAA,GAAAA,eAAAA,aAAa,EAACF,OAAO,CAAC,CAAC,EAAEH,OAAOI,WAAW,IAAI,GAAG,OAAOL;IAC/D;IAEA,qCAAqC;IACrC,OAAOO,CAAAA,GAAAA,eAAAA,aAAa,EAACP,MAAM,CAAC,CAAC,EAAEC,QAAQ;AACzC","ignoreList":[0]}}, + {"offset": {"line": 17270, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/add-path-prefix.ts"],"sourcesContent":["import { parsePath } from './parse-path'\n\n/**\n * Adds the provided prefix to the given path. It first ensures that the path\n * is indeed starting with a slash.\n */\nexport function addPathPrefix(path: string, prefix?: string) {\n if (!path.startsWith('/') || !prefix) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n return `${prefix}${pathname}${query}${hash}`\n}\n"],"names":["addPathPrefix","path","prefix","startsWith","pathname","query","hash","parsePath"],"mappings":";;;+BAMgBA,iBAAAA;;;eAAAA;;;2BANU;AAMnB,SAASA,cAAcC,IAAY,EAAEC,MAAe;IACzD,IAAI,CAACD,KAAKE,UAAU,CAAC,QAAQ,CAACD,QAAQ;QACpC,OAAOD;IACT;IAEA,MAAM,EAAEG,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAE,GAAGC,CAAAA,GAAAA,WAAAA,SAAS,EAACN;IAC5C,OAAO,GAAGC,SAASE,WAAWC,QAAQC,MAAM;AAC9C","ignoreList":[0]}}, + {"offset": {"line": 17291, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/add-path-suffix.ts"],"sourcesContent":["import { parsePath } from './parse-path'\n\n/**\n * Similarly to `addPathPrefix`, this function adds a suffix at the end on the\n * provided path. It also works only for paths ensuring the argument starts\n * with a slash.\n */\nexport function addPathSuffix(path: string, suffix?: string) {\n if (!path.startsWith('/') || !suffix) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n return `${pathname}${suffix}${query}${hash}`\n}\n"],"names":["addPathSuffix","path","suffix","startsWith","pathname","query","hash","parsePath"],"mappings":";;;+BAOgBA,iBAAAA;;;eAAAA;;;2BAPU;AAOnB,SAASA,cAAcC,IAAY,EAAEC,MAAe;IACzD,IAAI,CAACD,KAAKE,UAAU,CAAC,QAAQ,CAACD,QAAQ;QACpC,OAAOD;IACT;IAEA,MAAM,EAAEG,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAE,GAAGC,CAAAA,GAAAA,WAAAA,SAAS,EAACN;IAC5C,OAAO,GAAGG,WAAWF,SAASG,QAAQC,MAAM;AAC9C","ignoreList":[0]}}, + {"offset": {"line": 17312, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/format-next-pathname-info.ts"],"sourcesContent":["import type { NextPathnameInfo } from './get-next-pathname-info'\nimport { removeTrailingSlash } from './remove-trailing-slash'\nimport { addPathPrefix } from './add-path-prefix'\nimport { addPathSuffix } from './add-path-suffix'\nimport { addLocale } from './add-locale'\n\ninterface ExtendedInfo extends NextPathnameInfo {\n defaultLocale?: string\n ignorePrefix?: boolean\n}\n\nexport function formatNextPathnameInfo(info: ExtendedInfo) {\n let pathname = addLocale(\n info.pathname,\n info.locale,\n info.buildId ? undefined : info.defaultLocale,\n info.ignorePrefix\n )\n\n if (info.buildId || !info.trailingSlash) {\n pathname = removeTrailingSlash(pathname)\n }\n\n if (info.buildId) {\n pathname = addPathSuffix(\n addPathPrefix(pathname, `/_next/data/${info.buildId}`),\n info.pathname === '/' ? 'index.json' : '.json'\n )\n }\n\n pathname = addPathPrefix(pathname, info.basePath)\n return !info.buildId && info.trailingSlash\n ? !pathname.endsWith('/')\n ? addPathSuffix(pathname, '/')\n : pathname\n : removeTrailingSlash(pathname)\n}\n"],"names":["formatNextPathnameInfo","info","pathname","addLocale","locale","buildId","undefined","defaultLocale","ignorePrefix","trailingSlash","removeTrailingSlash","addPathSuffix","addPathPrefix","basePath","endsWith"],"mappings":";;;+BAWgBA,0BAAAA;;;eAAAA;;;qCAVoB;+BACN;+BACA;2BACJ;AAOnB,SAASA,uBAAuBC,IAAkB;IACvD,IAAIC,WAAWC,CAAAA,GAAAA,WAAAA,SAAS,EACtBF,KAAKC,QAAQ,EACbD,KAAKG,MAAM,EACXH,KAAKI,OAAO,GAAGC,YAAYL,KAAKM,aAAa,EAC7CN,KAAKO,YAAY;IAGnB,IAAIP,KAAKI,OAAO,IAAI,CAACJ,KAAKQ,aAAa,EAAE;QACvCP,WAAWQ,CAAAA,GAAAA,qBAAAA,mBAAmB,EAACR;IACjC;IAEA,IAAID,KAAKI,OAAO,EAAE;QAChBH,WAAWS,CAAAA,GAAAA,eAAAA,aAAa,EACtBC,CAAAA,GAAAA,eAAAA,aAAa,EAACV,UAAU,CAAC,YAAY,EAAED,KAAKI,OAAO,EAAE,GACrDJ,KAAKC,QAAQ,KAAK,MAAM,eAAe;IAE3C;IAEAA,WAAWU,CAAAA,GAAAA,eAAAA,aAAa,EAACV,UAAUD,KAAKY,QAAQ;IAChD,OAAO,CAACZ,KAAKI,OAAO,IAAIJ,KAAKQ,aAAa,GACtC,CAACP,SAASY,QAAQ,CAAC,OACjBH,CAAAA,GAAAA,eAAAA,aAAa,EAACT,UAAU,OACxBA,WACFQ,CAAAA,GAAAA,qBAAAA,mBAAmB,EAACR;AAC1B","ignoreList":[0]}}, + {"offset": {"line": 17340, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/get-next-pathname-info.ts"],"sourcesContent":["import { normalizeLocalePath } from '../../i18n/normalize-locale-path'\nimport { removePathPrefix } from './remove-path-prefix'\nimport { pathHasPrefix } from './path-has-prefix'\nimport type { I18NProvider } from '../../../../server/lib/i18n-provider'\n\nexport interface NextPathnameInfo {\n /**\n * The base path in case the pathname included it.\n */\n basePath?: string\n /**\n * The buildId for when the parsed URL is a data URL. Parsing it can be\n * disabled with the `parseData` option.\n */\n buildId?: string\n /**\n * If there was a locale in the pathname, this will hold its value.\n */\n locale?: string\n /**\n * The processed pathname without a base path, locale, or data URL elements\n * when parsing it is enabled.\n */\n pathname: string\n /**\n * A boolean telling if the pathname had a trailingSlash. This can be only\n * true if trailingSlash is enabled.\n */\n trailingSlash?: boolean\n}\n\ninterface Options {\n /**\n * When passed to true, this function will also parse Nextjs data URLs.\n */\n parseData?: boolean\n /**\n * A partial of the Next.js configuration to parse the URL.\n */\n nextConfig?: {\n basePath?: string\n i18n?: { locales?: readonly string[] } | null\n trailingSlash?: boolean\n }\n\n /**\n * If provided, this normalizer will be used to detect the locale instead of\n * the default locale detection.\n */\n i18nProvider?: I18NProvider\n}\n\nexport function getNextPathnameInfo(\n pathname: string,\n options: Options\n): NextPathnameInfo {\n const { basePath, i18n, trailingSlash } = options.nextConfig ?? {}\n const info: NextPathnameInfo = {\n pathname,\n trailingSlash: pathname !== '/' ? pathname.endsWith('/') : trailingSlash,\n }\n\n if (basePath && pathHasPrefix(info.pathname, basePath)) {\n info.pathname = removePathPrefix(info.pathname, basePath)\n info.basePath = basePath\n }\n let pathnameNoDataPrefix = info.pathname\n\n if (\n info.pathname.startsWith('/_next/data/') &&\n info.pathname.endsWith('.json')\n ) {\n const paths = info.pathname\n .replace(/^\\/_next\\/data\\//, '')\n .replace(/\\.json$/, '')\n .split('/')\n\n const buildId = paths[0]\n info.buildId = buildId\n pathnameNoDataPrefix =\n paths[1] !== 'index' ? `/${paths.slice(1).join('/')}` : '/'\n\n // update pathname with normalized if enabled although\n // we use normalized to populate locale info still\n if (options.parseData === true) {\n info.pathname = pathnameNoDataPrefix\n }\n }\n\n // If provided, use the locale route normalizer to detect the locale instead\n // of the function below.\n if (i18n) {\n let result = options.i18nProvider\n ? options.i18nProvider.analyze(info.pathname)\n : normalizeLocalePath(info.pathname, i18n.locales)\n\n info.locale = result.detectedLocale\n info.pathname = result.pathname ?? info.pathname\n\n if (!result.detectedLocale && info.buildId) {\n result = options.i18nProvider\n ? options.i18nProvider.analyze(pathnameNoDataPrefix)\n : normalizeLocalePath(pathnameNoDataPrefix, i18n.locales)\n\n if (result.detectedLocale) {\n info.locale = result.detectedLocale\n }\n }\n }\n return info\n}\n"],"names":["getNextPathnameInfo","pathname","options","basePath","i18n","trailingSlash","nextConfig","info","endsWith","pathHasPrefix","removePathPrefix","pathnameNoDataPrefix","startsWith","paths","replace","split","buildId","slice","join","parseData","result","i18nProvider","analyze","normalizeLocalePath","locales","locale","detectedLocale"],"mappings":";;;+BAoDgBA,uBAAAA;;;eAAAA;;;qCApDoB;kCACH;+BACH;AAkDvB,SAASA,oBACdC,QAAgB,EAChBC,OAAgB;IAEhB,MAAM,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,aAAa,EAAE,GAAGH,QAAQI,UAAU,IAAI,CAAC;IACjE,MAAMC,OAAyB;QAC7BN;QACAI,eAAeJ,aAAa,MAAMA,SAASO,QAAQ,CAAC,OAAOH;IAC7D;IAEA,IAAIF,YAAYM,CAAAA,GAAAA,eAAAA,aAAa,EAACF,KAAKN,QAAQ,EAAEE,WAAW;QACtDI,KAAKN,QAAQ,GAAGS,CAAAA,GAAAA,kBAAAA,gBAAgB,EAACH,KAAKN,QAAQ,EAAEE;QAChDI,KAAKJ,QAAQ,GAAGA;IAClB;IACA,IAAIQ,uBAAuBJ,KAAKN,QAAQ;IAExC,IACEM,KAAKN,QAAQ,CAACW,UAAU,CAAC,mBACzBL,KAAKN,QAAQ,CAACO,QAAQ,CAAC,UACvB;QACA,MAAMK,QAAQN,KAAKN,QAAQ,CACxBa,OAAO,CAAC,oBAAoB,IAC5BA,OAAO,CAAC,WAAW,IACnBC,KAAK,CAAC;QAET,MAAMC,UAAUH,KAAK,CAAC,EAAE;QACxBN,KAAKS,OAAO,GAAGA;QACfL,uBACEE,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC,EAAEA,MAAMI,KAAK,CAAC,GAAGC,IAAI,CAAC,MAAM,GAAG;QAE1D,sDAAsD;QACtD,kDAAkD;QAClD,IAAIhB,QAAQiB,SAAS,KAAK,MAAM;YAC9BZ,KAAKN,QAAQ,GAAGU;QAClB;IACF;IAEA,4EAA4E;IAC5E,yBAAyB;IACzB,IAAIP,MAAM;QACR,IAAIgB,SAASlB,QAAQmB,YAAY,GAC7BnB,QAAQmB,YAAY,CAACC,OAAO,CAACf,KAAKN,QAAQ,IAC1CsB,CAAAA,GAAAA,qBAAAA,mBAAmB,EAAChB,KAAKN,QAAQ,EAAEG,KAAKoB,OAAO;QAEnDjB,KAAKkB,MAAM,GAAGL,OAAOM,cAAc;QACnCnB,KAAKN,QAAQ,GAAGmB,OAAOnB,QAAQ,IAAIM,KAAKN,QAAQ;QAEhD,IAAI,CAACmB,OAAOM,cAAc,IAAInB,KAAKS,OAAO,EAAE;YAC1CI,SAASlB,QAAQmB,YAAY,GACzBnB,QAAQmB,YAAY,CAACC,OAAO,CAACX,wBAC7BY,CAAAA,GAAAA,qBAAAA,mBAAmB,EAACZ,sBAAsBP,KAAKoB,OAAO;YAE1D,IAAIJ,OAAOM,cAAc,EAAE;gBACzBnB,KAAKkB,MAAM,GAAGL,OAAOM,cAAc;YACrC;QACF;IACF;IACA,OAAOnB;AACT","ignoreList":[0]}}, + {"offset": {"line": 17393, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/parse-loader-tree.ts"],"sourcesContent":["import { DEFAULT_SEGMENT_KEY } from '../../segment'\nimport type { LoaderTree } from '../../../../server/lib/app-dir-module'\n\nexport function parseLoaderTree(tree: LoaderTree) {\n const [segment, parallelRoutes, modules, staticSiblings] = tree\n const { layout, template } = modules\n let { page } = modules\n // a __DEFAULT__ segment means that this route didn't match any of the\n // segments in the route, so we should use the default page\n page = segment === DEFAULT_SEGMENT_KEY ? modules.defaultPage : page\n\n const conventionPath = layout?.[1] || template?.[1] || page?.[1]\n\n return {\n page,\n segment,\n modules,\n /* it can be either layout / template / page */\n conventionPath,\n parallelRoutes,\n staticSiblings,\n }\n}\n"],"names":["parseLoaderTree","tree","segment","parallelRoutes","modules","staticSiblings","layout","template","page","DEFAULT_SEGMENT_KEY","defaultPage","conventionPath"],"mappings":";;;+BAGgBA,mBAAAA;;;eAAAA;;;yBAHoB;AAG7B,SAASA,gBAAgBC,IAAgB;IAC9C,MAAM,CAACC,SAASC,gBAAgBC,SAASC,eAAe,GAAGJ;IAC3D,MAAM,EAAEK,MAAM,EAAEC,QAAQ,EAAE,GAAGH;IAC7B,IAAI,EAAEI,IAAI,EAAE,GAAGJ;IACf,sEAAsE;IACtE,2DAA2D;IAC3DI,OAAON,YAAYO,SAAAA,mBAAmB,GAAGL,QAAQM,WAAW,GAAGF;IAE/D,MAAMG,iBAAiBL,QAAQ,CAAC,EAAE,IAAIC,UAAU,CAAC,EAAE,IAAIC,MAAM,CAAC,EAAE;IAEhE,OAAO;QACLA;QACAN;QACAE;QACA,6CAA6C,GAC7CO;QACAR;QACAE;IACF;AACF","ignoreList":[0]}}, + {"offset": {"line": 17424, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/parse-path.ts"],"sourcesContent":["/**\n * Given a path this function will find the pathname, query and hash and return\n * them. This is useful to parse full paths on the client side.\n * @param path A path to parse e.g. /foo/bar?id=1#hash\n */\nexport function parsePath(path: string) {\n const hashIndex = path.indexOf('#')\n const queryIndex = path.indexOf('?')\n const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex)\n\n if (hasQuery || hashIndex > -1) {\n return {\n pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),\n query: hasQuery\n ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined)\n : '',\n hash: hashIndex > -1 ? path.slice(hashIndex) : '',\n }\n }\n\n return { pathname: path, query: '', hash: '' }\n}\n"],"names":["parsePath","path","hashIndex","indexOf","queryIndex","hasQuery","pathname","substring","query","undefined","hash","slice"],"mappings":"AAAA;;;;CAIC;;;+BACeA,aAAAA;;;eAAAA;;;AAAT,SAASA,UAAUC,IAAY;IACpC,MAAMC,YAAYD,KAAKE,OAAO,CAAC;IAC/B,MAAMC,aAAaH,KAAKE,OAAO,CAAC;IAChC,MAAME,WAAWD,aAAa,CAAC,KAAMF,CAAAA,YAAY,KAAKE,aAAaF,SAAQ;IAE3E,IAAIG,YAAYH,YAAY,CAAC,GAAG;QAC9B,OAAO;YACLI,UAAUL,KAAKM,SAAS,CAAC,GAAGF,WAAWD,aAAaF;YACpDM,OAAOH,WACHJ,KAAKM,SAAS,CAACH,YAAYF,YAAY,CAAC,IAAIA,YAAYO,aACxD;YACJC,MAAMR,YAAY,CAAC,IAAID,KAAKU,KAAK,CAACT,aAAa;QACjD;IACF;IAEA,OAAO;QAAEI,UAAUL;QAAMO,OAAO;QAAIE,MAAM;IAAG;AAC/C","ignoreList":[0]}}, + {"offset": {"line": 17458, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/path-has-prefix.ts"],"sourcesContent":["import { parsePath } from './parse-path'\n\n/**\n * Checks if a given path starts with a given prefix. It ensures it matches\n * exactly without containing extra chars. e.g. prefix /docs should replace\n * for /docs, /docs/, /docs/a but not /docsss\n * @param path The path to check.\n * @param prefix The prefix to check against.\n */\nexport function pathHasPrefix(path: string, prefix: string) {\n if (typeof path !== 'string') {\n return false\n }\n\n const { pathname } = parsePath(path)\n return pathname === prefix || pathname.startsWith(prefix + '/')\n}\n"],"names":["pathHasPrefix","path","prefix","pathname","parsePath","startsWith"],"mappings":";;;+BASgBA,iBAAAA;;;eAAAA;;;2BATU;AASnB,SAASA,cAAcC,IAAY,EAAEC,MAAc;IACxD,IAAI,OAAOD,SAAS,UAAU;QAC5B,OAAO;IACT;IAEA,MAAM,EAAEE,QAAQ,EAAE,GAAGC,CAAAA,GAAAA,WAAAA,SAAS,EAACH;IAC/B,OAAOE,aAAaD,UAAUC,SAASE,UAAU,CAACH,SAAS;AAC7D","ignoreList":[0]}}, + {"offset": {"line": 17479, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/remove-path-prefix.ts"],"sourcesContent":["import { pathHasPrefix } from './path-has-prefix'\n\n/**\n * Given a path and a prefix it will remove the prefix when it exists in the\n * given path. It ensures it matches exactly without containing extra chars\n * and if the prefix is not there it will be noop.\n *\n * @param path The path to remove the prefix from.\n * @param prefix The prefix to be removed.\n */\nexport function removePathPrefix(path: string, prefix: string): string {\n // If the path doesn't start with the prefix we can return it as is. This\n // protects us from situations where the prefix is a substring of the path\n // prefix such as:\n //\n // For prefix: /blog\n //\n // /blog -> true\n // /blog/ -> true\n // /blog/1 -> true\n // /blogging -> false\n // /blogging/ -> false\n // /blogging/1 -> false\n if (!pathHasPrefix(path, prefix)) {\n return path\n }\n\n // Remove the prefix from the path via slicing.\n const withoutPrefix = path.slice(prefix.length)\n\n // If the path without the prefix starts with a `/` we can return it as is.\n if (withoutPrefix.startsWith('/')) {\n return withoutPrefix\n }\n\n // If the path without the prefix doesn't start with a `/` we need to add it\n // back to the path to make sure it's a valid path.\n return `/${withoutPrefix}`\n}\n"],"names":["removePathPrefix","path","prefix","pathHasPrefix","withoutPrefix","slice","length","startsWith"],"mappings":";;;+BAUgBA,oBAAAA;;;eAAAA;;;+BAVc;AAUvB,SAASA,iBAAiBC,IAAY,EAAEC,MAAc;IAC3D,yEAAyE;IACzE,0EAA0E;IAC1E,kBAAkB;IAClB,EAAE;IACF,oBAAoB;IACpB,EAAE;IACF,kBAAkB;IAClB,mBAAmB;IACnB,oBAAoB;IACpB,uBAAuB;IACvB,wBAAwB;IACxB,yBAAyB;IACzB,IAAI,CAACC,CAAAA,GAAAA,eAAAA,aAAa,EAACF,MAAMC,SAAS;QAChC,OAAOD;IACT;IAEA,+CAA+C;IAC/C,MAAMG,gBAAgBH,KAAKI,KAAK,CAACH,OAAOI,MAAM;IAE9C,2EAA2E;IAC3E,IAAIF,cAAcG,UAAU,CAAC,MAAM;QACjC,OAAOH;IACT;IAEA,4EAA4E;IAC5E,mDAAmD;IACnD,OAAO,CAAC,CAAC,EAAEA,eAAe;AAC5B","ignoreList":[0]}}, + {"offset": {"line": 17519, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/remove-trailing-slash.ts"],"sourcesContent":["/**\n * Removes the trailing slash for a given route or page path. Examples:\n * - `/foo/bar/` -> `/foo/bar`\n * - `/foo/bar` -> `/foo/bar`\n *\n * Uses charCodeAt (47 === '/') instead of regex to avoid the overhead of\n * compiling and executing a RegExp on every call (~3-5x faster).\n */\nexport function removeTrailingSlash(route: string) {\n return route.charCodeAt(route.length - 1) === 47 && route.length > 1\n ? route.slice(0, -1)\n : route\n}\n"],"names":["removeTrailingSlash","route","charCodeAt","length","slice"],"mappings":"AAAA;;;;;;;CAOC;;;+BACeA,uBAAAA;;;eAAAA;;;AAAT,SAASA,oBAAoBC,KAAa;IAC/C,OAAOA,MAAMC,UAAU,CAACD,MAAME,MAAM,GAAG,OAAO,MAAMF,MAAME,MAAM,GAAG,IAC/DF,MAAMG,KAAK,CAAC,GAAG,CAAC,KAChBH;AACN","ignoreList":[0]}}, + {"offset": {"line": 17542, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/segment.ts"],"sourcesContent":["import type { FlightRouterState, Segment } from './app-router-types'\n\nexport function getSegmentValue(segment: Segment) {\n return Array.isArray(segment) ? segment[1] : segment\n}\n\nexport function isGroupSegment(segment: string) {\n // Use array[0] for performant purpose\n return segment[0] === '(' && segment.endsWith(')')\n}\n\nexport function isParallelRouteSegment(segment: string) {\n return segment.startsWith('@') && segment !== '@children'\n}\n\nexport function computeSelectedLayoutSegment(\n segments: string[] | null,\n parallelRouteKey: string\n): string | null {\n if (!segments || segments.length === 0) {\n return null\n }\n\n // For 'children', use first segment; for other parallel routes, use last segment\n const rawSegment =\n parallelRouteKey === 'children'\n ? segments[0]\n : segments[segments.length - 1]\n\n // If the default slot is showing, return null since it's not technically \"selected\" (it's a fallback)\n // Returning an internal value like `__DEFAULT__` would be confusing\n return rawSegment === DEFAULT_SEGMENT_KEY ? null : rawSegment\n}\n\n/** Get the canonical parameters from the current level to the leaf node. */\nexport function getSelectedLayoutSegmentPath(\n tree: FlightRouterState,\n parallelRouteKey: string,\n first = true,\n segmentPath: string[] = []\n): string[] {\n let node: FlightRouterState\n if (first) {\n // Use the provided parallel route key on the first parallel route\n node = tree[1][parallelRouteKey]\n } else {\n // After first parallel route prefer children, if there's no children pick the first parallel route.\n const parallelRoutes = tree[1]\n node = parallelRoutes.children ?? Object.values(parallelRoutes)[0]\n }\n\n if (!node) return segmentPath\n const segment = node[0]\n\n let segmentValue = getSegmentValue(segment)\n\n if (!segmentValue || segmentValue === PAGE_SEGMENT_KEY) {\n return segmentPath\n }\n\n segmentPath.push(segmentValue)\n\n return getSelectedLayoutSegmentPath(\n node,\n parallelRouteKey,\n false,\n segmentPath\n )\n}\n\nexport const PAGE_SEGMENT_KEY = '__PAGE__'\nexport const DEFAULT_SEGMENT_KEY = '__DEFAULT__'\nexport const NOT_FOUND_SEGMENT_KEY = '/_not-found'\n"],"names":["DEFAULT_SEGMENT_KEY","NOT_FOUND_SEGMENT_KEY","PAGE_SEGMENT_KEY","computeSelectedLayoutSegment","getSegmentValue","getSelectedLayoutSegmentPath","isGroupSegment","isParallelRouteSegment","segment","Array","isArray","endsWith","startsWith","segments","parallelRouteKey","length","rawSegment","tree","first","segmentPath","node","parallelRoutes","children","Object","values","segmentValue","push"],"mappings":";;;;;;;;;;;;;;;;;;;;IAuEaA,mBAAmB,EAAA;eAAnBA;;IACAC,qBAAqB,EAAA;eAArBA;;IAFAC,gBAAgB,EAAA;eAAhBA;;IAvDGC,4BAA4B,EAAA;eAA5BA;;IAbAC,eAAe,EAAA;eAAfA;;IAiCAC,4BAA4B,EAAA;eAA5BA;;IA7BAC,cAAc,EAAA;eAAdA;;IAKAC,sBAAsB,EAAA;eAAtBA;;;AATT,SAASH,gBAAgBI,OAAgB;IAC9C,OAAOC,MAAMC,OAAO,CAACF,WAAWA,OAAO,CAAC,EAAE,GAAGA;AAC/C;AAEO,SAASF,eAAeE,OAAe;IAC5C,sCAAsC;IACtC,OAAOA,OAAO,CAAC,EAAE,KAAK,OAAOA,QAAQG,QAAQ,CAAC;AAChD;AAEO,SAASJ,uBAAuBC,OAAe;IACpD,OAAOA,QAAQI,UAAU,CAAC,QAAQJ,YAAY;AAChD;AAEO,SAASL,6BACdU,QAAyB,EACzBC,gBAAwB;IAExB,IAAI,CAACD,YAAYA,SAASE,MAAM,KAAK,GAAG;QACtC,OAAO;IACT;IAEA,iFAAiF;IACjF,MAAMC,aACJF,qBAAqB,aACjBD,QAAQ,CAAC,EAAE,GACXA,QAAQ,CAACA,SAASE,MAAM,GAAG,EAAE;IAEnC,sGAAsG;IACtG,oEAAoE;IACpE,OAAOC,eAAehB,sBAAsB,OAAOgB;AACrD;AAGO,SAASX,6BACdY,IAAuB,EACvBH,gBAAwB,EACxBI,QAAQ,IAAI,EACZC,cAAwB,EAAE;IAE1B,IAAIC;IACJ,IAAIF,OAAO;QACT,kEAAkE;QAClEE,OAAOH,IAAI,CAAC,EAAE,CAACH,iBAAiB;IAClC,OAAO;QACL,oGAAoG;QACpG,MAAMO,iBAAiBJ,IAAI,CAAC,EAAE;QAC9BG,OAAOC,eAAeC,QAAQ,IAAIC,OAAOC,MAAM,CAACH,eAAe,CAAC,EAAE;IACpE;IAEA,IAAI,CAACD,MAAM,OAAOD;IAClB,MAAMX,UAAUY,IAAI,CAAC,EAAE;IAEvB,IAAIK,eAAerB,gBAAgBI;IAEnC,IAAI,CAACiB,gBAAgBA,iBAAiBvB,kBAAkB;QACtD,OAAOiB;IACT;IAEAA,YAAYO,IAAI,CAACD;IAEjB,OAAOpB,6BACLe,MACAN,kBACA,OACAK;AAEJ;AAEO,MAAMjB,mBAAmB;AACzB,MAAMF,sBAAsB;AAC5B,MAAMC,wBAAwB","ignoreList":[0]}}, + {"offset": {"line": 17633, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/dist/compiled/@opentelemetry/api/index.js"],"sourcesContent":["(()=>{\"use strict\";var e={912:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ContextAPI=void 0;const n=r(108);const a=r(221);const o=r(44);const i=\"context\";const c=new n.NoopContextManager;class ContextAPI{constructor(){}static getInstance(){if(!this._instance){this._instance=new ContextAPI}return this._instance}setGlobalContextManager(e){return(0,a.registerGlobal)(i,e,o.DiagAPI.instance())}active(){return this._getContextManager().active()}with(e,t,r,...n){return this._getContextManager().with(e,t,r,...n)}bind(e,t){return this._getContextManager().bind(e,t)}_getContextManager(){return(0,a.getGlobal)(i)||c}disable(){this._getContextManager().disable();(0,a.unregisterGlobal)(i,o.DiagAPI.instance())}}t.ContextAPI=ContextAPI},44:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.DiagAPI=void 0;const n=r(757);const a=r(412);const o=r(711);const i=r(221);const c=\"diag\";class DiagAPI{constructor(){function _logProxy(e){return function(...t){const r=(0,i.getGlobal)(\"diag\");if(!r)return;return r[e](...t)}}const e=this;const setLogger=(t,r={logLevel:o.DiagLogLevel.INFO})=>{var n,c,s;if(t===e){const t=new Error(\"Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation\");e.error((n=t.stack)!==null&&n!==void 0?n:t.message);return false}if(typeof r===\"number\"){r={logLevel:r}}const u=(0,i.getGlobal)(\"diag\");const l=(0,a.createLogLevelDiagLogger)((c=r.logLevel)!==null&&c!==void 0?c:o.DiagLogLevel.INFO,t);if(u&&!r.suppressOverrideMessage){const e=(s=(new Error).stack)!==null&&s!==void 0?s:\"\";u.warn(`Current logger will be overwritten from ${e}`);l.warn(`Current logger will overwrite one already registered from ${e}`)}return(0,i.registerGlobal)(\"diag\",l,e,true)};e.setLogger=setLogger;e.disable=()=>{(0,i.unregisterGlobal)(c,e)};e.createComponentLogger=e=>new n.DiagComponentLogger(e);e.verbose=_logProxy(\"verbose\");e.debug=_logProxy(\"debug\");e.info=_logProxy(\"info\");e.warn=_logProxy(\"warn\");e.error=_logProxy(\"error\")}static instance(){if(!this._instance){this._instance=new DiagAPI}return this._instance}}t.DiagAPI=DiagAPI},262:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.MetricsAPI=void 0;const n=r(586);const a=r(221);const o=r(44);const i=\"metrics\";class MetricsAPI{constructor(){}static getInstance(){if(!this._instance){this._instance=new MetricsAPI}return this._instance}setGlobalMeterProvider(e){return(0,a.registerGlobal)(i,e,o.DiagAPI.instance())}getMeterProvider(){return(0,a.getGlobal)(i)||n.NOOP_METER_PROVIDER}getMeter(e,t,r){return this.getMeterProvider().getMeter(e,t,r)}disable(){(0,a.unregisterGlobal)(i,o.DiagAPI.instance())}}t.MetricsAPI=MetricsAPI},25:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.PropagationAPI=void 0;const n=r(221);const a=r(19);const o=r(92);const i=r(398);const c=r(504);const s=r(44);const u=\"propagation\";const l=new a.NoopTextMapPropagator;class PropagationAPI{constructor(){this.createBaggage=c.createBaggage;this.getBaggage=i.getBaggage;this.getActiveBaggage=i.getActiveBaggage;this.setBaggage=i.setBaggage;this.deleteBaggage=i.deleteBaggage}static getInstance(){if(!this._instance){this._instance=new PropagationAPI}return this._instance}setGlobalPropagator(e){return(0,n.registerGlobal)(u,e,s.DiagAPI.instance())}inject(e,t,r=o.defaultTextMapSetter){return this._getGlobalPropagator().inject(e,t,r)}extract(e,t,r=o.defaultTextMapGetter){return this._getGlobalPropagator().extract(e,t,r)}fields(){return this._getGlobalPropagator().fields()}disable(){(0,n.unregisterGlobal)(u,s.DiagAPI.instance())}_getGlobalPropagator(){return(0,n.getGlobal)(u)||l}}t.PropagationAPI=PropagationAPI},397:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.TraceAPI=void 0;const n=r(221);const a=r(498);const o=r(477);const i=r(793);const c=r(44);const s=\"trace\";class TraceAPI{constructor(){this._proxyTracerProvider=new a.ProxyTracerProvider;this.wrapSpanContext=o.wrapSpanContext;this.isSpanContextValid=o.isSpanContextValid;this.deleteSpan=i.deleteSpan;this.getSpan=i.getSpan;this.getActiveSpan=i.getActiveSpan;this.getSpanContext=i.getSpanContext;this.setSpan=i.setSpan;this.setSpanContext=i.setSpanContext}static getInstance(){if(!this._instance){this._instance=new TraceAPI}return this._instance}setGlobalTracerProvider(e){const t=(0,n.registerGlobal)(s,this._proxyTracerProvider,c.DiagAPI.instance());if(t){this._proxyTracerProvider.setDelegate(e)}return t}getTracerProvider(){return(0,n.getGlobal)(s)||this._proxyTracerProvider}getTracer(e,t){return this.getTracerProvider().getTracer(e,t)}disable(){(0,n.unregisterGlobal)(s,c.DiagAPI.instance());this._proxyTracerProvider=new a.ProxyTracerProvider}}t.TraceAPI=TraceAPI},398:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.deleteBaggage=t.setBaggage=t.getActiveBaggage=t.getBaggage=void 0;const n=r(912);const a=r(23);const o=(0,a.createContextKey)(\"OpenTelemetry Baggage Key\");function getBaggage(e){return e.getValue(o)||undefined}t.getBaggage=getBaggage;function getActiveBaggage(){return getBaggage(n.ContextAPI.getInstance().active())}t.getActiveBaggage=getActiveBaggage;function setBaggage(e,t){return e.setValue(o,t)}t.setBaggage=setBaggage;function deleteBaggage(e){return e.deleteValue(o)}t.deleteBaggage=deleteBaggage},152:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.BaggageImpl=void 0;class BaggageImpl{constructor(e){this._entries=e?new Map(e):new Map}getEntry(e){const t=this._entries.get(e);if(!t){return undefined}return Object.assign({},t)}getAllEntries(){return Array.from(this._entries.entries()).map((([e,t])=>[e,t]))}setEntry(e,t){const r=new BaggageImpl(this._entries);r._entries.set(e,t);return r}removeEntry(e){const t=new BaggageImpl(this._entries);t._entries.delete(e);return t}removeEntries(...e){const t=new BaggageImpl(this._entries);for(const r of e){t._entries.delete(r)}return t}clear(){return new BaggageImpl}}t.BaggageImpl=BaggageImpl},647:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.baggageEntryMetadataSymbol=void 0;t.baggageEntryMetadataSymbol=Symbol(\"BaggageEntryMetadata\")},504:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.baggageEntryMetadataFromString=t.createBaggage=void 0;const n=r(44);const a=r(152);const o=r(647);const i=n.DiagAPI.instance();function createBaggage(e={}){return new a.BaggageImpl(new Map(Object.entries(e)))}t.createBaggage=createBaggage;function baggageEntryMetadataFromString(e){if(typeof e!==\"string\"){i.error(`Cannot create baggage metadata from unknown type: ${typeof e}`);e=\"\"}return{__TYPE__:o.baggageEntryMetadataSymbol,toString(){return e}}}t.baggageEntryMetadataFromString=baggageEntryMetadataFromString},778:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.context=void 0;const n=r(912);t.context=n.ContextAPI.getInstance()},108:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NoopContextManager=void 0;const n=r(23);class NoopContextManager{active(){return n.ROOT_CONTEXT}with(e,t,r,...n){return t.call(r,...n)}bind(e,t){return t}enable(){return this}disable(){return this}}t.NoopContextManager=NoopContextManager},23:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ROOT_CONTEXT=t.createContextKey=void 0;function createContextKey(e){return Symbol.for(e)}t.createContextKey=createContextKey;class BaseContext{constructor(e){const t=this;t._currentContext=e?new Map(e):new Map;t.getValue=e=>t._currentContext.get(e);t.setValue=(e,r)=>{const n=new BaseContext(t._currentContext);n._currentContext.set(e,r);return n};t.deleteValue=e=>{const r=new BaseContext(t._currentContext);r._currentContext.delete(e);return r}}}t.ROOT_CONTEXT=new BaseContext},304:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.diag=void 0;const n=r(44);t.diag=n.DiagAPI.instance()},757:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.DiagComponentLogger=void 0;const n=r(221);class DiagComponentLogger{constructor(e){this._namespace=e.namespace||\"DiagComponentLogger\"}debug(...e){return logProxy(\"debug\",this._namespace,e)}error(...e){return logProxy(\"error\",this._namespace,e)}info(...e){return logProxy(\"info\",this._namespace,e)}warn(...e){return logProxy(\"warn\",this._namespace,e)}verbose(...e){return logProxy(\"verbose\",this._namespace,e)}}t.DiagComponentLogger=DiagComponentLogger;function logProxy(e,t,r){const a=(0,n.getGlobal)(\"diag\");if(!a){return}r.unshift(t);return a[e](...r)}},83:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.DiagConsoleLogger=void 0;const r=[{n:\"error\",c:\"error\"},{n:\"warn\",c:\"warn\"},{n:\"info\",c:\"info\"},{n:\"debug\",c:\"debug\"},{n:\"verbose\",c:\"trace\"}];class DiagConsoleLogger{constructor(){function _consoleFunc(e){return function(...t){if(console){let r=console[e];if(typeof r!==\"function\"){r=console.log}if(typeof r===\"function\"){return r.apply(console,t)}}}}for(let e=0;e{Object.defineProperty(t,\"__esModule\",{value:true});t.createLogLevelDiagLogger=void 0;const n=r(711);function createLogLevelDiagLogger(e,t){if(en.DiagLogLevel.ALL){e=n.DiagLogLevel.ALL}t=t||{};function _filterFunc(r,n){const a=t[r];if(typeof a===\"function\"&&e>=n){return a.bind(t)}return function(){}}return{error:_filterFunc(\"error\",n.DiagLogLevel.ERROR),warn:_filterFunc(\"warn\",n.DiagLogLevel.WARN),info:_filterFunc(\"info\",n.DiagLogLevel.INFO),debug:_filterFunc(\"debug\",n.DiagLogLevel.DEBUG),verbose:_filterFunc(\"verbose\",n.DiagLogLevel.VERBOSE)}}t.createLogLevelDiagLogger=createLogLevelDiagLogger},711:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.DiagLogLevel=void 0;var r;(function(e){e[e[\"NONE\"]=0]=\"NONE\";e[e[\"ERROR\"]=30]=\"ERROR\";e[e[\"WARN\"]=50]=\"WARN\";e[e[\"INFO\"]=60]=\"INFO\";e[e[\"DEBUG\"]=70]=\"DEBUG\";e[e[\"VERBOSE\"]=80]=\"VERBOSE\";e[e[\"ALL\"]=9999]=\"ALL\"})(r=t.DiagLogLevel||(t.DiagLogLevel={}))},221:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.unregisterGlobal=t.getGlobal=t.registerGlobal=void 0;const n=r(678);const a=r(652);const o=r(662);const i=a.VERSION.split(\".\")[0];const c=Symbol.for(`opentelemetry.js.api.${i}`);const s=n._globalThis;function registerGlobal(e,t,r,n=false){var o;const i=s[c]=(o=s[c])!==null&&o!==void 0?o:{version:a.VERSION};if(!n&&i[e]){const t=new Error(`@opentelemetry/api: Attempted duplicate registration of API: ${e}`);r.error(t.stack||t.message);return false}if(i.version!==a.VERSION){const t=new Error(`@opentelemetry/api: Registration of version v${i.version} for ${e} does not match previously registered API v${a.VERSION}`);r.error(t.stack||t.message);return false}i[e]=t;r.debug(`@opentelemetry/api: Registered a global for ${e} v${a.VERSION}.`);return true}t.registerGlobal=registerGlobal;function getGlobal(e){var t,r;const n=(t=s[c])===null||t===void 0?void 0:t.version;if(!n||!(0,o.isCompatible)(n)){return}return(r=s[c])===null||r===void 0?void 0:r[e]}t.getGlobal=getGlobal;function unregisterGlobal(e,t){t.debug(`@opentelemetry/api: Unregistering a global for ${e} v${a.VERSION}.`);const r=s[c];if(r){delete r[e]}}t.unregisterGlobal=unregisterGlobal},662:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.isCompatible=t._makeCompatibilityCheck=void 0;const n=r(652);const a=/^(\\d+)\\.(\\d+)\\.(\\d+)(-(.+))?$/;function _makeCompatibilityCheck(e){const t=new Set([e]);const r=new Set;const n=e.match(a);if(!n){return()=>false}const o={major:+n[1],minor:+n[2],patch:+n[3],prerelease:n[4]};if(o.prerelease!=null){return function isExactmatch(t){return t===e}}function _reject(e){r.add(e);return false}function _accept(e){t.add(e);return true}return function isCompatible(e){if(t.has(e)){return true}if(r.has(e)){return false}const n=e.match(a);if(!n){return _reject(e)}const i={major:+n[1],minor:+n[2],patch:+n[3],prerelease:n[4]};if(i.prerelease!=null){return _reject(e)}if(o.major!==i.major){return _reject(e)}if(o.major===0){if(o.minor===i.minor&&o.patch<=i.patch){return _accept(e)}return _reject(e)}if(o.minor<=i.minor){return _accept(e)}return _reject(e)}}t._makeCompatibilityCheck=_makeCompatibilityCheck;t.isCompatible=_makeCompatibilityCheck(n.VERSION)},120:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.metrics=void 0;const n=r(262);t.metrics=n.MetricsAPI.getInstance()},532:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ValueType=void 0;var r;(function(e){e[e[\"INT\"]=0]=\"INT\";e[e[\"DOUBLE\"]=1]=\"DOUBLE\"})(r=t.ValueType||(t.ValueType={}))},440:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.createNoopMeter=t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC=t.NOOP_OBSERVABLE_GAUGE_METRIC=t.NOOP_OBSERVABLE_COUNTER_METRIC=t.NOOP_UP_DOWN_COUNTER_METRIC=t.NOOP_HISTOGRAM_METRIC=t.NOOP_COUNTER_METRIC=t.NOOP_METER=t.NoopObservableUpDownCounterMetric=t.NoopObservableGaugeMetric=t.NoopObservableCounterMetric=t.NoopObservableMetric=t.NoopHistogramMetric=t.NoopUpDownCounterMetric=t.NoopCounterMetric=t.NoopMetric=t.NoopMeter=void 0;class NoopMeter{constructor(){}createHistogram(e,r){return t.NOOP_HISTOGRAM_METRIC}createCounter(e,r){return t.NOOP_COUNTER_METRIC}createUpDownCounter(e,r){return t.NOOP_UP_DOWN_COUNTER_METRIC}createObservableGauge(e,r){return t.NOOP_OBSERVABLE_GAUGE_METRIC}createObservableCounter(e,r){return t.NOOP_OBSERVABLE_COUNTER_METRIC}createObservableUpDownCounter(e,r){return t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC}addBatchObservableCallback(e,t){}removeBatchObservableCallback(e){}}t.NoopMeter=NoopMeter;class NoopMetric{}t.NoopMetric=NoopMetric;class NoopCounterMetric extends NoopMetric{add(e,t){}}t.NoopCounterMetric=NoopCounterMetric;class NoopUpDownCounterMetric extends NoopMetric{add(e,t){}}t.NoopUpDownCounterMetric=NoopUpDownCounterMetric;class NoopHistogramMetric extends NoopMetric{record(e,t){}}t.NoopHistogramMetric=NoopHistogramMetric;class NoopObservableMetric{addCallback(e){}removeCallback(e){}}t.NoopObservableMetric=NoopObservableMetric;class NoopObservableCounterMetric extends NoopObservableMetric{}t.NoopObservableCounterMetric=NoopObservableCounterMetric;class NoopObservableGaugeMetric extends NoopObservableMetric{}t.NoopObservableGaugeMetric=NoopObservableGaugeMetric;class NoopObservableUpDownCounterMetric extends NoopObservableMetric{}t.NoopObservableUpDownCounterMetric=NoopObservableUpDownCounterMetric;t.NOOP_METER=new NoopMeter;t.NOOP_COUNTER_METRIC=new NoopCounterMetric;t.NOOP_HISTOGRAM_METRIC=new NoopHistogramMetric;t.NOOP_UP_DOWN_COUNTER_METRIC=new NoopUpDownCounterMetric;t.NOOP_OBSERVABLE_COUNTER_METRIC=new NoopObservableCounterMetric;t.NOOP_OBSERVABLE_GAUGE_METRIC=new NoopObservableGaugeMetric;t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC=new NoopObservableUpDownCounterMetric;function createNoopMeter(){return t.NOOP_METER}t.createNoopMeter=createNoopMeter},586:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NOOP_METER_PROVIDER=t.NoopMeterProvider=void 0;const n=r(440);class NoopMeterProvider{getMeter(e,t,r){return n.NOOP_METER}}t.NoopMeterProvider=NoopMeterProvider;t.NOOP_METER_PROVIDER=new NoopMeterProvider},678:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var a=this&&this.__exportStar||function(e,t){for(var r in e)if(r!==\"default\"&&!Object.prototype.hasOwnProperty.call(t,r))n(t,e,r)};Object.defineProperty(t,\"__esModule\",{value:true});a(r(59),t)},460:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t._globalThis=void 0;t._globalThis=typeof globalThis===\"object\"?globalThis:global},59:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var a=this&&this.__exportStar||function(e,t){for(var r in e)if(r!==\"default\"&&!Object.prototype.hasOwnProperty.call(t,r))n(t,e,r)};Object.defineProperty(t,\"__esModule\",{value:true});a(r(460),t)},27:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.propagation=void 0;const n=r(25);t.propagation=n.PropagationAPI.getInstance()},19:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NoopTextMapPropagator=void 0;class NoopTextMapPropagator{inject(e,t){}extract(e,t){return e}fields(){return[]}}t.NoopTextMapPropagator=NoopTextMapPropagator},92:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.defaultTextMapSetter=t.defaultTextMapGetter=void 0;t.defaultTextMapGetter={get(e,t){if(e==null){return undefined}return e[t]},keys(e){if(e==null){return[]}return Object.keys(e)}};t.defaultTextMapSetter={set(e,t,r){if(e==null){return}e[t]=r}}},816:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.trace=void 0;const n=r(397);t.trace=n.TraceAPI.getInstance()},374:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NonRecordingSpan=void 0;const n=r(546);class NonRecordingSpan{constructor(e=n.INVALID_SPAN_CONTEXT){this._spanContext=e}spanContext(){return this._spanContext}setAttribute(e,t){return this}setAttributes(e){return this}addEvent(e,t){return this}setStatus(e){return this}updateName(e){return this}end(e){}isRecording(){return false}recordException(e,t){}}t.NonRecordingSpan=NonRecordingSpan},637:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NoopTracer=void 0;const n=r(912);const a=r(793);const o=r(374);const i=r(477);const c=n.ContextAPI.getInstance();class NoopTracer{startSpan(e,t,r=c.active()){const n=Boolean(t===null||t===void 0?void 0:t.root);if(n){return new o.NonRecordingSpan}const s=r&&(0,a.getSpanContext)(r);if(isSpanContext(s)&&(0,i.isSpanContextValid)(s)){return new o.NonRecordingSpan(s)}else{return new o.NonRecordingSpan}}startActiveSpan(e,t,r,n){let o;let i;let s;if(arguments.length<2){return}else if(arguments.length===2){s=t}else if(arguments.length===3){o=t;s=r}else{o=t;i=r;s=n}const u=i!==null&&i!==void 0?i:c.active();const l=this.startSpan(e,o,u);const g=(0,a.setSpan)(u,l);return c.with(g,s,undefined,l)}}t.NoopTracer=NoopTracer;function isSpanContext(e){return typeof e===\"object\"&&typeof e[\"spanId\"]===\"string\"&&typeof e[\"traceId\"]===\"string\"&&typeof e[\"traceFlags\"]===\"number\"}},76:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NoopTracerProvider=void 0;const n=r(637);class NoopTracerProvider{getTracer(e,t,r){return new n.NoopTracer}}t.NoopTracerProvider=NoopTracerProvider},779:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ProxyTracer=void 0;const n=r(637);const a=new n.NoopTracer;class ProxyTracer{constructor(e,t,r,n){this._provider=e;this.name=t;this.version=r;this.options=n}startSpan(e,t,r){return this._getTracer().startSpan(e,t,r)}startActiveSpan(e,t,r,n){const a=this._getTracer();return Reflect.apply(a.startActiveSpan,a,arguments)}_getTracer(){if(this._delegate){return this._delegate}const e=this._provider.getDelegateTracer(this.name,this.version,this.options);if(!e){return a}this._delegate=e;return this._delegate}}t.ProxyTracer=ProxyTracer},498:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ProxyTracerProvider=void 0;const n=r(779);const a=r(76);const o=new a.NoopTracerProvider;class ProxyTracerProvider{getTracer(e,t,r){var a;return(a=this.getDelegateTracer(e,t,r))!==null&&a!==void 0?a:new n.ProxyTracer(this,e,t,r)}getDelegate(){var e;return(e=this._delegate)!==null&&e!==void 0?e:o}setDelegate(e){this._delegate=e}getDelegateTracer(e,t,r){var n;return(n=this._delegate)===null||n===void 0?void 0:n.getTracer(e,t,r)}}t.ProxyTracerProvider=ProxyTracerProvider},312:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.SamplingDecision=void 0;var r;(function(e){e[e[\"NOT_RECORD\"]=0]=\"NOT_RECORD\";e[e[\"RECORD\"]=1]=\"RECORD\";e[e[\"RECORD_AND_SAMPLED\"]=2]=\"RECORD_AND_SAMPLED\"})(r=t.SamplingDecision||(t.SamplingDecision={}))},793:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.getSpanContext=t.setSpanContext=t.deleteSpan=t.setSpan=t.getActiveSpan=t.getSpan=void 0;const n=r(23);const a=r(374);const o=r(912);const i=(0,n.createContextKey)(\"OpenTelemetry Context Key SPAN\");function getSpan(e){return e.getValue(i)||undefined}t.getSpan=getSpan;function getActiveSpan(){return getSpan(o.ContextAPI.getInstance().active())}t.getActiveSpan=getActiveSpan;function setSpan(e,t){return e.setValue(i,t)}t.setSpan=setSpan;function deleteSpan(e){return e.deleteValue(i)}t.deleteSpan=deleteSpan;function setSpanContext(e,t){return setSpan(e,new a.NonRecordingSpan(t))}t.setSpanContext=setSpanContext;function getSpanContext(e){var t;return(t=getSpan(e))===null||t===void 0?void 0:t.spanContext()}t.getSpanContext=getSpanContext},285:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.TraceStateImpl=void 0;const n=r(240);const a=32;const o=512;const i=\",\";const c=\"=\";class TraceStateImpl{constructor(e){this._internalState=new Map;if(e)this._parse(e)}set(e,t){const r=this._clone();if(r._internalState.has(e)){r._internalState.delete(e)}r._internalState.set(e,t);return r}unset(e){const t=this._clone();t._internalState.delete(e);return t}get(e){return this._internalState.get(e)}serialize(){return this._keys().reduce(((e,t)=>{e.push(t+c+this.get(t));return e}),[]).join(i)}_parse(e){if(e.length>o)return;this._internalState=e.split(i).reverse().reduce(((e,t)=>{const r=t.trim();const a=r.indexOf(c);if(a!==-1){const o=r.slice(0,a);const i=r.slice(a+1,t.length);if((0,n.validateKey)(o)&&(0,n.validateValue)(i)){e.set(o,i)}else{}}return e}),new Map);if(this._internalState.size>a){this._internalState=new Map(Array.from(this._internalState.entries()).reverse().slice(0,a))}}_keys(){return Array.from(this._internalState.keys()).reverse()}_clone(){const e=new TraceStateImpl;e._internalState=new Map(this._internalState);return e}}t.TraceStateImpl=TraceStateImpl},240:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.validateValue=t.validateKey=void 0;const r=\"[_0-9a-z-*/]\";const n=`[a-z]${r}{0,255}`;const a=`[a-z0-9]${r}{0,240}@[a-z]${r}{0,13}`;const o=new RegExp(`^(?:${n}|${a})$`);const i=/^[ -~]{0,255}[!-~]$/;const c=/,|=/;function validateKey(e){return o.test(e)}t.validateKey=validateKey;function validateValue(e){return i.test(e)&&!c.test(e)}t.validateValue=validateValue},87:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.createTraceState=void 0;const n=r(285);function createTraceState(e){return new n.TraceStateImpl(e)}t.createTraceState=createTraceState},546:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.INVALID_SPAN_CONTEXT=t.INVALID_TRACEID=t.INVALID_SPANID=void 0;const n=r(731);t.INVALID_SPANID=\"0000000000000000\";t.INVALID_TRACEID=\"00000000000000000000000000000000\";t.INVALID_SPAN_CONTEXT={traceId:t.INVALID_TRACEID,spanId:t.INVALID_SPANID,traceFlags:n.TraceFlags.NONE}},613:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.SpanKind=void 0;var r;(function(e){e[e[\"INTERNAL\"]=0]=\"INTERNAL\";e[e[\"SERVER\"]=1]=\"SERVER\";e[e[\"CLIENT\"]=2]=\"CLIENT\";e[e[\"PRODUCER\"]=3]=\"PRODUCER\";e[e[\"CONSUMER\"]=4]=\"CONSUMER\"})(r=t.SpanKind||(t.SpanKind={}))},477:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.wrapSpanContext=t.isSpanContextValid=t.isValidSpanId=t.isValidTraceId=void 0;const n=r(546);const a=r(374);const o=/^([0-9a-f]{32})$/i;const i=/^[0-9a-f]{16}$/i;function isValidTraceId(e){return o.test(e)&&e!==n.INVALID_TRACEID}t.isValidTraceId=isValidTraceId;function isValidSpanId(e){return i.test(e)&&e!==n.INVALID_SPANID}t.isValidSpanId=isValidSpanId;function isSpanContextValid(e){return isValidTraceId(e.traceId)&&isValidSpanId(e.spanId)}t.isSpanContextValid=isSpanContextValid;function wrapSpanContext(e){return new a.NonRecordingSpan(e)}t.wrapSpanContext=wrapSpanContext},854:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.SpanStatusCode=void 0;var r;(function(e){e[e[\"UNSET\"]=0]=\"UNSET\";e[e[\"OK\"]=1]=\"OK\";e[e[\"ERROR\"]=2]=\"ERROR\"})(r=t.SpanStatusCode||(t.SpanStatusCode={}))},731:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.TraceFlags=void 0;var r;(function(e){e[e[\"NONE\"]=0]=\"NONE\";e[e[\"SAMPLED\"]=1]=\"SAMPLED\"})(r=t.TraceFlags||(t.TraceFlags={}))},652:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.VERSION=void 0;t.VERSION=\"1.6.0\"}};var t={};function __nccwpck_require__(r){var n=t[r];if(n!==undefined){return n.exports}var a=t[r]={exports:{}};var o=true;try{e[r].call(a.exports,a,a.exports,__nccwpck_require__);o=false}finally{if(o)delete t[r]}return a.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var r={};(()=>{var e=r;Object.defineProperty(e,\"__esModule\",{value:true});e.trace=e.propagation=e.metrics=e.diag=e.context=e.INVALID_SPAN_CONTEXT=e.INVALID_TRACEID=e.INVALID_SPANID=e.isValidSpanId=e.isValidTraceId=e.isSpanContextValid=e.createTraceState=e.TraceFlags=e.SpanStatusCode=e.SpanKind=e.SamplingDecision=e.ProxyTracerProvider=e.ProxyTracer=e.defaultTextMapSetter=e.defaultTextMapGetter=e.ValueType=e.createNoopMeter=e.DiagLogLevel=e.DiagConsoleLogger=e.ROOT_CONTEXT=e.createContextKey=e.baggageEntryMetadataFromString=void 0;var t=__nccwpck_require__(504);Object.defineProperty(e,\"baggageEntryMetadataFromString\",{enumerable:true,get:function(){return t.baggageEntryMetadataFromString}});var n=__nccwpck_require__(23);Object.defineProperty(e,\"createContextKey\",{enumerable:true,get:function(){return n.createContextKey}});Object.defineProperty(e,\"ROOT_CONTEXT\",{enumerable:true,get:function(){return n.ROOT_CONTEXT}});var a=__nccwpck_require__(83);Object.defineProperty(e,\"DiagConsoleLogger\",{enumerable:true,get:function(){return a.DiagConsoleLogger}});var o=__nccwpck_require__(711);Object.defineProperty(e,\"DiagLogLevel\",{enumerable:true,get:function(){return o.DiagLogLevel}});var i=__nccwpck_require__(440);Object.defineProperty(e,\"createNoopMeter\",{enumerable:true,get:function(){return i.createNoopMeter}});var c=__nccwpck_require__(532);Object.defineProperty(e,\"ValueType\",{enumerable:true,get:function(){return c.ValueType}});var s=__nccwpck_require__(92);Object.defineProperty(e,\"defaultTextMapGetter\",{enumerable:true,get:function(){return s.defaultTextMapGetter}});Object.defineProperty(e,\"defaultTextMapSetter\",{enumerable:true,get:function(){return s.defaultTextMapSetter}});var u=__nccwpck_require__(779);Object.defineProperty(e,\"ProxyTracer\",{enumerable:true,get:function(){return u.ProxyTracer}});var l=__nccwpck_require__(498);Object.defineProperty(e,\"ProxyTracerProvider\",{enumerable:true,get:function(){return l.ProxyTracerProvider}});var g=__nccwpck_require__(312);Object.defineProperty(e,\"SamplingDecision\",{enumerable:true,get:function(){return g.SamplingDecision}});var p=__nccwpck_require__(613);Object.defineProperty(e,\"SpanKind\",{enumerable:true,get:function(){return p.SpanKind}});var d=__nccwpck_require__(854);Object.defineProperty(e,\"SpanStatusCode\",{enumerable:true,get:function(){return d.SpanStatusCode}});var _=__nccwpck_require__(731);Object.defineProperty(e,\"TraceFlags\",{enumerable:true,get:function(){return _.TraceFlags}});var f=__nccwpck_require__(87);Object.defineProperty(e,\"createTraceState\",{enumerable:true,get:function(){return f.createTraceState}});var b=__nccwpck_require__(477);Object.defineProperty(e,\"isSpanContextValid\",{enumerable:true,get:function(){return b.isSpanContextValid}});Object.defineProperty(e,\"isValidTraceId\",{enumerable:true,get:function(){return b.isValidTraceId}});Object.defineProperty(e,\"isValidSpanId\",{enumerable:true,get:function(){return b.isValidSpanId}});var v=__nccwpck_require__(546);Object.defineProperty(e,\"INVALID_SPANID\",{enumerable:true,get:function(){return v.INVALID_SPANID}});Object.defineProperty(e,\"INVALID_TRACEID\",{enumerable:true,get:function(){return v.INVALID_TRACEID}});Object.defineProperty(e,\"INVALID_SPAN_CONTEXT\",{enumerable:true,get:function(){return v.INVALID_SPAN_CONTEXT}});const O=__nccwpck_require__(778);Object.defineProperty(e,\"context\",{enumerable:true,get:function(){return O.context}});const P=__nccwpck_require__(304);Object.defineProperty(e,\"diag\",{enumerable:true,get:function(){return P.diag}});const N=__nccwpck_require__(120);Object.defineProperty(e,\"metrics\",{enumerable:true,get:function(){return N.metrics}});const S=__nccwpck_require__(27);Object.defineProperty(e,\"propagation\",{enumerable:true,get:function(){return S.propagation}});const C=__nccwpck_require__(816);Object.defineProperty(e,\"trace\",{enumerable:true,get:function(){return C.trace}});e[\"default\"]={context:O.context,diag:P.diag,metrics:N.metrics,propagation:S.propagation,trace:C.trace}})();module.exports=r})();"],"names":["e","t","r","Object","defineProperty","value","ContextAPI","n","a","o","i","c","NoopContextManager","getInstance","_instance","setGlobalContextManager","registerGlobal","DiagAPI","instance","active","_getContextManager","with","bind","getGlobal","disable","unregisterGlobal","_logProxy","setLogger","logLevel","DiagLogLevel","INFO","s","Error","error","stack","message","u","l","createLogLevelDiagLogger","suppressOverrideMessage","warn","createComponentLogger","DiagComponentLogger","verbose","debug","info","MetricsAPI","setGlobalMeterProvider","getMeterProvider","NOOP_METER_PROVIDER","getMeter","PropagationAPI","NoopTextMapPropagator","createBaggage","getBaggage","getActiveBaggage","setBaggage","deleteBaggage","setGlobalPropagator","inject","defaultTextMapSetter","_getGlobalPropagator","extract","defaultTextMapGetter","fields","TraceAPI","_proxyTracerProvider","ProxyTracerProvider","wrapSpanContext","isSpanContextValid","deleteSpan","getSpan","getActiveSpan","getSpanContext","setSpan","setSpanContext","setGlobalTracerProvider","setDelegate","getTracerProvider","getTracer","createContextKey","getValue","undefined","setValue","deleteValue","BaggageImpl","_entries","Map","getEntry","get","assign","getAllEntries","Array","from","entries","map","setEntry","set","removeEntry","delete","removeEntries","clear","baggageEntryMetadataSymbol","Symbol","baggageEntryMetadataFromString","__TYPE__","toString","context","ROOT_CONTEXT","call","enable","for","BaseContext","_currentContext","diag","_namespace","namespace","logProxy","unshift","DiagConsoleLogger","_consoleFunc","console","log","apply","length","NONE","ALL","_filterFunc","ERROR","WARN","DEBUG","VERBOSE","VERSION","split","_globalThis","version","isCompatible","_makeCompatibilityCheck","Set","match","major","minor","patch","prerelease","isExactmatch","_reject","add","_accept","has","metrics","ValueType","createNoopMeter","NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC","NOOP_OBSERVABLE_GAUGE_METRIC","NOOP_OBSERVABLE_COUNTER_METRIC","NOOP_UP_DOWN_COUNTER_METRIC","NOOP_HISTOGRAM_METRIC","NOOP_COUNTER_METRIC","NOOP_METER","NoopObservableUpDownCounterMetric","NoopObservableGaugeMetric","NoopObservableCounterMetric","NoopObservableMetric","NoopHistogramMetric","NoopUpDownCounterMetric","NoopCounterMetric","NoopMetric","NoopMeter","createHistogram","createCounter","createUpDownCounter","createObservableGauge","createObservableCounter","createObservableUpDownCounter","addBatchObservableCallback","removeBatchObservableCallback","record","addCallback","removeCallback","NoopMeterProvider","__createBinding","create","enumerable","__exportStar","prototype","hasOwnProperty","globalThis","propagation","keys","trace","NonRecordingSpan","INVALID_SPAN_CONTEXT","_spanContext","spanContext","setAttribute","setAttributes","addEvent","setStatus","updateName","end","isRecording","recordException","NoopTracer","startSpan","Boolean","root","isSpanContext","startActiveSpan","arguments","g","NoopTracerProvider","ProxyTracer","_provider","name","options","_getTracer","Reflect","_delegate","getDelegateTracer","getDelegate","SamplingDecision","TraceStateImpl","_internalState","_parse","_clone","unset","serialize","_keys","reduce","push","join","reverse","trim","indexOf","slice","validateKey","validateValue","size","RegExp","test","createTraceState","INVALID_TRACEID","INVALID_SPANID","traceId","spanId","traceFlags","TraceFlags","SpanKind","isValidSpanId","isValidTraceId","SpanStatusCode","__nccwpck_require__","exports","ab","p","d","_","f","b","v","O","P","N","S","C","module"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 19118, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/dist/compiled/cookie/index.js"],"sourcesContent":["(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var r=e;\n/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */r.parse=parse;r.serialize=serialize;var i=decodeURIComponent;var t=encodeURIComponent;var a=/; */;var n=/^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;function parse(e,r){if(typeof e!==\"string\"){throw new TypeError(\"argument str must be a string\")}var t={};var n=r||{};var o=e.split(a);var s=n.decode||i;for(var p=0;p{var i={943:function(i,e){(function(o,a){\"use strict\";var r=\"1.0.35\",t=\"\",n=\"?\",s=\"function\",b=\"undefined\",w=\"object\",l=\"string\",d=\"major\",c=\"model\",u=\"name\",p=\"type\",m=\"vendor\",f=\"version\",h=\"architecture\",v=\"console\",g=\"mobile\",k=\"tablet\",x=\"smarttv\",_=\"wearable\",y=\"embedded\",q=350;var T=\"Amazon\",S=\"Apple\",z=\"ASUS\",N=\"BlackBerry\",A=\"Browser\",C=\"Chrome\",E=\"Edge\",O=\"Firefox\",U=\"Google\",j=\"Huawei\",P=\"LG\",R=\"Microsoft\",M=\"Motorola\",B=\"Opera\",V=\"Samsung\",D=\"Sharp\",I=\"Sony\",W=\"Viera\",F=\"Xiaomi\",G=\"Zebra\",H=\"Facebook\",L=\"Chromium OS\",Z=\"Mac OS\";var extend=function(i,e){var o={};for(var a in i){if(e[a]&&e[a].length%2===0){o[a]=e[a].concat(i[a])}else{o[a]=i[a]}}return o},enumerize=function(i){var e={};for(var o=0;o0){if(b.length===2){if(typeof b[1]==s){this[b[0]]=b[1].call(this,d)}else{this[b[0]]=b[1]}}else if(b.length===3){if(typeof b[1]===s&&!(b[1].exec&&b[1].test)){this[b[0]]=d?b[1].call(this,d,b[2]):a}else{this[b[0]]=d?d.replace(b[1],b[2]):a}}else if(b.length===4){this[b[0]]=d?b[3].call(this,d.replace(b[1],b[2])):a}}else{this[b]=d?d:a}}}}o+=2}},strMapper=function(i,e){for(var o in e){if(typeof e[o]===w&&e[o].length>0){for(var r=0;r2){i[c]=\"iPad\";i[p]=k}return i};this.getEngine=function(){var i={};i[u]=a;i[f]=a;rgxMapper.call(i,n,x.engine);return i};this.getOS=function(){var i={};i[u]=a;i[f]=a;rgxMapper.call(i,n,x.os);if(_&&!i[u]&&v&&v.platform!=\"Unknown\"){i[u]=v.platform.replace(/chrome os/i,L).replace(/macos/i,Z)}return i};this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}};this.getUA=function(){return n};this.setUA=function(i){n=typeof i===l&&i.length>q?trim(i,q):i;return this};this.setUA(n);return this};UAParser.VERSION=r;UAParser.BROWSER=enumerize([u,f,d]);UAParser.CPU=enumerize([h]);UAParser.DEVICE=enumerize([c,m,p,v,g,x,k,_,y]);UAParser.ENGINE=UAParser.OS=enumerize([u,f]);if(typeof e!==b){if(\"object\"!==b&&i.exports){e=i.exports=UAParser}e.UAParser=UAParser}else{if(typeof define===s&&define.amd){define((function(){return UAParser}))}else if(typeof o!==b){o.UAParser=UAParser}}var Q=typeof o!==b&&(o.jQuery||o.Zepto);if(Q&&!Q.ua){var Y=new UAParser;Q.ua=Y.getResult();Q.ua.get=function(){return Y.getUA()};Q.ua.set=function(i){Y.setUA(i);var e=Y.getResult();for(var o in e){Q.ua[o]=e[o]}}}})(typeof window===\"object\"?window:this)}};var e={};function __nccwpck_require__(o){var a=e[o];if(a!==undefined){return a.exports}var r=e[o]={exports:{}};var t=true;try{i[o].call(r.exports,r,r.exports,__nccwpck_require__);t=false}finally{if(t)delete e[o]}return r.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var o=__nccwpck_require__(943);module.exports=o})();"],"names":["i","e","o","a","r","t","n","s","b","w","l","d","c","u","p","m","f","h","v","g","k","x","_","y","q","T","S","z","N","A","C","E","O","U","j","P","R","M","B","V","D","I","W","F","G","H","L","Z","extend","length","concat","enumerize","toUpperCase","has","lowerize","indexOf","toLowerCase","majorize","replace","split","trim","substring","rgxMapper","exec","call","test","strMapper","$","X","ME","XP","Vista","RT","K","browser","cpu","device","engine","os","UAParser","getResult","navigator","userAgent","userAgentData","getBrowser","brave","isBrave","getCPU","getDevice","mobile","standalone","maxTouchPoints","getEngine","getOS","platform","ua","getUA","setUA","VERSION","BROWSER","CPU","DEVICE","ENGINE","OS","exports","define","amd","Q","jQuery","Zepto","Y","get","set","__nccwpck_require__","undefined","ab","module"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 21560, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/route-modules/app-route/module.compiled.js"],"sourcesContent":["if (process.env.NEXT_RUNTIME === 'edge') {\n module.exports = require('next/dist/server/route-modules/app-route/module.js')\n} else {\n if (process.env.__NEXT_EXPERIMENTAL_REACT) {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-route-turbo-experimental.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-route-experimental.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-route-turbo-experimental.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-route-experimental.runtime.prod.js')\n }\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-route-turbo.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-route.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-route-turbo.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-route.runtime.prod.js')\n }\n }\n }\n}\n"],"names":["process","env","NEXT_RUNTIME","module","exports","require","__NEXT_EXPERIMENTAL_REACT","NODE_ENV","TURBOPACK"],"mappings":"AAAA,IAAIA,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;KAElC;IACL,IAAIF,QAAQC,GAAG,CAACK,yBAAyB,EAAE;;SAcpC;QACL,IAAIN,QAAQC,GAAG,CAACM,QAAQ,KAAK,WAAe;YAC1C,IAAIP,QAAQC,GAAG,CAACO,SAAS,eAAE;gBACzBL,OAAOC,OAAO,GAAGC,QAAQ;YAC3B,OAAO;;QAGT,OAAO;;IAOT;AACF","ignoreList":[0]}}, + {"offset": {"line": 21578, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/headers.js"],"sourcesContent":["module.exports.cookies = require('./dist/server/request/cookies').cookies\nmodule.exports.headers = require('./dist/server/request/headers').headers\nmodule.exports.draftMode = require('./dist/server/request/draft-mode').draftMode\n"],"names":["module","exports","cookies","headers","draftMode"],"mappings":"AAAAA,OAAOC,OAAO,CAACC,OAAO,GAAG,+GAAyCA,OAAO;AACzEF,OAAOC,OAAO,CAACE,OAAO,GAAG,+GAAyCA,OAAO;AACzEH,OAAOC,OAAO,CAACG,SAAS,GAAG,kHAA4CA,SAAS","ignoreList":[0]}}, + {"offset": {"line": 21584, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/server.js"],"sourcesContent":["const serverExports = {\n NextRequest: require('next/dist/server/web/spec-extension/request')\n .NextRequest,\n NextResponse: require('next/dist/server/web/spec-extension/response')\n .NextResponse,\n ImageResponse: require('next/dist/server/web/spec-extension/image-response')\n .ImageResponse,\n userAgentFromString: require('next/dist/server/web/spec-extension/user-agent')\n .userAgentFromString,\n userAgent: require('next/dist/server/web/spec-extension/user-agent')\n .userAgent,\n URLPattern: require('next/dist/server/web/spec-extension/url-pattern')\n .URLPattern,\n after: require('next/dist/server/after').after,\n connection: require('next/dist/server/request/connection').connection,\n}\n\n// https://nodejs.org/api/esm.html#commonjs-namespaces\n// When importing CommonJS modules, the module.exports object is provided as the default export\nmodule.exports = serverExports\n\n// make import { xxx } from 'next/server' work\nexports.NextRequest = serverExports.NextRequest\nexports.NextResponse = serverExports.NextResponse\nexports.ImageResponse = serverExports.ImageResponse\nexports.userAgentFromString = serverExports.userAgentFromString\nexports.userAgent = serverExports.userAgent\nexports.URLPattern = serverExports.URLPattern\nexports.after = serverExports.after\nexports.connection = serverExports.connection\n"],"names":["serverExports","NextRequest","NextResponse","ImageResponse","userAgentFromString","userAgent","URLPattern","after","connection","module","exports"],"mappings":"AAAA,MAAMA,gBAAgB;IACpBC,aAAa,0HACVA,WAAW;IACdC,cAAc,2HACXA,YAAY;IACfC,eAAe,iIACZA,aAAa;IAChBC,qBAAqB,6HAClBA,mBAAmB;IACtBC,WAAW,6HACRA,SAAS;IACZC,YAAY,8HACTA,UAAU;IACbC,OAAO,2GAAkCA,KAAK;IAC9CC,YAAY,kHAA+CA,UAAU;AACvE;AAEA,sDAAsD;AACtD,+FAA+F;AAC/FC,OAAOC,OAAO,GAAGV;AAEjB,8CAA8C;AAC9CU,QAAQT,WAAW,GAAGD,cAAcC,WAAW;AAC/CS,QAAQR,YAAY,GAAGF,cAAcE,YAAY;AACjDQ,QAAQP,aAAa,GAAGH,cAAcG,aAAa;AACnDO,QAAQN,mBAAmB,GAAGJ,cAAcI,mBAAmB;AAC/DM,QAAQL,SAAS,GAAGL,cAAcK,SAAS;AAC3CK,QAAQJ,UAAU,GAAGN,cAAcM,UAAU;AAC7CI,QAAQH,KAAK,GAAGP,cAAcO,KAAK;AACnCG,QAAQF,UAAU,GAAGR,cAAcQ,UAAU","ignoreList":[0]}}] +} \ No newline at end of file diff --git a/.next-dev/dev/server/chunks/node_modules_next_dist_1gu--yty9067e._.js b/.next-dev/dev/server/chunks/node_modules_next_dist_1gu--yty9067e._.js new file mode 100644 index 0000000..cf78c1c --- /dev/null +++ b/.next-dev/dev/server/chunks/node_modules_next_dist_1gu--yty9067e._.js @@ -0,0 +1,13062 @@ +module.exports = [ +(()=>{"use strict";return[ +"[project]/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all)=>{ + for(var name in all)__defProp(target, name, { + get: all[name], + enumerable: true + }); +}; +var __copyProps = (to, from, except, desc)=>{ + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from))if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { + get: ()=>from[key], + enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable + }); + } + return to; +}; +var __toCommonJS = (mod)=>__copyProps(__defProp({}, "__esModule", { + value: true + }), mod); +// src/index.ts +var src_exports = {}; +__export(src_exports, { + RequestCookies: ()=>RequestCookies, + ResponseCookies: ()=>ResponseCookies, + parseCookie: ()=>parseCookie, + parseSetCookie: ()=>parseSetCookie, + stringifyCookie: ()=>stringifyCookie +}); +module.exports = __toCommonJS(src_exports); +// src/serialize.ts +function stringifyCookie(c) { + var _a; + const attrs = [ + "path" in c && c.path && `Path=${c.path}`, + "expires" in c && (c.expires || c.expires === 0) && `Expires=${(typeof c.expires === "number" ? new Date(c.expires) : c.expires).toUTCString()}`, + "maxAge" in c && typeof c.maxAge === "number" && `Max-Age=${c.maxAge}`, + "domain" in c && c.domain && `Domain=${c.domain}`, + "secure" in c && c.secure && "Secure", + "httpOnly" in c && c.httpOnly && "HttpOnly", + "sameSite" in c && c.sameSite && `SameSite=${c.sameSite}`, + "partitioned" in c && c.partitioned && "Partitioned", + "priority" in c && c.priority && `Priority=${c.priority}` + ].filter(Boolean); + const stringified = `${c.name}=${encodeURIComponent((_a = c.value) != null ? _a : "")}`; + return attrs.length === 0 ? stringified : `${stringified}; ${attrs.join("; ")}`; +} +function parseCookie(cookie) { + const map = /* @__PURE__ */ new Map(); + for (const pair of cookie.split(/; */)){ + if (!pair) continue; + const splitAt = pair.indexOf("="); + if (splitAt === -1) { + map.set(pair, "true"); + continue; + } + const [key, value] = [ + pair.slice(0, splitAt), + pair.slice(splitAt + 1) + ]; + try { + map.set(key, decodeURIComponent(value != null ? value : "true")); + } catch {} + } + return map; +} +function parseSetCookie(setCookie) { + if (!setCookie) { + return void 0; + } + const [[name, value], ...attributes] = parseCookie(setCookie); + const { domain, expires, httponly, maxage, path, samesite, secure, partitioned, priority } = Object.fromEntries(attributes.map(([key, value2])=>[ + key.toLowerCase().replace(/-/g, ""), + value2 + ])); + const cookie = { + name, + value: decodeURIComponent(value), + domain, + ...expires && { + expires: new Date(expires) + }, + ...httponly && { + httpOnly: true + }, + ...typeof maxage === "string" && { + maxAge: Number(maxage) + }, + path, + ...samesite && { + sameSite: parseSameSite(samesite) + }, + ...secure && { + secure: true + }, + ...priority && { + priority: parsePriority(priority) + }, + ...partitioned && { + partitioned: true + } + }; + return compact(cookie); +} +function compact(t) { + const newT = {}; + for(const key in t){ + if (t[key]) { + newT[key] = t[key]; + } + } + return newT; +} +var SAME_SITE = [ + "strict", + "lax", + "none" +]; +function parseSameSite(string) { + string = string.toLowerCase(); + return SAME_SITE.includes(string) ? string : void 0; +} +var PRIORITY = [ + "low", + "medium", + "high" +]; +function parsePriority(string) { + string = string.toLowerCase(); + return PRIORITY.includes(string) ? string : void 0; +} +function splitCookiesString(cookiesString) { + if (!cookiesString) return []; + var cookiesStrings = []; + var pos = 0; + var start; + var ch; + var lastComma; + var nextStart; + var cookiesSeparatorFound; + function skipWhitespace() { + while(pos < cookiesString.length && /\s/.test(cookiesString.charAt(pos))){ + pos += 1; + } + return pos < cookiesString.length; + } + function notSpecialChar() { + ch = cookiesString.charAt(pos); + return ch !== "=" && ch !== ";" && ch !== ","; + } + while(pos < cookiesString.length){ + start = pos; + cookiesSeparatorFound = false; + while(skipWhitespace()){ + ch = cookiesString.charAt(pos); + if (ch === ",") { + lastComma = pos; + pos += 1; + skipWhitespace(); + nextStart = pos; + while(pos < cookiesString.length && notSpecialChar()){ + pos += 1; + } + if (pos < cookiesString.length && cookiesString.charAt(pos) === "=") { + cookiesSeparatorFound = true; + pos = nextStart; + cookiesStrings.push(cookiesString.substring(start, lastComma)); + start = pos; + } else { + pos = lastComma + 1; + } + } else { + pos += 1; + } + } + if (!cookiesSeparatorFound || pos >= cookiesString.length) { + cookiesStrings.push(cookiesString.substring(start, cookiesString.length)); + } + } + return cookiesStrings; +} +// src/request-cookies.ts +var RequestCookies = class { + constructor(requestHeaders){ + /** @internal */ this._parsed = /* @__PURE__ */ new Map(); + this._headers = requestHeaders; + const header = requestHeaders.get("cookie"); + if (header) { + const parsed = parseCookie(header); + for (const [name, value] of parsed){ + this._parsed.set(name, { + name, + value + }); + } + } + } + [Symbol.iterator]() { + return this._parsed[Symbol.iterator](); + } + /** + * The amount of cookies received from the client + */ get size() { + return this._parsed.size; + } + get(...args) { + const name = typeof args[0] === "string" ? args[0] : args[0].name; + return this._parsed.get(name); + } + getAll(...args) { + var _a; + const all = Array.from(this._parsed); + if (!args.length) { + return all.map(([_, value])=>value); + } + const name = typeof args[0] === "string" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name; + return all.filter(([n])=>n === name).map(([_, value])=>value); + } + has(name) { + return this._parsed.has(name); + } + set(...args) { + const [name, value] = args.length === 1 ? [ + args[0].name, + args[0].value + ] : args; + const map = this._parsed; + map.set(name, { + name, + value + }); + this._headers.set("cookie", Array.from(map).map(([_, value2])=>stringifyCookie(value2)).join("; ")); + return this; + } + /** + * Delete the cookies matching the passed name or names in the request. + */ delete(names) { + const map = this._parsed; + const result = !Array.isArray(names) ? map.delete(names) : names.map((name)=>map.delete(name)); + this._headers.set("cookie", Array.from(map).map(([_, value])=>stringifyCookie(value)).join("; ")); + return result; + } + /** + * Delete all the cookies in the cookies in the request. + */ clear() { + this.delete(Array.from(this._parsed.keys())); + return this; + } + /** + * Format the cookies in the request as a string for logging + */ [Symbol.for("edge-runtime.inspect.custom")]() { + return `RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`; + } + toString() { + return [ + ...this._parsed.values() + ].map((v)=>`${v.name}=${encodeURIComponent(v.value)}`).join("; "); + } +}; +// src/response-cookies.ts +var ResponseCookies = class { + constructor(responseHeaders){ + /** @internal */ this._parsed = /* @__PURE__ */ new Map(); + var _a, _b, _c; + this._headers = responseHeaders; + const setCookie = (_c = (_b = (_a = responseHeaders.getSetCookie) == null ? void 0 : _a.call(responseHeaders)) != null ? _b : responseHeaders.get("set-cookie")) != null ? _c : []; + const cookieStrings = Array.isArray(setCookie) ? setCookie : splitCookiesString(setCookie); + for (const cookieString of cookieStrings){ + const parsed = parseSetCookie(cookieString); + if (parsed) this._parsed.set(parsed.name, parsed); + } + } + /** + * {@link https://wicg.github.io/cookie-store/#CookieStore-get CookieStore#get} without the Promise. + */ get(...args) { + const key = typeof args[0] === "string" ? args[0] : args[0].name; + return this._parsed.get(key); + } + /** + * {@link https://wicg.github.io/cookie-store/#CookieStore-getAll CookieStore#getAll} without the Promise. + */ getAll(...args) { + var _a; + const all = Array.from(this._parsed.values()); + if (!args.length) { + return all; + } + const key = typeof args[0] === "string" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name; + return all.filter((c)=>c.name === key); + } + has(name) { + return this._parsed.has(name); + } + /** + * {@link https://wicg.github.io/cookie-store/#CookieStore-set CookieStore#set} without the Promise. + */ set(...args) { + const [name, value, cookie] = args.length === 1 ? [ + args[0].name, + args[0].value, + args[0] + ] : args; + const map = this._parsed; + map.set(name, normalizeCookie({ + name, + value, + ...cookie + })); + replace(map, this._headers); + return this; + } + /** + * {@link https://wicg.github.io/cookie-store/#CookieStore-delete CookieStore#delete} without the Promise. + */ delete(...args) { + const [name, options] = typeof args[0] === "string" ? [ + args[0] + ] : [ + args[0].name, + args[0] + ]; + return this.set({ + ...options, + name, + value: "", + expires: /* @__PURE__ */ new Date(0) + }); + } + [Symbol.for("edge-runtime.inspect.custom")]() { + return `ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`; + } + toString() { + return [ + ...this._parsed.values() + ].map(stringifyCookie).join("; "); + } +}; +function replace(bag, headers) { + headers.delete("set-cookie"); + for (const [, value] of bag){ + const serialized = stringifyCookie(value); + headers.append("set-cookie", serialized); + } +} +function normalizeCookie(cookie = { + name: "", + value: "" +}) { + if (typeof cookie.expires === "number") { + cookie.expires = new Date(cookie.expires); + } + if (cookie.maxAge) { + cookie.expires = new Date(Date.now() + cookie.maxAge * 1e3); + } + if (cookie.path === null || cookie.path === void 0) { + cookie.path = "/"; + } + return cookie; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + RequestCookies, + ResponseCookies, + parseCookie, + parseSetCookie, + stringifyCookie +}); +}), +"[project]/node_modules/next/dist/esm/build/output/log.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "bootstrap", + ()=>bootstrap, + "error", + ()=>error, + "errorOnce", + ()=>errorOnce, + "event", + ()=>event, + "info", + ()=>info, + "prefixes", + ()=>prefixes, + "ready", + ()=>ready, + "trace", + ()=>trace, + "wait", + ()=>wait, + "warn", + ()=>warn, + "warnOnce", + ()=>warnOnce +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/picocolors.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/lru-cache.js [app-route] (ecmascript)"); +; +; +const prefixes = { + wait: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["white"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["bold"])('○')), + error: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["red"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["bold"])('⨯')), + warn: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["yellow"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["bold"])('⚠')), + ready: '▲', + info: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["white"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["bold"])(' ')), + event: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["green"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["bold"])('✓')), + trace: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["magenta"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["bold"])('»')) +}; +const LOGGING_METHOD = { + log: 'log', + warn: 'warn', + error: 'error' +}; +function prefixedLog(prefixType, ...message) { + if ((message[0] === '' || message[0] === undefined) && message.length === 1) { + message.shift(); + } + const consoleMethod = prefixType in LOGGING_METHOD ? LOGGING_METHOD[prefixType] : 'log'; + const prefix = prefixes[prefixType]; + // If there's no message, don't print the prefix but a new line + if (message.length === 0) { + console[consoleMethod](''); + } else { + // Ensure if there's ANSI escape codes it's concatenated into one string. + // Chrome DevTool can only handle color if it's in one string. + if (message.length === 1 && typeof message[0] === 'string') { + console[consoleMethod](prefix + ' ' + message[0]); + } else { + console[consoleMethod](prefix, ...message); + } + } +} +function bootstrap(message) { + console.log(message); +} +function wait(...message) { + prefixedLog('wait', ...message); +} +function error(...message) { + prefixedLog('error', ...message); +} +function warn(...message) { + prefixedLog('warn', ...message); +} +function ready(...message) { + prefixedLog('ready', ...message); +} +function info(...message) { + prefixedLog('info', ...message); +} +function event(...message) { + prefixedLog('event', ...message); +} +function trace(...message) { + prefixedLog('trace', ...message); +} +const warnOnceCache = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["LRUCache"](10000, (value)=>value.length); +function warnOnce(...message) { + const key = message.join(' '); + if (!warnOnceCache.has(key)) { + warnOnceCache.set(key, key); + warn(...message); + } +} +const errorOnceCache = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["LRUCache"](10000, (value)=>value.length); +function errorOnce(...message) { + const key = message.join(' '); + if (!errorOnceCache.has(key)) { + errorOnceCache.set(key, key); + error(...message); + } +} +}), +"[project]/node_modules/next/dist/esm/build/templates/app-route.js { INNER_APP_ROUTE => \"[project]/src/app/enkey/route.ts [app-route] (ecmascript)\" } [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "handler", + ()=>handler, + "patchFetch", + ()=>patchFetch, + "routeModule", + ()=>routeModule, + "serverHooks", + ()=>serverHooks, + "workAsyncStorage", + ()=>workAsyncStorage, + "workUnitAsyncStorage", + ()=>workUnitAsyncStorage +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$modules$2f$app$2d$route$2f$module$2e$compiled$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/route-modules/app-route/module.compiled.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/route-kind.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$patch$2d$fetch$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/patch-fetch.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/request-meta.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$manifests$2d$singleton$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/manifests-singleton.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$node$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/base-http/node.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/next-request.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$instrumentation$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/instrumentation/utils.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/send-response.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/utils.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$cache$2d$control$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/cache-control.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/shared/lib/no-fallback-error.external.js [external] (next/dist/shared/lib/no-fallback-error.external.js, cjs)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$route$2d$cache$2d$key$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/route-cache-key.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/index.js [app-route] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/types.js [app-route] (ecmascript)"); +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +// We inject the nextConfigOutput here so that we can use them in the route +// module. +const nextConfigOutput = "standalone"; +const routeModule = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$modules$2f$app$2d$route$2f$module$2e$compiled$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["AppRouteRouteModule"]({ + definition: { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].APP_ROUTE, + page: "/enkey/route", + pathname: "/enkey", + filename: "route", + bundlePath: "" + }, + distDir: ("TURBOPACK compile-time value", ".next-dev/dev") || '', + relativeProjectDir: ("TURBOPACK compile-time value", "") || '', + resolvedPagePath: "[project]/src/app/enkey/route.ts", + nextConfigOutput, + // The lazy require factory ensures that: + // - In dev: devRequestTimingInternalsEnd is set before userland executes, + // correctly attributing module load time to application-code rather than + // framework internals. + // - In all modes: async modules (route files with top-level await) are + // handled correctly — require() returns a Promise for such modules, which + // ensureUserland() awaits before the first request is handled. + userland: ()=>__turbopack_context__.r("[project]/src/app/enkey/route.ts [app-route] (ecmascript)"), + // In Turbopack dev mode, also provide a synchronous per-request getter so + // server HMR updates are picked up without re-executing the entry chunk. + // Using require() (synchronous) avoids adding async overhead that would be + // incorrectly attributed to application-code time in devRequestTiming. + ...("TURBOPACK compile-time truthy", 1) ? { + getUserland: ()=>__turbopack_context__.r("[project]/src/app/enkey/route.ts [app-route] (ecmascript)") + } : "TURBOPACK unreachable" +}); +// Pull out the exports that we need to expose from the module. This should +// be eliminated when we've moved the other routes to the new format. These +// are used to hook into the route. +const { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule; +function patchFetch() { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$patch$2d$fetch$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["patchFetch"])({ + workAsyncStorage, + workUnitAsyncStorage + }); +} +; +async function handler(req, res, ctx) { + if (ctx.requestMeta) { + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["setRequestMeta"])(req, ctx.requestMeta); + } + if (routeModule.isDev) { + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["addRequestMeta"])(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint()); + } + let srcPage = "/enkey/route"; + // turbopack doesn't normalize `/index` in the page name + // so we need to to process dynamic routes properly + // TODO: fix turbopack providing differing value from webpack + if ("TURBOPACK compile-time truthy", 1) { + srcPage = srcPage.replace(/\/index$/, '') || '/'; + } else if (srcPage === '/index') { + // we always normalize /index specifically + srcPage = '/'; + } + const multiZoneDraftMode = ("TURBOPACK compile-time value", false); + const prepareResult = await routeModule.prepare(req, res, { + srcPage, + multiZoneDraftMode + }); + if (!prepareResult) { + res.statusCode = 400; + res.end('Bad Request'); + ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve()); + return null; + } + const { buildId, deploymentId, params, nextConfig, parsedUrl, isDraftMode, prerenderManifest, routerServerContext, isOnDemandRevalidate, revalidateOnlyGenerated, resolvedPathname, clientReferenceManifest, serverActionsManifest, previewProps } = prepareResult; + const normalizedSrcPage = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeAppPath"])(srcPage); + // Only this route's prerenders can establish ISR or admit generated params. + const isPrerendered = Boolean(prerenderManifest.routes[resolvedPathname]) && (routeModule.isDev || (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$route$2d$cache$2d$key$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isRouteCacheOwner"])(resolvedPathname, routeModule.cacheOwner, prerenderManifest.routes[resolvedPathname])); + let isIsr = Boolean(prerenderManifest.dynamicRoutes[normalizedSrcPage] || isPrerendered); + const render404 = async ()=>{ + // TODO: should route-module itself handle rendering the 404 + if (routerServerContext == null ? void 0 : routerServerContext.render404) { + await routerServerContext.render404(req, res, parsedUrl, false); + } else { + res.end('This page could not be found'); + } + return null; + }; + if (isIsr && !isDraftMode) { + const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage]; + if (prerenderInfo) { + if (prerenderInfo.fallback === false && !isPrerendered) { + if (nextConfig.adapterPath) { + return await render404(); + } + throw new __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js$2c$__cjs$29$__["NoFallbackError"](); + } + } + } + let cacheKey = null; + if (isIsr && !routeModule.isDev && !isDraftMode) { + cacheKey = resolvedPathname; + // ensure /index and / is normalized to one key + cacheKey = cacheKey === '/index' ? '/' : cacheKey; + } + // Before rendering (which initializes component tree modules), we have to + // set the reference manifests to our global store so Server Action's + // encryption util can access to them at the top level of the page module. + if (serverActionsManifest && clientReferenceManifest) { + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$manifests$2d$singleton$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["setManifestsSingleton"])({ + page: srcPage, + clientReferenceManifest, + serverActionsManifest + }); + } + const method = req.method || 'GET'; + const tracer = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])(); + const activeSpan = tracer.getActiveScopeSpan(); + const isWrappedByNextServer = Boolean(routerServerContext == null ? void 0 : routerServerContext.isWrappedByNextServer); + const isMinimalMode = Boolean((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'minimalMode')); + const incrementalCache = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'incrementalCache') || await routeModule.getIncrementalCache(req, nextConfig, previewProps, prerenderManifest, isMinimalMode); + incrementalCache == null ? void 0 : incrementalCache.resetRequestCache(); + globalThis.__incrementalCache = incrementalCache; + const context = { + params, + previewProps, + renderOpts: { + experimental: { + authInterrupts: Boolean(nextConfig.experimental.authInterrupts), + useCacheTimeout: nextConfig.experimental.useCacheTimeout, + durableUseCacheEntries: Boolean(nextConfig.experimental.durableUseCacheEntries) + }, + cacheComponents: Boolean(nextConfig.cacheComponents), + validationLevel: nextConfig.experimental.instantInsights.validationLevel, + isDraftMode, + incrementalCache, + hmrRefreshHash: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'hmrRefreshHash'), + cacheLifeProfiles: nextConfig.cacheLife, + staticPageGenerationTimeout: nextConfig.staticPageGenerationTimeout, + waitUntil: ctx.waitUntil, + onClose: (cb)=>{ + res.on('close', cb); + }, + onAfterTaskError: undefined + }, + sharedContext: { + buildId, + deploymentId + } + }; + const nodeNextReq = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$node$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NodeNextRequest"](req); + const nodeNextRes = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$node$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NodeNextResponse"](res); + const nextReq = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextRequestAdapter"].fromNodeNextRequest(nodeNextReq, (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["signalFromNodeResponse"])(res)); + const responseGenerator = async ({ previousCacheEntry })=>{ + try { + if (!isMinimalMode && isOnDemandRevalidate && revalidateOnlyGenerated && !previousCacheEntry) { + res.statusCode = 404; + // on-demand revalidate always sets this header + res.setHeader('x-nextjs-cache', 'REVALIDATED'); + res.end('This page could not be found'); + return null; + } + const response = cacheKey === null ? await routeModule.handle(nextReq, context) : await routeModule.prerender(nextReq, context); + req.fetchMetrics = context.renderOpts.fetchMetrics; + let pendingWaitUntil = context.renderOpts.pendingWaitUntil; + // Attempt using provided waitUntil if available + // if it's not we fallback to sendResponse's handling + if (pendingWaitUntil) { + if (ctx.waitUntil) { + ctx.waitUntil(pendingWaitUntil); + pendingWaitUntil = undefined; + } + } + const cacheTags = context.renderOpts.collectedTags; + // If the request is for a static response, we can cache it so long + // as it's not edge. + if (isIsr) { + const blob = await response.blob(); + // Copy the headers from the response. + const headers = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["toNodeOutgoingHttpHeaders"])(response.headers); + if (cacheTags) { + headers[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAGS_HEADER"]] = cacheTags; + } + if (!headers['content-type'] && blob.type) { + headers['content-type'] = blob.type; + } + const revalidate = typeof context.renderOpts.collectedRevalidate === 'undefined' || context.renderOpts.collectedRevalidate >= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"] ? false : context.renderOpts.collectedRevalidate; + const expire = typeof context.renderOpts.collectedExpire === 'undefined' || context.renderOpts.collectedExpire >= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"] ? // explicit `expire` (e.g. via `cacheLife`). This mirrors the + // build-time fallback in `build/index.ts` so cache entries + // and the response Cache-Control header agree on the route's + // effective expire. Routes that opt out of revalidation + // (`revalidate: false`) or that are dynamic (`revalidate: 0`) + // keep `expire: undefined`. + revalidate !== false && revalidate > 0 ? nextConfig.expireTime : undefined : context.renderOpts.collectedExpire; + // Create the cache entry for the response. + const cacheEntry = { + value: { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_ROUTE, + status: response.status, + body: Buffer.from(await blob.arrayBuffer()), + headers + }, + cacheControl: { + revalidate, + expire + } + }; + return cacheEntry; + } else { + // send response without caching if not ISR + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["sendResponse"])(nodeNextReq, nodeNextRes, response, pendingWaitUntil); + return null; + } + } catch (err) { + // if this is a background revalidate we need to report + // the request error here as it won't be bubbled + if (previousCacheEntry == null ? void 0 : previousCacheEntry.isStale) { + const silenceLog = false; + await routeModule.onRequestError(req, err, { + routerKind: 'App Router', + routePath: srcPage, + routeType: 'route', + revalidateReason: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$instrumentation$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRevalidateReason"])({ + isStaticGeneration: cacheKey !== null, + isOnDemandRevalidate + }) + }, silenceLog, routerServerContext); + } + throw err; + } + }; + const handleResponse = async (currentSpan, parentSpan)=>{ + try { + var _cacheEntry_value; + const cacheEntry = await routeModule.handleResponse({ + req, + nextConfig, + cacheKey, + routeKind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].APP_ROUTE, + isFallback: false, + previewProps, + prerenderManifest, + isRoutePPREnabled: false, + isOnDemandRevalidate, + revalidateOnlyGenerated, + responseGenerator, + waitUntil: ctx.waitUntil, + isMinimalMode + }); + if (cacheEntry !== null && 'error' in cacheEntry) { + throw cacheEntry.error; + } + // we don't create a cacheEntry for ISR + if (!isIsr) { + return; + } + if ((cacheEntry == null ? void 0 : (_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_ROUTE) { + var _cacheEntry_value1; + throw new Error(`Invariant: app-route received invalid cache entry ${cacheEntry == null ? void 0 : (_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`); + } + if (!isMinimalMode) { + res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT'); + } + // Draft mode should never be cached + if (isDraftMode) { + res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate'); + } + const headers = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["fromNodeOutgoingHttpHeaders"])(cacheEntry.value.headers); + if (!(isMinimalMode && isIsr)) { + headers.delete(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAGS_HEADER"]); + } + // If cache control is already set on the response we don't + // override it to allow users to customize it via next.config + if (cacheEntry.cacheControl && !res.getHeader('Cache-Control') && !headers.get('Cache-Control')) { + headers.set('Cache-Control', (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$cache$2d$control$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getCacheControlHeader"])(cacheEntry.cacheControl)); + } + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["sendResponse"])(nodeNextReq, nodeNextRes, new Response(cacheEntry.value.body, { + headers, + status: cacheEntry.value.status || 200 + })); + return; + } catch (err) { + if (!(err instanceof __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js$2c$__cjs$29$__["NoFallbackError"])) { + const silenceLog = false; + await routeModule.onRequestError(req, err, { + routerKind: 'App Router', + routePath: normalizedSrcPage, + routeType: 'route', + revalidateReason: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$instrumentation$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRevalidateReason"])({ + isStaticGeneration: cacheKey !== null, + isOnDemandRevalidate + }) + }, silenceLog, routerServerContext); + } + // rethrow so that we can handle serving error page + // If this is during static generation, throw the error again. + if (isIsr) throw err; + // Otherwise, send a 500 response unless the original response has + // already committed. In that case, preserve its status code for + // telemetry while still recording the failure and terminating a response + // that the failed pipeline left open. + if (res.headersSent) { + if (currentSpan) { + const error = err instanceof Error ? err : new Error('Unknown app route error'); + currentSpan.recordException(error); + currentSpan.setStatus({ + code: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SpanStatusCode"].ERROR, + message: error.message + }); + currentSpan.setAttribute('error.type', error.name); + } + if (!res.writableEnded && !res.destroyed) { + res.end(); + } + } else { + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["sendResponse"])(nodeNextReq, nodeNextRes, new Response(null, { + status: 500 + })); + } + return; + } finally{ + ; + (()=>{ + if (!currentSpan) { + return; + } + let statusCode = res.statusCode; + currentSpan.setAttributes({ + 'http.status_code': statusCode, + 'next.rsc': false + }); + if (statusCode && statusCode >= 500) { + // For 5xx status codes: SHOULD be set to 'Error' span status. + // x-ref: https://opentelemetry.io/docs/specs/semconv/http/http-spans/#status + currentSpan.setStatus({ + code: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SpanStatusCode"].ERROR + }); + // For span status 'Error', SHOULD set 'error.type' attribute. + currentSpan.setAttribute('error.type', statusCode.toString()); + } + const rootSpanAttributes = tracer.getRootSpanAttributes(); + // We were unable to get attributes, probably OTEL is not enabled + if (!rootSpanAttributes) { + return; + } + if (rootSpanAttributes.get('next.span_type') !== __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["BaseServerSpan"].handleRequest) { + console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`); + return; + } + const route = rootSpanAttributes.get('next.route') || normalizedSrcPage; + const name = `${method} ${route}`; + currentSpan.setAttributes({ + 'next.route': route, + 'http.route': route, + 'next.span_name': name + }); + currentSpan.updateName(name); + // Propagate http.route to the parent span if one exists (e.g. + // a platform-created HTTP span in adapter deployments). + if (parentSpan && parentSpan !== currentSpan) { + parentSpan.setAttribute('http.route', route); + parentSpan.updateName(name); + } + })(); + } + }; + // TODO: activeSpan code path is for when wrapped by + // next-server can be removed when this is no longer used + if (isWrappedByNextServer && activeSpan) { + await handleResponse(activeSpan, undefined); + } else { + let parentSpan = tracer.getActiveScopeSpan(); + await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["BaseServerSpan"].handleRequest, { + spanName: `${method} ${srcPage}`, + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SpanKind"].SERVER, + attributes: { + 'http.method': method, + 'http.target': req.url + } + }, (span)=>handleResponse(span, parentSpan)), undefined, !isWrappedByNextServer); + } +} +}), +"[project]/node_modules/next/dist/esm/client/components/app-router-headers.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ACTION_HEADER", + ()=>ACTION_HEADER, + "FLIGHT_HEADERS", + ()=>FLIGHT_HEADERS, + "NEXT_ACTION_NOT_FOUND_HEADER", + ()=>NEXT_ACTION_NOT_FOUND_HEADER, + "NEXT_ACTION_REVALIDATED_HEADER", + ()=>NEXT_ACTION_REVALIDATED_HEADER, + "NEXT_DID_POSTPONE_HEADER", + ()=>NEXT_DID_POSTPONE_HEADER, + "NEXT_HMR_REFRESH_HEADER", + ()=>NEXT_HMR_REFRESH_HEADER, + "NEXT_HTML_REQUEST_ID_HEADER", + ()=>NEXT_HTML_REQUEST_ID_HEADER, + "NEXT_INSTANT_TEST_COOKIE", + ()=>NEXT_INSTANT_TEST_COOKIE, + "NEXT_IS_PRERENDER_HEADER", + ()=>NEXT_IS_PRERENDER_HEADER, + "NEXT_REQUEST_ID_HEADER", + ()=>NEXT_REQUEST_ID_HEADER, + "NEXT_REWRITTEN_PATH_HEADER", + ()=>NEXT_REWRITTEN_PATH_HEADER, + "NEXT_REWRITTEN_QUERY_HEADER", + ()=>NEXT_REWRITTEN_QUERY_HEADER, + "NEXT_ROUTER_PREFETCH_HEADER", + ()=>NEXT_ROUTER_PREFETCH_HEADER, + "NEXT_ROUTER_SEGMENT_PREFETCH_HEADER", + ()=>NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, + "NEXT_ROUTER_STALE_TIME_HEADER", + ()=>NEXT_ROUTER_STALE_TIME_HEADER, + "NEXT_ROUTER_STATE_TREE_HEADER", + ()=>NEXT_ROUTER_STATE_TREE_HEADER, + "NEXT_RSC_UNION_QUERY", + ()=>NEXT_RSC_UNION_QUERY, + "NEXT_URL", + ()=>NEXT_URL, + "RSC_CONTENT_TYPE_HEADER", + ()=>RSC_CONTENT_TYPE_HEADER, + "RSC_HEADER", + ()=>RSC_HEADER +]); +const RSC_HEADER = 'rsc'; +const ACTION_HEADER = 'next-action'; +const NEXT_ROUTER_STATE_TREE_HEADER = 'next-router-state-tree'; +const NEXT_ROUTER_PREFETCH_HEADER = 'next-router-prefetch'; +const NEXT_ROUTER_SEGMENT_PREFETCH_HEADER = 'next-router-segment-prefetch'; +const NEXT_HMR_REFRESH_HEADER = 'next-hmr-refresh'; +const NEXT_URL = 'next-url'; +const RSC_CONTENT_TYPE_HEADER = 'text/x-component'; +const NEXT_INSTANT_TEST_COOKIE = 'next-instant-navigation-testing'; +const FLIGHT_HEADERS = [ + RSC_HEADER, + NEXT_ROUTER_STATE_TREE_HEADER, + NEXT_ROUTER_PREFETCH_HEADER, + NEXT_HMR_REFRESH_HEADER, + NEXT_ROUTER_SEGMENT_PREFETCH_HEADER +]; +const NEXT_RSC_UNION_QUERY = '_rsc'; +const NEXT_ROUTER_STALE_TIME_HEADER = 'x-nextjs-stale-time'; +const NEXT_DID_POSTPONE_HEADER = 'x-nextjs-postponed'; +const NEXT_REWRITTEN_PATH_HEADER = 'x-nextjs-rewritten-path'; +const NEXT_REWRITTEN_QUERY_HEADER = 'x-nextjs-rewritten-query'; +const NEXT_IS_PRERENDER_HEADER = 'x-nextjs-prerender'; +const NEXT_ACTION_NOT_FOUND_HEADER = 'x-nextjs-action-not-found'; +const NEXT_REQUEST_ID_HEADER = 'x-nextjs-request-id'; +const NEXT_HTML_REQUEST_ID_HEADER = 'x-nextjs-html-request-id'; +const NEXT_ACTION_REVALIDATED_HEADER = 'x-action-revalidated'; +}), +"[project]/node_modules/next/dist/esm/client/components/hooks-server-context.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "DynamicServerError", + ()=>DynamicServerError, + "isDynamicServerError", + ()=>isDynamicServerError +]); +const DYNAMIC_ERROR_CODE = 'DYNAMIC_SERVER_USAGE'; +class DynamicServerError extends Error { + constructor(description){ + super(`Dynamic server usage: ${description}`), this.description = description, this.digest = DYNAMIC_ERROR_CODE; + } +} +function isDynamicServerError(err) { + if (typeof err !== 'object' || err === null || !('digest' in err) || typeof err.digest !== 'string') { + return false; + } + return err.digest === DYNAMIC_ERROR_CODE; +} +}), +"[project]/node_modules/next/dist/esm/client/components/redirect-status-code.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "RedirectStatusCode", + ()=>RedirectStatusCode +]); +var RedirectStatusCode = /*#__PURE__*/ function(RedirectStatusCode) { + RedirectStatusCode[RedirectStatusCode["SeeOther"] = 303] = "SeeOther"; + RedirectStatusCode[RedirectStatusCode["TemporaryRedirect"] = 307] = "TemporaryRedirect"; + RedirectStatusCode[RedirectStatusCode["PermanentRedirect"] = 308] = "PermanentRedirect"; + return RedirectStatusCode; +}({}); +}), +"[project]/node_modules/next/dist/esm/client/components/static-generation-bailout.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "StaticGenBailoutError", + ()=>StaticGenBailoutError, + "isStaticGenBailoutError", + ()=>isStaticGenBailoutError +]); +const NEXT_STATIC_GEN_BAILOUT = 'NEXT_STATIC_GEN_BAILOUT'; +class StaticGenBailoutError extends Error { + constructor(...args){ + super(...args), this.code = NEXT_STATIC_GEN_BAILOUT; + } +} +function isStaticGenBailoutError(error) { + if (typeof error !== 'object' || error === null || !('code' in error)) { + return false; + } + return error.code === NEXT_STATIC_GEN_BAILOUT; +} +}), +"[project]/node_modules/next/dist/esm/lib/batcher.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "Batcher", + ()=>Batcher +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)"); +; +class Batcher { + constructor(cacheKeyFn, /** + * A function that will be called to schedule the wrapped function to be + * executed. This defaults to a function that will execute the function + * immediately. + */ schedulerFn = (fn)=>fn()){ + this.cacheKeyFn = cacheKeyFn; + this.schedulerFn = schedulerFn; + this.pending = new Map(); + } + static create(options) { + return new Batcher(options == null ? void 0 : options.cacheKeyFn, options == null ? void 0 : options.schedulerFn); + } + /** + * Wraps a function in a promise that will be resolved or rejected only once + * for a given key. This will allow multiple calls to the function to be + * made, but only one will be executed at a time. The result of the first + * call will be returned to all callers. + * + * @param key the key to use for the cache + * @param fn the function to wrap + * @returns a promise that resolves to the result of the function + */ async batch(key, fn) { + const cacheKey = this.cacheKeyFn ? await this.cacheKeyFn(key) : key; + if (cacheKey === null) { + return fn({ + resolve: (value)=>Promise.resolve(value), + key + }); + } + const pending = this.pending.get(cacheKey); + if (pending) return pending; + const { promise, resolve, reject } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + this.pending.set(cacheKey, promise); + this.schedulerFn(async ()=>{ + try { + const result = await fn({ + resolve, + key + }); + // Resolving a promise multiple times is a no-op, so we can safely + // resolve all pending promises with the same result. + resolve(result); + } catch (err) { + reject(err); + } finally{ + this.pending.delete(cacheKey); + } + }); + return promise; + } +} +}), +"[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ACTION_SUFFIX", + ()=>ACTION_SUFFIX, + "APP_DIR_ALIAS", + ()=>APP_DIR_ALIAS, + "CACHE_ONE_YEAR_SECONDS", + ()=>CACHE_ONE_YEAR_SECONDS, + "DOT_NEXT_ALIAS", + ()=>DOT_NEXT_ALIAS, + "ESLINT_DEFAULT_DIRS", + ()=>ESLINT_DEFAULT_DIRS, + "GSP_NO_RETURNED_VALUE", + ()=>GSP_NO_RETURNED_VALUE, + "GSSP_COMPONENT_MEMBER_ERROR", + ()=>GSSP_COMPONENT_MEMBER_ERROR, + "GSSP_NO_RETURNED_VALUE", + ()=>GSSP_NO_RETURNED_VALUE, + "HTML_CONTENT_TYPE_HEADER", + ()=>HTML_CONTENT_TYPE_HEADER, + "INFINITE_CACHE", + ()=>INFINITE_CACHE, + "INSTRUMENTATION_HOOK_FILENAME", + ()=>INSTRUMENTATION_HOOK_FILENAME, + "JSON_CONTENT_TYPE_HEADER", + ()=>JSON_CONTENT_TYPE_HEADER, + "MATCHED_PATH_HEADER", + ()=>MATCHED_PATH_HEADER, + "MIDDLEWARE_FILENAME", + ()=>MIDDLEWARE_FILENAME, + "MIDDLEWARE_LOCATION_REGEXP", + ()=>MIDDLEWARE_LOCATION_REGEXP, + "NEXT_BODY_SUFFIX", + ()=>NEXT_BODY_SUFFIX, + "NEXT_CACHE_IMPLICIT_TAG_ID", + ()=>NEXT_CACHE_IMPLICIT_TAG_ID, + "NEXT_CACHE_REVALIDATED_TAGS_HEADER", + ()=>NEXT_CACHE_REVALIDATED_TAGS_HEADER, + "NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER", + ()=>NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER, + "NEXT_CACHE_ROOT_PARAM_TAG_ID", + ()=>NEXT_CACHE_ROOT_PARAM_TAG_ID, + "NEXT_CACHE_SOFT_TAG_MAX_LENGTH", + ()=>NEXT_CACHE_SOFT_TAG_MAX_LENGTH, + "NEXT_CACHE_TAGS_HEADER", + ()=>NEXT_CACHE_TAGS_HEADER, + "NEXT_CACHE_TAG_MAX_ITEMS", + ()=>NEXT_CACHE_TAG_MAX_ITEMS, + "NEXT_CACHE_TAG_MAX_LENGTH", + ()=>NEXT_CACHE_TAG_MAX_LENGTH, + "NEXT_DATA_SUFFIX", + ()=>NEXT_DATA_SUFFIX, + "NEXT_INTERCEPTION_MARKER_PREFIX", + ()=>NEXT_INTERCEPTION_MARKER_PREFIX, + "NEXT_META_SUFFIX", + ()=>NEXT_META_SUFFIX, + "NEXT_NAV_DEPLOYMENT_ID_HEADER", + ()=>NEXT_NAV_DEPLOYMENT_ID_HEADER, + "NEXT_QUERY_PARAM_PREFIX", + ()=>NEXT_QUERY_PARAM_PREFIX, + "NEXT_RESUME_HEADER", + ()=>NEXT_RESUME_HEADER, + "NEXT_RESUME_STATE_LENGTH_HEADER", + ()=>NEXT_RESUME_STATE_LENGTH_HEADER, + "NON_STANDARD_NODE_ENV", + ()=>NON_STANDARD_NODE_ENV, + "PAGES_DIR_ALIAS", + ()=>PAGES_DIR_ALIAS, + "PRERENDER_REVALIDATE_HEADER", + ()=>PRERENDER_REVALIDATE_HEADER, + "PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER", + ()=>PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER, + "PROXY_FILENAME", + ()=>PROXY_FILENAME, + "PROXY_LOCATION_REGEXP", + ()=>PROXY_LOCATION_REGEXP, + "PUBLIC_DIR_MIDDLEWARE_CONFLICT", + ()=>PUBLIC_DIR_MIDDLEWARE_CONFLICT, + "ROOT_DIR_ALIAS", + ()=>ROOT_DIR_ALIAS, + "RSC_ACTION_CLIENT_WRAPPER_ALIAS", + ()=>RSC_ACTION_CLIENT_WRAPPER_ALIAS, + "RSC_ACTION_ENCRYPTION_ALIAS", + ()=>RSC_ACTION_ENCRYPTION_ALIAS, + "RSC_ACTION_PROXY_ALIAS", + ()=>RSC_ACTION_PROXY_ALIAS, + "RSC_ACTION_VALIDATE_ALIAS", + ()=>RSC_ACTION_VALIDATE_ALIAS, + "RSC_CACHE_WRAPPER_ALIAS", + ()=>RSC_CACHE_WRAPPER_ALIAS, + "RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS", + ()=>RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS, + "RSC_MOD_REF_PROXY_ALIAS", + ()=>RSC_MOD_REF_PROXY_ALIAS, + "RSC_SEGMENTS_DIR_SUFFIX", + ()=>RSC_SEGMENTS_DIR_SUFFIX, + "RSC_SEGMENT_SUFFIX", + ()=>RSC_SEGMENT_SUFFIX, + "RSC_SUFFIX", + ()=>RSC_SUFFIX, + "SERVER_PROPS_EXPORT_ERROR", + ()=>SERVER_PROPS_EXPORT_ERROR, + "SERVER_PROPS_GET_INIT_PROPS_CONFLICT", + ()=>SERVER_PROPS_GET_INIT_PROPS_CONFLICT, + "SERVER_PROPS_SSG_CONFLICT", + ()=>SERVER_PROPS_SSG_CONFLICT, + "SERVER_RUNTIME", + ()=>SERVER_RUNTIME, + "SSG_FALLBACK_EXPORT_ERROR", + ()=>SSG_FALLBACK_EXPORT_ERROR, + "SSG_GET_INITIAL_PROPS_CONFLICT", + ()=>SSG_GET_INITIAL_PROPS_CONFLICT, + "STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR", + ()=>STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR, + "TEXT_PLAIN_CONTENT_TYPE_HEADER", + ()=>TEXT_PLAIN_CONTENT_TYPE_HEADER, + "UNSTABLE_REVALIDATE_RENAME_ERROR", + ()=>UNSTABLE_REVALIDATE_RENAME_ERROR, + "WEBPACK_LAYERS", + ()=>WEBPACK_LAYERS, + "WEBPACK_RESOURCE_QUERIES", + ()=>WEBPACK_RESOURCE_QUERIES, + "WEB_SOCKET_MAX_RECONNECTIONS", + ()=>WEB_SOCKET_MAX_RECONNECTIONS +]); +const TEXT_PLAIN_CONTENT_TYPE_HEADER = 'text/plain'; +const HTML_CONTENT_TYPE_HEADER = 'text/html; charset=utf-8'; +const JSON_CONTENT_TYPE_HEADER = 'application/json; charset=utf-8'; +const NEXT_QUERY_PARAM_PREFIX = 'nxtP'; +const NEXT_INTERCEPTION_MARKER_PREFIX = 'nxtI'; +const MATCHED_PATH_HEADER = 'x-matched-path'; +const PRERENDER_REVALIDATE_HEADER = 'x-prerender-revalidate'; +const PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER = 'x-prerender-revalidate-if-generated'; +const RSC_SEGMENTS_DIR_SUFFIX = '.segments'; +const RSC_SEGMENT_SUFFIX = '.segment.rsc'; +const RSC_SUFFIX = '.rsc'; +const ACTION_SUFFIX = '.action'; +const NEXT_DATA_SUFFIX = '.json'; +const NEXT_META_SUFFIX = '.meta'; +const NEXT_BODY_SUFFIX = '.body'; +const NEXT_NAV_DEPLOYMENT_ID_HEADER = 'x-nextjs-deployment-id'; +const NEXT_CACHE_TAGS_HEADER = 'x-next-cache-tags'; +const NEXT_CACHE_REVALIDATED_TAGS_HEADER = 'x-next-revalidated-tags'; +const NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER = 'x-next-revalidate-tag-token'; +const NEXT_RESUME_HEADER = 'next-resume'; +const NEXT_RESUME_STATE_LENGTH_HEADER = 'x-next-resume-state-length'; +const NEXT_CACHE_TAG_MAX_ITEMS = 128; +const NEXT_CACHE_TAG_MAX_LENGTH = 256; +const NEXT_CACHE_SOFT_TAG_MAX_LENGTH = 1024; +const NEXT_CACHE_IMPLICIT_TAG_ID = '_N_T_'; +const NEXT_CACHE_ROOT_PARAM_TAG_ID = '_N_RP_'; +const CACHE_ONE_YEAR_SECONDS = 31536000; +const INFINITE_CACHE = 0xfffffffe; +const MIDDLEWARE_FILENAME = 'middleware'; +const MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}`; +const PROXY_FILENAME = 'proxy'; +const PROXY_LOCATION_REGEXP = `(?:src/)?${PROXY_FILENAME}`; +const INSTRUMENTATION_HOOK_FILENAME = 'instrumentation'; +const PAGES_DIR_ALIAS = 'private-next-pages'; +const DOT_NEXT_ALIAS = 'private-dot-next'; +const ROOT_DIR_ALIAS = 'private-next-root-dir'; +const APP_DIR_ALIAS = 'private-next-app-dir'; +const RSC_MOD_REF_PROXY_ALIAS = 'private-next-rsc-mod-ref-proxy'; +const RSC_ACTION_VALIDATE_ALIAS = 'private-next-rsc-action-validate'; +const RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-server-reference'; +const RSC_CACHE_WRAPPER_ALIAS = 'private-next-rsc-cache-wrapper'; +const RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS = 'private-next-rsc-track-dynamic-import'; +const RSC_ACTION_ENCRYPTION_ALIAS = 'private-next-rsc-action-encryption'; +const RSC_ACTION_CLIENT_WRAPPER_ALIAS = 'private-next-rsc-action-client-wrapper'; +const PUBLIC_DIR_MIDDLEWARE_CONFLICT = `You can not have a '_next' folder inside of your public folder. This conflicts with the internal '/_next' route. https://nextjs.org/docs/messages/public-next-folder-conflict`; +const SSG_GET_INITIAL_PROPS_CONFLICT = `You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps`; +const SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.`; +const SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps`; +const STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR = `can not have getInitialProps/getServerSideProps, https://nextjs.org/docs/messages/404-get-initial-props`; +const SERVER_PROPS_EXPORT_ERROR = `pages with \`getServerSideProps\` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export`; +const GSP_NO_RETURNED_VALUE = 'Your `getStaticProps` function did not return an object. Did you forget to add a `return`?'; +const GSSP_NO_RETURNED_VALUE = 'Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?'; +const UNSTABLE_REVALIDATE_RENAME_ERROR = 'The `unstable_revalidate` property is available for general use.\n' + 'Please use `revalidate` instead.'; +const GSSP_COMPONENT_MEMBER_ERROR = `can not be attached to a page's component and must be exported from the page. See more info here: https://nextjs.org/docs/messages/gssp-component-member`; +const NON_STANDARD_NODE_ENV = `You are using a non-standard "NODE_ENV" value in your environment. This creates inconsistencies in the project and is strongly advised against. Read more: https://nextjs.org/docs/messages/non-standard-node-env`; +const SSG_FALLBACK_EXPORT_ERROR = `Pages with \`fallback\` enabled in \`getStaticPaths\` can not be exported. See more info here: https://nextjs.org/docs/messages/ssg-fallback-true-export`; +const ESLINT_DEFAULT_DIRS = [ + 'app', + 'pages', + 'components', + 'lib', + 'src' +]; +const SERVER_RUNTIME = { + edge: 'edge', + experimentalEdge: 'experimental-edge', + nodejs: 'nodejs' +}; +const WEB_SOCKET_MAX_RECONNECTIONS = 12; +/** + * The names of the webpack layers. These layers are the primitives for the + * webpack chunks. + */ const WEBPACK_LAYERS_NAMES = { + /** + * The layer for the shared code between the client and server bundles. + */ shared: 'shared', + /** + * The layer for server-only runtime and picking up `react-server` export conditions. + * Including app router RSC pages and app router custom routes and metadata routes. + */ reactServerComponents: 'rsc', + /** + * Server Side Rendering layer for app (ssr). + */ serverSideRendering: 'ssr', + /** + * The browser client bundle layer for actions. + */ actionBrowser: 'action-browser', + /** + * The Node.js bundle layer for the API routes. + */ apiNode: 'api-node', + /** + * The Edge Lite bundle layer for the API routes. + */ apiEdge: 'api-edge', + /** + * The layer for the middleware code. + */ middleware: 'middleware', + /** + * The layer for the instrumentation hooks. + */ instrument: 'instrument', + /** + * The layer for assets on the edge. + */ edgeAsset: 'edge-asset', + /** + * The browser client bundle layer for App directory. + */ appPagesBrowser: 'app-pages-browser', + /** + * The browser client bundle layer for Pages directory. + */ pagesDirBrowser: 'pages-dir-browser', + /** + * The Edge Lite bundle layer for Pages directory. + */ pagesDirEdge: 'pages-dir-edge', + /** + * The Node.js bundle layer for Pages directory. + */ pagesDirNode: 'pages-dir-node' +}; +const WEBPACK_LAYERS = { + ...WEBPACK_LAYERS_NAMES, + GROUP: { + builtinReact: [ + WEBPACK_LAYERS_NAMES.reactServerComponents, + WEBPACK_LAYERS_NAMES.actionBrowser + ], + serverOnly: [ + WEBPACK_LAYERS_NAMES.reactServerComponents, + WEBPACK_LAYERS_NAMES.actionBrowser, + WEBPACK_LAYERS_NAMES.instrument, + WEBPACK_LAYERS_NAMES.middleware + ], + neutralTarget: [ + // pages api + WEBPACK_LAYERS_NAMES.apiNode, + WEBPACK_LAYERS_NAMES.apiEdge + ], + clientOnly: [ + WEBPACK_LAYERS_NAMES.serverSideRendering, + WEBPACK_LAYERS_NAMES.appPagesBrowser + ], + bundled: [ + WEBPACK_LAYERS_NAMES.reactServerComponents, + WEBPACK_LAYERS_NAMES.actionBrowser, + WEBPACK_LAYERS_NAMES.serverSideRendering, + WEBPACK_LAYERS_NAMES.appPagesBrowser, + WEBPACK_LAYERS_NAMES.shared, + WEBPACK_LAYERS_NAMES.instrument, + WEBPACK_LAYERS_NAMES.middleware + ], + appPages: [ + // app router pages and layouts + WEBPACK_LAYERS_NAMES.reactServerComponents, + WEBPACK_LAYERS_NAMES.serverSideRendering, + WEBPACK_LAYERS_NAMES.appPagesBrowser, + WEBPACK_LAYERS_NAMES.actionBrowser + ] + } +}; +const WEBPACK_RESOURCE_QUERIES = { + edgeSSREntry: '__next_edge_ssr_entry__', + metadata: '__next_metadata__', + metadataRoute: '__next_metadata_route__', + metadataImageMeta: '__next_metadata_image_meta__' +}; +; +}), +"[project]/node_modules/next/dist/esm/lib/framework/boundary-constants.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "METADATA_BOUNDARY_NAME", + ()=>METADATA_BOUNDARY_NAME, + "OUTLET_BOUNDARY_NAME", + ()=>OUTLET_BOUNDARY_NAME, + "ROOT_LAYOUT_BOUNDARY_NAME", + ()=>ROOT_LAYOUT_BOUNDARY_NAME, + "VIEWPORT_BOUNDARY_NAME", + ()=>VIEWPORT_BOUNDARY_NAME +]); +const METADATA_BOUNDARY_NAME = '__next_metadata_boundary__'; +const VIEWPORT_BOUNDARY_NAME = '__next_viewport_boundary__'; +const OUTLET_BOUNDARY_NAME = '__next_outlet_boundary__'; +const ROOT_LAYOUT_BOUNDARY_NAME = '__next_root_layout_boundary__'; +}), +"[project]/node_modules/next/dist/esm/lib/picocolors.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "bgBlack", + ()=>bgBlack, + "bgBlue", + ()=>bgBlue, + "bgCyan", + ()=>bgCyan, + "bgGreen", + ()=>bgGreen, + "bgMagenta", + ()=>bgMagenta, + "bgRed", + ()=>bgRed, + "bgWhite", + ()=>bgWhite, + "bgYellow", + ()=>bgYellow, + "black", + ()=>black, + "blue", + ()=>blue, + "bold", + ()=>bold, + "cyan", + ()=>cyan, + "dim", + ()=>dim, + "gray", + ()=>gray, + "green", + ()=>green, + "hidden", + ()=>hidden, + "inverse", + ()=>inverse, + "isColorSupported", + ()=>isColorSupported, + "italic", + ()=>italic, + "magenta", + ()=>magenta, + "purple", + ()=>purple, + "red", + ()=>red, + "reset", + ()=>reset, + "stdoutIsTerminal", + ()=>stdoutIsTerminal, + "strikethrough", + ()=>strikethrough, + "underline", + ()=>underline, + "white", + ()=>white, + "yellow", + ()=>yellow +]); +// ISC License +// Copyright (c) 2021 Alexey Raspopov, Kostiantyn Denysov, Anton Verinov +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// +// https://github.com/alexeyraspopov/picocolors/blob/b6261487e7b81aaab2440e397a356732cad9e342/picocolors.js#L1 +var _globalThis; +const { env, stdout } = ((_globalThis = globalThis) == null ? void 0 : _globalThis.process) ?? {}; +const enabled = env && !env.NO_COLOR && (env.FORCE_COLOR || (stdout == null ? void 0 : stdout.isTTY) && !env.CI && env.TERM !== 'dumb'); +const isColorSupported = Boolean(enabled); +const stdoutIsTerminal = Boolean(stdout == null ? void 0 : stdout.isTTY) || env.NEXT_PRIVATE_PROMPT_OUTPUT === '1'; +const replaceClose = (str, close, replace, index)=>{ + const start = str.substring(0, index) + replace; + const end = str.substring(index + close.length); + const nextIndex = end.indexOf(close); + return ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end; +}; +const formatter = (open, close, replace = open)=>{ + if (!enabled) return String; + return (input)=>{ + const string = '' + input; + const index = string.indexOf(close, open.length); + return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close; + }; +}; +const reset = enabled ? (s)=>`\x1b[0m${s}\x1b[0m` : String; +const bold = formatter('\x1b[1m', '\x1b[22m', '\x1b[22m\x1b[1m'); +const dim = formatter('\x1b[2m', '\x1b[22m', '\x1b[22m\x1b[2m'); +const italic = formatter('\x1b[3m', '\x1b[23m'); +const underline = formatter('\x1b[4m', '\x1b[24m'); +const inverse = formatter('\x1b[7m', '\x1b[27m'); +const hidden = formatter('\x1b[8m', '\x1b[28m'); +const strikethrough = formatter('\x1b[9m', '\x1b[29m'); +const black = formatter('\x1b[30m', '\x1b[39m'); +const red = formatter('\x1b[31m', '\x1b[39m'); +const green = formatter('\x1b[32m', '\x1b[39m'); +const yellow = formatter('\x1b[33m', '\x1b[39m'); +const blue = formatter('\x1b[34m', '\x1b[39m'); +const magenta = formatter('\x1b[35m', '\x1b[39m'); +const purple = formatter('\x1b[38;2;173;127;168m', '\x1b[39m'); +const cyan = formatter('\x1b[36m', '\x1b[39m'); +const white = formatter('\x1b[37m', '\x1b[39m'); +const gray = formatter('\x1b[90m', '\x1b[39m'); +const bgBlack = formatter('\x1b[40m', '\x1b[49m'); +const bgRed = formatter('\x1b[41m', '\x1b[49m'); +const bgGreen = formatter('\x1b[42m', '\x1b[49m'); +const bgYellow = formatter('\x1b[43m', '\x1b[49m'); +const bgBlue = formatter('\x1b[44m', '\x1b[49m'); +const bgMagenta = formatter('\x1b[45m', '\x1b[49m'); +const bgCyan = formatter('\x1b[46m', '\x1b[49m'); +const bgWhite = formatter('\x1b[47m', '\x1b[49m'); +}), +"[project]/node_modules/next/dist/esm/lib/scheduler.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Schedules a function to be called on the next tick after the other promises + * have been resolved. + * + * @param cb the function to schedule + */ __turbopack_context__.s([ + "atLeastOneTask", + ()=>atLeastOneTask, + "scheduleImmediate", + ()=>scheduleImmediate, + "scheduleOnNextTick", + ()=>scheduleOnNextTick, + "waitAtLeastOneReactRenderTask", + ()=>waitAtLeastOneReactRenderTask +]); +const scheduleOnNextTick = (cb)=>{ + // We use Promise.resolve().then() here so that the operation is scheduled at + // the end of the promise job queue, we then add it to the next process tick + // to ensure it's evaluated afterwards. + // + // This was inspired by the implementation of the DataLoader interface: https://github.com/graphql/dataloader/blob/d336bd15282664e0be4b4a657cb796f09bafbc6b/src/index.js#L213-L255 + // + Promise.resolve().then(()=>{ + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + process.nextTick(cb); + } + }); +}; +const scheduleImmediate = (cb)=>{ + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + setImmediate(cb); + } +}; +function atLeastOneTask() { + return new Promise((resolve)=>scheduleImmediate(resolve)); +} +function waitAtLeastOneReactRenderTask() { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + return new Promise((r)=>setImmediate(r)); + } +} +}), +"[project]/node_modules/next/dist/esm/server/api-utils/get-cookie-parser.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Parse cookies from the `headers` of request + * @param req request object + */ __turbopack_context__.s([ + "getCookieParser", + ()=>getCookieParser +]); +function getCookieParser(headers) { + return function parseCookie() { + const { cookie } = headers; + if (!cookie) { + return {}; + } + const { parse: parseCookieFn } = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/cookie/index.js [app-route] (ecmascript)"); + return parseCookieFn(Array.isArray(cookie) ? cookie.join('; ') : cookie); + }; +} +}), +"[project]/node_modules/next/dist/esm/server/api-utils/index.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ApiError", + ()=>ApiError, + "COOKIE_NAME_PRERENDER_BYPASS", + ()=>COOKIE_NAME_PRERENDER_BYPASS, + "COOKIE_NAME_PRERENDER_DATA", + ()=>COOKIE_NAME_PRERENDER_DATA, + "RESPONSE_LIMIT_DEFAULT", + ()=>RESPONSE_LIMIT_DEFAULT, + "SYMBOL_CLEARED_COOKIES", + ()=>SYMBOL_CLEARED_COOKIES, + "SYMBOL_PREVIEW_DATA", + ()=>SYMBOL_PREVIEW_DATA, + "checkIsOnDemandRevalidate", + ()=>checkIsOnDemandRevalidate, + "clearPreviewData", + ()=>clearPreviewData, + "redirect", + ()=>redirect, + "sendError", + ()=>sendError, + "sendStatusCode", + ()=>sendStatusCode, + "setLazyProp", + ()=>setLazyProp, + "wrapApiHandler", + ()=>wrapApiHandler +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$headers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/headers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)"); +; +; +; +; +function wrapApiHandler(page, handler) { + return (...args)=>{ + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])().setRootSpanAttribute('next.route', page); + // Call API route method + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])().trace(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NodeSpan"].runHandler, { + spanName: `executing api route (pages) ${page}` + }, ()=>handler(...args)); + }; +} +function sendStatusCode(res, statusCode) { + res.statusCode = statusCode; + return res; +} +function redirect(res, statusOrUrl, url) { + if (typeof statusOrUrl === 'string') { + url = statusOrUrl; + statusOrUrl = 307; + } + if (typeof statusOrUrl !== 'number' || typeof url !== 'string') { + throw new Error(`Invalid redirect arguments. Please use a single argument URL, e.g. res.redirect('/destination') or use a status code and URL, e.g. res.redirect(307, '/destination').`); + } + res.writeHead(statusOrUrl, { + Location: url + }); + res.write(url); + res.end(); + return res; +} +function checkIsOnDemandRevalidate(rawHeaders, previewProps) { + // Headers is a plain object for Node.js, Headers object in Edge runtime + if (typeof rawHeaders.get === 'function') { + const headers = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$headers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["HeadersAdapter"].from(rawHeaders); + const previewModeId = headers.get(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["PRERENDER_REVALIDATE_HEADER"]); + const isOnDemandRevalidate = previewModeId === previewProps.previewModeId; + const revalidateOnlyGenerated = headers.has(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER"]); + return { + isOnDemandRevalidate, + revalidateOnlyGenerated + }; + } + const headers = rawHeaders; + const previewModeId = headers[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["PRERENDER_REVALIDATE_HEADER"]]; + const isOnDemandRevalidate = previewModeId === previewProps.previewModeId; + const revalidateOnlyGenerated = headers.hasOwnProperty(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER"]); + return { + isOnDemandRevalidate, + revalidateOnlyGenerated + }; +} +const COOKIE_NAME_PRERENDER_BYPASS = `__prerender_bypass`; +const COOKIE_NAME_PRERENDER_DATA = `__next_preview_data`; +const RESPONSE_LIMIT_DEFAULT = 4 * 1024 * 1024; +const SYMBOL_PREVIEW_DATA = Symbol(COOKIE_NAME_PRERENDER_DATA); +const SYMBOL_CLEARED_COOKIES = Symbol(COOKIE_NAME_PRERENDER_BYPASS); +function clearPreviewData(res, options = {}) { + if (SYMBOL_CLEARED_COOKIES in res) { + return res; + } + const { serialize } = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/cookie/index.js [app-route] (ecmascript)"); + const previous = res.getHeader('Set-Cookie'); + res.setHeader(`Set-Cookie`, [ + ...typeof previous === 'string' ? [ + previous + ] : Array.isArray(previous) ? previous : [], + serialize(COOKIE_NAME_PRERENDER_BYPASS, '', { + // To delete a cookie, set `expires` to a date in the past: + // https://tools.ietf.org/html/rfc6265#section-4.1.1 + // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted. + expires: new Date(0), + httpOnly: true, + sameSite: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'lax', + secure: ("TURBOPACK compile-time value", "development") !== 'development', + path: '/', + ...options.path !== undefined ? { + path: options.path + } : undefined + }), + serialize(COOKIE_NAME_PRERENDER_DATA, '', { + // To delete a cookie, set `expires` to a date in the past: + // https://tools.ietf.org/html/rfc6265#section-4.1.1 + // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted. + expires: new Date(0), + httpOnly: true, + sameSite: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'lax', + secure: ("TURBOPACK compile-time value", "development") !== 'development', + path: '/', + ...options.path !== undefined ? { + path: options.path + } : undefined + }) + ]); + Object.defineProperty(res, SYMBOL_CLEARED_COOKIES, { + value: true, + enumerable: false + }); + return res; +} +class ApiError extends Error { + constructor(statusCode, message){ + super(message); + this.statusCode = statusCode; + } +} +function sendError(res, statusCode, message) { + res.statusCode = statusCode; + res.statusMessage = message; + res.end(message); +} +function setLazyProp({ req }, prop, getter) { + const opts = { + configurable: true, + enumerable: true + }; + const optsReset = { + ...opts, + writable: true + }; + Object.defineProperty(req, prop, { + ...opts, + get: ()=>{ + const value = getter(); + // we set the property on the object to avoid recalculating it + Object.defineProperty(req, prop, { + ...optsReset, + value + }); + return value; + }, + set: (value)=>{ + Object.defineProperty(req, prop, { + ...optsReset, + value + }); + } + }); +} +}), +"[project]/node_modules/next/dist/esm/server/app-render/async-local-storage.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "bindSnapshot", + ()=>bindSnapshot, + "createAsyncLocalStorage", + ()=>createAsyncLocalStorage, + "createSnapshot", + ()=>createSnapshot, + "getOrCreateGlobalAsyncLocalStorage", + ()=>getOrCreateGlobalAsyncLocalStorage +]); +const sharedAsyncLocalStorageNotAvailableError = new Error('Invariant: AsyncLocalStorage accessed in runtime where it is not available'); +class FakeAsyncLocalStorage { + disable() { + throw sharedAsyncLocalStorageNotAvailableError; + } + getStore() { + // This fake implementation of AsyncLocalStorage always returns `undefined`. + return undefined; + } + run() { + throw sharedAsyncLocalStorageNotAvailableError; + } + exit() { + throw sharedAsyncLocalStorageNotAvailableError; + } + enterWith() { + throw sharedAsyncLocalStorageNotAvailableError; + } + static bind(fn) { + return fn; + } +} +const maybeGlobalAsyncLocalStorage = typeof globalThis !== 'undefined' && globalThis.AsyncLocalStorage; +function createAsyncLocalStorage() { + if (maybeGlobalAsyncLocalStorage) { + return new maybeGlobalAsyncLocalStorage(); + } + return new FakeAsyncLocalStorage(); +} +function getOrCreateGlobalAsyncLocalStorage(name) { + const key = Symbol.for(`@next/${name}@${"16.4.1"}`); + const globalStore = globalThis; + return globalStore[key] ??= createAsyncLocalStorage(); +} +function bindSnapshot(fn) { + if (maybeGlobalAsyncLocalStorage) { + return maybeGlobalAsyncLocalStorage.bind(fn); + } + return FakeAsyncLocalStorage.bind(fn); +} +function createSnapshot() { + if (maybeGlobalAsyncLocalStorage) { + return maybeGlobalAsyncLocalStorage.snapshot(); + } + return function(fn, ...args) { + return fn(...args); + }; +} +}), +"[project]/node_modules/next/dist/esm/server/app-render/blocking-route-messages.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "createDynamicBodyError", + ()=>createDynamicBodyError, + "createDynamicBodyErrorInNavigation", + ()=>createDynamicBodyErrorInNavigation, + "createDynamicBodyErrorInStaticRoute", + ()=>createDynamicBodyErrorInStaticRoute, + "createDynamicMetadataError", + ()=>createDynamicMetadataError, + "createDynamicMetadataErrorInStaticRoute", + ()=>createDynamicMetadataErrorInStaticRoute, + "createDynamicOrRuntimeBodyError", + ()=>createDynamicOrRuntimeBodyError, + "createDynamicOrRuntimeMetadataError", + ()=>createDynamicOrRuntimeMetadataError, + "createDynamicOrRuntimeViewportError", + ()=>createDynamicOrRuntimeViewportError, + "createDynamicViewportError", + ()=>createDynamicViewportError, + "createDynamicViewportErrorInStaticRoute", + ()=>createDynamicViewportErrorInStaticRoute, + "createLinkBodyErrorInNavigation", + ()=>createLinkBodyErrorInNavigation, + "createLinkMetadataError", + ()=>createLinkMetadataError, + "createLinkViewportError", + ()=>createLinkViewportError, + "createNavigationBodyErrorInNavigation", + ()=>createNavigationBodyErrorInNavigation, + "createNavigationMetadataError", + ()=>createNavigationMetadataError, + "createNavigationViewportError", + ()=>createNavigationViewportError, + "createNonPrerenderableBodyErrorInStaticRoute", + ()=>createNonPrerenderableBodyErrorInStaticRoute, + "createNonPrerenderableMetadataErrorInStaticRoute", + ()=>createNonPrerenderableMetadataErrorInStaticRoute, + "createNonPrerenderableViewportErrorInStaticRoute", + ()=>createNonPrerenderableViewportErrorInStaticRoute, + "createPrefetchBodyErrorInNavigation", + ()=>createPrefetchBodyErrorInNavigation, + "createPrefetchMetadataError", + ()=>createPrefetchMetadataError, + "createPrefetchViewportError", + ()=>createPrefetchViewportError, + "createRuntimeBodyError", + ()=>createRuntimeBodyError, + "createRuntimeBodyErrorInNavigation", + ()=>createRuntimeBodyErrorInNavigation, + "createRuntimeBodyErrorInStaticRoute", + ()=>createRuntimeBodyErrorInStaticRoute, + "createRuntimeMetadataError", + ()=>createRuntimeMetadataError, + "createRuntimeMetadataErrorInStaticRoute", + ()=>createRuntimeMetadataErrorInStaticRoute, + "createRuntimeViewportError", + ()=>createRuntimeViewportError, + "createRuntimeViewportErrorInStaticRoute", + ()=>createRuntimeViewportErrorInStaticRoute, + "logBuildDebugHint", + ()=>logBuildDebugHint +]); +function createRuntimeBodyError(route) { + return new Error(`Route "${route}": Next.js encountered runtime data during prerendering.\n\n` + `\`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` accessed outside of \`\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-runtime`); +} +function createDynamicBodyError(route) { + return new Error(`Route "${route}": Next.js encountered uncached data during prerendering.\n\n` + `\`fetch(...)\` or \`connection()\` accessed outside of \`\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [cache] Cache the data access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`); +} +function createRuntimeBodyErrorInNavigation(route) { + return new Error(`Route "${route}": Next.js encountered runtime data during prerendering or a navigation.\n\n` + `\`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` accessed outside of \`\` prevents the route from being prerendered or the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-runtime`); +} +function createLinkBodyErrorInNavigation(route) { + return new Error(`Route "${route}": Next.js encountered URL data during prerendering or a navigation.\n\n` + `\`params\` or \`searchParams\` accessed outside of \`\` may prevent the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-shell-url-data`); +} +function createNavigationBodyErrorInNavigation(route) { + return new Error(`Route "${route}": Next.js encountered \`navigation()\` during prerendering or a navigation.\n\n` + `\`navigation()\` called outside of \`\` may prevent the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the component that calls \`navigation()\`\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage`); +} +function createPrefetchBodyErrorInNavigation(route) { + return new Error(`Route "${route}": Next.js encountered \`prefetch()\` during prerendering or a navigation.\n\n` + `\`prefetch()\` called outside of \`\` may prevent the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the component that calls \`prefetch()\`\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage`); +} +function createDynamicBodyErrorInNavigation(route) { + return new Error(`Route "${route}": Next.js encountered uncached data during prerendering or a navigation.\n\n` + `\`fetch(...)\` or \`connection()\` accessed outside of \`\` prevents the route from being prerendered or the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [cache] Cache the data access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`); +} +function createDynamicOrRuntimeBodyError(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data during prerendering.\n\n` + `\`fetch(...)\`, \`cookies()\`, \`headers()\`, \`params\`, \`searchParams\`, or \`connection()\` accessed outside of \`\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [cache] For uncached data (\`fetch\`, database calls): cache the access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`); +} +function createLinkMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered URL data in \`generateMetadata()\`.\n\n` + `This route's metadata is blocked, but the rest of its content can be prefetched. \`params\` or \`searchParams\` accessed in \`generateMetadata()\` prevent it from being prefetched.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static metadata export instead of \`generateMetadata()\`\n` + ` - [dynamic] Render a marker component that calls \`await connection()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`); +} +function createRuntimeMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered runtime data in \`generateMetadata()\`.\n\n` + `This route's metadata is blocked, but the rest of its content can be prerendered. \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` accessed in \`generateMetadata()\` cause it to run dynamically.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static metadata export instead of \`generateMetadata()\`\n` + ` - [dynamic] Render a marker component that calls \`await connection()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`); +} +function createNavigationMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered \`navigation()\` in \`generateMetadata()\`.\n\n` + `Metadata can already stream without blocking the route's UI, so delaying it until navigation may be unintentional.\n\n` + `Ways to fix this:\n` + ` - [remove] Remove \`navigation()\` from \`generateMetadata()\`\n` + ` - [mark] Render a marker component that calls \`await navigation()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-metadata`); +} +function createPrefetchMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered \`prefetch()\` in \`generateMetadata()\`.\n\n` + `Metadata can already stream without blocking the route's UI, so delaying it until a per-link prefetch or navigation may be unintentional.\n\n` + `Ways to fix this:\n` + ` - [remove] Remove \`prefetch()\` from \`generateMetadata()\`\n` + ` - [mark] Render a marker component that calls \`await prefetch()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-metadata`); +} +function createDynamicMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered uncached data in \`generateMetadata()\`.\n\n` + `This route's metadata is blocked, but the rest of its content can be prerendered. \`fetch(...)\` or \`connection()\` accessed in \`generateMetadata()\` cause it to run dynamically.\n\n` + `Ways to fix this:\n` + ` - [cache] Cache the metadata with \`"use cache"\` in \`generateMetadata()\` (does not apply to \`connection()\`)\n` + ` - [dynamic] Render a marker component that calls \`await connection()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-dynamic`); +} +function createLinkViewportError(route) { + return new Error(`Route "${route}": Next.js encountered URL data in \`generateViewport()\`.\n\n` + `\`params\` or \`searchParams\` in \`generateViewport()\` prevents the page from being prerendered, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static viewport export instead of \`generateViewport()\`\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`); +} +function createRuntimeViewportError(route) { + return new Error(`Route "${route}": Next.js encountered runtime data in \`generateViewport()\`.\n\n` + `\`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` in \`generateViewport()\` prevents the page from being prerendered, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static viewport export instead of \`generateViewport()\`\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`); +} +function createNavigationViewportError(route) { + return new Error(`Route "${route}": Next.js encountered \`navigation()\` in \`generateViewport()\`.\n\n` + `This prevents Next.js from creating the App Shell, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [remove] Remove \`navigation()\` from \`generateViewport()\`\n` + ` - [ignore] Set \`export const instant = false\` to disable validation for this segment\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-viewport`); +} +function createPrefetchViewportError(route) { + return new Error(`Route "${route}": Next.js encountered \`prefetch()\` in \`generateViewport()\`.\n\n` + `This prevents Next.js from creating the App Shell, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [remove] Remove \`prefetch()\` from \`generateViewport()\`\n` + ` - [ignore] Set \`export const instant = false\` to disable validation for this segment\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-viewport`); +} +function createDynamicViewportError(route) { + return new Error(`Route "${route}": Next.js encountered uncached data in \`generateViewport()\`.\n\n` + `\`fetch(...)\` or \`connection()\` in \`generateViewport()\` prevents the page from being prerendered, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [cache] Cache the viewport data with \`"use cache"\` in \`generateViewport()\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-dynamic`); +} +function createDynamicOrRuntimeViewportError(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data in \`generateViewport()\`.\n\n` + `This prevents the page from being prerendered, leading to a slower user experience. Unlike metadata, viewport cannot be streamed behind \`\` because it affects the initial page load.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static viewport export instead of \`generateViewport()\`\n` + ` - [cache] For uncached data (\`fetch\`, database calls): cache the viewport with \`"use cache"\` in \`generateViewport()\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`); +} +function createDynamicOrRuntimeMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data in \`generateMetadata()\`.\n\n` + `This route's metadata is blocked, but the rest of its content can be prerendered.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static metadata export instead of \`generateMetadata()\`\n` + ` - [cache] Cache the metadata with \`"use cache"\` in \`generateMetadata()\` (does not apply to \`connection()\`)\n` + ` - [dynamic] Render a marker component that calls \`await connection()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`); +} +function createRuntimeBodyErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered runtime data on a route that must be fully static.\n\n` + `This route is configured to be fully static, but runtime data from \`cookies()\`, \`headers()\`, \`params\`, \`searchParams\`, or a short-lived cache requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [remove] Remove the data access\n` + ` - [client] Read the data on the client\n\n` + `Learn more: https://nextjs.org/docs/messages/static-route-runtime`); +} +function createDynamicBodyErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached data on a route that must be fully static.\n\n` + `This route is configured to be fully static, but an uncached \`fetch(...)\`, database call, or \`connection()\` requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] Cache the data access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [remove] Remove the data access\n` + ` - [client] Read the data on the client\n\n` + `Learn more: https://nextjs.org/docs/messages/static-route-dynamic`); +} +function createNonPrerenderableBodyErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data on a route that must be fully static.\n\n` + `This route is configured to be fully static, but some data requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] For uncached data (\`fetch\`, database calls): cache the access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [remove] Remove the data access\n` + ` - [client] Read the data on the client\n\n` + `Learn more: https://nextjs.org/docs/messages/static-route-dynamic`); +} +function createRuntimeMetadataErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered runtime data in \`generateMetadata()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but runtime data from \`cookies()\`, \`headers()\`, \`params\`, \`searchParams\`, or a short-lived cache requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [static] Replace the dynamic data used by \`generateMetadata()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-metadata-runtime`); +} +function createDynamicMetadataErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached data in \`generateMetadata()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but an uncached \`fetch(...)\`, database call, or \`connection()\` requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] Cache the data used by \`generateMetadata()\` with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [static] Replace the dynamic data used by \`generateMetadata()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-metadata-dynamic`); +} +function createNonPrerenderableMetadataErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data in \`generateMetadata()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but some data requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] For uncached data: cache the data used by \`generateMetadata()\` with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [static] Replace the dynamic data used by \`generateMetadata()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-metadata-dynamic`); +} +function createRuntimeViewportErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered runtime data in \`generateViewport()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but runtime data from \`cookies()\`, \`headers()\`, \`params\`, \`searchParams\`, or a short-lived cache requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [static] Replace the dynamic data used by \`generateViewport()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-viewport-runtime`); +} +function createDynamicViewportErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached data in \`generateViewport()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but an uncached \`fetch(...)\`, database call, or \`connection()\` requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] Cache the data used by \`generateViewport()\` with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [static] Replace the dynamic data used by \`generateViewport()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-viewport-dynamic`); +} +function createNonPrerenderableViewportErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data in \`generateViewport()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but some data requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] For uncached data: cache the data used by \`generateViewport()\` with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [static] Replace the dynamic data used by \`generateViewport()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-viewport-dynamic`); +} +function logBuildDebugHint(route) { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; +} +}), +"[project]/node_modules/next/dist/esm/server/app-render/dynamic-rendering.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "DynamicHoleKind", + ()=>DynamicHoleKind, + "PreludeState", + ()=>PreludeState, + "abortAndThrowOnSynchronousRequestDataAccess", + ()=>abortAndThrowOnSynchronousRequestDataAccess, + "abortOnSynchronousPlatformIOAccess", + ()=>abortOnSynchronousPlatformIOAccess, + "accessedDynamicData", + ()=>accessedDynamicData, + "annotateDynamicAccess", + ()=>annotateDynamicAccess, + "consumeDynamicAccess", + ()=>consumeDynamicAccess, + "createDynamicTrackingState", + ()=>createDynamicTrackingState, + "createDynamicValidationState", + ()=>createDynamicValidationState, + "createHangingInputAbortSignal", + ()=>createHangingInputAbortSignal, + "createInstantValidationState", + ()=>createInstantValidationState, + "formatDynamicAPIAccesses", + ()=>formatDynamicAPIAccesses, + "getDisallowedReasonsInStaticRoute", + ()=>getDisallowedReasonsInStaticRoute, + "getFirstDynamicReason", + ()=>getFirstDynamicReason, + "getNavigationDisallowedDynamicReasons", + ()=>getNavigationDisallowedDynamicReasons, + "getStaticShellDisallowedDynamicReasons", + ()=>getStaticShellDisallowedDynamicReasons, + "isPrerenderInterruptedError", + ()=>isPrerenderInterruptedError, + "logDisallowedDynamicError", + ()=>logDisallowedDynamicError, + "markCurrentScopeAsDynamic", + ()=>markCurrentScopeAsDynamic, + "throwIfDisallowedDynamic", + ()=>throwIfDisallowedDynamic, + "throwIfDisallowedDynamicInStaticRoute", + ()=>throwIfDisallowedDynamicInStaticRoute, + "throwIfSyncIOUsed", + ()=>throwIfSyncIOUsed, + "throwToInterruptStaticGeneration", + ()=>throwToInterruptStaticGeneration, + "trackAllowedDynamicAccess", + ()=>trackAllowedDynamicAccess, + "trackDynamicAccessInStaticRoute", + ()=>trackDynamicAccessInStaticRoute, + "trackDynamicDataInDynamicRender", + ()=>trackDynamicDataInDynamicRender, + "trackDynamicHoleInNavigation", + ()=>trackDynamicHoleInNavigation, + "trackDynamicHoleInStaticShell", + ()=>trackDynamicHoleInStaticShell, + "trackThrownErrorInNavigation", + ()=>trackThrownErrorInNavigation +]); +/** + * The functions provided by this module are used to communicate certain properties + * about the currently running code so that Next.js can make decisions on how to handle + * the current execution in different rendering modes such as pre-rendering, resuming, and SSR. + * + * Today Next.js treats all code as potentially static. Certain APIs may only make sense when dynamically rendering. + * Traditionally this meant deopting the entire render to dynamic however with PPR we can now deopt parts + * of a React tree as dynamic while still keeping other parts static. There are really two different kinds of + * Dynamic indications. + * + * The first is simply an intention to be dynamic. unstable_noStore is an example of this where + * the currently executing code simply declares that the current scope is dynamic but if you use it + * inside unstable_cache it can still be cached. This type of indication can be removed if we ever + * make the default dynamic to begin with because the only way you would ever be static is inside + * a cache scope which this indication does not affect. + * + * The second is an indication that a dynamic data source was read. This is a stronger form of dynamic + * because it means that it is inappropriate to cache this at all. using a dynamic data source inside + * unstable_cache should error. If you want to use some dynamic data inside unstable_cache you should + * read that data outside the cache and pass it in as an argument to the cached function. + */ // Once postpone is in stable we should switch to importing the postpone export directly +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$hooks$2d$server$2d$context$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/hooks-server-context.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/static-generation-bailout.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/dynamic-rendering-utils.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$framework$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/framework/boundary-constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/scheduler.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/blocking-route-messages.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/instant-validation/boundary-constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$tracking$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/instant-validation/boundary-tracking.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$instant$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/instant-messages.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$lazy$2d$dynamic$2f$react$2d$browser$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/lazy-dynamic/react-browser-bailout.js [app-route] (ecmascript)"); +; +; +; +; +; +; +; +; +; +; +; +; +; +function createDynamicTrackingState(isDebugDynamicAccesses) { + return { + isDebugDynamicAccesses, + dynamicAccesses: [], + syncDynamicErrorWithStack: null, + syncDynamicErrorWithStackPostMicrotask: false + }; +} +function createDynamicValidationState() { + return { + hasSuspenseAboveBody: false, + hasDynamicMetadata: false, + dynamicMetadata: null, + hasDynamicViewport: false, + hasAllowedDynamic: false, + dynamicErrors: [] + }; +} +function getPendingClientSyncDynamicError(clientDynamic) { + return clientDynamic.syncDynamicErrorWithStackPostMicrotask ? null : clientDynamic.syncDynamicErrorWithStack; +} +function getFirstDynamicReason(trackingState) { + var _trackingState_dynamicAccesses_; + return (_trackingState_dynamicAccesses_ = trackingState.dynamicAccesses[0]) == null ? void 0 : _trackingState_dynamicAccesses_.expression; +} +function markCurrentScopeAsDynamic(store, workUnitStore, expression) { + if (workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + case 'unstable-cache': + // Inside cache scopes, marking a scope as dynamic has no effect, + // because the outer cache scope creates a cache boundary. This is + // subtly different from reading a dynamic data source, which is + // forbidden inside a cache scope. + return; + case 'private-cache': + // A private cache scope is already dynamic by definition. + return; + case 'prerender-legacy': + case 'request': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + // If we're forcing dynamic rendering or we're forcing static rendering, we + // don't need to do anything here because the entire page is already dynamic + // or it's static and it should not throw or postpone here. + if (store.forceDynamic || store.forceStatic) return; + if (store.dynamicShouldError) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"](`Route ${store.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`); + } + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender-legacy': + workUnitStore.revalidate = 0; + // We aren't prerendering, but we are generating a static page. We need + // to bail out of static generation. + const err = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$hooks$2d$server$2d$context$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["DynamicServerError"](`Route ${store.route} couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`); + store.dynamicUsageDescription = expression; + store.dynamicUsageStack = err.stack; + throw err; + case 'request': + markRequestStoreAsDynamic(workUnitStore); + break; + case 'build-time-generator': + break; + default: + workUnitStore; + } + } +} +function throwToInterruptStaticGeneration(expression, store, prerenderStore) { + // We aren't prerendering but we are generating a static page. We need to bail out of static generation + const err = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$hooks$2d$server$2d$context$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["DynamicServerError"](`Route ${store.route} couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`); + prerenderStore.revalidate = 0; + store.dynamicUsageDescription = expression; + store.dynamicUsageStack = err.stack; + throw err; +} +function trackDynamicDataInDynamicRender(workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + case 'unstable-cache': + // Inside cache scopes, marking a scope as dynamic has no effect, + // because the outer cache scope creates a cache boundary. This is + // subtly different from reading a dynamic data source, which is + // forbidden inside a cache scope. + return; + case 'private-cache': + // A private cache scope is already dynamic by definition. + return; + case 'prerender': + case 'prerender-runtime': + case 'prerender-legacy': + case 'prerender-client': + case 'validation-client': + case 'build-time-generator': + break; + case 'request': + markRequestStoreAsDynamic(workUnitStore); + break; + default: + workUnitStore; + } +} +function markRequestStoreAsDynamic(requestStore) { + if (("TURBOPACK compile-time value", "1") && requestStore.phase === 'render') { + requestStore.usedDynamic = true; + } +} +function abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore) { + const reason = `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`; + const error = createPrerenderInterruptedError(reason); + prerenderStore.controller.abort(error); + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking) { + dynamicTracking.dynamicAccesses.push({ + // When we aren't debugging, we don't need to create another error for the + // stack trace. + stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined, + expression + }); + } +} +function abortOnSynchronousPlatformIOAccess(route, expression, errorWithStack, prerenderStore) { + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking && dynamicTracking.syncDynamicErrorWithStack === null) { + dynamicTracking.syncDynamicErrorWithStack = errorWithStack; + // React completes the task that is currently rendering before scheduled + // abort cleanup. Client tracking can attribute the sync IO only during + // that current task; server tracking keeps the error regardless. + queueMicrotask(()=>{ + dynamicTracking.syncDynamicErrorWithStackPostMicrotask = true; + }); + } + abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore); +} +function abortAndThrowOnSynchronousRequestDataAccess(route, expression, errorWithStack, prerenderStore) { + const prerenderSignal = prerenderStore.controller.signal; + if (prerenderSignal.aborted === false) { + // TODO it would be better to move this aborted check into the callsite so we can avoid making + // the error object when it isn't relevant to the aborting of the prerender however + // since we need the throw semantics regardless of whether we abort it is easier to land + // this way. See how this was handled with `abortOnSynchronousPlatformIOAccess` for a closer + // to ideal implementation + abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore); + // Preserve the exact server-side dynamic access for final validation after + // interrupting this render. + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking) { + if (dynamicTracking.syncDynamicErrorWithStack === null) { + dynamicTracking.syncDynamicErrorWithStack = errorWithStack; + } + } + } + throw createPrerenderInterruptedError(`Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`); +} +const NEXT_PRERENDER_INTERRUPTED = 'NEXT_PRERENDER_INTERRUPTED'; +function createPrerenderInterruptedError(message) { + const error = new Error(message); + error.digest = NEXT_PRERENDER_INTERRUPTED; + return error; +} +function isPrerenderInterruptedError(error) { + return typeof error === 'object' && error !== null && error.digest === NEXT_PRERENDER_INTERRUPTED && 'name' in error && 'message' in error && error instanceof Error; +} +function accessedDynamicData(dynamicAccesses) { + return dynamicAccesses.length > 0; +} +function consumeDynamicAccess(serverDynamic, clientDynamic) { + // We mutate because we only call this once we are no longer writing + // to the dynamicTrackingState and it's more efficient than creating a new + // array. + serverDynamic.dynamicAccesses.push(...clientDynamic.dynamicAccesses); + return serverDynamic.dynamicAccesses; +} +function formatDynamicAPIAccesses(dynamicAccesses) { + return dynamicAccesses.filter((access)=>typeof access.stack === 'string' && access.stack.length > 0).map(({ expression, stack })=>{ + stack = stack.split('\n') // Remove the "Error: " prefix from the first line of the stack trace as + // well as the first 4 lines of the stack trace which is the distance + // from the user code and the `new Error().stack` call. + .slice(4).filter((line)=>{ + // Exclude Next.js internals from the stack trace. + if (line.includes('node_modules/next/')) { + return false; + } + // Exclude anonymous functions from the stack trace. + if (line.includes(' ()')) { + return false; + } + // Exclude Node.js internals from the stack trace. + if (line.includes(' (node:')) { + return false; + } + return true; + }).join('\n'); + return `Dynamic API Usage Debug - ${expression}:\n${stack}`; + }); +} +function createHangingInputAbortSignal(workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + const controller = new AbortController(); + if (workUnitStore.cacheSignal) { + // If we have a cacheSignal it means we're in a prospective render. If + // the input we're waiting on is coming from another cache, we do want + // to wait for it so that we can resolve this cache entry too. + workUnitStore.cacheSignal.inputReady().then(()=>{ + controller.abort(); + }); + } else { + // Otherwise we're in the final render and we should already have all + // our caches filled. + // If the prerender uses stages, we have wait until the final stage. + // if an input didn't resolve at that point, then we can assume it never will. + // + // We might still be waiting on some microtasks so we + // wait one tick before giving up. When we give up, we still want to + // render the content of this cache as deeply as we can so that we can + // suspend as deeply as possible in the tree or not at all if we don't + // end up waiting for the input. + const stagedRendering = (0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["getStagedRenderingController"])(workUnitStore); + if (stagedRendering && stagedRendering.finalStage !== null) { + stagedRendering.waitForStage(stagedRendering.finalStage).then(()=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["scheduleOnNextTick"])(()=>controller.abort()), noop); + } else { + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["scheduleOnNextTick"])(()=>controller.abort()); + } + } + return controller.signal; + case 'prerender-client': + case 'validation-client': + case 'prerender-legacy': + case 'request': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + return undefined; + default: + workUnitStore; + } +} +function noop() {} +function annotateDynamicAccess(expression, prerenderStore) { + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking) { + dynamicTracking.dynamicAccesses.push({ + stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined, + expression + }); + } +} +const hasSuspenseRegex = /\n\s+at Suspense \(\)/; +// Common implicit body tags that React will treat as body when placed directly in html +const bodyAndImplicitTags = 'body|div|main|section|article|aside|header|footer|nav|form|p|span|h1|h2|h3|h4|h5|h6'; +// Detects when RootLayoutBoundary (our framework marker component) appears +// after Suspense in the component stack, indicating the root layout is wrapped +// within a Suspense boundary. Ensures no body/html/implicit-body components are in between. +// +// Example matches: +// at Suspense () +// at __next_root_layout_boundary__ () +// +// Or with other components in between (but not body/html/implicit-body): +// at Suspense () +// at SomeComponent () +// at __next_root_layout_boundary__ () +const hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex = new RegExp(`\\n\\s+at Suspense \\(\\)(?:(?!\\n\\s+at (?:${bodyAndImplicitTags}) \\(\\))[\\s\\S])*?\\n\\s+at ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$framework$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ROOT_LAYOUT_BOUNDARY_NAME"]} \\([^\\n]*\\)`); +const hasMetadataRegex = new RegExp(`\\n\\s+at ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$framework$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["METADATA_BOUNDARY_NAME"]}[\\n\\s]`); +const hasViewportRegex = new RegExp(`\\n\\s+at ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$framework$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["VIEWPORT_BOUNDARY_NAME"]}[\\n\\s]`); +const hasOutletRegex = new RegExp(`\\n\\s+at ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$framework$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["OUTLET_BOUNDARY_NAME"]}[\\n\\s]`); +const hasInstantValidationBoundaryRegex = new RegExp(`\\n\\s+at ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INSTANT_VALIDATION_BOUNDARY_NAME"]}[\\n\\s]`); +const slotMarkerRegex = new RegExp(`\\n\\s+at ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INSTANT_SLOT_MARKER_PREFIX"]}(\\d+)${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INSTANT_SLOT_MARKER_SUFFIX"]}[\\n\\s]`); +/** Look up the config factory for the slot this error belongs to. + * Checks the component stack for a slot marker (__next_instant_slot_N__) + * and returns the config at that index. Falls back to index 0 (root + * config) when no slot marker is found or the slot has no config. */ function resolveInstantStack(componentStack, dynamicValidation) { + const { slotStacks } = dynamicValidation; + if (slotStacks.length > 1) { + const match = slotMarkerRegex.exec(componentStack); + if (match) { + // Slot markers are 0-indexed in the component name but + // slotStacks is 1-indexed (index 0 is the root config). + const slotIndex = parseInt(match[1], 10) + 1; + const slotStack = slotStacks[slotIndex]; + if (slotStack != null) { + return slotStack; + } + } + } + // Fall back to root config (index 0) + return slotStacks[0] ?? null; +} +/** + * Inspects the component stack of an outlet boundary to discover whether the + * user placed a Suspense boundary above the document body, and records the + * opt-in on `dynamicValidation.hasSuspenseAboveBody` if so. + * + * The outlet itself isn't a meaningful source of dynamic — it only resolves + * when metadata/viewport are dynamic, which we track via their own boundaries. + * However, the outlet renders alongside the page content, so its stack passes + * through the user's layout chain (typically reaching into `` via the + * root layout). That makes the outlet stack our best opportunity to spot a + * Suspense boundary above the body, even when no real body content is dynamic. + * Without this, a route whose only dynamic source is `generateViewport()` would + * miss the Suspense-above-body opt-in, because the viewport's stack lives in + * the head and never sees the user's root layout. + * + * We deliberately only set `hasSuspenseAboveBody`, not `hasAllowedDynamic`. The + * latter tracks whether the body has dynamic content that's been wrapped in + * Suspense (i.e., the page is partially dynamic). The outlet rendering tells us + * about the structural opt-in for an empty shell, not about the body being + * partially dynamic. The distinction matters because dynamic metadata is only + * acceptable when the page is partially dynamic (via real body holes), and we + * don't want this outlet-based detection to mask that case. + */ function trackOutletSuspenseAboveBody(componentStack, dynamicValidation) { + if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + dynamicValidation.hasSuspenseAboveBody = true; + } +} +function trackDynamicAccessInStaticRoute(dynamicReason, workStore, componentStack, dynamicValidation, clientDynamic, isServerPartial, kind) { + const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic); + if (hasOutletRegex.test(componentStack)) { + trackOutletSuspenseAboveBody(componentStack, dynamicValidation); + return; + } + if (hasMetadataRegex.test(componentStack)) { + dynamicValidation.dynamicErrors.push(addErrorContext(createMetadataErrorInStaticRoute(kind, workStore.route), componentStack, null)); + return; + } + if (hasViewportRegex.test(componentStack)) { + dynamicValidation.dynamicErrors.push(addErrorContext(createViewportErrorInStaticRoute(kind, workStore.route), componentStack, null)); + return; + } + let hasSuspense = false; + if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + // this error had a Suspense boundary above it, and it's above the body as well. + dynamicValidation.hasSuspenseAboveBody = true; + hasSuspense = true; + } else if (hasSuspenseRegex.test(componentStack)) { + // this error had a Suspense boundary above it. + hasSuspense = true; + } + if (hasSuspense) { + if (!isServerPartial) { + // If we don't have holes caused by server data, then any holes must be caused + // by client-only code, which is allowed. + dynamicValidation.hasAllowedDynamic = true; + return; + } + // We have holes that may be caused by server data. + if (syncDynamicError || (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isClientHookDynamicError"])(dynamicReason)) { + // We know this hole wasn't caused by server data, so it's allowed + // (because it's wrapped in a Suspense) + dynamicValidation.hasAllowedDynamic = true; + return; + } + // Any remaining hole may be caused by a server hole. + // These are not allowed even with Suspense. + // (NOTE: this may misreport valid client dynamic holes as server holes) + dynamicValidation.dynamicErrors.push(addErrorContext(createBodyErrorInStaticRoute(kind, workStore.route), componentStack, null)); + return; + } + if (syncDynamicError) { + dynamicValidation.dynamicErrors.push(syncDynamicError); + return; + } + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isClientHookDynamicError"])(dynamicReason)) { + dynamicValidation.dynamicErrors.push(addErrorContext(dynamicReason, componentStack, null)); + return; + } + const error = addErrorContext(isServerPartial ? createBodyErrorInStaticRoute(kind, workStore.route) : createBodyError(kind, workStore.route), componentStack, null); + dynamicValidation.dynamicErrors.push(error); +} +function trackAllowedDynamicAccess(dynamicReason, workStore, componentStack, dynamicValidation, clientDynamic) { + const dynamicHoleKind = 6; + const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic); + if (hasOutletRegex.test(componentStack)) { + trackOutletSuspenseAboveBody(componentStack, dynamicValidation); + return; + } else if (hasMetadataRegex.test(componentStack)) { + dynamicValidation.hasDynamicMetadata = true; + return; + } else if (hasViewportRegex.test(componentStack)) { + dynamicValidation.hasDynamicViewport = true; + return; + } else if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule. + // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense + // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering. + dynamicValidation.hasAllowedDynamic = true; + dynamicValidation.hasSuspenseAboveBody = true; + return; + } else if (hasSuspenseRegex.test(componentStack)) { + // this error had a Suspense boundary above it so we don't need to report it as a source + // of disallowed + dynamicValidation.hasAllowedDynamic = true; + return; + } else if (syncDynamicError) { + dynamicValidation.dynamicErrors.push(syncDynamicError); + return; + } + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isClientHookDynamicError"])(dynamicReason)) { + dynamicValidation.dynamicErrors.push(addErrorContext(dynamicReason, componentStack, null)); + return; + } + const error = addErrorContext(createBodyError(dynamicHoleKind, workStore.route), componentStack, null); + dynamicValidation.dynamicErrors.push(error); + return; +} +var DynamicHoleKind = /*#__PURE__*/ function(DynamicHoleKind) { + /** We know that this hole is caused by runtime data. */ DynamicHoleKind[DynamicHoleKind["Runtime"] = 1] = "Runtime"; + /** We know that this hole is caused by link data. */ DynamicHoleKind[DynamicHoleKind["Link"] = 2] = "Link"; + /** We know that this hole is caused by navigation(). */ DynamicHoleKind[DynamicHoleKind["Navigation"] = 3] = "Navigation"; + /** We know that this hole is caused by prefetch(). */ DynamicHoleKind[DynamicHoleKind["Prefetch"] = 4] = "Prefetch"; + /** We know that this hole is caused by dynamic data. */ DynamicHoleKind[DynamicHoleKind["Dynamic"] = 5] = "Dynamic"; + /** We know that this hole is caused by runtime or dynamic data, but don't know which. */ DynamicHoleKind[DynamicHoleKind["RuntimeOrDynamic"] = 6] = "RuntimeOrDynamic"; + return DynamicHoleKind; +}({}); +function createInstantValidationState(slotStacks) { + return { + hasDynamicMetadata: false, + hasAllowedClientDynamicAboveBoundary: false, + dynamicMetadata: null, + hasDynamicViewport: false, + hasAllowedDynamic: false, + dynamicErrors: [], + validationPreventingErrors: [], + thrownErrorsOutsideBoundary: [], + slotStacks + }; +} +function trackDynamicHoleInNavigation(dynamicReason, workStore, componentStack, dynamicValidation, clientDynamic, kind, boundaryState) { + const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic); + if (hasOutletRegex.test(componentStack)) { + // We don't need to track that this is dynamic. It is only so when something else is also dynamic. + return; + } + // Resolve the config stack for this specific error. If the error + // is inside a slot marker, use that slot's config. Otherwise fall + // back to the default. + const effectiveCreateInstantStack = resolveInstantStack(componentStack, dynamicValidation); + if (hasMetadataRegex.test(componentStack)) { + const error = addErrorContext(createMetadataError(kind, workStore.route), componentStack, effectiveCreateInstantStack); + dynamicValidation.dynamicMetadata = error; + return; + } + if (hasViewportRegex.test(componentStack)) { + const error = addErrorContext(createViewportError(kind, workStore.route), componentStack, effectiveCreateInstantStack); + dynamicValidation.dynamicErrors.push(error); + return; + } + const boundaryLocation = hasInstantValidationBoundaryRegex.exec(componentStack); + if (!boundaryLocation) { + // We don't see the validation boundary in the component stack, + // so this hole must be coming from a shared parent. + // Shared parents are fully resolved and don't have RSC holes, + // but they can still suspend in a client component during SSR. + // If we managed to render all the validation boundaries, that means + // that the client holes aren't blocking validation and we can disregard them. + // Note that we don't even care whether they have suspense or not. + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$tracking$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["allRequiredBoundariesRendered"])(boundaryState)) { + dynamicValidation.hasAllowedClientDynamicAboveBoundary = true; + dynamicValidation.hasAllowedDynamic = true // Holes outside the boundary contribute to allowing dynamic metadata + ; + return; + } else { + // TODO(instant-validation) TODO(NAR-787) + // If shared parents blocked us from validating, we should only log + // the errors from the innermost (segments), i.e. omit layouts whose + // slots managed to render (because clearly they didn't block validation) + const message = `Route "${workStore.route}": Could not validate \`instant\` because a Client Component in a parent segment prevented the page from rendering.`; + const error = addErrorContext(new Error(message), componentStack, effectiveCreateInstantStack); + dynamicValidation.validationPreventingErrors.push(error); + return; + } + } else { + // The hole originates inside the validation boundary. + // + // Check if we have a Suspense above the hole, but below the validation boundary. + // If we do, then this dynamic usage wouldn't block a navigation to this subtree. + // Conversely, if the nearest suspense is above the validation boundary, then this subtree would block. + // + // Note that in the component stack, children come before parents. + // + // Valid: + // ... + // at Suspense + // ... + // at __next_prefetch_validation_boundary__ + // + // Invalid: + // ... + // at __next_prefetch_validation_boundary__ + // ... + // at Suspense + // + const suspenseLocation = hasSuspenseRegex.exec(componentStack); + if (suspenseLocation) { + if (suspenseLocation.index < boundaryLocation.index) { + dynamicValidation.hasAllowedDynamic = true; + return; + } else { + // invalid - fallthrough + } + } + } + if (syncDynamicError) { + if (effectiveCreateInstantStack !== null && syncDynamicError.cause === undefined) { + syncDynamicError.cause = effectiveCreateInstantStack(); + } + dynamicValidation.dynamicErrors.push(syncDynamicError); + return; + } + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isClientHookDynamicError"])(dynamicReason)) { + dynamicValidation.dynamicErrors.push(addErrorContext(dynamicReason, componentStack, effectiveCreateInstantStack)); + return; + } + const error = addErrorContext(createBodyErrorInNavigation(kind, workStore.route), componentStack, effectiveCreateInstantStack); + dynamicValidation.dynamicErrors.push(error); + return; +} +function createBodyError(kind, route) { + switch(kind){ + case 1: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeBodyError"])(route); + case 5: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicBodyError"])(route); + case 6: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicOrRuntimeBodyError"])(route); + } +} +function createBodyErrorInNavigation(kind, route) { + switch(kind){ + case 1: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeBodyErrorInNavigation"])(route); + case 2: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createLinkBodyErrorInNavigation"])(route); + case 3: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createNavigationBodyErrorInNavigation"])(route); + case 4: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPrefetchBodyErrorInNavigation"])(route); + case 5: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicBodyErrorInNavigation"])(route); + } +} +function createMetadataError(kind, route) { + switch(kind){ + case 1: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeMetadataError"])(route); + case 2: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createLinkMetadataError"])(route); + case 3: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createNavigationMetadataError"])(route); + case 4: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPrefetchMetadataError"])(route); + case 5: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicMetadataError"])(route); + case 6: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicOrRuntimeMetadataError"])(route); + } +} +function createViewportError(kind, route) { + switch(kind){ + case 1: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeViewportError"])(route); + case 2: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createLinkViewportError"])(route); + case 3: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createNavigationViewportError"])(route); + case 4: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPrefetchViewportError"])(route); + case 5: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicViewportError"])(route); + case 6: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicOrRuntimeViewportError"])(route); + } +} +function createBodyErrorInStaticRoute(kind, route) { + switch(kind){ + case 1: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeBodyErrorInStaticRoute"])(route); + case 5: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicBodyErrorInStaticRoute"])(route); + case 6: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createNonPrerenderableBodyErrorInStaticRoute"])(route); + } +} +function createMetadataErrorInStaticRoute(kind, route) { + switch(kind){ + case 1: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeMetadataErrorInStaticRoute"])(route); + case 5: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicMetadataErrorInStaticRoute"])(route); + case 6: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createNonPrerenderableMetadataErrorInStaticRoute"])(route); + } +} +function createViewportErrorInStaticRoute(kind, route) { + switch(kind){ + case 1: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeViewportErrorInStaticRoute"])(route); + case 5: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicViewportErrorInStaticRoute"])(route); + case 6: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createNonPrerenderableViewportErrorInStaticRoute"])(route); + } +} +function trackThrownErrorInNavigation(workStore, dynamicValidation, thrownValue, componentStack, reactBrowserBailout) { + const boundaryLocation = hasInstantValidationBoundaryRegex.exec(componentStack); + if (!boundaryLocation) { + // There's no validation boundary on the component stack. + // This error may have blocked a boundary from rendering. + // Wrap the error to provide component context. + // This helps for errors from node_modules which would otherwise + // have no useful stack information due to ignore-listing, + // e.g. next/dynamic with `ssr: false`. + if (reactBrowserBailout) { + // React preserves Next's branded bailout reason as the error cause. + // Replace the internal wrapper before storing the user-facing diagnostic. + const browserBailoutReason = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$lazy$2d$dynamic$2f$react$2d$browser$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getReactBrowserBailoutReason"])(thrownValue); + if (browserBailoutReason !== undefined) { + const browserBailoutError = thrownValue; + browserBailoutError.cause = browserBailoutReason; + } + } + const error = addErrorContext(new Error('An error occurred while attempting to validate instant UI. This error may be preventing the validation from completing.', { + cause: thrownValue + }), componentStack, null); + dynamicValidation.thrownErrorsOutsideBoundary.push(error); + } else { + // There's validation boundary on the component stack, + // so we know this error didn't block a validation boundary from rendering. + // However, this error might be hiding be hiding dynamic content that would + // cause validation to fail. + const suspenseLocation = hasSuspenseRegex.exec(componentStack); + if (suspenseLocation) { + if (suspenseLocation.index < boundaryLocation.index) { + // There's a Suspense below the validation boundary but above this error's location. + // This subtree can't fail instant validation because any potential + // dynamic holes would be guarded by the Suspense anyway, + // so we can allow this. + return; + } else { + // invalid - fallthrough + } + } + if (reactBrowserBailout) { + // React preserves Next's branded bailout reason as the error cause. + // Replace the internal wrapper before storing the user-facing diagnostic. + const browserBailoutReason = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$lazy$2d$dynamic$2f$react$2d$browser$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getReactBrowserBailoutReason"])(thrownValue); + if (browserBailoutReason !== undefined) { + const browserBailoutError = thrownValue; + browserBailoutError.cause = browserBailoutReason; + } + } + const message = `Route "${workStore.route}": Could not validate \`instant\` because an error prevented the target segment from rendering.`; + const error = addErrorContext(new Error(message, { + cause: thrownValue + }), componentStack, null // TODO(instant-validation-build): conflicting use of cause + ); + dynamicValidation.validationPreventingErrors.push(error); + } +} +function trackDynamicHoleInStaticShell(dynamicReason, workStore, componentStack, dynamicValidation, clientDynamic, kind) { + const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic); + if (hasOutletRegex.test(componentStack)) { + trackOutletSuspenseAboveBody(componentStack, dynamicValidation); + return; + } else if (hasMetadataRegex.test(componentStack)) { + const error = addErrorContext(createMetadataError(kind, workStore.route), componentStack, null); + dynamicValidation.dynamicMetadata = error; + return; + } else if (hasViewportRegex.test(componentStack)) { + const error = addErrorContext(createViewportError(kind, workStore.route), componentStack, null); + dynamicValidation.dynamicErrors.push(error); + return; + } else if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule. + // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense + // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering. + dynamicValidation.hasAllowedDynamic = true; + dynamicValidation.hasSuspenseAboveBody = true; + return; + } else if (hasSuspenseRegex.test(componentStack)) { + // this error had a Suspense boundary above it so we don't need to report it as a source + // of disallowed + dynamicValidation.hasAllowedDynamic = true; + return; + } else if (syncDynamicError) { + dynamicValidation.dynamicErrors.push(syncDynamicError); + return; + } + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isClientHookDynamicError"])(dynamicReason)) { + dynamicValidation.dynamicErrors.push(addErrorContext(dynamicReason, componentStack, null)); + return; + } + const error = addErrorContext(kind === 1 ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeBodyError"])(workStore.route) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicBodyError"])(workStore.route), componentStack, null); + dynamicValidation.dynamicErrors.push(error); + return; +} +/** + * In dev mode, we prefer using the owner stack, otherwise the provided + * component stack is used. + */ function addErrorContext(error, componentStack, createInstantStack) { + const ownerStack = ("TURBOPACK compile-time value", "development") !== 'production' && __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].captureOwnerStack ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].captureOwnerStack() : null; + if (createInstantStack !== null) { + error.cause = createInstantStack(); + } + // TODO go back to owner stack here if available. This is temporarily using componentStack to get the right + // + error.stack = error.name + ': ' + error.message + (ownerStack || componentStack); + return error; +} +var PreludeState = /*#__PURE__*/ function(PreludeState) { + PreludeState[PreludeState["Full"] = 0] = "Full"; + PreludeState[PreludeState["Empty"] = 1] = "Empty"; + PreludeState[PreludeState["Errored"] = 2] = "Errored"; + return PreludeState; +}({}); +function logDisallowedDynamicError(workStore, error) { + console.error(error); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["logBuildDebugHint"])(workStore.route); +} +function throwIfSyncIOUsed(workStore, serverDynamic) { + if (serverDynamic.syncDynamicErrorWithStack) { + logDisallowedDynamicError(workStore, serverDynamic.syncDynamicErrorWithStack); + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"](); + } +} +function throwIfDisallowedDynamic(workStore, prelude, dynamicValidation, serverDynamic, allowEmptyStaticShell) { + const dynamicHoleKind = 6; + throwIfSyncIOUsed(workStore, serverDynamic); + // The dynamic metadata error is a mistake-detection signal. It fires when the + // rest of the shell is otherwise fully static apart from metadata, suggesting + // the dynamic data access in `generateMetadata` was probably unintentional. + // That condition is independent of whether the user or build phase accepted + // an empty shell, so we surface it before any opt-in bypass. + if (prelude === 0 && dynamicValidation.hasAllowedDynamic === false && dynamicValidation.hasDynamicMetadata) { + console.error(createMetadataError(dynamicHoleKind, workStore.route).message); + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"](); + } + // Either flag expresses "this shell is allowed to be empty/blocking": + // - `allowEmptyStaticShell` covers `instant = false` (user opt-in) + // and the build-phase fallback-shell case. + // - `hasSuspenseAboveBody` is the structural opt-in inside the user's root + // layout. + // Treat them as synonyms for the purpose of bypassing shell-failure errors. + if (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody) { + return; + } + if (prelude !== 0) { + // We didn't have any sync bailouts but there may be user code which + // blocked the root. We would have captured these during the prerender + // and can log them here and then terminate the build/validating render + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + for(let i = 0; i < dynamicErrors.length; i++){ + logDisallowedDynamicError(workStore, dynamicErrors[i]); + } + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"](); + } + // If we got this far then the only other thing that could be blocking + // the root is dynamic Viewport. If this is dynamic then + // you need to opt into that by adding a Suspense boundary above the body + // to indicate your are ok with fully dynamic rendering. + if (dynamicValidation.hasDynamicViewport) { + console.error(createViewportError(dynamicHoleKind, workStore.route).message); + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"](); + } + if (prelude === 1) { + // If we ever get this far then we messed up the tracking of invalid dynamic. + // We still adhere to the constraint that you must produce a shell but invite the + // user to report this as a bug in Next.js. + console.error(`Route "${workStore.route}" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`); + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"](); + } + } +} +function throwIfDisallowedDynamicInStaticRoute(workStore, prelude, dynamicValidation, serverDynamic, isFallbackShell, allowEmptyStaticShell, isServerPartial) { + const reasons = getDisallowedReasonsInStaticRoute(workStore, prelude, dynamicValidation, serverDynamic, isFallbackShell, allowEmptyStaticShell, isServerPartial); + if (reasons.length > 0) { + for (const reason of reasons){ + logDisallowedDynamicError(workStore, reason); + } + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"](); + } +} +function getDisallowedReasonsInStaticRoute(workStore, prelude, dynamicValidation, serverDynamic, isFallbackShell, allowEmptyStaticShell, isServerPartial) { + if (serverDynamic && serverDynamic.syncDynamicErrorWithStack) { + return [ + serverDynamic.syncDynamicErrorWithStack + ]; + } + // We do a fallback shell prerender, but it's not meant to be validated -- + // we just need it to create the relevant prerender outputs. + if (isFallbackShell) { + return []; + } + // Suspense-above-body and `instant = false` bypass reporting + // that the shell is blocked. However, if we have non-prerenderable server + // data, we still have to error, regardless of those two. + if (!isServerPartial && (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody)) { + return []; + } + const { dynamicErrors } = dynamicValidation; + if (dynamicErrors.length > 0) { + return dynamicErrors; + } + // Dynamic data may have been passed into a client component without calling `use()`, + // in which case we wouldn't see it during the prerender, but still need to error. + // Fall back to a generic error message. + if (isServerPartial) { + return [ + new Error(`Route "${workStore.route}": Next.js encountered data that is not available during a static prerender, but is unable to provide a location.`) + ]; + } + if (prelude === 1 || prelude === 2) { + // We've somehow ended up with an empty prelude but no dynamic errors. + // We must've messed up the tracking somehow. + return [ + new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`Route "${workStore.route}" did not produce a static shell and Next.js was unable to determine a reason.`) + ]; + } + return []; +} +function getStaticShellDisallowedDynamicReasons(workStore, prelude, dynamicValidation, allowEmptyStaticShell) { + // The dynamic metadata error is a mistake-detection signal. It fires when the + // rest of the shell is otherwise fully static apart from metadata, suggesting + // the dynamic data access in `generateMetadata` was probably unintentional. + // That condition is independent of whether the user or build phase accepted + // an empty shell, so we surface it before any opt-in bypass. + if (prelude === 0 && dynamicValidation.hasAllowedDynamic === false && dynamicValidation.dynamicErrors.length === 0 && dynamicValidation.dynamicMetadata) { + return [ + dynamicValidation.dynamicMetadata + ]; + } + // Either flag expresses "this shell is allowed to be empty/blocking": + // - `allowEmptyStaticShell` covers `instant = false` (user opt-in) + // and the build-phase fallback-shell case. + // - `hasSuspenseAboveBody` is the structural opt-in inside the user's root + // layout. + // Treat them as synonyms for the purpose of bypassing shell-failure errors. + if (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody) { + return []; + } + if (prelude !== 0) { + // We didn't have any sync bailouts but there may be user code which + // blocked the root. We would have captured these during the prerender + // and can log them here and then terminate the build/validating render + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + return dynamicErrors; + } + if (prelude === 1) { + // If we ever get this far then we messed up the tracking of invalid dynamic. + // We still adhere to the constraint that you must produce a shell but invite the + // user to report this as a bug in Next.js. + return [ + new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`Route "${workStore.route}" did not produce a static shell and Next.js was unable to determine a reason.`) + ]; + } + } + // We had a non-empty prelude and there are no dynamic holes + return []; +} +function getNavigationDisallowedDynamicReasons(workStore, prelude, dynamicValidation, validationSampleTracking, boundaryState, devRenderDidError) { + // If we have errors related to missing samples, those should take precedence over everything else. + if (validationSampleTracking) { + const { missingSampleErrors } = validationSampleTracking; + if (missingSampleErrors.length > 0) { + return missingSampleErrors; + } + } + const { validationPreventingErrors } = dynamicValidation; + if (validationPreventingErrors.length > 0) { + if (("TURBOPACK compile-time value", "1") && devRenderDidError) { + // The dev render already surfaced server errors to the user. + // The same errors likely caused validation to be inconclusive, + // so reporting them again as validation failures would be noisy. + return []; + } + return validationPreventingErrors; + } + // NOTE: We don't care about Suspense above body here, + // we're only concerned with the validation boundary + if (prelude !== 0) { + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + return dynamicErrors; + } + if (prelude === 1 && !dynamicValidation.hasAllowedClientDynamicAboveBoundary && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$tracking$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["allRequiredBoundariesRendered"])(boundaryState)) { + // If we ever get this far then we messed up the tracking of invalid + // dynamic. (When boundaries are missing the deferred fallback below + // will surface a more useful error.) + return new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`Route "${workStore.route}" failed to render during instant validation and Next.js was unable to determine a reason.`); + } + } else { + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + return dynamicErrors; + } + if (dynamicValidation.hasAllowedDynamic === false && dynamicValidation.dynamicMetadata) { + return [ + dynamicValidation.dynamicMetadata + ]; + } + } + // Missing boundaries on their own aren't a strong signal — a parent + // layout may legitimately omit a slot. Defer this so the caller can + // try shallower validation depths first; if every depth comes up + // empty we still want to surface this so the user is made aware that + // validation didn't complete. When we add a markers API, the + // marker-based variant of this check can become strict again. + if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$tracking$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["allRequiredBoundariesRendered"])(boundaryState)) { + const { thrownErrorsOutsideBoundary } = dynamicValidation; + const rootInstantStack = dynamicValidation.slotStacks[0]; + if (thrownErrorsOutsideBoundary.length === 0) { + const missingFiles = []; + for (const [id, filePaths] of boundaryState.requiredIds){ + if (!boundaryState.renderedIds.has(id)) { + for (const filePath of filePaths){ + let normalized = filePath.replace(/^\[project\][\\/]?/, '').replace(process.cwd() + '/', '').replace(process.cwd() + '\\', ''); + missingFiles.push(normalized); + } + } + } + missingFiles.sort(); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$instant$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createUnrenderedSegmentError"])(workStore.route, missingFiles); + } else if (("TURBOPACK compile-time value", "1") && devRenderDidError) { + // Errors outside the boundary likely blocked it from rendering, + // but they're already being reported to the user via the dev + // render. Suppress the validation failure to avoid noise. + return []; + } else if (thrownErrorsOutsideBoundary.length === 1) { + const message = `Route "${workStore.route}": Could not validate \`instant\` because the target segment was prevented from rendering, likely due to the following error.`; + const error = rootInstantStack !== null ? rootInstantStack() : new Error(); + error.name = 'Error'; + error.message = message; + return new AggregateError([ + error, + thrownErrorsOutsideBoundary[0] + ]); + } else { + const message = `Route "${workStore.route}": Could not validate \`instant\` because the target segment was prevented from rendering, likely due to one of the following errors.`; + const error = rootInstantStack !== null ? rootInstantStack() : new Error(); + error.name = 'Error'; + error.message = message; + return new AggregateError([ + error, + ...thrownErrorsOutsideBoundary + ]); + } + } + // We had a non-empty prelude and there are no dynamic holes + return []; +} +}), +"[project]/node_modules/next/dist/esm/server/app-render/instant-validation/boundary-constants.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "INSTANT_SLOT_MARKER_PREFIX", + ()=>INSTANT_SLOT_MARKER_PREFIX, + "INSTANT_SLOT_MARKER_SUFFIX", + ()=>INSTANT_SLOT_MARKER_SUFFIX, + "INSTANT_VALIDATION_BOUNDARY_NAME", + ()=>INSTANT_VALIDATION_BOUNDARY_NAME +]); +const INSTANT_VALIDATION_BOUNDARY_NAME = '__next_instant_validation_boundary__'; +const INSTANT_SLOT_MARKER_PREFIX = '__next_instant_slot_'; +const INSTANT_SLOT_MARKER_SUFFIX = '__'; +}), +"[project]/node_modules/next/dist/esm/server/app-render/instant-validation/boundary-tracking.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "allRequiredBoundariesRendered", + ()=>allRequiredBoundariesRendered, + "createValidationBoundaryTracking", + ()=>createValidationBoundaryTracking +]); +function createValidationBoundaryTracking(/** Pass if the render is expected to render the same IDs as a previous one. */ matchPrevious) { + return { + requiredIds: matchPrevious ? new Map(matchPrevious.requiredIds) : new Map(), + renderedIds: new Set() + }; +} +function allRequiredBoundariesRendered(state) { + for (const id of state.requiredIds.keys()){ + if (!state.renderedIds.has(id)) { + return false; + } + } + return true; +} +}), +"[project]/node_modules/next/dist/esm/server/app-render/manifests-singleton.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getActionNotFoundError", + ()=>getActionNotFoundError, + "getClientReferenceManifest", + ()=>getClientReferenceManifest, + "getInvalidServerReferenceIdError", + ()=>getInvalidServerReferenceIdError, + "getRscModuleMappingForUseCache", + ()=>getRscModuleMappingForUseCache, + "getServerActionsManifest", + ()=>getServerActionsManifest, + "getServerModuleMap", + ()=>getServerModuleMap, + "normalizeWorkerPageName", + ()=>normalizeWorkerPageName, + "selectWorkerForForwarding", + ()=>selectWorkerForForwarding, + "setManifestsSingleton", + ()=>setManifestsSingleton +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$server$2d$reference$2d$info$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/server-reference-info.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2f$reflect$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/utils/reflect-utils.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)"); +; +; +; +; +; +; +; +; +function getActionNotFoundError(actionId) { + return new Error(`Failed to find Server Action${actionId ? ` "${actionId}"` : ''}. This request might be from an older or newer deployment.\nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action`); +} +function getInvalidServerReferenceIdError(id) { + // `id` is arbitrary client-provided input. Unlike the not-found case, it has + // not passed the length gate and can reach this error via a malformed server + // reference in an action payload, so it may be of any length and contain + // control characters. `JSON.stringify` escapes newlines and quotes so it + // can't forge log lines, and truncating overly long ids prevents log + // flooding. Ids at or below the cap are logged in full so that we only add an + // ellipsis to ids that are meaningfully longer than the truncated length. + const encoded = JSON.stringify(id.length > MAX_LOGGED_SERVER_REFERENCE_ID_LENGTH ? id.slice(0, TRUNCATED_SERVER_REFERENCE_ID_LENGTH) + '…' : id); + return new Error(`The Server Reference ID did not match the expected format. Received ${encoded}.\nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action`); +} +// Ids at or below the cap are logged in full. Longer ids are truncated to the +// shorter length and marked with an ellipsis, so the cap leaves headroom over +// the truncated length rather than ellipsizing ids that are barely too long. +const MAX_LOGGED_SERVER_REFERENCE_ID_LENGTH = 100; +const TRUNCATED_SERVER_REFERENCE_ID_LENGTH = 90; +// This is a global singleton that is, among other things, also used to +// encode/decode bound args of server function closures. This can't be using a +// AsyncLocalStorage as it might happen at the module level. +const MANIFESTS_SINGLETON = Symbol.for('next.server.manifests'); +const globalThisWithManifests = globalThis; +function isUseCacheStore(workUnitStore) { + if (!workUnitStore) { + return false; + } + switch(workUnitStore.type){ + case 'cache': + case 'private-cache': + return true; + case 'request': + case 'unstable-cache': + case 'prerender': + case 'prerender-client': + case 'prerender-legacy': + case 'prerender-runtime': + case 'validation-client': + case 'build-time-generator': + return false; + default: + return workUnitStore; + } +} +function createProxiedClientReferenceManifest(clientReferenceManifestsPerRoute) { + const createMappingProxy = (prop)=>{ + return new Proxy({}, { + get (_, id) { + const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + if (workStore) { + var _clientReferenceManifestsPerRoute_get; + const currentManifest = (_clientReferenceManifestsPerRoute_get = clientReferenceManifestsPerRoute.get(workStore.route)) == null ? void 0 : _clientReferenceManifestsPerRoute_get.clientReferenceManifest; + if (currentManifest == null ? void 0 : currentManifest[prop][id]) { + if (workStore.durableUseCacheEntries && prop === 'clientModules') { + const workUnitStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workUnitAsyncStorage"].getStore(); + if (isUseCacheStore(workUnitStore)) { + // This creates a mapping so that a given client references with name + // `app/foo/client.tsx` is serialized as + // ``` + // { id: `app/foo/client.tsx`, name: `*`, chunks: ["stub"], async: false } + // ``` + // instead of the actual + // ``` + // { id: 19132, name: `*`, chunks: ["/_next/static/chunks/..."], async: true } + // ``` + // + // This means that not the unstable client module id is used for the cache entry, + // but the stable client reference name. The stable client reference name is + // resolved against the current manifest via rscModuleMappingForUseCache when the + // entry is read. + const clientReferenceManifestEntry = currentManifest.clientModules[id]; + return { + // Return `id` instead of `clientReferenceManifestEntry.id` here. + id, + name: clientReferenceManifestEntry.name, + // Set a sentinel value just in case this does ends up being read at some point + // in the future, then at least we'll get "Failed to load chunk stub (404)" + // instead of "Failed to load module 1234". + chunks: [ + 'stub' + ], + async: false + }; + } + } + return currentManifest[prop][id]; + } + // In development, we also check all other manifests to see if the + // module exists there. This is to support a scenario where React's + // I/O tracking (dev-only) creates a connection from one page to + // another through an emitted async I/O node that references client + // components from the other page, e.g. in owner props. + // TODO: Maybe we need to add a `debugBundlerConfig` option to React + // to avoid this workaround. The current workaround has the + // disadvantage that one might accidentally or intentionally share + // client references across pages (e.g. by storing them in a global + // variable), which would then only be caught in production. + if ("TURBOPACK compile-time truthy", 1) { + for (const [route, { page, clientReferenceManifest }] of clientReferenceManifestsPerRoute){ + if (route === workStore.route) { + continue; + } + const entry = clientReferenceManifest[prop][id]; + if (entry !== undefined) { + if ("TURBOPACK compile-time truthy", 1) { + // The dev validation worker rebuilds this registry in its + // own thread, seeded with only the route it validates, so + // it has to be told which other manifests it needs. + workStore.additionalClientReferenceManifestPages ??= new Set(); + workStore.additionalClientReferenceManifestPages.add(page); + } + return entry; + } + } + } + } else { + // If there's no work store defined, we can assume that a client + // reference manifest is needed during module evaluation, e.g. to + // create a server function using a higher-order function. This + // might also use client components which need to be serialized by + // Flight, and therefore client references need to be resolvable. In + // that case we search all page manifests to find the module. + for (const { clientReferenceManifest } of clientReferenceManifestsPerRoute.values()){ + const entry = clientReferenceManifest[prop][id]; + if (entry !== undefined) { + return entry; + } + } + } + return undefined; + } + }); + }; + const mappingProxies = new Map(); + const proxiedClientReferenceManifest = new Proxy({}, { + get (_, prop) { + const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + switch(prop){ + case 'moduleLoading': + case 'entryCSSFiles': + case 'entryJSFiles': + { + if (!workStore) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`Cannot access "${prop}" without a work store.`); + } + const registeredManifest = clientReferenceManifestsPerRoute.get(workStore.route); + if (!registeredManifest) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`The client reference manifest for route "${workStore.route}" does not exist.`); + } + return registeredManifest.clientReferenceManifest[prop]; + } + case 'clientModules': + case 'rscModuleMapping': + case 'edgeRscModuleMapping': + case 'ssrModuleMapping': + case 'edgeSSRModuleMapping': + { + let proxy = mappingProxies.get(prop); + if (!proxy) { + proxy = createMappingProxy(prop); + mappingProxies.set(prop, proxy); + } + return proxy; + } + default: + { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`This is a proxied client reference manifest. The property "${String(prop)}" is not handled.`); + } + } + } + }); + // Performs the inverse of the clientModules isUseCacheStore(workUnitStore) special case above: + // + // For cache functions, don't do the usual rscModuleMapping lookup by module ID, but instead look + // up by the stable client reference name. This is because cache entries must not depend on + // build-local module IDs or chunks. So we need a second layer of indirection here to do client + // reference name -> client module id -> rsc module mapping lookup. + // + // This one is created separately (not inside proxiedClientReferenceManifest.rscModuleMapping) as + // we don't necessarily are inside a workUnitStore when we need to access this mapping (as opposed + // to the clientModules mapping, which always has the ALS set). + const rscModuleMappingForUseCache = new Proxy({}, { + get (_, key) { + const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + if (workStore && workStore.durableUseCacheEntries) { + var _clientReferenceManifestsPerRoute_get; + const currentManifest = (_clientReferenceManifestsPerRoute_get = clientReferenceManifestsPerRoute.get(workStore.route)) == null ? void 0 : _clientReferenceManifestsPerRoute_get.clientReferenceManifest; + const clientReferenceName = key; + const clientReferenceManifestEntry = currentManifest == null ? void 0 : currentManifest.clientModules[clientReferenceName]; + if (clientReferenceManifestEntry === undefined) { + return undefined; + } + const clientModuleId = clientReferenceManifestEntry.id; + return currentManifest == null ? void 0 : currentManifest.rscModuleMapping[clientModuleId]; + } else { + return proxiedClientReferenceManifest.rscModuleMapping[key]; + } + } + }); + return { + proxiedClientReferenceManifest, + rscModuleMappingForUseCache + }; +} +/** + * This function creates a Flight-acceptable server module map proxy from our + * Server Reference Manifest similar to our client module map. This is because + * our manifest contains a lot of internal Next.js data that are relevant to the + * runtime, workers, etc. that React doesn't need to know. + */ function createServerModuleMap() { + return new Proxy(Object.create(null), { + get: (target, id, receiver)=>{ + var _getServerActionsManifest__id, _getServerActionsManifest_; + // React's debug serialization can probe the module map like a plain object. + // These probes are not server reference lookups. + if (typeof id !== 'string') { + return Reflect.get(target, id, receiver); + } + if (__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2f$reflect$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["wellKnownProperties"].has(id)) { + return Reflect.get(target, id, receiver); + } + if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$server$2d$reference$2d$info$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["mightBeServerReferenceId"])(id)) { + throw getInvalidServerReferenceIdError(id); + } + const workers = (_getServerActionsManifest_ = getServerActionsManifest()[("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'node']) == null ? void 0 : (_getServerActionsManifest__id = _getServerActionsManifest_[id]) == null ? void 0 : _getServerActionsManifest__id.workers; + if (!workers) { + throw getActionNotFoundError(id); + } + const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + let workerEntry; + if (workStore) { + workerEntry = workers[normalizeWorkerPageName(workStore.page)]; + } else { + // If there's no work store defined, we can assume that a server + // module map is needed during module evaluation, e.g. to create a + // server action using a higher-order function. Therefore it should be + // safe to return any entry from the manifest that matches the action + // ID. They all refer to the same module ID, which must also exist in + // the current page bundle. TODO: This is currently not guaranteed in + // Turbopack, and needs to be fixed. + workerEntry = Object.values(workers).at(0); + } + if (!workerEntry) { + throw getActionNotFoundError(id); + } + const { moduleId, async, durability } = workerEntry; + return { + id: moduleId, + name: id, + chunks: [], + async, + durability + }; + } + }); +} +function normalizeWorkerPageName(pageName) { + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pathHasPrefix"])(pageName, 'app')) { + return pageName; + } + return 'app' + pageName; +} +/** + * Converts a bundlePath (relative path to the entrypoint) to a routable page + * name. + */ function denormalizeWorkerPageName(bundlePath) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeAppPath"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["removePathPrefix"])(bundlePath, 'app')); +} +function selectWorkerForForwarding(actionId, pageName) { + var _serverActionsManifest__actionId; + const serverActionsManifest = getServerActionsManifest(); + const workers = (_serverActionsManifest__actionId = serverActionsManifest[("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'node'][actionId]) == null ? void 0 : _serverActionsManifest__actionId.workers; + // There are no workers to handle this action, nothing to forward to. + if (!workers) { + return; + } + // If there is an entry for the current page, we don't need to forward. + if (workers[normalizeWorkerPageName(pageName)]) { + return; + } + // Otherwise, grab the first worker that has a handler for this action id. + return denormalizeWorkerPageName(Object.keys(workers)[0]); +} +function setManifestsSingleton({ page, clientReferenceManifest, serverActionsManifest: rawServerActionsManifest }) { + const existingSingleton = globalThisWithManifests[MANIFESTS_SINGLETON]; + const route = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeAppPath"])(page); + const serverActionsManifest = { + encryptionKey: rawServerActionsManifest.encryptionKey, + // Use null-prototypes for the action objects to prevent prototype pollution + // from affecting action ID lookups. + node: Object.assign(Object.create(null), rawServerActionsManifest.node), + edge: Object.assign(Object.create(null), rawServerActionsManifest.edge) + }; + if (existingSingleton) { + existingSingleton.clientReferenceManifestsPerRoute.set(route, { + page, + clientReferenceManifest + }); + existingSingleton.serverActionsManifest = serverActionsManifest; + } else { + const clientReferenceManifestsPerRoute = new Map([ + [ + route, + { + page, + clientReferenceManifest + } + ] + ]); + const { proxiedClientReferenceManifest, rscModuleMappingForUseCache } = createProxiedClientReferenceManifest(clientReferenceManifestsPerRoute); + globalThisWithManifests[MANIFESTS_SINGLETON] = { + clientReferenceManifestsPerRoute, + proxiedClientReferenceManifest, + rscModuleMappingForUseCache, + serverActionsManifest, + serverModuleMap: createServerModuleMap() + }; + } +} +function getManifestsSingleton() { + const manifestSingleton = globalThisWithManifests[MANIFESTS_SINGLETON]; + if (!manifestSingleton) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('The manifests singleton was not initialized.'); + } + return manifestSingleton; +} +function getClientReferenceManifest() { + return getManifestsSingleton().proxiedClientReferenceManifest; +} +function getRscModuleMappingForUseCache() { + return getManifestsSingleton().rscModuleMappingForUseCache; +} +function getServerActionsManifest() { + return getManifestsSingleton().serverActionsManifest; +} +function getServerModuleMap() { + return getManifestsSingleton().serverModuleMap; +} +}), +"[project]/node_modules/next/dist/esm/server/app-render/segment-config/ensure-static.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "EnsureStaticLevel", + ()=>EnsureStaticLevel, + "resolveEnsureStaticConfig", + ()=>resolveEnsureStaticConfig, + "resolveEnsureStaticLevel", + ()=>resolveEnsureStaticLevel +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$loader$2d$tree$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-loader-tree.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$app$2d$dir$2d$module$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/app-dir-module.js [app-route] (ecmascript)"); +; +; +var EnsureStaticLevel = /*#__PURE__*/ function(EnsureStaticLevel) { + /** The route follows standard Partial Prefetching semantics. */ EnsureStaticLevel[EnsureStaticLevel["None"] = 0] = "None"; + /** The route requires that app shells must be statically prerendered. */ EnsureStaticLevel[EnsureStaticLevel["Shell"] = 1] = "Shell"; + /** The route requires that app shells and prefetches must be statically prerendered. */ EnsureStaticLevel[EnsureStaticLevel["Prefetch"] = 2] = "Prefetch"; + /** The route requires that app shells, prefetches, and the whole page must be statically prerendered. */ EnsureStaticLevel[EnsureStaticLevel["Navigation"] = 3] = "Navigation"; + return EnsureStaticLevel; +}({}); +function getEnsureStaticLevel(ensureStatic) { + switch(ensureStatic){ + case 'auto': + case false: + { + return 0; + } + case 'shell': + { + return 1; + } + case 'prefetch': + { + return 2; + } + case 'navigation': + { + return 3; + } + } +} +async function resolveEnsureStaticLevel(tree, partialPrefetching) { + return getEnsureStaticLevel(await resolveEnsureStaticConfig(tree, partialPrefetching)); +} +async function resolveEnsureStaticConfig(tree, partialPrefetching) { + let { config, filePath } = await resolveEnsureStaticConfigImpl(tree); + if (!partialPrefetching) { + // If Partial Prefetching is not enabled for this route, we only support + // a subset of `ensureStatic` values. + // (We error in `getAppPageStaticInfo` if `ensureStatic` is used without enabling + // Cache Components, so we don't have to assert that here) + switch(config){ + case 'auto': + { + // Default to the equivalent of Cache Components prefetching behavior. + config = 'prefetch'; + break; + } + case false: + case 'shell': + { + // Not meaningful in Cache Components without Partial Prefetching + const originalConfig = config; + config = 'prefetch'; + console.warn(`${formatEnsureStaticExport(originalConfig)} has no effect unless the route is using Partial Prefetching.` + `\n (from: ${filePath})`); + break; + } + case 'prefetch': + break; + case 'navigation': + break; + default: + config; + } + } + if (config === false) { + // `false` and "auto" are equivalent once resolved. + return 'auto'; + } else { + return config; + } +} +async function resolveEnsureStaticConfigImpl(tree) { + const { mod: layoutOrPageMod, filePath } = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$app$2d$dir$2d$module$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getLayoutOrPageModule"])(tree); + const config = getEnsureStaticConfigForModule(layoutOrPageMod); + const parentResult = { + config, + filePath: filePath ?? null + }; + // Walk the slots if any and validate that they don't have incompatible configs + // with each other. If compatible, pick the most constrained value from the slots. + let slotsResult = null; + let slotResultKey = null; + const { parallelRoutes } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$loader$2d$tree$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["parseLoaderTree"])(tree); + for(const parallelRouteKey in parallelRoutes){ + const parallelRoute = parallelRoutes[parallelRouteKey]; + const childResult = await resolveEnsureStaticConfigImpl(parallelRoute); + if (!slotsResult) { + slotsResult = childResult; + slotResultKey = parallelRouteKey; + } else { + // Check if the child is compatible with the current result for the slots. + switch(compareEnsureStatic(childResult.config, slotsResult.config)){ + case 2: + { + // 'auto' is compatible with anything, but if the current result is 'auto' and the new one isn't, + // we want to use the more specific result. + if (slotsResult.config === 'auto' && childResult.config !== 'auto') { + slotsResult = childResult; + slotResultKey = parallelRouteKey; + } + break; + } + case 4: + case 1: + case 3: + { + throw new Error(`Parallel slots cannot have incompatible \`ensureStatic\`.` + `\n ${formatParallelSlot(slotResultKey)}: ` + `\n ${formatEnsureStaticExport(slotsResult.config)}` + `\n (from: ${slotsResult.filePath})` + `\n` + `\n ${formatParallelSlot(parallelRouteKey)}: ` + `\n ${formatEnsureStaticExport(childResult.config)}` + `\n (from: ${childResult.filePath})` + `\n` + `\n Possible fixes:` + `\n - Remove one of the \`ensureStatic\` exports` + `\n - Change one of the \`ensureStatic\` exports to match the other`); + } + } + } + } + // Child segments can override the config from the parent with a more constrained value, + // but they cannot have a less constrained value. + if (!slotsResult) { + return parentResult; + } else { + const comparison = compareEnsureStatic(slotsResult.config, parentResult.config); + switch(comparison){ + case 2: + { + // 'auto' is compatible with anything, but if the parent result is 'auto' and the slots one isn't, + // we want to use the more constrained result. + if (parentResult.config === 'auto' && slotsResult.config !== 'auto') { + return slotsResult; + } else { + return parentResult; + } + } + case 3: + { + return slotsResult; + } + case 1: + case 4: + { + throw new Error((comparison === 1 ? `A child segment cannot override a parent segment with a less-constrained \`ensureStatic\`.` : `A child segment cannot override a parent segment with an incompatible \`ensureStatic\`.`) + `\n Parent has: ` + `\n ${formatEnsureStaticExport(parentResult.config)}` + `\n (from: ${parentResult.filePath})` + `\n Child has: ` + `\n ${formatEnsureStaticExport(slotsResult.config)}` + `\n (from: ${slotsResult.filePath})` + `\n` + `\n Possible fixes:` + `\n - Remove one of the \`ensureStatic\` exports` + `\n - Change one of the \`ensureStatic\` exports to match the other`); + } + } + } +} +function formatParallelSlot(slot) { + return slot === 'children' ? slot : `@${slot}`; +} +function formatEnsureStaticExport(config) { + return `export const ensureStatic = ${JSON.stringify(config)}`; +} +var Comparison = /*#__PURE__*/ function(Comparison) { + Comparison[Comparison["LessConstrained"] = 1] = "LessConstrained"; + Comparison[Comparison["Compatible"] = 2] = "Compatible"; + Comparison[Comparison["MoreConstrained"] = 3] = "MoreConstrained"; + Comparison[Comparison["Incompatible"] = 4] = "Incompatible"; + return Comparison; +}(Comparison || {}); +const ENSURE_STATIC_ORDER = [ + 'shell', + 'prefetch', + 'navigation' +]; +function compareEnsureStatic(left, right) { + // 'auto' is compatible with everything. + if (left === 'auto' || right === 'auto') { + return 2; + } + // `false` is compatible with false. + if (left === false && right === false) { + return 2; + } + // If only one of the values is `false` (we know it's not both), it's incompatible. + if (left === false || right === false) { + return 4; + } + const leftSort = ENSURE_STATIC_ORDER.indexOf(left); + const rightSort = ENSURE_STATIC_ORDER.indexOf(right); + return leftSort < rightSort ? 1 : leftSort === rightSort ? 2 : 3; +} +function getEnsureStaticConfigForModule(mod) { + return (mod ? mod.ensureStatic : undefined) ?? 'auto'; +} +}), +"[project]/node_modules/next/dist/esm/server/app-render/staged-rendering.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "RENDER_STAGE_ADVANCE_ORDER", + ()=>RENDER_STAGE_ADVANCE_ORDER, + "RenderStage", + ()=>RenderStage, + "StagedRenderingController", + ()=>StagedRenderingController, + "SyncIOMode", + ()=>SyncIOMode, + "getNextStage", + ()=>getNextStage, + "isAdvanceableRenderStage", + ()=>isAdvanceableRenderStage +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)"); +; +; +var RenderStage = /*#__PURE__*/ function(RenderStage) { + RenderStage[RenderStage["Before"] = 1] = "Before"; + // + RenderStage[RenderStage["ShellStatic"] = 10] = "ShellStatic"; + /** Discrimination-only stage: `prefetch()` in validation renders (static) */ RenderStage[RenderStage["PrefetchStatic_prefetchApi"] = 11] = "PrefetchStatic_prefetchApi"; + RenderStage[RenderStage["PrefetchStatic"] = 12] = "PrefetchStatic"; + RenderStage[RenderStage["NavigationStatic"] = 13] = "NavigationStatic"; + RenderStage[RenderStage["Static"] = 14] = "Static"; + // + RenderStage[RenderStage["ShellRuntime"] = 20] = "ShellRuntime"; + /** Discrimination-only stage: `prefetch()` in validation renders (runtime) */ RenderStage[RenderStage["PrefetchRuntime_prefetchApi"] = 21] = "PrefetchRuntime_prefetchApi"; + RenderStage[RenderStage["PrefetchRuntime"] = 22] = "PrefetchRuntime"; + RenderStage[RenderStage["NavigationRuntime"] = 23] = "NavigationRuntime"; + // + RenderStage[RenderStage["Dynamic"] = 30] = "Dynamic"; + RenderStage[RenderStage["Abandoned"] = 40] = "Abandoned"; + return RenderStage; +}({}); +const RENDER_STAGE_ADVANCE_ORDER = [ + 10, + 11, + 12, + 13, + 14, + 20, + 21, + 22, + 23, + 30 +]; +function getNextStage(stage) { + return RENDER_STAGE_ADVANCE_ORDER[RENDER_STAGE_ADVANCE_ORDER.indexOf(stage) + 1]; +} +function isAdvanceableRenderStage(stage) { + return 1 < stage && stage <= 30; +} +var SyncIOMode = /*#__PURE__*/ function(SyncIOMode) { + /** Sync IO does not error in any stage. */ SyncIOMode[SyncIOMode["Untracked"] = 1] = "Untracked"; + /** Before `partialPrefetching`: Sync IO errors in static stages, and is allowed otherwise. */ SyncIOMode[SyncIOMode["AllowedInRuntimeOrDynamic"] = 2] = "AllowedInRuntimeOrDynamic"; + /** After `partialPrefetching`: Sync IO errors in all stages other than dynamic. */ SyncIOMode[SyncIOMode["AllowedInDynamic"] = 3] = "AllowedInDynamic"; + return SyncIOMode; +}({}); +class StagedRenderingController { + constructor({ abortSignal, abandonController, syncIO, finalStage }){ + this.currentStage = 1; + this.syncInterruptReason = null; + this.triggers = createAdvanceableStageTriggers(); + this.abortSignal = abortSignal; + this.abandonController = abandonController; + this.syncIOMode = syncIO; + this.finalStage = finalStage; + if (abortSignal) { + abortSignal.addEventListener('abort', ()=>{ + // Reject all stage promises that haven't already been resolved. + // `cancelStageTrigger` is a noop if the trigger already resolved. + const { reason } = abortSignal; + for (const trigger of Object.values(this.triggers)){ + cancelStageTrigger(trigger, reason); + } + }, { + once: true + }); + } + if (abandonController) { + abandonController.signal.addEventListener('abort', ()=>{ + this.abandonRender(); + }, { + once: true + }); + } + } + /** + * Schedules a callback that will execute synchronously when the controller is advanced + * to `stage` or past it, before any promises for that stage are resolved. + * If the controller is already past `stage`, the callback is executed immediately. + * */ onStage(stage, callback) { + addSyncTriggerListener(this.triggers[stage], callback); + } + shouldTrackSyncInterrupt() { + const { syncIOMode, currentStage } = this; + switch(syncIOMode){ + case 1: + { + return false; + } + case 2: + { + // Legacy: track Sync IO only in static stages. + // Do not track it before the render, or in runtime/dynamic stages. + return currentStage > 1 && currentStage <= 14; + } + case 3: + { + // Track sync IO in all cacheable stages. + // This means all stages except: + // - before the render + // - in the dynamic stage + return currentStage > 1 && currentStage < 30; + } + } + } + /** Note: only call this if `shouldTrackSyncInterrupt()` returned true */ syncInterruptCurrentStageWithReason(reason) { + const { currentStage } = this; + if (currentStage === 1 || currentStage === 30 || currentStage === 40) { + // Not interruptible. Defensive noop. + return; + } + // If Sync IO occurs during an abandonable render, we trigger the abandon. + // The abandon listener will call abandonRender which advances through + // stages to let caches fill before marking as Abandoned. + if (this.abandonController) { + this.abandonController.abort(); + return; + } + if (this.abortSignal) { + // If this is an abortable render, we capture the interruption reason and stop advancing. + // We don't release any more promises. + // The caller is expected to abort the signal. + this.syncInterruptReason = reason; + this.currentStage = 40; + return; + } + // If we're in a non-abandonable & non-abortable render, + // we need to advance to the Dynamic stage and capture the interruption reason. + // (in dev, this will be the restarted render) + this.syncInterruptReason = reason; + this.advanceStage(30); + } + getSyncInterruptReason() { + return this.syncInterruptReason; + } + getStageEndTime(stage) { + return this.triggers[getNextStage(stage)].triggeredAt ?? Infinity; + } + abandonRender() { + // In staged rendering, only the initial render is abandonable. + // We can abandon the initial render if + // 1. We notice a cache miss, and need to wait for caches to fill + // 2. A sync IO error occurs, and the render should be interrupted + // (this might be a lazy intitialization of a module, + // so we still want to restart in this case and see if it still occurs) + // In either case, we'll be doing another render after this one, + // so we only want to unblock the next stage, not Dynamic, because + // unblocking the dynamic stage would likely lead to wasted (uncached) IO. + const { currentStage } = this; + if (currentStage === 1) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]("A render that hasn't started yet cannot be abandoned"); + } + if (currentStage === 30 || currentStage === 40) { + // We shouldn't ever trigger an abandon in these. Defensive noop. + return; + } + // Resolve all stages after the current one, up to runtime (excluding dynamic) + const nextStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(currentStage) + 1; + const dynamicStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(30); + for(let i = nextStageIx; i < dynamicStageIx; i++){ + this.resolveStage(RENDER_STAGE_ADVANCE_ORDER[i]); + } + this.currentStage = 40; + } + advanceStage(targetStage) { + if (this.finalStage !== null && targetStage > this.finalStage) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`Attempted to advance to stage ${RenderStage[targetStage]} but the render is limited to ${RenderStage[this.finalStage]}`); + } + const { currentStage } = this; + if (currentStage === 30 || currentStage === 40) { + // Terminal stages, nowhere left to advance. + return; + } + // If we're already at the target stage or beyond, do nothing. + if (targetStage <= currentStage) { + return; + } + this.currentStage = targetStage; + // Resolve all stages between the current stage and the target. + const nextStageIx = currentStage === 1 ? 0 : RENDER_STAGE_ADVANCE_ORDER.indexOf(currentStage) + 1; + const targetStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(targetStage); + for(let i = nextStageIx; i <= targetStageIx; i++){ + this.resolveStage(RENDER_STAGE_ADVANCE_ORDER[i]); + } + } + resolveStage(stage) { + fireStageTrigger(this.triggers[stage]); + } + getStagePromise(stage) { + return this.triggers[stage].promise; + } + waitForStage(stage) { + return this.getStagePromise(stage); + } + delayUntilStage(stage, displayName, resolvedValue) { + const stagePromise = this.getStagePromise(stage); + const promise = ("TURBOPACK compile-time truthy", 1) ? makeDevtoolsIOPromiseFromIOTrigger(stagePromise, displayName, resolvedValue) : "TURBOPACK unreachable"; + // Analogously to `makeDynamicHangingPromise`, we might reject this promise if the signal is invoked. + // (e.g. in the case where we don't want want the render to proceed to the dynamic stage and abort it). + // We shouldn't consider this an unhandled rejection, so we attach a noop catch handler here to suppress this warning. + if (this.abortSignal) { + promise.catch(ignoreReject); + } + return promise; + } +} +function createAdvanceableStageTriggers() { + const triggers = {}; + for (const stage of RENDER_STAGE_ADVANCE_ORDER){ + triggers[stage] = createStageTrigger(); + } + return triggers; +} +function ignoreReject() {} +// TODO(restart-on-cache-miss): the layering of `delayUntilStage`, +// `makeDevtoolsIOPromiseFromIOTrigger` and and `makeDevtoolsIOAwarePromise` +// is confusing, we should clean it up. +function makeDevtoolsIOPromiseFromIOTrigger(ioTrigger, displayName, resolvedValue) { + // If we create a `new Promise` and give it a displayName + // (with no userspace code above us in the stack) + // React Devtools will use it as the IO cause when determining "suspended by". + // In particular, it should shadow any inner IO that resolved/rejected the promise + // (in case of staged rendering, this will be the `setTimeout` that triggers the relevant stage) + const promise = new Promise((resolve, reject)=>{ + ioTrigger.then(resolve.bind(null, resolvedValue), reject); + }); + if (displayName !== undefined) { + // @ts-expect-error + promise.displayName = displayName; + } + return promise; +} +function addSyncTriggerListener(trigger, listener) { + if (trigger.state === 'pending') { + trigger._listeners.push(listener); + } else { + listener(); + } +} +function createStageTrigger() { + const { promise, resolve, reject } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + return { + state: 'pending', + triggeredAt: null, + promise, + _listeners: [], + _resolvePromise: resolve, + _rejectPromise: reject + }; +} +function fireStageTrigger(trigger) { + if (trigger.state !== 'pending') { + return; + } + trigger.state = 'triggered'; + trigger.triggeredAt = performance.now() + performance.timeOrigin; + try { + const { _listeners: listeners } = trigger; + for(let i = 0; i < listeners.length; i++){ + listeners[i](); + } + listeners.length = 0; + } finally{ + trigger._resolvePromise(); + } +} +function cancelStageTrigger(trigger, reason) { + if (trigger.state !== 'pending') { + return; + } + trigger.state = 'cancelled'; + // we didn't trigger, so don't save `triggeredAt`. + // We're not gonna fire the listeners, we may as well free them. + trigger._listeners.length = 0; + // Suppress unhandled rejection warnings for promises that no one is awaiting. + trigger.promise.catch(ignoreReject); + trigger._rejectPromise(reason); +} +}), +"[project]/node_modules/next/dist/esm/server/base-http/helpers.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * This file provides some helpers that should be used in conjunction with + * explicit environment checks. When combined with the environment checks, it + * will ensure that the correct typings are used as well as enable code + * elimination. + */ /** + * Type guard to determine if a request is a WebNextRequest. This does not + * actually check the type of the request, but rather the runtime environment. + * It's expected that when the runtime environment is the edge runtime, that any + * base request is a WebNextRequest. + */ __turbopack_context__.s([ + "isNodeNextRequest", + ()=>isNodeNextRequest, + "isNodeNextResponse", + ()=>isNodeNextResponse, + "isWebNextRequest", + ()=>isWebNextRequest, + "isWebNextResponse", + ()=>isWebNextResponse +]); +const isWebNextRequest = (req)=>("TURBOPACK compile-time value", "nodejs") === 'edge'; +const isWebNextResponse = (res)=>("TURBOPACK compile-time value", "nodejs") === 'edge'; +const isNodeNextRequest = (req)=>("TURBOPACK compile-time value", "nodejs") !== 'edge'; +const isNodeNextResponse = (res)=>("TURBOPACK compile-time value", "nodejs") !== 'edge'; +}), +"[project]/node_modules/next/dist/esm/server/base-http/index.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "BaseNextRequest", + ()=>BaseNextRequest, + "BaseNextResponse", + ()=>BaseNextResponse +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$redirect$2d$status$2d$code$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/redirect-status-code.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$get$2d$cookie$2d$parser$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/api-utils/get-cookie-parser.js [app-route] (ecmascript)"); +; +; +class BaseNextRequest { + constructor(method, url, body){ + this.method = method; + this.url = url; + this.body = body; + } + // Utils implemented using the abstract methods above + get cookies() { + if (this._cookies) return this._cookies; + return this._cookies = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$get$2d$cookie$2d$parser$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getCookieParser"])(this.headers)(); + } +} +class BaseNextResponse { + constructor(destination){ + this.destination = destination; + } + // Utils implemented using the abstract methods above + redirect(destination, statusCode) { + this.setHeader('Location', destination); + this.statusCode = statusCode; + // Since IE11 doesn't support the 308 header add backwards + // compatibility using refresh header + if (statusCode === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$redirect$2d$status$2d$code$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RedirectStatusCode"].PermanentRedirect) { + this.setHeader('Refresh', `0;url=${destination}`); + } + return this; + } +} +}), +"[project]/node_modules/next/dist/esm/server/base-http/node.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "NodeNextRequest", + ()=>NodeNextRequest, + "NodeNextResponse", + ()=>NodeNextResponse +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/api-utils/index.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/request-meta.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/base-http/index.js [app-route] (ecmascript)"); +; +; +; +let prop; +class NodeNextRequest extends __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["BaseNextRequest"] { + static #_ = prop = _NEXT_REQUEST_META = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_REQUEST_META"]; + constructor(_req){ + var _this__req; + super(_req.method.toUpperCase(), _req.url, _req), this._req = _req, this.headers = this._req.headers, this.fetchMetrics = (_this__req = this._req) == null ? void 0 : _this__req.fetchMetrics, this[_NEXT_REQUEST_META] = this._req[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_REQUEST_META"]] || {}, this.streaming = false; + } + get originalRequest() { + // Need to mimic these changes to the original req object for places where we use it: + // render.tsx, api/ssg requests + this._req[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_REQUEST_META"]] = this[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_REQUEST_META"]]; + this._req.url = this.url; + this._req.cookies = this.cookies; + return this._req; + } + set originalRequest(value) { + this._req = value; + } + /** + * Returns the request body as a Web Readable Stream. The body here can only + * be read once as the body will start flowing as soon as the data handler + * is attached. + * + * @internal + */ stream() { + if (this.streaming) { + throw new Error('Invariant: NodeNextRequest.stream() can only be called once'); + } + this.streaming = true; + return new ReadableStream({ + start: (controller)=>{ + this._req.on('data', (chunk)=>{ + controller.enqueue(new Uint8Array(chunk)); + }); + this._req.on('end', ()=>{ + controller.close(); + }); + this._req.on('error', (err)=>{ + controller.error(err); + }); + } + }); + } +} +class NodeNextResponse extends __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["BaseNextResponse"] { + get originalResponse() { + if (__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SYMBOL_CLEARED_COOKIES"] in this) { + this._res[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SYMBOL_CLEARED_COOKIES"]] = this[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SYMBOL_CLEARED_COOKIES"]]; + } + return this._res; + } + constructor(_res){ + super(_res), this._res = _res, this.textBody = undefined; + } + get sent() { + return this._res.finished || this._res.headersSent; + } + get statusCode() { + return this._res.statusCode; + } + set statusCode(value) { + this._res.statusCode = value; + } + get statusMessage() { + return this._res.statusMessage; + } + set statusMessage(value) { + this._res.statusMessage = value; + } + setHeader(name, value) { + this._res.setHeader(name, value); + return this; + } + removeHeader(name) { + this._res.removeHeader(name); + return this; + } + getHeaderValues(name) { + const values = this._res.getHeader(name); + if (values === undefined) return undefined; + return (Array.isArray(values) ? values : [ + values + ]).map((value)=>value.toString()); + } + hasHeader(name) { + return this._res.hasHeader(name); + } + getHeader(name) { + const values = this.getHeaderValues(name); + return Array.isArray(values) ? values.join(',') : undefined; + } + getHeaders() { + return this._res.getHeaders(); + } + appendHeader(name, value) { + const currentValues = this.getHeaderValues(name) ?? []; + if (!currentValues.includes(value)) { + this._res.setHeader(name, [ + ...currentValues, + value + ]); + } + return this; + } + body(value) { + this.textBody = value; + return this; + } + send() { + this._res.end(this.textBody); + } + onClose(callback) { + this.originalResponse.on('close', callback); + } +} +var _NEXT_REQUEST_META; +}), +"[project]/node_modules/next/dist/esm/server/dynamic-rendering-utils.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ClientHookDynamicError", + ()=>ClientHookDynamicError, + "RENDER_STAGES_BY_DATA_KIND", + ()=>RENDER_STAGES_BY_DATA_KIND, + "applyOwnerStack", + ()=>applyOwnerStack, + "createPrerenderDataTracking", + ()=>createPrerenderDataTracking, + "finishPrerenderDataTracking", + ()=>finishPrerenderDataTracking, + "isClientHookDynamicError", + ()=>isClientHookDynamicError, + "isHangingPromiseRejectionError", + ()=>isHangingPromiseRejectionError, + "makeClientHookHangingPromise", + ()=>makeClientHookHangingPromise, + "makeDevtoolsIOAwarePromise", + ()=>makeDevtoolsIOAwarePromise, + "makeDynamicHangingPromise", + ()=>makeDynamicHangingPromise, + "makeFallbackParamsHangingPromise", + ()=>makeFallbackParamsHangingPromise, + "makePrefetchHangingPromise", + ()=>makePrefetchHangingPromise, + "makePromiseFromTrigger", + ()=>makePromiseFromTrigger, + "makeSessionDataHangingPromise", + ()=>makeSessionDataHangingPromise, + "makeURLDataHangingPromise", + ()=>makeURLDataHangingPromise, + "makeUnknownRuntimeDataHangingPromise", + ()=>makeUnknownRuntimeDataHangingPromise, + "makeUntrackedHangingPromise", + ()=>makeUntrackedHangingPromise, + "trackFallbackParamsAccessed", + ()=>trackFallbackParamsAccessed, + "trackIncompatibleShellContent", + ()=>trackIncompatibleShellContent, + "trackPromiseUsed", + ()=>trackPromiseUsed, + "trackURLDataAccessed", + ()=>trackURLDataAccessed +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$segment$2d$config$2f$ensure$2d$static$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/segment-config/ensure-static.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/staged-rendering.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$runtime$2d$reacts$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$runtime$2d$reacts$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/runtime-reacts.external.js [external] (next/dist/server/runtime-reacts.external.js, cjs)"); +; +; +; +; +; +; +; +function isHangingPromiseRejectionError(err) { + if (typeof err !== 'object' || err === null || !('digest' in err)) { + return false; + } + return err.digest === HANGING_PROMISE_REJECTION; +} +const HANGING_PROMISE_REJECTION = 'HANGING_PROMISE_REJECTION'; +class HangingPromiseRejectionError extends Error { + constructor(route, expression){ + super(`During prerendering, ${expression} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${expression} to a different context by using \`setTimeout\`, \`after\`, or similar functions you may observe this error and you should handle it in that context. This occurred at route "${route}".`), this.route = route, this.expression = expression, this.digest = HANGING_PROMISE_REJECTION; + } +} +const CLIENT_HOOK_DYNAMIC = 'CLIENT_HOOK_DYNAMIC'; +class ClientHookDynamicError extends Error { + constructor(route, expression){ + super(`Route "${route}": Next.js encountered URL data \`${expression}\` in a Client Component outside of \`\`.\n\n` + `This blocks prerendering because the value is only available at runtime.\n\n` + `Ways to fix this:\n` + ` - [stream] Wrap the component in \`\` so the hook value streams in after prerendering\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-client-hook`), this.digest = CLIENT_HOOK_DYNAMIC; + } +} +function isClientHookDynamicError(err) { + if (typeof err !== 'object' || err === null || !('digest' in err)) { + return false; + } + return err.digest === CLIENT_HOOK_DYNAMIC; +} +const abortListenersBySignal = new WeakMap(); +function makeDynamicHangingPromise(signal, route, expression) { + return makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); +} +function makeUntrackedHangingPromise(signal, route, expression) { + return makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); +} +function makeSessionDataHangingPromise(signal, route, expression, workUnitStore) { + const promise = makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); + return trackPromiseUsed(promise, trackSessionDataAccessed.bind(null, workUnitStore, expression)); +} +function makeURLDataHangingPromise(signal, route, expression, workUnitStore) { + const promise = makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); + if (workUnitStore === null) { + return promise; + } + return trackPromiseUsed(promise, trackURLDataAccessed.bind(null, workUnitStore, expression)); +} +function makeUnknownRuntimeDataHangingPromise(signal, route, expression, workUnitStore) { + // We don't know if this is session or URL data, i.e. if it should affect the shell + // or only the prefetch. Track it conservatively as affecting both. + return makeSessionDataHangingPromise(signal, route, expression, workUnitStore); +} +function makePrefetchHangingPromise(signal, route, expression) { + return makeUntrackedHangingPromise(signal, route, expression); +} +function makeFallbackParamsHangingPromise(signal, route, expression, workUnitStore) { + const promise = makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); + if (workUnitStore === null) { + return promise; + } + return trackPromiseUsed(promise, trackFallbackParamsAccessed.bind(null, workUnitStore, expression)); +} +function createPrerenderDataTracking() { + return { + runtimeDataAccessed: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(), + shouldAttemptStaticShell: true, + shouldAttemptStaticPrefetch: true + }; +} +function finishPrerenderDataTracking(prerenderDataTracking) { + // If a runtime data access already resolved this promise, this is a no-op. + prerenderDataTracking.runtimeDataAccessed.resolve(false); +} +/** + * Records on a static prerender store that the render accessed a data source + * which would have resolved in a runtime shell (or runtime prefetch). + * No-op for all other store types. + * + * Prefer `makeRuntimeHangingPromise`. Use this function only when implementing + * similar tracking and that one is not enough. + */ function trackSessionDataAccessed(workUnitStore, expression) { + trackRuntimeDataAccessed(workUnitStore, 1, expression); +} +function trackURLDataAccessed(workUnitStore, expression) { + trackRuntimeDataAccessed(workUnitStore, 2, expression); +} +function trackFallbackParamsAccessed(workUnitStore, expression) { + trackRuntimeDataAccessed(workUnitStore, 3, expression); +} +function trackRuntimeDataAccessed(workUnitStore, dataKind, expression) { + switch(workUnitStore.type){ + case 'prerender': + { + const { prerenderDataTracking, stagedRendering } = workUnitStore; + if (!prerenderDataTracking || !stagedRendering) { + return; + } + const { currentStage } = stagedRendering; + if (currentStage === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Before) { + console.error(new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('Unexpected trackRuntimeDataAccessed in the Before stage.')); + return; + } + if (currentStage >= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].NavigationStatic) { + // Ignore any accesses that happen after `navigation()` resolves. + // The purpose of this tracking is to judge whether a runtime prefetch + // would give us a more complete result than a static one. + // But `navigation()` wouldn't have resolved in a runtime prefetch, + // so e.g. `await navigation(); await cookies()` wouldn't have more content + // in those, and we shouldn't count it. + return; + } + const ensureStaticLevel = workUnitStore.ensureStaticLevel ?? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$segment$2d$config$2f$ensure$2d$static$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["EnsureStaticLevel"].None; + // NOTE: In general, we keep hints in sync with `needsRuntimeRequest`, but they + // don't have to always match. The client re-uses hints for the entire route, + // while `needsRuntimeRequest` can vary across individual prerendered param values + // (e.g. if cookies are accessed depending on a param value). + // Hints can also become outdated if a route only starts using runtime data + // after a revalidation, so we have to expect this and be resilient to it. + // Also see the upgradeable fallback params case below, which deliberately + // puts them out of sync. + switch(dataKind){ + case 1: + { + // Potentially deopt both the shell and the prefetch, + // because if the shell accessed runtime data, so does the prefetch. + // However, if we're already past the shell stage, the shell is not affected. + // (which makes e.g. `await prefetch(); await cookies()` only affect the prefetch) + let firstAffectedStage = null; + if (currentStage <= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].ShellStatic && // Only track if we're not forcing the shell to be static. + ensureStaticLevel < __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$segment$2d$config$2f$ensure$2d$static$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["EnsureStaticLevel"].Shell) { + prerenderDataTracking.shouldAttemptStaticShell = false; + firstAffectedStage ??= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].ShellStatic; + logRuntimeDeopt == null ? void 0 : logRuntimeDeopt(expression, 'shell'); + } + if (currentStage <= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchStatic && // Only track if we're not forcing the prefetch to be static. + ensureStaticLevel < __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$segment$2d$config$2f$ensure$2d$static$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["EnsureStaticLevel"].Prefetch) { + prerenderDataTracking.shouldAttemptStaticPrefetch = false; + // NOTE: if the shell is affected, don't override it. + firstAffectedStage ??= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchStatic; + logRuntimeDeopt == null ? void 0 : logRuntimeDeopt(expression, 'prefetch'); + } + if (firstAffectedStage !== null) { + markRuntimeDataAccessWhenStageReached(prerenderDataTracking, stagedRendering, firstAffectedStage); + } + break; + } + case 3: + { + if (workUnitStore.isFallbackUpgradeable) { + // An fallback-param access is transient when the route is + // fallback-upgradeable (i.e. ISR later produces the concrete prerender a + // static prefetch would hit) so it does not indicate the need for a runtime + // request and thus does not affect the static hints. + // + // If runtime prefetches are not disallowed by `ensureStatic`, then we still + // set `runtimeDataAccessed` (while keeping the hints static). This means that + // if the concrete prerender isn't ready yet and we served the fallback, then + // the client knows it can use a *runtime* prefetch for speculative links -- + // a runtime prefetch can provide the same content (or more) as the concrete + // prerender would. + if (ensureStaticLevel < __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$segment$2d$config$2f$ensure$2d$static$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["EnsureStaticLevel"].Prefetch) { + markRuntimeDataAccessWhenStageReached(prerenderDataTracking, stagedRendering, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchStatic); + logRuntimeUpgradeableFallback == null ? void 0 : logRuntimeUpgradeableFallback(); + } + break; + } + // not an upgradeable fallback param access, so we treat it as URL data. + // intentional fallthrough + } + case 2: + { + // Only deopt the prefetch, not the shell, which cannot access URL data anyway. + if (currentStage <= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchStatic && ensureStaticLevel < __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$segment$2d$config$2f$ensure$2d$static$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["EnsureStaticLevel"].Prefetch) { + prerenderDataTracking.shouldAttemptStaticPrefetch = false; + logRuntimeDeopt == null ? void 0 : logRuntimeDeopt(expression, 'prefetch'); + markRuntimeDataAccessWhenStageReached(prerenderDataTracking, stagedRendering, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchStatic); + } + break; + } + } + break; + } + case 'prerender-client': + case 'prerender-legacy': + case 'prerender-runtime': + case 'validation-client': + case 'request': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } +} +/** + * Tracks a runtime data access on the `runtimeDataAccessed` promise, + * but with a delay until `targetStage`. + * + * When we encounter a URL data access like `await params`, we need to mark the + * *prefetch* as needing runtime data, but the *shell* should remain unaffected + * (because it cannot access params anyway). + * + * However, the shell and the prefetch share one `runtimeDataAccessed` promise, + * and it needs to be accurately rewindable by the client + * In other words, we need to make sure that it reads as `false` when rewound + * to a shell, but as `true` in the final response (the prefetch). + * + * This means that if the `await params` is encountered during the shell stage, we + * cannot resolve `runtimeDataAccessed` immediately. + * Instead, we delay the resolution until the PrefetchStatic stage, so the promise + * will remain unresolved when rewound to the shell stage (which reads as `false`). + */ function markRuntimeDataAccessWhenStageReached(prerenderDataTracking, stageController, targetStage) { + const { runtimeDataAccessed } = prerenderDataTracking; + // NOTE: If we're already in or past the target stage, we can avoid allocating a closure, + // because `onStage` would've executed the callback immediately anyway. + if (stageController.currentStage >= targetStage) { + runtimeDataAccessed.resolve(true); + } else { + stageController.onStage(targetStage, runtimeDataAccessed.resolve.bind(null, true)); + } +} +const logRuntimeDeopt = process.env.NEXT_PRIVATE_DEBUG_RUNTIME_DATA ? (expression, kind)=>{ + const { route } = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + console.log(`Route '${route}': deopting to a runtime ${kind} because it used ${expression}`); +} : undefined; +const logRuntimeUpgradeableFallback = process.env.NEXT_PRIVATE_DEBUG_RUNTIME_DATA ? ()=>{ + const { route } = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + console.log(`Route '${route}': marking upgradeable fallback as runtime prefetchable`); +} : undefined; +function trackIncompatibleShellContent(workUnitStore, reason) { + const { stagedRendering } = workUnitStore; + if (!stagedRendering) { + return; + } + // TODO(app-shells): optimize this to only consider stages that are relevant for validation. + // We should only track incompatible content when it can affect them. + // For now, we simply exclude everything that happens in the dynamic stage. + // (Note that we also need to account for cache misses that move things to a + // different stage -- those should also preemptively set `hasIncompatibleShellContent` + // because there's a chance that a render with warm caches would set it) + const { currentStage } = stagedRendering; + if (currentStage === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic || currentStage === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Abandoned) { + return; + } + if (process.env.NEXT_PRIVATE_DEBUG_VALIDATION) { + const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + console.log(`Route ${workStore.route}: Incompatible shell content: ${reason}`); + } + workUnitStore.hasIncompatibleShellContent = true; +} +function makeClientHookHangingPromise(signal, error) { + return makeHangingPromiseWithError(signal, error); +} +function makeHangingPromiseWithError(signal, error) { + if (signal.aborted) { + return Promise.reject(error); + } else { + const hangingPromise = new Promise((_, reject)=>{ + const boundRejection = reject.bind(null, error); + let currentListeners = abortListenersBySignal.get(signal); + if (currentListeners) { + currentListeners.push(boundRejection); + } else { + const listeners = [ + boundRejection + ]; + abortListenersBySignal.set(signal, listeners); + signal.addEventListener('abort', ()=>{ + for(let i = 0; i < listeners.length; i++){ + listeners[i](); + } + }, { + once: true + }); + } + }); + // We are fine if no one actually awaits this promise. We shouldn't consider this an unhandled rejection so + // we attach a noop catch handler here to suppress this warning. If you actually await somewhere or construct + // your own promise out of it you'll need to ensure you handle the error when it rejects. + hangingPromise.catch(ignoreReject); + return hangingPromise; + } +} +function ignoreReject() {} +function makePromiseFromTrigger(trigger, value) { + const promise = trigger.then(()=>value); + promise.catch(ignoreReject); + return promise; +} +function makeDevtoolsIOAwarePromise(underlying, requestStore, stage) { + if (requestStore.stagedRendering) { + // We resolve each stage in a timeout, so React DevTools will pick this up as IO. + return requestStore.stagedRendering.delayUntilStage(stage, undefined, underlying); + } + // in React DevTools if we resolve in a setTimeout we will observe + // the promise resolution as something that can suspend a boundary or root. + return new Promise((resolve)=>{ + // Must use setTimeout to be considered IO React DevTools. setImmediate will not work. + setTimeout(()=>{ + resolve(underlying); + }, 0); + }); +} +function trackPromiseUsed(promise, onUse) { + // We can instrument `.then()/.catch()/.finally()` in one go by using a Promise subclass + // that implements a custom `.then()`, because `catch` and `finally` delegate to it. + // + // Alternative implementation ideas that were tried and rejected: + // + // 1. Patching the methods directly via `promise.then = (..args) => { ... }`: + // doesn't work, because Node does not call the monkeypatched methods for native `await`: + // > Native Promise [...]: The promise is directly used and awaited natively, without calling `then()`. + // > https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await#description + // + // 2. Wrapping in a proxy that returns a custom `then/catch/finally`: + // breaks async stacks in React's IO tracking (stack becomes `Promise.then`) + return TrackedPromise.from(promise, onUse); +} +class TrackedPromise extends Promise { + #onUse; + // We don't need derived promises to also be a TrackedPromise. + // We only care about the first level of `.then()`. + static get [Symbol.species]() { + return Promise; + } + static from(promise, onUse) { + // Whenever the promise we're tracking resolves/rejects, we should follow. + const tracked = new TrackedPromise(promise.then.bind(promise)); + tracked.#onUse = onUse; + // Hanging promises catch rejections when created. Tracked promises are generally derived + // from promises that may hang & reject, so we need to do the same. + // However, we have to bypass the tracking we do in `TrackedPromise.then`. + // (we're using `then` directly, because `catch` ends up delegating `TrackedPromise.then`) + Promise.prototype.then.call(tracked, undefined, ignoreReject); + return tracked; + } + then(onFulfilled, onRejected) { + const onUse = this.#onUse; + if (onUse) { + try { + onUse(); + } catch (err) { + // We don't want to break the method even if our tracking errored. + console.error(err); + } + } + return Promise.prototype.then.call(this, onFulfilled, onRejected); + } + constructor(...args){ + super(...args), this.#onUse = null; + } +} +const RENDER_STAGES_BY_DATA_KIND = { + sessionData: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].ShellRuntime, + /** + * Statically-prerenderable URL data, like static `params`. + * It may need to be pushed to a runtime stage in a runtime prerender, + * but it's semantically distinct from `runtimeUrlData` like `searchParams`, + * which is always excluded from static prerenders. + * */ staticUrlData: { + /** + * From that app's point of view, `prefetch()` is semantically the same as + * `staticUrlData`, because it does not resolve in a shell but resolves in + * a prefetch (even a static one). + * We handle it separately to provide a specialized error in validation renders. + */ prefetchApi: { + static: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchStatic_prefetchApi, + runtime: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchRuntime_prefetchApi + }, + static: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchStatic, + runtime: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchRuntime + }, + /** + * URL data that is never statically-prerenderable, like static `searchParams`. + * */ runtimeUrlData: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchRuntime +}; +function applyOwnerStack(error) { + if ("TURBOPACK compile-time truthy", 1) { + var _getClientReact_captureOwnerStack, _getClientReact, _getServerReact_captureOwnerStack, _getServerReact; + let ownerStack; + const workUnitStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workUnitAsyncStorage"].getStore(); + // captureOwnerStack() returns the owner stack for the current React + // rendering context. Inside a cache scope this only includes the inner + // component tree. The outer owner stack (captured before entering the + // cache boundary in use-cache-wrapper.ts) is stored on the cache store. + // We concatenate both to get the full component tree. + const innerOwnerStack = ((_getClientReact = (0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$runtime$2d$reacts$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$runtime$2d$reacts$2e$external$2e$js$2c$__cjs$29$__["getClientReact"])()) == null ? void 0 : (_getClientReact_captureOwnerStack = _getClientReact.captureOwnerStack) == null ? void 0 : _getClientReact_captureOwnerStack.call(_getClientReact)) ?? ((_getServerReact = (0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$runtime$2d$reacts$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$runtime$2d$reacts$2e$external$2e$js$2c$__cjs$29$__["getServerReact"])()) == null ? void 0 : (_getServerReact_captureOwnerStack = _getServerReact.captureOwnerStack) == null ? void 0 : _getServerReact_captureOwnerStack.call(_getServerReact)); + switch(workUnitStore == null ? void 0 : workUnitStore.type){ + case 'cache': + case 'private-cache': + ownerStack = (innerOwnerStack || '') + (workUnitStore.outerOwnerStack || '') || undefined; + break; + case 'unstable-cache': + case 'request': + case 'prerender': + case 'prerender-legacy': + case 'prerender-runtime': + case 'prerender-client': + case 'validation-client': + case 'build-time-generator': + case undefined: + ownerStack = innerOwnerStack; + break; + default: + workUnitStore; + } + if (ownerStack) { + let stack = ownerStack; + if (error.stack) { + const frames = []; + for (const frame of error.stack.split('\n').slice(1)){ + if (frame.includes('react_stack_bottom_frame')) { + break; + } + frames.push(frame); + } + stack = '\n' + frames.join('\n') + stack; + } + error.stack = error.name + ': ' + error.message + stack; + } + } + return error; +} +}), +"[project]/node_modules/next/dist/esm/server/instrumentation/utils.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getRevalidateReason", + ()=>getRevalidateReason +]); +function getRevalidateReason(params) { + if (params.isOnDemandRevalidate) { + return 'on-demand'; + } + if (params.isStaticGeneration) { + return 'stale'; + } + return undefined; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/app-dir-module.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getComponentTypeModule", + ()=>getComponentTypeModule, + "getLayoutOrPageModule", + ()=>getLayoutOrPageModule +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/segment.js [app-route] (ecmascript)"); +; +async function getLayoutOrPageModule(loaderTree) { + const { layout, page, defaultPage } = loaderTree[2]; + const isLayout = typeof layout !== 'undefined'; + const isPage = typeof page !== 'undefined'; + const isDefaultPage = typeof defaultPage !== 'undefined' && loaderTree[0] === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["DEFAULT_SEGMENT_KEY"]; + let mod = undefined; + let modType = undefined; + let filePath = undefined; + if (isLayout) { + mod = await layout[0](); + modType = 'layout'; + filePath = layout[1]; + } else if (isPage) { + mod = await page[0](); + modType = 'page'; + filePath = page[1]; + } else if (isDefaultPage) { + mod = await defaultPage[0](); + modType = 'page'; + filePath = defaultPage[1]; + } + return { + mod, + modType, + filePath + }; +} +async function getComponentTypeModule(loaderTree, moduleType) { + const { [moduleType]: module } = loaderTree[2]; + if (typeof module !== 'undefined') { + return await module[0](); + } + return undefined; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/cache-control.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getCacheControlHeader", + ()=>getCacheControlHeader +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)"); +; +function getCacheControlHeader({ revalidate, expire }) { + const swrHeader = typeof revalidate === 'number' && expire !== undefined && revalidate < expire ? `, stale-while-revalidate=${expire - revalidate}` : ''; + if (revalidate === 0) { + return 'private, no-cache, no-store, max-age=0, must-revalidate'; + } else if (typeof revalidate === 'number') { + return `s-maxage=${revalidate}${swrHeader}`; + } + return `s-maxage=${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CACHE_ONE_YEAR_SECONDS"]}${swrHeader}`; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/clone-response.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "cloneResponse", + ()=>cloneResponse +]); +const noop = ()=>{}; +let registry; +if (globalThis.FinalizationRegistry) { + registry = new FinalizationRegistry((weakRef)=>{ + const stream = weakRef.deref(); + if (stream && !stream.locked) { + stream.cancel('Response object has been garbage collected').then(noop); + } + }); +} +function cloneResponse(original) { + // If the response has no body, then we can just return the original response + // twice because it's immutable. + if (!original.body) { + return [ + original, + original + ]; + } + const [body1, body2] = original.body.tee(); + const cloned1 = new Response(body1, { + status: original.status, + statusText: original.statusText, + headers: original.headers + }); + Object.defineProperty(cloned1, 'url', { + value: original.url, + // How the original response.url behaves + configurable: true, + enumerable: true, + writable: false + }); + const cloned2 = new Response(body2, { + status: original.status, + statusText: original.statusText, + headers: original.headers + }); + Object.defineProperty(cloned2, 'url', { + value: original.url, + // How the original response.url behaves + configurable: true, + enumerable: true, + writable: false + }); + // The Fetch Standard allows users to skip consuming the response body by + // relying on garbage collection to release connection resources. + // https://github.com/nodejs/undici?tab=readme-ov-file#garbage-collection + // + // To cancel the stream you then need to cancel both resulting branches. + // Teeing a stream will generally lock it for the duration, preventing other + // readers from locking it. + // https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/tee + if (registry) { + if (cloned1.body) { + registry.register(cloned1, new WeakRef(cloned1.body)); + } + if (cloned2.body) { + registry.register(cloned2, new WeakRef(cloned2.body)); + } + } + return [ + cloned1, + cloned2 + ]; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/dedupe-fetch.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "createDedupeFetch", + ()=>createDedupeFetch +]); +/** + * Based on https://github.com/facebook/react/blob/d4e78c42a94be027b4dc7ed2659a5fddfbf9bd4e/packages/react/src/ReactFetch.js + */ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/clone-response.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +; +; +; +const simpleCacheKey = '["GET",[],null,"follow",null,null,null,null]' // generateCacheKey(new Request('https://blank')); +; +// Headers that should not affect deduplication +// traceparent and tracestate are used for distributed tracing and should not affect cache keys +const headersToExcludeInCacheKey = new Set([ + 'traceparent', + 'tracestate' +]); +function generateCacheKey(request) { + // We pick the fields that goes into the key used to dedupe requests. + // We don't include the `cache` field, because we end up using whatever + // caching resulted from the first request. + // Notably we currently don't consider non-standard (or future) options. + // This might not be safe. TODO: warn for non-standard extensions differing. + // IF YOU CHANGE THIS UPDATE THE simpleCacheKey ABOVE. + const filteredHeaders = Array.from(request.headers.entries()).filter(([key])=>!headersToExcludeInCacheKey.has(key.toLowerCase())); + return JSON.stringify([ + request.method, + filteredHeaders, + request.mode, + request.redirect, + request.credentials, + request.referrer, + request.referrerPolicy, + request.integrity + ]); +} +function createDedupeFetch(originalFetch) { + const getCacheEntries = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["cache"]((url)=>[]); + return function dedupeFetch(resource, options) { + if (options && options.signal) { + // If we're passed a signal, then we assume that + // someone else controls the lifetime of this object and opts out of + // caching. It's effectively the opt-out mechanism. + // Ideally we should be able to check this on the Request but + // it always gets initialized with its own signal so we don't + // know if it's supposed to override - unless we also override the + // Request constructor. + return originalFetch(resource, options); + } + // Normalize the Request + let url; + let cacheKey; + if (typeof resource === 'string' && !options) { + // Fast path. + cacheKey = simpleCacheKey; + url = resource; + } else { + // Normalize the request. + // if resource is not a string or a URL (its an instance of Request) + // then do not instantiate a new Request but instead + // reuse the request as to not disturb the body in the event it's a ReadableStream. + const request = typeof resource === 'string' || resource instanceof URL ? new Request(resource, options) : resource; + if (request.method !== 'GET' && request.method !== 'HEAD' || request.keepalive) { + // We currently don't dedupe requests that might have side-effects. Those + // have to be explicitly cached. We assume that the request doesn't have a + // body if it's GET or HEAD. + // keepalive gets treated the same as if you passed a custom cache signal. + return originalFetch(resource, options); + } + cacheKey = generateCacheKey(request); + url = request.url; + } + const cacheEntries = getCacheEntries(url); + for(let i = 0, j = cacheEntries.length; i < j; i += 1){ + const [key, promise] = cacheEntries[i]; + if (key === cacheKey) { + return promise.then(()=>{ + const response = cacheEntries[i][2]; + if (!response) throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('No cached response'); + // We're cloning the response using this utility because there exists + // a bug in the undici library around response cloning. See the + // following pull request for more details: + // https://github.com/vercel/next.js/pull/73274 + const [cloned1, cloned2] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["cloneResponse"])(response); + cacheEntries[i][2] = cloned2; + return cloned1; + }); + } + } + // We pass the original arguments here in case normalizing the Request + // doesn't include all the options in this environment. + const promise = originalFetch(resource, options); + const entry = [ + cacheKey, + promise, + null + ]; + cacheEntries.push(entry); + return promise.then((response)=>{ + // We're cloning the response using this utility because there exists + // a bug in the undici library around response cloning. See the + // following pull request for more details: + // https://github.com/vercel/next.js/pull/73274 + const [cloned1, cloned2] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["cloneResponse"])(response); + entry[2] = cloned2; + return cloned1; + }); + }; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/encode-header-safe.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "encodeHeaderSafe", + ()=>encodeHeaderSafe +]); +/** + * Percent-encode every character other than horizontal tab and printable ASCII + * so a value can be safely serialized into an HTTP header. + * + * Node's `validateHeaderValue` and `fetch`'s ByteString conversion accept + * different character ranges. Restricting values to `\t\x20-\x7e` produces a + * conservative representation that both can serialize. Characters outside a + * transport's accepted range (Hebrew, Arabic, Chinese, emoji, …) would + * otherwise throw `ERR_INVALID_CHAR` or a `TypeError`, which crashes ISR or + * fails a cache read on every affected request. + * + * Cache tags are encoded at the public boundaries — tag construction + * (`getImplicitTags`, `validateTags`) and invalidation input + * (`revalidatePath`, `revalidateTag`, `updateTag`) — so storage, comparison, + * and the wire all see the same canonical form. + * + * The class is narrower than either transport accepts. Everything inside it + * passes through byte-for-byte, including `,`, `/`, `%`, `[`, `]`, `_`, `-` and + * `\t`, which preserves the comma-separated header format and the + * dynamic-segment markers in derived tags (`_N_T_/[slug]/page`). + * + * Properties: + * - Fast-path: input that already fits the class is returned unchanged. This + * makes the encoder idempotent on already-encoded `%xx` sequences. + * - Matches *runs* of out-of-class code units so surrogate pairs (e.g. an + * emoji) are handed to `encodeURIComponent` as a complete code point — a + * per-code-unit regex would split the pair and throw `URIError`. + */ const OUT_OF_CLASS_CHAR = /[^\t\x20-\x7e]/; +const OUT_OF_CLASS_RUN = /[^\t\x20-\x7e]+/g; +function encodeHeaderSafe(value) { + return OUT_OF_CLASS_CHAR.test(value) ? value.replace(OUT_OF_CLASS_RUN, (run)=>encodeURIComponent(run)) : value; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/lru-cache.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "LRUCache", + ()=>LRUCache +]); +/** + * Node in the doubly-linked list used for LRU tracking. + * Each node represents a cache entry with bidirectional pointers. + */ class LRUNode { + constructor(key, data, size){ + this.prev = null; + this.next = null; + this.key = key; + this.data = data; + this.size = size; + } +} +/** + * Sentinel node used for head/tail boundaries. + * These nodes don't contain actual cache data but simplify list operations. + */ class SentinelNode { + constructor(){ + this.prev = null; + this.next = null; + } +} +class LRUCache { + constructor(maxSize, calculateSize, onEvict){ + this.cache = new Map(); + this.totalSize = 0; + this.maxSize = maxSize; + this.calculateSize = calculateSize; + this.onEvict = onEvict; + // Create sentinel nodes to simplify doubly-linked list operations + // HEAD <-> TAIL (empty list) + this.head = new SentinelNode(); + this.tail = new SentinelNode(); + this.head.next = this.tail; + this.tail.prev = this.head; + } + /** + * Adds a node immediately after the head (marks as most recently used). + * Used when inserting new items or when an item is accessed. + * PRECONDITION: node must be disconnected (prev/next should be null) + */ addToHead(node) { + node.prev = this.head; + node.next = this.head.next; + // head.next is always non-null (points to tail or another node) + this.head.next.prev = node; + this.head.next = node; + } + /** + * Removes a node from its current position in the doubly-linked list. + * Updates the prev/next pointers of adjacent nodes to maintain list integrity. + * PRECONDITION: node must be connected (prev/next are non-null) + */ removeNode(node) { + // Connected nodes always have non-null prev/next + node.prev.next = node.next; + node.next.prev = node.prev; + } + /** + * Moves an existing node to the head position (marks as most recently used). + * This is the core LRU operation - accessed items become most recent. + */ moveToHead(node) { + this.removeNode(node); + this.addToHead(node); + } + /** + * Removes and returns the least recently used node (the one before tail). + * This is called during eviction when the cache exceeds capacity. + * PRECONDITION: cache is not empty (ensured by caller) + */ removeTail() { + const lastNode = this.tail.prev; + // tail.prev is always non-null and always LRUNode when cache is not empty + this.removeNode(lastNode); + return lastNode; + } + /** + * Sets a key-value pair in the cache. + * If the key exists, updates the value and moves to head. + * If new, adds at head and evicts from tail if necessary. + * + * Time Complexity: + * - O(1) for uniform item sizes + * - O(k) where k is the number of items evicted (can be O(N) for variable sizes) + */ set(key, value) { + const size = (this.calculateSize == null ? void 0 : this.calculateSize.call(this, value, key)) ?? 1; + if (size <= 0) { + throw new Error(`LRUCache: calculateSize returned ${size}, but size must be > 0. ` + `Items with size 0 would never be evicted, causing unbounded cache growth.`); + } + if (size > this.maxSize) { + console.warn('Single item size exceeds maxSize'); + return false; + } + const existing = this.cache.get(key); + if (existing) { + // Update existing node: adjust size and move to head (most recent) + existing.data = value; + this.totalSize = this.totalSize - existing.size + size; + existing.size = size; + this.moveToHead(existing); + } else { + // Add new node at head (most recent position) + const newNode = new LRUNode(key, value, size); + this.cache.set(key, newNode); + this.addToHead(newNode); + this.totalSize += size; + } + // Evict least recently used items until under capacity + while(this.totalSize > this.maxSize && this.cache.size > 0){ + const tail = this.removeTail(); + this.cache.delete(tail.key); + this.totalSize -= tail.size; + this.onEvict == null ? void 0 : this.onEvict.call(this, tail.key, tail.data); + } + return true; + } + /** + * Checks if a key exists in the cache. + * This is a pure query operation - does NOT update LRU order. + * + * Time Complexity: O(1) + */ has(key) { + return this.cache.has(key); + } + /** + * Retrieves a value by key and marks it as most recently used. + * Moving to head maintains the LRU property for future evictions. + * + * Time Complexity: O(1) + */ get(key) { + const node = this.cache.get(key); + if (!node) return undefined; + // Mark as most recently used by moving to head + this.moveToHead(node); + return node.data; + } + /** + * Returns an iterator over the cache entries. The order is outputted in the + * order of most recently used to least recently used. + */ *[Symbol.iterator]() { + let current = this.head.next; + while(current && current !== this.tail){ + // Between head and tail, current is always LRUNode + const node = current; + yield [ + node.key, + node.data + ]; + current = current.next; + } + } + /** + * Removes a specific key from the cache. + * Updates both the hash map and doubly-linked list. + * + * Note: This is an explicit removal and does NOT trigger the `onEvict` + * callback. Use this for intentional deletions where eviction tracking + * is not needed. + * + * Time Complexity: O(1) + */ remove(key) { + const node = this.cache.get(key); + if (!node) return; + this.removeNode(node); + this.cache.delete(key); + this.totalSize -= node.size; + } + /** + * Returns the number of items in the cache. + */ get size() { + return this.cache.size; + } + /** + * Returns the current total size of all cached items. + * This uses the custom size calculation if provided. + */ get currentSize() { + return this.totalSize; + } +} +}), +"[project]/node_modules/next/dist/esm/server/lib/patch-fetch.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "NEXT_PATCH_SYMBOL", + ()=>NEXT_PATCH_SYMBOL, + "createPatchedFetcher", + ()=>createPatchedFetcher, + "patchFetch", + ()=>patchFetch, + "validateRevalidate", + ()=>validateRevalidate, + "validateTags", + ()=>validateTags +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$request$2d$insights$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/request-insights.js [app-route] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$span$2d$store$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/span-store.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$request$2d$insights$2d$identity$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/request-insights-identity.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$dynamic$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/dynamic-rendering.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/dynamic-rendering-utils.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$dedupe$2d$fetch$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/dedupe-fetch.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/index.js [app-route] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/types.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/clone-response.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/staged-rendering.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$encode$2d$header$2d$safe$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/encode-header-safe.js [app-route] (ecmascript)"); +; +; +; +; +; +; +; +; +; +; +; +; +; +const isEdgeRuntime = ("TURBOPACK compile-time value", "nodejs") === 'edge'; +/** + * Whether fetch cache configuration needs to be processed for the current work + * unit before an origin fetch. Static prerender stores use it for dynamic + * access tracking. Cache scopes apply it to their own cache policy, regardless + * of which outer work unit created them. Development staged renders additionally + * coordinate dynamic fetches with the dynamic render stage. + */ function shouldProcessFetchConfigForWorkUnit(workUnitStore) { + if (!workUnitStore) { + return false; + } + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + return true; + case 'request': + return Boolean(("TURBOPACK compile-time value", "development") === 'development' && ("TURBOPACK compile-time value", true) && workUnitStore.stagedRendering); + case 'prerender-runtime': + case 'validation-client': + case 'build-time-generator': + return false; + default: + return workUnitStore; + } +} +const NEXT_PATCH_SYMBOL = Symbol.for('next-patch'); +function isFetchPatched() { + return globalThis[NEXT_PATCH_SYMBOL] === true; +} +function validateRevalidate(revalidateVal, route) { + try { + let normalizedRevalidate = undefined; + if (revalidateVal === false || revalidateVal === Infinity) { + // Unlike Infinity, INFINITE_CACHE survives JSON serialization (e.g. in + // the fetch cache). + normalizedRevalidate = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"]; + } else if (typeof revalidateVal === 'number' && !isNaN(revalidateVal) && revalidateVal > -1) { + normalizedRevalidate = revalidateVal; + } else if (typeof revalidateVal !== 'undefined') { + throw new Error(`Invalid revalidate value "${revalidateVal}" on "${route}", must be a non-negative number or false`); + } + return normalizedRevalidate; + } catch (err) { + // handle client component error from attempting to check revalidate value + if (err instanceof Error && err.message.includes('Invalid revalidate')) { + throw err; + } + return undefined; + } +} +function validateTags(tags, description) { + const validTags = []; + const invalidTags = []; + for(let i = 0; i < tags.length; i++){ + const tag = tags[i]; + if (typeof tag !== 'string') { + invalidTags.push({ + tag, + reason: 'invalid type, must be a string' + }); + } else if (tag.length > __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAG_MAX_LENGTH"]) { + invalidTags.push({ + tag, + reason: `exceeded max length of ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAG_MAX_LENGTH"]}` + }); + } else { + // Encode so a non-ASCII tag can be safely serialized into the + // `x-next-cache-tags` HTTP header without tripping Node's header + // validation. Length is checked on the raw input above. + validTags.push((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$encode$2d$header$2d$safe$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["encodeHeaderSafe"])(tag)); + } + if (validTags.length > __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAG_MAX_ITEMS"]) { + console.warn(`Warning: exceeded max tag count for ${description}, dropped tags:`, tags.slice(i).join(', ')); + break; + } + } + if (invalidTags.length > 0) { + console.warn(`Warning: invalid tags passed to ${description}: `); + for (const { tag, reason } of invalidTags){ + console.log(`tag: "${tag}" ${reason}`); + } + } + return validTags; +} +function trackFetchMetric(workStore, span, ctx) { + const metric = { + ...ctx, + end: performance.timeOrigin + performance.now(), + idx: workStore.nextFetchId || 0 + }; + span == null ? void 0 : span.setAttributes({ + 'http.status_code': metric.status, + 'next.fetch.idx': metric.idx, + 'next.fetch.cache_status': metric.cacheStatus, + 'next.fetch.cache_reason': metric.cacheReason + }); + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$span$2d$store$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isRequestInsightsEnabled"])()) { + const requestInsightsIdentity = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$request$2d$insights$2d$identity$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestInsightsIdentity"])(); + const requestInsightsRequestId = (requestInsightsIdentity == null ? void 0 : requestInsightsIdentity.requestId) ?? workStore.requestId; + if (requestInsightsRequestId) { + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$request$2d$insights$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__["recordRequestInsightFetch"])({ + requestId: requestInsightsRequestId, + kind: requestInsightsIdentity == null ? void 0 : requestInsightsIdentity.kind, + htmlRequestId: (requestInsightsIdentity == null ? void 0 : requestInsightsIdentity.htmlRequestId) ?? workStore.htmlRequestId, + route: workStore.route + }, { + url: metric.url, + method: metric.method, + statusCode: metric.status, + startTime: metric.start, + durationMs: metric.end - metric.start, + cacheStatus: metric.cacheStatus, + cacheReason: metric.cacheReason, + index: metric.idx + }); + } + } + if (!workStore.shouldTrackFetchMetrics) { + return; + } + workStore.fetchMetrics ??= []; + workStore.fetchMetrics.push(metric); +} +async function createCachedPrerenderResponse(res, cacheKey, incrementalCacheContext, incrementalCache, revalidate, handleUnlock) { + // We are prerendering at build time or revalidate time with cacheComponents so we + // need to buffer the response so we can guarantee it can be read in a + // microtask. + const bodyBuffer = await res.arrayBuffer(); + const fetchedData = { + headers: Object.fromEntries(res.headers.entries()), + body: Buffer.from(bodyBuffer).toString('base64'), + status: res.status, + url: res.url + }; + // We can skip setting the serverComponentsHmrCache because we aren't in dev + // mode. + if (incrementalCacheContext) { + await incrementalCache.set(cacheKey, { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].FETCH, + data: fetchedData, + revalidate + }, incrementalCacheContext); + } + await handleUnlock(); + // We return a new Response to the caller. + return new Response(bodyBuffer, { + headers: res.headers, + status: res.status, + statusText: res.statusText + }); +} +async function createCachedDynamicResponse(workStore, res, cacheKey, incrementalCacheContext, incrementalCache, serverComponentsHmrCache, revalidate, input, handleUnlock, signal) { + // We're cloning the response using this utility because there exists a bug in + // the undici library around response cloning. See the following pull request + // for more details: https://github.com/vercel/next.js/pull/73274 + const [cloned1, cloned2] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["cloneResponse"])(res); + // We are dynamically rendering including dev mode. We want to return the + // response to the caller as soon as possible because it might stream over a + // very long time. + const cacheSetPromise = cloned1.arrayBuffer().then(async (arrayBuffer)=>{ + const bodyBuffer = Buffer.from(arrayBuffer); + const fetchedData = { + headers: Object.fromEntries(cloned1.headers.entries()), + body: bodyBuffer.toString('base64'), + status: cloned1.status, + url: cloned1.url + }; + serverComponentsHmrCache == null ? void 0 : serverComponentsHmrCache.set(cacheKey, fetchedData); + if (incrementalCacheContext) { + await incrementalCache.set(cacheKey, { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].FETCH, + data: fetchedData, + revalidate + }, incrementalCacheContext); + } + }).catch((error)=>{ + // Don't warn if the request was aborted intentionally. + if (!(signal == null ? void 0 : signal.aborted)) { + console.warn(`Failed to set fetch cache`, input, error); + } + }).finally(handleUnlock); + const pendingRevalidateKey = `cache-set-${cacheKey}`; + const pendingRevalidates = workStore.pendingRevalidates ??= {}; + let pendingRevalidatePromise = Promise.resolve(); + if (pendingRevalidateKey in pendingRevalidates) { + // There is already a pending revalidate entry that we need to await to + // avoid race conditions. + pendingRevalidatePromise = pendingRevalidates[pendingRevalidateKey]; + } + pendingRevalidates[pendingRevalidateKey] = pendingRevalidatePromise.then(()=>cacheSetPromise).finally(()=>{ + // If the pending revalidate is not present in the store, then we have + // nothing to delete. + if (!(pendingRevalidates == null ? void 0 : pendingRevalidates[pendingRevalidateKey])) { + return; + } + delete pendingRevalidates[pendingRevalidateKey]; + }); + return cloned2; +} +function createPatchedFetcher(originFetch, { workAsyncStorage, workUnitAsyncStorage }) { + // Create the patched fetch function. + const patched = async function fetch(input, init) { + var _init_method, _init_next; + let url; + try { + url = new URL(input instanceof Request ? input.url : input); + url.username = ''; + url.password = ''; + } catch { + // Error caused by malformed URL should be handled by native fetch + url = undefined; + } + const fetchUrl = (url == null ? void 0 : url.href) ?? ''; + const method = (init == null ? void 0 : (_init_method = init.method) == null ? void 0 : _init_method.toUpperCase()) || 'GET'; + // Do create a new span trace for internal fetches in the + // non-verbose mode. + const isInternal = (init == null ? void 0 : (_init_next = init.next) == null ? void 0 : _init_next.internal) === true; + const hideSpan = process.env.NEXT_OTEL_FETCH_DISABLED === '1'; + // We don't track fetch metrics for internal fetches + // so it's not critical that we have a start time, as it won't be recorded. + // This is to workaround a flaky issue where performance APIs might + // not be available and will require follow-up investigation. + const fetchStart = isInternal ? undefined : performance.timeOrigin + performance.now(); + const workStore = workAsyncStorage.getStore(); + const workUnitStore = workUnitAsyncStorage.getStore(); + let cacheSignal = workUnitStore ? (0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["getCacheSignal"])(workUnitStore) : null; + if (cacheSignal) { + cacheSignal.beginRead(); + } + const result = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])().trace(isInternal ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextNodeServerSpan"].internalFetch : __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["AppRenderSpan"].fetch, { + hideSpan, + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SpanKind"].CLIENT, + spanName: [ + 'fetch', + method, + fetchUrl + ].filter(Boolean).join(' '), + attributes: { + 'http.url': fetchUrl, + 'http.method': method, + 'net.peer.name': url == null ? void 0 : url.hostname, + 'net.peer.port': (url == null ? void 0 : url.port) || undefined + } + }, async (span)=>{ + var _getRequestMeta; + // If this is an internal fetch, we should not do any special treatment. + if (isInternal) { + return originFetch(input, init); + } + // If the workStore is not available, we can't do any + // special treatment of fetch, therefore fallback to the original + // fetch implementation. + if (!workStore) { + return originFetch(input, init); + } + // We should also fallback to the original fetch implementation if we + // are in draft mode, it does not constitute a static generation. + if (workStore.isDraftMode) { + return originFetch(input, init); + } + const isRequestInput = input && typeof input === 'object' && typeof input.method === 'string'; + // With `fetch(new Request(url), init)`, native fetch lets `init` + // override the base Request. Merge them into a single effective Request + // so cacheability, the cache key, and the upstream request all describe + // the same thing. + if (isRequestInput && init) { + // `next` (revalidate/tags) is Next-specific and dropped by + // `new Request`, so keep it on `init` and move the rest onto input. + const { next, ...overrides } = init; + input = new Request(input, overrides); + init = next ? { + next + } : undefined; + } + const getRequestMeta = (field)=>{ + // If request input is present but init is not, retrieve from input first. + const value = init == null ? void 0 : init[field]; + return value || (isRequestInput ? input[field] : null); + }; + let finalRevalidate = undefined; + const getNextField = (field)=>{ + var _init_next, _init_next1, _input_next; + return typeof (init == null ? void 0 : (_init_next = init.next) == null ? void 0 : _init_next[field]) !== 'undefined' ? init == null ? void 0 : (_init_next1 = init.next) == null ? void 0 : _init_next1[field] : isRequestInput ? (_input_next = input.next) == null ? void 0 : _input_next[field] : undefined; + }; + // RequestInit doesn't keep extra fields e.g. next so it's + // only available if init is used separate + const originalFetchRevalidate = getNextField('revalidate'); + let currentFetchRevalidate = originalFetchRevalidate; + const tags = validateTags(getNextField('tags') || [], `fetch ${input.toString()}`); + let revalidateStore; + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + // TODO: Stop accumulating tags in client prerender. (fallthrough) + case 'prerender-client': + case 'validation-client': + case 'prerender-legacy': + case 'cache': + case 'private-cache': + revalidateStore = workUnitStore; + break; + case 'request': + case 'unstable-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + if (revalidateStore) { + if (Array.isArray(tags)) { + // Collect tags onto parent caches or parent prerenders. + const collectedTags = revalidateStore.tags ?? (revalidateStore.tags = []); + for (const tag of tags){ + if (!collectedTags.includes(tag)) { + collectedTags.push(tag); + } + } + } + } + const implicitTags = workUnitStore == null ? void 0 : workUnitStore.implicitTags; + let pageFetchCacheMode = workStore.fetchCache; + if (workUnitStore) { + switch(workUnitStore.type){ + case 'unstable-cache': + // Inside unstable-cache we treat it the same as force-no-store on + // the page. + pageFetchCacheMode = 'force-no-store'; + break; + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + case 'prerender-legacy': + case 'request': + case 'cache': + case 'private-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + const isUsingNoStore = !!workStore.isUnstableNoStore; + let currentFetchCacheConfig = getRequestMeta('cache'); + let cacheReason = ''; + let cacheWarning; + if (typeof currentFetchCacheConfig === 'string' && typeof currentFetchRevalidate !== 'undefined') { + // If the revalidate value conflicts with the cache value, we should warn the user and unset the conflicting values. + const isConflictingRevalidate = currentFetchCacheConfig === 'force-cache' && currentFetchRevalidate === 0 || // revalidate: >0 or revalidate: false and cache: no-store + currentFetchCacheConfig === 'no-store' && (currentFetchRevalidate > 0 || currentFetchRevalidate === false); + if (isConflictingRevalidate) { + cacheWarning = `Specified "cache: ${currentFetchCacheConfig}" and "revalidate: ${currentFetchRevalidate}", only one should be specified.`; + currentFetchCacheConfig = undefined; + currentFetchRevalidate = undefined; + } + } + const hasExplicitFetchCacheOptOut = currentFetchCacheConfig === 'no-cache' || currentFetchCacheConfig === 'no-store' || // the fetch isn't explicitly caching and the segment level cache config signals not to cache + // note: `pageFetchCacheMode` is also set by being in an unstable_cache context. + pageFetchCacheMode === 'force-no-store' || pageFetchCacheMode === 'only-no-store'; + // If no explicit fetch cache mode is set, but dynamic = `force-dynamic` is set, + // we shouldn't consider caching the fetch. This is because the `dynamic` cache + // is considered a "top-level" cache mode, whereas something like `fetchCache` is more + // fine-grained. Top-level modes are responsible for setting reasonable defaults for the + // other configurations. + const noFetchConfigAndForceDynamic = !pageFetchCacheMode && !currentFetchCacheConfig && !currentFetchRevalidate && workStore.forceDynamic; + if (// which will signal the cache to not revalidate + currentFetchCacheConfig === 'force-cache' && typeof currentFetchRevalidate === 'undefined') { + currentFetchRevalidate = false; + } else if (hasExplicitFetchCacheOptOut || noFetchConfigAndForceDynamic) { + currentFetchRevalidate = 0; + } + if (currentFetchCacheConfig === 'no-cache' || currentFetchCacheConfig === 'no-store') { + cacheReason = `cache: ${currentFetchCacheConfig}`; + } + finalRevalidate = validateRevalidate(currentFetchRevalidate, workStore.route); + const _headers = getRequestMeta('headers'); + const initHeaders = typeof (_headers == null ? void 0 : _headers.get) === 'function' ? _headers : new Headers(_headers || {}); + const hasUnCacheableHeader = initHeaders.get('authorization') || initHeaders.get('cookie'); + const isUnCacheableMethod = ![ + 'get', + 'head' + ].includes(((_getRequestMeta = getRequestMeta('method')) == null ? void 0 : _getRequestMeta.toLowerCase()) || 'get'); + /** + * We automatically disable fetch caching under the following conditions: + * - Fetch cache configs are not set. Specifically: + * - A page fetch cache mode is not set (export const fetchCache=...) + * - A fetch cache mode is not set in the fetch call (fetch(url, { cache: ... })) + * or the fetch cache mode is set to 'default' + * - A fetch revalidate value is not set in the fetch call (fetch(url, { revalidate: ... })) + * - OR the fetch comes after a configuration that triggered dynamic rendering (e.g., reading cookies()) + * and the fetch was considered uncacheable (e.g., POST method or has authorization headers) + */ const hasNoExplicitCacheConfig = pageFetchCacheMode == undefined && // eslint-disable-next-line eqeqeq + (currentFetchCacheConfig == undefined || // when considering whether to opt into the default "no-cache" fetch semantics, + // a "default" cache config should be treated the same as no cache config + currentFetchCacheConfig === 'default') && // eslint-disable-next-line eqeqeq + currentFetchRevalidate == undefined; + let autoNoCache = Boolean((hasUnCacheableHeader || isUnCacheableMethod) && (revalidateStore == null ? void 0 : revalidateStore.revalidate) === 0); + let isImplicitBuildTimeCache = false; + if (!autoNoCache && hasNoExplicitCacheConfig) { + // We don't enable automatic no-cache behavior during build-time + // prerendering so that we can still leverage the fetch cache between + // export workers. + if (workStore.isBuildTimePrerendering) { + isImplicitBuildTimeCache = true; + } else { + autoNoCache = true; + } + } + // If we have no cache config, and we're in Dynamic I/O prerendering, + // it'll be a dynamic call. We don't have to issue that dynamic call. + if (hasNoExplicitCacheConfig && workUnitStore !== undefined) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + // While we don't want to do caching in the client scope we know the + // fetch will be dynamic for cacheComponents so we may as well avoid the + // call here. (fallthrough) + case 'prerender-client': + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["makeDynamicHangingPromise"])(workUnitStore.renderSignal, workStore.route, 'fetch()'); + case 'validation-client': + break; + case 'request': + if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering) { + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + await workUnitStore.stagedRendering.waitForStage(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic); + } + break; + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + switch(pageFetchCacheMode){ + case 'force-no-store': + { + cacheReason = 'fetchCache = force-no-store'; + break; + } + case 'only-no-store': + { + if (currentFetchCacheConfig === 'force-cache' || typeof finalRevalidate !== 'undefined' && finalRevalidate > 0) { + throw new Error(`cache: 'force-cache' used on fetch for ${fetchUrl} with 'export const fetchCache = 'only-no-store'`); + } + cacheReason = 'fetchCache = only-no-store'; + break; + } + case 'only-cache': + { + if (currentFetchCacheConfig === 'no-store') { + throw new Error(`cache: 'no-store' used on fetch for ${fetchUrl} with 'export const fetchCache = 'only-cache'`); + } + break; + } + case 'force-cache': + { + if (typeof currentFetchRevalidate === 'undefined' || currentFetchRevalidate === 0) { + cacheReason = 'fetchCache = force-cache'; + finalRevalidate = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"]; + } + break; + } + case 'default-cache': + case 'default-no-store': + case 'auto': + case undefined: + break; + default: + pageFetchCacheMode; + } + if (typeof finalRevalidate === 'undefined') { + if (pageFetchCacheMode === 'default-cache' && !isUsingNoStore) { + finalRevalidate = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"]; + cacheReason = 'fetchCache = default-cache'; + } else if (pageFetchCacheMode === 'default-no-store') { + finalRevalidate = 0; + cacheReason = 'fetchCache = default-no-store'; + } else if (isUsingNoStore) { + finalRevalidate = 0; + cacheReason = 'noStore call'; + } else if (autoNoCache) { + finalRevalidate = 0; + cacheReason = 'auto no cache'; + } else { + // TODO: should we consider this case an invariant? + cacheReason = 'auto cache'; + finalRevalidate = revalidateStore ? revalidateStore.revalidate : __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"]; + } + } else if (!cacheReason) { + cacheReason = `revalidate: ${finalRevalidate}`; + } + if (// `revalidate: 0` values + !(workStore.forceStatic && finalRevalidate === 0) && // we don't consider autoNoCache to switch to dynamic for ISR + !autoNoCache && // If the revalidate value isn't currently set or the value is less + // than the current revalidate value, we should update the revalidate + // value. + revalidateStore && finalRevalidate < revalidateStore.revalidate) { + // If we were setting the revalidate value to 0, we should try to + // postpone instead first. + if (finalRevalidate === 0) { + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'prerender-runtime': + // If we're in an instant validation, a dynamic fetch won't + // have time to resolve during the validation prerender anyway, + // so we leave it hanging. This can cause false negatives in shared parents, + // but we accept that for now, because client data fetching is non-idiomatic. + // eslint-disable-next-line no-fallthrough + case 'validation-client': + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["makeDynamicHangingPromise"])(workUnitStore.renderSignal, workStore.route, 'fetch()'); + case 'request': + if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering) { + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + await workUnitStore.stagedRendering.waitForStage(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic); + } + break; + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$dynamic$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["markCurrentScopeAsDynamic"])(workStore, workUnitStore, `revalidate: 0 fetch ${input} ${workStore.route}`); + } + // We only want to set the revalidate store's revalidate time if it + // was explicitly set for the fetch call, i.e. + // originalFetchRevalidate. + if (revalidateStore && originalFetchRevalidate === finalRevalidate) { + revalidateStore.revalidate = finalRevalidate; + } + } + const isCacheableRevalidate = typeof finalRevalidate === 'number' && finalRevalidate > 0; + let cacheKey; + const { incrementalCache } = workStore; + let isHmrRefresh = false; + let serverComponentsHmrCache; + if (workUnitStore) { + switch(workUnitStore.type){ + case 'request': + case 'cache': + case 'private-cache': + isHmrRefresh = workUnitStore.isHmrRefresh ?? false; + serverComponentsHmrCache = workUnitStore.serverComponentsHmrCache; + break; + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + case 'prerender-legacy': + case 'unstable-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + if (incrementalCache && (isCacheableRevalidate || serverComponentsHmrCache)) { + try { + cacheKey = await incrementalCache.generateCacheKey(fetchUrl, isRequestInput ? input : init); + } catch (cause) { + console.error(`Failed to generate cache key for`, input, cause); + } + } + const fetchIdx = workStore.nextFetchId ?? 1; + workStore.nextFetchId = fetchIdx + 1; + let handleUnlock = ()=>{}; + const doOriginalFetch = async (isStale, cacheReasonOverride)=>{ + const requestInputFields = [ + 'cache', + 'credentials', + 'headers', + 'integrity', + 'keepalive', + 'method', + 'mode', + 'redirect', + 'referrer', + 'referrerPolicy', + 'window', + 'duplex', + // don't pass through signal when revalidating + ...isStale ? [] : [ + 'signal' + ] + ]; + if (isRequestInput) { + const reqInput = input; + const reqOptions = { + body: reqInput._ogBody || reqInput.body + }; + for (const field of requestInputFields){ + // @ts-expect-error custom fields + reqOptions[field] = reqInput[field]; + } + input = new Request(reqInput.url, reqOptions); + } else if (init) { + const { _ogBody, body, signal, ...otherInput } = init; + init = { + ...otherInput, + body: _ogBody || body, + signal: isStale ? undefined : signal + }; + } + // add metadata to init without editing the original + const clonedInit = { + ...init, + next: { + ...init == null ? void 0 : init.next, + fetchType: 'origin', + fetchIdx + } + }; + return originFetch(input, clonedInit).then(async (res)=>{ + if (!isStale && fetchStart) { + trackFetchMetric(workStore, span, { + start: fetchStart, + url: fetchUrl, + cacheReason: cacheReasonOverride || cacheReason, + cacheStatus: finalRevalidate === 0 || cacheReasonOverride ? 'skip' : 'miss', + cacheWarning, + status: res.status, + method: clonedInit.method || 'GET' + }); + } + if (res.status === 200 && incrementalCache && cacheKey && (isCacheableRevalidate || serverComponentsHmrCache)) { + const normalizedRevalidate = finalRevalidate >= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"] ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CACHE_ONE_YEAR_SECONDS"] : finalRevalidate; + const incrementalCacheConfig = isCacheableRevalidate ? { + fetchCache: true, + fetchUrl, + fetchIdx, + tags, + isImplicitBuildTimeCache + } : undefined; + switch(workUnitStore == null ? void 0 : workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + return createCachedPrerenderResponse(res, cacheKey, incrementalCacheConfig, incrementalCache, normalizedRevalidate, handleUnlock); + case 'request': + if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering && workUnitStore.cacheSignal && isCacheableRevalidate) { + // We're filling caches for a staged render with an + // explicit cache config, so we need to wait for the + // response to finish instead of streaming. For HMR-only + // caching (no explicit revalidate), we fall through to + // createCachedDynamicResponse which handles streaming + // and abort gracefully. + return createCachedPrerenderResponse(res, cacheKey, incrementalCacheConfig, incrementalCache, normalizedRevalidate, handleUnlock); + } + // fallthrough + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + case undefined: + return createCachedDynamicResponse(workStore, res, cacheKey, incrementalCacheConfig, incrementalCache, serverComponentsHmrCache, normalizedRevalidate, input, handleUnlock, getRequestMeta('signal')); + default: + workUnitStore; + } + } + // we had response that we determined shouldn't be cached so we return it + // and don't cache it. This also needs to unlock the cache lock we acquired. + await handleUnlock(); + return res; + }).catch((error)=>{ + handleUnlock(); + throw error; + }); + }; + let cacheReasonOverride; + let isForegroundRevalidate = false; + let isHmrRefreshCache = false; + if (cacheKey && incrementalCache) { + let cachedFetchData; + if (isHmrRefresh && serverComponentsHmrCache) { + cachedFetchData = serverComponentsHmrCache.get(cacheKey); + isHmrRefreshCache = true; + } + if (isCacheableRevalidate && !cachedFetchData) { + handleUnlock = await incrementalCache.lock(cacheKey); + const entry = workStore.isOnDemandRevalidate ? null : await incrementalCache.get(cacheKey, { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].FETCH, + revalidate: finalRevalidate, + fetchUrl, + fetchIdx, + tags, + softTags: implicitTags == null ? void 0 : implicitTags.tags + }); + if (hasNoExplicitCacheConfig && workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + // We sometimes use the cache to dedupe fetches that do not + // specify a cache configuration. In these cases we want to + // make sure we still exclude them from prerenders if + // cacheComponents is on so we introduce an artificial task boundary + // here. + await getTimeoutBoundary(); + break; + case 'request': + if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering) { + await workUnitStore.stagedRendering.waitForStage(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic); + } + break; + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + if (entry) { + await handleUnlock(); + } else { + // in dev, incremental cache response will be null in case the browser adds `cache-control: no-cache` in the request headers + // TODO: it seems like we also hit this after revalidates in dev? + cacheReasonOverride = 'cache-control: no-cache (hard refresh)'; + } + if ((entry == null ? void 0 : entry.value) && entry.value.kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].FETCH) { + // If the consumer will persist this result in a server cache, + // wait for fresh data so it doesn't persist a stale value. + if ((0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["willConsumerServerCache"])(workUnitStore) && entry.isStale) { + isForegroundRevalidate = true; + } else { + if (entry.isStale) { + workStore.pendingRevalidates ??= {}; + if (!workStore.pendingRevalidates[cacheKey]) { + const pendingRevalidate = doOriginalFetch(true).then(async (response)=>({ + body: await response.arrayBuffer(), + headers: response.headers, + status: response.status, + statusText: response.statusText + })).finally(()=>{ + workStore.pendingRevalidates ??= {}; + delete workStore.pendingRevalidates[cacheKey || '']; + }); + // Attach the empty catch here so we don't get a "unhandled + // promise rejection" warning. + pendingRevalidate.catch(console.error); + workStore.pendingRevalidates[cacheKey] = pendingRevalidate; + } + } + cachedFetchData = entry.value.data; + } + } + } + if (cachedFetchData) { + if (fetchStart) { + trackFetchMetric(workStore, span, { + start: fetchStart, + url: fetchUrl, + cacheReason, + cacheStatus: isHmrRefreshCache ? 'hmr' : 'hit', + cacheWarning, + status: cachedFetchData.status || 200, + method: (init == null ? void 0 : init.method) || 'GET' + }); + } + const response = new Response(Buffer.from(cachedFetchData.body, 'base64'), { + headers: cachedFetchData.headers, + status: cachedFetchData.status + }); + Object.defineProperty(response, 'url', { + value: cachedFetchData.url + }); + return response; + } + } + if (init && typeof init === 'object' && shouldProcessFetchConfigForWorkUnit(workUnitStore)) { + const { cache } = init; + // Delete `cache` property as Cloudflare Workers will throw an error + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + if (cache === 'no-store') { + // If enabled, we should bail out of static generation. + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'prerender-runtime': + case 'validation-client': + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["makeDynamicHangingPromise"])(workUnitStore.renderSignal, workStore.route, 'fetch()'); + case 'request': + if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering) { + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + await workUnitStore.stagedRendering.waitForStage(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic); + } + break; + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$dynamic$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["markCurrentScopeAsDynamic"])(workStore, workUnitStore, `no-store fetch ${input} ${workStore.route}`); + } + const hasNextConfig = 'next' in init; + const { next = {} } = init; + if (typeof next.revalidate === 'number' && revalidateStore && next.revalidate < revalidateStore.revalidate) { + if (next.revalidate === 0) { + // If enabled, we should bail out of static generation. + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'prerender-runtime': + case 'validation-client': + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["makeDynamicHangingPromise"])(workUnitStore.renderSignal, workStore.route, 'fetch()'); + case 'request': + if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering) { + await workUnitStore.stagedRendering.waitForStage(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic); + } + break; + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'prerender-legacy': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$dynamic$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["markCurrentScopeAsDynamic"])(workStore, workUnitStore, `revalidate: 0 fetch ${input} ${workStore.route}`); + } + if (!workStore.forceStatic || next.revalidate !== 0) { + revalidateStore.revalidate = next.revalidate; + } + } + if (hasNextConfig) delete init.next; + } + // if we are revalidating the whole page via time or on-demand and + // the fetch cache entry is stale we should still de-dupe the + // origin hit if it's a cache-able entry + if (cacheKey && isForegroundRevalidate) { + const pendingRevalidateKey = cacheKey; + workStore.pendingRevalidates ??= {}; + let pendingRevalidate = workStore.pendingRevalidates[pendingRevalidateKey]; + if (pendingRevalidate) { + const revalidatedResult = await pendingRevalidate; + return new Response(revalidatedResult.body, { + headers: revalidatedResult.headers, + status: revalidatedResult.status, + statusText: revalidatedResult.statusText + }); + } + // We used to just resolve the Response and clone it however for + // static generation with cacheComponents we need the response to be able to + // be resolved in a microtask and cloning the response will never have + // a body that can resolve in a microtask in node (as observed through + // experimentation) So instead we await the body and then when it is + // available we construct manually cloned Response objects with the + // body as an ArrayBuffer. This will be resolvable in a microtask + // making it compatible with cacheComponents. + const pendingResponse = doOriginalFetch(true, cacheReasonOverride) // We're cloning the response using this utility because there + // exists a bug in the undici library around response cloning. + // See the following pull request for more details: + // https://github.com/vercel/next.js/pull/73274 + .then(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["cloneResponse"]); + pendingRevalidate = pendingResponse.then(async (responses)=>{ + const response = responses[0]; + return { + body: await response.arrayBuffer(), + headers: response.headers, + status: response.status, + statusText: response.statusText + }; + }).finally(()=>{ + var _workStore_pendingRevalidates; + // If the pending revalidate is not present in the store, then + // we have nothing to delete. + if (!((_workStore_pendingRevalidates = workStore.pendingRevalidates) == null ? void 0 : _workStore_pendingRevalidates[pendingRevalidateKey])) { + return; + } + delete workStore.pendingRevalidates[pendingRevalidateKey]; + }); + // Attach the empty catch here so we don't get a "unhandled promise + // rejection" warning + pendingRevalidate.catch(()=>{}); + workStore.pendingRevalidates[pendingRevalidateKey] = pendingRevalidate; + return pendingResponse.then((responses)=>responses[1]); + } else { + return doOriginalFetch(false, cacheReasonOverride); + } + }); + if (cacheSignal) { + try { + return await result; + } finally{ + if (cacheSignal) { + cacheSignal.endRead(); + } + } + } + return result; + }; + // Attach the necessary properties to the patched fetch function. + // We don't use this to determine if the fetch function has been patched, + // but for external consumers to determine if the fetch function has been + // patched. + patched.__nextPatched = true; + patched.__nextGetStaticStore = ()=>workAsyncStorage; + patched._nextOriginalFetch = originFetch; + globalThis[NEXT_PATCH_SYMBOL] = true; + // Assign the function name also as a name property, so that it's preserved + // even when mangling is enabled. + Object.defineProperty(patched, 'name', { + value: 'fetch', + writable: false + }); + return patched; +} +function patchFetch(options) { + // If we've already patched fetch, we should not patch it again. + if (isFetchPatched()) return; + // Grab the original fetch function. We'll attach this so we can use it in + // the patched fetch function. + const original = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$dedupe$2d$fetch$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDedupeFetch"])(globalThis.fetch); + // Set the global fetch to the patched fetch. + globalThis.fetch = createPatchedFetcher(original, options); +} +let currentTimeoutBoundary = null; +function getTimeoutBoundary() { + if (!currentTimeoutBoundary) { + currentTimeoutBoundary = new Promise((r)=>{ + setTimeout(()=>{ + currentTimeoutBoundary = null; + r(); + }, 0); + }); + } + return currentTimeoutBoundary; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/route-cache-key.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ROUTE_CACHE_DIRECTORY", + ()=>ROUTE_CACHE_DIRECTORY, + "getResponseCacheOwner", + ()=>getResponseCacheOwner, + "getRouteCacheKey", + ()=>getRouteCacheKey, + "isRouteCacheOwner", + ()=>isRouteCacheOwner +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$normalize$2d$page$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/page-path/normalize-page-path.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$normalize$2d$locale$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$built$2f$app$2f$app$2d$pathname$2d$normalizer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/normalizers/built/app/app-pathname-normalizer.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/route-kind.js [app-route] (ecmascript)"); +; +; +; +; +; +const ROUTE_CACHE_DIRECTORY = 'route-cache'; +const appPathnameNormalizer = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$built$2f$app$2f$app$2d$pathname$2d$normalizer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["AppPathnameNormalizer"](); +function getResponseCacheOwner(definition) { + return { + kind: definition.kind, + // Pages module names can include a trailing /index in Turbopack. Their + // pathname matches the manifest's source in both bundlers. App modules + // retain groups and parallel slots in their cache identity. + sourceRoute: definition.kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].PAGES ? definition.pathname : definition.page + }; +} +function isRouteCacheOwner(pathname, owner, prerender, locales) { + if (!prerender) { + return false; + } + // Pages have JSON data routes, App Pages have RSC data routes, and App + // Route Handlers have no separate data route. + const kind = prerender.dataRoute === null ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].APP_ROUTE : prerender.dataRoute.endsWith('.json') ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].PAGES : prerender.dataRoute.endsWith('.rsc') ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].APP_PAGE : undefined; + if (kind !== owner.kind) { + return false; + } + const source = 'srcRoute' in prerender ? prerender.srcRoute : prerender.fallbackSourceRoute; + const prerenderOwner = source ?? (kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].PAGES ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$normalize$2d$locale$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeLocalePath"])(pathname, locales).pathname : pathname); + return prerenderOwner === (kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].PAGES ? owner.sourceRoute : appPathnameNormalizer.normalize(owner.sourceRoute)); +} +function getRouteCacheKey(pathname, owner) { + if (!owner) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('Response cache requires a source route'); + } + const { sourceRoute } = owner; + let source; + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + const { createHash } = __turbopack_context__.r("[externals]/crypto [external] (crypto, cjs)"); + source = createHash('sha256').update(sourceRoute).digest('hex'); + } + return `/${ROUTE_CACHE_DIRECTORY}/${owner.kind}/${source}/$${(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$normalize$2d$page$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizePagePath"])(pathname)}`; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "AppRenderSpan", + ()=>AppRenderSpan, + "AppRouteRouteHandlersSpan", + ()=>AppRouteRouteHandlersSpan, + "AppRouteRouteModuleSpan", + ()=>AppRouteRouteModuleSpan, + "BaseServerSpan", + ()=>BaseServerSpan, + "DevBundlerServiceSpan", + ()=>DevBundlerServiceSpan, + "InstrumentationSpan", + ()=>InstrumentationSpan, + "LoadComponentsSpan", + ()=>LoadComponentsSpan, + "LogSpanAllowList", + ()=>LogSpanAllowList, + "MiddlewareSpan", + ()=>MiddlewareSpan, + "NextNodeServerSpan", + ()=>NextNodeServerSpan, + "NextServerSpan", + ()=>NextServerSpan, + "NextVanillaSpanAllowlist", + ()=>NextVanillaSpanAllowlist, + "NodeSpan", + ()=>NodeSpan, + "RenderSpan", + ()=>RenderSpan, + "ResolveMetadataSpan", + ()=>ResolveMetadataSpan, + "RouteModuleSpan", + ()=>RouteModuleSpan, + "RouterSpan", + ()=>RouterSpan, + "StartServerSpan", + ()=>StartServerSpan +]); +/** + * Contains predefined constants for the trace span name in next/server. + * + * Currently, next/server/tracer is internal implementation only for tracking + * next.js's implementation only with known span names defined here. + **/ // eslint typescript has a bug with TS enums +var BaseServerSpan = /*#__PURE__*/ function(BaseServerSpan) { + BaseServerSpan["handleRequest"] = "BaseServer.handleRequest"; + BaseServerSpan["run"] = "BaseServer.run"; + BaseServerSpan["pipe"] = "BaseServer.pipe"; + BaseServerSpan["getStaticHTML"] = "BaseServer.getStaticHTML"; + BaseServerSpan["render"] = "BaseServer.render"; + BaseServerSpan["renderToResponseWithComponents"] = "BaseServer.renderToResponseWithComponents"; + BaseServerSpan["renderToResponse"] = "BaseServer.renderToResponse"; + BaseServerSpan["renderToHTML"] = "BaseServer.renderToHTML"; + BaseServerSpan["renderError"] = "BaseServer.renderError"; + BaseServerSpan["renderErrorToResponse"] = "BaseServer.renderErrorToResponse"; + BaseServerSpan["renderErrorToHTML"] = "BaseServer.renderErrorToHTML"; + BaseServerSpan["render404"] = "BaseServer.render404"; + return BaseServerSpan; +}(BaseServerSpan || {}); +var LoadComponentsSpan = /*#__PURE__*/ function(LoadComponentsSpan) { + LoadComponentsSpan["loadDefaultErrorComponents"] = "LoadComponents.loadDefaultErrorComponents"; + LoadComponentsSpan["loadComponents"] = "LoadComponents.loadComponents"; + LoadComponentsSpan["loadRouteModule"] = "LoadComponents.loadRouteModule"; + return LoadComponentsSpan; +}(LoadComponentsSpan || {}); +var InstrumentationSpan = /*#__PURE__*/ function(InstrumentationSpan) { + InstrumentationSpan["loadModule"] = "Instrumentation.loadModule"; + InstrumentationSpan["register"] = "Instrumentation.register"; + return InstrumentationSpan; +}(InstrumentationSpan || {}); +var NextServerSpan = /*#__PURE__*/ function(NextServerSpan) { + NextServerSpan["getRequestHandler"] = "NextServer.getRequestHandler"; + NextServerSpan["getRequestHandlerWithMetadata"] = "NextServer.getRequestHandlerWithMetadata"; + NextServerSpan["getServer"] = "NextServer.getServer"; + NextServerSpan["getServerRequestHandler"] = "NextServer.getServerRequestHandler"; + NextServerSpan["createServer"] = "createServer.createServer"; + return NextServerSpan; +}(NextServerSpan || {}); +var NextNodeServerSpan = /*#__PURE__*/ function(NextNodeServerSpan) { + NextNodeServerSpan["compression"] = "NextNodeServer.compression"; + NextNodeServerSpan["getBuildId"] = "NextNodeServer.getBuildId"; + NextNodeServerSpan["createComponentTree"] = "NextNodeServer.createComponentTree"; + NextNodeServerSpan["clientComponentLoading"] = "NextNodeServer.clientComponentLoading"; + NextNodeServerSpan["getLayoutOrPageModule"] = "NextNodeServer.getLayoutOrPageModule"; + NextNodeServerSpan["generateStaticRoutes"] = "NextNodeServer.generateStaticRoutes"; + NextNodeServerSpan["generateFsStaticRoutes"] = "NextNodeServer.generateFsStaticRoutes"; + NextNodeServerSpan["generatePublicRoutes"] = "NextNodeServer.generatePublicRoutes"; + NextNodeServerSpan["generateImageRoutes"] = "NextNodeServer.generateImageRoutes.route"; + NextNodeServerSpan["sendRenderResult"] = "NextNodeServer.sendRenderResult"; + NextNodeServerSpan["proxyRequest"] = "NextNodeServer.proxyRequest"; + NextNodeServerSpan["runApi"] = "NextNodeServer.runApi"; + NextNodeServerSpan["render"] = "NextNodeServer.render"; + NextNodeServerSpan["renderHTML"] = "NextNodeServer.renderHTML"; + NextNodeServerSpan["imageOptimizer"] = "NextNodeServer.imageOptimizer"; + NextNodeServerSpan["getPagePath"] = "NextNodeServer.getPagePath"; + NextNodeServerSpan["getRoutesManifest"] = "NextNodeServer.getRoutesManifest"; + NextNodeServerSpan["findPageComponents"] = "NextNodeServer.findPageComponents"; + NextNodeServerSpan["getFontManifest"] = "NextNodeServer.getFontManifest"; + NextNodeServerSpan["getServerComponentManifest"] = "NextNodeServer.getServerComponentManifest"; + NextNodeServerSpan["getRequestHandler"] = "NextNodeServer.getRequestHandler"; + NextNodeServerSpan["renderToHTML"] = "NextNodeServer.renderToHTML"; + NextNodeServerSpan["renderError"] = "NextNodeServer.renderError"; + NextNodeServerSpan["renderErrorToHTML"] = "NextNodeServer.renderErrorToHTML"; + NextNodeServerSpan["render404"] = "NextNodeServer.render404"; + NextNodeServerSpan["startResponse"] = "NextNodeServer.startResponse"; + // nested inner span, does not require parent scope name + NextNodeServerSpan["route"] = "route"; + NextNodeServerSpan["onProxyReq"] = "onProxyReq"; + NextNodeServerSpan["apiResolver"] = "apiResolver"; + NextNodeServerSpan["internalFetch"] = "internalFetch"; + return NextNodeServerSpan; +}(NextNodeServerSpan || {}); +var StartServerSpan = /*#__PURE__*/ function(StartServerSpan) { + StartServerSpan["startServer"] = "startServer.startServer"; + return StartServerSpan; +}(StartServerSpan || {}); +var RenderSpan = /*#__PURE__*/ function(RenderSpan) { + RenderSpan["getServerSideProps"] = "Render.getServerSideProps"; + RenderSpan["getStaticProps"] = "Render.getStaticProps"; + RenderSpan["renderToString"] = "Render.renderToString"; + RenderSpan["renderDocument"] = "Render.renderDocument"; + RenderSpan["createBodyResult"] = "Render.createBodyResult"; + return RenderSpan; +}(RenderSpan || {}); +var AppRenderSpan = /*#__PURE__*/ function(AppRenderSpan) { + AppRenderSpan["renderToString"] = "AppRender.renderToString"; + AppRenderSpan["renderToReadableStream"] = "AppRender.renderToReadableStream"; + AppRenderSpan["getBodyResult"] = "AppRender.getBodyResult"; + AppRenderSpan["fetch"] = "AppRender.fetch"; + AppRenderSpan["waitShellReady"] = "AppRender.waitShellReady"; + AppRenderSpan["renderToNodeFizzStream"] = "AppRender.renderToNodeFizzStream"; + AppRenderSpan["instantInsights"] = "AppRender.instantInsights"; + AppRenderSpan["instantInsightsPrepareValidation"] = "AppRender.instantInsights.prepareValidation"; + AppRenderSpan["instantInsightsRunValidation"] = "AppRender.instantInsights.runValidation"; + return AppRenderSpan; +}(AppRenderSpan || {}); +var DevBundlerServiceSpan = /*#__PURE__*/ function(DevBundlerServiceSpan) { + DevBundlerServiceSpan["ensurePage"] = "DevBundlerService.ensurePage"; + return DevBundlerServiceSpan; +}(DevBundlerServiceSpan || {}); +var RouterSpan = /*#__PURE__*/ function(RouterSpan) { + RouterSpan["executeRoute"] = "Router.executeRoute"; + return RouterSpan; +}(RouterSpan || {}); +var NodeSpan = /*#__PURE__*/ function(NodeSpan) { + NodeSpan["runHandler"] = "Node.runHandler"; + return NodeSpan; +}(NodeSpan || {}); +var AppRouteRouteHandlersSpan = /*#__PURE__*/ function(AppRouteRouteHandlersSpan) { + AppRouteRouteHandlersSpan["runHandler"] = "AppRouteRouteHandlers.runHandler"; + return AppRouteRouteHandlersSpan; +}(AppRouteRouteHandlersSpan || {}); +var AppRouteRouteModuleSpan = /*#__PURE__*/ function(AppRouteRouteModuleSpan) { + AppRouteRouteModuleSpan["loadUserland"] = "AppRouteRouteModule.loadUserland"; + return AppRouteRouteModuleSpan; +}(AppRouteRouteModuleSpan || {}); +var RouteModuleSpan = /*#__PURE__*/ function(RouteModuleSpan) { + RouteModuleSpan["prepare"] = "RouteModule.prepare"; + RouteModuleSpan["loadManifests"] = "RouteModule.loadManifests"; + return RouteModuleSpan; +}(RouteModuleSpan || {}); +var ResolveMetadataSpan = /*#__PURE__*/ function(ResolveMetadataSpan) { + ResolveMetadataSpan["generateMetadata"] = "ResolveMetadata.generateMetadata"; + ResolveMetadataSpan["generateViewport"] = "ResolveMetadata.generateViewport"; + return ResolveMetadataSpan; +}(ResolveMetadataSpan || {}); +var MiddlewareSpan = /*#__PURE__*/ function(MiddlewareSpan) { + MiddlewareSpan["execute"] = "Middleware.execute"; + return MiddlewareSpan; +}(MiddlewareSpan || {}); +const NextVanillaSpanAllowlist = new Set([ + "Middleware.execute", + "BaseServer.handleRequest", + "Render.getServerSideProps", + "Render.getStaticProps", + "AppRender.fetch", + "AppRender.getBodyResult", + "LoadComponents.loadRouteModule", + "Render.renderDocument", + "Node.runHandler", + "AppRouteRouteHandlers.runHandler", + "AppRouteRouteModule.loadUserland", + "RouteModule.prepare", + "Instrumentation.loadModule", + "Instrumentation.register", + "ResolveMetadata.generateMetadata", + "ResolveMetadata.generateViewport", + "NextNodeServer.createComponentTree", + "NextNodeServer.findPageComponents", + "NextNodeServer.getLayoutOrPageModule", + "NextNodeServer.startResponse", + "NextNodeServer.clientComponentLoading" +]); +const LogSpanAllowList = new Set([ + "NextNodeServer.findPageComponents", + "NextNodeServer.createComponentTree", + "NextNodeServer.clientComponentLoading" +]); +; +}), +"[project]/node_modules/next/dist/esm/server/lib/trace/request-insights-identity.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getRequestInsightsIdentity", + ()=>getRequestInsightsIdentity, + "runWithRequestInsightsIdentity", + ()=>runWithRequestInsightsIdentity +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$async$2d$local$2d$storage$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/async-local-storage.js [app-route] (ecmascript)"); +; +// This storage covers the part of BaseServer request handling that runs before +// App Render creates workAsyncStorage. Once available, workStore remains the +// primary identity source for locally recorded spans. +function getRequestInsightsIdentityStorage() { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$async$2d$local$2d$storage$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getOrCreateGlobalAsyncLocalStorage"])('request-insights-identity-storage'); +} +function runWithRequestInsightsIdentity(identity, fn) { + return getRequestInsightsIdentityStorage().run(identity, fn); +} +function getRequestInsightsIdentity() { + return getRequestInsightsIdentityStorage().getStore(); +} +}), +"[project]/node_modules/next/dist/esm/server/lib/trace/request-insights.js [app-route] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "clearRequestInsightsForTest", + ()=>clearRequestInsightsForTest, + "getRequestInsightsSnapshot", + ()=>getRequestInsightsSnapshot, + "recordRequestInsightFetch", + ()=>recordRequestInsightFetch, + "recordRequestInsightSpan", + ()=>recordRequestInsightSpan, + "subscribeRequestInsights", + ()=>subscribeRequestInsights +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$request$2d$insights$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/request-insights.js [app-route] (ecmascript)"); +; +; +const MAX_REQUEST_INSIGHTS = 100; +const REQUEST_INSIGHTS_STORE_KEY = Symbol.for('@next/request-insights-store'); +const CLIENT_COMPONENT_LOADING_SPAN_TYPE = 'NextNodeServer.clientComponentLoading'; +const REDACTED_VALUE = 'redacted'; +const SAFE_SPAN_ATTRIBUTE_KEYS = new Set([ + 'http.method', + 'http.route', + 'http.status_code', + 'http.url', + 'net.peer.name', + 'net.peer.port', + 'next.fetch.cache_reason', + 'next.fetch.cache_status', + 'next.fetch.idx', + 'next.route', + 'next.rsc', + 'next.segment', + 'next.span_category', + 'next.span_name', + 'next.span_type' +]); +const SENSITIVE_PARAM_NAME_RE = /(?:^|[_-])(?:access[_-]?token|api[_-]?key|auth|authorization|code|cookie|credential|id[_-]?token|jwt|key|password|secret|session|signature|sig|token)(?:$|[_-])/i; +class InMemoryRequestInsightsStore { + recordSpan(span) { + var _span_attributes; + if (!span.requestId) { + return; + } + const insight = this.getOrCreateRequest({ + requestId: span.requestId, + kind: span.requestInsightKind, + htmlRequestId: span.htmlRequestId, + route: span.route, + url: span.url + }, span.startTime ?? span.timestamp); + const spanStartTime = span.startTime ?? span.timestamp; + insight.htmlRequestId = span.htmlRequestId ?? insight.htmlRequestId; + insight.route = insight.route ?? span.route; + insight.url = insight.url ?? sanitizeUrl(span.url); + this.updateTiming(insight, spanStartTime, span.durationMs, ((_span_attributes = span.attributes) == null ? void 0 : _span_attributes['next.span_type']) === 'BaseServer.handleRequest'); + insight.status = insight.status === 'error' || span.status === 'error' ? 'error' : span.status === 'ok' ? 'ok' : insight.status; + insight.spans.push({ + name: span.name, + startTime: spanStartTime, + durationMs: span.durationMs, + status: span.status, + traceId: span.traceId, + spanId: span.spanId, + parentSpanId: span.parentSpanId, + attributes: sanitizeSpanAttributes(span.attributes), + links: sanitizeSpanLinks(span.links), + events: sanitizeSpanEvents(span.events), + error: span.error + }); + const fetch = getFetchInsight(span); + if (fetch) { + this.recordFetchForInsight(insight, fetch); + } + this.notify(insight); + } + recordFetch(identity, fetch) { + if (!identity.requestId) { + return; + } + const fetchStartTime = fetch.startTime ?? getCurrentTimestamp(); + const insight = this.getOrCreateRequest(identity, fetchStartTime); + this.updateTiming(insight, fetchStartTime, fetch.durationMs, false); + this.recordFetchForInsight(insight, sanitizeFetchInsight(fetch)); + this.notify(insight); + } + getSnapshot() { + return { + requests: this.requestOrder.map((insightKey)=>this.requests.get(insightKey)).filter((request)=>request !== undefined) + }; + } + subscribe(listener) { + this.listeners.add(listener); + return ()=>{ + this.listeners.delete(listener); + }; + } + clear() { + this.requests.clear(); + this.requestTimings.clear(); + this.requestOrder.length = 0; + } + updateTiming(insight, startTime, durationMs, isRequestSpan) { + const insightKey = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$request$2d$insights$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestInsightKey"])(insight); + if (isRequestSpan && durationMs !== undefined) { + const requestTiming = { + startTime, + durationMs + }; + this.requestTimings.set(insightKey, requestTiming); + insight.startTime = requestTiming.startTime; + insight.durationMs = requestTiming.durationMs; + return; + } + const requestTiming = this.requestTimings.get(insightKey); + if (requestTiming) { + insight.startTime = requestTiming.startTime; + insight.durationMs = requestTiming.durationMs; + return; + } + const endTime = startTime + (durationMs ?? 0); + const requestEndTime = insight.startTime + (insight.durationMs ?? 0); + insight.startTime = Math.min(insight.startTime, startTime); + insight.durationMs = Math.max(requestEndTime, endTime) - insight.startTime; + } + notify(insight) { + for (const listener of this.listeners){ + listener(insight); + } + } + getOrCreateRequest(identity, startTime) { + const requestId = identity.requestId; + const insightKey = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$request$2d$insights$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestInsightKey"])({ + requestId, + kind: identity.kind + }); + let insight = this.requests.get(insightKey); + if (!insight) { + insight = { + requestId, + kind: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$request$2d$insights$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestInsightKind"])(identity), + htmlRequestId: identity.htmlRequestId ?? requestId, + route: identity.route, + url: sanitizeUrl(identity.url), + startTime, + status: 'pending', + spans: [], + fetches: [] + }; + this.requests.set(insightKey, insight); + this.requestOrder.push(insightKey); + this.trim(); + } + insight.htmlRequestId = identity.htmlRequestId ?? insight.htmlRequestId; + insight.route = insight.route ?? identity.route; + insight.url = insight.url ?? sanitizeUrl(identity.url); + insight.startTime = Math.min(insight.startTime, startTime); + return insight; + } + recordFetchForInsight(insight, fetch) { + if (insight.fetches.some((existingFetch)=>existingFetch.url === fetch.url && (existingFetch.index !== undefined && fetch.index !== undefined ? existingFetch.index === fetch.index : existingFetch.startTime === fetch.startTime))) { + return; + } + insight.fetches.push(sanitizeFetchInsight(fetch)); + } + trim() { + while(this.requestOrder.length > MAX_REQUEST_INSIGHTS){ + const insightKey = this.requestOrder.shift(); + if (insightKey) { + this.requests.delete(insightKey); + this.requestTimings.delete(insightKey); + } + } + } + constructor(){ + this.requests = new Map(); + this.requestTimings = new Map(); + this.requestOrder = []; + this.listeners = new Set(); + } +} +function recordRequestInsightSpan(span) { + var _span_attributes; + if (((_span_attributes = span.attributes) == null ? void 0 : _span_attributes['next.span_type']) === CLIENT_COMPONENT_LOADING_SPAN_TYPE) { + return; + } + getRequestInsightsStore().recordSpan(span); +} +function recordRequestInsightFetch(identity, fetch) { + getRequestInsightsStore().recordFetch(identity, fetch); +} +function getRequestInsightsSnapshot() { + return getRequestInsightsStore().getSnapshot(); +} +function subscribeRequestInsights(listener) { + return getRequestInsightsStore().subscribe(listener); +} +function clearRequestInsightsForTest() { + getRequestInsightsStore().clear(); +} +function getRequestInsightsStore() { + const globalStore = globalThis; + return globalStore[REQUEST_INSIGHTS_STORE_KEY] ??= new InMemoryRequestInsightsStore(); +} +function getFetchInsight(span) { + const attributes = span.attributes; + if (!attributes || attributes['next.span_type'] !== 'AppRender.fetch') { + return null; + } + return { + url: sanitizeUrl(getStringAttribute(attributes['http.url']) ?? span.url), + method: getStringAttribute(attributes['http.method']), + statusCode: getNumberAttribute(attributes['http.status_code']), + startTime: span.startTime ?? span.timestamp, + durationMs: span.durationMs, + cacheStatus: getStringAttribute(attributes['next.fetch.cache_status']), + cacheReason: getStringAttribute(attributes['next.fetch.cache_reason']), + index: getNumberAttribute(attributes['next.fetch.idx']) + }; +} +function sanitizeFetchInsight(fetch) { + return { + ...fetch, + url: sanitizeUrl(fetch.url) + }; +} +function getCurrentTimestamp() { + return performance.timeOrigin + performance.now(); +} +function sanitizeSpanAttributes(attributes) { + if (!attributes) { + return undefined; + } + const sanitized = {}; + for (const [key, value] of Object.entries(attributes)){ + if (!SAFE_SPAN_ATTRIBUTE_KEYS.has(key)) { + continue; + } + sanitized[key] = key === 'http.url' ? sanitizeUrlAttribute(value) : value; + } + return Object.keys(sanitized).length > 0 ? sanitized : undefined; +} +function sanitizeSpanEvents(events) { + return events == null ? void 0 : events.map((event)=>({ + ...event, + attributes: sanitizeSpanAttributes(event.attributes) + })); +} +function sanitizeSpanLinks(links) { + return links == null ? void 0 : links.map((link)=>({ + ...link, + attributes: sanitizeSpanAttributes(link.attributes) + })); +} +function sanitizeUrlAttribute(value) { + return typeof value === 'string' ? sanitizeUrl(value) ?? '' : value; +} +function sanitizeUrl(value) { + if (!value) { + return value; + } + const isRelativeUrl = value.startsWith('/'); + try { + const url = isRelativeUrl ? new URL(value, 'http://n') : new URL(value); + url.username = ''; + url.password = ''; + for (const name of Array.from(url.searchParams.keys())){ + if (SENSITIVE_PARAM_NAME_RE.test(name)) { + url.searchParams.set(name, REDACTED_VALUE); + } + } + return isRelativeUrl ? `${url.pathname}${url.search}${url.hash}` : url.href; + } catch { + return value; + } +} +function getStringAttribute(value) { + return typeof value === 'string' ? value : undefined; +} +function getNumberAttribute(value) { + return typeof value === 'number' ? value : undefined; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/trace/span-store.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "isLocalSpanRecordingEnabled", + ()=>isLocalSpanRecordingEnabled, + "isRequestInsightsEnabled", + ()=>isRequestInsightsEnabled, + "recordSpan", + ()=>recordSpan, + "setSpanRecorderForTest", + ()=>setSpanRecorderForTest +]); +let spanRecorderForTest; +function recordSpan(record) { + if (!isLocalSpanRecordingEnabled()) { + return; + } + const spanRecord = { + timestamp: getCurrentTimestamp(), + ...record + }; + spanRecorderForTest == null ? void 0 : spanRecorderForTest(spanRecord); + if (isRequestInsightsEnabled() && spanRecord.requestId) //TURBOPACK unreachable + ; +} +function setSpanRecorderForTest(recorder) { + spanRecorderForTest = recorder; +} +function isLocalSpanRecordingEnabled() { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + return spanRecorderForTest !== undefined || isRequestInsightsEnabled(); +} +function isRequestInsightsEnabled() { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + const value = ("TURBOPACK compile-time value", false); + return isEnabledEnvValue(value); +} +function isEnabledEnvValue(value) { + return value === '1' || value === 'true' || value === true; +} +function getCurrentTimestamp() { + return performance.timeOrigin + performance.now(); +} +}), +"[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "BubbledError", + ()=>BubbledError, + "SpanKind", + ()=>SpanKind, + "SpanStatusCode", + ()=>SpanStatusCode, + "getTracer", + ()=>getTracer, + "isBubbledError", + ()=>isBubbledError +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$is$2d$thenable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/is-thenable.js [app-route] (ecmascript)"); +; +; +const NEXT_OTEL_PERFORMANCE_PREFIX = process.env.NEXT_OTEL_PERFORMANCE_PREFIX; +const LOCAL_SPAN_RECORDER_KEY = Symbol.for('@next/local-span-recorder'); +let api; +function getLocalSpanRecorder() { + if ("TURBOPACK compile-time truthy", 1) { + return globalThis[LOCAL_SPAN_RECORDER_KEY]; + } else //TURBOPACK unreachable + ; +} +// we want to allow users to use their own version of @opentelemetry/api if they +// want to, so we try to require it first, and if it fails we fall back to the +// version that is bundled with Next.js +// this is because @opentelemetry/api has to be synced with the version of +// @opentelemetry/tracing that is used, and we don't want to force users to use +// the version that is bundled with Next.js. +// the API is ~stable, so this should be fine +if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable +; +else { + try { + api = __turbopack_context__.r("[externals]/next/dist/compiled/@opentelemetry/api [external] (next/dist/compiled/@opentelemetry/api, cjs)"); + } catch (err) { + api = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/@opentelemetry/api/index.js [app-route] (ecmascript)"); + } +} +const { context, propagation, trace, SpanStatusCode, SpanKind, ROOT_CONTEXT } = api; +class BubbledError extends Error { + constructor(bubble, result){ + super(), this.bubble = bubble, this.result = result; + } +} +function isBubbledError(error) { + if (typeof error !== 'object' || error === null) return false; + return error instanceof BubbledError; +} +const closeSpanWithError = (span, error, endTime)=>{ + if (isBubbledError(error) && error.bubble) { + span.setAttribute('next.bubble', true); + } else { + if (error) { + span.recordException(error); + span.setAttribute('error.type', error.name); + } + span.setStatus({ + code: SpanStatusCode.ERROR, + message: error == null ? void 0 : error.message + }); + } + span.end(endTime); +}; +/** we use this map to propagate attributes from nested spans to the top span */ const rootSpanAttributesStore = new Map(); +const rootSpanIdKey = api.createContextKey('next.rootSpanId'); +let lastSpanId = 0; +const getSpanId = ()=>lastSpanId++; +const clientTraceDataSetter = { + set (carrier, key, value) { + carrier.push({ + key, + value + }); + } +}; +class NextTracerImpl { + /** + * Returns an instance to the trace with configured name. + * Since wrap / trace can be defined in any place prior to actual trace subscriber initialization, + * This should be lazily evaluated. + */ getTracerInstance() { + return trace.getTracer('next.js', "16.4.1"); + } + isOpenTelemetryEnabled() { + var _tracerProvider_getDelegate_constructor, _tracerProvider_getDelegate; + const activeSpan = trace.getSpan(context.active()); + if (activeSpan == null ? void 0 : activeSpan.isRecording()) { + return true; + } + const tracerProvider = trace.getTracerProvider(); + if (!('getDelegate' in tracerProvider)) { + return true; + } + return (tracerProvider.getDelegate == null ? void 0 : (_tracerProvider_getDelegate = tracerProvider.getDelegate.call(tracerProvider)) == null ? void 0 : (_tracerProvider_getDelegate_constructor = _tracerProvider_getDelegate.constructor) == null ? void 0 : _tracerProvider_getDelegate_constructor.name) !== 'NoopTracerProvider'; + } + getContext() { + return context; + } + getTracePropagationData() { + const activeContext = context.active(); + const entries = []; + propagation.inject(activeContext, entries, clientTraceDataSetter); + return entries; + } + getActiveScopeSpan() { + const localSpanRecorder = getLocalSpanRecorder(); + const activeLocalSpan = localSpanRecorder == null ? void 0 : localSpanRecorder.getActiveLocalSpan(); + if (activeLocalSpan && (localSpanRecorder == null ? void 0 : localSpanRecorder.isOpenTelemetryIsolatedSpan(activeLocalSpan))) { + return activeLocalSpan; + } + const activeSpan = trace.getSpan(context.active()); + if (activeSpan || !("TURBOPACK compile-time value", "1")) { + return activeSpan; + } + return activeLocalSpan; + } + /** + * Run `fn` with the active span cleared, so spans created inside become new + * roots (or parent to incoming propagated context). Used for in-process + * Node.js middleware so its span is a sibling of the request span, matching + * edge middleware which runs in a detached sandbox. + */ runWithDetachedContext(fn) { + if (!NEXT_OTEL_PERFORMANCE_PREFIX && !this.isOpenTelemetryEnabled()) { + return fn(); + } + return context.with(ROOT_CONTEXT, fn); + } + withPropagatedContext(carrier, fn, getter, force = false) { + const activeContext = context.active(); + if (!NEXT_OTEL_PERFORMANCE_PREFIX && !this.isOpenTelemetryEnabled() && !trace.getSpanContext(activeContext)) { + return fn(); + } + if (force) { + const remoteContext = propagation.extract(ROOT_CONTEXT, carrier, getter); + if (trace.getSpanContext(remoteContext)) { + return context.with(remoteContext, fn); + } + // Preserve the current active span while still merging any extracted + // baggage/context values from the carrier. + const mergedContext = propagation.extract(activeContext, carrier, getter); + return context.with(mergedContext, fn); + } + if (trace.getSpanContext(activeContext)) { + // Active span is already set, too late to propagate. + return fn(); + } + const remoteContext = propagation.extract(activeContext, carrier, getter); + return context.with(remoteContext, fn); + } + trace(...args) { + const [type, fnOrOptions, fnOrEmpty] = args; + const tracingEnabled = Boolean(NEXT_OTEL_PERFORMANCE_PREFIX) || this.isOpenTelemetryEnabled(); + const localSpanRecorder = getLocalSpanRecorder(); + const localSpanRecordingEnabled = (localSpanRecorder == null ? void 0 : localSpanRecorder.isLocalSpanRecordingEnabled()) ?? false; + if (!tracingEnabled && !localSpanRecordingEnabled) { + return typeof fnOrOptions === 'function' ? fnOrOptions() : fnOrEmpty(); + } + // coerce options form overload + const { fn, options } = typeof fnOrOptions === 'function' ? { + fn: fnOrOptions, + options: {} + } : { + fn: fnOrEmpty, + options: { + ...fnOrOptions + } + }; + const spanName = options.spanName ?? type; + const parentSpan = options.parentSpan ?? this.getActiveScopeSpan(); + const isolatedParentSpan = parentSpan && (localSpanRecorder == null ? void 0 : localSpanRecorder.isOpenTelemetryIsolatedSpan(parentSpan)) ? parentSpan : undefined; + const shouldDelegateSpan = !isolatedParentSpan && (__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextVanillaSpanAllowlist"].has(type) || process.env.NEXT_OTEL_VERBOSE === '1'); + const shouldTraceSpan = shouldDelegateSpan || ((localSpanRecorder == null ? void 0 : localSpanRecorder.isRequestInsightsEnabled()) ?? false); + if (!shouldTraceSpan || options.hideSpan) { + return fn(); + } + // Trying to get active scoped span to assign parent. If option specifies parent span manually, will try to use it. + let spanContext = isolatedParentSpan ? context.active() : this.getSpanContext(parentSpan); + if (!spanContext) { + spanContext = (context == null ? void 0 : context.active()) ?? ROOT_CONTEXT; + } + // Check if there's already a root span in the store for this trace + // We are intentionally not checking whether there is an active context + // from outside of nextjs to ensure that we can provide the same level + // of telemetry when using a custom server + const existingRootSpanId = spanContext.getValue(rootSpanIdKey); + const isRootSpan = typeof existingRootSpanId !== 'number' || !rootSpanAttributesStore.has(existingRootSpanId); + const spanId = getSpanId(); + options.attributes = { + 'next.span_category': 'nextjs', + 'next.span_name': spanName, + 'next.span_type': type, + ...options.attributes + }; + return context.with(spanContext.setValue(rootSpanIdKey, spanId), ()=>this.runWithActiveSpan(spanName, options, spanContext, tracingEnabled && shouldDelegateSpan, localSpanRecordingEnabled, isolatedParentSpan, (span)=>{ + let startTime; + if (NEXT_OTEL_PERFORMANCE_PREFIX && type && __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["LogSpanAllowList"].has(type)) { + startTime = 'performance' in globalThis && 'measure' in performance ? globalThis.performance.now() : undefined; + } + let cleanedUp = false; + const onCleanup = ()=>{ + if (cleanedUp) return; + cleanedUp = true; + rootSpanAttributesStore.delete(spanId); + if (startTime) { + performance.measure(`${NEXT_OTEL_PERFORMANCE_PREFIX}:next-${(type.split('.').pop() || '').replace(/[A-Z]/g, (match)=>'-' + match.toLowerCase())}`, { + start: startTime, + end: performance.now() + }); + } + }; + if (isRootSpan) { + rootSpanAttributesStore.set(spanId, new Map(Object.entries(options.attributes ?? {}))); + } + if (fn.length > 1) { + try { + return fn(span, (err)=>{ + if (err) { + closeSpanWithError(span, err, options.endTime); + } else { + span.end(options.endTime); + } + }); + } catch (err) { + closeSpanWithError(span, err, options.endTime); + throw err; + } finally{ + onCleanup(); + } + } + try { + const result = fn(span); + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$is$2d$thenable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isThenable"])(result)) { + // If there's error make sure it throws + return result.then((res)=>{ + span.end(options.endTime); + // Need to pass down the promise result, + // it could be react stream response with error { error, stream } + return res; + }).catch((err)=>{ + closeSpanWithError(span, err, options.endTime); + throw err; + }).finally(onCleanup); + } else { + span.end(options.endTime); + onCleanup(); + } + return result; + } catch (err) { + closeSpanWithError(span, err, options.endTime); + onCleanup(); + throw err; + } + })); + } + runWithActiveSpan(spanName, options, parentContext, tracingEnabled, localSpanRecordingEnabled, isolatedParentSpan, fn) { + if (tracingEnabled) { + return this.getTracerInstance().startActiveSpan(spanName, options, (span)=>fn(localSpanRecordingEnabled ? this.createLocalRecordingSpan(spanName, options, parentContext, span, isolatedParentSpan) : span)); + } + const span = this.createLocalRecordingSpan(spanName, options, parentContext, undefined, isolatedParentSpan); + const localSpanRecorder = getLocalSpanRecorder(); + return localSpanRecorder.withLocalSpan(span, ()=>localSpanRecorder.isOpenTelemetryIsolatedSpan(span) ? fn(span) : context.with(trace.setSpan(context.active(), span), fn, undefined, span)); + } + createLocalRecordingSpan(name, options, parentContext, delegateSpan, isolatedParentSpan) { + const parentSpanContext = (isolatedParentSpan == null ? void 0 : isolatedParentSpan.spanContext()) ?? trace.getSpanContext(parentContext); + const delegateSpanContext = delegateSpan == null ? void 0 : delegateSpan.spanContext(); + return getLocalSpanRecorder().createLocalSpan({ + name, + attributes: options.attributes, + links: options.links, + startTime: options.startTime, + delegateSpan, + traceId: (delegateSpanContext == null ? void 0 : delegateSpanContext.traceId) ?? (parentSpanContext == null ? void 0 : parentSpanContext.traceId), + spanId: delegateSpanContext == null ? void 0 : delegateSpanContext.spanId, + parentSpanId: parentSpanContext == null ? void 0 : parentSpanContext.spanId, + isolateOpenTelemetry: isolatedParentSpan !== undefined + }); + } + wrap(...args) { + const tracer = this; + const [name, options, fn] = args.length === 3 ? args : [ + args[0], + {}, + args[1] + ]; + if (!__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextVanillaSpanAllowlist"].has(name) && process.env.NEXT_OTEL_VERBOSE !== '1' && !("TURBOPACK compile-time value", "1")) //TURBOPACK unreachable + ; + return function() { + let optionsObj = options; + if (typeof optionsObj === 'function' && typeof fn === 'function') { + optionsObj = optionsObj.apply(this, arguments); + } + const lastArgId = arguments.length - 1; + const cb = arguments[lastArgId]; + if (typeof cb === 'function') { + const scopeBoundCb = tracer.getContext().bind(context.active(), cb); + return tracer.trace(name, optionsObj, (_span, done)=>{ + arguments[lastArgId] = function(err) { + done == null ? void 0 : done(err); + return scopeBoundCb.apply(this, arguments); + }; + return fn.apply(this, arguments); + }); + } else { + return tracer.trace(name, optionsObj, ()=>fn.apply(this, arguments)); + } + }; + } + startSpan(...args) { + const [type, passedOptions] = args; + const options = passedOptions ? { + ...passedOptions, + attributes: { + 'next.span_category': 'nextjs', + ...passedOptions.attributes + } + } : { + attributes: { + 'next.span_category': 'nextjs' + } + }; + const localSpanRecorder = getLocalSpanRecorder(); + const parentSpan = options.parentSpan ?? this.getActiveScopeSpan(); + const isolatedParentSpan = parentSpan && (localSpanRecorder == null ? void 0 : localSpanRecorder.isOpenTelemetryIsolatedSpan(parentSpan)) ? parentSpan : undefined; + const parentContext = (isolatedParentSpan ? undefined : this.getSpanContext(parentSpan)) ?? context.active(); + const localSpanRecordingEnabled = (localSpanRecorder == null ? void 0 : localSpanRecorder.isLocalSpanRecordingEnabled()) ?? false; + if (!localSpanRecordingEnabled) { + return this.getTracerInstance().startSpan(type, options, parentContext); + } + const delegateSpan = !isolatedParentSpan && this.isOpenTelemetryEnabled() ? this.getTracerInstance().startSpan(type, options, parentContext) : undefined; + return this.createLocalRecordingSpan(type, options, parentContext, delegateSpan, isolatedParentSpan); + } + getSpanContext(parentSpan) { + const spanContext = parentSpan ? trace.setSpan(context.active(), parentSpan) : undefined; + return spanContext; + } + getRootSpanAttributes() { + const spanId = context.active().getValue(rootSpanIdKey); + return rootSpanAttributesStore.get(spanId); + } + setRootSpanAttribute(key, value) { + const spanId = context.active().getValue(rootSpanIdKey); + const attributes = rootSpanAttributesStore.get(spanId); + if (attributes && !attributes.has(key)) { + attributes.set(key, value); + } + if ("TURBOPACK compile-time truthy", 1) { + var _getLocalSpanRecorder; + const localSpan = (_getLocalSpanRecorder = getLocalSpanRecorder()) == null ? void 0 : _getLocalSpanRecorder.getActiveLocalSpan(); + if (localSpan) { + localSpan.setAttribute(key, value); + } + } + } + withSpan(span, fn) { + const recorder = getLocalSpanRecorder(); + if (recorder == null ? void 0 : recorder.isLocalRecordingSpan(span)) { + return recorder.withLocalSpan(span, ()=>recorder.isOpenTelemetryIsolatedSpan(span) ? fn() : context.with(trace.setSpan(context.active(), span), fn)); + } + return context.with(trace.setSpan(context.active(), span), fn); + } +} +const getTracer = (()=>{ + const tracer = new NextTracerImpl(); + return ()=>tracer; +})(); +; +}), +"[project]/node_modules/next/dist/esm/server/normalizers/built/app/app-pathname-normalizer.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "AppPathnameNormalizer", + ()=>AppPathnameNormalizer, + "DevAppPathnameNormalizer", + ()=>DevAppPathnameNormalizer +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$normalizers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/normalizers/normalizers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$wrap$2d$normalizer$2d$fn$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/normalizers/wrap-normalizer-fn.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$underscore$2d$normalizer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/normalizers/underscore-normalizer.js [app-route] (ecmascript)"); +; +; +; +; +class AppPathnameNormalizer extends __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$normalizers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["Normalizers"] { + constructor(){ + super([ + // The pathname to match should have the trailing `/page` and other route + // group information stripped from it. + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$wrap$2d$normalizer$2d$fn$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["wrapNormalizerFn"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeAppPath"]), + // The page should have the `%5F` characters replaced with `_` characters. + new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$underscore$2d$normalizer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["UnderscoreNormalizer"]() + ]); + } + normalize(page) { + return super.normalize(page); + } +} +class DevAppPathnameNormalizer extends __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$normalizers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["Normalizers"] { + constructor(pageNormalizer){ + super([ + // This should normalize the filename to a page. + pageNormalizer, + // Normalize the app page to a pathname. + new AppPathnameNormalizer() + ]); + } + normalize(filename) { + return super.normalize(filename); + } +} +}), +"[project]/node_modules/next/dist/esm/server/normalizers/normalizers.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Normalizers combines many normalizers into a single normalizer interface that + * will normalize the inputted pathname with each normalizer in order. + */ __turbopack_context__.s([ + "Normalizers", + ()=>Normalizers +]); +class Normalizers { + constructor(normalizers = []){ + this.normalizers = normalizers; + } + push(normalizer) { + this.normalizers.push(normalizer); + } + normalize(pathname) { + return this.normalizers.reduce((normalized, normalizer)=>normalizer.normalize(normalized), pathname); + } +} +}), +"[project]/node_modules/next/dist/esm/server/normalizers/underscore-normalizer.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * UnderscoreNormalizer replaces all instances of %5F with _. + */ __turbopack_context__.s([ + "UnderscoreNormalizer", + ()=>UnderscoreNormalizer +]); +class UnderscoreNormalizer { + normalize(pathname) { + return pathname.replace(/%5F/g, '_'); + } +} +}), +"[project]/node_modules/next/dist/esm/server/normalizers/wrap-normalizer-fn.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "wrapNormalizerFn", + ()=>wrapNormalizerFn +]); +function wrapNormalizerFn(fn) { + return { + normalize: fn + }; +} +}), +"[project]/node_modules/next/dist/esm/server/pipe-readable.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "isAbortError", + ()=>isAbortError, + "pipeNodeReadableToNodeResponse", + ()=>pipeNodeReadableToNodeResponse, + "pipeToNodeResponse", + ()=>pipeToNodeResponse +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/next-request.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)"); +; +; +; +; +function isAbortError(e) { + return (e == null ? void 0 : e.name) === 'AbortError' || (e == null ? void 0 : e.name) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ResponseAbortedName"]; +} +const HAS_CLIENT_COMPONENT_METRICS_ENABLED = 'performance' in globalThis && process.env.NEXT_OTEL_PERFORMANCE_PREFIX; +function createWriterFromResponse(res, waitUntilForEnd, clientComponentLoadTracker) { + let started = false; + // Create a promise that will resolve once the response has drained. See + // https://nodejs.org/api/stream.html#stream_event_drain + let drained = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + function onDrain() { + drained.resolve(); + } + res.on('drain', onDrain); + // If the finish event fires, it means we shouldn't block and wait for the + // drain event. + res.once('close', ()=>{ + res.off('drain', onDrain); + drained.resolve(); + }); + // Create a promise that will resolve once the response has finished. See + // https://nodejs.org/api/http.html#event-finish_1 + const finished = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + res.once('finish', ()=>{ + finished.resolve(); + }); + // Create a writable stream that will write to the response. + return new WritableStream({ + write: async (chunk)=>{ + // You'd think we'd want to use `start` instead of placing this in `write` + // but this ensures that we don't actually flush the headers until we've + // started writing chunks. + if (!started) { + started = true; + if (HAS_CLIENT_COMPONENT_METRICS_ENABLED) { + const metrics = clientComponentLoadTracker == null ? void 0 : clientComponentLoadTracker.snapshot(); + if (metrics) { + performance.measure(`${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`, { + start: metrics.clientComponentLoadStart, + end: metrics.clientComponentLoadStart + metrics.clientComponentLoadTimes + }); + } + } + res.flushHeaders(); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])().trace(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextNodeServerSpan"].startResponse, { + spanName: 'start response' + }, ()=>undefined); + } + try { + const ok = res.write(chunk); + // Added by the `compression` middleware, this is a function that will + // flush the partially-compressed response to the client. + if ('flush' in res && typeof res.flush === 'function') { + res.flush(); + } + // If the write returns false, it means there's some backpressure, so + // wait until it's streamed before continuing. + if (!ok) { + await drained.promise; + // Reset the drained promise so that we can wait for the next drain event. + drained = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + } + } catch (err) { + res.end(); + throw new Error('failed to write chunk to response', { + cause: err + }); + } + }, + abort: (err)=>{ + if (res.writableFinished) return; + res.destroy(err); + }, + close: async ()=>{ + // if a waitUntil promise was passed, wait for it to resolve before + // ending the response. + if (waitUntilForEnd) { + await waitUntilForEnd; + } + if (res.writableFinished) return; + res.end(); + return finished.promise; + } + }); +} +async function pipeToNodeResponse(readable, res, waitUntilForEnd, clientComponentLoadTracker) { + try { + // If the response has already errored, then just return now. + const { errored, destroyed } = res; + if (errored || destroyed) return; + // Create a new AbortController so that we can abort the readable if the + // client disconnects. + const controller = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createAbortController"])(res); + const writer = createWriterFromResponse(res, waitUntilForEnd, clientComponentLoadTracker); + await readable.pipeTo(writer, { + signal: controller.signal + }); + } catch (err) { + // If this isn't related to an abort error, re-throw it. + if (isAbortError(err)) return; + throw new Error('failed to pipe response', { + cause: err + }); + } +} +async function pipeNodeReadableToNodeResponse(readable, res, waitUntilForEnd, clientComponentLoadTracker) { + try { + const { errored, destroyed } = res; + if (errored || destroyed) return; + let started = false; + const finished = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + // One `drain` listener for the whole response, as in + // `createWriterFromResponse` above. It must not be `res.once('drain')` per + // backpressured write: the `compression` middleware forwards `res.on` to + // its zlib stream but leaves `removeListener` pointing at the response, so + // a `once` listener is never removed from the stream it was added to. Each + // backpressured write would leak one, and past ten Node reports the stream + // as a probable leak via `MaxListenersExceededWarning`. + // + // TODO: the upstream fix for that asymmetry is + // https://github.com/expressjs/compression/pull/153, which intercepts + // `removeListener` so it reaches the zlib stream. It has been open since + // 2019 and is not in upstream 1.8.1; we vendor 1.7.4. If it ever lands and + // we upgrade, `res.off('drain', onDrain)` below would start working with + // compression active and the caveat on the `close` handler could go away. + let paused = false; + const onDrain = ()=>{ + // The listener outlives the readable: `off` below cannot reach the zlib + // stream either, so a late drain can arrive after teardown. + if (!paused || readable.destroyed) return; + paused = false; + readable.resume(); + }; + res.on('drain', onDrain); + res.once('close', ()=>{ + // Only removes the listener when compression is inactive, which is the + // case where it was added to the response itself. Otherwise it lives on + // the zlib stream, which is released with the response. + res.off('drain', onDrain); + readable.destroy(); + finished.resolve(); + }); + readable.on('data', (chunk)=>{ + if (!started) { + started = true; + if ('performance' in globalThis && process.env.NEXT_OTEL_PERFORMANCE_PREFIX) { + const metrics = clientComponentLoadTracker == null ? void 0 : clientComponentLoadTracker.snapshot(); + if (metrics) { + performance.measure(`${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`, { + start: metrics.clientComponentLoadStart, + end: metrics.clientComponentLoadStart + metrics.clientComponentLoadTimes + }); + } + } + res.flushHeaders(); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])().trace(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextNodeServerSpan"].startResponse, { + spanName: 'start response' + }, ()=>undefined); + } + const ok = res.write(chunk); + if ('flush' in res && typeof res.flush === 'function') { + res.flush(); + } + if (!ok) { + paused = true; + readable.pause(); + } + }); + readable.on('end', async ()=>{ + if (waitUntilForEnd) { + await waitUntilForEnd; + } + if (!res.writableFinished) { + res.end(); + } + finished.resolve(); + }); + readable.on('error', (err)=>{ + if (isAbortError(err)) { + finished.resolve(); + return; + } + res.destroy(err); + finished.resolve(); + }); + await finished.promise; + } catch (err) { + if (isAbortError(err)) return; + throw new Error('failed to pipe response', { + cause: err + }); + } +} +}), +"[project]/node_modules/next/dist/esm/server/render-result.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "default", + ()=>RenderResult +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/stream-utils/node-web-streams-helper.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/pipe-readable.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +; +; +; +function isNodeReadable(value) { + return value !== null && typeof value === 'object' && typeof value.pipe === 'function' && typeof value.on === 'function' && !(value instanceof ReadableStream); +} +class RenderResult { + static #_ = /** + * A render result that represents an empty response. This is used to + * represent a response that was not found or was already sent. + */ this.EMPTY = new RenderResult(null, { + metadata: {}, + contentType: null + }); + /** + * Creates a new RenderResult instance from a static response. + * + * @param value the static response value + * @param contentType the content type of the response + * @returns a new RenderResult instance + */ static fromStatic(value, contentType) { + return new RenderResult(value, { + metadata: {}, + contentType + }); + } + constructor(response, { contentType, waitUntil, metadata }){ + this.response = response; + this.contentType = contentType; + this.metadata = metadata; + this.waitUntil = waitUntil; + } + assignMetadata(metadata) { + Object.assign(this.metadata, metadata); + } + /** + * Returns true if the response is null. It can be null if the response was + * not found or was already sent. + */ get isNull() { + return this.response === null; + } + /** + * Returns false if the response is a string. It can be a string if the page + * was prerendered. If it's not, then it was generated dynamically. + */ get isDynamic() { + return typeof this.response !== 'string'; + } + toUnchunkedString(stream = false) { + if (this.response === null) { + // If the response is null, return an empty string. This behavior is + // intentional as we're now providing the `RenderResult.EMPTY` value. + return ''; + } + if (typeof this.response !== 'string') { + if (!stream) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('dynamic responses cannot be unchunked. This is a bug in Next.js'); + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["streamToString"])(this.readable); + } + return this.response; + } + /** + * Returns a readable stream of the response. + */ get readable() { + if (this.response === null) { + // If the response is null, return an empty stream. This behavior is + // intentional as we're now providing the `RenderResult.EMPTY` value. + return new ReadableStream({ + start (controller) { + controller.close(); + } + }); + } + if (typeof this.response === 'string') { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["streamFromString"])(this.response); + } + if (Buffer.isBuffer(this.response)) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["streamFromBuffer"])(this.response); + } + // If the response is an array of streams, then chain them together. + if (Array.isArray(this.response)) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["chainStreams"])(...this.response); + } + if (isNodeReadable(this.response)) { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + let Readable; + if ("TURBOPACK compile-time truthy", 1) { + Readable = __turbopack_context__.r("[externals]/node:stream [external] (node:stream, cjs)").Readable; + } else //TURBOPACK unreachable + ; + return Readable.toWeb(this.response); + } + } + return this.response; + } + /** + * Coerces the response to an array of streams. This will convert the response + * to an array of streams if it is not already one. + * + * @returns An array of streams + */ coerce() { + if (this.response === null) { + // If the response is null, return an empty stream. This behavior is + // intentional as we're now providing the `RenderResult.EMPTY` value. + return []; + } + if (typeof this.response === 'string') { + return [ + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["streamFromString"])(this.response) + ]; + } else if (Array.isArray(this.response)) { + return this.response; + } else if (Buffer.isBuffer(this.response)) { + return [ + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["streamFromBuffer"])(this.response) + ]; + } else if (isNodeReadable(this.response)) { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + let Readable; + if ("TURBOPACK compile-time truthy", 1) { + Readable = __turbopack_context__.r("[externals]/node:stream [external] (node:stream, cjs)").Readable; + } else //TURBOPACK unreachable + ; + return [ + Readable.toWeb(this.response) + ]; + } + } else { + return [ + this.response + ]; + } + } + /** + * Pipes the response through a transform stream. This converts the response + * to a single readable stream (chaining if needed) and pipes it through the + * provided transform. + * + * @param transform The transform stream to pipe through + */ pipeThrough(transform) { + this.response = this.readable.pipeThrough(transform); + } + /** + * Unshifts a new stream to the response. This will convert the response to an + * array of streams if it is not already one and will add the new stream to + * the start of the array. When this response is piped, all of the streams + * will be piped one after the other. + * + * @param readable The new stream to unshift + */ unshift(readable) { + // Coerce the response to an array of streams. + this.response = this.coerce(); + // Add the new stream to the start of the array. + this.response.unshift(readable); + } + /** + * Chains a new stream to the response. This will convert the response to an + * array of streams if it is not already one and will add the new stream to + * the end. When this response is piped, all of the streams will be piped + * one after the other. + * + * @param readable The new stream to chain + */ push(readable) { + // Coerce the response to an array of streams. + this.response = this.coerce(); + // Add the new stream to the end of the array. + this.response.push(readable); + } + /** + * Pipes the response to a writable stream. This will close/cancel the + * writable stream if an error is encountered. If this doesn't throw, then + * the writable stream will be closed or aborted. + * + * @param writable Writable stream to pipe the response to + */ async pipeTo(writable) { + try { + await this.readable.pipeTo(writable, { + // We want to close the writable stream ourselves so that we can wait + // for the waitUntil promise to resolve before closing it. If an error + // is encountered, we'll abort the writable stream if we swallowed the + // error. + preventClose: true + }); + // If there is a waitUntil promise, wait for it to resolve before + // closing the writable stream. + if (this.waitUntil) await this.waitUntil; + // Close the writable stream. + await writable.close(); + } catch (err) { + // If this is an abort error, we should abort the writable stream (as we + // took ownership of it when we started piping). We don't need to re-throw + // because we handled the error. + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isAbortError"])(err)) { + // Abort the writable stream if an error is encountered. + await writable.abort(err); + return; + } + // We're not aborting the writer here as when this method throws it's not + // clear as to how so the caller should assume it's their responsibility + // to clean up the writer. + throw err; + } + } + /** + * Pipes the response to a node response. This will close/cancel the node + * response if an error is encountered. + * + * @param res + */ async pipeToNodeResponse(res) { + if (this.response !== null && typeof this.response !== 'string' && !Buffer.isBuffer(this.response) && !Array.isArray(this.response) && isNodeReadable(this.response)) { + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pipeNodeReadableToNodeResponse"])(this.response, res, this.waitUntil, this.metadata.clientComponentLoadTracker); + return; + } + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pipeToNodeResponse"])(this.readable, res, this.waitUntil, this.metadata.clientComponentLoadTracker); + } +} +}), +"[project]/node_modules/next/dist/esm/server/request-meta.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +// FIXME: (wyattjoh) this is a temporary solution to allow us to pass data between bundled modules +__turbopack_context__.s([ + "NEXT_REQUEST_META", + ()=>NEXT_REQUEST_META, + "addRequestMeta", + ()=>addRequestMeta, + "getRequestMeta", + ()=>getRequestMeta, + "removeRequestMeta", + ()=>removeRequestMeta, + "setRequestMeta", + ()=>setRequestMeta +]); +const NEXT_REQUEST_META = Symbol.for('NextInternalRequestMeta'); +function getRequestMeta(req, key) { + const meta = req[NEXT_REQUEST_META] || {}; + return typeof key === 'string' ? meta[key] : meta; +} +function setRequestMeta(req, meta) { + req[NEXT_REQUEST_META] = meta; + return meta; +} +function addRequestMeta(request, key, value) { + const meta = getRequestMeta(request); + meta[key] = value; + return setRequestMeta(request, meta); +} +function removeRequestMeta(request, key) { + const meta = getRequestMeta(request); + delete meta[key]; + return setRequestMeta(request, meta); +} +}), +"[project]/node_modules/next/dist/esm/server/response-cache/index.js [app-route] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "default", + ()=>ResponseCache +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/types.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$batcher$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/batcher.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/lru-cache.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$output$2f$log$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/build/output/log.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/scheduler.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/utils.js [app-route] (ecmascript)"); +; +; +; +; +; +; +; +/** + * Parses an environment variable as a positive integer, returning the fallback + * if the value is missing, not a number, or not positive. + */ function parsePositiveInt(envValue, fallback) { + if (!envValue) return fallback; + const parsed = parseInt(envValue, 10); + return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback; +} +/** + * Default TTL (in milliseconds) for minimal mode response cache entries. + * Used for cache hit validation as a fallback for providers that don't + * send the x-invocation-id header yet. + * + * 10 seconds chosen because: + * - Long enough to dedupe rapid successive requests (e.g., page + data) + * - Short enough to not serve stale data across unrelated requests + * + * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_TTL` environment variable. + */ const DEFAULT_TTL_MS = parsePositiveInt(process.env.NEXT_PRIVATE_RESPONSE_CACHE_TTL, 10000); +/** + * Default maximum number of entries in the response cache. + * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE` environment variable. + */ const DEFAULT_MAX_SIZE = parsePositiveInt(process.env.NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE, 150); +/** + * Separator used in compound cache keys to join pathname and invocationID. + * Using null byte (\0) since it cannot appear in valid URL paths or UUIDs. + */ const KEY_SEPARATOR = '\0'; +/** + * Sentinel value used for TTL-based cache entries (when invocationID is undefined). + * Chosen to be a clearly reserved marker for internal cache keys. + */ const TTL_SENTINEL = '__ttl_sentinel__'; +/** + * Creates a compound cache key from pathname and invocationID. + */ function createCacheKey(pathname, invocationID) { + return `${pathname}${KEY_SEPARATOR}${invocationID ?? TTL_SENTINEL}`; +} +/** + * Extracts the invocationID from a compound cache key. + * Returns undefined if the key used TTL_SENTINEL. + */ function extractInvocationID(compoundKey) { + const separatorIndex = compoundKey.lastIndexOf(KEY_SEPARATOR); + if (separatorIndex === -1) return undefined; + const invocationID = compoundKey.slice(separatorIndex + 1); + return invocationID === TTL_SENTINEL ? undefined : invocationID; +} +; +class ResponseCache { + constructor({ minimalMode, route, maxSize = DEFAULT_MAX_SIZE, ttl = DEFAULT_TTL_MS }){ + // The get and revalidate batchers share pending renders across invocation + // IDs, including failures. Invocation IDs scope reuse of completed results in + // the LRU below. + this.getBatcher = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$batcher$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["Batcher"].create({ + // Ensure on-demand revalidate doesn't block normal requests, it should be + // safe to run an on-demand revalidate for the same key as a normal request. + cacheKeyFn: ({ key, isOnDemandRevalidate })=>`${key}-${isOnDemandRevalidate ? '1' : '0'}`, + // We wait to do any async work until after we've added our promise to + // `pendingResponses` to ensure that any any other calls will reuse the + // same promise until we've fully finished our work. + schedulerFn: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["scheduleOnNextTick"] + }); + this.revalidateBatcher = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$batcher$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["Batcher"].create({ + // We wait to do any async work until after we've added our promise to + // `pendingResponses` to ensure that any any other calls will reuse the + // same promise until we've fully finished our work. + schedulerFn: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["scheduleOnNextTick"] + }); + /** + * Set of invocation IDs that have had cache entries evicted. + * Used to detect when the cache size may be too small. + * Bounded to prevent memory growth. + */ this.evictedInvocationIDs = new Set(); + if (!route) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('Response cache requires a source route'); + } + this.route = route; + this.minimal_mode = minimalMode; + this.maxSize = maxSize; + this.ttl = ttl; + // Create the LRU cache with eviction tracking + this.cache = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["LRUCache"](maxSize, undefined, (compoundKey)=>{ + const invocationID = extractInvocationID(compoundKey); + if (invocationID) { + // Bound to 100 entries to prevent unbounded memory growth. + // FIFO eviction is acceptable here because: + // 1. Invocations are short-lived (single request lifecycle), so older + // invocations are unlikely to still be active after 100 newer ones + // 2. This warning mechanism is best-effort for developer guidance— + // missing occasional eviction warnings doesn't affect correctness + // 3. If a long-running invocation is somehow evicted and then has + // another cache entry evicted, it will simply be re-added + if (this.evictedInvocationIDs.size >= 100) { + const first = this.evictedInvocationIDs.values().next().value; + if (first) this.evictedInvocationIDs.delete(first); + } + this.evictedInvocationIDs.add(invocationID); + } + }); + } + /** + * Gets the response cache entry for the given key. + * + * @param key - The key to get the response cache entry for. + * @param responseGenerator - The response generator to use to generate the response cache entry. + * @param context - The context for the get request. + * @returns The response cache entry. + */ async get(key, responseGenerator, context) { + // If there is no key for the cache, we can't possibly look this up in the + // cache so just return the result of the response generator. + if (!key) { + return responseGenerator({ + hasResolved: false, + previousCacheEntry: null + }); + } + // Check minimal mode cache before doing any other work. + if (this.minimal_mode) { + const cacheKey = createCacheKey(key, context.invocationID); + const cachedItem = this.cache.get(cacheKey); + if (cachedItem) { + // With invocationID: exact match found - always a hit + // With TTL mode: must check expiration + if (context.invocationID !== undefined) { + return cachedItem.entry !== null && 'error' in cachedItem.entry ? cachedItem.entry : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["toResponseCacheEntry"])(cachedItem.entry); + } + // TTL entries can be reused by unrelated requests. Exclude failures so + // those requests can retry instead of receiving a cached error. + const now = Date.now(); + if ((cachedItem.entry === null || !('error' in cachedItem.entry)) && cachedItem.expiresAt > now) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["toResponseCacheEntry"])(cachedItem.entry); + } + // TTL expired - clean up + this.cache.remove(cacheKey); + } + // Warn if this invocation had entries evicted - indicates cache may be too small. + if (context.invocationID && this.evictedInvocationIDs.has(context.invocationID)) { + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$output$2f$log$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["warnOnce"])(`Response cache entry was evicted for invocation ${context.invocationID}. ` + `Consider increasing NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE (current: ${this.maxSize}).`); + } + } + const { incrementalCache, isOnDemandRevalidate = false, isFallback = false, isRoutePPREnabled = false, isPrefetch = false, waitUntil, invocationID } = context; + const response = await this.getBatcher.batch({ + key, + isOnDemandRevalidate + }, ({ resolve })=>{ + const promise = this.handleGet(key, responseGenerator, { + incrementalCache, + isOnDemandRevalidate, + isFallback, + isRoutePPREnabled, + isPrefetch, + invocationID + }, resolve); + // We need to ensure background revalidates are passed to waitUntil. + if (waitUntil) waitUntil(promise); + return promise; + }); + // In minimal mode, each caller with an invocation ID stores the shared + // failure under its own ID for reuse by related requests. Callers without + // an invocation ID receive the failure but do not store it in the LRU. + if (this.minimal_mode && response && ('error' in response ? invocationID !== undefined : response.cacheControl)) { + const cacheKey = createCacheKey(key, invocationID); + this.cache.set(cacheKey, { + entry: response, + expiresAt: Date.now() + this.ttl + }); + } + return response !== null && 'error' in response ? response : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["toResponseCacheEntry"])(response); + } + /** + * Handles the get request for the response cache. + * + * @param key - The key to get the response cache entry for. + * @param responseGenerator - The response generator to use to generate the response cache entry. + * @param context - The context for the get request. + * @param resolve - The resolve function to use to resolve the response cache entry. + * @returns The response cache entry. + */ async handleGet(key, responseGenerator, context, resolve) { + let previousIncrementalCacheEntry = null; + let resolved = false; + try { + // Get the previous cache entry if not in minimal mode + previousIncrementalCacheEntry = !this.minimal_mode ? await context.incrementalCache.get(key, this.getCacheContext(context.isRoutePPREnabled, context.isFallback)) : null; + // `isStale === -1` signals that the entry is past its `expire` (either + // via an expired tag or, with `cacheLife({ expire })`, past the route's + // expire time in the prerender manifest). In that case we must NOT + // early-resolve with the stale value — instead we fall through to a + // blocking revalidation so the response returned to the user is fresh. + if (previousIncrementalCacheEntry && !context.isOnDemandRevalidate && previousIncrementalCacheEntry.isStale !== -1) { + resolve(previousIncrementalCacheEntry); + resolved = true; + if (!previousIncrementalCacheEntry.isStale || context.isPrefetch) { + // The cached value is still valid, so we don't need to update it yet. + return previousIncrementalCacheEntry; + } + } + // Revalidate the cache entry. + // + // A prefetch request that missed must run its own response generator + // rather than joining an in-flight revalidation through the batcher. A + // background revalidation may be regenerating the concrete (non-fallback) + // entry for this route — e.g. an ISR fallback-shell upgrade scheduled by + // an earlier prefetch sub-request. Joining it would serve that concrete + // result to the prefetch instead of the fallback shell, and which segment + // wins would depend purely on request timing. Running the generator + // directly lets every prefetch segment take the same fallback-shell path, + // independent of any concurrent background upgrade. + const incrementalResponseCacheEntry = context.isPrefetch && previousIncrementalCacheEntry === null ? await this.handleRevalidate(key, context.incrementalCache, context.isRoutePPREnabled, context.isFallback, responseGenerator, previousIncrementalCacheEntry, resolved) : await this.revalidate(key, context.incrementalCache, context.isRoutePPREnabled, context.isFallback, responseGenerator, previousIncrementalCacheEntry, resolved); + if (incrementalResponseCacheEntry !== null && 'error' in incrementalResponseCacheEntry && resolved) { + // The caller already received the stale entry. Report the background + // failure here, as the catch below does for a thrown error. + console.error(incrementalResponseCacheEntry.error); + return null; + } + // Handle null response + if (!incrementalResponseCacheEntry) { + // Remove the cache item if it was set so we don't use it again. + if (this.minimal_mode) { + const cacheKey = createCacheKey(key, context.invocationID); + this.cache.remove(cacheKey); + } + return null; + } + // Resolve for on-demand revalidation or if not already resolved + if (context.isOnDemandRevalidate && !resolved) { + return incrementalResponseCacheEntry; + } + return incrementalResponseCacheEntry; + } catch (err) { + // If we've already resolved the cache entry, we can't reject as we + // already resolved the cache entry so log the error here. + if (resolved) { + console.error(err); + return null; + } + throw err; + } + } + /** + * Revalidates the cache entry for the given key. + * + * @param key - The key to revalidate the cache entry for. + * @param incrementalCache - The incremental cache to use to revalidate the cache entry. + * @param isRoutePPREnabled - Whether the route is PPR enabled. + * @param isFallback - Whether the route is a fallback. + * @param responseGenerator - The response generator to use to generate the response cache entry. + * @param previousIncrementalCacheEntry - The previous cache entry to use to revalidate the cache entry. + * @param hasResolved - Whether the response has been resolved. + * @param waitUntil - Optional function to register background work. + * @param invocationID - The invocation ID for cache key scoping. + * @returns The revalidated cache entry. + */ async revalidate(key, incrementalCache, isRoutePPREnabled, isFallback, responseGenerator, previousIncrementalCacheEntry, hasResolved, waitUntil) { + return this.revalidateBatcher.batch(key, ()=>{ + const promise = this.handleRevalidate(key, incrementalCache, isRoutePPREnabled, isFallback, responseGenerator, previousIncrementalCacheEntry, hasResolved); + // We need to ensure background revalidates are passed to waitUntil. + if (waitUntil) waitUntil(promise); + return promise; + }); + } + async handleRevalidate(key, incrementalCache, isRoutePPREnabled, isFallback, responseGenerator, previousIncrementalCacheEntry, hasResolved) { + let failure; + try { + // Generate the response cache entry using the response generator. + const responseCacheEntry = await responseGenerator({ + hasResolved, + previousCacheEntry: previousIncrementalCacheEntry, + isRevalidating: true + }); + if (!responseCacheEntry) { + return null; + } + if ('error' in responseCacheEntry) { + failure = responseCacheEntry; + } else { + // Convert the response cache entry to an incremental response cache entry. + const incrementalResponseCacheEntry = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["fromResponseCacheEntry"])({ + ...responseCacheEntry, + isMiss: !previousIncrementalCacheEntry + }); + // We want to persist the result only if it has a cache control value + // defined. The minimal mode LRU write is handled in get() so that every + // caller, including batched invocations, populates the cache. + if (incrementalResponseCacheEntry.cacheControl && !this.minimal_mode) { + await incrementalCache.set(key, incrementalResponseCacheEntry.value, { + ...this.getCacheContext(isRoutePPREnabled, isFallback), + cacheControl: incrementalResponseCacheEntry.cacheControl + }); + } + return incrementalResponseCacheEntry; + } + } catch (err) { + await this.retainPreviousCacheEntry(key, incrementalCache, isRoutePPREnabled, isFallback, previousIncrementalCacheEntry); + throw err; + } + await this.retainPreviousCacheEntry(key, incrementalCache, isRoutePPREnabled, isFallback, previousIncrementalCacheEntry); + return failure; + } + // Retain the previous successful value and delay retries after revalidation + // fails. + async retainPreviousCacheEntry(key, incrementalCache, isRoutePPREnabled, isFallback, previousIncrementalCacheEntry) { + if (previousIncrementalCacheEntry == null ? void 0 : previousIncrementalCacheEntry.cacheControl) { + const revalidate = Math.min(Math.max(previousIncrementalCacheEntry.cacheControl.revalidate || 3, 3), 30); + const expire = previousIncrementalCacheEntry.cacheControl.expire === undefined ? undefined : Math.max(revalidate + 3, previousIncrementalCacheEntry.cacheControl.expire); + await incrementalCache.set(key, previousIncrementalCacheEntry.value, { + ...this.getCacheContext(isRoutePPREnabled, isFallback), + cacheControl: { + revalidate: revalidate, + expire: expire + } + }); + } + } + getCacheContext(isRoutePPREnabled, isFallback) { + if (this.route === 'image') { + return { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].IMAGE, + isFallback: false + }; + } + const kind = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["routeKindToIncrementalCacheKind"])(this.route.kind); + if (kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].IMAGE) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('Images must use the image response cache'); + } + return { + route: this.route, + kind, + isRoutePPREnabled, + isFallback + }; + } +} +}), +"[project]/node_modules/next/dist/esm/server/response-cache/types.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "CachedRouteKind", + ()=>CachedRouteKind, + "IncrementalCacheKind", + ()=>IncrementalCacheKind +]); +var CachedRouteKind = /*#__PURE__*/ function(CachedRouteKind) { + CachedRouteKind["APP_PAGE"] = "APP_PAGE"; + CachedRouteKind["APP_ROUTE"] = "APP_ROUTE"; + CachedRouteKind["PAGES"] = "PAGES"; + CachedRouteKind["FETCH"] = "FETCH"; + CachedRouteKind["REDIRECT"] = "REDIRECT"; + CachedRouteKind["IMAGE"] = "IMAGE"; + return CachedRouteKind; +}({}); +var IncrementalCacheKind = /*#__PURE__*/ function(IncrementalCacheKind) { + IncrementalCacheKind["APP_PAGE"] = "APP_PAGE"; + IncrementalCacheKind["APP_ROUTE"] = "APP_ROUTE"; + IncrementalCacheKind["PAGES"] = "PAGES"; + IncrementalCacheKind["FETCH"] = "FETCH"; + IncrementalCacheKind["IMAGE"] = "IMAGE"; + return IncrementalCacheKind; +}({}); +}), +"[project]/node_modules/next/dist/esm/server/response-cache/utils.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "fromResponseCacheEntry", + ()=>fromResponseCacheEntry, + "routeKindToIncrementalCacheKind", + ()=>routeKindToIncrementalCacheKind, + "toResponseCacheEntry", + ()=>toResponseCacheEntry +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/types.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/render-result.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/route-kind.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)"); +; +; +; +; +async function fromResponseCacheEntry(cacheEntry) { + var _cacheEntry_value, _cacheEntry_value1; + return { + ...cacheEntry, + value: ((_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES ? { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES, + html: await cacheEntry.value.html.toUnchunkedString(true), + pageData: cacheEntry.value.pageData, + headers: cacheEntry.value.headers, + status: cacheEntry.value.status + } : ((_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE ? { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE, + html: await cacheEntry.value.html.toUnchunkedString(true), + postponed: cacheEntry.value.postponed, + rscData: cacheEntry.value.rscData, + headers: cacheEntry.value.headers, + status: cacheEntry.value.status, + segmentData: cacheEntry.value.segmentData + } : cacheEntry.value + }; +} +async function toResponseCacheEntry(response) { + var _response_value, _response_value1; + if (!response) return null; + return { + isMiss: response.isMiss, + isStale: response.isStale, + cacheControl: response.cacheControl, + isFallback: response.isFallback, + value: ((_response_value = response.value) == null ? void 0 : _response_value.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES ? { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES, + html: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].fromStatic(response.value.html, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["HTML_CONTENT_TYPE_HEADER"]), + pageData: response.value.pageData, + headers: response.value.headers, + status: response.value.status + } : ((_response_value1 = response.value) == null ? void 0 : _response_value1.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE ? { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE, + html: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].fromStatic(response.value.html, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["HTML_CONTENT_TYPE_HEADER"]), + rscData: response.value.rscData, + headers: response.value.headers, + status: response.value.status, + postponed: response.value.postponed, + segmentData: response.value.segmentData + } : response.value + }; +} +function routeKindToIncrementalCacheKind(routeKind) { + switch(routeKind){ + case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].PAGES: + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].PAGES; + case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].APP_PAGE: + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].APP_PAGE; + case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].IMAGE: + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].IMAGE; + case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].APP_ROUTE: + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].APP_ROUTE; + case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].PAGES_API: + // Pages Router API routes are not cached in the incremental cache. + throw new Error(`Unexpected route kind ${routeKind}`); + default: + return routeKind; + } +} +}), +"[project]/node_modules/next/dist/esm/server/route-kind.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "RouteKind", + ()=>RouteKind +]); +var RouteKind = /*#__PURE__*/ function(RouteKind) { + /** + * `PAGES` represents all the React pages that are under `pages/`. + */ RouteKind["PAGES"] = "PAGES"; + /** + * `PAGES_API` represents all the API routes under `pages/api/`. + */ RouteKind["PAGES_API"] = "PAGES_API"; + /** + * `APP_PAGE` represents all the React pages that are under `app/` with the + * filename of `page.{j,t}s{,x}`. + */ RouteKind["APP_PAGE"] = "APP_PAGE"; + /** + * `APP_ROUTE` represents all the API routes and metadata routes that are under `app/` with the + * filename of `route.{j,t}s{,x}`. + */ RouteKind["APP_ROUTE"] = "APP_ROUTE"; + /** + * `IMAGE` represents all the images that are generated by `next/image`. + */ RouteKind["IMAGE"] = "IMAGE"; + return RouteKind; +}({}); +}), +"[project]/node_modules/next/dist/esm/server/send-response.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "sendResponse", + ()=>sendResponse +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/base-http/helpers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/pipe-readable.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/utils.js [app-route] (ecmascript)"); +; +; +; +async function sendResponse(req, res, response, waitUntil) { + if (// environment variable check provides dead code elimination. + ("TURBOPACK compile-time value", "nodejs") !== 'edge' && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isNodeNextResponse"])(res)) { + var _response_headers; + // Copy over the response status. + res.statusCode = response.status; + res.statusMessage = response.statusText; + // TODO: this is not spec-compliant behavior and we should not restrict + // headers that are allowed to appear many times. + // + // See: + // https://github.com/vercel/next.js/pull/70127 + const headersWithMultipleValuesAllowed = [ + // can add more headers to this list if needed + 'set-cookie', + 'www-authenticate', + 'proxy-authenticate', + 'vary' + ]; + (_response_headers = response.headers) == null ? void 0 : _response_headers.forEach((value, name)=>{ + // `x-middleware-set-cookie` is an internal header not needed for the response + if (name.toLowerCase() === 'x-middleware-set-cookie') { + return; + } + // The append handling is special cased for `set-cookie`. + if (name.toLowerCase() === 'set-cookie') { + // TODO: (wyattjoh) replace with native response iteration when we can upgrade undici + for (const cookie of (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["splitCookiesString"])(value)){ + res.appendHeader(name, cookie); + } + } else { + // only append the header if it is either not present in the outbound response + // or if the header supports multiple values + const isHeaderPresent = typeof res.getHeader(name) !== 'undefined'; + if (headersWithMultipleValuesAllowed.includes(name.toLowerCase()) || !isHeaderPresent) { + res.appendHeader(name, value); + } + } + }); + /** + * The response can't be directly piped to the underlying response. The + * following is duplicated from the edge runtime handler. + * + * See packages/next/server/next-server.ts + */ const { originalResponse } = res; + // A response body must not be sent for HEAD requests. See https://httpwg.org/specs/rfc9110.html#HEAD + if (response.body && req.method !== 'HEAD') { + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pipeToNodeResponse"])(response.body, originalResponse, waitUntil); + } else { + originalResponse.end(); + } + } +} +}), +"[project]/node_modules/next/dist/esm/server/stream-utils/encoded-tags.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ENCODED_TAGS", + ()=>ENCODED_TAGS +]); +const ENCODED_TAGS = { + // opening tags do not have the closing `>` since they can contain other attributes such as `` + OPENING: { + // + HEAD: new Uint8Array([ + 60, + 47, + 104, + 101, + 97, + 100, + 62 + ]), + // + BODY: new Uint8Array([ + 60, + 47, + 98, + 111, + 100, + 121, + 62 + ]), + // + HTML: new Uint8Array([ + 60, + 47, + 104, + 116, + 109, + 108, + 62 + ]), + // + BODY_AND_HTML: new Uint8Array([ + 60, + 47, + 98, + 111, + 100, + 121, + 62, + 60, + 47, + 104, + 116, + 109, + 108, + 62 + ]) + }, + META: { + // Only the match the prefix cause the suffix can be different whether it's xml compatible or not ">" or "/>" + // { +"use strict"; + +__turbopack_context__.s([ + "CLOSE_TAG", + ()=>CLOSE_TAG, + "chainStreams", + ()=>chainStreams, + "chainTransformers", + ()=>chainTransformers, + "continueDynamicHTMLResume", + ()=>continueDynamicHTMLResume, + "continueDynamicPrerender", + ()=>continueDynamicPrerender, + "continueFizzStream", + ()=>continueFizzStream, + "continueStaticFallbackPrerender", + ()=>continueStaticFallbackPrerender, + "continueStaticPrerender", + ()=>continueStaticPrerender, + "createBufferedTransformStream", + ()=>createBufferedTransformStream, + "createDeferredSuffixStream", + ()=>createDeferredSuffixStream, + "createDocumentClosingStream", + ()=>createDocumentClosingStream, + "createFlightDataInjectionTransformStream", + ()=>createFlightDataInjectionTransformStream, + "createHeadInsertionTransformStream", + ()=>createHeadInsertionTransformStream, + "createHtmlDataDplIdTransformStream", + ()=>createHtmlDataDplIdTransformStream, + "createMetadataTransformStream", + ()=>createMetadataTransformStream, + "createMoveSuffixStream", + ()=>createMoveSuffixStream, + "createRootLayoutValidatorStream", + ()=>createRootLayoutValidatorStream, + "createRuntimePrefetchTransformStream", + ()=>createRuntimePrefetchTransformStream, + "nodestreamToUint8Array", + ()=>nodestreamToUint8Array, + "renderToInitialFizzStream", + ()=>renderToInitialFizzStream, + "streamFromBuffer", + ()=>streamFromBuffer, + "streamFromString", + ()=>streamFromString, + "streamToBuffer", + ()=>streamToBuffer, + "streamToString", + ()=>streamToString, + "streamToUint8Array", + ()=>streamToUint8Array, + "webstreamToUint8Array", + ()=>webstreamToUint8Array +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/scheduler.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/stream-utils/encoded-tags.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/stream-utils/uint8array-helpers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$errors$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/errors/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/app-router-headers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$cache$2d$busting$2d$search$2d$param$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/cache-busting-search-param.js [app-route] (ecmascript)"); +; +; +; +; +; +; +; +; +; +function voidCatch() { +// this catcher is designed to be used with pipeTo where we expect the underlying +// pipe implementation to forward errors but we don't want the pipeTo promise to reject +// and be unhandled +} +// We can share the same encoder instance everywhere +// Notably we cannot do the same for TextDecoder because it is stateful +// when handling streaming data +const encoder = new TextEncoder(); +function chainStreams(...streams) { + // If we have no streams, return an empty stream. This behavior is + // intentional as we're now providing the `RenderResult.EMPTY` value. + if (streams.length === 0) { + return new ReadableStream({ + start (controller) { + controller.close(); + } + }); + } + // If we only have 1 stream we fast path it by returning just this stream + if (streams.length === 1) { + return streams[0]; + } + const { readable, writable } = new TransformStream(); + // We always initiate pipeTo immediately. We know we have at least 2 streams + // so we need to avoid closing the writable when this one finishes. + let promise = streams[0].pipeTo(writable, { + preventClose: true + }); + let i = 1; + for(; i < streams.length - 1; i++){ + const nextStream = streams[i]; + promise = promise.then(()=>nextStream.pipeTo(writable, { + preventClose: true + })); + } + // We can omit the length check because we halted before the last stream and there + // is at least two streams so the lastStream here will always be defined + const lastStream = streams[i]; + promise = promise.then(()=>lastStream.pipeTo(writable)); + // Catch any errors from the streams and ignore them, they will be handled + // by whatever is consuming the readable stream. + promise.catch(voidCatch); + return readable; +} +function streamFromString(str) { + return new ReadableStream({ + start (controller) { + controller.enqueue(encoder.encode(str)); + controller.close(); + } + }); +} +function streamFromBuffer(chunk) { + return new ReadableStream({ + start (controller) { + controller.enqueue(chunk); + controller.close(); + } + }); +} +async function streamToChunks(stream) { + const reader = stream.getReader(); + const chunks = []; + while(true){ + const { done, value } = await reader.read(); + if (done) { + break; + } + chunks.push(value); + } + return chunks; +} +function concatUint8Arrays(chunks) { + const totalLength = chunks.reduce((sum, chunk)=>sum + chunk.length, 0); + const result = new Uint8Array(totalLength); + let offset = 0; + for (const chunk of chunks){ + result.set(chunk, offset); + offset += chunk.length; + } + return result; +} +async function webstreamToUint8Array(stream) { + return concatUint8Arrays(await streamToChunks(stream)); +} +function webToReadable(stream) { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + let Readable; + if ("TURBOPACK compile-time truthy", 1) { + Readable = __turbopack_context__.r("[externals]/node:stream [external] (node:stream, cjs)").Readable; + } else //TURBOPACK unreachable + ; + if (stream instanceof Readable) { + return stream; + } + return Readable.fromWeb(stream); + } +} +async function nodestreamToUint8Array(stream) { + const chunks = []; + for await (const chunk of webToReadable(stream)){ + chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk); + } + return Buffer.concat(chunks); +} +async function streamToUint8Array(stream) { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + let Readable; + if ("TURBOPACK compile-time truthy", 1) { + Readable = __turbopack_context__.r("[externals]/node:stream [external] (node:stream, cjs)").Readable; + } else //TURBOPACK unreachable + ; + if (stream instanceof Readable) { + return nodestreamToUint8Array(stream); + } + return webstreamToUint8Array(stream); + } +} +async function streamToBuffer(stream) { + return Buffer.concat(await streamToChunks(stream)); +} +async function streamToString(stream, signal) { + const decoder = new TextDecoder('utf-8', { + fatal: true + }); + let string = ''; + for await (const chunk of stream){ + if (signal == null ? void 0 : signal.aborted) { + return string; + } + string += decoder.decode(chunk, { + stream: true + }); + } + string += decoder.decode(); + return string; +} +function createBufferedTransformStream(options = {}) { + const { maxBufferByteLength = Infinity } = options; + let bufferedChunks = []; + let bufferByteLength = 0; + let pending; + const flush = (controller)=>{ + try { + if (bufferedChunks.length === 0) { + return; + } + const chunk = new Uint8Array(bufferByteLength); + let copiedBytes = 0; + for(let i = 0; i < bufferedChunks.length; i++){ + const bufferedChunk = bufferedChunks[i]; + chunk.set(bufferedChunk, copiedBytes); + copiedBytes += bufferedChunk.byteLength; + } + // We just wrote all the buffered chunks so we need to reset the bufferedChunks array + // and our bufferByteLength to prepare for the next round of buffered chunks + bufferedChunks.length = 0; + bufferByteLength = 0; + controller.enqueue(chunk); + } catch { + // If an error occurs while enqueuing, it can't be due to this + // transformer. It's most likely caused by the controller having been + // errored (for example, if the stream was cancelled). + } + }; + const scheduleFlush = (controller)=>{ + if (pending) { + return; + } + const detached = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + pending = detached; + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["scheduleImmediate"])(()=>{ + try { + flush(controller); + } finally{ + pending = undefined; + detached.resolve(); + } + }); + }; + return new TransformStream({ + transform (chunk, controller) { + // Combine the previous buffer with the new chunk. + bufferedChunks.push(chunk); + bufferByteLength += chunk.byteLength; + if (bufferByteLength >= maxBufferByteLength) { + flush(controller); + } else { + scheduleFlush(controller); + } + }, + flush () { + return pending == null ? void 0 : pending.promise; + } + }); +} +function renderToInitialFizzStream({ ReactDOMServer, element, streamOptions }) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])().trace(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["AppRenderSpan"].renderToReadableStream, async ()=>ReactDOMServer.renderToReadableStream(element, streamOptions)); +} +function createMetadataTransformStream(insert) { + let chunkIndex = -1; + let isMarkRemoved = false; + return new TransformStream({ + async transform (chunk, controller) { + let iconMarkIndex = -1; + let closedHeadIndex = -1; + chunkIndex++; + if (isMarkRemoved) { + controller.enqueue(chunk); + return; + } + let iconMarkLength = 0; + // Only search for the closed head tag once + if (iconMarkIndex === -1) { + iconMarkIndex = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].META.ICON_MARK); + if (iconMarkIndex === -1) { + controller.enqueue(chunk); + return; + } else { + // When we found the `` or `>`, checking the next char to ensure we cover both cases. + iconMarkLength = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].META.ICON_MARK.length; + // Check if next char is /, this is for xml mode. + if (chunk[iconMarkIndex + iconMarkLength] === 47) { + iconMarkLength += 2; + } else { + // The last char is `>` + iconMarkLength++; + } + } + } + // Check if icon mark is inside tag in the first chunk. + if (chunkIndex === 0) { + closedHeadIndex = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HEAD); + if (iconMarkIndex !== -1) { + // The mark icon is located in the 1st chunk before the head tag. + // We do not need to insert the script tag in this case because it's in the head. + // Just remove the icon mark from the chunk. + if (iconMarkIndex < closedHeadIndex) { + const replaced = new Uint8Array(chunk.length - iconMarkLength); + // Remove the icon mark from the chunk. + replaced.set(chunk.subarray(0, iconMarkIndex)); + replaced.set(chunk.subarray(iconMarkIndex + iconMarkLength), iconMarkIndex); + chunk = replaced; + } else { + // The icon mark is after the head tag, replace and insert the script tag at that position. + const insertion = await insert(); + const encodedInsertion = encoder.encode(insertion); + const insertionLength = encodedInsertion.length; + const replaced = new Uint8Array(chunk.length - iconMarkLength + insertionLength); + replaced.set(chunk.subarray(0, iconMarkIndex)); + replaced.set(encodedInsertion, iconMarkIndex); + replaced.set(chunk.subarray(iconMarkIndex + iconMarkLength), iconMarkIndex + insertionLength); + chunk = replaced; + } + isMarkRemoved = true; + } + // If there's no icon mark located, it will be handled later when if present in the following chunks. + } else { + // When it's appeared in the following chunks, we'll need to + // remove the mark and then insert the script tag at that position. + const insertion = await insert(); + const encodedInsertion = encoder.encode(insertion); + const insertionLength = encodedInsertion.length; + // Replace the icon mark with the hoist script or empty string. + const replaced = new Uint8Array(chunk.length - iconMarkLength + insertionLength); + // Set the first part of the chunk, before the icon mark. + replaced.set(chunk.subarray(0, iconMarkIndex)); + // Set the insertion after the icon mark. + replaced.set(encodedInsertion, iconMarkIndex); + // Set the rest of the chunk after the icon mark. + replaced.set(chunk.subarray(iconMarkIndex + iconMarkLength), iconMarkIndex + insertionLength); + chunk = replaced; + isMarkRemoved = true; + } + controller.enqueue(chunk); + } + }); +} +function createHeadInsertionTransformStream(insert) { + let inserted = false; + // We need to track if this transform saw any bytes because if it didn't + // we won't want to insert any server HTML at all + let hasBytes = false; + return new TransformStream({ + async transform (chunk, controller) { + hasBytes = true; + const insertion = await insert(); + if (inserted) { + if (insertion) { + const encodedInsertion = encoder.encode(insertion); + controller.enqueue(encodedInsertion); + } + controller.enqueue(chunk); + } else { + // TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for. + const index = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HEAD); + // In fully static rendering or non PPR rendering cases: + // `/head>` will always be found in the chunk in first chunk rendering. + if (index !== -1) { + if (insertion) { + const encodedInsertion = encoder.encode(insertion); + // Get the total count of the bytes in the chunk and the insertion + // e.g. + // chunk = + // insertion = + // output = [ ] + const insertedHeadContent = new Uint8Array(chunk.length + encodedInsertion.length); + // Append the first part of the chunk, before the head tag + insertedHeadContent.set(chunk.slice(0, index)); + // Append the server inserted content + insertedHeadContent.set(encodedInsertion, index); + // Append the rest of the chunk + insertedHeadContent.set(chunk.slice(index), index + encodedInsertion.length); + controller.enqueue(insertedHeadContent); + } else { + controller.enqueue(chunk); + } + inserted = true; + } else { + // This will happens in PPR rendering during next start, when the page is partially rendered. + // When the page resumes, the head tag will be found in the middle of the chunk. + // Where we just need to append the insertion and chunk to the current stream. + // e.g. + // PPR-static: ... [ resume content ] + // PPR-resume: [ insertion ] [ rest content ] + if (insertion) { + controller.enqueue(encoder.encode(insertion)); + } + controller.enqueue(chunk); + inserted = true; + } + } + }, + async flush (controller) { + // Check before closing if there's anything remaining to insert. + if (hasBytes) { + const insertion = await insert(); + if (insertion) { + controller.enqueue(encoder.encode(insertion)); + } + } + } + }); +} +async function createClientResumeScriptInsertionTransformStream() { + const segmentPath = '/_full'; + const cacheBustingHeader = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$cache$2d$busting$2d$search$2d$param$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["computeCacheBustingSearchParam"])('1', '/_full', undefined, undefined // headers[NEXT_URL] + ); + const searchStr = `${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_RSC_UNION_QUERY"]}=${cacheBustingHeader}`; + const NEXT_CLIENT_RESUME_SCRIPT = ``; + let didAlreadyInsert = false; + return new TransformStream({ + transform (chunk, controller) { + if (didAlreadyInsert) { + // Already inserted the script into the head. Pass through. + controller.enqueue(chunk); + return; + } + // TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for. + const headClosingTagIndex = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HEAD); + if (headClosingTagIndex === -1) { + // In fully static rendering or non PPR rendering cases: + // `/head>` will always be found in the chunk in first chunk rendering. + controller.enqueue(chunk); + return; + } + const encodedInsertion = encoder.encode(NEXT_CLIENT_RESUME_SCRIPT); + // Get the total count of the bytes in the chunk and the insertion + // e.g. + // chunk = + // insertion = + // output = [ ] + const insertedHeadContent = new Uint8Array(chunk.length + encodedInsertion.length); + // Append the first part of the chunk, before the head tag + insertedHeadContent.set(chunk.slice(0, headClosingTagIndex)); + // Append the server inserted content + insertedHeadContent.set(encodedInsertion, headClosingTagIndex); + // Append the rest of the chunk + insertedHeadContent.set(chunk.slice(headClosingTagIndex), headClosingTagIndex + encodedInsertion.length); + controller.enqueue(insertedHeadContent); + didAlreadyInsert = true; + } + }); +} +function createDeferredSuffixStream(suffix) { + let flushed = false; + let pending; + const flush = (controller)=>{ + const detached = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + pending = detached; + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["scheduleImmediate"])(()=>{ + try { + controller.enqueue(encoder.encode(suffix)); + } catch { + // If an error occurs while enqueuing it can't be due to this + // transformers fault. It's likely due to the controller being + // errored due to the stream being cancelled. + } finally{ + pending = undefined; + detached.resolve(); + } + }); + }; + return new TransformStream({ + transform (chunk, controller) { + controller.enqueue(chunk); + // If we've already flushed, we're done. + if (flushed) return; + // Schedule the flush to happen. + flushed = true; + flush(controller); + }, + flush (controller) { + if (pending) return pending.promise; + if (flushed) return; + // Flush now. + controller.enqueue(encoder.encode(suffix)); + } + }); +} +function createFlightDataInjectionTransformStream(stream, delayDataUntilFirstHtmlChunk) { + let htmlStreamFinished = false; + let pull = null; + let donePulling = false; + function startOrContinuePulling(controller) { + if (!pull) { + pull = startPulling(controller); + } + return pull; + } + async function startPulling(controller) { + const reader = stream.getReader(); + if (delayDataUntilFirstHtmlChunk) { + // NOTE: streaming flush + // We are buffering here for the inlined data stream because the + // "shell" stream might be chunkenized again by the underlying stream + // implementation, e.g. with a specific high-water mark. To ensure it's + // the safe timing to pipe the data stream, this extra tick is + // necessary. + // We don't start reading until we've left the current Task to ensure + // that it's inserted after flushing the shell. Note that this implementation + // might get stale if impl details of Fizz change in the future. + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["atLeastOneTask"])(); + } + try { + while(true){ + const { done, value } = await reader.read(); + if (done) { + donePulling = true; + return; + } + // We want to prioritize HTML over RSC data. + // The SSR render is based on the same RSC stream, so when we get a new RSC chunk, + // we're likely to produce an HTML chunk as well, so give it a chance to flush first. + if (!delayDataUntilFirstHtmlChunk && !htmlStreamFinished) { + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["atLeastOneTask"])(); + } + controller.enqueue(value); + } + } catch (err) { + controller.error(err); + } + } + return new TransformStream({ + start (controller) { + if (!delayDataUntilFirstHtmlChunk) { + startOrContinuePulling(controller); + } + }, + transform (chunk, controller) { + controller.enqueue(chunk); + // Start the streaming if it hasn't already been started yet. + if (delayDataUntilFirstHtmlChunk) { + startOrContinuePulling(controller); + } + }, + flush (controller) { + htmlStreamFinished = true; + if (donePulling) { + return; + } + return startOrContinuePulling(controller); + } + }); +} +const CLOSE_TAG = ''; +function createMoveSuffixStream() { + let foundSuffix = false; + return new TransformStream({ + transform (chunk, controller) { + if (foundSuffix) { + return controller.enqueue(chunk); + } + const index = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML); + if (index > -1) { + foundSuffix = true; + // If the whole chunk is the suffix, then don't write anything, it will + // be written in the flush. + if (chunk.length === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML.length) { + return; + } + // Write out the part before the suffix. + const before = chunk.slice(0, index); + controller.enqueue(before); + // In the case where the suffix is in the middle of the chunk, we need + // to split the chunk into two parts. + if (chunk.length > __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML.length + index) { + // Write out the part after the suffix. + const after = chunk.slice(index + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML.length); + controller.enqueue(after); + } + } else { + controller.enqueue(chunk); + } + }, + flush (controller) { + // Even if we didn't find the suffix, the HTML is not valid if we don't + // add it, so insert it at the end. + controller.enqueue(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML); + } + }); +} +function createStripDocumentClosingTagsTransform() { + return new TransformStream({ + transform (chunk, controller) { + // We rely on the assumption that chunks will never break across a code unit. + // This is reasonable because we currently concat all of React's output from a single + // flush into one chunk before streaming it forward which means the chunk will represent + // a single coherent utf-8 string. This is not safe to use if we change our streaming to no + // longer do this large buffered chunk + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isEquivalentUint8Arrays"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML) || (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isEquivalentUint8Arrays"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY) || (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isEquivalentUint8Arrays"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HTML)) { + // the entire chunk is the closing tags; return without enqueueing anything. + return; + } + // We assume these tags will go at together at the end of the document and that + // they won't appear anywhere else in the document. This is not really a safe assumption + // but until we revamp our streaming infra this is a performant way to string the tags + chunk = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["removeFromUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY); + chunk = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["removeFromUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HTML); + controller.enqueue(chunk); + } + }); +} +function createHtmlDataDplIdTransformStream(dplId) { + let didTransform = false; + return new TransformStream({ + transform (chunk, controller) { + if (didTransform) { + controller.enqueue(chunk); + return; + } + const htmlTagIndex = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].OPENING.HTML); + if (htmlTagIndex === -1) { + controller.enqueue(chunk); + return; + } + // Insert the data-dpl-id attribute right after " -1) { + foundHtml = true; + } + if (!foundBody && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].OPENING.BODY) > -1) { + foundBody = true; + } + controller.enqueue(chunk); + }, + flush (controller) { + const missingTags = []; + if (!foundHtml) missingTags.push('html'); + if (!foundBody) missingTags.push('body'); + if (!missingTags.length) return; + controller.enqueue(encoder.encode(` + + `)); + } + }); +} +function chainTransformers(readable, transformers) { + let stream = readable; + for (const transformer of transformers){ + if (!transformer) continue; + stream = stream.pipeThrough(transformer); + } + return stream; +} +async function continueFizzStream(renderStream, { suffix, inlinedDataStream, waitForAllReady, deploymentId, getServerInsertedHTML, getServerInsertedMetadata, validateRootLayout }) { + // Suffix itself might contain close tags at the end, so we need to split it. + const suffixUnclosed = suffix ? suffix.split(CLOSE_TAG, 1)[0] : null; + if (waitForAllReady) { + // Wait for all Suspense boundaries to resolve before continuing. + await renderStream.allReady; + } else { + // Otherwise, we want to make sure Fizz is done with all microtasky work + // before we start pulling the stream and cause a flush. + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["waitAtLeastOneReactRenderTask"])(); + } + return chainTransformers(renderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata), + // Insert suffix content + suffixUnclosed != null && suffixUnclosed.length > 0 ? createDeferredSuffixStream(suffixUnclosed) : null, + // Insert the inlined data (Flight data, form state, etc.) stream into the HTML + inlinedDataStream ? createFlightDataInjectionTransformStream(inlinedDataStream, true) : null, + // Validate the root layout for missing html or body tags + validateRootLayout ? createRootLayoutValidatorStream() : null, + // Close tags should always be deferred to the end + createMoveSuffixStream(), + // Special head insertions + // TODO-APP: Insert server side html to end of head in app layout rendering, to avoid + // hydration errors. Remove this once it's ready to be handled by react itself. + createHeadInsertionTransformStream(getServerInsertedHTML) + ]); +} +async function continueDynamicPrerender(prerenderStream, { getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) { + return chainTransformers(prerenderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + createStripDocumentClosingTagsTransform(), + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Insert generated tags to head + createHeadInsertionTransformStream(getServerInsertedHTML), + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata) + ]); +} +async function continueStaticPrerender(prerenderStream, { inlinedDataStream, getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) { + return chainTransformers(prerenderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + // Add build id comment to start of the HTML document (in export mode) + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Insert generated tags to head + createHeadInsertionTransformStream(getServerInsertedHTML), + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata), + // Insert the inlined data (Flight data, form state, etc.) stream into the HTML + createFlightDataInjectionTransformStream(inlinedDataStream, true), + // Close tags should always be deferred to the end + createMoveSuffixStream() + ]); +} +async function continueStaticFallbackPrerender(prerenderStream, { inlinedDataStream, getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) { + // Same as `continueStaticPrerender`, but also inserts an additional script + // to instruct the client to start fetching the hydration data as early + // as possible. + return chainTransformers(prerenderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Insert generated tags to head + createHeadInsertionTransformStream(getServerInsertedHTML), + // Insert the client resume script into the head + await createClientResumeScriptInsertionTransformStream(), + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata), + // Insert the inlined data (Flight data, form state, etc.) stream into the HTML + createFlightDataInjectionTransformStream(inlinedDataStream, true), + // Close tags should always be deferred to the end + createMoveSuffixStream() + ]); +} +async function continueDynamicHTMLResume(renderStream, { delayDataUntilFirstHtmlChunk, inlinedDataStream, getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) { + return chainTransformers(renderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Insert generated tags to head + createHeadInsertionTransformStream(getServerInsertedHTML), + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata), + // Insert the inlined data (Flight data, form state, etc.) stream into the HTML + createFlightDataInjectionTransformStream(inlinedDataStream, delayDataUntilFirstHtmlChunk), + // Close tags should always be deferred to the end + createMoveSuffixStream() + ]); +} +function createDocumentClosingStream() { + return streamFromString(CLOSE_TAG); +} +function createRuntimePrefetchTransformStream(sentinel, isPartial, staleTime) { + const enc = new TextEncoder(); + // Search for: [] + // Replace with: [,] + const search = enc.encode(`[${sentinel}]`); + const first = search[0]; + const replace = enc.encode(`[${isPartial},${staleTime}]`); + const searchLen = search.length; + let currentChunk = null; + let found = false; + function processChunk(controller, nextChunk) { + if (found) { + if (nextChunk) { + controller.enqueue(nextChunk); + } + return; + } + if (currentChunk) { + // We can't search past the index that can contain a full match + let exclusiveUpperBound = currentChunk.length - (searchLen - 1); + if (nextChunk) { + // If we have any overflow bytes we can search up to the chunk's final byte + exclusiveUpperBound += Math.min(nextChunk.length, searchLen - 1); + } + if (exclusiveUpperBound < 1) { + // we can't match the current chunk. + controller.enqueue(currentChunk); + currentChunk = nextChunk // advance so we don't process this chunk again + ; + return; + } + let currentIndex = currentChunk.indexOf(first); + // check the current candidate match if it is within the bounds of our search space for the currentChunk + candidateLoop: while(-1 < currentIndex && currentIndex < exclusiveUpperBound){ + // We already know index 0 matches because we used indexOf to find the candidateIndex so we start at index 1 + let matchIndex = 1; + while(matchIndex < searchLen){ + const candidateIndex = currentIndex + matchIndex; + const candidateValue = candidateIndex < currentChunk.length ? currentChunk[candidateIndex] : nextChunk[candidateIndex - currentChunk.length]; + if (candidateValue !== search[matchIndex]) { + // No match, reset and continue the search from the next position + currentIndex = currentChunk.indexOf(first, currentIndex + 1); + continue candidateLoop; + } + matchIndex++; + } + // We found a complete match. currentIndex is our starting point to replace the value. + found = true; + // enqueue everything up to the match + controller.enqueue(currentChunk.subarray(0, currentIndex)); + // enqueue the replacement value + controller.enqueue(replace); + // If there are bytes in the currentChunk after the match enqueue them + if (currentIndex + searchLen < currentChunk.length) { + controller.enqueue(currentChunk.slice(currentIndex + searchLen)); + } + // If we have a next chunk we enqueue it now + if (nextChunk) { + // if replacement spills over to the next chunk we first exclude the replaced bytes + const overflowBytes = currentIndex + searchLen - currentChunk.length; + const truncatedChunk = overflowBytes > 0 ? nextChunk.subarray(overflowBytes) : nextChunk; + controller.enqueue(truncatedChunk); + } + // We are now in found mode and don't need to track currentChunk anymore + currentChunk = null; + return; + } + // No match found in this chunk, emit it and wait for the next one + controller.enqueue(currentChunk); + } + // Advance to the next chunk + currentChunk = nextChunk; + } + return new TransformStream({ + transform (chunk, controller) { + processChunk(controller, chunk); + }, + flush (controller) { + processChunk(controller, null); + } + }); +} +}), +"[project]/node_modules/next/dist/esm/server/stream-utils/uint8array-helpers.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Find the starting index of Uint8Array `b` within Uint8Array `a`. + */ __turbopack_context__.s([ + "indexOfUint8Array", + ()=>indexOfUint8Array, + "isEquivalentUint8Arrays", + ()=>isEquivalentUint8Arrays, + "removeFromUint8Array", + ()=>removeFromUint8Array +]); +function indexOfUint8Array(a, b) { + if (b.length === 0) return 0; + if (a.length === 0 || b.length > a.length) return -1; + // Use Node's native implementation when available. + if (typeof Buffer !== 'undefined') { + const haystack = Buffer.isBuffer(a) ? a : Buffer.from(a.buffer, a.byteOffset, a.byteLength); + return haystack.indexOf(b); + } + // start iterating through `a` + for(let i = 0; i <= a.length - b.length; i++){ + let completeMatch = true; + // from index `i`, iterate through `b` and check for mismatch + for(let j = 0; j < b.length; j++){ + // if the values do not match, then this isn't a complete match, exit `b` iteration early and iterate to next index of `a`. + if (a[i + j] !== b[j]) { + completeMatch = false; + break; + } + } + if (completeMatch) { + return i; + } + } + return -1; +} +function isEquivalentUint8Arrays(a, b) { + if (a.length !== b.length) return false; + for(let i = 0; i < a.length; i++){ + if (a[i] !== b[i]) return false; + } + return true; +} +function removeFromUint8Array(a, b) { + const tagIndex = indexOfUint8Array(a, b); + if (tagIndex === 0) return a.subarray(b.length); + if (tagIndex > -1) { + const removed = new Uint8Array(a.length - b.length); + removed.set(a.subarray(0, tagIndex)); + removed.set(a.subarray(tagIndex + b.length), tagIndex); + return removed; + } else { + return a; + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/error.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "PageSignatureError", + ()=>PageSignatureError, + "RemovedPageError", + ()=>RemovedPageError, + "RemovedUAError", + ()=>RemovedUAError +]); +class PageSignatureError extends Error { + constructor({ page }){ + super(`The middleware "${page}" accepts an async API directly with the form: + + export function middleware(request, event) { + return NextResponse.redirect('/new-location') + } + + Read more: https://nextjs.org/docs/messages/middleware-new-signature + `); + } +} +class RemovedPageError extends Error { + constructor(){ + super(`The request.page has been deprecated in favour of \`URLPattern\`. + Read more: https://nextjs.org/docs/messages/middleware-request-page + `); + } +} +class RemovedUAError extends Error { + constructor(){ + super(`The request.ua has been removed in favour of \`userAgent\` function. + Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent + `); + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/next-url.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "NextURL", + ()=>NextURL +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$detect$2d$domain$2d$locale$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/i18n/detect-domain-locale.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$format$2d$next$2d$pathname$2d$info$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/format-next-pathname-info.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$get$2d$hostname$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/get-hostname.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$next$2d$pathname$2d$info$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/get-next-pathname-info.js [app-route] (ecmascript)"); +; +; +; +; +const REGEX_LOCALHOST_HOSTNAME = /^(?:127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\[::1\]|localhost)$/; +function parseURL(url, base) { + const parsed = new URL(String(url), base && String(base)); + if (REGEX_LOCALHOST_HOSTNAME.test(parsed.hostname)) { + parsed.hostname = 'localhost'; + } + return parsed; +} +const Internal = Symbol('NextURLInternal'); +class NextURL { + constructor(input, baseOrOpts, opts){ + let base; + let options; + if (typeof baseOrOpts === 'object' && 'pathname' in baseOrOpts || typeof baseOrOpts === 'string') { + base = baseOrOpts; + options = opts || {}; + } else { + options = opts || baseOrOpts || {}; + } + this[Internal] = { + url: parseURL(input, base ?? options.base), + options: options, + basePath: '' + }; + this.analyze(); + } + analyze() { + var _this_Internal_options_nextConfig_i18n, _this_Internal_options_nextConfig, _this_Internal_domainLocale, _this_Internal_options_nextConfig_i18n1, _this_Internal_options_nextConfig1; + const info = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$next$2d$pathname$2d$info$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getNextPathnameInfo"])(this[Internal].url.pathname, { + nextConfig: this[Internal].options.nextConfig, + parseData: !("TURBOPACK compile-time value", void 0), + i18nProvider: this[Internal].options.i18nProvider + }); + const hostname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$get$2d$hostname$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getHostname"])(this[Internal].url, this[Internal].options.headers); + this[Internal].domainLocale = this[Internal].options.i18nProvider ? this[Internal].options.i18nProvider.detectDomainLocale(hostname) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$detect$2d$domain$2d$locale$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["detectDomainLocale"])((_this_Internal_options_nextConfig = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n = _this_Internal_options_nextConfig.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n.domains, hostname); + const defaultLocale = ((_this_Internal_domainLocale = this[Internal].domainLocale) == null ? void 0 : _this_Internal_domainLocale.defaultLocale) || ((_this_Internal_options_nextConfig1 = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n1 = _this_Internal_options_nextConfig1.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n1.defaultLocale); + this[Internal].url.pathname = info.pathname; + this[Internal].defaultLocale = defaultLocale; + this[Internal].basePath = info.basePath ?? ''; + this[Internal].buildId = info.buildId; + this[Internal].locale = info.locale ?? defaultLocale; + this[Internal].trailingSlash = info.trailingSlash; + } + formatPathname() { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$format$2d$next$2d$pathname$2d$info$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["formatNextPathnameInfo"])({ + basePath: this[Internal].basePath, + buildId: this[Internal].buildId, + defaultLocale: !this[Internal].options.forceLocale ? this[Internal].defaultLocale : undefined, + locale: this[Internal].locale, + pathname: this[Internal].url.pathname, + trailingSlash: this[Internal].trailingSlash + }); + } + formatSearch() { + return this[Internal].url.search; + } + get buildId() { + return this[Internal].buildId; + } + set buildId(buildId) { + this[Internal].buildId = buildId; + } + get locale() { + return this[Internal].locale ?? ''; + } + set locale(locale) { + var _this_Internal_options_nextConfig_i18n, _this_Internal_options_nextConfig; + if (!this[Internal].locale || !((_this_Internal_options_nextConfig = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n = _this_Internal_options_nextConfig.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n.locales.includes(locale))) { + throw new TypeError(`The NextURL configuration includes no locale "${locale}"`); + } + this[Internal].locale = locale; + } + get defaultLocale() { + return this[Internal].defaultLocale; + } + get domainLocale() { + return this[Internal].domainLocale; + } + get searchParams() { + return this[Internal].url.searchParams; + } + get host() { + return this[Internal].url.host; + } + set host(value) { + this[Internal].url.host = value; + } + get hostname() { + return this[Internal].url.hostname; + } + set hostname(value) { + this[Internal].url.hostname = value; + } + get port() { + return this[Internal].url.port; + } + set port(value) { + this[Internal].url.port = value; + } + get protocol() { + return this[Internal].url.protocol; + } + set protocol(value) { + this[Internal].url.protocol = value; + } + get href() { + const pathname = this.formatPathname(); + const search = this.formatSearch(); + return `${this.protocol}//${this.host}${pathname}${search}${this.hash}`; + } + set href(url) { + this[Internal].url = parseURL(url); + this.analyze(); + } + get origin() { + return this[Internal].url.origin; + } + get pathname() { + return this[Internal].url.pathname; + } + set pathname(value) { + this[Internal].url.pathname = value; + } + get hash() { + return this[Internal].url.hash; + } + set hash(value) { + this[Internal].url.hash = value; + } + get search() { + return this[Internal].url.search; + } + set search(value) { + this[Internal].url.search = value; + } + get password() { + return this[Internal].url.password; + } + set password(value) { + this[Internal].url.password = value; + } + get username() { + return this[Internal].url.username; + } + set username(value) { + this[Internal].url.username = value; + } + get basePath() { + return this[Internal].basePath; + } + set basePath(value) { + this[Internal].basePath = value.startsWith('/') ? value : `/${value}`; + } + toString() { + return this.href; + } + toJSON() { + return this.href; + } + [Symbol.for('edge-runtime.inspect.custom')]() { + return { + href: this.href, + origin: this.origin, + protocol: this.protocol, + username: this.username, + password: this.password, + host: this.host, + hostname: this.hostname, + port: this.port, + pathname: this.pathname, + search: this.search, + searchParams: this.searchParams, + hash: this.hash + }; + } + clone() { + return new NextURL(String(this), this[Internal].options); + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/headers.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "HeadersAdapter", + ()=>HeadersAdapter, + "ReadonlyHeadersError", + ()=>ReadonlyHeadersError +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/reflect.js [app-route] (ecmascript)"); +; +class ReadonlyHeadersError extends Error { + constructor(){ + super('Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers'); + } + static callable() { + throw new ReadonlyHeadersError(); + } +} +/** + * Builds the read methods for a sealed view that exposes all of `target`. + */ function createPassThroughMethods(target, sealed) { + return { + get: target.get.bind(target), + has: target.has.bind(target), + getSetCookie: target.getSetCookie.bind(target), + keys: target.keys.bind(target), + values: target.values.bind(target), + entries: target.entries.bind(target), + [Symbol.iterator]: target[Symbol.iterator].bind(target), + // The native method passes the unsealed target as the callback's `parent` + // argument. That is a mutable handle on the underlying headers. Pass the + // sealed view instead. + forEach (callbackfn, thisArg) { + for (const [name, value] of target.entries()){ + callbackfn.call(thisArg, value, name, sealed); + } + } + }; +} +/** + * Builds the read methods for a sealed view that omits the header names matched + * by `isHidden`. + */ function createHidingMethods(target, sealed, isHidden) { + function* entries() { + for (const entry of target.entries()){ + if (!isHidden(entry[0])) { + yield entry; + } + } + } + return { + entries, + [Symbol.iterator]: entries, + get: (name)=>isHidden(name) ? null : target.get(name), + has: (name)=>isHidden(name) ? false : target.has(name), + getSetCookie: ()=>isHidden('set-cookie') ? [] : target.getSetCookie(), + *keys () { + for (const name of target.keys()){ + if (!isHidden(name)) { + yield name; + } + } + }, + *values () { + for (const [, value] of entries()){ + yield value; + } + }, + // The native method passes the unsealed target as the callback's `parent` + // argument. That is a mutable handle on the underlying headers. Pass the + // sealed view instead. + forEach (callbackfn, thisArg) { + for (const [name, value] of entries()){ + callbackfn.call(thisArg, value, name, sealed); + } + } + }; +} +class HeadersAdapter extends Headers { + constructor(headers){ + // We've already overridden the methods that would be called, so we're just + // calling the super constructor to ensure that the instanceof check works. + super(); + this.headers = new Proxy(headers, { + get (target, prop, receiver) { + // Because this is just an object, we expect that all "get" operations + // are for properties. If it's a "get" for a symbol, we'll just return + // the symbol. + if (typeof prop === 'symbol') { + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, prop, receiver); + } + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, return undefined. + if (typeof original === 'undefined') return; + // If the original casing exists, return the value. + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, original, receiver); + }, + set (target, prop, value, receiver) { + if (typeof prop === 'symbol') { + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].set(target, prop, value, receiver); + } + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, use the prop as the key. + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].set(target, original ?? prop, value, receiver); + }, + has (target, prop) { + if (typeof prop === 'symbol') return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].has(target, prop); + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, return false. + if (typeof original === 'undefined') return false; + // If the original casing exists, return true. + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].has(target, original); + }, + deleteProperty (target, prop) { + if (typeof prop === 'symbol') return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].deleteProperty(target, prop); + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, return true. + if (typeof original === 'undefined') return true; + // If the original casing exists, delete the property. + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].deleteProperty(target, original); + } + }); + } + /** + * Seals a Headers instance to prevent modification by throwing an error when + * any mutating method is called. + * + * The sealed view stays live. Later writes to `headers` remain visible + * through it. + * + * `hidden` omits the given header names from every read operation (`get`, + * `has`, `getSetCookie`, `forEach`, and iteration). The names must be + * lowercase. The underlying headers are neither copied nor mutated, so hidden + * headers remain available to the framework. + */ static seal(headers, hidden) { + const isHidden = hidden && hidden.size > 0 ? (name)=>hidden.has(name.toLowerCase()) : null; + // The methods are built once per sealed view and reused, so repeated access + // returns the same function instead of a fresh closure. They are assigned + // after the proxy exists because `forEach` hands the proxy to its callback. + // Creating the proxy runs no trap, so nothing can read them before then. + let methods; + const sealed = new Proxy(headers, { + get (target, prop, receiver) { + switch(prop){ + case 'append': + case 'delete': + case 'set': + return ReadonlyHeadersError.callable; + case Symbol.iterator: + return methods[Symbol.iterator]; + case 'get': + case 'has': + case 'getSetCookie': + case 'keys': + case 'values': + case 'entries': + case 'forEach': + return methods[prop]; + default: + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, prop, receiver); + } + } + }); + methods = isHidden ? createHidingMethods(headers, sealed, isHidden) : createPassThroughMethods(headers, sealed); + return sealed; + } + /** + * @param headers + * @returns A fresh object identity backed by the original value + */ static fresh(headers) { + return new Proxy(headers, { + get (target, prop, receiver) { + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, prop, receiver); + } + }); + } + /** + * Merges a header value into a string. This stores multiple values as an + * array, so we need to merge them into a string. + * + * @param value a header value + * @returns a merged header value (a string) + */ merge(value) { + if (Array.isArray(value)) return value.join(', '); + return value; + } + /** + * Creates a Headers instance from a plain object or a Headers instance. + * + * @param headers a plain object or a Headers instance + * @returns a headers instance + */ static from(headers) { + if (headers instanceof Headers) return headers; + return new HeadersAdapter(headers); + } + append(name, value) { + const existing = this.headers[name]; + if (typeof existing === 'string') { + this.headers[name] = [ + existing, + value + ]; + } else if (Array.isArray(existing)) { + existing.push(value); + } else { + this.headers[name] = value; + } + } + delete(name) { + delete this.headers[name]; + } + get(name) { + const value = this.headers[name]; + if (typeof value !== 'undefined') return this.merge(value); + return null; + } + has(name) { + return typeof this.headers[name] !== 'undefined'; + } + set(name, value) { + this.headers[name] = value; + } + forEach(callbackfn, thisArg) { + for (const [name, value] of this.entries()){ + callbackfn.call(thisArg, value, name, this); + } + } + *entries() { + for (const key of Object.keys(this.headers)){ + const name = key.toLowerCase(); + // We assert here that this is a string because we got it from the + // Object.keys() call above. + const value = this.get(name); + yield [ + name, + value + ]; + } + } + *keys() { + for (const key of Object.keys(this.headers)){ + const name = key.toLowerCase(); + yield name; + } + } + *values() { + for (const key of Object.keys(this.headers)){ + // We assert here that this is a string because we got it from the + // Object.keys() call above. + const value = this.get(key); + yield value; + } + } + [Symbol.iterator]() { + return this.entries(); + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/next-request.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "NextRequestAdapter", + ()=>NextRequestAdapter, + "ResponseAborted", + ()=>ResponseAborted, + "ResponseAbortedName", + ()=>ResponseAbortedName, + "createAbortController", + ()=>createAbortController, + "signalFromNodeResponse", + ()=>signalFromNodeResponse +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/request-meta.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/utils.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/request.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/base-http/helpers.js [app-route] (ecmascript)"); +; +; +; +; +const ResponseAbortedName = 'ResponseAborted'; +class ResponseAborted extends Error { + constructor(...args){ + super(...args), this.name = ResponseAbortedName; + } +} +function createAbortController(response) { + const controller = new AbortController(); + // If `finish` fires first, then `res.end()` has been called and the close is + // just us finishing the stream on our side. If `close` fires first, then we + // know the client disconnected before we finished. + response.once('close', ()=>{ + if (response.writableFinished) return; + controller.abort(new ResponseAborted()); + }); + return controller; +} +function signalFromNodeResponse(response) { + const { errored, destroyed } = response; + if (errored || destroyed) { + return AbortSignal.abort(errored ?? new ResponseAborted()); + } + const { signal } = createAbortController(response); + return signal; +} +class NextRequestAdapter { + static fromBaseNextRequest(request, signal) { + if (// environment variable check provides dead code elimination. + ("TURBOPACK compile-time value", "nodejs") === 'edge' && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isWebNextRequest"])(request)) //TURBOPACK unreachable + ; + else if (// environment variable check provides dead code elimination. + ("TURBOPACK compile-time value", "nodejs") !== 'edge' && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isNodeNextRequest"])(request)) { + return NextRequestAdapter.fromNodeNextRequest(request, signal); + } else { + throw new Error('Invariant: Unsupported NextRequest type'); + } + } + static fromNodeNextRequest(request, signal) { + // HEAD and GET requests can not have a body. + let body = null; + if (request.method !== 'GET' && request.method !== 'HEAD' && request.body) { + // @ts-expect-error - this is handled by undici, when streams/web land use it instead + body = request.body; + } + let url; + if (request.url.startsWith('http')) { + url = new URL(request.url); + } else { + // Grab the full URL from the request metadata. + const base = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestMeta"])(request, 'initURL'); + if (!base || !base.startsWith('http')) { + // Because the URL construction relies on the fact that the URL provided + // is absolute, we need to provide a base URL. We can't use the request + // URL because it's relative, so we use a dummy URL instead. + url = new URL(request.url, 'http://n'); + } else { + url = new URL(request.url, base); + } + } + return new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextRequest"](url, { + method: request.method, + headers: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["fromNodeOutgoingHttpHeaders"])(request.headers), + duplex: 'half', + signal, + // geo + // ip + // nextConfig + // body can not be passed if request was aborted + // or we get a Request body was disturbed error + ...signal.aborted ? {} : { + body + } + }); + } + static fromWebNextRequest(request) { + // HEAD and GET requests can not have a body. + let body = null; + if (request.method !== 'GET' && request.method !== 'HEAD') { + body = request.body; + } + return new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextRequest"](request.url, { + method: request.method, + headers: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["fromNodeOutgoingHttpHeaders"])(request.headers), + duplex: 'half', + signal: request.request.signal, + // geo + // ip + // nextConfig + // body can not be passed if request was aborted + // or we get a Request body was disturbed error + ...request.request.signal.aborted ? {} : { + body + } + }); + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/reflect.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ReflectAdapter", + ()=>ReflectAdapter +]); +class ReflectAdapter { + static get(target, prop, receiver) { + const value = Reflect.get(target, prop, receiver); + if (typeof value === 'function') { + return value.bind(target); + } + return value; + } + static set(target, prop, value, receiver) { + return Reflect.set(target, prop, value, receiver); + } + static has(target, prop) { + return Reflect.has(target, prop); + } + static deleteProperty(target, prop) { + return Reflect.deleteProperty(target, prop); + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/cookies.js [app-route] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f40$edge$2d$runtime$2f$cookies$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js [app-route] (ecmascript)"); +; +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/request.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "INTERNALS", + ()=>INTERNALS, + "NextRequest", + ()=>NextRequest +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$next$2d$url$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/next-url.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/utils.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/error.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$cookies$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/cookies.js [app-route] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f40$edge$2d$runtime$2f$cookies$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js [app-route] (ecmascript)"); +; +; +; +; +const INTERNALS = Symbol('internal request'); +class NextRequest extends Request { + constructor(input, init = {}){ + const url = typeof input !== 'string' && 'url' in input ? input.url : String(input); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["validateURL"])(url); + // node Request instance requires duplex option when a body + // is present or it errors, we don't handle this for + // Request being passed in since it would have already + // errored if this wasn't configured + if ("TURBOPACK compile-time truthy", 1) { + if (init.body && init.duplex !== 'half') { + init.duplex = 'half'; + } + } + if (input instanceof Request) super(input, init); + else super(url, init); + const nextUrl = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$next$2d$url$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextURL"](url, { + headers: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["toNodeOutgoingHttpHeaders"])(this.headers), + nextConfig: init.nextConfig + }); + this[INTERNALS] = { + cookies: new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f40$edge$2d$runtime$2f$cookies$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RequestCookies"](this.headers), + nextUrl, + url: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : nextUrl.toString() + }; + } + [Symbol.for('edge-runtime.inspect.custom')]() { + return { + cookies: this.cookies, + nextUrl: this.nextUrl, + url: this.url, + // rest of props come from Request + bodyUsed: this.bodyUsed, + cache: this.cache, + credentials: this.credentials, + destination: this.destination, + headers: Object.fromEntries(this.headers), + integrity: this.integrity, + keepalive: this.keepalive, + method: this.method, + mode: this.mode, + redirect: this.redirect, + referrer: this.referrer, + referrerPolicy: this.referrerPolicy, + signal: this.signal + }; + } + get cookies() { + return this[INTERNALS].cookies; + } + get nextUrl() { + return this[INTERNALS].nextUrl; + } + /** + * @deprecated + * `page` has been deprecated in favour of `URLPattern`. + * Read more: https://nextjs.org/docs/messages/middleware-request-page + */ get page() { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RemovedPageError"](); + } + /** + * @deprecated + * `ua` has been removed in favour of \`userAgent\` function. + * Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent + */ get ua() { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RemovedUAError"](); + } + get url() { + return this[INTERNALS].url; + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/utils.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "fromNodeOutgoingHttpHeaders", + ()=>fromNodeOutgoingHttpHeaders, + "normalizeNextQueryParam", + ()=>normalizeNextQueryParam, + "splitCookiesString", + ()=>splitCookiesString, + "toNodeOutgoingHttpHeaders", + ()=>toNodeOutgoingHttpHeaders, + "validateURL", + ()=>validateURL +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)"); +; +function fromNodeOutgoingHttpHeaders(nodeHeaders) { + const headers = new Headers(); + for (let [key, value] of Object.entries(nodeHeaders)){ + const values = Array.isArray(value) ? value : [ + value + ]; + for (let v of values){ + if (typeof v === 'undefined') continue; + if (typeof v === 'number') { + v = v.toString(); + } + headers.append(key, v); + } + } + return headers; +} +function splitCookiesString(cookiesString) { + var cookiesStrings = []; + var pos = 0; + var start; + var ch; + var lastComma; + var nextStart; + var cookiesSeparatorFound; + function skipWhitespace() { + while(pos < cookiesString.length && /\s/.test(cookiesString.charAt(pos))){ + pos += 1; + } + return pos < cookiesString.length; + } + function notSpecialChar() { + ch = cookiesString.charAt(pos); + return ch !== '=' && ch !== ';' && ch !== ','; + } + while(pos < cookiesString.length){ + start = pos; + cookiesSeparatorFound = false; + while(skipWhitespace()){ + ch = cookiesString.charAt(pos); + if (ch === ',') { + // ',' is a cookie separator if we have later first '=', not ';' or ',' + lastComma = pos; + pos += 1; + skipWhitespace(); + nextStart = pos; + while(pos < cookiesString.length && notSpecialChar()){ + pos += 1; + } + // currently special character + if (pos < cookiesString.length && cookiesString.charAt(pos) === '=') { + // we found cookies separator + cookiesSeparatorFound = true; + // pos is inside the next cookie, so back up and return it. + pos = nextStart; + cookiesStrings.push(cookiesString.substring(start, lastComma)); + start = pos; + } else { + // in param ',' or param separator ';', + // we continue from that comma + pos = lastComma + 1; + } + } else { + pos += 1; + } + } + if (!cookiesSeparatorFound || pos >= cookiesString.length) { + cookiesStrings.push(cookiesString.substring(start, cookiesString.length)); + } + } + return cookiesStrings; +} +function toNodeOutgoingHttpHeaders(headers) { + const nodeHeaders = {}; + const cookies = []; + if (headers) { + for (const [key, value] of headers.entries()){ + if (key.toLowerCase() === 'set-cookie') { + // We may have gotten a comma joined string of cookies, or multiple + // set-cookie headers. We need to merge them into one header array + // to represent all the cookies. + cookies.push(...splitCookiesString(value)); + nodeHeaders[key] = cookies.length === 1 ? cookies[0] : cookies; + } else { + nodeHeaders[key] = value; + } + } + } + return nodeHeaders; +} +function validateURL(url) { + try { + return String(new URL(String(url))); + } catch (error) { + throw new Error(`URL is malformed "${String(url)}". Please use only absolute URLs - https://nextjs.org/docs/messages/middleware-relative-urls`, { + cause: error + }); + } +} +function normalizeNextQueryParam(key) { + const prefixes = [ + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_QUERY_PARAM_PREFIX"], + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_INTERCEPTION_MARKER_PREFIX"] + ]; + for (const prefix of prefixes){ + if (key !== prefix && key.startsWith(prefix)) { + return key.substring(prefix.length); + } + } + return null; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/errors/constants.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "MISSING_ROOT_TAGS_ERROR", + ()=>MISSING_ROOT_TAGS_ERROR +]); +const MISSING_ROOT_TAGS_ERROR = 'NEXT_MISSING_ROOT_TAGS'; +}), +"[project]/node_modules/next/dist/esm/shared/lib/get-hostname.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Takes an object with a hostname property (like a parsed URL) and some + * headers that may contain Host and returns the preferred hostname. + * @param parsed An object containing a hostname property. + * @param headers A dictionary with headers containing a `host`. + */ __turbopack_context__.s([ + "getHostname", + ()=>getHostname +]); +function getHostname(parsed, headers) { + // Get the hostname from the headers if it exists, otherwise use the parsed + // hostname. + let hostname; + if (headers?.host && !Array.isArray(headers.host)) { + hostname = headers.host.toString().split(':', 1)[0]; + } else if (parsed.hostname) { + hostname = parsed.hostname; + } else return; + return hostname.toLowerCase(); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/hash.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +// http://www.cse.yorku.ca/~oz/hash.html +// More specifically, 32-bit hash via djbxor +// (ref: https://gist.github.com/eplawless/52813b1d8ad9af510d85?permalink_comment_id=3367765#gistcomment-3367765) +// This is due to number type differences between rust for turbopack to js number types, +// where rust does not have easy way to repreesnt js's 53-bit float number type for the matching +// overflow behavior. This is more `correct` in terms of having canonical hash across different runtime / implementation +// as can gaurantee determinstic output from 32bit hash. +__turbopack_context__.s([ + "djb2Hash", + ()=>djb2Hash, + "hexHash", + ()=>hexHash +]); +function djb2Hash(str) { + let hash = 5381; + for(let i = 0; i < str.length; i++){ + const char = str.charCodeAt(i); + hash = (hash << 5) + hash + char & 0xffffffff; + } + return hash >>> 0; +} +function hexHash(str) { + return djb2Hash(str).toString(36).slice(0, 5); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/i18n/detect-domain-locale.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "detectDomainLocale", + ()=>detectDomainLocale +]); +function detectDomainLocale(domainItems, hostname, detectedLocale) { + if (!domainItems) return; + if (detectedLocale) { + detectedLocale = detectedLocale.toLowerCase(); + } + for (const item of domainItems){ + // remove port if present + const domainHostname = item.domain?.split(':', 1)[0].toLowerCase(); + if (hostname === domainHostname || detectedLocale === item.defaultLocale.toLowerCase() || item.locales?.some((locale)=>locale.toLowerCase() === detectedLocale)) { + return item; + } + } +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "normalizeLocalePath", + ()=>normalizeLocalePath +]); +/** + * A cache of lowercased locales for each list of locales. This is stored as a + * WeakMap so if the locales are garbage collected, the cache entry will be + * removed as well. + */ const cache = new WeakMap(); +function normalizeLocalePath(pathname, locales) { + // If locales is undefined, return the pathname as is. + if (!locales) return { + pathname + }; + // Get the cached lowercased locales or create a new cache entry. + let lowercasedLocales = cache.get(locales); + if (!lowercasedLocales) { + lowercasedLocales = locales.map((locale)=>locale.toLowerCase()); + cache.set(locales, lowercasedLocales); + } + let detectedLocale; + // The first segment will be empty, because it has a leading `/`. If + // there is no further segment, there is no locale (or it's the default). + const segments = pathname.split('/', 2); + // If there's no second segment (ie, the pathname is just `/`), there's no + // locale. + if (!segments[1]) return { + pathname + }; + // The second segment will contain the locale part if any. + const segment = segments[1].toLowerCase(); + // See if the segment matches one of the locales. If it doesn't, there is + // no locale (or it's the default). + const index = lowercasedLocales.indexOf(segment); + if (index < 0) return { + pathname + }; + // Return the case-sensitive locale. + detectedLocale = locales[index]; + // Remove the `/${locale}` part of the pathname. + pathname = pathname.slice(detectedLocale.length + 1) || '/'; + return { + pathname, + detectedLocale + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/instant-messages.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "createLinkPrefetchPartialError", + ()=>createLinkPrefetchPartialError, + "createUnrenderedSegmentError", + ()=>createUnrenderedSegmentError +]); +function createUnrenderedSegmentError(route, missingFiles) { + let message = `Route "${route}": Could not validate that a segment in your UI has instant navigation.`; + if (missingFiles.length > 0) { + const label = missingFiles.length === 1 ? 'Dropped segment' : 'Dropped segments'; + message += `\n\nThis segment was dropped from rendering. Issues that would prevent instant navigation will go undetected.` + `\n\n${label}:\n${missingFiles.map((p)=>` ${p}`).join('\n')}` + `\n\nWays to fix this:` + `\n - [render] Render the dropped segment` + `\n - [ignore] Set \`export const instant = false\` to opt the dropped segment out of instant-navigation validation` + `\n\nLearn more: https://nextjs.org/docs/messages/instant-unrendered-segment`; + } + return new Error(message); +} +function createLinkPrefetchPartialError(pathname) { + return new Error(`Next.js encountered dynamic data during prefetching for "${pathname}".\n\n` + `This will lead to slower, more expensive prefetches.\n\n` + `Ways to fix this:\n` + ` - [upgrade] Opt into Partial Prefetching by exporting \`const prefetch = 'partial'\` from the page or layout, or by setting \`partialPrefetching: true\` in next.config to opt the whole app in\n` + ` - [disable] Remove \`prefetch={true}\` from the to use the default prefetch\n` + ` - [ignore] Set \`export const instant = false\` to opt the route out of instant-navigation validation\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-link-prefetch-partial`); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "InvariantError", + ()=>InvariantError +]); +class InvariantError extends Error { + constructor(message, options){ + super(`Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`, options); + this.name = 'InvariantError'; + } +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/is-thenable.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Check to see if a value is Thenable. + * + * @param promise the maybe-thenable value + * @returns true if the value is thenable + */ __turbopack_context__.s([ + "isThenable", + ()=>isThenable +]); +function isThenable(promise) { + return promise !== null && typeof promise === 'object' && 'then' in promise && typeof promise.then === 'function'; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/lazy-dynamic/react-browser-bailout.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "createReactBrowserBailoutReason", + ()=>createReactBrowserBailoutReason, + "getReactBrowserBailoutReason", + ()=>getReactBrowserBailoutReason, + "isNextBrowserBailoutError", + ()=>isNextBrowserBailoutError +]); +// This module is bundled separately into user code and the precompiled App +// Router runtime. Use the global symbol registry so both copies recognize the +// same browser bailout reason. +const REACT_BROWSER_BAILOUT_REASON = Symbol.for('next.browser-bailout-reason'); +function createReactBrowserBailoutReason(reason) { + return { + $$typeof: REACT_BROWSER_BAILOUT_REASON, + reason + }; +} +function getReactBrowserBailoutReason(error) { + const cause = error?.cause; + return cause?.$$typeof === REACT_BROWSER_BAILOUT_REASON ? cause.reason : undefined; +} +function isNextBrowserBailoutError(error) { + return getReactBrowserBailoutReason(error) !== undefined; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/page-path/ensure-leading-slash.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * For a given page path, this function ensures that there is a leading slash. + * If there is not a leading slash, one is added, otherwise it is noop. + */ __turbopack_context__.s([ + "ensureLeadingSlash", + ()=>ensureLeadingSlash +]); +function ensureLeadingSlash(path) { + return path.startsWith('/') ? path : `/${path}`; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/page-path/normalize-page-path.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "normalizePagePath", + ()=>normalizePagePath +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$ensure$2d$leading$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/page-path/ensure-leading-slash.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/index.js [app-route] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$is$2d$dynamic$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/is-dynamic.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/utils.js [app-route] (ecmascript)"); +; +; +; +function normalizePagePath(page) { + const normalized = /^\/index(\/|$)/.test(page) && !(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$is$2d$dynamic$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isDynamicRoute"])(page) ? `/index${page}` : page === '/' ? '/index' : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$ensure$2d$leading$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ensureLeadingSlash"])(page); + if ("TURBOPACK compile-time truthy", 1) { + const { posix } = __turbopack_context__.r("[externals]/path [external] (path, cjs)"); + const resolvedPage = posix.normalize(normalized); + if (resolvedPage !== normalized) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NormalizeError"](`Requested and resolved page mismatch: ${normalized} ${resolvedPage}`); + } + } + return normalized; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "createPromiseWithResolvers", + ()=>createPromiseWithResolvers +]); +function createPromiseWithResolvers() { + // Shim of Stage 4 Promise.withResolvers proposal + let resolve; + let reject; + const promise = new Promise((res, rej)=>{ + resolve = res; + reject = rej; + }); + return { + resolve: resolve, + reject: reject, + promise + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/request-insights.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getRequestInsightKey", + ()=>getRequestInsightKey, + "getRequestInsightKind", + ()=>getRequestInsightKind +]); +function getRequestInsightKind(insight) { + return insight.kind ?? 'request'; +} +function getRequestInsightKey(insight) { + return `${getRequestInsightKind(insight)}:${insight.requestId}`; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-locale.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "addLocale", + ()=>addLocale +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [app-route] (ecmascript)"); +; +; +function addLocale(path, locale, defaultLocale, ignorePrefix) { + // If no locale was given or the locale is the default locale, we don't need + // to prefix the path. + if (!locale || locale === defaultLocale) return path; + const lower = path.toLowerCase(); + // If the path is an API path or the path already has the locale prefix, we + // don't need to prefix the path. + if (!ignorePrefix) { + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pathHasPrefix"])(lower, '/api')) return path; + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pathHasPrefix"])(lower, `/${locale.toLowerCase()}`)) return path; + } + // Add the locale prefix to the path. + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["addPathPrefix"])(path, `/${locale}`); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "addPathPrefix", + ()=>addPathPrefix +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [app-route] (ecmascript)"); +; +function addPathPrefix(path, prefix) { + if (!path.startsWith('/') || !prefix) { + return path; + } + const { pathname, query, hash } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["parsePath"])(path); + return `${prefix}${pathname}${query}${hash}`; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-suffix.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "addPathSuffix", + ()=>addPathSuffix +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [app-route] (ecmascript)"); +; +function addPathSuffix(path, suffix) { + if (!path.startsWith('/') || !suffix) { + return path; + } + const { pathname, query, hash } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["parsePath"])(path); + return `${pathname}${suffix}${query}${hash}`; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "compareAppPaths", + ()=>compareAppPaths, + "normalizeAppPath", + ()=>normalizeAppPath, + "normalizeRscURL", + ()=>normalizeRscURL, + "selectAppPageEntry", + ()=>selectAppPageEntry +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$ensure$2d$leading$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/page-path/ensure-leading-slash.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/segment.js [app-route] (ecmascript)"); +; +; +function normalizeAppPath(route) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$ensure$2d$leading$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ensureLeadingSlash"])(route.split('/').reduce((pathname, segment, index, segments)=>{ + // Empty segments are ignored. + if (!segment) { + return pathname; + } + // Groups are ignored. + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isGroupSegment"])(segment)) { + return pathname; + } + // Parallel segments are ignored. + if (segment[0] === '@') { + return pathname; + } + // The last segment (if it's a leaf) should be ignored. + if ((segment === 'page' || segment === 'route') && index === segments.length - 1) { + return pathname; + } + return `${pathname}/${segment}`; + }, '')); +} +function compareAppPaths(a, b) { + const aHasSlot = a.includes('/@'); + const bHasSlot = b.includes('/@'); + if (aHasSlot && !bHasSlot) return -1; + if (!aHasSlot && bHasSlot) return 1; + return a.localeCompare(b); +} +function normalizeAppPageEntryPathname(appPath) { + // Webpack app entries preserve escaped underscore segments as `%5F`, while + // normalized request pathnames expose the decoded `_` segment. + return normalizeAppPath(appPath).replace(/%5F/g, '_'); +} +function selectAppPageEntry(pathname, appPaths, normalizePathname = normalizeAppPageEntryPathname) { + let entry; + for (const appPath of appPaths){ + if (normalizePathname(appPath) !== pathname) continue; + if (entry === undefined || compareAppPaths(entry, appPath) < 0) { + entry = appPath; + } + } + if (entry === undefined) { + throw new Error(`Invariant: no direct app page entry found for ${pathname}`); + } + return entry; +} +function normalizeRscURL(url) { + return url.replace(/\.rsc($|\?)/, '$1'); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/cache-busting-search-param.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "computeCacheBustingSearchParam", + ()=>computeCacheBustingSearchParam, + "computeLegacyCacheBustingSearchParam", + ()=>computeLegacyCacheBustingSearchParam +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$hash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/hash.js [app-route] (ecmascript)"); +; +const CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES = 12; +const textEncoder = new TextEncoder(); +function encodeCacheBustingSearchParam(bytes) { + let binary = ''; + for(let i = 0; i < bytes.length; i++){ + binary += String.fromCharCode(bytes[i]); + } + return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); +} +function normalizeCacheBustingInput(value) { + if (value === undefined) { + return '0'; + } + return Array.isArray(value) ? value.join(',') : value; +} +function createCacheBustingSearchParamInput(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader) { + if ((prefetchHeader === undefined || prefetchHeader === '0') && segmentPrefetchHeader === undefined && stateTreeHeader === undefined && nextUrlHeader === undefined) { + return null; + } + return [ + prefetchHeader ?? '0', + normalizeCacheBustingInput(segmentPrefetchHeader), + normalizeCacheBustingInput(stateTreeHeader), + normalizeCacheBustingInput(nextUrlHeader) + ].join(','); +} +async function computeCacheBustingSearchParamFromInput(input) { + // Truncate SHA-256 to 96 bits to keep `_rsc` compact + const digest = await globalThis.crypto.subtle.digest('SHA-256', textEncoder.encode(input)); + return encodeCacheBustingSearchParam(new Uint8Array(digest).subarray(0, CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES)); +} +async function computeCacheBustingSearchParam(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader) { + const input = createCacheBustingSearchParamInput(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader); + if (input === null) { + return ''; + } + return computeCacheBustingSearchParamFromInput(input); +} +function computeLegacyCacheBustingSearchParam(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader) { + const input = createCacheBustingSearchParamInput(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader); + if (input === null) { + return ''; + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$hash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["hexHash"])(input); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/format-next-pathname-info.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "formatNextPathnameInfo", + ()=>formatNextPathnameInfo +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$trailing$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-trailing-slash.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$suffix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-suffix.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$locale$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-locale.js [app-route] (ecmascript)"); +; +; +; +; +function formatNextPathnameInfo(info) { + let pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$locale$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["addLocale"])(info.pathname, info.locale, info.buildId ? undefined : info.defaultLocale, info.ignorePrefix); + if (info.buildId || !info.trailingSlash) { + pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$trailing$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["removeTrailingSlash"])(pathname); + } + if (info.buildId) { + pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$suffix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["addPathSuffix"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["addPathPrefix"])(pathname, `/_next/data/${info.buildId}`), info.pathname === '/' ? 'index.json' : '.json'); + } + pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["addPathPrefix"])(pathname, info.basePath); + return !info.buildId && info.trailingSlash ? !pathname.endsWith('/') ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$suffix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["addPathSuffix"])(pathname, '/') : pathname : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$trailing$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["removeTrailingSlash"])(pathname); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/get-next-pathname-info.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getNextPathnameInfo", + ()=>getNextPathnameInfo +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$normalize$2d$locale$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [app-route] (ecmascript)"); +; +; +; +function getNextPathnameInfo(pathname, options) { + const { basePath, i18n, trailingSlash } = options.nextConfig ?? {}; + const info = { + pathname, + trailingSlash: pathname !== '/' ? pathname.endsWith('/') : trailingSlash + }; + if (basePath && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pathHasPrefix"])(info.pathname, basePath)) { + info.pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["removePathPrefix"])(info.pathname, basePath); + info.basePath = basePath; + } + let pathnameNoDataPrefix = info.pathname; + if (info.pathname.startsWith('/_next/data/') && info.pathname.endsWith('.json')) { + const paths = info.pathname.replace(/^\/_next\/data\//, '').replace(/\.json$/, '').split('/'); + const buildId = paths[0]; + info.buildId = buildId; + pathnameNoDataPrefix = paths[1] !== 'index' ? `/${paths.slice(1).join('/')}` : '/'; + // update pathname with normalized if enabled although + // we use normalized to populate locale info still + if (options.parseData === true) { + info.pathname = pathnameNoDataPrefix; + } + } + // If provided, use the locale route normalizer to detect the locale instead + // of the function below. + if (i18n) { + let result = options.i18nProvider ? options.i18nProvider.analyze(info.pathname) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$normalize$2d$locale$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeLocalePath"])(info.pathname, i18n.locales); + info.locale = result.detectedLocale; + info.pathname = result.pathname ?? info.pathname; + if (!result.detectedLocale && info.buildId) { + result = options.i18nProvider ? options.i18nProvider.analyze(pathnameNoDataPrefix) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$normalize$2d$locale$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeLocalePath"])(pathnameNoDataPrefix, i18n.locales); + if (result.detectedLocale) { + info.locale = result.detectedLocale; + } + } + } + return info; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/index.js [app-route] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$is$2d$dynamic$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/is-dynamic.js [app-route] (ecmascript)"); +; +; +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/interception-routes.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "INTERCEPTION_ROUTE_MARKERS", + ()=>INTERCEPTION_ROUTE_MARKERS, + "extractInterceptionRouteInformation", + ()=>extractInterceptionRouteInformation, + "findMissingCanonicalInterceptionRoutes", + ()=>findMissingCanonicalInterceptionRoutes, + "isInterceptionRouteAppPath", + ()=>isInterceptionRouteAppPath +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-route] (ecmascript)"); +; +const INTERCEPTION_ROUTE_MARKERS = [ + '(..)(..)', + '(.)', + '(..)', + '(...)' +]; +function parseRoutePattern(route) { + const segments = route.split('/').filter(Boolean); + const tail = segments.at(-1); + const isOptionalCatchAll = tail !== undefined && tail.startsWith('[[...') && tail.endsWith(']]'); + const isCatchAll = tail !== undefined && tail.startsWith('[...') && tail.endsWith(']'); + const unbounded = isOptionalCatchAll || isCatchAll; + const prefixSegments = unbounded ? segments.slice(0, -1) : segments; + return { + prefix: prefixSegments.map((segment)=>segment.startsWith('[') && segment.endsWith(']') ? null : segment), + minLength: prefixSegments.length + (isCatchAll && !isOptionalCatchAll ? 1 : 0), + unbounded + }; +} +function acceptsLength(pattern, length) { + return pattern.unbounded ? length >= pattern.minLength : length === pattern.minLength; +} +function prefixCovers(canonical, intercepted) { + return canonical.prefix.every((canonicalSegment, index)=>{ + if (canonicalSegment === null) return true; + const interceptedSegment = intercepted.prefix[index]; + return interceptedSegment !== undefined && interceptedSegment !== null && canonicalSegment === interceptedSegment; + }); +} +function patternCoversAtLength(canonical, intercepted, length) { + return acceptsLength(canonical, length) && acceptsLength(intercepted, length) && prefixCovers(canonical, intercepted); +} +/** Returns whether ordinary route patterns cover every URL in `route`. */ function isRoutePatternCovered(route, ordinaryRoutes) { + const intercepted = parseRoutePattern(route); + if (!intercepted.unbounded) { + return ordinaryRoutes.some((pattern)=>patternCoversAtLength(pattern, intercepted, intercepted.minLength)); + } + let unboundedCoverageStart = Infinity; + for (const pattern of ordinaryRoutes){ + if (pattern.unbounded && prefixCovers(pattern, intercepted)) { + unboundedCoverageStart = Math.min(unboundedCoverageStart, Math.max(intercepted.minLength, pattern.minLength)); + } + } + if (unboundedCoverageStart === Infinity) return false; + // An optional or required catchall can have its shorter paths covered by + // fixed routes before another catchall takes over the remaining suffix. + for(let length = intercepted.minLength; length < unboundedCoverageStart; length++){ + if (!ordinaryRoutes.some((pattern)=>patternCoversAtLength(pattern, intercepted, length))) { + return false; + } + } + return true; +} +function isInterceptionRouteAppPath(path) { + // TODO-APP: add more serious validation + return path.split('/').find((segment)=>INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m))) !== undefined; +} +function extractInterceptionRouteInformation(path) { + let interceptingRoute; + let marker; + let interceptedRoute; + for (const segment of path.split('/')){ + marker = INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m)); + if (marker) { + ; + [interceptingRoute, interceptedRoute] = path.split(marker, 2); + break; + } + } + if (!interceptingRoute || !marker || !interceptedRoute) { + throw new Error(`Invalid interception route: ${path}. Must be in the format //(..|...|..)(..)/`); + } + interceptingRoute = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeAppPath"])(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed + ; + switch(marker){ + case '(.)': + // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route + if (interceptingRoute === '/') { + interceptedRoute = `/${interceptedRoute}`; + } else { + interceptedRoute = interceptingRoute + '/' + interceptedRoute; + } + break; + case '(..)': + // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route + if (interceptingRoute === '/') { + throw new Error(`Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`); + } + interceptedRoute = interceptingRoute.split('/').slice(0, -1).concat(interceptedRoute).join('/'); + break; + case '(...)': + // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route + interceptedRoute = '/' + interceptedRoute; + break; + case '(..)(..)': + // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route + const splitInterceptingRoute = interceptingRoute.split('/'); + if (splitInterceptingRoute.length <= 2) { + throw new Error(`Invalid interception route: ${path}. Cannot use (..)(..) marker at the root level or one level up.`); + } + interceptedRoute = splitInterceptingRoute.slice(0, -2).concat(interceptedRoute).join('/'); + break; + default: + throw new Error('Invariant: unexpected marker'); + } + return { + interceptingRoute, + interceptedRoute + }; +} +function findMissingCanonicalInterceptionRoutes(appPaths) { + const canonicalRoutes = Object.keys(appPaths).filter((route)=>!isInterceptionRouteAppPath(route)); + const canonicalRoutePatterns = canonicalRoutes.map(parseRoutePattern); + return Object.keys(appPaths).filter(isInterceptionRouteAppPath).map((interceptionRoute)=>({ + interceptionRoute, + canonicalRoute: extractInterceptionRouteInformation(interceptionRoute).interceptedRoute + })).filter(({ canonicalRoute })=>!isRoutePatternCovered(canonicalRoute, canonicalRoutePatterns)).sort((a, b)=>a.interceptionRoute.localeCompare(b.interceptionRoute)); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/is-dynamic.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "isDynamicRoute", + ()=>isDynamicRoute +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/interception-routes.js [app-route] (ecmascript)"); +; +// Identify /.*[param].*/ in route string +const TEST_ROUTE = /\/[^/]*\[[^/]+\][^/]*(?=\/|$)/; +// Identify /[param]/ in route string +const TEST_STRICT_ROUTE = /\/\[[^/]+\](?=\/|$)/; +function isDynamicRoute(route, strict = true) { + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isInterceptionRouteAppPath"])(route)) { + route = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["extractInterceptionRouteInformation"])(route).interceptedRoute; + } + if (strict) { + return TEST_STRICT_ROUTE.test(route); + } + return TEST_ROUTE.test(route); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-loader-tree.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "parseLoaderTree", + ()=>parseLoaderTree +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/segment.js [app-route] (ecmascript)"); +; +function parseLoaderTree(tree) { + const [segment, parallelRoutes, modules, staticSiblings] = tree; + const { layout, template } = modules; + let { page } = modules; + // a __DEFAULT__ segment means that this route didn't match any of the + // segments in the route, so we should use the default page + page = segment === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["DEFAULT_SEGMENT_KEY"] ? modules.defaultPage : page; + const conventionPath = layout?.[1] || template?.[1] || page?.[1]; + return { + page, + segment, + modules, + /* it can be either layout / template / page */ conventionPath, + parallelRoutes, + staticSiblings + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Given a path this function will find the pathname, query and hash and return + * them. This is useful to parse full paths on the client side. + * @param path A path to parse e.g. /foo/bar?id=1#hash + */ __turbopack_context__.s([ + "parsePath", + ()=>parsePath +]); +function parsePath(path) { + const hashIndex = path.indexOf('#'); + const queryIndex = path.indexOf('?'); + const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex); + if (hasQuery || hashIndex > -1) { + return { + pathname: path.substring(0, hasQuery ? queryIndex : hashIndex), + query: hasQuery ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined) : '', + hash: hashIndex > -1 ? path.slice(hashIndex) : '' + }; + } + return { + pathname: path, + query: '', + hash: '' + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "pathHasPrefix", + ()=>pathHasPrefix +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [app-route] (ecmascript)"); +; +function pathHasPrefix(path, prefix) { + if (typeof path !== 'string') { + return false; + } + const { pathname } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["parsePath"])(path); + return pathname === prefix || pathname.startsWith(prefix + '/'); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "removePathPrefix", + ()=>removePathPrefix +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [app-route] (ecmascript)"); +; +function removePathPrefix(path, prefix) { + // If the path doesn't start with the prefix we can return it as is. This + // protects us from situations where the prefix is a substring of the path + // prefix such as: + // + // For prefix: /blog + // + // /blog -> true + // /blog/ -> true + // /blog/1 -> true + // /blogging -> false + // /blogging/ -> false + // /blogging/1 -> false + if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pathHasPrefix"])(path, prefix)) { + return path; + } + // Remove the prefix from the path via slicing. + const withoutPrefix = path.slice(prefix.length); + // If the path without the prefix starts with a `/` we can return it as is. + if (withoutPrefix.startsWith('/')) { + return withoutPrefix; + } + // If the path without the prefix doesn't start with a `/` we need to add it + // back to the path to make sure it's a valid path. + return `/${withoutPrefix}`; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-trailing-slash.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Removes the trailing slash for a given route or page path. Examples: + * - `/foo/bar/` -> `/foo/bar` + * - `/foo/bar` -> `/foo/bar` + * + * Uses charCodeAt (47 === '/') instead of regex to avoid the overhead of + * compiling and executing a RegExp on every call (~3-5x faster). + */ __turbopack_context__.s([ + "removeTrailingSlash", + ()=>removeTrailingSlash +]); +function removeTrailingSlash(route) { + return route.charCodeAt(route.length - 1) === 47 && route.length > 1 ? route.slice(0, -1) : route; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/segment.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "DEFAULT_SEGMENT_KEY", + ()=>DEFAULT_SEGMENT_KEY, + "NOT_FOUND_SEGMENT_KEY", + ()=>NOT_FOUND_SEGMENT_KEY, + "PAGE_SEGMENT_KEY", + ()=>PAGE_SEGMENT_KEY, + "computeSelectedLayoutSegment", + ()=>computeSelectedLayoutSegment, + "getSegmentValue", + ()=>getSegmentValue, + "getSelectedLayoutSegmentPath", + ()=>getSelectedLayoutSegmentPath, + "isGroupSegment", + ()=>isGroupSegment, + "isParallelRouteSegment", + ()=>isParallelRouteSegment +]); +function getSegmentValue(segment) { + return Array.isArray(segment) ? segment[1] : segment; +} +function isGroupSegment(segment) { + // Use array[0] for performant purpose + return segment[0] === '(' && segment.endsWith(')'); +} +function isParallelRouteSegment(segment) { + return segment.startsWith('@') && segment !== '@children'; +} +function computeSelectedLayoutSegment(segments, parallelRouteKey) { + if (!segments || segments.length === 0) { + return null; + } + // For 'children', use first segment; for other parallel routes, use last segment + const rawSegment = parallelRouteKey === 'children' ? segments[0] : segments[segments.length - 1]; + // If the default slot is showing, return null since it's not technically "selected" (it's a fallback) + // Returning an internal value like `__DEFAULT__` would be confusing + return rawSegment === DEFAULT_SEGMENT_KEY ? null : rawSegment; +} +function getSelectedLayoutSegmentPath(tree, parallelRouteKey, first = true, segmentPath = []) { + let node; + if (first) { + // Use the provided parallel route key on the first parallel route + node = tree[1][parallelRouteKey]; + } else { + // After first parallel route prefer children, if there's no children pick the first parallel route. + const parallelRoutes = tree[1]; + node = parallelRoutes.children ?? Object.values(parallelRoutes)[0]; + } + if (!node) return segmentPath; + const segment = node[0]; + let segmentValue = getSegmentValue(segment); + if (!segmentValue || segmentValue === PAGE_SEGMENT_KEY) { + return segmentPath; + } + segmentPath.push(segmentValue); + return getSelectedLayoutSegmentPath(node, parallelRouteKey, false, segmentPath); +} +const PAGE_SEGMENT_KEY = '__PAGE__'; +const DEFAULT_SEGMENT_KEY = '__DEFAULT__'; +const NOT_FOUND_SEGMENT_KEY = '/_not-found'; +}), +"[project]/node_modules/next/dist/esm/shared/lib/server-reference-info.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "SERVER_REFERENCE_ID_LENGTH", + ()=>SERVER_REFERENCE_ID_LENGTH, + "extractInfoFromServerReferenceId", + ()=>extractInfoFromServerReferenceId, + "mightBeServerReferenceId", + ()=>mightBeServerReferenceId, + "omitUnusedArgs", + ()=>omitUnusedArgs +]); +const SERVER_REFERENCE_ID_LENGTH = 42; +function mightBeServerReferenceId(id) { + return id.length === SERVER_REFERENCE_ID_LENGTH; +} +function extractInfoFromServerReferenceId(id) { + const infoByte = parseInt(id.slice(0, 2), 16); + const typeBit = infoByte >> 7 & 0x1; + const argMask = infoByte >> 1 & 0x3f; + const restArgs = infoByte & 0x1; + const usedArgs = Array(6); + for(let index = 0; index < 6; index++){ + const bitPosition = 5 - index; + const bit = argMask >> bitPosition & 0x1; + usedArgs[index] = bit === 1; + } + return { + type: typeBit === 1 ? 'use-cache' : 'server-action', + usedArgs: usedArgs, + hasRestArgs: restArgs === 1 + }; +} +function omitUnusedArgs(args, info) { + const filteredArgs = new Array(args.length); + let length = 0; + for(let index = 0; index < args.length; index++){ + if (index < 6 && info.usedArgs[index] || // This assumes that the server reference info byte has the restArgs bit + // set to 1 if there are more than 6 args. + index >= 6 && info.hasRestArgs) { + filteredArgs[index] = args[index]; + length = index + 1; + } + } + // Trim trailing unused args from the array. + filteredArgs.length = length; + return filteredArgs; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/utils.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Web vitals provided to _app.reportWebVitals by Core Web Vitals plugin developed by Google Chrome team. + * https://nextjs.org/blog/next-9-4#integrated-web-vitals-reporting + */ __turbopack_context__.s([ + "DecodeError", + ()=>DecodeError, + "MiddlewareNotFoundError", + ()=>MiddlewareNotFoundError, + "MissingStaticPage", + ()=>MissingStaticPage, + "NormalizeError", + ()=>NormalizeError, + "PageNotFoundError", + ()=>PageNotFoundError, + "SP", + ()=>SP, + "ST", + ()=>ST, + "WEB_VITALS", + ()=>WEB_VITALS, + "execOnce", + ()=>execOnce, + "getDisplayName", + ()=>getDisplayName, + "getLocationOrigin", + ()=>getLocationOrigin, + "getURL", + ()=>getURL, + "isAbsoluteUrl", + ()=>isAbsoluteUrl, + "isResSent", + ()=>isResSent, + "loadGetInitialProps", + ()=>loadGetInitialProps, + "normalizeRepeatedSlashes", + ()=>normalizeRepeatedSlashes, + "stringifyError", + ()=>stringifyError +]); +const WEB_VITALS = [ + 'CLS', + 'FCP', + 'INP', + 'LCP', + 'TTFB' +]; +function execOnce(fn) { + let used = false; + let result; + return (...args)=>{ + if (!used) { + used = true; + result = fn(...args); + } + return result; + }; +} +// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 +// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 +const ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\d+\-.]*?:/; +const isAbsoluteUrl = (url)=>{ + // Fast path: an absolute URL must start with a letter (the scheme). + // Check for a-z and A-Z without the cost of the regex. + const c = url.charCodeAt(0); + const isLetter = c >= 65 /* A */ && c <= 90 || c >= 97 /* a */ && c <= 122; + /* z */ if (!isLetter) { + return false; + } + return ABSOLUTE_URL_REGEX.test(url); +}; +function getLocationOrigin() { + const { protocol, hostname, port } = window.location; + return `${protocol}//${hostname}${port ? ':' + port : ''}`; +} +function getURL() { + const { href } = window.location; + const origin = getLocationOrigin(); + return href.substring(origin.length); +} +function getDisplayName(Component) { + return typeof Component === 'string' ? Component : Component.displayName || Component.name || 'Unknown'; +} +function isResSent(res) { + return res.finished || res.headersSent; +} +function normalizeRepeatedSlashes(url) { + const urlParts = url.split('?'); + const urlNoQuery = urlParts[0]; + return urlNoQuery // first we replace any non-encoded backslashes with forward + // then normalize repeated forward slashes + .replace(/\\/g, '/').replace(/\/\/+/g, '/') + (urlParts[1] ? `?${urlParts.slice(1).join('?')}` : ''); +} +async function loadGetInitialProps(App, ctx) { + if ("TURBOPACK compile-time truthy", 1) { + if (App.prototype?.getInitialProps) { + const message = `"${getDisplayName(App)}.getInitialProps()" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.`; + throw new Error(message); + } + } + // when called from _app `ctx` is nested in `ctx` + const res = ctx.res || ctx.ctx && ctx.ctx.res; + if (!App.getInitialProps) { + if (ctx.ctx && ctx.Component) { + // @ts-ignore pageProps default + return { + pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx) + }; + } + return {}; + } + const props = await App.getInitialProps(ctx); + if (res && isResSent(res)) { + return props; + } + if (!props) { + const message = `"${getDisplayName(App)}.getInitialProps()" should resolve to an object. But found "${props}" instead.`; + throw new Error(message); + } + if ("TURBOPACK compile-time truthy", 1) { + if (Object.keys(props).length === 0 && !ctx.ctx) { + console.warn(`${getDisplayName(App)} returned an empty object from \`getInitialProps\`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps`); + } + } + return props; +} +const SP = typeof performance !== 'undefined'; +const ST = SP && [ + 'mark', + 'measure', + 'getEntriesByName' +].every((method)=>typeof performance[method] === 'function'); +class DecodeError extends Error { +} +class NormalizeError extends Error { +} +class PageNotFoundError extends Error { + constructor(page){ + super(); + this.code = 'ENOENT'; + this.name = 'PageNotFoundError'; + this.message = `Cannot find module for page: ${page}`; + } +} +class MissingStaticPage extends Error { + constructor(page, message){ + super(); + this.message = `Failed to load static file for page: ${page} ${message}`; + } +} +class MiddlewareNotFoundError extends Error { + constructor(){ + super(); + this.code = 'ENOENT'; + this.message = `Cannot find the middleware module`; + } +} +function stringifyError(error) { + return JSON.stringify({ + message: error.message, + stack: error.stack + }); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/utils/reflect-utils.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "describeHasCheckingStringProperty", + ()=>describeHasCheckingStringProperty, + "describeStringPropertyAccess", + ()=>describeStringPropertyAccess, + "wellKnownProperties", + ()=>wellKnownProperties +]); +// This regex will have fast negatives meaning valid identifiers may not pass +// this test. However this is only used during static generation to provide hints +// about why a page bailed out of some or all prerendering and we can use bracket notation +// for example while `ಠ_ಠ` is a valid identifier it's ok to print `searchParams['ಠ_ಠ']` +// even if this would have been fine too `searchParams.ಠ_ಠ` +const isDefinitelyAValidIdentifier = /^[A-Za-z_$][A-Za-z0-9_$]*$/; +function describeStringPropertyAccess(target, prop) { + if (isDefinitelyAValidIdentifier.test(prop)) { + return `\`${target}.${prop}\``; + } + return `\`${target}[${JSON.stringify(prop)}]\``; +} +function describeHasCheckingStringProperty(target, prop) { + const stringifiedProp = JSON.stringify(prop); + return `\`Reflect.has(${target}, ${stringifiedProp})\`, \`${stringifiedProp} in ${target}\`, or similar`; +} +const wellKnownProperties = new Set([ + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toString', + 'valueOf', + 'toLocaleString', + // Promise prototype + 'then', + 'catch', + 'finally', + // React Promise extension + 'status', + // 'value', + // 'error', + // React introspection + 'displayName', + '_debugInfo', + // Common tested properties + 'toJSON', + '$$typeof', + '__esModule', + // Tested by flight when checking for iterables + '@@iterator' +]); +}), +"[project]/node_modules/next/dist/server/route-modules/app-page/module.compiled.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable +; +else { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + if ("TURBOPACK compile-time truthy", 1) { + if ("TURBOPACK compile-time truthy", 1) { + module.exports = __turbopack_context__.r("[externals]/next/dist/compiled/next-server/app-page-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-page-turbo.runtime.dev.js, cjs)"); + } else //TURBOPACK unreachable + ; + } else //TURBOPACK unreachable + ; + } +} +}), +"[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +module.exports = __turbopack_context__.r("[project]/node_modules/next/dist/server/route-modules/app-page/module.compiled.js [app-route] (ecmascript)").vendored['react-rsc'].React; +}), +]})(), +"[project]/node_modules/next/dist/compiled/@opentelemetry/api/index.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { + +(()=>{ + "use strict"; + var e = { + 912: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.ContextAPI = void 0; + const n = r(108); + const a = r(221); + const o = r(44); + const i = "context"; + const c = new n.NoopContextManager; + class ContextAPI { + constructor(){} + static getInstance() { + if (!this._instance) { + this._instance = new ContextAPI; + } + return this._instance; + } + setGlobalContextManager(e) { + return (0, a.registerGlobal)(i, e, o.DiagAPI.instance()); + } + active() { + return this._getContextManager().active(); + } + with(e, t, r, ...n) { + return this._getContextManager().with(e, t, r, ...n); + } + bind(e, t) { + return this._getContextManager().bind(e, t); + } + _getContextManager() { + return (0, a.getGlobal)(i) || c; + } + disable() { + this._getContextManager().disable(); + (0, a.unregisterGlobal)(i, o.DiagAPI.instance()); + } + } + t.ContextAPI = ContextAPI; + }, + 44: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.DiagAPI = void 0; + const n = r(757); + const a = r(412); + const o = r(711); + const i = r(221); + const c = "diag"; + class DiagAPI { + constructor(){ + function _logProxy(e) { + return function(...t) { + const r = (0, i.getGlobal)("diag"); + if (!r) return; + return r[e](...t); + }; + } + const e = this; + const setLogger = (t, r = { + logLevel: o.DiagLogLevel.INFO + })=>{ + var n, c, s; + if (t === e) { + const t = new Error("Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation"); + e.error((n = t.stack) !== null && n !== void 0 ? n : t.message); + return false; + } + if (typeof r === "number") { + r = { + logLevel: r + }; + } + const u = (0, i.getGlobal)("diag"); + const l = (0, a.createLogLevelDiagLogger)((c = r.logLevel) !== null && c !== void 0 ? c : o.DiagLogLevel.INFO, t); + if (u && !r.suppressOverrideMessage) { + const e = (s = (new Error).stack) !== null && s !== void 0 ? s : ""; + u.warn(`Current logger will be overwritten from ${e}`); + l.warn(`Current logger will overwrite one already registered from ${e}`); + } + return (0, i.registerGlobal)("diag", l, e, true); + }; + e.setLogger = setLogger; + e.disable = ()=>{ + (0, i.unregisterGlobal)(c, e); + }; + e.createComponentLogger = (e)=>new n.DiagComponentLogger(e); + e.verbose = _logProxy("verbose"); + e.debug = _logProxy("debug"); + e.info = _logProxy("info"); + e.warn = _logProxy("warn"); + e.error = _logProxy("error"); + } + static instance() { + if (!this._instance) { + this._instance = new DiagAPI; + } + return this._instance; + } + } + t.DiagAPI = DiagAPI; + }, + 262: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.MetricsAPI = void 0; + const n = r(586); + const a = r(221); + const o = r(44); + const i = "metrics"; + class MetricsAPI { + constructor(){} + static getInstance() { + if (!this._instance) { + this._instance = new MetricsAPI; + } + return this._instance; + } + setGlobalMeterProvider(e) { + return (0, a.registerGlobal)(i, e, o.DiagAPI.instance()); + } + getMeterProvider() { + return (0, a.getGlobal)(i) || n.NOOP_METER_PROVIDER; + } + getMeter(e, t, r) { + return this.getMeterProvider().getMeter(e, t, r); + } + disable() { + (0, a.unregisterGlobal)(i, o.DiagAPI.instance()); + } + } + t.MetricsAPI = MetricsAPI; + }, + 25: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.PropagationAPI = void 0; + const n = r(221); + const a = r(19); + const o = r(92); + const i = r(398); + const c = r(504); + const s = r(44); + const u = "propagation"; + const l = new a.NoopTextMapPropagator; + class PropagationAPI { + constructor(){ + this.createBaggage = c.createBaggage; + this.getBaggage = i.getBaggage; + this.getActiveBaggage = i.getActiveBaggage; + this.setBaggage = i.setBaggage; + this.deleteBaggage = i.deleteBaggage; + } + static getInstance() { + if (!this._instance) { + this._instance = new PropagationAPI; + } + return this._instance; + } + setGlobalPropagator(e) { + return (0, n.registerGlobal)(u, e, s.DiagAPI.instance()); + } + inject(e, t, r = o.defaultTextMapSetter) { + return this._getGlobalPropagator().inject(e, t, r); + } + extract(e, t, r = o.defaultTextMapGetter) { + return this._getGlobalPropagator().extract(e, t, r); + } + fields() { + return this._getGlobalPropagator().fields(); + } + disable() { + (0, n.unregisterGlobal)(u, s.DiagAPI.instance()); + } + _getGlobalPropagator() { + return (0, n.getGlobal)(u) || l; + } + } + t.PropagationAPI = PropagationAPI; + }, + 397: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.TraceAPI = void 0; + const n = r(221); + const a = r(498); + const o = r(477); + const i = r(793); + const c = r(44); + const s = "trace"; + class TraceAPI { + constructor(){ + this._proxyTracerProvider = new a.ProxyTracerProvider; + this.wrapSpanContext = o.wrapSpanContext; + this.isSpanContextValid = o.isSpanContextValid; + this.deleteSpan = i.deleteSpan; + this.getSpan = i.getSpan; + this.getActiveSpan = i.getActiveSpan; + this.getSpanContext = i.getSpanContext; + this.setSpan = i.setSpan; + this.setSpanContext = i.setSpanContext; + } + static getInstance() { + if (!this._instance) { + this._instance = new TraceAPI; + } + return this._instance; + } + setGlobalTracerProvider(e) { + const t = (0, n.registerGlobal)(s, this._proxyTracerProvider, c.DiagAPI.instance()); + if (t) { + this._proxyTracerProvider.setDelegate(e); + } + return t; + } + getTracerProvider() { + return (0, n.getGlobal)(s) || this._proxyTracerProvider; + } + getTracer(e, t) { + return this.getTracerProvider().getTracer(e, t); + } + disable() { + (0, n.unregisterGlobal)(s, c.DiagAPI.instance()); + this._proxyTracerProvider = new a.ProxyTracerProvider; + } + } + t.TraceAPI = TraceAPI; + }, + 398: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.deleteBaggage = t.setBaggage = t.getActiveBaggage = t.getBaggage = void 0; + const n = r(912); + const a = r(23); + const o = (0, a.createContextKey)("OpenTelemetry Baggage Key"); + function getBaggage(e) { + return e.getValue(o) || undefined; + } + t.getBaggage = getBaggage; + function getActiveBaggage() { + return getBaggage(n.ContextAPI.getInstance().active()); + } + t.getActiveBaggage = getActiveBaggage; + function setBaggage(e, t) { + return e.setValue(o, t); + } + t.setBaggage = setBaggage; + function deleteBaggage(e) { + return e.deleteValue(o); + } + t.deleteBaggage = deleteBaggage; + }, + 152: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.BaggageImpl = void 0; + class BaggageImpl { + constructor(e){ + this._entries = e ? new Map(e) : new Map; + } + getEntry(e) { + const t = this._entries.get(e); + if (!t) { + return undefined; + } + return Object.assign({}, t); + } + getAllEntries() { + return Array.from(this._entries.entries()).map(([e, t])=>[ + e, + t + ]); + } + setEntry(e, t) { + const r = new BaggageImpl(this._entries); + r._entries.set(e, t); + return r; + } + removeEntry(e) { + const t = new BaggageImpl(this._entries); + t._entries.delete(e); + return t; + } + removeEntries(...e) { + const t = new BaggageImpl(this._entries); + for (const r of e){ + t._entries.delete(r); + } + return t; + } + clear() { + return new BaggageImpl; + } + } + t.BaggageImpl = BaggageImpl; + }, + 647: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.baggageEntryMetadataSymbol = void 0; + t.baggageEntryMetadataSymbol = Symbol("BaggageEntryMetadata"); + }, + 504: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.baggageEntryMetadataFromString = t.createBaggage = void 0; + const n = r(44); + const a = r(152); + const o = r(647); + const i = n.DiagAPI.instance(); + function createBaggage(e = {}) { + return new a.BaggageImpl(new Map(Object.entries(e))); + } + t.createBaggage = createBaggage; + function baggageEntryMetadataFromString(e) { + if (typeof e !== "string") { + i.error(`Cannot create baggage metadata from unknown type: ${typeof e}`); + e = ""; + } + return { + __TYPE__: o.baggageEntryMetadataSymbol, + toString () { + return e; + } + }; + } + t.baggageEntryMetadataFromString = baggageEntryMetadataFromString; + }, + 778: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.context = void 0; + const n = r(912); + t.context = n.ContextAPI.getInstance(); + }, + 108: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.NoopContextManager = void 0; + const n = r(23); + class NoopContextManager { + active() { + return n.ROOT_CONTEXT; + } + with(e, t, r, ...n) { + return t.call(r, ...n); + } + bind(e, t) { + return t; + } + enable() { + return this; + } + disable() { + return this; + } + } + t.NoopContextManager = NoopContextManager; + }, + 23: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.ROOT_CONTEXT = t.createContextKey = void 0; + function createContextKey(e) { + return Symbol.for(e); + } + t.createContextKey = createContextKey; + class BaseContext { + constructor(e){ + const t = this; + t._currentContext = e ? new Map(e) : new Map; + t.getValue = (e)=>t._currentContext.get(e); + t.setValue = (e, r)=>{ + const n = new BaseContext(t._currentContext); + n._currentContext.set(e, r); + return n; + }; + t.deleteValue = (e)=>{ + const r = new BaseContext(t._currentContext); + r._currentContext.delete(e); + return r; + }; + } + } + t.ROOT_CONTEXT = new BaseContext; + }, + 304: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.diag = void 0; + const n = r(44); + t.diag = n.DiagAPI.instance(); + }, + 757: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.DiagComponentLogger = void 0; + const n = r(221); + class DiagComponentLogger { + constructor(e){ + this._namespace = e.namespace || "DiagComponentLogger"; + } + debug(...e) { + return logProxy("debug", this._namespace, e); + } + error(...e) { + return logProxy("error", this._namespace, e); + } + info(...e) { + return logProxy("info", this._namespace, e); + } + warn(...e) { + return logProxy("warn", this._namespace, e); + } + verbose(...e) { + return logProxy("verbose", this._namespace, e); + } + } + t.DiagComponentLogger = DiagComponentLogger; + function logProxy(e, t, r) { + const a = (0, n.getGlobal)("diag"); + if (!a) { + return; + } + r.unshift(t); + return a[e](...r); + } + }, + 83: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.DiagConsoleLogger = void 0; + const r = [ + { + n: "error", + c: "error" + }, + { + n: "warn", + c: "warn" + }, + { + n: "info", + c: "info" + }, + { + n: "debug", + c: "debug" + }, + { + n: "verbose", + c: "trace" + } + ]; + class DiagConsoleLogger { + constructor(){ + function _consoleFunc(e) { + return function(...t) { + if (console) { + let r = console[e]; + if (typeof r !== "function") { + r = console.log; + } + if (typeof r === "function") { + return r.apply(console, t); + } + } + }; + } + for(let e = 0; e < r.length; e++){ + this[r[e].n] = _consoleFunc(r[e].c); + } + } + } + t.DiagConsoleLogger = DiagConsoleLogger; + }, + 412: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.createLogLevelDiagLogger = void 0; + const n = r(711); + function createLogLevelDiagLogger(e, t) { + if (e < n.DiagLogLevel.NONE) { + e = n.DiagLogLevel.NONE; + } else if (e > n.DiagLogLevel.ALL) { + e = n.DiagLogLevel.ALL; + } + t = t || {}; + function _filterFunc(r, n) { + const a = t[r]; + if (typeof a === "function" && e >= n) { + return a.bind(t); + } + return function() {}; + } + return { + error: _filterFunc("error", n.DiagLogLevel.ERROR), + warn: _filterFunc("warn", n.DiagLogLevel.WARN), + info: _filterFunc("info", n.DiagLogLevel.INFO), + debug: _filterFunc("debug", n.DiagLogLevel.DEBUG), + verbose: _filterFunc("verbose", n.DiagLogLevel.VERBOSE) + }; + } + t.createLogLevelDiagLogger = createLogLevelDiagLogger; + }, + 711: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.DiagLogLevel = void 0; + var r; + (function(e) { + e[e["NONE"] = 0] = "NONE"; + e[e["ERROR"] = 30] = "ERROR"; + e[e["WARN"] = 50] = "WARN"; + e[e["INFO"] = 60] = "INFO"; + e[e["DEBUG"] = 70] = "DEBUG"; + e[e["VERBOSE"] = 80] = "VERBOSE"; + e[e["ALL"] = 9999] = "ALL"; + })(r = t.DiagLogLevel || (t.DiagLogLevel = {})); + }, + 221: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.unregisterGlobal = t.getGlobal = t.registerGlobal = void 0; + const n = r(678); + const a = r(652); + const o = r(662); + const i = a.VERSION.split(".")[0]; + const c = Symbol.for(`opentelemetry.js.api.${i}`); + const s = n._globalThis; + function registerGlobal(e, t, r, n = false) { + var o; + const i = s[c] = (o = s[c]) !== null && o !== void 0 ? o : { + version: a.VERSION + }; + if (!n && i[e]) { + const t = new Error(`@opentelemetry/api: Attempted duplicate registration of API: ${e}`); + r.error(t.stack || t.message); + return false; + } + if (i.version !== a.VERSION) { + const t = new Error(`@opentelemetry/api: Registration of version v${i.version} for ${e} does not match previously registered API v${a.VERSION}`); + r.error(t.stack || t.message); + return false; + } + i[e] = t; + r.debug(`@opentelemetry/api: Registered a global for ${e} v${a.VERSION}.`); + return true; + } + t.registerGlobal = registerGlobal; + function getGlobal(e) { + var t, r; + const n = (t = s[c]) === null || t === void 0 ? void 0 : t.version; + if (!n || !(0, o.isCompatible)(n)) { + return; + } + return (r = s[c]) === null || r === void 0 ? void 0 : r[e]; + } + t.getGlobal = getGlobal; + function unregisterGlobal(e, t) { + t.debug(`@opentelemetry/api: Unregistering a global for ${e} v${a.VERSION}.`); + const r = s[c]; + if (r) { + delete r[e]; + } + } + t.unregisterGlobal = unregisterGlobal; + }, + 662: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.isCompatible = t._makeCompatibilityCheck = void 0; + const n = r(652); + const a = /^(\d+)\.(\d+)\.(\d+)(-(.+))?$/; + function _makeCompatibilityCheck(e) { + const t = new Set([ + e + ]); + const r = new Set; + const n = e.match(a); + if (!n) { + return ()=>false; + } + const o = { + major: +n[1], + minor: +n[2], + patch: +n[3], + prerelease: n[4] + }; + if (o.prerelease != null) { + return function isExactmatch(t) { + return t === e; + }; + } + function _reject(e) { + r.add(e); + return false; + } + function _accept(e) { + t.add(e); + return true; + } + return function isCompatible(e) { + if (t.has(e)) { + return true; + } + if (r.has(e)) { + return false; + } + const n = e.match(a); + if (!n) { + return _reject(e); + } + const i = { + major: +n[1], + minor: +n[2], + patch: +n[3], + prerelease: n[4] + }; + if (i.prerelease != null) { + return _reject(e); + } + if (o.major !== i.major) { + return _reject(e); + } + if (o.major === 0) { + if (o.minor === i.minor && o.patch <= i.patch) { + return _accept(e); + } + return _reject(e); + } + if (o.minor <= i.minor) { + return _accept(e); + } + return _reject(e); + }; + } + t._makeCompatibilityCheck = _makeCompatibilityCheck; + t.isCompatible = _makeCompatibilityCheck(n.VERSION); + }, + 120: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.metrics = void 0; + const n = r(262); + t.metrics = n.MetricsAPI.getInstance(); + }, + 532: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.ValueType = void 0; + var r; + (function(e) { + e[e["INT"] = 0] = "INT"; + e[e["DOUBLE"] = 1] = "DOUBLE"; + })(r = t.ValueType || (t.ValueType = {})); + }, + 440: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.createNoopMeter = t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC = t.NOOP_OBSERVABLE_GAUGE_METRIC = t.NOOP_OBSERVABLE_COUNTER_METRIC = t.NOOP_UP_DOWN_COUNTER_METRIC = t.NOOP_HISTOGRAM_METRIC = t.NOOP_COUNTER_METRIC = t.NOOP_METER = t.NoopObservableUpDownCounterMetric = t.NoopObservableGaugeMetric = t.NoopObservableCounterMetric = t.NoopObservableMetric = t.NoopHistogramMetric = t.NoopUpDownCounterMetric = t.NoopCounterMetric = t.NoopMetric = t.NoopMeter = void 0; + class NoopMeter { + constructor(){} + createHistogram(e, r) { + return t.NOOP_HISTOGRAM_METRIC; + } + createCounter(e, r) { + return t.NOOP_COUNTER_METRIC; + } + createUpDownCounter(e, r) { + return t.NOOP_UP_DOWN_COUNTER_METRIC; + } + createObservableGauge(e, r) { + return t.NOOP_OBSERVABLE_GAUGE_METRIC; + } + createObservableCounter(e, r) { + return t.NOOP_OBSERVABLE_COUNTER_METRIC; + } + createObservableUpDownCounter(e, r) { + return t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC; + } + addBatchObservableCallback(e, t) {} + removeBatchObservableCallback(e) {} + } + t.NoopMeter = NoopMeter; + class NoopMetric { + } + t.NoopMetric = NoopMetric; + class NoopCounterMetric extends NoopMetric { + add(e, t) {} + } + t.NoopCounterMetric = NoopCounterMetric; + class NoopUpDownCounterMetric extends NoopMetric { + add(e, t) {} + } + t.NoopUpDownCounterMetric = NoopUpDownCounterMetric; + class NoopHistogramMetric extends NoopMetric { + record(e, t) {} + } + t.NoopHistogramMetric = NoopHistogramMetric; + class NoopObservableMetric { + addCallback(e) {} + removeCallback(e) {} + } + t.NoopObservableMetric = NoopObservableMetric; + class NoopObservableCounterMetric extends NoopObservableMetric { + } + t.NoopObservableCounterMetric = NoopObservableCounterMetric; + class NoopObservableGaugeMetric extends NoopObservableMetric { + } + t.NoopObservableGaugeMetric = NoopObservableGaugeMetric; + class NoopObservableUpDownCounterMetric extends NoopObservableMetric { + } + t.NoopObservableUpDownCounterMetric = NoopObservableUpDownCounterMetric; + t.NOOP_METER = new NoopMeter; + t.NOOP_COUNTER_METRIC = new NoopCounterMetric; + t.NOOP_HISTOGRAM_METRIC = new NoopHistogramMetric; + t.NOOP_UP_DOWN_COUNTER_METRIC = new NoopUpDownCounterMetric; + t.NOOP_OBSERVABLE_COUNTER_METRIC = new NoopObservableCounterMetric; + t.NOOP_OBSERVABLE_GAUGE_METRIC = new NoopObservableGaugeMetric; + t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC = new NoopObservableUpDownCounterMetric; + function createNoopMeter() { + return t.NOOP_METER; + } + t.createNoopMeter = createNoopMeter; + }, + 586: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.NOOP_METER_PROVIDER = t.NoopMeterProvider = void 0; + const n = r(440); + class NoopMeterProvider { + getMeter(e, t, r) { + return n.NOOP_METER; + } + } + t.NoopMeterProvider = NoopMeterProvider; + t.NOOP_METER_PROVIDER = new NoopMeterProvider; + }, + 678: function(e, t, r) { + var n = this && this.__createBinding || (Object.create ? function(e, t, r, n) { + if (n === undefined) n = r; + Object.defineProperty(e, n, { + enumerable: true, + get: function() { + return t[r]; + } + }); + } : function(e, t, r, n) { + if (n === undefined) n = r; + e[n] = t[r]; + }); + var a = this && this.__exportStar || function(e, t) { + for(var r in e)if (r !== "default" && !Object.prototype.hasOwnProperty.call(t, r)) n(t, e, r); + }; + Object.defineProperty(t, "__esModule", { + value: true + }); + a(r(59), t); + }, + 460: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t._globalThis = void 0; + t._globalThis = typeof globalThis === "object" ? globalThis : /*TURBOPACK member replacement*/ __turbopack_context__.g; + }, + 59: function(e, t, r) { + var n = this && this.__createBinding || (Object.create ? function(e, t, r, n) { + if (n === undefined) n = r; + Object.defineProperty(e, n, { + enumerable: true, + get: function() { + return t[r]; + } + }); + } : function(e, t, r, n) { + if (n === undefined) n = r; + e[n] = t[r]; + }); + var a = this && this.__exportStar || function(e, t) { + for(var r in e)if (r !== "default" && !Object.prototype.hasOwnProperty.call(t, r)) n(t, e, r); + }; + Object.defineProperty(t, "__esModule", { + value: true + }); + a(r(460), t); + }, + 27: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.propagation = void 0; + const n = r(25); + t.propagation = n.PropagationAPI.getInstance(); + }, + 19: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.NoopTextMapPropagator = void 0; + class NoopTextMapPropagator { + inject(e, t) {} + extract(e, t) { + return e; + } + fields() { + return []; + } + } + t.NoopTextMapPropagator = NoopTextMapPropagator; + }, + 92: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.defaultTextMapSetter = t.defaultTextMapGetter = void 0; + t.defaultTextMapGetter = { + get (e, t) { + if (e == null) { + return undefined; + } + return e[t]; + }, + keys (e) { + if (e == null) { + return []; + } + return Object.keys(e); + } + }; + t.defaultTextMapSetter = { + set (e, t, r) { + if (e == null) { + return; + } + e[t] = r; + } + }; + }, + 816: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.trace = void 0; + const n = r(397); + t.trace = n.TraceAPI.getInstance(); + }, + 374: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.NonRecordingSpan = void 0; + const n = r(546); + class NonRecordingSpan { + constructor(e = n.INVALID_SPAN_CONTEXT){ + this._spanContext = e; + } + spanContext() { + return this._spanContext; + } + setAttribute(e, t) { + return this; + } + setAttributes(e) { + return this; + } + addEvent(e, t) { + return this; + } + setStatus(e) { + return this; + } + updateName(e) { + return this; + } + end(e) {} + isRecording() { + return false; + } + recordException(e, t) {} + } + t.NonRecordingSpan = NonRecordingSpan; + }, + 637: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.NoopTracer = void 0; + const n = r(912); + const a = r(793); + const o = r(374); + const i = r(477); + const c = n.ContextAPI.getInstance(); + class NoopTracer { + startSpan(e, t, r = c.active()) { + const n = Boolean(t === null || t === void 0 ? void 0 : t.root); + if (n) { + return new o.NonRecordingSpan; + } + const s = r && (0, a.getSpanContext)(r); + if (isSpanContext(s) && (0, i.isSpanContextValid)(s)) { + return new o.NonRecordingSpan(s); + } else { + return new o.NonRecordingSpan; + } + } + startActiveSpan(e, t, r, n) { + let o; + let i; + let s; + if (arguments.length < 2) { + return; + } else if (arguments.length === 2) { + s = t; + } else if (arguments.length === 3) { + o = t; + s = r; + } else { + o = t; + i = r; + s = n; + } + const u = i !== null && i !== void 0 ? i : c.active(); + const l = this.startSpan(e, o, u); + const g = (0, a.setSpan)(u, l); + return c.with(g, s, undefined, l); + } + } + t.NoopTracer = NoopTracer; + function isSpanContext(e) { + return typeof e === "object" && typeof e["spanId"] === "string" && typeof e["traceId"] === "string" && typeof e["traceFlags"] === "number"; + } + }, + 76: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.NoopTracerProvider = void 0; + const n = r(637); + class NoopTracerProvider { + getTracer(e, t, r) { + return new n.NoopTracer; + } + } + t.NoopTracerProvider = NoopTracerProvider; + }, + 779: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.ProxyTracer = void 0; + const n = r(637); + const a = new n.NoopTracer; + class ProxyTracer { + constructor(e, t, r, n){ + this._provider = e; + this.name = t; + this.version = r; + this.options = n; + } + startSpan(e, t, r) { + return this._getTracer().startSpan(e, t, r); + } + startActiveSpan(e, t, r, n) { + const a = this._getTracer(); + return Reflect.apply(a.startActiveSpan, a, arguments); + } + _getTracer() { + if (this._delegate) { + return this._delegate; + } + const e = this._provider.getDelegateTracer(this.name, this.version, this.options); + if (!e) { + return a; + } + this._delegate = e; + return this._delegate; + } + } + t.ProxyTracer = ProxyTracer; + }, + 498: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.ProxyTracerProvider = void 0; + const n = r(779); + const a = r(76); + const o = new a.NoopTracerProvider; + class ProxyTracerProvider { + getTracer(e, t, r) { + var a; + return (a = this.getDelegateTracer(e, t, r)) !== null && a !== void 0 ? a : new n.ProxyTracer(this, e, t, r); + } + getDelegate() { + var e; + return (e = this._delegate) !== null && e !== void 0 ? e : o; + } + setDelegate(e) { + this._delegate = e; + } + getDelegateTracer(e, t, r) { + var n; + return (n = this._delegate) === null || n === void 0 ? void 0 : n.getTracer(e, t, r); + } + } + t.ProxyTracerProvider = ProxyTracerProvider; + }, + 312: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.SamplingDecision = void 0; + var r; + (function(e) { + e[e["NOT_RECORD"] = 0] = "NOT_RECORD"; + e[e["RECORD"] = 1] = "RECORD"; + e[e["RECORD_AND_SAMPLED"] = 2] = "RECORD_AND_SAMPLED"; + })(r = t.SamplingDecision || (t.SamplingDecision = {})); + }, + 793: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.getSpanContext = t.setSpanContext = t.deleteSpan = t.setSpan = t.getActiveSpan = t.getSpan = void 0; + const n = r(23); + const a = r(374); + const o = r(912); + const i = (0, n.createContextKey)("OpenTelemetry Context Key SPAN"); + function getSpan(e) { + return e.getValue(i) || undefined; + } + t.getSpan = getSpan; + function getActiveSpan() { + return getSpan(o.ContextAPI.getInstance().active()); + } + t.getActiveSpan = getActiveSpan; + function setSpan(e, t) { + return e.setValue(i, t); + } + t.setSpan = setSpan; + function deleteSpan(e) { + return e.deleteValue(i); + } + t.deleteSpan = deleteSpan; + function setSpanContext(e, t) { + return setSpan(e, new a.NonRecordingSpan(t)); + } + t.setSpanContext = setSpanContext; + function getSpanContext(e) { + var t; + return (t = getSpan(e)) === null || t === void 0 ? void 0 : t.spanContext(); + } + t.getSpanContext = getSpanContext; + }, + 285: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.TraceStateImpl = void 0; + const n = r(240); + const a = 32; + const o = 512; + const i = ","; + const c = "="; + class TraceStateImpl { + constructor(e){ + this._internalState = new Map; + if (e) this._parse(e); + } + set(e, t) { + const r = this._clone(); + if (r._internalState.has(e)) { + r._internalState.delete(e); + } + r._internalState.set(e, t); + return r; + } + unset(e) { + const t = this._clone(); + t._internalState.delete(e); + return t; + } + get(e) { + return this._internalState.get(e); + } + serialize() { + return this._keys().reduce((e, t)=>{ + e.push(t + c + this.get(t)); + return e; + }, []).join(i); + } + _parse(e) { + if (e.length > o) return; + this._internalState = e.split(i).reverse().reduce((e, t)=>{ + const r = t.trim(); + const a = r.indexOf(c); + if (a !== -1) { + const o = r.slice(0, a); + const i = r.slice(a + 1, t.length); + if ((0, n.validateKey)(o) && (0, n.validateValue)(i)) { + e.set(o, i); + } else {} + } + return e; + }, new Map); + if (this._internalState.size > a) { + this._internalState = new Map(Array.from(this._internalState.entries()).reverse().slice(0, a)); + } + } + _keys() { + return Array.from(this._internalState.keys()).reverse(); + } + _clone() { + const e = new TraceStateImpl; + e._internalState = new Map(this._internalState); + return e; + } + } + t.TraceStateImpl = TraceStateImpl; + }, + 240: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.validateValue = t.validateKey = void 0; + const r = "[_0-9a-z-*/]"; + const n = `[a-z]${r}{0,255}`; + const a = `[a-z0-9]${r}{0,240}@[a-z]${r}{0,13}`; + const o = new RegExp(`^(?:${n}|${a})$`); + const i = /^[ -~]{0,255}[!-~]$/; + const c = /,|=/; + function validateKey(e) { + return o.test(e); + } + t.validateKey = validateKey; + function validateValue(e) { + return i.test(e) && !c.test(e); + } + t.validateValue = validateValue; + }, + 87: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.createTraceState = void 0; + const n = r(285); + function createTraceState(e) { + return new n.TraceStateImpl(e); + } + t.createTraceState = createTraceState; + }, + 546: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.INVALID_SPAN_CONTEXT = t.INVALID_TRACEID = t.INVALID_SPANID = void 0; + const n = r(731); + t.INVALID_SPANID = "0000000000000000"; + t.INVALID_TRACEID = "00000000000000000000000000000000"; + t.INVALID_SPAN_CONTEXT = { + traceId: t.INVALID_TRACEID, + spanId: t.INVALID_SPANID, + traceFlags: n.TraceFlags.NONE + }; + }, + 613: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.SpanKind = void 0; + var r; + (function(e) { + e[e["INTERNAL"] = 0] = "INTERNAL"; + e[e["SERVER"] = 1] = "SERVER"; + e[e["CLIENT"] = 2] = "CLIENT"; + e[e["PRODUCER"] = 3] = "PRODUCER"; + e[e["CONSUMER"] = 4] = "CONSUMER"; + })(r = t.SpanKind || (t.SpanKind = {})); + }, + 477: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.wrapSpanContext = t.isSpanContextValid = t.isValidSpanId = t.isValidTraceId = void 0; + const n = r(546); + const a = r(374); + const o = /^([0-9a-f]{32})$/i; + const i = /^[0-9a-f]{16}$/i; + function isValidTraceId(e) { + return o.test(e) && e !== n.INVALID_TRACEID; + } + t.isValidTraceId = isValidTraceId; + function isValidSpanId(e) { + return i.test(e) && e !== n.INVALID_SPANID; + } + t.isValidSpanId = isValidSpanId; + function isSpanContextValid(e) { + return isValidTraceId(e.traceId) && isValidSpanId(e.spanId); + } + t.isSpanContextValid = isSpanContextValid; + function wrapSpanContext(e) { + return new a.NonRecordingSpan(e); + } + t.wrapSpanContext = wrapSpanContext; + }, + 854: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.SpanStatusCode = void 0; + var r; + (function(e) { + e[e["UNSET"] = 0] = "UNSET"; + e[e["OK"] = 1] = "OK"; + e[e["ERROR"] = 2] = "ERROR"; + })(r = t.SpanStatusCode || (t.SpanStatusCode = {})); + }, + 731: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.TraceFlags = void 0; + var r; + (function(e) { + e[e["NONE"] = 0] = "NONE"; + e[e["SAMPLED"] = 1] = "SAMPLED"; + })(r = t.TraceFlags || (t.TraceFlags = {})); + }, + 652: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.VERSION = void 0; + t.VERSION = "1.6.0"; + } + }; + var t = {}; + function __nccwpck_require__(r) { + var n = t[r]; + if (n !== undefined) { + return n.exports; + } + var a = t[r] = { + exports: {} + }; + var o = true; + try { + e[r].call(a.exports, a, a.exports, __nccwpck_require__); + o = false; + } finally{ + if (o) delete t[r]; + } + return a.exports; + } + if (typeof __nccwpck_require__ !== "undefined") __nccwpck_require__.ab = ("TURBOPACK compile-time value", "/ROOT/node_modules/next/dist/compiled/@opentelemetry/api") + "/"; + var r = {}; + (()=>{ + var e = r; + Object.defineProperty(e, "__esModule", { + value: true + }); + e.trace = e.propagation = e.metrics = e.diag = e.context = e.INVALID_SPAN_CONTEXT = e.INVALID_TRACEID = e.INVALID_SPANID = e.isValidSpanId = e.isValidTraceId = e.isSpanContextValid = e.createTraceState = e.TraceFlags = e.SpanStatusCode = e.SpanKind = e.SamplingDecision = e.ProxyTracerProvider = e.ProxyTracer = e.defaultTextMapSetter = e.defaultTextMapGetter = e.ValueType = e.createNoopMeter = e.DiagLogLevel = e.DiagConsoleLogger = e.ROOT_CONTEXT = e.createContextKey = e.baggageEntryMetadataFromString = void 0; + var t = __nccwpck_require__(504); + Object.defineProperty(e, "baggageEntryMetadataFromString", { + enumerable: true, + get: function() { + return t.baggageEntryMetadataFromString; + } + }); + var n = __nccwpck_require__(23); + Object.defineProperty(e, "createContextKey", { + enumerable: true, + get: function() { + return n.createContextKey; + } + }); + Object.defineProperty(e, "ROOT_CONTEXT", { + enumerable: true, + get: function() { + return n.ROOT_CONTEXT; + } + }); + var a = __nccwpck_require__(83); + Object.defineProperty(e, "DiagConsoleLogger", { + enumerable: true, + get: function() { + return a.DiagConsoleLogger; + } + }); + var o = __nccwpck_require__(711); + Object.defineProperty(e, "DiagLogLevel", { + enumerable: true, + get: function() { + return o.DiagLogLevel; + } + }); + var i = __nccwpck_require__(440); + Object.defineProperty(e, "createNoopMeter", { + enumerable: true, + get: function() { + return i.createNoopMeter; + } + }); + var c = __nccwpck_require__(532); + Object.defineProperty(e, "ValueType", { + enumerable: true, + get: function() { + return c.ValueType; + } + }); + var s = __nccwpck_require__(92); + Object.defineProperty(e, "defaultTextMapGetter", { + enumerable: true, + get: function() { + return s.defaultTextMapGetter; + } + }); + Object.defineProperty(e, "defaultTextMapSetter", { + enumerable: true, + get: function() { + return s.defaultTextMapSetter; + } + }); + var u = __nccwpck_require__(779); + Object.defineProperty(e, "ProxyTracer", { + enumerable: true, + get: function() { + return u.ProxyTracer; + } + }); + var l = __nccwpck_require__(498); + Object.defineProperty(e, "ProxyTracerProvider", { + enumerable: true, + get: function() { + return l.ProxyTracerProvider; + } + }); + var g = __nccwpck_require__(312); + Object.defineProperty(e, "SamplingDecision", { + enumerable: true, + get: function() { + return g.SamplingDecision; + } + }); + var p = __nccwpck_require__(613); + Object.defineProperty(e, "SpanKind", { + enumerable: true, + get: function() { + return p.SpanKind; + } + }); + var d = __nccwpck_require__(854); + Object.defineProperty(e, "SpanStatusCode", { + enumerable: true, + get: function() { + return d.SpanStatusCode; + } + }); + var _ = __nccwpck_require__(731); + Object.defineProperty(e, "TraceFlags", { + enumerable: true, + get: function() { + return _.TraceFlags; + } + }); + var f = __nccwpck_require__(87); + Object.defineProperty(e, "createTraceState", { + enumerable: true, + get: function() { + return f.createTraceState; + } + }); + var b = __nccwpck_require__(477); + Object.defineProperty(e, "isSpanContextValid", { + enumerable: true, + get: function() { + return b.isSpanContextValid; + } + }); + Object.defineProperty(e, "isValidTraceId", { + enumerable: true, + get: function() { + return b.isValidTraceId; + } + }); + Object.defineProperty(e, "isValidSpanId", { + enumerable: true, + get: function() { + return b.isValidSpanId; + } + }); + var v = __nccwpck_require__(546); + Object.defineProperty(e, "INVALID_SPANID", { + enumerable: true, + get: function() { + return v.INVALID_SPANID; + } + }); + Object.defineProperty(e, "INVALID_TRACEID", { + enumerable: true, + get: function() { + return v.INVALID_TRACEID; + } + }); + Object.defineProperty(e, "INVALID_SPAN_CONTEXT", { + enumerable: true, + get: function() { + return v.INVALID_SPAN_CONTEXT; + } + }); + const O = __nccwpck_require__(778); + Object.defineProperty(e, "context", { + enumerable: true, + get: function() { + return O.context; + } + }); + const P = __nccwpck_require__(304); + Object.defineProperty(e, "diag", { + enumerable: true, + get: function() { + return P.diag; + } + }); + const N = __nccwpck_require__(120); + Object.defineProperty(e, "metrics", { + enumerable: true, + get: function() { + return N.metrics; + } + }); + const S = __nccwpck_require__(27); + Object.defineProperty(e, "propagation", { + enumerable: true, + get: function() { + return S.propagation; + } + }); + const C = __nccwpck_require__(816); + Object.defineProperty(e, "trace", { + enumerable: true, + get: function() { + return C.trace; + } + }); + e["default"] = { + context: O.context, + diag: P.diag, + metrics: N.metrics, + propagation: S.propagation, + trace: C.trace + }; + })(); + module.exports = r; +})(); +}), +"[project]/node_modules/next/dist/compiled/cookie/index.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { + +(()=>{ + "use strict"; + if (typeof __nccwpck_require__ !== "undefined") __nccwpck_require__.ab = ("TURBOPACK compile-time value", "/ROOT/node_modules/next/dist/compiled/cookie") + "/"; + var e = {}; + (()=>{ + var r = e; + /*! + * cookie + * Copyright(c) 2012-2014 Roman Shtylman + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ r.parse = parse; + r.serialize = serialize; + var i = decodeURIComponent; + var t = encodeURIComponent; + var a = /; */; + var n = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/; + function parse(e, r) { + if (typeof e !== "string") { + throw new TypeError("argument str must be a string"); + } + var t = {}; + var n = r || {}; + var o = e.split(a); + var s = n.decode || i; + for(var p = 0; p < o.length; p++){ + var f = o[p]; + var u = f.indexOf("="); + if (u < 0) { + continue; + } + var v = f.substr(0, u).trim(); + var c = f.substr(++u, f.length).trim(); + if ('"' == c[0]) { + c = c.slice(1, -1); + } + if (undefined == t[v]) { + t[v] = tryDecode(c, s); + } + } + return t; + } + function serialize(e, r, i) { + var a = i || {}; + var o = a.encode || t; + if (typeof o !== "function") { + throw new TypeError("option encode is invalid"); + } + if (!n.test(e)) { + throw new TypeError("argument name is invalid"); + } + var s = o(r); + if (s && !n.test(s)) { + throw new TypeError("argument val is invalid"); + } + var p = e + "=" + s; + if (null != a.maxAge) { + var f = a.maxAge - 0; + if (isNaN(f) || !isFinite(f)) { + throw new TypeError("option maxAge is invalid"); + } + p += "; Max-Age=" + Math.floor(f); + } + if (a.domain) { + if (!n.test(a.domain)) { + throw new TypeError("option domain is invalid"); + } + p += "; Domain=" + a.domain; + } + if (a.path) { + if (!n.test(a.path)) { + throw new TypeError("option path is invalid"); + } + p += "; Path=" + a.path; + } + if (a.expires) { + if (typeof a.expires.toUTCString !== "function") { + throw new TypeError("option expires is invalid"); + } + p += "; Expires=" + a.expires.toUTCString(); + } + if (a.httpOnly) { + p += "; HttpOnly"; + } + if (a.secure) { + p += "; Secure"; + } + if (a.sameSite) { + var u = typeof a.sameSite === "string" ? a.sameSite.toLowerCase() : a.sameSite; + switch(u){ + case true: + p += "; SameSite=Strict"; + break; + case "lax": + p += "; SameSite=Lax"; + break; + case "strict": + p += "; SameSite=Strict"; + break; + case "none": + p += "; SameSite=None"; + break; + default: + throw new TypeError("option sameSite is invalid"); + } + } + return p; + } + function tryDecode(e, r) { + try { + return r(e); + } catch (r) { + return e; + } + } + })(); + module.exports = e; +})(); +}), +"[project]/node_modules/next/dist/esm/server/route-modules/app-route/module.compiled.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { + +if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable +; +else { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + if ("TURBOPACK compile-time truthy", 1) { + if ("TURBOPACK compile-time truthy", 1) { + module.exports = __turbopack_context__.r("[externals]/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-route-turbo.runtime.dev.js, cjs)"); + } else //TURBOPACK unreachable + ; + } else //TURBOPACK unreachable + ; + } +} +}), +]; + +//# sourceMappingURL=node_modules_next_dist_1gu--yty9067e._.js.map \ No newline at end of file diff --git a/.next-dev/dev/server/chunks/node_modules_next_dist_1gu--yty9067e._.js.map b/.next-dev/dev/server/chunks/node_modules_next_dist_1gu--yty9067e._.js.map new file mode 100644 index 0000000..bebd611 --- /dev/null +++ b/.next-dev/dev/server/chunks/node_modules_next_dist_1gu--yty9067e._.js.map @@ -0,0 +1,105 @@ +{ + "version": 3, + "sources": [], + "sections": [ + {"offset": {"line": 5, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/index.ts\nvar src_exports = {};\n__export(src_exports, {\n RequestCookies: () => RequestCookies,\n ResponseCookies: () => ResponseCookies,\n parseCookie: () => parseCookie,\n parseSetCookie: () => parseSetCookie,\n stringifyCookie: () => stringifyCookie\n});\nmodule.exports = __toCommonJS(src_exports);\n\n// src/serialize.ts\nfunction stringifyCookie(c) {\n var _a;\n const attrs = [\n \"path\" in c && c.path && `Path=${c.path}`,\n \"expires\" in c && (c.expires || c.expires === 0) && `Expires=${(typeof c.expires === \"number\" ? new Date(c.expires) : c.expires).toUTCString()}`,\n \"maxAge\" in c && typeof c.maxAge === \"number\" && `Max-Age=${c.maxAge}`,\n \"domain\" in c && c.domain && `Domain=${c.domain}`,\n \"secure\" in c && c.secure && \"Secure\",\n \"httpOnly\" in c && c.httpOnly && \"HttpOnly\",\n \"sameSite\" in c && c.sameSite && `SameSite=${c.sameSite}`,\n \"partitioned\" in c && c.partitioned && \"Partitioned\",\n \"priority\" in c && c.priority && `Priority=${c.priority}`\n ].filter(Boolean);\n const stringified = `${c.name}=${encodeURIComponent((_a = c.value) != null ? _a : \"\")}`;\n return attrs.length === 0 ? stringified : `${stringified}; ${attrs.join(\"; \")}`;\n}\nfunction parseCookie(cookie) {\n const map = /* @__PURE__ */ new Map();\n for (const pair of cookie.split(/; */)) {\n if (!pair)\n continue;\n const splitAt = pair.indexOf(\"=\");\n if (splitAt === -1) {\n map.set(pair, \"true\");\n continue;\n }\n const [key, value] = [pair.slice(0, splitAt), pair.slice(splitAt + 1)];\n try {\n map.set(key, decodeURIComponent(value != null ? value : \"true\"));\n } catch {\n }\n }\n return map;\n}\nfunction parseSetCookie(setCookie) {\n if (!setCookie) {\n return void 0;\n }\n const [[name, value], ...attributes] = parseCookie(setCookie);\n const {\n domain,\n expires,\n httponly,\n maxage,\n path,\n samesite,\n secure,\n partitioned,\n priority\n } = Object.fromEntries(\n attributes.map(([key, value2]) => [\n key.toLowerCase().replace(/-/g, \"\"),\n value2\n ])\n );\n const cookie = {\n name,\n value: decodeURIComponent(value),\n domain,\n ...expires && { expires: new Date(expires) },\n ...httponly && { httpOnly: true },\n ...typeof maxage === \"string\" && { maxAge: Number(maxage) },\n path,\n ...samesite && { sameSite: parseSameSite(samesite) },\n ...secure && { secure: true },\n ...priority && { priority: parsePriority(priority) },\n ...partitioned && { partitioned: true }\n };\n return compact(cookie);\n}\nfunction compact(t) {\n const newT = {};\n for (const key in t) {\n if (t[key]) {\n newT[key] = t[key];\n }\n }\n return newT;\n}\nvar SAME_SITE = [\"strict\", \"lax\", \"none\"];\nfunction parseSameSite(string) {\n string = string.toLowerCase();\n return SAME_SITE.includes(string) ? string : void 0;\n}\nvar PRIORITY = [\"low\", \"medium\", \"high\"];\nfunction parsePriority(string) {\n string = string.toLowerCase();\n return PRIORITY.includes(string) ? string : void 0;\n}\nfunction splitCookiesString(cookiesString) {\n if (!cookiesString)\n return [];\n var cookiesStrings = [];\n var pos = 0;\n var start;\n var ch;\n var lastComma;\n var nextStart;\n var cookiesSeparatorFound;\n function skipWhitespace() {\n while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n pos += 1;\n }\n return pos < cookiesString.length;\n }\n function notSpecialChar() {\n ch = cookiesString.charAt(pos);\n return ch !== \"=\" && ch !== \";\" && ch !== \",\";\n }\n while (pos < cookiesString.length) {\n start = pos;\n cookiesSeparatorFound = false;\n while (skipWhitespace()) {\n ch = cookiesString.charAt(pos);\n if (ch === \",\") {\n lastComma = pos;\n pos += 1;\n skipWhitespace();\n nextStart = pos;\n while (pos < cookiesString.length && notSpecialChar()) {\n pos += 1;\n }\n if (pos < cookiesString.length && cookiesString.charAt(pos) === \"=\") {\n cookiesSeparatorFound = true;\n pos = nextStart;\n cookiesStrings.push(cookiesString.substring(start, lastComma));\n start = pos;\n } else {\n pos = lastComma + 1;\n }\n } else {\n pos += 1;\n }\n }\n if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n cookiesStrings.push(cookiesString.substring(start, cookiesString.length));\n }\n }\n return cookiesStrings;\n}\n\n// src/request-cookies.ts\nvar RequestCookies = class {\n constructor(requestHeaders) {\n /** @internal */\n this._parsed = /* @__PURE__ */ new Map();\n this._headers = requestHeaders;\n const header = requestHeaders.get(\"cookie\");\n if (header) {\n const parsed = parseCookie(header);\n for (const [name, value] of parsed) {\n this._parsed.set(name, { name, value });\n }\n }\n }\n [Symbol.iterator]() {\n return this._parsed[Symbol.iterator]();\n }\n /**\n * The amount of cookies received from the client\n */\n get size() {\n return this._parsed.size;\n }\n get(...args) {\n const name = typeof args[0] === \"string\" ? args[0] : args[0].name;\n return this._parsed.get(name);\n }\n getAll(...args) {\n var _a;\n const all = Array.from(this._parsed);\n if (!args.length) {\n return all.map(([_, value]) => value);\n }\n const name = typeof args[0] === \"string\" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name;\n return all.filter(([n]) => n === name).map(([_, value]) => value);\n }\n has(name) {\n return this._parsed.has(name);\n }\n set(...args) {\n const [name, value] = args.length === 1 ? [args[0].name, args[0].value] : args;\n const map = this._parsed;\n map.set(name, { name, value });\n this._headers.set(\n \"cookie\",\n Array.from(map).map(([_, value2]) => stringifyCookie(value2)).join(\"; \")\n );\n return this;\n }\n /**\n * Delete the cookies matching the passed name or names in the request.\n */\n delete(names) {\n const map = this._parsed;\n const result = !Array.isArray(names) ? map.delete(names) : names.map((name) => map.delete(name));\n this._headers.set(\n \"cookie\",\n Array.from(map).map(([_, value]) => stringifyCookie(value)).join(\"; \")\n );\n return result;\n }\n /**\n * Delete all the cookies in the cookies in the request.\n */\n clear() {\n this.delete(Array.from(this._parsed.keys()));\n return this;\n }\n /**\n * Format the cookies in the request as a string for logging\n */\n [Symbol.for(\"edge-runtime.inspect.custom\")]() {\n return `RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`;\n }\n toString() {\n return [...this._parsed.values()].map((v) => `${v.name}=${encodeURIComponent(v.value)}`).join(\"; \");\n }\n};\n\n// src/response-cookies.ts\nvar ResponseCookies = class {\n constructor(responseHeaders) {\n /** @internal */\n this._parsed = /* @__PURE__ */ new Map();\n var _a, _b, _c;\n this._headers = responseHeaders;\n const setCookie = (_c = (_b = (_a = responseHeaders.getSetCookie) == null ? void 0 : _a.call(responseHeaders)) != null ? _b : responseHeaders.get(\"set-cookie\")) != null ? _c : [];\n const cookieStrings = Array.isArray(setCookie) ? setCookie : splitCookiesString(setCookie);\n for (const cookieString of cookieStrings) {\n const parsed = parseSetCookie(cookieString);\n if (parsed)\n this._parsed.set(parsed.name, parsed);\n }\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-get CookieStore#get} without the Promise.\n */\n get(...args) {\n const key = typeof args[0] === \"string\" ? args[0] : args[0].name;\n return this._parsed.get(key);\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-getAll CookieStore#getAll} without the Promise.\n */\n getAll(...args) {\n var _a;\n const all = Array.from(this._parsed.values());\n if (!args.length) {\n return all;\n }\n const key = typeof args[0] === \"string\" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name;\n return all.filter((c) => c.name === key);\n }\n has(name) {\n return this._parsed.has(name);\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-set CookieStore#set} without the Promise.\n */\n set(...args) {\n const [name, value, cookie] = args.length === 1 ? [args[0].name, args[0].value, args[0]] : args;\n const map = this._parsed;\n map.set(name, normalizeCookie({ name, value, ...cookie }));\n replace(map, this._headers);\n return this;\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-delete CookieStore#delete} without the Promise.\n */\n delete(...args) {\n const [name, options] = typeof args[0] === \"string\" ? [args[0]] : [args[0].name, args[0]];\n return this.set({ ...options, name, value: \"\", expires: /* @__PURE__ */ new Date(0) });\n }\n [Symbol.for(\"edge-runtime.inspect.custom\")]() {\n return `ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`;\n }\n toString() {\n return [...this._parsed.values()].map(stringifyCookie).join(\"; \");\n }\n};\nfunction replace(bag, headers) {\n headers.delete(\"set-cookie\");\n for (const [, value] of bag) {\n const serialized = stringifyCookie(value);\n headers.append(\"set-cookie\", serialized);\n }\n}\nfunction normalizeCookie(cookie = { name: \"\", value: \"\" }) {\n if (typeof cookie.expires === \"number\") {\n cookie.expires = new Date(cookie.expires);\n }\n if (cookie.maxAge) {\n cookie.expires = new Date(Date.now() + cookie.maxAge * 1e3);\n }\n if (cookie.path === null || cookie.path === void 0) {\n cookie.path = \"/\";\n }\n return cookie;\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n RequestCookies,\n ResponseCookies,\n parseCookie,\n parseSetCookie,\n stringifyCookie\n});\n"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","src_exports","RequestCookies","ResponseCookies","parseCookie","parseSetCookie","stringifyCookie","module","exports","c","_a","attrs","path","expires","Date","toUTCString","maxAge","domain","secure","httpOnly","sameSite","partitioned","priority","filter","Boolean","stringified","encodeURIComponent","length","join","cookie","map","Map","pair","split","splitAt","indexOf","set","slice","decodeURIComponent","setCookie","attributes","httponly","maxage","samesite","fromEntries","value2","toLowerCase","replace","Number","parseSameSite","parsePriority","compact","t","newT","SAME_SITE","string","includes","PRIORITY","splitCookiesString","cookiesString","cookiesStrings","pos","start","ch","lastComma","nextStart","cookiesSeparatorFound","skipWhitespace","test","charAt","notSpecialChar","push","substring","requestHeaders","_parsed","_headers","header","parsed","Symbol","iterator","size","args","getAll","Array","_","n","has","delete","names","result","isArray","clear","keys","for","JSON","stringify","toString","values","v","responseHeaders","_b","_c","getSetCookie","cookieStrings","cookieString","normalizeCookie","options","bag","headers","serialized","append","now"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 375, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/build/output/log.ts"],"sourcesContent":["import { bold, green, magenta, red, yellow, white } from '../../lib/picocolors'\nimport { LRUCache } from '../../server/lib/lru-cache'\n\nexport const prefixes = {\n wait: white(bold('○')),\n error: red(bold('⨯')),\n warn: yellow(bold('⚠')),\n ready: '▲', // no color\n info: white(bold(' ')),\n event: green(bold('✓')),\n trace: magenta(bold('»')),\n} as const\n\nconst LOGGING_METHOD = {\n log: 'log',\n warn: 'warn',\n error: 'error',\n} as const\n\nfunction prefixedLog(prefixType: keyof typeof prefixes, ...message: any[]) {\n if ((message[0] === '' || message[0] === undefined) && message.length === 1) {\n message.shift()\n }\n\n const consoleMethod: keyof typeof LOGGING_METHOD =\n prefixType in LOGGING_METHOD\n ? LOGGING_METHOD[prefixType as keyof typeof LOGGING_METHOD]\n : 'log'\n\n const prefix = prefixes[prefixType]\n // If there's no message, don't print the prefix but a new line\n if (message.length === 0) {\n console[consoleMethod]('')\n } else {\n // Ensure if there's ANSI escape codes it's concatenated into one string.\n // Chrome DevTool can only handle color if it's in one string.\n if (message.length === 1 && typeof message[0] === 'string') {\n console[consoleMethod](prefix + ' ' + message[0])\n } else {\n console[consoleMethod](prefix, ...message)\n }\n }\n}\n\nexport function bootstrap(message: string) {\n console.log(message)\n}\n\nexport function wait(...message: any[]) {\n prefixedLog('wait', ...message)\n}\n\nexport function error(...message: any[]) {\n prefixedLog('error', ...message)\n}\n\nexport function warn(...message: any[]) {\n prefixedLog('warn', ...message)\n}\n\nexport function ready(...message: any[]) {\n prefixedLog('ready', ...message)\n}\n\nexport function info(...message: any[]) {\n prefixedLog('info', ...message)\n}\n\nexport function event(...message: any[]) {\n prefixedLog('event', ...message)\n}\n\nexport function trace(...message: any[]) {\n prefixedLog('trace', ...message)\n}\n\nconst warnOnceCache = new LRUCache(10_000, (value) => value.length)\nexport function warnOnce(...message: any[]) {\n const key = message.join(' ')\n if (!warnOnceCache.has(key)) {\n warnOnceCache.set(key, key)\n warn(...message)\n }\n}\n\nconst errorOnceCache = new LRUCache(10_000, (value) => value.length)\nexport function errorOnce(...message: any[]) {\n const key = message.join(' ')\n if (!errorOnceCache.has(key)) {\n errorOnceCache.set(key, key)\n error(...message)\n }\n}\n"],"names":["bold","green","magenta","red","yellow","white","LRUCache","prefixes","wait","error","warn","ready","info","event","trace","LOGGING_METHOD","log","prefixedLog","prefixType","message","undefined","length","shift","consoleMethod","prefix","console","bootstrap","warnOnceCache","value","warnOnce","key","join","has","set","errorOnceCache","errorOnce"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAASA,IAAI,EAAEC,KAAK,EAAEC,OAAO,EAAEC,GAAG,EAAEC,MAAM,EAAEC,KAAK,QAAQ,uBAAsB;AAC/E,SAASC,QAAQ,QAAQ,6BAA4B;;;AAE9C,MAAMC,WAAW;IACtBC,UAAMH,mKAAAA,MAAML,kKAAAA,EAAK;IACjBS,WAAON,iKAAAA,MAAIH,kKAAAA,EAAK;IAChBU,UAAMN,oKAAAA,MAAOJ,kKAAAA,EAAK;IAClBW,OAAO;IACPC,UAAMP,mKAAAA,MAAML,kKAAAA,EAAK;IACjBa,WAAOZ,mKAAAA,MAAMD,kKAAAA,EAAK;IAClBc,WAAOZ,qKAAAA,MAAQF,kKAAAA,EAAK;AACtB,EAAU;AAEV,MAAMe,iBAAiB;IACrBC,KAAK;IACLN,MAAM;IACND,OAAO;AACT;AAEA,SAASQ,YAAYC,UAAiC,EAAE,GAAGC,OAAc;IACvE,IAAKA,CAAAA,OAAO,CAAC,EAAE,KAAK,MAAMA,OAAO,CAAC,EAAE,KAAKC,SAAQ,KAAMD,QAAQE,MAAM,KAAK,GAAG;QAC3EF,QAAQG,KAAK;IACf;IAEA,MAAMC,gBACJL,cAAcH,iBACVA,cAAc,CAACG,WAA0C,GACzD;IAEN,MAAMM,SAASjB,QAAQ,CAACW,WAAW;IACnC,+DAA+D;IAC/D,IAAIC,QAAQE,MAAM,KAAK,GAAG;QACxBI,OAAO,CAACF,cAAc,CAAC;IACzB,OAAO;QACL,yEAAyE;QACzE,8DAA8D;QAC9D,IAAIJ,QAAQE,MAAM,KAAK,KAAK,OAAOF,OAAO,CAAC,EAAE,KAAK,UAAU;YAC1DM,OAAO,CAACF,cAAc,CAACC,SAAS,MAAML,OAAO,CAAC,EAAE;QAClD,OAAO;YACLM,OAAO,CAACF,cAAc,CAACC,WAAWL;QACpC;IACF;AACF;AAEO,SAASO,UAAUP,OAAe;IACvCM,QAAQT,GAAG,CAACG;AACd;AAEO,SAASX,KAAK,GAAGW,OAAc;IACpCF,YAAY,WAAWE;AACzB;AAEO,SAASV,MAAM,GAAGU,OAAc;IACrCF,YAAY,YAAYE;AAC1B;AAEO,SAAST,KAAK,GAAGS,OAAc;IACpCF,YAAY,WAAWE;AACzB;AAEO,SAASR,MAAM,GAAGQ,OAAc;IACrCF,YAAY,YAAYE;AAC1B;AAEO,SAASP,KAAK,GAAGO,OAAc;IACpCF,YAAY,WAAWE;AACzB;AAEO,SAASN,MAAM,GAAGM,OAAc;IACrCF,YAAY,YAAYE;AAC1B;AAEO,SAASL,MAAM,GAAGK,OAAc;IACrCF,YAAY,YAAYE;AAC1B;AAEA,MAAMQ,gBAAgB,IAAIrB,kLAAAA,CAAiB,OAAQ,CAACsB,QAAUA,MAAMP,MAAM;AACnE,SAASQ,SAAS,GAAGV,OAAc;IACxC,MAAMW,MAAMX,QAAQY,IAAI,CAAC;IACzB,IAAI,CAACJ,cAAcK,GAAG,CAACF,MAAM;QAC3BH,cAAcM,GAAG,CAACH,KAAKA;QACvBpB,QAAQS;IACV;AACF;AAEA,MAAMe,iBAAiB,IAAI5B,kLAAAA,CAAiB,OAAQ,CAACsB,QAAUA,MAAMP,MAAM;AACpE,SAASc,UAAU,GAAGhB,OAAc;IACzC,MAAMW,MAAMX,QAAQY,IAAI,CAAC;IACzB,IAAI,CAACG,eAAeF,GAAG,CAACF,MAAM;QAC5BI,eAAeD,GAAG,CAACH,KAAKA;QACxBrB,SAASU;IACX;AACF","ignoreList":[0]}}, + {"offset": {"line": 480, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/build/templates/app-route.ts"],"sourcesContent":["import {\n AppRouteRouteModule,\n type AppRouteRouteHandlerContext,\n type AppRouteRouteModuleOptions,\n} from '../../server/route-modules/app-route/module.compiled'\nimport { RouteKind } from '../../server/route-kind'\nimport { patchFetch as _patchFetch } from '../../server/lib/patch-fetch'\nimport type { IncomingMessage, ServerResponse } from 'node:http'\nimport {\n addRequestMeta,\n getRequestMeta,\n setRequestMeta,\n type RequestMeta,\n} from '../../server/request-meta'\nimport {\n getTracer,\n type Span,\n SpanKind,\n SpanStatusCode,\n} from '../../server/lib/trace/tracer'\nimport { setManifestsSingleton } from '../../server/app-render/manifests-singleton'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport { NodeNextRequest, NodeNextResponse } from '../../server/base-http/node'\nimport {\n NextRequestAdapter,\n signalFromNodeResponse,\n} from '../../server/web/spec-extension/adapters/next-request'\nimport { BaseServerSpan } from '../../server/lib/trace/constants'\nimport { getRevalidateReason } from '../../server/instrumentation/utils'\nimport { sendResponse } from '../../server/send-response'\nimport {\n fromNodeOutgoingHttpHeaders,\n toNodeOutgoingHttpHeaders,\n} from '../../server/web/utils'\nimport { getCacheControlHeader } from '../../server/lib/cache-control'\nimport { INFINITE_CACHE, NEXT_CACHE_TAGS_HEADER } from '../../lib/constants'\nimport { NoFallbackError } from '../../shared/lib/no-fallback-error.external'\nimport { isRouteCacheOwner } from '../../server/lib/route-cache-key'\nimport {\n CachedRouteKind,\n type ResponseCacheEntry,\n type ResponseGenerator,\n} from '../../server/response-cache'\n\n// These are injected by the loader afterwards. This is injected as a variable\n// instead of a replacement because this could also be `undefined` instead of\n// an empty string.\ndeclare const nextConfigOutput: AppRouteRouteModuleOptions['nextConfigOutput']\n\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\n// INJECT:nextConfigOutput\n\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: 'VAR_DEFINITION_PAGE',\n pathname: 'VAR_DEFINITION_PATHNAME',\n filename: 'VAR_DEFINITION_FILENAME',\n bundlePath: 'VAR_DEFINITION_BUNDLE_PATH',\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '',\n resolvedPagePath: 'VAR_RESOLVED_PAGE_PATH',\n nextConfigOutput,\n // The lazy require factory ensures that:\n // - In dev: devRequestTimingInternalsEnd is set before userland executes,\n // correctly attributing module load time to application-code rather than\n // framework internals.\n // - In all modes: async modules (route files with top-level await) are\n // handled correctly — require() returns a Promise for such modules, which\n // ensureUserland() awaits before the first request is handled.\n userland: () => require('VAR_USERLAND') as typeof import('VAR_USERLAND'),\n // In Turbopack dev mode, also provide a synchronous per-request getter so\n // server HMR updates are picked up without re-executing the entry chunk.\n // Using require() (synchronous) avoids adding async overhead that would be\n // incorrectly attributed to application-code time in devRequestTiming.\n ...(process.env.TURBOPACK && process.env.__NEXT_DEV_SERVER\n ? {\n getUserland: () =>\n require('VAR_USERLAND') as typeof import('VAR_USERLAND'),\n }\n : {}),\n})\n\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule\n\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage,\n })\n}\n\nexport {\n routeModule,\n workAsyncStorage,\n workUnitAsyncStorage,\n serverHooks,\n patchFetch,\n}\n\nexport async function handler(\n req: IncomingMessage,\n res: ServerResponse,\n ctx: {\n waitUntil?: (prom: Promise) => void\n requestMeta?: RequestMeta\n }\n) {\n if (ctx.requestMeta) {\n setRequestMeta(req, ctx.requestMeta)\n }\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint())\n }\n let srcPage = 'VAR_DEFINITION_PAGE'\n\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (process.env.TURBOPACK) {\n srcPage = srcPage.replace(/\\/index$/, '') || '/'\n } else if (srcPage === '/index') {\n // we always normalize /index specifically\n srcPage = '/'\n }\n const multiZoneDraftMode = process.env\n .__NEXT_MULTI_ZONE_DRAFT_MODE as any as boolean\n\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage,\n multiZoneDraftMode,\n })\n\n if (!prepareResult) {\n res.statusCode = 400\n res.end('Bad Request')\n ctx.waitUntil?.(Promise.resolve())\n return null\n }\n\n const {\n buildId,\n deploymentId,\n params,\n nextConfig,\n parsedUrl,\n isDraftMode,\n prerenderManifest,\n routerServerContext,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n resolvedPathname,\n clientReferenceManifest,\n serverActionsManifest,\n previewProps,\n } = prepareResult\n\n const normalizedSrcPage = normalizeAppPath(srcPage)\n\n // Only this route's prerenders can establish ISR or admit generated params.\n const isPrerendered =\n Boolean(prerenderManifest.routes[resolvedPathname]) &&\n (routeModule.isDev ||\n isRouteCacheOwner(\n resolvedPathname,\n routeModule.cacheOwner,\n prerenderManifest.routes[resolvedPathname]\n ))\n\n let isIsr = Boolean(\n prerenderManifest.dynamicRoutes[normalizedSrcPage] || isPrerendered\n )\n\n const render404 = async () => {\n // TODO: should route-module itself handle rendering the 404\n if (routerServerContext?.render404) {\n await routerServerContext.render404(req, res, parsedUrl, false)\n } else {\n res.end('This page could not be found')\n }\n return null\n }\n\n if (isIsr && !isDraftMode) {\n const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage]\n\n if (prerenderInfo) {\n if (prerenderInfo.fallback === false && !isPrerendered) {\n if (nextConfig.adapterPath) {\n return await render404()\n }\n throw new NoFallbackError()\n }\n }\n }\n\n let cacheKey: string | null = null\n\n if (isIsr && !routeModule.isDev && !isDraftMode) {\n cacheKey = resolvedPathname\n // ensure /index and / is normalized to one key\n cacheKey = cacheKey === '/index' ? '/' : cacheKey\n }\n\n // Before rendering (which initializes component tree modules), we have to\n // set the reference manifests to our global store so Server Action's\n // encryption util can access to them at the top level of the page module.\n if (serverActionsManifest && clientReferenceManifest) {\n setManifestsSingleton({\n page: srcPage,\n clientReferenceManifest,\n serverActionsManifest,\n })\n }\n\n const method = req.method || 'GET'\n const tracer = getTracer()\n const activeSpan = tracer.getActiveScopeSpan()\n const isWrappedByNextServer = Boolean(\n routerServerContext?.isWrappedByNextServer\n )\n const isMinimalMode = Boolean(getRequestMeta(req, 'minimalMode'))\n\n const incrementalCache =\n getRequestMeta(req, 'incrementalCache') ||\n (await routeModule.getIncrementalCache(\n req,\n nextConfig,\n previewProps,\n prerenderManifest,\n isMinimalMode\n ))\n\n incrementalCache?.resetRequestCache()\n ;(globalThis as any).__incrementalCache = incrementalCache\n\n const context: AppRouteRouteHandlerContext = {\n params,\n previewProps,\n renderOpts: {\n experimental: {\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts),\n useCacheTimeout: nextConfig.experimental.useCacheTimeout,\n durableUseCacheEntries: Boolean(\n nextConfig.experimental.durableUseCacheEntries\n ),\n },\n cacheComponents: Boolean(nextConfig.cacheComponents),\n validationLevel: nextConfig.experimental.instantInsights.validationLevel,\n isDraftMode,\n incrementalCache,\n hmrRefreshHash: getRequestMeta(req, 'hmrRefreshHash'),\n cacheLifeProfiles: nextConfig.cacheLife,\n staticPageGenerationTimeout: nextConfig.staticPageGenerationTimeout,\n waitUntil: ctx.waitUntil,\n onClose: (cb) => {\n res.on('close', cb)\n },\n onAfterTaskError: undefined,\n },\n sharedContext: {\n buildId,\n deploymentId,\n },\n }\n const nodeNextReq = new NodeNextRequest(req)\n const nodeNextRes = new NodeNextResponse(res)\n\n const nextReq = NextRequestAdapter.fromNodeNextRequest(\n nodeNextReq,\n signalFromNodeResponse(res)\n )\n\n const responseGenerator: ResponseGenerator = async ({\n previousCacheEntry,\n }) => {\n try {\n if (\n !isMinimalMode &&\n isOnDemandRevalidate &&\n revalidateOnlyGenerated &&\n !previousCacheEntry\n ) {\n res.statusCode = 404\n // on-demand revalidate always sets this header\n res.setHeader('x-nextjs-cache', 'REVALIDATED')\n res.end('This page could not be found')\n return null\n }\n\n const response =\n cacheKey === null\n ? await routeModule.handle(nextReq, context)\n : await routeModule.prerender(nextReq, context)\n\n ;(req as any).fetchMetrics = (context.renderOpts as any).fetchMetrics\n let pendingWaitUntil = context.renderOpts.pendingWaitUntil\n\n // Attempt using provided waitUntil if available\n // if it's not we fallback to sendResponse's handling\n if (pendingWaitUntil) {\n if (ctx.waitUntil) {\n ctx.waitUntil(pendingWaitUntil)\n pendingWaitUntil = undefined\n }\n }\n const cacheTags = context.renderOpts.collectedTags\n\n // If the request is for a static response, we can cache it so long\n // as it's not edge.\n if (isIsr) {\n const blob = await response.blob()\n\n // Copy the headers from the response.\n const headers = toNodeOutgoingHttpHeaders(response.headers)\n\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags\n }\n\n if (!headers['content-type'] && blob.type) {\n headers['content-type'] = blob.type\n }\n\n const revalidate =\n typeof context.renderOpts.collectedRevalidate === 'undefined' ||\n context.renderOpts.collectedRevalidate >= INFINITE_CACHE\n ? false\n : context.renderOpts.collectedRevalidate\n\n const expire =\n typeof context.renderOpts.collectedExpire === 'undefined' ||\n context.renderOpts.collectedExpire >= INFINITE_CACHE\n ? // Fall back to the global `expireTime` config when the\n // route has a numeric `revalidate` but didn't declare an\n // explicit `expire` (e.g. via `cacheLife`). This mirrors the\n // build-time fallback in `build/index.ts` so cache entries\n // and the response Cache-Control header agree on the route's\n // effective expire. Routes that opt out of revalidation\n // (`revalidate: false`) or that are dynamic (`revalidate: 0`)\n // keep `expire: undefined`.\n revalidate !== false && revalidate > 0\n ? nextConfig.expireTime\n : undefined\n : context.renderOpts.collectedExpire\n\n // Create the cache entry for the response.\n const cacheEntry: ResponseCacheEntry = {\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n status: response.status,\n body: Buffer.from(await blob.arrayBuffer()),\n headers,\n },\n cacheControl: { revalidate, expire },\n }\n\n return cacheEntry\n } else {\n // send response without caching if not ISR\n await sendResponse(nodeNextReq, nodeNextRes, response, pendingWaitUntil)\n return null\n }\n } catch (err) {\n // if this is a background revalidate we need to report\n // the request error here as it won't be bubbled\n if (previousCacheEntry?.isStale) {\n const silenceLog = false\n await routeModule.onRequestError(\n req,\n err,\n {\n routerKind: 'App Router',\n routePath: srcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration: cacheKey !== null,\n isOnDemandRevalidate,\n }),\n },\n silenceLog,\n routerServerContext\n )\n }\n throw err\n }\n }\n\n const handleResponse = async (\n currentSpan: Span | undefined,\n parentSpan: Span | undefined\n ) => {\n try {\n const cacheEntry = await routeModule.handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind: RouteKind.APP_ROUTE,\n isFallback: false,\n previewProps,\n prerenderManifest,\n isRoutePPREnabled: false,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil: ctx.waitUntil,\n isMinimalMode,\n })\n\n if (cacheEntry !== null && 'error' in cacheEntry) {\n throw cacheEntry.error\n }\n\n // we don't create a cacheEntry for ISR\n if (!isIsr) {\n return\n }\n\n if (cacheEntry?.value?.kind !== CachedRouteKind.APP_ROUTE) {\n throw new Error(\n `Invariant: app-route received invalid cache entry ${cacheEntry?.value?.kind}`\n )\n }\n\n if (!isMinimalMode) {\n res.setHeader(\n 'x-nextjs-cache',\n isOnDemandRevalidate\n ? 'REVALIDATED'\n : cacheEntry.isMiss\n ? 'MISS'\n : cacheEntry.isStale\n ? 'STALE'\n : 'HIT'\n )\n }\n\n // Draft mode should never be cached\n if (isDraftMode) {\n res.setHeader(\n 'Cache-Control',\n 'private, no-cache, no-store, max-age=0, must-revalidate'\n )\n }\n\n const headers = fromNodeOutgoingHttpHeaders(cacheEntry.value.headers)\n\n if (!(isMinimalMode && isIsr)) {\n headers.delete(NEXT_CACHE_TAGS_HEADER)\n }\n\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (\n cacheEntry.cacheControl &&\n !res.getHeader('Cache-Control') &&\n !headers.get('Cache-Control')\n ) {\n headers.set(\n 'Cache-Control',\n getCacheControlHeader(cacheEntry.cacheControl)\n )\n }\n\n await sendResponse(\n nodeNextReq,\n nodeNextRes,\n // @ts-expect-error - Argument of type 'Buffer' is not assignable to parameter of type 'BodyInit | null | undefined'.\n new Response(cacheEntry.value.body, {\n headers,\n status: cacheEntry.value.status || 200,\n })\n )\n return\n } catch (err) {\n if (!(err instanceof NoFallbackError)) {\n const silenceLog = false\n await routeModule.onRequestError(\n req,\n err,\n {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration: cacheKey !== null,\n isOnDemandRevalidate,\n }),\n },\n silenceLog,\n routerServerContext\n )\n }\n\n // rethrow so that we can handle serving error page\n\n // If this is during static generation, throw the error again.\n if (isIsr) throw err\n\n // Otherwise, send a 500 response unless the original response has\n // already committed. In that case, preserve its status code for\n // telemetry while still recording the failure and terminating a response\n // that the failed pipeline left open.\n if (res.headersSent) {\n if (currentSpan) {\n const error =\n err instanceof Error ? err : new Error('Unknown app route error')\n currentSpan.recordException(error)\n currentSpan.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n })\n currentSpan.setAttribute('error.type', error.name)\n }\n if (!res.writableEnded && !res.destroyed) {\n res.end()\n }\n } else {\n await sendResponse(\n nodeNextReq,\n nodeNextRes,\n new Response(null, { status: 500 })\n )\n }\n return\n } finally {\n ;(() => {\n if (!currentSpan) {\n return\n }\n\n let statusCode = res.statusCode\n\n currentSpan.setAttributes({\n 'http.status_code': statusCode,\n 'next.rsc': false,\n })\n\n if (statusCode && statusCode >= 500) {\n // For 5xx status codes: SHOULD be set to 'Error' span status.\n // x-ref: https://opentelemetry.io/docs/specs/semconv/http/http-spans/#status\n currentSpan.setStatus({\n code: SpanStatusCode.ERROR,\n })\n // For span status 'Error', SHOULD set 'error.type' attribute.\n currentSpan.setAttribute('error.type', statusCode.toString())\n }\n\n const rootSpanAttributes = tracer.getRootSpanAttributes()\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return\n }\n\n if (\n rootSpanAttributes.get('next.span_type') !==\n BaseServerSpan.handleRequest\n ) {\n console.warn(\n `Unexpected root span type '${rootSpanAttributes.get(\n 'next.span_type'\n )}'. Please report this Next.js issue https://github.com/vercel/next.js`\n )\n return\n }\n\n const route = rootSpanAttributes.get('next.route') || normalizedSrcPage\n const name = `${method} ${route}`\n\n currentSpan.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name,\n })\n currentSpan.updateName(name)\n\n // Propagate http.route to the parent span if one exists (e.g.\n // a platform-created HTTP span in adapter deployments).\n if (parentSpan && parentSpan !== currentSpan) {\n parentSpan.setAttribute('http.route', route)\n parentSpan.updateName(name)\n }\n })()\n }\n }\n\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (isWrappedByNextServer && activeSpan) {\n await handleResponse(activeSpan, undefined)\n } else {\n let parentSpan = tracer.getActiveScopeSpan()\n await tracer.withPropagatedContext(\n req.headers,\n () =>\n tracer.trace(\n BaseServerSpan.handleRequest,\n {\n spanName: `${method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url,\n },\n },\n (span) => handleResponse(span, parentSpan)\n ),\n undefined,\n !isWrappedByNextServer\n )\n }\n}\n"],"names":["AppRouteRouteModule","RouteKind","patchFetch","_patchFetch","addRequestMeta","getRequestMeta","setRequestMeta","getTracer","SpanKind","SpanStatusCode","setManifestsSingleton","normalizeAppPath","NodeNextRequest","NodeNextResponse","NextRequestAdapter","signalFromNodeResponse","BaseServerSpan","getRevalidateReason","sendResponse","fromNodeOutgoingHttpHeaders","toNodeOutgoingHttpHeaders","getCacheControlHeader","INFINITE_CACHE","NEXT_CACHE_TAGS_HEADER","NoFallbackError","isRouteCacheOwner","CachedRouteKind","routeModule","definition","kind","APP_ROUTE","page","pathname","filename","bundlePath","distDir","process","env","__NEXT_RELATIVE_DIST_DIR","relativeProjectDir","__NEXT_RELATIVE_PROJECT_DIR","resolvedPagePath","nextConfigOutput","userland","require","TURBOPACK","__NEXT_DEV_SERVER","getUserland","workAsyncStorage","workUnitAsyncStorage","serverHooks","handler","req","res","ctx","requestMeta","isDev","hrtime","bigint","srcPage","replace","multiZoneDraftMode","__NEXT_MULTI_ZONE_DRAFT_MODE","prepareResult","prepare","statusCode","end","waitUntil","Promise","resolve","buildId","deploymentId","params","nextConfig","parsedUrl","isDraftMode","prerenderManifest","routerServerContext","isOnDemandRevalidate","revalidateOnlyGenerated","resolvedPathname","clientReferenceManifest","serverActionsManifest","previewProps","normalizedSrcPage","isPrerendered","Boolean","routes","cacheOwner","isIsr","dynamicRoutes","render404","prerenderInfo","fallback","adapterPath","cacheKey","method","tracer","activeSpan","getActiveScopeSpan","isWrappedByNextServer","isMinimalMode","incrementalCache","getIncrementalCache","resetRequestCache","globalThis","__incrementalCache","context","renderOpts","experimental","authInterrupts","useCacheTimeout","durableUseCacheEntries","cacheComponents","validationLevel","instantInsights","hmrRefreshHash","cacheLifeProfiles","cacheLife","staticPageGenerationTimeout","onClose","cb","on","onAfterTaskError","undefined","sharedContext","nodeNextReq","nodeNextRes","nextReq","fromNodeNextRequest","responseGenerator","previousCacheEntry","setHeader","response","handle","prerender","fetchMetrics","pendingWaitUntil","cacheTags","collectedTags","blob","headers","type","revalidate","collectedRevalidate","expire","collectedExpire","expireTime","cacheEntry","value","status","body","Buffer","from","arrayBuffer","cacheControl","err","isStale","silenceLog","onRequestError","routerKind","routePath","routeType","revalidateReason","isStaticGeneration","handleResponse","currentSpan","parentSpan","routeKind","isFallback","isRoutePPREnabled","error","Error","isMiss","delete","getHeader","get","set","Response","headersSent","recordException","setStatus","code","ERROR","message","setAttribute","name","writableEnded","destroyed","setAttributes","toString","rootSpanAttributes","getRootSpanAttributes","handleRequest","console","warn","route","updateName","withPropagatedContext","trace","spanName","SERVER","attributes","url","span"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 913, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/client/components/app-router-headers.ts"],"sourcesContent":["export const RSC_HEADER = 'rsc' as const\nexport const ACTION_HEADER = 'next-action' as const\n// TODO: Instead of sending the full router state, we only need to send the\n// segment path. Saves bytes. Then we could also use this field for segment\n// prefetches, which also need to specify a particular segment.\nexport const NEXT_ROUTER_STATE_TREE_HEADER = 'next-router-state-tree' as const\nexport const NEXT_ROUTER_PREFETCH_HEADER = 'next-router-prefetch' as const\n// This contains the path to the segment being prefetched.\n// TODO: If we change next-router-state-tree to be a segment path, we can use\n// that instead. Then next-router-prefetch and next-router-segment-prefetch can\n// be merged into a single enum.\nexport const NEXT_ROUTER_SEGMENT_PREFETCH_HEADER =\n 'next-router-segment-prefetch' as const\nexport const NEXT_HMR_REFRESH_HEADER = 'next-hmr-refresh' as const\nexport const NEXT_URL = 'next-url' as const\nexport const RSC_CONTENT_TYPE_HEADER = 'text/x-component' as const\n\n// Cookie for the Instant Navigation Testing API. Sent automatically with all\n// requests while a navigation lock is held; the server uses its presence to\n// render only the shell. Not exposed in production builds by default.\nexport const NEXT_INSTANT_TEST_COOKIE =\n 'next-instant-navigation-testing' as const\n\nexport const FLIGHT_HEADERS = [\n RSC_HEADER,\n NEXT_ROUTER_STATE_TREE_HEADER,\n NEXT_ROUTER_PREFETCH_HEADER,\n NEXT_HMR_REFRESH_HEADER,\n NEXT_ROUTER_SEGMENT_PREFETCH_HEADER,\n] as const\n\nexport const NEXT_RSC_UNION_QUERY = '_rsc' as const\n\nexport const NEXT_ROUTER_STALE_TIME_HEADER = 'x-nextjs-stale-time' as const\nexport const NEXT_DID_POSTPONE_HEADER = 'x-nextjs-postponed' as const\nexport const NEXT_REWRITTEN_PATH_HEADER = 'x-nextjs-rewritten-path' as const\nexport const NEXT_REWRITTEN_QUERY_HEADER = 'x-nextjs-rewritten-query' as const\nexport const NEXT_IS_PRERENDER_HEADER = 'x-nextjs-prerender' as const\nexport const NEXT_ACTION_NOT_FOUND_HEADER = 'x-nextjs-action-not-found' as const\nexport const NEXT_REQUEST_ID_HEADER = 'x-nextjs-request-id' as const\nexport const NEXT_HTML_REQUEST_ID_HEADER = 'x-nextjs-html-request-id' as const\n\n// TODO: Should this include nextjs in the name, like the others?\nexport const NEXT_ACTION_REVALIDATED_HEADER = 'x-action-revalidated' as const\n"],"names":["RSC_HEADER","ACTION_HEADER","NEXT_ROUTER_STATE_TREE_HEADER","NEXT_ROUTER_PREFETCH_HEADER","NEXT_ROUTER_SEGMENT_PREFETCH_HEADER","NEXT_HMR_REFRESH_HEADER","NEXT_URL","RSC_CONTENT_TYPE_HEADER","NEXT_INSTANT_TEST_COOKIE","FLIGHT_HEADERS","NEXT_RSC_UNION_QUERY","NEXT_ROUTER_STALE_TIME_HEADER","NEXT_DID_POSTPONE_HEADER","NEXT_REWRITTEN_PATH_HEADER","NEXT_REWRITTEN_QUERY_HEADER","NEXT_IS_PRERENDER_HEADER","NEXT_ACTION_NOT_FOUND_HEADER","NEXT_REQUEST_ID_HEADER","NEXT_HTML_REQUEST_ID_HEADER","NEXT_ACTION_REVALIDATED_HEADER"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,MAAMA,aAAa,MAAc;AACjC,MAAMC,gBAAgB,cAAsB;AAI5C,MAAMC,gCAAgC,yBAAiC;AACvE,MAAMC,8BAA8B,uBAA+B;AAKnE,MAAMC,sCACX,+BAAuC;AAClC,MAAMC,0BAA0B,mBAA2B;AAC3D,MAAMC,WAAW,WAAmB;AACpC,MAAMC,0BAA0B,mBAA2B;AAK3D,MAAMC,2BACX,kCAA0C;AAErC,MAAMC,iBAAiB;IAC5BT;IACAE;IACAC;IACAE;IACAD;CACD,CAAS;AAEH,MAAMM,uBAAuB,OAAe;AAE5C,MAAMC,gCAAgC,sBAA8B;AACpE,MAAMC,2BAA2B,qBAA6B;AAC9D,MAAMC,6BAA6B,0BAAkC;AACrE,MAAMC,8BAA8B,2BAAmC;AACvE,MAAMC,2BAA2B,qBAA6B;AAC9D,MAAMC,+BAA+B,4BAAoC;AACzE,MAAMC,yBAAyB,sBAA8B;AAC7D,MAAMC,8BAA8B,2BAAmC;AAGvE,MAAMC,iCAAiC,uBAA+B","ignoreList":[0]}}, + {"offset": {"line": 985, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/client/components/hooks-server-context.ts"],"sourcesContent":["const DYNAMIC_ERROR_CODE = 'DYNAMIC_SERVER_USAGE'\n\nexport class DynamicServerError extends Error {\n digest: typeof DYNAMIC_ERROR_CODE = DYNAMIC_ERROR_CODE\n\n constructor(public readonly description: string) {\n super(`Dynamic server usage: ${description}`)\n }\n}\n\nexport function isDynamicServerError(err: unknown): err is DynamicServerError {\n if (\n typeof err !== 'object' ||\n err === null ||\n !('digest' in err) ||\n typeof err.digest !== 'string'\n ) {\n return false\n }\n\n return err.digest === DYNAMIC_ERROR_CODE\n}\n"],"names":["DYNAMIC_ERROR_CODE","DynamicServerError","Error","constructor","description","digest","isDynamicServerError","err"],"mappings":";;;;;;AAAA,MAAMA,qBAAqB;AAEpB,MAAMC,2BAA2BC;IAGtCC,YAA4BC,WAAmB,CAAE;QAC/C,KAAK,CAAC,CAAC,sBAAsB,EAAEA,aAAa,GAAA,IAAA,CADlBA,WAAAA,GAAAA,aAAAA,IAAAA,CAF5BC,MAAAA,GAAoCL;IAIpC;AACF;AAEO,SAASM,qBAAqBC,GAAY;IAC/C,IACE,OAAOA,QAAQ,YACfA,QAAQ,QACR,CAAE,CAAA,YAAYA,GAAE,KAChB,OAAOA,IAAIF,MAAM,KAAK,UACtB;QACA,OAAO;IACT;IAEA,OAAOE,IAAIF,MAAM,KAAKL;AACxB","ignoreList":[0]}}, + {"offset": {"line": 1007, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/client/components/redirect-status-code.ts"],"sourcesContent":["export enum RedirectStatusCode {\n SeeOther = 303,\n TemporaryRedirect = 307,\n PermanentRedirect = 308,\n}\n"],"names":["RedirectStatusCode"],"mappings":";;;;AAAO,IAAKA,qBAAAA,WAAAA,GAAAA,SAAAA,kBAAAA;;;;WAAAA;MAIX","ignoreList":[0]}}, + {"offset": {"line": 1021, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/client/components/static-generation-bailout.ts"],"sourcesContent":["const NEXT_STATIC_GEN_BAILOUT = 'NEXT_STATIC_GEN_BAILOUT'\n\nexport class StaticGenBailoutError extends Error {\n public readonly code = NEXT_STATIC_GEN_BAILOUT\n}\n\nexport function isStaticGenBailoutError(\n error: unknown\n): error is StaticGenBailoutError {\n if (typeof error !== 'object' || error === null || !('code' in error)) {\n return false\n }\n\n return error.code === NEXT_STATIC_GEN_BAILOUT\n}\n"],"names":["NEXT_STATIC_GEN_BAILOUT","StaticGenBailoutError","Error","code","isStaticGenBailoutError","error"],"mappings":";;;;;;AAAA,MAAMA,0BAA0B;AAEzB,MAAMC,8BAA8BC;;QAApC,KAAA,IAAA,OAAA,IAAA,CACWC,IAAAA,GAAOH;;AACzB;AAEO,SAASI,wBACdC,KAAc;IAEd,IAAI,OAAOA,UAAU,YAAYA,UAAU,QAAQ,CAAE,CAAA,UAAUA,KAAI,GAAI;QACrE,OAAO;IACT;IAEA,OAAOA,MAAMF,IAAI,KAAKH;AACxB","ignoreList":[0]}}, + {"offset": {"line": 1043, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/lib/batcher.ts"],"sourcesContent":["import type { SchedulerFn } from './scheduler'\n\nimport { createPromiseWithResolvers } from '../shared/lib/promise-with-resolvers'\n\ntype CacheKeyFn = (\n key: K\n) => PromiseLike | C\n\ntype BatcherOptions = {\n cacheKeyFn?: CacheKeyFn\n schedulerFn?: SchedulerFn\n}\n\ntype WorkFnContext = {\n resolve: (value: V | PromiseLike) => void\n key: K\n}\n\ntype WorkFn = (context: WorkFnContext) => Promise\n\n/**\n * A wrapper for a function that will only allow one call to the function to\n * execute at a time.\n */\nexport class Batcher {\n private readonly pending = new Map>()\n\n protected constructor(\n private readonly cacheKeyFn?: CacheKeyFn,\n /**\n * A function that will be called to schedule the wrapped function to be\n * executed. This defaults to a function that will execute the function\n * immediately.\n */\n private readonly schedulerFn: SchedulerFn = (fn) => fn()\n ) {}\n\n /**\n * Creates a new instance of PendingWrapper. If the key extends a string or\n * number, the key will be used as the cache key. If the key is an object, a\n * cache key function must be provided.\n */\n public static create(\n options?: BatcherOptions\n ): Batcher\n public static create(\n options: BatcherOptions &\n Required, 'cacheKeyFn'>>\n ): Batcher\n public static create(\n options?: BatcherOptions\n ): Batcher {\n return new Batcher(options?.cacheKeyFn, options?.schedulerFn)\n }\n\n /**\n * Wraps a function in a promise that will be resolved or rejected only once\n * for a given key. This will allow multiple calls to the function to be\n * made, but only one will be executed at a time. The result of the first\n * call will be returned to all callers.\n *\n * @param key the key to use for the cache\n * @param fn the function to wrap\n * @returns a promise that resolves to the result of the function\n */\n public async batch(key: K, fn: WorkFn): Promise {\n const cacheKey = (this.cacheKeyFn ? await this.cacheKeyFn(key) : key) as C\n if (cacheKey === null) {\n return fn({ resolve: (value) => Promise.resolve(value), key })\n }\n\n const pending = this.pending.get(cacheKey)\n if (pending) return pending\n\n const { promise, resolve, reject } = createPromiseWithResolvers()\n this.pending.set(cacheKey, promise)\n\n this.schedulerFn(async () => {\n try {\n const result = await fn({ resolve, key })\n\n // Resolving a promise multiple times is a no-op, so we can safely\n // resolve all pending promises with the same result.\n resolve(result)\n } catch (err) {\n reject(err)\n } finally {\n this.pending.delete(cacheKey)\n }\n })\n\n return promise\n }\n}\n"],"names":["createPromiseWithResolvers","Batcher","cacheKeyFn","schedulerFn","fn","pending","Map","create","options","batch","key","cacheKey","resolve","value","Promise","get","promise","reject","set","result","err","delete"],"mappings":";;;;AAEA,SAASA,0BAA0B,QAAQ,uCAAsC;;AAsB1E,MAAMC;IAGX,YACmBC,UAA6B,EAC9C;;;;KAIC,GACgBC,cAAiC,CAACC,KAAOA,IAAI,CAC9D;aAPiBF,UAAAA,GAAAA;aAMAC,WAAAA,GAAAA;aATFE,OAAAA,GAAU,IAAIC;IAU5B;IAcH,OAAcC,OACZC,OAA8B,EACZ;QAClB,OAAO,IAAIP,QAAiBO,WAAAA,OAAAA,KAAAA,IAAAA,QAASN,UAAU,EAAEM,WAAAA,OAAAA,KAAAA,IAAAA,QAASL,WAAW;IACvE;IAEA;;;;;;;;;GASC,GACD,MAAaM,MAAMC,GAAM,EAAEN,EAAgB,EAAc;QACvD,MAAMO,WAAY,IAAI,CAACT,UAAU,GAAG,MAAM,IAAI,CAACA,UAAU,CAACQ,OAAOA;QACjE,IAAIC,aAAa,MAAM;YACrB,OAAOP,GAAG;gBAAEQ,SAAS,CAACC,QAAUC,QAAQF,OAAO,CAACC;gBAAQH;YAAI;QAC9D;QAEA,MAAML,UAAU,IAAI,CAACA,OAAO,CAACU,GAAG,CAACJ;QACjC,IAAIN,SAAS,OAAOA;QAEpB,MAAM,EAAEW,OAAO,EAAEJ,OAAO,EAAEK,MAAM,EAAE,OAAGjB,oNAAAA;QACrC,IAAI,CAACK,OAAO,CAACa,GAAG,CAACP,UAAUK;QAE3B,IAAI,CAACb,WAAW,CAAC;YACf,IAAI;gBACF,MAAMgB,SAAS,MAAMf,GAAG;oBAAEQ;oBAASF;gBAAI;gBAEvC,kEAAkE;gBAClE,qDAAqD;gBACrDE,QAAQO;YACV,EAAE,OAAOC,KAAK;gBACZH,OAAOG;YACT,SAAU;gBACR,IAAI,CAACf,OAAO,CAACgB,MAAM,CAACV;YACtB;QACF;QAEA,OAAOK;IACT;AACF","ignoreList":[0]}}, + {"offset": {"line": 1105, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/lib/constants.ts"],"sourcesContent":["import type { ServerRuntime } from '../types'\n\nexport const TEXT_PLAIN_CONTENT_TYPE_HEADER = 'text/plain'\nexport const HTML_CONTENT_TYPE_HEADER = 'text/html; charset=utf-8'\nexport const JSON_CONTENT_TYPE_HEADER = 'application/json; charset=utf-8'\nexport const NEXT_QUERY_PARAM_PREFIX = 'nxtP'\nexport const NEXT_INTERCEPTION_MARKER_PREFIX = 'nxtI'\n\nexport const MATCHED_PATH_HEADER = 'x-matched-path'\nexport const PRERENDER_REVALIDATE_HEADER = 'x-prerender-revalidate'\nexport const PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER =\n 'x-prerender-revalidate-if-generated'\n\nexport const RSC_SEGMENTS_DIR_SUFFIX = '.segments'\nexport const RSC_SEGMENT_SUFFIX = '.segment.rsc'\nexport const RSC_SUFFIX = '.rsc'\nexport const ACTION_SUFFIX = '.action'\nexport const NEXT_DATA_SUFFIX = '.json'\nexport const NEXT_META_SUFFIX = '.meta'\nexport const NEXT_BODY_SUFFIX = '.body'\n\nexport const NEXT_NAV_DEPLOYMENT_ID_HEADER = 'x-nextjs-deployment-id'\n\nexport const NEXT_CACHE_TAGS_HEADER = 'x-next-cache-tags'\nexport const NEXT_CACHE_REVALIDATED_TAGS_HEADER = 'x-next-revalidated-tags'\nexport const NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER =\n 'x-next-revalidate-tag-token'\n\nexport const NEXT_RESUME_HEADER = 'next-resume'\nexport const NEXT_RESUME_STATE_LENGTH_HEADER = 'x-next-resume-state-length'\n\n// if these change make sure we update the related\n// documentation as well\nexport const NEXT_CACHE_TAG_MAX_ITEMS = 128\nexport const NEXT_CACHE_TAG_MAX_LENGTH = 256\nexport const NEXT_CACHE_SOFT_TAG_MAX_LENGTH = 1024\nexport const NEXT_CACHE_IMPLICIT_TAG_ID = '_N_T_'\nexport const NEXT_CACHE_ROOT_PARAM_TAG_ID = '_N_RP_'\n\n// in seconds\nexport const CACHE_ONE_YEAR_SECONDS = 31536000\n\n// in seconds, represents revalidate=false. I.e. never revaliate.\n// We use this value since it can be represented as a V8 SMI for optimal performance.\n// It can also be serialized as JSON if it ever leaks accidentally as an actual value.\nexport const INFINITE_CACHE = 0xfffffffe\n\n// Patterns to detect middleware files\nexport const MIDDLEWARE_FILENAME = 'middleware'\nexport const MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}`\n\n// Patterns to detect proxy files (replacement for middleware)\nexport const PROXY_FILENAME = 'proxy'\nexport const PROXY_LOCATION_REGEXP = `(?:src/)?${PROXY_FILENAME}`\n\n// Pattern to detect instrumentation hooks file\nexport const INSTRUMENTATION_HOOK_FILENAME = 'instrumentation'\n\n// Because on Windows absolute paths in the generated code can break because of numbers, eg 1 in the path,\n// we have to use a private alias\nexport const PAGES_DIR_ALIAS = 'private-next-pages'\nexport const DOT_NEXT_ALIAS = 'private-dot-next'\nexport const ROOT_DIR_ALIAS = 'private-next-root-dir'\nexport const APP_DIR_ALIAS = 'private-next-app-dir'\nexport const RSC_MOD_REF_PROXY_ALIAS = 'private-next-rsc-mod-ref-proxy'\nexport const RSC_ACTION_VALIDATE_ALIAS = 'private-next-rsc-action-validate'\nexport const RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-server-reference'\nexport const RSC_CACHE_WRAPPER_ALIAS = 'private-next-rsc-cache-wrapper'\nexport const RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS =\n 'private-next-rsc-track-dynamic-import'\nexport const RSC_ACTION_ENCRYPTION_ALIAS = 'private-next-rsc-action-encryption'\nexport const RSC_ACTION_CLIENT_WRAPPER_ALIAS =\n 'private-next-rsc-action-client-wrapper'\n\nexport const PUBLIC_DIR_MIDDLEWARE_CONFLICT = `You can not have a '_next' folder inside of your public folder. This conflicts with the internal '/_next' route. https://nextjs.org/docs/messages/public-next-folder-conflict`\n\nexport const SSG_GET_INITIAL_PROPS_CONFLICT = `You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps`\n\nexport const SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.`\n\nexport const SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps`\n\nexport const STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR = `can not have getInitialProps/getServerSideProps, https://nextjs.org/docs/messages/404-get-initial-props`\n\nexport const SERVER_PROPS_EXPORT_ERROR = `pages with \\`getServerSideProps\\` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export`\n\nexport const GSP_NO_RETURNED_VALUE =\n 'Your `getStaticProps` function did not return an object. Did you forget to add a `return`?'\nexport const GSSP_NO_RETURNED_VALUE =\n 'Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?'\n\nexport const UNSTABLE_REVALIDATE_RENAME_ERROR =\n 'The `unstable_revalidate` property is available for general use.\\n' +\n 'Please use `revalidate` instead.'\n\nexport const GSSP_COMPONENT_MEMBER_ERROR = `can not be attached to a page's component and must be exported from the page. See more info here: https://nextjs.org/docs/messages/gssp-component-member`\n\nexport const NON_STANDARD_NODE_ENV = `You are using a non-standard \"NODE_ENV\" value in your environment. This creates inconsistencies in the project and is strongly advised against. Read more: https://nextjs.org/docs/messages/non-standard-node-env`\n\nexport const SSG_FALLBACK_EXPORT_ERROR = `Pages with \\`fallback\\` enabled in \\`getStaticPaths\\` can not be exported. See more info here: https://nextjs.org/docs/messages/ssg-fallback-true-export`\n\nexport const ESLINT_DEFAULT_DIRS = ['app', 'pages', 'components', 'lib', 'src']\n\nexport const SERVER_RUNTIME: Record = {\n edge: 'edge',\n experimentalEdge: 'experimental-edge',\n nodejs: 'nodejs',\n}\n\nexport const WEB_SOCKET_MAX_RECONNECTIONS = 12\n\n/**\n * The names of the webpack layers. These layers are the primitives for the\n * webpack chunks.\n */\nconst WEBPACK_LAYERS_NAMES = {\n /**\n * The layer for the shared code between the client and server bundles.\n */\n shared: 'shared',\n /**\n * The layer for server-only runtime and picking up `react-server` export conditions.\n * Including app router RSC pages and app router custom routes and metadata routes.\n */\n reactServerComponents: 'rsc',\n /**\n * Server Side Rendering layer for app (ssr).\n */\n serverSideRendering: 'ssr',\n /**\n * The browser client bundle layer for actions.\n */\n actionBrowser: 'action-browser',\n /**\n * The Node.js bundle layer for the API routes.\n */\n apiNode: 'api-node',\n /**\n * The Edge Lite bundle layer for the API routes.\n */\n apiEdge: 'api-edge',\n /**\n * The layer for the middleware code.\n */\n middleware: 'middleware',\n /**\n * The layer for the instrumentation hooks.\n */\n instrument: 'instrument',\n /**\n * The layer for assets on the edge.\n */\n edgeAsset: 'edge-asset',\n /**\n * The browser client bundle layer for App directory.\n */\n appPagesBrowser: 'app-pages-browser',\n /**\n * The browser client bundle layer for Pages directory.\n */\n pagesDirBrowser: 'pages-dir-browser',\n /**\n * The Edge Lite bundle layer for Pages directory.\n */\n pagesDirEdge: 'pages-dir-edge',\n /**\n * The Node.js bundle layer for Pages directory.\n */\n pagesDirNode: 'pages-dir-node',\n} as const\n\nexport type WebpackLayerName =\n (typeof WEBPACK_LAYERS_NAMES)[keyof typeof WEBPACK_LAYERS_NAMES]\n\nconst WEBPACK_LAYERS = {\n ...WEBPACK_LAYERS_NAMES,\n GROUP: {\n builtinReact: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n ],\n serverOnly: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware,\n ],\n neutralTarget: [\n // pages api\n WEBPACK_LAYERS_NAMES.apiNode,\n WEBPACK_LAYERS_NAMES.apiEdge,\n ],\n clientOnly: [\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n ],\n bundled: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.shared,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware,\n ],\n appPages: [\n // app router pages and layouts\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n ],\n },\n}\n\nconst WEBPACK_RESOURCE_QUERIES = {\n edgeSSREntry: '__next_edge_ssr_entry__',\n metadata: '__next_metadata__',\n metadataRoute: '__next_metadata_route__',\n metadataImageMeta: '__next_metadata_image_meta__',\n}\n\nexport { WEBPACK_LAYERS, WEBPACK_RESOURCE_QUERIES }\n"],"names":["TEXT_PLAIN_CONTENT_TYPE_HEADER","HTML_CONTENT_TYPE_HEADER","JSON_CONTENT_TYPE_HEADER","NEXT_QUERY_PARAM_PREFIX","NEXT_INTERCEPTION_MARKER_PREFIX","MATCHED_PATH_HEADER","PRERENDER_REVALIDATE_HEADER","PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER","RSC_SEGMENTS_DIR_SUFFIX","RSC_SEGMENT_SUFFIX","RSC_SUFFIX","ACTION_SUFFIX","NEXT_DATA_SUFFIX","NEXT_META_SUFFIX","NEXT_BODY_SUFFIX","NEXT_NAV_DEPLOYMENT_ID_HEADER","NEXT_CACHE_TAGS_HEADER","NEXT_CACHE_REVALIDATED_TAGS_HEADER","NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER","NEXT_RESUME_HEADER","NEXT_RESUME_STATE_LENGTH_HEADER","NEXT_CACHE_TAG_MAX_ITEMS","NEXT_CACHE_TAG_MAX_LENGTH","NEXT_CACHE_SOFT_TAG_MAX_LENGTH","NEXT_CACHE_IMPLICIT_TAG_ID","NEXT_CACHE_ROOT_PARAM_TAG_ID","CACHE_ONE_YEAR_SECONDS","INFINITE_CACHE","MIDDLEWARE_FILENAME","MIDDLEWARE_LOCATION_REGEXP","PROXY_FILENAME","PROXY_LOCATION_REGEXP","INSTRUMENTATION_HOOK_FILENAME","PAGES_DIR_ALIAS","DOT_NEXT_ALIAS","ROOT_DIR_ALIAS","APP_DIR_ALIAS","RSC_MOD_REF_PROXY_ALIAS","RSC_ACTION_VALIDATE_ALIAS","RSC_ACTION_PROXY_ALIAS","RSC_CACHE_WRAPPER_ALIAS","RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS","RSC_ACTION_ENCRYPTION_ALIAS","RSC_ACTION_CLIENT_WRAPPER_ALIAS","PUBLIC_DIR_MIDDLEWARE_CONFLICT","SSG_GET_INITIAL_PROPS_CONFLICT","SERVER_PROPS_GET_INIT_PROPS_CONFLICT","SERVER_PROPS_SSG_CONFLICT","STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR","SERVER_PROPS_EXPORT_ERROR","GSP_NO_RETURNED_VALUE","GSSP_NO_RETURNED_VALUE","UNSTABLE_REVALIDATE_RENAME_ERROR","GSSP_COMPONENT_MEMBER_ERROR","NON_STANDARD_NODE_ENV","SSG_FALLBACK_EXPORT_ERROR","ESLINT_DEFAULT_DIRS","SERVER_RUNTIME","edge","experimentalEdge","nodejs","WEB_SOCKET_MAX_RECONNECTIONS","WEBPACK_LAYERS_NAMES","shared","reactServerComponents","serverSideRendering","actionBrowser","apiNode","apiEdge","middleware","instrument","edgeAsset","appPagesBrowser","pagesDirBrowser","pagesDirEdge","pagesDirNode","WEBPACK_LAYERS","GROUP","builtinReact","serverOnly","neutralTarget","clientOnly","bundled","appPages","WEBPACK_RESOURCE_QUERIES","edgeSSREntry","metadata","metadataRoute","metadataImageMeta"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 1394, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/lib/framework/boundary-constants.tsx"],"sourcesContent":["export const METADATA_BOUNDARY_NAME = '__next_metadata_boundary__'\nexport const VIEWPORT_BOUNDARY_NAME = '__next_viewport_boundary__'\nexport const OUTLET_BOUNDARY_NAME = '__next_outlet_boundary__'\nexport const ROOT_LAYOUT_BOUNDARY_NAME = '__next_root_layout_boundary__'\n"],"names":["METADATA_BOUNDARY_NAME","VIEWPORT_BOUNDARY_NAME","OUTLET_BOUNDARY_NAME","ROOT_LAYOUT_BOUNDARY_NAME"],"mappings":";;;;;;;;;;AAAO,MAAMA,yBAAyB,6BAA4B;AAC3D,MAAMC,yBAAyB,6BAA4B;AAC3D,MAAMC,uBAAuB,2BAA0B;AACvD,MAAMC,4BAA4B,gCAA+B","ignoreList":[0]}}, + {"offset": {"line": 1412, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/lib/picocolors.ts"],"sourcesContent":["// ISC License\n\n// Copyright (c) 2021 Alexey Raspopov, Kostiantyn Denysov, Anton Verinov\n\n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n//\n// https://github.com/alexeyraspopov/picocolors/blob/b6261487e7b81aaab2440e397a356732cad9e342/picocolors.js#L1\n\nconst { env, stdout } = globalThis?.process ?? {}\n\nconst enabled =\n env &&\n !env.NO_COLOR &&\n (env.FORCE_COLOR || (stdout?.isTTY && !env.CI && env.TERM !== 'dumb'))\n\nexport const isColorSupported = Boolean(enabled)\n\n// Whether stdout ends up on a terminal: directly, or through the CLI, which\n// pipes a child's output while the upgrade menu is open.\nexport const stdoutIsTerminal =\n Boolean(stdout?.isTTY) || env.NEXT_PRIVATE_PROMPT_OUTPUT === '1'\n\nconst replaceClose = (\n str: string,\n close: string,\n replace: string,\n index: number\n): string => {\n const start = str.substring(0, index) + replace\n const end = str.substring(index + close.length)\n const nextIndex = end.indexOf(close)\n return ~nextIndex\n ? start + replaceClose(end, close, replace, nextIndex)\n : start + end\n}\n\nconst formatter = (open: string, close: string, replace = open) => {\n if (!enabled) return String\n return (input: string) => {\n const string = '' + input\n const index = string.indexOf(close, open.length)\n return ~index\n ? open + replaceClose(string, close, replace, index) + close\n : open + string + close\n }\n}\n\nexport const reset = enabled ? (s: string) => `\\x1b[0m${s}\\x1b[0m` : String\nexport const bold = formatter('\\x1b[1m', '\\x1b[22m', '\\x1b[22m\\x1b[1m')\nexport const dim = formatter('\\x1b[2m', '\\x1b[22m', '\\x1b[22m\\x1b[2m')\nexport const italic = formatter('\\x1b[3m', '\\x1b[23m')\nexport const underline = formatter('\\x1b[4m', '\\x1b[24m')\nexport const inverse = formatter('\\x1b[7m', '\\x1b[27m')\nexport const hidden = formatter('\\x1b[8m', '\\x1b[28m')\nexport const strikethrough = formatter('\\x1b[9m', '\\x1b[29m')\nexport const black = formatter('\\x1b[30m', '\\x1b[39m')\nexport const red = formatter('\\x1b[31m', '\\x1b[39m')\nexport const green = formatter('\\x1b[32m', '\\x1b[39m')\nexport const yellow = formatter('\\x1b[33m', '\\x1b[39m')\nexport const blue = formatter('\\x1b[34m', '\\x1b[39m')\nexport const magenta = formatter('\\x1b[35m', '\\x1b[39m')\nexport const purple = formatter('\\x1b[38;2;173;127;168m', '\\x1b[39m')\nexport const cyan = formatter('\\x1b[36m', '\\x1b[39m')\nexport const white = formatter('\\x1b[37m', '\\x1b[39m')\nexport const gray = formatter('\\x1b[90m', '\\x1b[39m')\nexport const bgBlack = formatter('\\x1b[40m', '\\x1b[49m')\nexport const bgRed = formatter('\\x1b[41m', '\\x1b[49m')\nexport const bgGreen = formatter('\\x1b[42m', '\\x1b[49m')\nexport const bgYellow = formatter('\\x1b[43m', '\\x1b[49m')\nexport const bgBlue = formatter('\\x1b[44m', '\\x1b[49m')\nexport const bgMagenta = formatter('\\x1b[45m', '\\x1b[49m')\nexport const bgCyan = formatter('\\x1b[46m', '\\x1b[49m')\nexport const bgWhite = formatter('\\x1b[47m', '\\x1b[49m')\n"],"names":["globalThis","env","stdout","process","enabled","NO_COLOR","FORCE_COLOR","isTTY","CI","TERM","isColorSupported","Boolean","stdoutIsTerminal","NEXT_PRIVATE_PROMPT_OUTPUT","replaceClose","str","close","replace","index","start","substring","end","length","nextIndex","indexOf","formatter","open","String","input","string","reset","s","bold","dim","italic","underline","inverse","hidden","strikethrough","black","red","green","yellow","blue","magenta","purple","cyan","white","gray","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 1533, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/lib/scheduler.ts"],"sourcesContent":["export type ScheduledFn = () => T | PromiseLike\nexport type SchedulerFn = (cb: ScheduledFn) => void\n\n/**\n * Schedules a function to be called on the next tick after the other promises\n * have been resolved.\n *\n * @param cb the function to schedule\n */\nexport const scheduleOnNextTick = (cb: ScheduledFn) => {\n // We use Promise.resolve().then() here so that the operation is scheduled at\n // the end of the promise job queue, we then add it to the next process tick\n // to ensure it's evaluated afterwards.\n //\n // This was inspired by the implementation of the DataLoader interface: https://github.com/graphql/dataloader/blob/d336bd15282664e0be4b4a657cb796f09bafbc6b/src/index.js#L213-L255\n //\n Promise.resolve().then(() => {\n if (process.env.NEXT_RUNTIME === 'edge') {\n setTimeout(cb, 0)\n } else {\n process.nextTick(cb)\n }\n })\n}\n\n/**\n * Schedules a function to be called using `setImmediate` or `setTimeout` if\n * `setImmediate` is not available (like in the Edge runtime).\n *\n * @param cb the function to schedule\n */\nexport const scheduleImmediate = (cb: ScheduledFn): void => {\n if (process.env.NEXT_RUNTIME === 'edge') {\n setTimeout(cb, 0)\n } else {\n setImmediate(cb)\n }\n}\n\n/**\n * returns a promise than resolves in a future task. There is no guarantee that the task it resolves in\n * will be the next task but if you await it you can at least be sure that the current task is over and\n * most usefully that the entire microtask queue of the current task has been emptied.\n */\nexport function atLeastOneTask() {\n return new Promise((resolve) => scheduleImmediate(resolve))\n}\n\n/**\n * This utility function is extracted to make it easier to find places where we are doing\n * specific timing tricks to try to schedule work after React has rendered. This is especially\n * important at the moment because Next.js uses the edge builds of React which use setTimeout to\n * schedule work when you might expect that something like setImmediate would do the trick.\n *\n * Long term we should switch to the node versions of React rendering when possible and then\n * update this to use setImmediate rather than setTimeout\n */\nexport function waitAtLeastOneReactRenderTask(): Promise {\n if (process.env.NEXT_RUNTIME === 'edge') {\n return new Promise((r) => setTimeout(r, 0))\n } else {\n return new Promise((r) => setImmediate(r))\n }\n}\n"],"names":["scheduleOnNextTick","cb","Promise","resolve","then","process","env","NEXT_RUNTIME","setTimeout","nextTick","scheduleImmediate","setImmediate","atLeastOneTask","waitAtLeastOneReactRenderTask","r"],"mappings":"AAGA;;;;;CAKC,GACD;;;;;;;;;;AAAO,MAAMA,qBAAqB,CAACC;IACjC,6EAA6E;IAC7E,4EAA4E;IAC5E,uCAAuC;IACvC,EAAE;IACF,kLAAkL;IAClL,EAAE;IACFC,QAAQC,OAAO,GAAGC,IAAI,CAAC;QACrB,IAAIC,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;aAElC;YACLF,QAAQI,QAAQ,CAACR;QACnB;IACF;AACF,EAAC;AAQM,MAAMS,oBAAoB,CAACT;IAChC,IAAII,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;SAElC;QACLI,aAAaV;IACf;AACF,EAAC;AAOM,SAASW;IACd,OAAO,IAAIV,QAAc,CAACC,UAAYO,kBAAkBP;AAC1D;AAWO,SAASU;IACd,IAAIR,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;SAElC;QACL,OAAO,IAAIL,QAAQ,CAACY,IAAMH,aAAaG;IACzC;AACF","ignoreList":[0]}}, + {"offset": {"line": 1584, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/api-utils/get-cookie-parser.ts"],"sourcesContent":["import type { NextApiRequestCookies } from '.'\n\n/**\n * Parse cookies from the `headers` of request\n * @param req request object\n */\n\nexport function getCookieParser(headers: {\n [key: string]: string | string[] | null | undefined\n}): () => NextApiRequestCookies {\n return function parseCookie(): NextApiRequestCookies {\n const { cookie } = headers\n\n if (!cookie) {\n return {}\n }\n\n const { parse: parseCookieFn } =\n require('next/dist/compiled/cookie') as typeof import('next/dist/compiled/cookie')\n return parseCookieFn(Array.isArray(cookie) ? cookie.join('; ') : cookie)\n }\n}\n"],"names":["getCookieParser","headers","parseCookie","cookie","parse","parseCookieFn","require","Array","isArray","join"],"mappings":"AAEA;;;CAGC,GAED;;;;AAAO,SAASA,gBAAgBC,OAE/B;IACC,OAAO,SAASC;QACd,MAAM,EAAEC,MAAM,EAAE,GAAGF;QAEnB,IAAI,CAACE,QAAQ;YACX,OAAO,CAAC;QACV;QAEA,MAAM,EAAEC,OAAOC,aAAa,EAAE,GAC5BC,QAAQ;QACV,OAAOD,cAAcE,MAAMC,OAAO,CAACL,UAAUA,OAAOM,IAAI,CAAC,QAAQN;IACnE;AACF","ignoreList":[0]}}, + {"offset": {"line": 1605, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/api-utils/index.ts"],"sourcesContent":["import type { IncomingHttpHeaders, IncomingMessage } from 'http'\nimport type { CookieSerializeOptions } from 'next/dist/compiled/cookie'\nimport type { NextApiResponse } from '../../shared/lib/utils'\n\nimport { HeadersAdapter } from '../web/spec-extension/adapters/headers'\nimport {\n PRERENDER_REVALIDATE_HEADER,\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER,\n} from '../../lib/constants'\nimport { getTracer } from '../lib/trace/tracer'\nimport { NodeSpan } from '../lib/trace/constants'\n\nexport type NextApiRequestCookies = Partial<{ [key: string]: string }>\nexport type NextApiRequestQuery = Partial<{ [key: string]: string | string[] }>\n\nexport type __ApiPreviewProps = {\n previewModeId: string\n previewModeEncryptionKey: string\n previewModeSigningKey: string\n}\n\nexport function wrapApiHandler any>(\n page: string,\n handler: T\n): T {\n return ((...args) => {\n getTracer().setRootSpanAttribute('next.route', page)\n // Call API route method\n return getTracer().trace(\n NodeSpan.runHandler,\n {\n spanName: `executing api route (pages) ${page}`,\n },\n () => handler(...args)\n )\n }) as T\n}\n\n/**\n *\n * @param res response object\n * @param statusCode `HTTP` status code of response\n */\nexport function sendStatusCode(\n res: NextApiResponse,\n statusCode: number\n): NextApiResponse {\n res.statusCode = statusCode\n return res\n}\n\n/**\n *\n * @param res response object\n * @param [statusOrUrl] `HTTP` status code of redirect\n * @param url URL of redirect\n */\nexport function redirect(\n res: NextApiResponse,\n statusOrUrl: string | number,\n url?: string\n): NextApiResponse {\n if (typeof statusOrUrl === 'string') {\n url = statusOrUrl\n statusOrUrl = 307\n }\n if (typeof statusOrUrl !== 'number' || typeof url !== 'string') {\n throw new Error(\n `Invalid redirect arguments. Please use a single argument URL, e.g. res.redirect('/destination') or use a status code and URL, e.g. res.redirect(307, '/destination').`\n )\n }\n res.writeHead(statusOrUrl, { Location: url })\n res.write(url)\n res.end()\n return res\n}\n\nexport function checkIsOnDemandRevalidate(\n rawHeaders: Headers | IncomingHttpHeaders,\n previewProps: __ApiPreviewProps\n): {\n isOnDemandRevalidate: boolean\n revalidateOnlyGenerated: boolean\n} {\n // Headers is a plain object for Node.js, Headers object in Edge runtime\n if (typeof rawHeaders.get === 'function') {\n const headers = HeadersAdapter.from(rawHeaders)\n\n const previewModeId = headers.get(PRERENDER_REVALIDATE_HEADER)\n const isOnDemandRevalidate = previewModeId === previewProps.previewModeId\n\n const revalidateOnlyGenerated = headers.has(\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER\n )\n\n return { isOnDemandRevalidate, revalidateOnlyGenerated }\n }\n\n const headers = rawHeaders as IncomingHttpHeaders\n\n const previewModeId = headers[PRERENDER_REVALIDATE_HEADER]\n const isOnDemandRevalidate = previewModeId === previewProps.previewModeId\n\n const revalidateOnlyGenerated = headers.hasOwnProperty(\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER\n )\n\n return { isOnDemandRevalidate, revalidateOnlyGenerated }\n}\n\nexport const COOKIE_NAME_PRERENDER_BYPASS = `__prerender_bypass`\nexport const COOKIE_NAME_PRERENDER_DATA = `__next_preview_data`\n\nexport const RESPONSE_LIMIT_DEFAULT = 4 * 1024 * 1024\n\nexport const SYMBOL_PREVIEW_DATA = Symbol(COOKIE_NAME_PRERENDER_DATA)\nexport const SYMBOL_CLEARED_COOKIES = Symbol(COOKIE_NAME_PRERENDER_BYPASS)\n\nexport function clearPreviewData(\n res: NextApiResponse,\n options: {\n path?: string\n } = {}\n): NextApiResponse {\n if (SYMBOL_CLEARED_COOKIES in res) {\n return res\n }\n\n const { serialize } =\n require('next/dist/compiled/cookie') as typeof import('next/dist/compiled/cookie')\n const previous = res.getHeader('Set-Cookie')\n res.setHeader(`Set-Cookie`, [\n ...(typeof previous === 'string'\n ? [previous]\n : Array.isArray(previous)\n ? previous\n : []),\n serialize(COOKIE_NAME_PRERENDER_BYPASS, '', {\n // To delete a cookie, set `expires` to a date in the past:\n // https://tools.ietf.org/html/rfc6265#section-4.1.1\n // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.\n expires: new Date(0),\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n ...(options.path !== undefined\n ? ({ path: options.path } as CookieSerializeOptions)\n : undefined),\n }),\n serialize(COOKIE_NAME_PRERENDER_DATA, '', {\n // To delete a cookie, set `expires` to a date in the past:\n // https://tools.ietf.org/html/rfc6265#section-4.1.1\n // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.\n expires: new Date(0),\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n ...(options.path !== undefined\n ? ({ path: options.path } as CookieSerializeOptions)\n : undefined),\n }),\n ])\n\n Object.defineProperty(res, SYMBOL_CLEARED_COOKIES, {\n value: true,\n enumerable: false,\n })\n return res\n}\n\n/**\n * Custom error class\n */\nexport class ApiError extends Error {\n readonly statusCode: number\n\n constructor(statusCode: number, message: string) {\n super(message)\n this.statusCode = statusCode\n }\n}\n\n/**\n * Sends error in `response`\n * @param res response object\n * @param statusCode of response\n * @param message of response\n */\nexport function sendError(\n res: NextApiResponse,\n statusCode: number,\n message: string\n): void {\n res.statusCode = statusCode\n res.statusMessage = message\n res.end(message)\n}\n\ninterface LazyProps {\n req: IncomingMessage\n}\n\n/**\n * Execute getter function only if its needed\n * @param LazyProps `req` and `params` for lazyProp\n * @param prop name of property\n * @param getter function to get data\n */\nexport function setLazyProp(\n { req }: LazyProps,\n prop: string,\n getter: () => T\n): void {\n const opts = { configurable: true, enumerable: true }\n const optsReset = { ...opts, writable: true }\n\n Object.defineProperty(req, prop, {\n ...opts,\n get: () => {\n const value = getter()\n // we set the property on the object to avoid recalculating it\n Object.defineProperty(req, prop, { ...optsReset, value })\n return value\n },\n set: (value) => {\n Object.defineProperty(req, prop, { ...optsReset, value })\n },\n })\n}\n"],"names":["HeadersAdapter","PRERENDER_REVALIDATE_HEADER","PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER","getTracer","NodeSpan","wrapApiHandler","page","handler","args","setRootSpanAttribute","trace","runHandler","spanName","sendStatusCode","res","statusCode","redirect","statusOrUrl","url","Error","writeHead","Location","write","end","checkIsOnDemandRevalidate","rawHeaders","previewProps","get","headers","from","previewModeId","isOnDemandRevalidate","revalidateOnlyGenerated","has","hasOwnProperty","COOKIE_NAME_PRERENDER_BYPASS","COOKIE_NAME_PRERENDER_DATA","RESPONSE_LIMIT_DEFAULT","SYMBOL_PREVIEW_DATA","Symbol","SYMBOL_CLEARED_COOKIES","clearPreviewData","options","serialize","require","previous","getHeader","setHeader","Array","isArray","expires","Date","httpOnly","sameSite","process","env","NODE_ENV","secure","path","undefined","Object","defineProperty","value","enumerable","ApiError","constructor","message","sendError","statusMessage","setLazyProp","req","prop","getter","opts","configurable","optsReset","writable","set"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 1781, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/async-local-storage.ts"],"sourcesContent":["import type { AsyncLocalStorage } from 'async_hooks'\n\nconst sharedAsyncLocalStorageNotAvailableError = new Error(\n 'Invariant: AsyncLocalStorage accessed in runtime where it is not available'\n)\n\nclass FakeAsyncLocalStorage\n implements AsyncLocalStorage\n{\n disable(): void {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n getStore(): Store | undefined {\n // This fake implementation of AsyncLocalStorage always returns `undefined`.\n return undefined\n }\n\n run(): R {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n exit(): R {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n enterWith(): void {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n static bind(fn: T): T {\n return fn\n }\n}\n\nconst maybeGlobalAsyncLocalStorage =\n typeof globalThis !== 'undefined' && (globalThis as any).AsyncLocalStorage\n\nexport function createAsyncLocalStorage<\n Store extends {},\n>(): AsyncLocalStorage {\n if (maybeGlobalAsyncLocalStorage) {\n return new maybeGlobalAsyncLocalStorage()\n }\n return new FakeAsyncLocalStorage()\n}\n\n/**\n * Returns the storage registered under `name`, and creates it on first use.\n *\n * These storages must be singletons within a realm. A store that is entered\n * through one reference to a storage must be readable through every other\n * reference to it. If it is not, code that runs inside the scope sees no store\n * at all. Module identity does not guarantee this. A realm can evaluate the\n * same `next` file more than once if the package is reachable through more than\n * one path, and then each evaluation creates a storage of its own. A global\n * symbol keeps the singleton intact for any number of copies. Worker threads\n * and edge sandboxes still get separate storages, because each of them has its\n * own `globalThis`.\n *\n * Module identity broke this way in `next dev`. A bug in Node's\n * `fs.realpathSync` can return a path with its symlinks unresolved, and the\n * module loader keys the module cache on that path. On a pnpm install it then\n * resolves `next/dist/...` through the `node_modules/next` symlink instead of\n * the real path, so the file is evaluated a second time. See\n * https://github.com/nodejs/node/pull/65113. Node versions without that fix\n * stay affected.\n *\n * The key includes the Next.js version, so two different versions of Next.js in\n * the same realm keep separate storages. Their store shapes might not be\n * compatible.\n */\nexport function getOrCreateGlobalAsyncLocalStorage(\n name: string\n): AsyncLocalStorage {\n const key = Symbol.for(`@next/${name}@${process.env.__NEXT_VERSION}`)\n\n const globalStore = globalThis as typeof globalThis & {\n [key: symbol]: AsyncLocalStorage | undefined\n }\n\n return (globalStore[key] ??= createAsyncLocalStorage())\n}\n\nexport function bindSnapshot(\n // WARNING: Don't pass a named function to this argument! See: https://github.com/facebook/react/pull/34911\n fn: T\n): T {\n if (maybeGlobalAsyncLocalStorage) {\n return maybeGlobalAsyncLocalStorage.bind(fn)\n }\n return FakeAsyncLocalStorage.bind(fn)\n}\n\nexport function createSnapshot(): (\n fn: (...args: TArgs) => R,\n ...args: TArgs\n) => R {\n if (maybeGlobalAsyncLocalStorage) {\n return maybeGlobalAsyncLocalStorage.snapshot()\n }\n return function (fn: any, ...args: any[]) {\n return fn(...args)\n }\n}\n"],"names":["sharedAsyncLocalStorageNotAvailableError","Error","FakeAsyncLocalStorage","disable","getStore","undefined","run","exit","enterWith","bind","fn","maybeGlobalAsyncLocalStorage","globalThis","AsyncLocalStorage","createAsyncLocalStorage","getOrCreateGlobalAsyncLocalStorage","name","key","Symbol","for","process","env","__NEXT_VERSION","globalStore","bindSnapshot","createSnapshot","snapshot","args"],"mappings":";;;;;;;;;;AAEA,MAAMA,2CAA2C,IAAIC,MACnD;AAGF,MAAMC;IAGJC,UAAgB;QACd,MAAMH;IACR;IAEAI,WAA8B;QAC5B,4EAA4E;QAC5E,OAAOC;IACT;IAEAC,MAAY;QACV,MAAMN;IACR;IAEAO,OAAa;QACX,MAAMP;IACR;IAEAQ,YAAkB;QAChB,MAAMR;IACR;IAEA,OAAOS,KAAQC,EAAK,EAAK;QACvB,OAAOA;IACT;AACF;AAEA,MAAMC,+BACJ,OAAOC,eAAe,eAAgBA,WAAmBC,iBAAiB;AAErE,SAASC;IAGd,IAAIH,8BAA8B;QAChC,OAAO,IAAIA;IACb;IACA,OAAO,IAAIT;AACb;AA2BO,SAASa,mCACdC,IAAY;IAEZ,MAAMC,MAAMC,OAAOC,GAAG,CAAC,CAAC,MAAM,EAAEH,KAAK,CAAC,EAAEI,QAAQC,EAAAA,CAAG,CAACC,cAAc,EAAE;IAEpE,MAAMC,cAAcX;IAIpB,OAAQW,WAAW,CAACN,IAAI,KAAKH;AAC/B;AAEO,SAASU,aACd,AACAd,EAAK,yGADsG;IAG3G,IAAIC,8BAA8B;QAChC,OAAOA,6BAA6BF,IAAI,CAACC;IAC3C;IACA,OAAOR,sBAAsBO,IAAI,CAACC;AACpC;AAEO,SAASe;IAId,IAAId,8BAA8B;QAChC,OAAOA,6BAA6Be,QAAQ;IAC9C;IACA,OAAO,SAAUhB,EAAO,EAAE,GAAGiB,IAAW;QACtC,OAAOjB,MAAMiB;IACf;AACF","ignoreList":[0]}}, + {"offset": {"line": 1843, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/blocking-route-messages.ts"],"sourcesContent":["export function createRuntimeBodyError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data during prerendering.\\n\\n` +\n `\\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` accessed outside of \\`\\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-runtime`\n )\n}\n\nexport function createDynamicBodyError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data during prerendering.\\n\\n` +\n `\\`fetch(...)\\` or \\`connection()\\` accessed outside of \\`\\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [cache] Cache the data access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`\n )\n}\n\nexport function createRuntimeBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data during prerendering or a navigation.\\n\\n` +\n `\\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` accessed outside of \\`\\` prevents the route from being prerendered or the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-runtime`\n )\n}\n\nexport function createLinkBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered URL data during prerendering or a navigation.\\n\\n` +\n `\\`params\\` or \\`searchParams\\` accessed outside of \\`\\` may prevent the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-shell-url-data`\n )\n}\n\nexport function createNavigationBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`navigation()\\` during prerendering or a navigation.\\n\\n` +\n `\\`navigation()\\` called outside of \\`\\` may prevent the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the component that calls \\`navigation()\\`\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage`\n )\n}\n\nexport function createPrefetchBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`prefetch()\\` during prerendering or a navigation.\\n\\n` +\n `\\`prefetch()\\` called outside of \\`\\` may prevent the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the component that calls \\`prefetch()\\`\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage`\n )\n}\n\nexport function createDynamicBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data during prerendering or a navigation.\\n\\n` +\n `\\`fetch(...)\\` or \\`connection()\\` accessed outside of \\`\\` prevents the route from being prerendered or the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [cache] Cache the data access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`\n )\n}\n\n/**\n * NOTE: Prefer `createRuntimeBodyError` or `createDynamicBodyError`.\n * Only use this in situations like build-time static validation, where\n * we can't pinpoint a more specific reason.\n */\nexport function createDynamicOrRuntimeBodyError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data during prerendering.\\n\\n` +\n `\\`fetch(...)\\`, \\`cookies()\\`, \\`headers()\\`, \\`params\\`, \\`searchParams\\`, or \\`connection()\\` accessed outside of \\`\\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [cache] For uncached data (\\`fetch\\`, database calls): cache the access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`\n )\n}\n\nexport function createLinkMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered URL data in \\`generateMetadata()\\`.\\n\\n` +\n `This route's metadata is blocked, but the rest of its content can be prefetched. \\`params\\` or \\`searchParams\\` accessed in \\`generateMetadata()\\` prevent it from being prefetched.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static metadata export instead of \\`generateMetadata()\\`\\n` +\n ` - [dynamic] Render a marker component that calls \\`await connection()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`\n )\n}\n\nexport function createRuntimeMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data in \\`generateMetadata()\\`.\\n\\n` +\n `This route's metadata is blocked, but the rest of its content can be prerendered. \\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` accessed in \\`generateMetadata()\\` cause it to run dynamically.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static metadata export instead of \\`generateMetadata()\\`\\n` +\n ` - [dynamic] Render a marker component that calls \\`await connection()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`\n )\n}\n\nexport function createNavigationMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`navigation()\\` in \\`generateMetadata()\\`.\\n\\n` +\n `Metadata can already stream without blocking the route's UI, so delaying it until navigation may be unintentional.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [remove] Remove \\`navigation()\\` from \\`generateMetadata()\\`\\n` +\n ` - [mark] Render a marker component that calls \\`await navigation()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-metadata`\n )\n}\n\nexport function createPrefetchMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`prefetch()\\` in \\`generateMetadata()\\`.\\n\\n` +\n `Metadata can already stream without blocking the route's UI, so delaying it until a per-link prefetch or navigation may be unintentional.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [remove] Remove \\`prefetch()\\` from \\`generateMetadata()\\`\\n` +\n ` - [mark] Render a marker component that calls \\`await prefetch()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-metadata`\n )\n}\n\nexport function createDynamicMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data in \\`generateMetadata()\\`.\\n\\n` +\n `This route's metadata is blocked, but the rest of its content can be prerendered. \\`fetch(...)\\` or \\`connection()\\` accessed in \\`generateMetadata()\\` cause it to run dynamically.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] Cache the metadata with \\`\"use cache\"\\` in \\`generateMetadata()\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [dynamic] Render a marker component that calls \\`await connection()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-dynamic`\n )\n}\n\nexport function createLinkViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered URL data in \\`generateViewport()\\`.\\n\\n` +\n `\\`params\\` or \\`searchParams\\` in \\`generateViewport()\\` prevents the page from being prerendered, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static viewport export instead of \\`generateViewport()\\`\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`\n )\n}\n\nexport function createRuntimeViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data in \\`generateViewport()\\`.\\n\\n` +\n `\\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` in \\`generateViewport()\\` prevents the page from being prerendered, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static viewport export instead of \\`generateViewport()\\`\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`\n )\n}\n\nexport function createNavigationViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`navigation()\\` in \\`generateViewport()\\`.\\n\\n` +\n `This prevents Next.js from creating the App Shell, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [remove] Remove \\`navigation()\\` from \\`generateViewport()\\`\\n` +\n ` - [ignore] Set \\`export const instant = false\\` to disable validation for this segment\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-viewport`\n )\n}\n\nexport function createPrefetchViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`prefetch()\\` in \\`generateViewport()\\`.\\n\\n` +\n `This prevents Next.js from creating the App Shell, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [remove] Remove \\`prefetch()\\` from \\`generateViewport()\\`\\n` +\n ` - [ignore] Set \\`export const instant = false\\` to disable validation for this segment\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-viewport`\n )\n}\n\nexport function createDynamicViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data in \\`generateViewport()\\`.\\n\\n` +\n `\\`fetch(...)\\` or \\`connection()\\` in \\`generateViewport()\\` prevents the page from being prerendered, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] Cache the viewport data with \\`\"use cache\"\\` in \\`generateViewport()\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-dynamic`\n )\n}\n\n/**\n * NOTE: Prefer `createRuntimeViewportError` or `createDynamicViewportError`.\n * Only use this in situations like build-time static validation, where\n * we can't pinpoint a more specific reason.\n */\nexport function createDynamicOrRuntimeViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data in \\`generateViewport()\\`.\\n\\n` +\n `This prevents the page from being prerendered, leading to a slower user experience. Unlike metadata, viewport cannot be streamed behind \\`\\` because it affects the initial page load.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static viewport export instead of \\`generateViewport()\\`\\n` +\n ` - [cache] For uncached data (\\`fetch\\`, database calls): cache the viewport with \\`\"use cache\"\\` in \\`generateViewport()\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`\n )\n}\n\n/**\n * NOTE: Prefer `createRuntimeMetadataError` or `createDynamicMetadataError`.\n * Only use this in situations like build-time static validation, where\n * we can't pinpoint a more specific reason.\n */\nexport function createDynamicOrRuntimeMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data in \\`generateMetadata()\\`.\\n\\n` +\n `This route's metadata is blocked, but the rest of its content can be prerendered.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static metadata export instead of \\`generateMetadata()\\`\\n` +\n ` - [cache] Cache the metadata with \\`\"use cache\"\\` in \\`generateMetadata()\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [dynamic] Render a marker component that calls \\`await connection()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`\n )\n}\n\n//====================================================\n// Static routes (with `ensureStatic = \"navigation\"`)\n//====================================================\n\nexport function createRuntimeBodyErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but runtime data from \\`cookies()\\`, \\`headers()\\`, \\`params\\`, \\`searchParams\\`, or a short-lived cache requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [remove] Remove the data access\\n` +\n ` - [client] Read the data on the client\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-route-runtime`\n )\n}\n\nexport function createDynamicBodyErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but an uncached \\`fetch(...)\\`, database call, or \\`connection()\\` requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] Cache the data access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [remove] Remove the data access\\n` +\n ` - [client] Read the data on the client\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-route-dynamic`\n )\n}\n\nexport function createNonPrerenderableBodyErrorInStaticRoute(\n route: string\n): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but some data requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] For uncached data (\\`fetch\\`, database calls): cache the access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [remove] Remove the data access\\n` +\n ` - [client] Read the data on the client\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-route-dynamic`\n )\n}\n\nexport function createRuntimeMetadataErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data in \\`generateMetadata()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but runtime data from \\`cookies()\\`, \\`headers()\\`, \\`params\\`, \\`searchParams\\`, or a short-lived cache requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Replace the dynamic data used by \\`generateMetadata()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-metadata-runtime`\n )\n}\n\nexport function createDynamicMetadataErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data in \\`generateMetadata()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but an uncached \\`fetch(...)\\`, database call, or \\`connection()\\` requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] Cache the data used by \\`generateMetadata()\\` with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [static] Replace the dynamic data used by \\`generateMetadata()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-metadata-dynamic`\n )\n}\n\nexport function createNonPrerenderableMetadataErrorInStaticRoute(\n route: string\n): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data in \\`generateMetadata()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but some data requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] For uncached data: cache the data used by \\`generateMetadata()\\` with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [static] Replace the dynamic data used by \\`generateMetadata()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-metadata-dynamic`\n )\n}\n\nexport function createRuntimeViewportErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data in \\`generateViewport()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but runtime data from \\`cookies()\\`, \\`headers()\\`, \\`params\\`, \\`searchParams\\`, or a short-lived cache requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Replace the dynamic data used by \\`generateViewport()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-viewport-runtime`\n )\n}\n\nexport function createDynamicViewportErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data in \\`generateViewport()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but an uncached \\`fetch(...)\\`, database call, or \\`connection()\\` requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] Cache the data used by \\`generateViewport()\\` with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [static] Replace the dynamic data used by \\`generateViewport()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-viewport-dynamic`\n )\n}\n\nexport function createNonPrerenderableViewportErrorInStaticRoute(\n route: string\n): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data in \\`generateViewport()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but some data requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] For uncached data: cache the data used by \\`generateViewport()\\` with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [static] Replace the dynamic data used by \\`generateViewport()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-viewport-dynamic`\n )\n}\n\nexport function logBuildDebugHint(route: string): void {\n if (process.env.NODE_ENV !== 'development') {\n console.error(\n `To get a more detailed stack trace and pinpoint the issue, try one of the following:\\n` +\n ` - Start the app in development mode by running \\`next dev\\`, then open \"${route}\" in your browser to investigate the error.\\n` +\n ` - Rerun the production build with \\`next build --debug-prerender\\` to generate better stack traces.`\n )\n } else if (!process.env.__NEXT_DEV_SERVER) {\n console.error(\n `To debug the issue, start the app in development mode by running \\`next dev\\`, then open \"${route}\" in your browser to investigate the error.`\n )\n }\n}\n"],"names":["createRuntimeBodyError","route","Error","createDynamicBodyError","createRuntimeBodyErrorInNavigation","createLinkBodyErrorInNavigation","createNavigationBodyErrorInNavigation","createPrefetchBodyErrorInNavigation","createDynamicBodyErrorInNavigation","createDynamicOrRuntimeBodyError","createLinkMetadataError","createRuntimeMetadataError","createNavigationMetadataError","createPrefetchMetadataError","createDynamicMetadataError","createLinkViewportError","createRuntimeViewportError","createNavigationViewportError","createPrefetchViewportError","createDynamicViewportError","createDynamicOrRuntimeViewportError","createDynamicOrRuntimeMetadataError","createRuntimeBodyErrorInStaticRoute","createDynamicBodyErrorInStaticRoute","createNonPrerenderableBodyErrorInStaticRoute","createRuntimeMetadataErrorInStaticRoute","createDynamicMetadataErrorInStaticRoute","createNonPrerenderableMetadataErrorInStaticRoute","createRuntimeViewportErrorInStaticRoute","createDynamicViewportErrorInStaticRoute","createNonPrerenderableViewportErrorInStaticRoute","logBuildDebugHint","process","env","NODE_ENV","console","error","__NEXT_DEV_SERVER"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 2002, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/dynamic-rendering.ts"],"sourcesContent":["/**\n * The functions provided by this module are used to communicate certain properties\n * about the currently running code so that Next.js can make decisions on how to handle\n * the current execution in different rendering modes such as pre-rendering, resuming, and SSR.\n *\n * Today Next.js treats all code as potentially static. Certain APIs may only make sense when dynamically rendering.\n * Traditionally this meant deopting the entire render to dynamic however with PPR we can now deopt parts\n * of a React tree as dynamic while still keeping other parts static. There are really two different kinds of\n * Dynamic indications.\n *\n * The first is simply an intention to be dynamic. unstable_noStore is an example of this where\n * the currently executing code simply declares that the current scope is dynamic but if you use it\n * inside unstable_cache it can still be cached. This type of indication can be removed if we ever\n * make the default dynamic to begin with because the only way you would ever be static is inside\n * a cache scope which this indication does not affect.\n *\n * The second is an indication that a dynamic data source was read. This is a stronger form of dynamic\n * because it means that it is inappropriate to cache this at all. using a dynamic data source inside\n * unstable_cache should error. If you want to use some dynamic data inside unstable_cache you should\n * read that data outside the cache and pass it in as an argument to the cached function.\n */\n\nimport type { WorkStore } from './work-async-storage.external'\nimport type {\n RequestStore,\n WorkUnitStore,\n PrerenderStoreLegacy,\n PrerenderStoreModern,\n ValidationStoreClient,\n PrerenderStoreModernServer,\n} from './work-unit-async-storage.external'\n\n// Once postpone is in stable we should switch to importing the postpone export directly\nimport React from 'react'\n\nimport { DynamicServerError } from '../../client/components/hooks-server-context'\nimport { StaticGenBailoutError } from '../../client/components/static-generation-bailout'\nimport { getStagedRenderingController } from './work-unit-async-storage.external'\nimport { isClientHookDynamicError } from '../dynamic-rendering-utils'\nimport {\n METADATA_BOUNDARY_NAME,\n VIEWPORT_BOUNDARY_NAME,\n OUTLET_BOUNDARY_NAME,\n ROOT_LAYOUT_BOUNDARY_NAME,\n} from '../../lib/framework/boundary-constants'\nimport { scheduleOnNextTick } from '../../lib/scheduler'\nimport {\n createRuntimeBodyError,\n createDynamicBodyError,\n createRuntimeBodyErrorInNavigation,\n createNavigationBodyErrorInNavigation,\n createPrefetchBodyErrorInNavigation,\n createDynamicBodyErrorInNavigation,\n createDynamicOrRuntimeBodyError,\n createRuntimeMetadataError,\n createDynamicMetadataError,\n createRuntimeViewportError,\n createNavigationViewportError,\n createPrefetchViewportError,\n createDynamicViewportError,\n createDynamicOrRuntimeViewportError,\n createDynamicOrRuntimeMetadataError,\n logBuildDebugHint,\n createLinkBodyErrorInNavigation,\n createLinkMetadataError,\n createLinkViewportError,\n createNavigationMetadataError,\n createPrefetchMetadataError,\n createNonPrerenderableMetadataErrorInStaticRoute,\n createNonPrerenderableViewportErrorInStaticRoute,\n createNonPrerenderableBodyErrorInStaticRoute,\n createRuntimeBodyErrorInStaticRoute,\n createDynamicBodyErrorInStaticRoute,\n createRuntimeMetadataErrorInStaticRoute,\n createDynamicMetadataErrorInStaticRoute,\n createRuntimeViewportErrorInStaticRoute,\n createDynamicViewportErrorInStaticRoute,\n} from './blocking-route-messages'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport {\n INSTANT_VALIDATION_BOUNDARY_NAME,\n INSTANT_SLOT_MARKER_PREFIX,\n INSTANT_SLOT_MARKER_SUFFIX,\n} from './instant-validation/boundary-constants'\nimport {\n type ValidationBoundaryTracking,\n allRequiredBoundariesRendered,\n} from './instant-validation/boundary-tracking'\nimport type { InstantValidationSampleTracking } from './instant-validation/instant-samples'\nimport { createUnrenderedSegmentError } from '../../shared/lib/instant-messages'\nimport { getReactBrowserBailoutReason } from '../../shared/lib/lazy-dynamic/react-browser-bailout'\n\nexport type DynamicAccess = {\n /**\n * If debugging, this will contain the stack trace of where the dynamic access\n * occurred. This is used to provide more information to the user about why\n * their page is being rendered dynamically.\n */\n stack?: string\n\n /**\n * The expression that was accessed dynamically.\n */\n expression: string\n}\n\n// Stores dynamic reasons used during an RSC render.\nexport type DynamicTrackingState = {\n /**\n * When true, stack information will also be tracked during dynamic access.\n */\n readonly isDebugDynamicAccesses: boolean | undefined\n\n /**\n * The dynamic accesses that occurred during the render.\n */\n readonly dynamicAccesses: Array\n\n syncDynamicErrorWithStack: null | Error\n syncDynamicErrorWithStackPostMicrotask: boolean\n}\n\n// Stores dynamic reasons used during an SSR render.\nexport type DynamicValidationState = {\n hasSuspenseAboveBody: boolean\n hasDynamicMetadata: boolean\n dynamicMetadata: null | Error\n hasDynamicViewport: boolean\n hasAllowedDynamic: boolean\n dynamicErrors: Array\n}\n\nexport function createDynamicTrackingState(\n isDebugDynamicAccesses: boolean | undefined\n): DynamicTrackingState {\n return {\n isDebugDynamicAccesses,\n dynamicAccesses: [],\n syncDynamicErrorWithStack: null,\n syncDynamicErrorWithStackPostMicrotask: false,\n }\n}\n\nexport function createDynamicValidationState(): DynamicValidationState {\n return {\n hasSuspenseAboveBody: false,\n hasDynamicMetadata: false,\n dynamicMetadata: null,\n hasDynamicViewport: false,\n hasAllowedDynamic: false,\n dynamicErrors: [],\n }\n}\n\nfunction getPendingClientSyncDynamicError(\n clientDynamic: DynamicTrackingState\n): null | Error {\n return clientDynamic.syncDynamicErrorWithStackPostMicrotask\n ? null\n : clientDynamic.syncDynamicErrorWithStack\n}\n\nexport function getFirstDynamicReason(\n trackingState: DynamicTrackingState\n): undefined | string {\n return trackingState.dynamicAccesses[0]?.expression\n}\n\n/**\n * This function communicates that the current scope should be treated as dynamic.\n *\n * In most cases this function is a no-op but if called during\n * a PPR prerender it will postpone the current sub-tree and calling\n * it during a normal prerender will cause the entire prerender to abort\n */\nexport function markCurrentScopeAsDynamic(\n store: WorkStore,\n workUnitStore: undefined | Exclude,\n expression: string\n): void {\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'cache':\n case 'unstable-cache':\n // Inside cache scopes, marking a scope as dynamic has no effect,\n // because the outer cache scope creates a cache boundary. This is\n // subtly different from reading a dynamic data source, which is\n // forbidden inside a cache scope.\n return\n case 'private-cache':\n // A private cache scope is already dynamic by definition.\n return\n case 'prerender-legacy':\n case 'request':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n // If we're forcing dynamic rendering or we're forcing static rendering, we\n // don't need to do anything here because the entire page is already dynamic\n // or it's static and it should not throw or postpone here.\n if (store.forceDynamic || store.forceStatic) return\n\n if (store.dynamicShouldError) {\n throw new StaticGenBailoutError(\n `Route ${store.route} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`\n )\n }\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender-legacy':\n workUnitStore.revalidate = 0\n\n // We aren't prerendering, but we are generating a static page. We need\n // to bail out of static generation.\n const err = new DynamicServerError(\n `Route ${store.route} couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n store.dynamicUsageDescription = expression\n store.dynamicUsageStack = err.stack\n\n throw err\n case 'request':\n markRequestStoreAsDynamic(workUnitStore)\n break\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n}\n\n/**\n * This function is meant to be used when prerendering without cacheComponents or PPR.\n * When called during a build it will cause Next.js to consider the route as dynamic.\n *\n * @internal\n */\nexport function throwToInterruptStaticGeneration(\n expression: string,\n store: WorkStore,\n prerenderStore: PrerenderStoreLegacy\n): never {\n // We aren't prerendering but we are generating a static page. We need to bail out of static generation\n const err = new DynamicServerError(\n `Route ${store.route} couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n\n prerenderStore.revalidate = 0\n\n store.dynamicUsageDescription = expression\n store.dynamicUsageStack = err.stack\n\n throw err\n}\n\n/**\n * This function should be used to track whether something dynamic happened even when\n * we are in a dynamic render. This is useful for Dev where all renders are dynamic but\n * we still track whether dynamic APIs were accessed for helpful messaging\n *\n * @internal\n */\nexport function trackDynamicDataInDynamicRender(workUnitStore: WorkUnitStore) {\n switch (workUnitStore.type) {\n case 'cache':\n case 'unstable-cache':\n // Inside cache scopes, marking a scope as dynamic has no effect,\n // because the outer cache scope creates a cache boundary. This is\n // subtly different from reading a dynamic data source, which is\n // forbidden inside a cache scope.\n return\n case 'private-cache':\n // A private cache scope is already dynamic by definition.\n return\n case 'prerender':\n case 'prerender-runtime':\n case 'prerender-legacy':\n case 'prerender-client':\n case 'validation-client':\n case 'build-time-generator':\n break\n case 'request':\n markRequestStoreAsDynamic(workUnitStore)\n break\n default:\n workUnitStore satisfies never\n }\n}\n\nfunction markRequestStoreAsDynamic(requestStore: RequestStore): void {\n if (process.env.__NEXT_DEV_SERVER && requestStore.phase === 'render') {\n requestStore.usedDynamic = true\n }\n}\n\nfunction abortOnSynchronousDynamicDataAccess(\n route: string,\n expression: string,\n prerenderStore: PrerenderStoreModern\n): void {\n const reason = `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`\n\n const error = createPrerenderInterruptedError(reason)\n\n prerenderStore.controller.abort(error)\n\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n // When we aren't debugging, we don't need to create another error for the\n // stack trace.\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n}\n\nexport function abortOnSynchronousPlatformIOAccess(\n route: string,\n expression: string,\n errorWithStack: Error,\n prerenderStore: PrerenderStoreModern\n): void {\n const dynamicTracking = prerenderStore.dynamicTracking\n\n if (dynamicTracking && dynamicTracking.syncDynamicErrorWithStack === null) {\n dynamicTracking.syncDynamicErrorWithStack = errorWithStack\n // React completes the task that is currently rendering before scheduled\n // abort cleanup. Client tracking can attribute the sync IO only during\n // that current task; server tracking keeps the error regardless.\n queueMicrotask(() => {\n dynamicTracking.syncDynamicErrorWithStackPostMicrotask = true\n })\n }\n\n abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore)\n}\n\n/**\n * use this function when prerendering with cacheComponents. If we are doing a\n * prospective prerender we don't actually abort because we want to discover\n * all caches for the shell. If this is the actual prerender we do abort.\n *\n * This function accepts a prerenderStore but the caller should ensure we're\n * actually running in cacheComponents mode.\n *\n * @internal\n */\nexport function abortAndThrowOnSynchronousRequestDataAccess(\n route: string,\n expression: string,\n errorWithStack: Error,\n prerenderStore: PrerenderStoreModern\n): never {\n const prerenderSignal = prerenderStore.controller.signal\n if (prerenderSignal.aborted === false) {\n // TODO it would be better to move this aborted check into the callsite so we can avoid making\n // the error object when it isn't relevant to the aborting of the prerender however\n // since we need the throw semantics regardless of whether we abort it is easier to land\n // this way. See how this was handled with `abortOnSynchronousPlatformIOAccess` for a closer\n // to ideal implementation\n abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore)\n // Preserve the exact server-side dynamic access for final validation after\n // interrupting this render.\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n if (dynamicTracking.syncDynamicErrorWithStack === null) {\n dynamicTracking.syncDynamicErrorWithStack = errorWithStack\n }\n }\n }\n throw createPrerenderInterruptedError(\n `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`\n )\n}\n\nconst NEXT_PRERENDER_INTERRUPTED = 'NEXT_PRERENDER_INTERRUPTED'\n\nfunction createPrerenderInterruptedError(message: string): Error {\n const error = new Error(message)\n ;(error as any).digest = NEXT_PRERENDER_INTERRUPTED\n return error\n}\n\ntype DigestError = Error & {\n digest: string\n}\n\nexport function isPrerenderInterruptedError(\n error: unknown\n): error is DigestError {\n return (\n typeof error === 'object' &&\n error !== null &&\n (error as any).digest === NEXT_PRERENDER_INTERRUPTED &&\n 'name' in error &&\n 'message' in error &&\n error instanceof Error\n )\n}\n\nexport function accessedDynamicData(\n dynamicAccesses: Array\n): boolean {\n return dynamicAccesses.length > 0\n}\n\nexport function consumeDynamicAccess(\n serverDynamic: DynamicTrackingState,\n clientDynamic: DynamicTrackingState\n): DynamicTrackingState['dynamicAccesses'] {\n // We mutate because we only call this once we are no longer writing\n // to the dynamicTrackingState and it's more efficient than creating a new\n // array.\n serverDynamic.dynamicAccesses.push(...clientDynamic.dynamicAccesses)\n return serverDynamic.dynamicAccesses\n}\n\nexport function formatDynamicAPIAccesses(\n dynamicAccesses: Array\n): string[] {\n return dynamicAccesses\n .filter(\n (access): access is Required =>\n typeof access.stack === 'string' && access.stack.length > 0\n )\n .map(({ expression, stack }) => {\n stack = stack\n .split('\\n')\n // Remove the \"Error: \" prefix from the first line of the stack trace as\n // well as the first 4 lines of the stack trace which is the distance\n // from the user code and the `new Error().stack` call.\n .slice(4)\n .filter((line) => {\n // Exclude Next.js internals from the stack trace.\n if (line.includes('node_modules/next/')) {\n return false\n }\n\n // Exclude anonymous functions from the stack trace.\n if (line.includes(' ()')) {\n return false\n }\n\n // Exclude Node.js internals from the stack trace.\n if (line.includes(' (node:')) {\n return false\n }\n\n return true\n })\n .join('\\n')\n return `Dynamic API Usage Debug - ${expression}:\\n${stack}`\n })\n}\n\n/**\n * In a prerender, we may end up with hanging Promises as inputs due them\n * stalling on connection() or because they're loading dynamic data. In that\n * case we need to abort the encoding of arguments since they'll never complete.\n */\nexport function createHangingInputAbortSignal(\n workUnitStore: PrerenderStoreModernServer\n): AbortSignal\nexport function createHangingInputAbortSignal(\n workUnitStore: WorkUnitStore\n): AbortSignal | undefined\nexport function createHangingInputAbortSignal(\n workUnitStore: WorkUnitStore\n): AbortSignal | undefined {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-runtime':\n const controller = new AbortController()\n\n if (workUnitStore.cacheSignal) {\n // If we have a cacheSignal it means we're in a prospective render. If\n // the input we're waiting on is coming from another cache, we do want\n // to wait for it so that we can resolve this cache entry too.\n workUnitStore.cacheSignal.inputReady().then(() => {\n controller.abort()\n })\n } else {\n // Otherwise we're in the final render and we should already have all\n // our caches filled.\n // If the prerender uses stages, we have wait until the final stage.\n // if an input didn't resolve at that point, then we can assume it never will.\n //\n // We might still be waiting on some microtasks so we\n // wait one tick before giving up. When we give up, we still want to\n // render the content of this cache as deeply as we can so that we can\n // suspend as deeply as possible in the tree or not at all if we don't\n // end up waiting for the input.\n\n const stagedRendering = getStagedRenderingController(workUnitStore)\n if (stagedRendering && stagedRendering.finalStage !== null) {\n stagedRendering\n .waitForStage(stagedRendering.finalStage)\n .then(() => scheduleOnNextTick(() => controller.abort()), noop)\n } else {\n scheduleOnNextTick(() => controller.abort())\n }\n }\n\n return controller.signal\n case 'prerender-client':\n case 'validation-client':\n case 'prerender-legacy':\n case 'request':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n return undefined\n default:\n workUnitStore satisfies never\n }\n}\n\nfunction noop() {}\n\nexport function annotateDynamicAccess(\n expression: string,\n prerenderStore: PrerenderStoreModern | ValidationStoreClient\n) {\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n}\n\nconst hasSuspenseRegex = /\\n\\s+at Suspense \\(\\)/\n\n// Common implicit body tags that React will treat as body when placed directly in html\nconst bodyAndImplicitTags =\n 'body|div|main|section|article|aside|header|footer|nav|form|p|span|h1|h2|h3|h4|h5|h6'\n\n// Detects when RootLayoutBoundary (our framework marker component) appears\n// after Suspense in the component stack, indicating the root layout is wrapped\n// within a Suspense boundary. Ensures no body/html/implicit-body components are in between.\n//\n// Example matches:\n// at Suspense ()\n// at __next_root_layout_boundary__ ()\n//\n// Or with other components in between (but not body/html/implicit-body):\n// at Suspense ()\n// at SomeComponent ()\n// at __next_root_layout_boundary__ ()\nconst hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex = new RegExp(\n `\\\\n\\\\s+at Suspense \\\\(\\\\)(?:(?!\\\\n\\\\s+at (?:${bodyAndImplicitTags}) \\\\(\\\\))[\\\\s\\\\S])*?\\\\n\\\\s+at ${ROOT_LAYOUT_BOUNDARY_NAME} \\\\([^\\\\n]*\\\\)`\n)\n\nconst hasMetadataRegex = new RegExp(\n `\\\\n\\\\s+at ${METADATA_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst hasViewportRegex = new RegExp(\n `\\\\n\\\\s+at ${VIEWPORT_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst hasOutletRegex = new RegExp(`\\\\n\\\\s+at ${OUTLET_BOUNDARY_NAME}[\\\\n\\\\s]`)\n\nconst hasInstantValidationBoundaryRegex = new RegExp(\n `\\\\n\\\\s+at ${INSTANT_VALIDATION_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst slotMarkerRegex = new RegExp(\n `\\\\n\\\\s+at ${INSTANT_SLOT_MARKER_PREFIX}(\\\\d+)${INSTANT_SLOT_MARKER_SUFFIX}[\\\\n\\\\s]`\n)\n\n/** Look up the config factory for the slot this error belongs to.\n * Checks the component stack for a slot marker (__next_instant_slot_N__)\n * and returns the config at that index. Falls back to index 0 (root\n * config) when no slot marker is found or the slot has no config. */\nfunction resolveInstantStack(\n componentStack: string,\n dynamicValidation: InstantValidationState\n): (() => Error) | null {\n const { slotStacks } = dynamicValidation\n if (slotStacks.length > 1) {\n const match = slotMarkerRegex.exec(componentStack)\n if (match) {\n // Slot markers are 0-indexed in the component name but\n // slotStacks is 1-indexed (index 0 is the root config).\n const slotIndex = parseInt(match[1], 10) + 1\n const slotStack = slotStacks[slotIndex]\n if (slotStack != null) {\n return slotStack\n }\n }\n }\n // Fall back to root config (index 0)\n return slotStacks[0] ?? null\n}\n\n/**\n * Inspects the component stack of an outlet boundary to discover whether the\n * user placed a Suspense boundary above the document body, and records the\n * opt-in on `dynamicValidation.hasSuspenseAboveBody` if so.\n *\n * The outlet itself isn't a meaningful source of dynamic — it only resolves\n * when metadata/viewport are dynamic, which we track via their own boundaries.\n * However, the outlet renders alongside the page content, so its stack passes\n * through the user's layout chain (typically reaching into `` via the\n * root layout). That makes the outlet stack our best opportunity to spot a\n * Suspense boundary above the body, even when no real body content is dynamic.\n * Without this, a route whose only dynamic source is `generateViewport()` would\n * miss the Suspense-above-body opt-in, because the viewport's stack lives in\n * the head and never sees the user's root layout.\n *\n * We deliberately only set `hasSuspenseAboveBody`, not `hasAllowedDynamic`. The\n * latter tracks whether the body has dynamic content that's been wrapped in\n * Suspense (i.e., the page is partially dynamic). The outlet rendering tells us\n * about the structural opt-in for an empty shell, not about the body being\n * partially dynamic. The distinction matters because dynamic metadata is only\n * acceptable when the page is partially dynamic (via real body holes), and we\n * don't want this outlet-based detection to mask that case.\n */\nfunction trackOutletSuspenseAboveBody(\n componentStack: string,\n dynamicValidation: DynamicValidationState\n): void {\n if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n dynamicValidation.hasSuspenseAboveBody = true\n }\n}\n\nexport function trackDynamicAccessInStaticRoute(\n dynamicReason: unknown,\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n clientDynamic: DynamicTrackingState,\n isServerPartial: boolean,\n kind: StaticValidationHoleKind\n) {\n const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic)\n\n if (hasOutletRegex.test(componentStack)) {\n trackOutletSuspenseAboveBody(componentStack, dynamicValidation)\n return\n }\n if (hasMetadataRegex.test(componentStack)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(\n createMetadataErrorInStaticRoute(kind, workStore.route),\n componentStack,\n null\n )\n )\n return\n }\n if (hasViewportRegex.test(componentStack)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(\n createViewportErrorInStaticRoute(kind, workStore.route),\n componentStack,\n null\n )\n )\n return\n }\n\n let hasSuspense = false\n if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n // this error had a Suspense boundary above it, and it's above the body as well.\n dynamicValidation.hasSuspenseAboveBody = true\n hasSuspense = true\n } else if (hasSuspenseRegex.test(componentStack)) {\n // this error had a Suspense boundary above it.\n hasSuspense = true\n }\n\n if (hasSuspense) {\n if (!isServerPartial) {\n // If we don't have holes caused by server data, then any holes must be caused\n // by client-only code, which is allowed.\n dynamicValidation.hasAllowedDynamic = true\n return\n }\n\n // We have holes that may be caused by server data.\n if (syncDynamicError || isClientHookDynamicError(dynamicReason)) {\n // We know this hole wasn't caused by server data, so it's allowed\n // (because it's wrapped in a Suspense)\n dynamicValidation.hasAllowedDynamic = true\n return\n }\n\n // Any remaining hole may be caused by a server hole.\n // These are not allowed even with Suspense.\n // (NOTE: this may misreport valid client dynamic holes as server holes)\n dynamicValidation.dynamicErrors.push(\n addErrorContext(\n createBodyErrorInStaticRoute(kind, workStore.route),\n componentStack,\n null\n )\n )\n return\n }\n\n if (syncDynamicError) {\n dynamicValidation.dynamicErrors.push(syncDynamicError)\n return\n }\n\n if (isClientHookDynamicError(dynamicReason)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(dynamicReason, componentStack, null)\n )\n return\n }\n\n const error = addErrorContext(\n isServerPartial\n ? // This hole may be caused by server data.\n // (NOTE: this may misreport client dynamic holes as server holes)\n createBodyErrorInStaticRoute(kind, workStore.route)\n : // TODO(ensure-static): this could be something client-specific because we know\n // that server data is complete\n createBodyError(kind, workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicErrors.push(error)\n}\n\nexport function trackAllowedDynamicAccess(\n dynamicReason: unknown,\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n clientDynamic: DynamicTrackingState\n) {\n const dynamicHoleKind = DynamicHoleKind.RuntimeOrDynamic\n\n const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic)\n\n if (hasOutletRegex.test(componentStack)) {\n trackOutletSuspenseAboveBody(componentStack, dynamicValidation)\n return\n } else if (hasMetadataRegex.test(componentStack)) {\n dynamicValidation.hasDynamicMetadata = true\n return\n } else if (hasViewportRegex.test(componentStack)) {\n dynamicValidation.hasDynamicViewport = true\n return\n } else if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule.\n // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense\n // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering.\n dynamicValidation.hasAllowedDynamic = true\n dynamicValidation.hasSuspenseAboveBody = true\n return\n } else if (hasSuspenseRegex.test(componentStack)) {\n // this error had a Suspense boundary above it so we don't need to report it as a source\n // of disallowed\n dynamicValidation.hasAllowedDynamic = true\n return\n } else if (syncDynamicError) {\n dynamicValidation.dynamicErrors.push(syncDynamicError)\n return\n }\n\n if (isClientHookDynamicError(dynamicReason)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(dynamicReason, componentStack, null)\n )\n return\n }\n\n const error = addErrorContext(\n createBodyError(dynamicHoleKind, workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n}\n\nexport enum DynamicHoleKind {\n /** We know that this hole is caused by runtime data. */\n Runtime = 1,\n /** We know that this hole is caused by link data. */\n Link = 2,\n /** We know that this hole is caused by navigation(). */\n Navigation = 3,\n /** We know that this hole is caused by prefetch(). */\n Prefetch = 4,\n /** We know that this hole is caused by dynamic data. */\n Dynamic = 5,\n /** We know that this hole is caused by runtime or dynamic data, but don't know which. */\n RuntimeOrDynamic = 6,\n}\n\n// In Instant Validation we can always discriminate between runtime and dynamic.\nexport type InstantValidationHoleKind = Exclude<\n DynamicHoleKind,\n DynamicHoleKind.RuntimeOrDynamic\n>\n\nexport type StaticValidationHoleKind =\n // During dev-time static validation we can discriminate runtime and dynamic.\n | DynamicHoleKind.Runtime\n | DynamicHoleKind.Dynamic\n // During build-time static validation we can't discriminate runtime and dynamic.\n | DynamicHoleKind.RuntimeOrDynamic\n\n/** Stores dynamic reasons used during an SSR render in instant validation. */\nexport type InstantValidationState = {\n hasDynamicMetadata: boolean\n hasAllowedClientDynamicAboveBoundary: boolean\n dynamicMetadata: null | Error\n hasDynamicViewport: boolean\n hasAllowedDynamic: boolean\n dynamicErrors: Array\n validationPreventingErrors: Array\n thrownErrorsOutsideBoundary: Array\n /** Per-slot config factories. Index 0 is the root config (fallback).\n * Indices 1+ correspond to slot marker components in the tree. */\n slotStacks: Array<(() => Error) | null>\n}\n\nexport function createInstantValidationState(\n slotStacks: Array<(() => Error) | null>\n): InstantValidationState {\n return {\n hasDynamicMetadata: false,\n hasAllowedClientDynamicAboveBoundary: false,\n dynamicMetadata: null,\n hasDynamicViewport: false,\n hasAllowedDynamic: false,\n dynamicErrors: [],\n validationPreventingErrors: [],\n thrownErrorsOutsideBoundary: [],\n slotStacks,\n }\n}\n\nexport function trackDynamicHoleInNavigation(\n dynamicReason: unknown,\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: InstantValidationState,\n clientDynamic: DynamicTrackingState,\n kind: InstantValidationHoleKind,\n boundaryState: ValidationBoundaryTracking\n) {\n const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic)\n\n if (hasOutletRegex.test(componentStack)) {\n // We don't need to track that this is dynamic. It is only so when something else is also dynamic.\n return\n }\n // Resolve the config stack for this specific error. If the error\n // is inside a slot marker, use that slot's config. Otherwise fall\n // back to the default.\n const effectiveCreateInstantStack = resolveInstantStack(\n componentStack,\n dynamicValidation\n )\n\n if (hasMetadataRegex.test(componentStack)) {\n const error = addErrorContext(\n createMetadataError(kind, workStore.route),\n componentStack,\n effectiveCreateInstantStack\n )\n dynamicValidation.dynamicMetadata = error\n return\n }\n if (hasViewportRegex.test(componentStack)) {\n const error = addErrorContext(\n createViewportError(kind, workStore.route),\n componentStack,\n effectiveCreateInstantStack\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n }\n\n const boundaryLocation =\n hasInstantValidationBoundaryRegex.exec(componentStack)\n if (!boundaryLocation) {\n // We don't see the validation boundary in the component stack,\n // so this hole must be coming from a shared parent.\n // Shared parents are fully resolved and don't have RSC holes,\n // but they can still suspend in a client component during SSR.\n\n // If we managed to render all the validation boundaries, that means\n // that the client holes aren't blocking validation and we can disregard them.\n // Note that we don't even care whether they have suspense or not.\n if (allRequiredBoundariesRendered(boundaryState)) {\n dynamicValidation.hasAllowedClientDynamicAboveBoundary = true\n dynamicValidation.hasAllowedDynamic = true // Holes outside the boundary contribute to allowing dynamic metadata\n return\n } else {\n // TODO(instant-validation) TODO(NAR-787)\n // If shared parents blocked us from validating, we should only log\n // the errors from the innermost (segments), i.e. omit layouts whose\n // slots managed to render (because clearly they didn't block validation)\n const message = `Route \"${workStore.route}\": Could not validate \\`instant\\` because a Client Component in a parent segment prevented the page from rendering.`\n const error = addErrorContext(\n new Error(message),\n componentStack,\n effectiveCreateInstantStack\n )\n dynamicValidation.validationPreventingErrors.push(error)\n return\n }\n } else {\n // The hole originates inside the validation boundary.\n //\n // Check if we have a Suspense above the hole, but below the validation boundary.\n // If we do, then this dynamic usage wouldn't block a navigation to this subtree.\n // Conversely, if the nearest suspense is above the validation boundary, then this subtree would block.\n //\n // Note that in the component stack, children come before parents.\n //\n // Valid:\n // ...\n // at Suspense\n // ...\n // at __next_prefetch_validation_boundary__\n //\n // Invalid:\n // ...\n // at __next_prefetch_validation_boundary__\n // ...\n // at Suspense\n //\n const suspenseLocation = hasSuspenseRegex.exec(componentStack)\n if (suspenseLocation) {\n if (suspenseLocation.index < boundaryLocation.index) {\n dynamicValidation.hasAllowedDynamic = true\n return\n } else {\n // invalid - fallthrough\n }\n }\n }\n\n if (syncDynamicError) {\n if (\n effectiveCreateInstantStack !== null &&\n syncDynamicError.cause === undefined\n ) {\n syncDynamicError.cause = effectiveCreateInstantStack()\n }\n dynamicValidation.dynamicErrors.push(syncDynamicError)\n return\n }\n\n if (isClientHookDynamicError(dynamicReason)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(\n dynamicReason,\n componentStack,\n effectiveCreateInstantStack\n )\n )\n return\n }\n\n const error = addErrorContext(\n createBodyErrorInNavigation(kind, workStore.route),\n componentStack,\n effectiveCreateInstantStack\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n}\n\nfunction createBodyError(kind: StaticValidationHoleKind, route: string): Error {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeBodyError(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicBodyError(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createDynamicOrRuntimeBodyError(route)\n }\n}\n\nfunction createBodyErrorInNavigation(\n kind: InstantValidationHoleKind,\n route: string\n): Error {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeBodyErrorInNavigation(route)\n case DynamicHoleKind.Link:\n return createLinkBodyErrorInNavigation(route)\n case DynamicHoleKind.Navigation:\n return createNavigationBodyErrorInNavigation(route)\n case DynamicHoleKind.Prefetch:\n return createPrefetchBodyErrorInNavigation(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicBodyErrorInNavigation(route)\n }\n}\n\nfunction createMetadataError(kind: DynamicHoleKind, route: string): Error {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeMetadataError(route)\n case DynamicHoleKind.Link:\n return createLinkMetadataError(route)\n case DynamicHoleKind.Navigation:\n return createNavigationMetadataError(route)\n case DynamicHoleKind.Prefetch:\n return createPrefetchMetadataError(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicMetadataError(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createDynamicOrRuntimeMetadataError(route)\n }\n}\n\nfunction createViewportError(kind: DynamicHoleKind, route: string): Error {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeViewportError(route)\n case DynamicHoleKind.Link:\n return createLinkViewportError(route)\n case DynamicHoleKind.Navigation:\n return createNavigationViewportError(route)\n case DynamicHoleKind.Prefetch:\n return createPrefetchViewportError(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicViewportError(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createDynamicOrRuntimeViewportError(route)\n }\n}\n\nfunction createBodyErrorInStaticRoute(\n kind: StaticValidationHoleKind,\n route: string\n): Error {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeBodyErrorInStaticRoute(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicBodyErrorInStaticRoute(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createNonPrerenderableBodyErrorInStaticRoute(route)\n }\n}\n\nfunction createMetadataErrorInStaticRoute(\n kind: StaticValidationHoleKind,\n route: string\n) {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeMetadataErrorInStaticRoute(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicMetadataErrorInStaticRoute(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createNonPrerenderableMetadataErrorInStaticRoute(route)\n }\n}\n\nfunction createViewportErrorInStaticRoute(\n kind: StaticValidationHoleKind,\n route: string\n) {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeViewportErrorInStaticRoute(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicViewportErrorInStaticRoute(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createNonPrerenderableViewportErrorInStaticRoute(route)\n }\n}\n\nexport function trackThrownErrorInNavigation(\n workStore: WorkStore,\n dynamicValidation: InstantValidationState,\n thrownValue: unknown,\n componentStack: string,\n reactBrowserBailout: boolean\n) {\n const boundaryLocation =\n hasInstantValidationBoundaryRegex.exec(componentStack)\n if (!boundaryLocation) {\n // There's no validation boundary on the component stack.\n // This error may have blocked a boundary from rendering.\n\n // Wrap the error to provide component context.\n // This helps for errors from node_modules which would otherwise\n // have no useful stack information due to ignore-listing,\n // e.g. next/dynamic with `ssr: false`.\n if (reactBrowserBailout) {\n // React preserves Next's branded bailout reason as the error cause.\n // Replace the internal wrapper before storing the user-facing diagnostic.\n const browserBailoutReason = getReactBrowserBailoutReason(thrownValue)\n if (browserBailoutReason !== undefined) {\n const browserBailoutError = thrownValue as Error\n browserBailoutError.cause = browserBailoutReason\n }\n }\n\n const error = addErrorContext(\n new Error(\n 'An error occurred while attempting to validate instant UI. This error may be preventing the validation from completing.',\n { cause: thrownValue }\n ),\n componentStack,\n null\n )\n dynamicValidation.thrownErrorsOutsideBoundary.push(error)\n } else {\n // There's validation boundary on the component stack,\n // so we know this error didn't block a validation boundary from rendering.\n // However, this error might be hiding be hiding dynamic content that would\n // cause validation to fail.\n const suspenseLocation = hasSuspenseRegex.exec(componentStack)\n if (suspenseLocation) {\n if (suspenseLocation.index < boundaryLocation.index) {\n // There's a Suspense below the validation boundary but above this error's location.\n // This subtree can't fail instant validation because any potential\n // dynamic holes would be guarded by the Suspense anyway,\n // so we can allow this.\n return\n } else {\n // invalid - fallthrough\n }\n }\n if (reactBrowserBailout) {\n // React preserves Next's branded bailout reason as the error cause.\n // Replace the internal wrapper before storing the user-facing diagnostic.\n const browserBailoutReason = getReactBrowserBailoutReason(thrownValue)\n if (browserBailoutReason !== undefined) {\n const browserBailoutError = thrownValue as Error\n browserBailoutError.cause = browserBailoutReason\n }\n }\n\n const message = `Route \"${workStore.route}\": Could not validate \\`instant\\` because an error prevented the target segment from rendering.`\n const error = addErrorContext(\n new Error(message, { cause: thrownValue }),\n componentStack,\n null // TODO(instant-validation-build): conflicting use of cause\n )\n dynamicValidation.validationPreventingErrors.push(error)\n }\n}\n\nexport function trackDynamicHoleInStaticShell(\n dynamicReason: unknown,\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n clientDynamic: DynamicTrackingState,\n kind: DynamicHoleKind.Runtime | DynamicHoleKind.Dynamic\n) {\n const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic)\n\n if (hasOutletRegex.test(componentStack)) {\n trackOutletSuspenseAboveBody(componentStack, dynamicValidation)\n return\n } else if (hasMetadataRegex.test(componentStack)) {\n const error = addErrorContext(\n createMetadataError(kind, workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicMetadata = error\n return\n } else if (hasViewportRegex.test(componentStack)) {\n const error = addErrorContext(\n createViewportError(kind, workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n } else if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule.\n // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense\n // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering.\n dynamicValidation.hasAllowedDynamic = true\n dynamicValidation.hasSuspenseAboveBody = true\n return\n } else if (hasSuspenseRegex.test(componentStack)) {\n // this error had a Suspense boundary above it so we don't need to report it as a source\n // of disallowed\n dynamicValidation.hasAllowedDynamic = true\n return\n } else if (syncDynamicError) {\n dynamicValidation.dynamicErrors.push(syncDynamicError)\n return\n }\n\n if (isClientHookDynamicError(dynamicReason)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(dynamicReason, componentStack, null)\n )\n return\n }\n\n const error = addErrorContext(\n kind === DynamicHoleKind.Runtime\n ? createRuntimeBodyError(workStore.route)\n : createDynamicBodyError(workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n}\n\n/**\n * In dev mode, we prefer using the owner stack, otherwise the provided\n * component stack is used.\n */\nfunction addErrorContext(\n error: Error,\n componentStack: string,\n createInstantStack: (() => Error) | null\n) {\n const ownerStack =\n process.env.NODE_ENV !== 'production' && React.captureOwnerStack\n ? React.captureOwnerStack()\n : null\n\n if (createInstantStack !== null) {\n error.cause = createInstantStack()\n }\n // TODO go back to owner stack here if available. This is temporarily using componentStack to get the right\n //\n error.stack =\n error.name + ': ' + error.message + (ownerStack || componentStack)\n return error\n}\n\nexport enum PreludeState {\n Full = 0,\n Empty = 1,\n Errored = 2,\n}\n\nexport function logDisallowedDynamicError(\n workStore: WorkStore,\n error: Error\n): void {\n console.error(error)\n logBuildDebugHint(workStore.route)\n}\n\nexport function throwIfSyncIOUsed(\n workStore: WorkStore,\n serverDynamic: DynamicTrackingState\n) {\n if (serverDynamic.syncDynamicErrorWithStack) {\n logDisallowedDynamicError(\n workStore,\n serverDynamic.syncDynamicErrorWithStack\n )\n throw new StaticGenBailoutError()\n }\n}\n\nexport function throwIfDisallowedDynamic(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: DynamicValidationState,\n serverDynamic: DynamicTrackingState,\n allowEmptyStaticShell: boolean\n): void {\n const dynamicHoleKind = DynamicHoleKind.RuntimeOrDynamic\n\n throwIfSyncIOUsed(workStore, serverDynamic)\n\n // The dynamic metadata error is a mistake-detection signal. It fires when the\n // rest of the shell is otherwise fully static apart from metadata, suggesting\n // the dynamic data access in `generateMetadata` was probably unintentional.\n // That condition is independent of whether the user or build phase accepted\n // an empty shell, so we surface it before any opt-in bypass.\n if (\n prelude === PreludeState.Full &&\n dynamicValidation.hasAllowedDynamic === false &&\n dynamicValidation.hasDynamicMetadata\n ) {\n console.error(createMetadataError(dynamicHoleKind, workStore.route).message)\n throw new StaticGenBailoutError()\n }\n\n // Either flag expresses \"this shell is allowed to be empty/blocking\":\n // - `allowEmptyStaticShell` covers `instant = false` (user opt-in)\n // and the build-phase fallback-shell case.\n // - `hasSuspenseAboveBody` is the structural opt-in inside the user's root\n // layout.\n // Treat them as synonyms for the purpose of bypassing shell-failure errors.\n if (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody) {\n return\n }\n\n if (prelude !== PreludeState.Full) {\n // We didn't have any sync bailouts but there may be user code which\n // blocked the root. We would have captured these during the prerender\n // and can log them here and then terminate the build/validating render\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n for (let i = 0; i < dynamicErrors.length; i++) {\n logDisallowedDynamicError(workStore, dynamicErrors[i])\n }\n\n throw new StaticGenBailoutError()\n }\n\n // If we got this far then the only other thing that could be blocking\n // the root is dynamic Viewport. If this is dynamic then\n // you need to opt into that by adding a Suspense boundary above the body\n // to indicate your are ok with fully dynamic rendering.\n if (dynamicValidation.hasDynamicViewport) {\n console.error(\n createViewportError(dynamicHoleKind, workStore.route).message\n )\n throw new StaticGenBailoutError()\n }\n\n if (prelude === PreludeState.Empty) {\n // If we ever get this far then we messed up the tracking of invalid dynamic.\n // We still adhere to the constraint that you must produce a shell but invite the\n // user to report this as a bug in Next.js.\n console.error(\n `Route \"${workStore.route}\" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`\n )\n throw new StaticGenBailoutError()\n }\n }\n}\n\nexport function throwIfDisallowedDynamicInStaticRoute(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: DynamicValidationState,\n serverDynamic: DynamicTrackingState,\n isFallbackShell: boolean,\n allowEmptyStaticShell: boolean,\n isServerPartial: boolean\n): void {\n const reasons = getDisallowedReasonsInStaticRoute(\n workStore,\n prelude,\n dynamicValidation,\n serverDynamic,\n isFallbackShell,\n allowEmptyStaticShell,\n isServerPartial\n )\n if (reasons.length > 0) {\n for (const reason of reasons) {\n logDisallowedDynamicError(workStore, reason)\n }\n throw new StaticGenBailoutError()\n }\n}\n\nexport function getDisallowedReasonsInStaticRoute(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: DynamicValidationState,\n serverDynamic: DynamicTrackingState | null,\n isFallbackShell: boolean,\n allowEmptyStaticShell: boolean,\n isServerPartial: boolean\n): Error[] {\n if (serverDynamic && serverDynamic.syncDynamicErrorWithStack) {\n return [serverDynamic.syncDynamicErrorWithStack]\n }\n\n // We do a fallback shell prerender, but it's not meant to be validated --\n // we just need it to create the relevant prerender outputs.\n if (isFallbackShell) {\n return []\n }\n\n // Suspense-above-body and `instant = false` bypass reporting\n // that the shell is blocked. However, if we have non-prerenderable server\n // data, we still have to error, regardless of those two.\n if (\n !isServerPartial &&\n (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody)\n ) {\n return []\n }\n\n const { dynamicErrors } = dynamicValidation\n if (dynamicErrors.length > 0) {\n return dynamicErrors\n }\n\n // Dynamic data may have been passed into a client component without calling `use()`,\n // in which case we wouldn't see it during the prerender, but still need to error.\n // Fall back to a generic error message.\n if (isServerPartial) {\n return [\n new Error(\n `Route \"${workStore.route}\": Next.js encountered data that is not available during a static prerender, but is unable to provide a location.`\n ),\n ]\n }\n\n if (prelude === PreludeState.Empty || prelude === PreludeState.Errored) {\n // We've somehow ended up with an empty prelude but no dynamic errors.\n // We must've messed up the tracking somehow.\n return [\n new InvariantError(\n `Route \"${workStore.route}\" did not produce a static shell and Next.js was unable to determine a reason.`\n ),\n ]\n }\n return []\n}\n\nexport function getStaticShellDisallowedDynamicReasons(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: DynamicValidationState,\n allowEmptyStaticShell: boolean\n): Array {\n // The dynamic metadata error is a mistake-detection signal. It fires when the\n // rest of the shell is otherwise fully static apart from metadata, suggesting\n // the dynamic data access in `generateMetadata` was probably unintentional.\n // That condition is independent of whether the user or build phase accepted\n // an empty shell, so we surface it before any opt-in bypass.\n if (\n prelude === PreludeState.Full &&\n dynamicValidation.hasAllowedDynamic === false &&\n dynamicValidation.dynamicErrors.length === 0 &&\n dynamicValidation.dynamicMetadata\n ) {\n return [dynamicValidation.dynamicMetadata]\n }\n\n // Either flag expresses \"this shell is allowed to be empty/blocking\":\n // - `allowEmptyStaticShell` covers `instant = false` (user opt-in)\n // and the build-phase fallback-shell case.\n // - `hasSuspenseAboveBody` is the structural opt-in inside the user's root\n // layout.\n // Treat them as synonyms for the purpose of bypassing shell-failure errors.\n if (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody) {\n return []\n }\n\n if (prelude !== PreludeState.Full) {\n // We didn't have any sync bailouts but there may be user code which\n // blocked the root. We would have captured these during the prerender\n // and can log them here and then terminate the build/validating render\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n return dynamicErrors\n }\n\n if (prelude === PreludeState.Empty) {\n // If we ever get this far then we messed up the tracking of invalid dynamic.\n // We still adhere to the constraint that you must produce a shell but invite the\n // user to report this as a bug in Next.js.\n return [\n new InvariantError(\n `Route \"${workStore.route}\" did not produce a static shell and Next.js was unable to determine a reason.`\n ),\n ]\n }\n }\n // We had a non-empty prelude and there are no dynamic holes\n return []\n}\n\n/**\n * `errors` are validation failures that should be surfaced immediately.\n * `deferredFallback` carries a missing-boundary explanation that the caller\n * should hold back until *every* validation depth has been tried — a missing\n * boundary often just means a parent layout intentionally omitted a slot, and\n * a different depth's validation may surface a more meaningful error.\n */\nexport type NavigationValidationResult =\n // instances that block instant navigation\n | Array\n // validation was blocked with zero or more reasons\n | Error\n | AggregateError\n\nexport function getNavigationDisallowedDynamicReasons(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: InstantValidationState,\n validationSampleTracking: InstantValidationSampleTracking | null,\n boundaryState: ValidationBoundaryTracking,\n devRenderDidError: boolean\n): NavigationValidationResult {\n // If we have errors related to missing samples, those should take precedence over everything else.\n if (validationSampleTracking) {\n const { missingSampleErrors } = validationSampleTracking\n if (missingSampleErrors.length > 0) {\n return missingSampleErrors\n }\n }\n\n const { validationPreventingErrors } = dynamicValidation\n if (validationPreventingErrors.length > 0) {\n if (process.env.__NEXT_DEV_SERVER && devRenderDidError) {\n // The dev render already surfaced server errors to the user.\n // The same errors likely caused validation to be inconclusive,\n // so reporting them again as validation failures would be noisy.\n return []\n }\n return validationPreventingErrors\n }\n\n // NOTE: We don't care about Suspense above body here,\n // we're only concerned with the validation boundary\n if (prelude !== PreludeState.Full) {\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n return dynamicErrors\n }\n\n if (\n prelude === PreludeState.Empty &&\n !dynamicValidation.hasAllowedClientDynamicAboveBoundary &&\n allRequiredBoundariesRendered(boundaryState)\n ) {\n // If we ever get this far then we messed up the tracking of invalid\n // dynamic. (When boundaries are missing the deferred fallback below\n // will surface a more useful error.)\n return new InvariantError(\n `Route \"${workStore.route}\" failed to render during instant validation and Next.js was unable to determine a reason.`\n )\n }\n } else {\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n return dynamicErrors\n }\n\n if (\n dynamicValidation.hasAllowedDynamic === false &&\n dynamicValidation.dynamicMetadata\n ) {\n return [dynamicValidation.dynamicMetadata]\n }\n }\n\n // Missing boundaries on their own aren't a strong signal — a parent\n // layout may legitimately omit a slot. Defer this so the caller can\n // try shallower validation depths first; if every depth comes up\n // empty we still want to surface this so the user is made aware that\n // validation didn't complete. When we add a markers API, the\n // marker-based variant of this check can become strict again.\n if (!allRequiredBoundariesRendered(boundaryState)) {\n const { thrownErrorsOutsideBoundary } = dynamicValidation\n const rootInstantStack = dynamicValidation.slotStacks[0]\n if (thrownErrorsOutsideBoundary.length === 0) {\n const missingFiles: string[] = []\n for (const [id, filePaths] of boundaryState.requiredIds) {\n if (!boundaryState.renderedIds.has(id)) {\n for (const filePath of filePaths) {\n let normalized = filePath\n .replace(/^\\[project\\][\\\\/]?/, '')\n .replace(process.cwd() + '/', '')\n .replace(process.cwd() + '\\\\', '')\n missingFiles.push(normalized)\n }\n }\n }\n missingFiles.sort()\n return createUnrenderedSegmentError(workStore.route, missingFiles)\n } else if (process.env.__NEXT_DEV_SERVER && devRenderDidError) {\n // Errors outside the boundary likely blocked it from rendering,\n // but they're already being reported to the user via the dev\n // render. Suppress the validation failure to avoid noise.\n return []\n } else if (thrownErrorsOutsideBoundary.length === 1) {\n const message = `Route \"${workStore.route}\": Could not validate \\`instant\\` because the target segment was prevented from rendering, likely due to the following error.`\n const error = rootInstantStack !== null ? rootInstantStack() : new Error()\n error.name = 'Error'\n error.message = message\n return new AggregateError([\n error,\n thrownErrorsOutsideBoundary[0] as Error,\n ])\n } else {\n const message = `Route \"${workStore.route}\": Could not validate \\`instant\\` because the target segment was prevented from rendering, likely due to one of the following errors.`\n const error = rootInstantStack !== null ? rootInstantStack() : new Error()\n error.name = 'Error'\n error.message = message\n return new AggregateError([\n error,\n ...(thrownErrorsOutsideBoundary as Error[]),\n ])\n }\n }\n\n // We had a non-empty prelude and there are no dynamic holes\n return []\n}\n"],"names":["React","DynamicServerError","StaticGenBailoutError","getStagedRenderingController","isClientHookDynamicError","METADATA_BOUNDARY_NAME","VIEWPORT_BOUNDARY_NAME","OUTLET_BOUNDARY_NAME","ROOT_LAYOUT_BOUNDARY_NAME","scheduleOnNextTick","createRuntimeBodyError","createDynamicBodyError","createRuntimeBodyErrorInNavigation","createNavigationBodyErrorInNavigation","createPrefetchBodyErrorInNavigation","createDynamicBodyErrorInNavigation","createDynamicOrRuntimeBodyError","createRuntimeMetadataError","createDynamicMetadataError","createRuntimeViewportError","createNavigationViewportError","createPrefetchViewportError","createDynamicViewportError","createDynamicOrRuntimeViewportError","createDynamicOrRuntimeMetadataError","logBuildDebugHint","createLinkBodyErrorInNavigation","createLinkMetadataError","createLinkViewportError","createNavigationMetadataError","createPrefetchMetadataError","createNonPrerenderableMetadataErrorInStaticRoute","createNonPrerenderableViewportErrorInStaticRoute","createNonPrerenderableBodyErrorInStaticRoute","createRuntimeBodyErrorInStaticRoute","createDynamicBodyErrorInStaticRoute","createRuntimeMetadataErrorInStaticRoute","createDynamicMetadataErrorInStaticRoute","createRuntimeViewportErrorInStaticRoute","createDynamicViewportErrorInStaticRoute","InvariantError","INSTANT_VALIDATION_BOUNDARY_NAME","INSTANT_SLOT_MARKER_PREFIX","INSTANT_SLOT_MARKER_SUFFIX","allRequiredBoundariesRendered","createUnrenderedSegmentError","getReactBrowserBailoutReason","createDynamicTrackingState","isDebugDynamicAccesses","dynamicAccesses","syncDynamicErrorWithStack","syncDynamicErrorWithStackPostMicrotask","createDynamicValidationState","hasSuspenseAboveBody","hasDynamicMetadata","dynamicMetadata","hasDynamicViewport","hasAllowedDynamic","dynamicErrors","getPendingClientSyncDynamicError","clientDynamic","getFirstDynamicReason","trackingState","expression","markCurrentScopeAsDynamic","store","workUnitStore","type","forceDynamic","forceStatic","dynamicShouldError","route","revalidate","err","dynamicUsageDescription","dynamicUsageStack","stack","markRequestStoreAsDynamic","throwToInterruptStaticGeneration","prerenderStore","trackDynamicDataInDynamicRender","requestStore","process","env","__NEXT_DEV_SERVER","phase","usedDynamic","abortOnSynchronousDynamicDataAccess","reason","error","createPrerenderInterruptedError","controller","abort","dynamicTracking","push","Error","undefined","abortOnSynchronousPlatformIOAccess","errorWithStack","queueMicrotask","abortAndThrowOnSynchronousRequestDataAccess","prerenderSignal","signal","aborted","NEXT_PRERENDER_INTERRUPTED","message","digest","isPrerenderInterruptedError","accessedDynamicData","length","consumeDynamicAccess","serverDynamic","formatDynamicAPIAccesses","filter","access","map","split","slice","line","includes","join","createHangingInputAbortSignal","AbortController","cacheSignal","inputReady","then","stagedRendering","finalStage","waitForStage","noop","annotateDynamicAccess","hasSuspenseRegex","bodyAndImplicitTags","hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex","RegExp","hasMetadataRegex","hasViewportRegex","hasOutletRegex","hasInstantValidationBoundaryRegex","slotMarkerRegex","resolveInstantStack","componentStack","dynamicValidation","slotStacks","match","exec","slotIndex","parseInt","slotStack","trackOutletSuspenseAboveBody","test","trackDynamicAccessInStaticRoute","dynamicReason","workStore","isServerPartial","kind","syncDynamicError","addErrorContext","createMetadataErrorInStaticRoute","createViewportErrorInStaticRoute","hasSuspense","createBodyErrorInStaticRoute","createBodyError","trackAllowedDynamicAccess","dynamicHoleKind","DynamicHoleKind","createInstantValidationState","hasAllowedClientDynamicAboveBoundary","validationPreventingErrors","thrownErrorsOutsideBoundary","trackDynamicHoleInNavigation","boundaryState","effectiveCreateInstantStack","createMetadataError","createViewportError","boundaryLocation","suspenseLocation","index","cause","createBodyErrorInNavigation","trackThrownErrorInNavigation","thrownValue","reactBrowserBailout","browserBailoutReason","browserBailoutError","trackDynamicHoleInStaticShell","createInstantStack","ownerStack","NODE_ENV","captureOwnerStack","name","PreludeState","logDisallowedDynamicError","console","throwIfSyncIOUsed","throwIfDisallowedDynamic","prelude","allowEmptyStaticShell","i","throwIfDisallowedDynamicInStaticRoute","isFallbackShell","reasons","getDisallowedReasonsInStaticRoute","getStaticShellDisallowedDynamicReasons","getNavigationDisallowedDynamicReasons","validationSampleTracking","devRenderDidError","missingSampleErrors","rootInstantStack","missingFiles","id","filePaths","requiredIds","renderedIds","has","filePath","normalized","replace","cwd","sort","AggregateError"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 3073, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/instant-validation/boundary-constants.ts"],"sourcesContent":["export const INSTANT_VALIDATION_BOUNDARY_NAME =\n '__next_instant_validation_boundary__'\n\nexport const INSTANT_SLOT_MARKER_PREFIX = '__next_instant_slot_'\nexport const INSTANT_SLOT_MARKER_SUFFIX = '__'\n"],"names":["INSTANT_VALIDATION_BOUNDARY_NAME","INSTANT_SLOT_MARKER_PREFIX","INSTANT_SLOT_MARKER_SUFFIX"],"mappings":";;;;;;;;AAAO,MAAMA,mCACX,uCAAsC;AAEjC,MAAMC,6BAA6B,uBAAsB;AACzD,MAAMC,6BAA6B,KAAI","ignoreList":[0]}}, + {"offset": {"line": 3088, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/instant-validation/boundary-tracking.tsx"],"sourcesContent":["export type ValidationBoundaryTracking = {\n /**\n * Map from boundary id (the SegmentPath where a validation boundary is\n * placed) to the file paths of modules inside that boundary's subtree.\n * When the boundary spans multiple parallel slots, each slot contributes\n * its own first-found module path so all unrendered segments can be\n * reported together.\n */\n requiredIds: Map\n renderedIds: Set\n}\n\nexport function createValidationBoundaryTracking(\n /** Pass if the render is expected to render the same IDs as a previous one. */\n matchPrevious?: ValidationBoundaryTracking\n): ValidationBoundaryTracking {\n return {\n requiredIds: matchPrevious ? new Map(matchPrevious.requiredIds) : new Map(),\n renderedIds: new Set(),\n }\n}\n\nexport function allRequiredBoundariesRendered(\n state: ValidationBoundaryTracking\n): boolean {\n for (const id of state.requiredIds.keys()) {\n if (!state.renderedIds.has(id)) {\n return false\n }\n }\n return true\n}\n"],"names":["createValidationBoundaryTracking","matchPrevious","requiredIds","Map","renderedIds","Set","allRequiredBoundariesRendered","state","id","keys","has"],"mappings":";;;;;;AAYO,SAASA,iCACd,6EAA6E,GAC7EC,aAA0C;IAE1C,OAAO;QACLC,aAAaD,gBAAgB,IAAIE,IAAIF,cAAcC,WAAW,IAAI,IAAIC;QACtEC,aAAa,IAAIC;IACnB;AACF;AAEO,SAASC,8BACdC,KAAiC;IAEjC,KAAK,MAAMC,MAAMD,MAAML,WAAW,CAACO,IAAI,GAAI;QACzC,IAAI,CAACF,MAAMH,WAAW,CAACM,GAAG,CAACF,KAAK;YAC9B,OAAO;QACT;IACF;IACA,OAAO;AACT","ignoreList":[0]}}, + {"offset": {"line": 3112, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/manifests-singleton.ts"],"sourcesContent":["import type { ActionManifest } from '../../build/webpack/plugins/flight-client-entry-plugin'\nimport type { ClientReferenceManifest } from '../../build/webpack/plugins/flight-manifest-plugin'\nimport type { DeepReadonly } from '../../shared/lib/deep-readonly'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport { pathHasPrefix } from '../../shared/lib/router/utils/path-has-prefix'\nimport { removePathPrefix } from '../../shared/lib/router/utils/remove-path-prefix'\nimport { mightBeServerReferenceId } from '../../shared/lib/server-reference-info'\nimport { wellKnownProperties } from '../../shared/lib/utils/reflect-utils'\nimport { workAsyncStorage } from './work-async-storage.external'\nimport {\n workUnitAsyncStorage,\n type WorkUnitStore,\n} from './work-unit-async-storage.external'\n\nexport interface ServerModuleMap {\n readonly [name: string]: {\n readonly id: string | number\n readonly name: string\n readonly chunks: Readonly> // currently not used\n readonly async?: boolean\n }\n}\n\nexport function getActionNotFoundError(actionId: string | null): Error {\n return new Error(\n `Failed to find Server Action${actionId ? ` \"${actionId}\"` : ''}. This request might be from an older or newer deployment.\\nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action`\n )\n}\n\nexport function getInvalidServerReferenceIdError(id: string): Error {\n // `id` is arbitrary client-provided input. Unlike the not-found case, it has\n // not passed the length gate and can reach this error via a malformed server\n // reference in an action payload, so it may be of any length and contain\n // control characters. `JSON.stringify` escapes newlines and quotes so it\n // can't forge log lines, and truncating overly long ids prevents log\n // flooding. Ids at or below the cap are logged in full so that we only add an\n // ellipsis to ids that are meaningfully longer than the truncated length.\n const encoded = JSON.stringify(\n id.length > MAX_LOGGED_SERVER_REFERENCE_ID_LENGTH\n ? id.slice(0, TRUNCATED_SERVER_REFERENCE_ID_LENGTH) + '…'\n : id\n )\n\n return new Error(\n `The Server Reference ID did not match the expected format. Received ${encoded}.\\nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action`\n )\n}\n\n// Ids at or below the cap are logged in full. Longer ids are truncated to the\n// shorter length and marked with an ellipsis, so the cap leaves headroom over\n// the truncated length rather than ellipsizing ids that are barely too long.\nconst MAX_LOGGED_SERVER_REFERENCE_ID_LENGTH = 100\nconst TRUNCATED_SERVER_REFERENCE_ID_LENGTH = 90\n\n// This is a global singleton that is, among other things, also used to\n// encode/decode bound args of server function closures. This can't be using a\n// AsyncLocalStorage as it might happen at the module level.\nconst MANIFESTS_SINGLETON = Symbol.for('next.server.manifests')\n\ninterface RegisteredClientReferenceManifest {\n /**\n * The page the manifest was registered with. Routes are normalized app paths,\n * which is lossy (route groups, parallel slots and the trailing `/page` are\n * stripped), so this is kept alongside for consumers that need to address the\n * manifest on disk again rather than reversing the normalization.\n */\n readonly page: string\n readonly clientReferenceManifest: DeepReadonly\n}\n\ninterface ManifestsSingleton {\n readonly clientReferenceManifestsPerRoute: Map<\n string,\n RegisteredClientReferenceManifest\n >\n readonly proxiedClientReferenceManifest: DeepReadonly\n readonly rscModuleMappingForUseCache: DeepReadonly<\n ClientReferenceManifest['rscModuleMapping']\n >\n serverActionsManifest: DeepReadonly\n serverModuleMap: ServerModuleMap\n}\n\ntype GlobalThisWithManifests = typeof globalThis & {\n [MANIFESTS_SINGLETON]?: ManifestsSingleton\n}\n\ntype ClientReferenceManifestMappingProp =\n | 'clientModules'\n | 'rscModuleMapping'\n | 'edgeRscModuleMapping'\n | 'ssrModuleMapping'\n | 'edgeSSRModuleMapping'\n\nconst globalThisWithManifests = globalThis as GlobalThisWithManifests\n\nfunction isUseCacheStore(workUnitStore: WorkUnitStore | undefined): boolean {\n if (!workUnitStore) {\n return false\n }\n\n switch (workUnitStore.type) {\n case 'cache':\n case 'private-cache':\n return true\n case 'request':\n case 'unstable-cache':\n case 'prerender':\n case 'prerender-client':\n case 'prerender-legacy':\n case 'prerender-runtime':\n case 'validation-client':\n case 'build-time-generator':\n return false\n default:\n return workUnitStore satisfies never\n }\n}\n\nfunction createProxiedClientReferenceManifest(\n clientReferenceManifestsPerRoute: Map<\n string,\n RegisteredClientReferenceManifest\n >\n): Pick<\n ManifestsSingleton,\n 'proxiedClientReferenceManifest' | 'rscModuleMappingForUseCache'\n> {\n const createMappingProxy = (prop: ClientReferenceManifestMappingProp) => {\n return new Proxy(\n {},\n {\n get(_, id: string) {\n const workStore = workAsyncStorage.getStore()\n\n if (workStore) {\n const currentManifest = clientReferenceManifestsPerRoute.get(\n workStore.route\n )?.clientReferenceManifest\n\n if (currentManifest?.[prop][id]) {\n if (\n workStore.durableUseCacheEntries &&\n prop === 'clientModules'\n ) {\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (isUseCacheStore(workUnitStore)) {\n // This creates a mapping so that a given client references with name\n // `app/foo/client.tsx` is serialized as\n // ```\n // { id: `app/foo/client.tsx`, name: `*`, chunks: [\"stub\"], async: false }\n // ```\n // instead of the actual\n // ```\n // { id: 19132, name: `*`, chunks: [\"/_next/static/chunks/...\"], async: true }\n // ```\n //\n // This means that not the unstable client module id is used for the cache entry,\n // but the stable client reference name. The stable client reference name is\n // resolved against the current manifest via rscModuleMappingForUseCache when the\n // entry is read.\n const clientReferenceManifestEntry =\n currentManifest.clientModules[id]\n return {\n // Return `id` instead of `clientReferenceManifestEntry.id` here.\n id,\n name: clientReferenceManifestEntry.name,\n // Set a sentinel value just in case this does ends up being read at some point\n // in the future, then at least we'll get \"Failed to load chunk stub (404)\"\n // instead of \"Failed to load module 1234\".\n chunks: ['stub'],\n async: false,\n }\n }\n }\n return currentManifest[prop][id]\n }\n\n // In development, we also check all other manifests to see if the\n // module exists there. This is to support a scenario where React's\n // I/O tracking (dev-only) creates a connection from one page to\n // another through an emitted async I/O node that references client\n // components from the other page, e.g. in owner props.\n // TODO: Maybe we need to add a `debugBundlerConfig` option to React\n // to avoid this workaround. The current workaround has the\n // disadvantage that one might accidentally or intentionally share\n // client references across pages (e.g. by storing them in a global\n // variable), which would then only be caught in production.\n if (process.env.NODE_ENV !== 'production') {\n for (const [\n route,\n { page, clientReferenceManifest },\n ] of clientReferenceManifestsPerRoute) {\n if (route === workStore.route) {\n continue\n }\n\n const entry = clientReferenceManifest[prop][id]\n\n if (entry !== undefined) {\n if (process.env.__NEXT_DEV_SERVER) {\n // The dev validation worker rebuilds this registry in its\n // own thread, seeded with only the route it validates, so\n // it has to be told which other manifests it needs.\n workStore.additionalClientReferenceManifestPages ??=\n new Set()\n workStore.additionalClientReferenceManifestPages.add(page)\n }\n\n return entry\n }\n }\n }\n } else {\n // If there's no work store defined, we can assume that a client\n // reference manifest is needed during module evaluation, e.g. to\n // create a server function using a higher-order function. This\n // might also use client components which need to be serialized by\n // Flight, and therefore client references need to be resolvable. In\n // that case we search all page manifests to find the module.\n for (const {\n clientReferenceManifest,\n } of clientReferenceManifestsPerRoute.values()) {\n const entry = clientReferenceManifest[prop][id]\n\n if (entry !== undefined) {\n return entry\n }\n }\n }\n\n return undefined\n },\n }\n )\n }\n\n const mappingProxies = new Map<\n ClientReferenceManifestMappingProp,\n ReturnType\n >()\n\n const proxiedClientReferenceManifest = new Proxy(\n {},\n {\n get(_, prop) {\n const workStore = workAsyncStorage.getStore()\n\n switch (prop) {\n case 'moduleLoading':\n case 'entryCSSFiles':\n case 'entryJSFiles': {\n if (!workStore) {\n throw new InvariantError(\n `Cannot access \"${prop}\" without a work store.`\n )\n }\n\n const registeredManifest = clientReferenceManifestsPerRoute.get(\n workStore.route\n )\n\n if (!registeredManifest) {\n throw new InvariantError(\n `The client reference manifest for route \"${workStore.route}\" does not exist.`\n )\n }\n\n return registeredManifest.clientReferenceManifest[prop]\n }\n case 'clientModules':\n case 'rscModuleMapping':\n case 'edgeRscModuleMapping':\n case 'ssrModuleMapping':\n case 'edgeSSRModuleMapping': {\n let proxy = mappingProxies.get(prop)\n\n if (!proxy) {\n proxy = createMappingProxy(prop)\n mappingProxies.set(prop, proxy)\n }\n\n return proxy\n }\n default: {\n throw new InvariantError(\n `This is a proxied client reference manifest. The property \"${String(prop)}\" is not handled.`\n )\n }\n }\n },\n }\n ) as DeepReadonly\n\n // Performs the inverse of the clientModules isUseCacheStore(workUnitStore) special case above:\n //\n // For cache functions, don't do the usual rscModuleMapping lookup by module ID, but instead look\n // up by the stable client reference name. This is because cache entries must not depend on\n // build-local module IDs or chunks. So we need a second layer of indirection here to do client\n // reference name -> client module id -> rsc module mapping lookup.\n //\n // This one is created separately (not inside proxiedClientReferenceManifest.rscModuleMapping) as\n // we don't necessarily are inside a workUnitStore when we need to access this mapping (as opposed\n // to the clientModules mapping, which always has the ALS set).\n const rscModuleMappingForUseCache = new Proxy(\n {},\n {\n get(\n _,\n key: string\n ): ClientReferenceManifest['rscModuleMapping'][string] | undefined {\n const workStore = workAsyncStorage.getStore()\n if (workStore && workStore.durableUseCacheEntries) {\n const currentManifest = clientReferenceManifestsPerRoute.get(\n workStore.route\n )?.clientReferenceManifest\n\n const clientReferenceName = key\n const clientReferenceManifestEntry =\n currentManifest?.clientModules[clientReferenceName]\n if (clientReferenceManifestEntry === undefined) {\n return undefined\n }\n\n const clientModuleId = clientReferenceManifestEntry.id\n return currentManifest?.rscModuleMapping[clientModuleId]\n } else {\n return proxiedClientReferenceManifest.rscModuleMapping[key]\n }\n },\n }\n ) as DeepReadonly\n\n return { proxiedClientReferenceManifest, rscModuleMappingForUseCache }\n}\n\n/**\n * This function creates a Flight-acceptable server module map proxy from our\n * Server Reference Manifest similar to our client module map. This is because\n * our manifest contains a lot of internal Next.js data that are relevant to the\n * runtime, workers, etc. that React doesn't need to know.\n */\nfunction createServerModuleMap(): ServerModuleMap {\n return new Proxy(Object.create(null) as ServerModuleMap, {\n get: (target, id: string | symbol, receiver) => {\n // React's debug serialization can probe the module map like a plain object.\n // These probes are not server reference lookups.\n if (typeof id !== 'string') {\n return Reflect.get(target, id, receiver)\n }\n\n if (wellKnownProperties.has(id)) {\n return Reflect.get(target, id, receiver)\n }\n\n if (!mightBeServerReferenceId(id)) {\n throw getInvalidServerReferenceIdError(id)\n }\n\n const workers =\n getServerActionsManifest()[\n process.env.NEXT_RUNTIME === 'edge' ? 'edge' : 'node'\n ]?.[id]?.workers\n\n if (!workers) {\n throw getActionNotFoundError(id)\n }\n\n const workStore = workAsyncStorage.getStore()\n\n let workerEntry:\n | {\n moduleId: string | number\n async: boolean\n durability?: {\n codeHash: string\n runtimeEnvVarsRead: readonly string[]\n runtimeEnvVarsExistence: readonly string[]\n }\n }\n | undefined\n\n if (workStore) {\n workerEntry = workers[normalizeWorkerPageName(workStore.page)]\n } else {\n // If there's no work store defined, we can assume that a server\n // module map is needed during module evaluation, e.g. to create a\n // server action using a higher-order function. Therefore it should be\n // safe to return any entry from the manifest that matches the action\n // ID. They all refer to the same module ID, which must also exist in\n // the current page bundle. TODO: This is currently not guaranteed in\n // Turbopack, and needs to be fixed.\n workerEntry = Object.values(workers).at(0)\n }\n\n if (!workerEntry) {\n throw getActionNotFoundError(id)\n }\n\n const { moduleId, async, durability } = workerEntry\n\n return {\n id: moduleId,\n name: id,\n chunks: [],\n async,\n durability,\n }\n },\n })\n}\n\n/**\n * The flight entry loader keys actions by bundlePath. bundlePath corresponds\n * with the relative path (including 'app') to the page entrypoint.\n */\nexport function normalizeWorkerPageName(pageName: string) {\n if (pathHasPrefix(pageName, 'app')) {\n return pageName\n }\n\n return 'app' + pageName\n}\n\n/**\n * Converts a bundlePath (relative path to the entrypoint) to a routable page\n * name.\n */\nfunction denormalizeWorkerPageName(bundlePath: string) {\n return normalizeAppPath(removePathPrefix(bundlePath, 'app'))\n}\n\n/**\n * Checks if the requested action has a worker for the current page.\n * If not, it returns the first worker that has a handler for the action.\n */\nexport function selectWorkerForForwarding(\n actionId: string,\n pageName: string\n): string | undefined {\n const serverActionsManifest = getServerActionsManifest()\n const workers =\n serverActionsManifest[\n process.env.NEXT_RUNTIME === 'edge' ? 'edge' : 'node'\n ][actionId]?.workers\n\n // There are no workers to handle this action, nothing to forward to.\n if (!workers) {\n return\n }\n\n // If there is an entry for the current page, we don't need to forward.\n if (workers[normalizeWorkerPageName(pageName)]) {\n return\n }\n\n // Otherwise, grab the first worker that has a handler for this action id.\n return denormalizeWorkerPageName(Object.keys(workers)[0])\n}\n\nexport function setManifestsSingleton({\n page,\n clientReferenceManifest,\n serverActionsManifest: rawServerActionsManifest,\n}: {\n page: string\n clientReferenceManifest: DeepReadonly\n serverActionsManifest: DeepReadonly\n}) {\n const existingSingleton = globalThisWithManifests[MANIFESTS_SINGLETON]\n const route = normalizeAppPath(page)\n\n const serverActionsManifest: DeepReadonly = {\n encryptionKey: rawServerActionsManifest.encryptionKey,\n // Use null-prototypes for the action objects to prevent prototype pollution\n // from affecting action ID lookups.\n node: Object.assign(Object.create(null), rawServerActionsManifest.node),\n edge: Object.assign(Object.create(null), rawServerActionsManifest.edge),\n }\n\n if (existingSingleton) {\n existingSingleton.clientReferenceManifestsPerRoute.set(route, {\n page,\n clientReferenceManifest,\n })\n\n existingSingleton.serverActionsManifest = serverActionsManifest\n } else {\n const clientReferenceManifestsPerRoute = new Map<\n string,\n RegisteredClientReferenceManifest\n >([[route, { page, clientReferenceManifest }]])\n\n const { proxiedClientReferenceManifest, rscModuleMappingForUseCache } =\n createProxiedClientReferenceManifest(clientReferenceManifestsPerRoute)\n\n globalThisWithManifests[MANIFESTS_SINGLETON] = {\n clientReferenceManifestsPerRoute,\n proxiedClientReferenceManifest,\n rscModuleMappingForUseCache,\n serverActionsManifest,\n serverModuleMap: createServerModuleMap(),\n }\n }\n}\n\nfunction getManifestsSingleton(): ManifestsSingleton {\n const manifestSingleton = globalThisWithManifests[MANIFESTS_SINGLETON]\n\n if (!manifestSingleton) {\n throw new InvariantError('The manifests singleton was not initialized.')\n }\n\n return manifestSingleton\n}\n\n/**\n * Returns the usual client_reference_manifest.json.\n *\n * In dev, it also looks up references of other pages (due to overlapping processing on\n * navigations).\n *\n * Inside a use-cache workUnitStore, clientModules instead map to a stable dummy value (see comments\n * above).\n */\nexport function getClientReferenceManifest(): DeepReadonly {\n return getManifestsSingleton().proxiedClientReferenceManifest\n}\n\n/**\n * A mapping of client reference names to the RSC module id. (So a double lookup of clientModules ->\n * rscModuleMapping)\n */\nexport function getRscModuleMappingForUseCache(): DeepReadonly<\n ClientReferenceManifest['rscModuleMapping']\n> {\n return getManifestsSingleton().rscModuleMappingForUseCache\n}\n\nexport function getServerActionsManifest(): DeepReadonly {\n return getManifestsSingleton().serverActionsManifest\n}\n\nexport function getServerModuleMap() {\n return getManifestsSingleton().serverModuleMap\n}\n"],"names":["InvariantError","normalizeAppPath","pathHasPrefix","removePathPrefix","mightBeServerReferenceId","wellKnownProperties","workAsyncStorage","workUnitAsyncStorage","getActionNotFoundError","actionId","Error","getInvalidServerReferenceIdError","id","encoded","JSON","stringify","length","MAX_LOGGED_SERVER_REFERENCE_ID_LENGTH","slice","TRUNCATED_SERVER_REFERENCE_ID_LENGTH","MANIFESTS_SINGLETON","Symbol","for","globalThisWithManifests","globalThis","isUseCacheStore","workUnitStore","type","createProxiedClientReferenceManifest","clientReferenceManifestsPerRoute","createMappingProxy","prop","Proxy","get","_","workStore","getStore","currentManifest","route","clientReferenceManifest","durableUseCacheEntries","clientReferenceManifestEntry","clientModules","name","chunks","async","process","env","NODE_ENV","page","entry","undefined","__NEXT_DEV_SERVER","additionalClientReferenceManifestPages","Set","add","values","mappingProxies","Map","proxiedClientReferenceManifest","registeredManifest","proxy","set","String","rscModuleMappingForUseCache","key","clientReferenceName","clientModuleId","rscModuleMapping","createServerModuleMap","Object","create","target","receiver","getServerActionsManifest","Reflect","has","workers","NEXT_RUNTIME","workerEntry","normalizeWorkerPageName","at","moduleId","durability","pageName","denormalizeWorkerPageName","bundlePath","selectWorkerForForwarding","serverActionsManifest","keys","setManifestsSingleton","rawServerActionsManifest","existingSingleton","encryptionKey","node","assign","edge","serverModuleMap","getManifestsSingleton","manifestSingleton","getClientReferenceManifest","getRscModuleMappingForUseCache","getServerModuleMap"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 3491, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/segment-config/ensure-static.ts"],"sourcesContent":["import type {\n AppSegmentConfig,\n EnsureStatic,\n} from '../../../build/segment-config/app/app-segment-config'\nimport { parseLoaderTree } from '../../../shared/lib/router/utils/parse-loader-tree'\nimport {\n getLayoutOrPageModule,\n type LoaderTree,\n} from '../../lib/app-dir-module'\n\n/**\n * The outcome of resolving a route's `ensureStatic` config.\n * The ordering is intentional -- higher values indicate a\n * more constrained route that forces more request kinds to be static.\n *\n * A constraint also implies all its predecessors:\n * - `Prefetch` implies `Shell`, i.e. if prefetches are static, so are shells.\n * - `Navigation` implies `Prefetch` and `Shell`, i.e. if the whole page is static,\n * then so are its shells and prefetches.\n *\n * Note that this flattens `\"auto\"` and `false` into `None`.\n * This is because rendering code does not need to distinguish them --\n * both indicate that the route follows normal Partial Prefetching semantics\n * and does not force anything to be static.\n * However, it is only correct to collapse them into one *after* resolving the\n * config for the entire route, because they have different interactions with\n * configs from other segments on the same route.\n */\nexport enum EnsureStaticLevel {\n /** The route follows standard Partial Prefetching semantics. */\n None = 0,\n /** The route requires that app shells must be statically prerendered. */\n Shell = 1,\n /** The route requires that app shells and prefetches must be statically prerendered. */\n Prefetch = 2,\n /** The route requires that app shells, prefetches, and the whole page must be statically prerendered. */\n Navigation = 3,\n}\n\nfunction getEnsureStaticLevel(ensureStatic: EnsureStatic) {\n switch (ensureStatic) {\n case 'auto':\n case false: {\n return EnsureStaticLevel.None\n }\n case 'shell': {\n return EnsureStaticLevel.Shell\n }\n case 'prefetch': {\n return EnsureStaticLevel.Prefetch\n }\n case 'navigation': {\n return EnsureStaticLevel.Navigation\n }\n }\n}\n\nexport async function resolveEnsureStaticLevel(\n tree: LoaderTree,\n partialPrefetching: boolean\n): Promise {\n return getEnsureStaticLevel(\n await resolveEnsureStaticConfig(tree, partialPrefetching)\n )\n}\n\nexport async function resolveEnsureStaticConfig(\n tree: LoaderTree,\n partialPrefetching: boolean\n): Promise> {\n let { config, filePath } = await resolveEnsureStaticConfigImpl(tree)\n\n if (!partialPrefetching) {\n // If Partial Prefetching is not enabled for this route, we only support\n // a subset of `ensureStatic` values.\n // (We error in `getAppPageStaticInfo` if `ensureStatic` is used without enabling\n // Cache Components, so we don't have to assert that here)\n switch (config) {\n case 'auto': {\n // Default to the equivalent of Cache Components prefetching behavior.\n config = 'prefetch'\n break\n }\n case false:\n case 'shell': {\n // Not meaningful in Cache Components without Partial Prefetching\n const originalConfig = config\n config = 'prefetch'\n console.warn(\n `${formatEnsureStaticExport(originalConfig)} has no effect unless the route is using Partial Prefetching.` +\n `\\n (from: ${filePath})`\n )\n break\n }\n case 'prefetch':\n // Equivalent to regular Cache Components behavior, so we allow it\n // without warning to avoid noise when doing gradual opt-in\n break\n case 'navigation':\n // Meaningful in Cache Components, even without Partial Prefetching\n break\n default:\n config satisfies never\n }\n }\n\n if (config === false) {\n // `false` and \"auto\" are equivalent once resolved.\n return 'auto'\n } else {\n return config\n }\n}\n\ntype EnsureStaticWithSource = {\n config: EnsureStatic\n filePath: string | null\n}\n\nasync function resolveEnsureStaticConfigImpl(\n tree: LoaderTree\n): Promise {\n const { mod: layoutOrPageMod, filePath } = await getLayoutOrPageModule(tree)\n\n const config = getEnsureStaticConfigForModule(layoutOrPageMod)\n\n const parentResult: EnsureStaticWithSource = {\n config,\n filePath: filePath ?? null,\n }\n\n // Walk the slots if any and validate that they don't have incompatible configs\n // with each other. If compatible, pick the most constrained value from the slots.\n let slotsResult: EnsureStaticWithSource | null = null\n let slotResultKey: string | null = null\n const { parallelRoutes } = parseLoaderTree(tree)\n for (const parallelRouteKey in parallelRoutes) {\n const parallelRoute = parallelRoutes[parallelRouteKey]\n const childResult = await resolveEnsureStaticConfigImpl(parallelRoute)\n if (!slotsResult) {\n slotsResult = childResult\n slotResultKey = parallelRouteKey\n } else {\n // Check if the child is compatible with the current result for the slots.\n switch (compareEnsureStatic(childResult.config, slotsResult.config)) {\n case Comparison.Compatible: {\n // 'auto' is compatible with anything, but if the current result is 'auto' and the new one isn't,\n // we want to use the more specific result.\n if (slotsResult.config === 'auto' && childResult.config !== 'auto') {\n slotsResult = childResult\n slotResultKey = parallelRouteKey\n }\n break\n }\n case Comparison.Incompatible:\n case Comparison.LessConstrained:\n case Comparison.MoreConstrained: {\n throw new Error(\n `Parallel slots cannot have incompatible \\`ensureStatic\\`.` +\n `\\n ${formatParallelSlot(slotResultKey!)}: ` +\n `\\n ${formatEnsureStaticExport(slotsResult.config)}` +\n `\\n (from: ${slotsResult.filePath})` +\n `\\n` +\n `\\n ${formatParallelSlot(parallelRouteKey)}: ` +\n `\\n ${formatEnsureStaticExport(childResult.config)}` +\n `\\n (from: ${childResult.filePath})` +\n `\\n` +\n `\\n Possible fixes:` +\n `\\n - Remove one of the \\`ensureStatic\\` exports` +\n `\\n - Change one of the \\`ensureStatic\\` exports to match the other`\n )\n }\n }\n }\n }\n\n // Child segments can override the config from the parent with a more constrained value,\n // but they cannot have a less constrained value.\n if (!slotsResult) {\n return parentResult\n } else {\n const comparison = compareEnsureStatic(\n slotsResult.config,\n parentResult.config\n )\n switch (comparison) {\n case Comparison.Compatible: {\n // 'auto' is compatible with anything, but if the parent result is 'auto' and the slots one isn't,\n // we want to use the more constrained result.\n if (parentResult.config === 'auto' && slotsResult.config !== 'auto') {\n return slotsResult\n } else {\n return parentResult\n }\n }\n case Comparison.MoreConstrained: {\n return slotsResult\n }\n case Comparison.LessConstrained:\n case Comparison.Incompatible: {\n throw new Error(\n (comparison === Comparison.LessConstrained\n ? `A child segment cannot override a parent segment with a less-constrained \\`ensureStatic\\`.`\n : `A child segment cannot override a parent segment with an incompatible \\`ensureStatic\\`.`) +\n `\\n Parent has: ` +\n `\\n ${formatEnsureStaticExport(parentResult.config)}` +\n `\\n (from: ${parentResult.filePath})` +\n `\\n Child has: ` +\n `\\n ${formatEnsureStaticExport(slotsResult.config)}` +\n `\\n (from: ${slotsResult.filePath})` +\n `\\n` +\n `\\n Possible fixes:` +\n `\\n - Remove one of the \\`ensureStatic\\` exports` +\n `\\n - Change one of the \\`ensureStatic\\` exports to match the other`\n )\n }\n }\n }\n}\n\nfunction formatParallelSlot(slot: string) {\n return slot === 'children' ? slot : `@${slot}`\n}\n\nfunction formatEnsureStaticExport(config: EnsureStatic) {\n return `export const ensureStatic = ${JSON.stringify(config)}`\n}\n\nenum Comparison {\n LessConstrained = 1,\n Compatible = 2,\n MoreConstrained = 3,\n Incompatible = 4,\n}\n\nconst ENSURE_STATIC_ORDER: Exclude[] = [\n 'shell',\n 'prefetch',\n 'navigation',\n]\n\nfunction compareEnsureStatic(\n left: EnsureStatic,\n right: EnsureStatic\n): Comparison {\n // 'auto' is compatible with everything.\n if (left === 'auto' || right === 'auto') {\n return Comparison.Compatible\n }\n\n // `false` is compatible with false.\n if (left === false && right === false) {\n return Comparison.Compatible\n }\n // If only one of the values is `false` (we know it's not both), it's incompatible.\n if (left === false || right === false) {\n return Comparison.Incompatible\n }\n\n const leftSort = ENSURE_STATIC_ORDER.indexOf(left)\n const rightSort = ENSURE_STATIC_ORDER.indexOf(right)\n return leftSort < rightSort\n ? Comparison.LessConstrained\n : leftSort === rightSort\n ? Comparison.Compatible\n : Comparison.MoreConstrained\n}\n\nfunction getEnsureStaticConfigForModule(\n mod: Record | undefined\n): EnsureStatic {\n return (mod ? (mod as AppSegmentConfig).ensureStatic : undefined) ?? 'auto'\n}\n"],"names":["parseLoaderTree","getLayoutOrPageModule","EnsureStaticLevel","getEnsureStaticLevel","ensureStatic","resolveEnsureStaticLevel","tree","partialPrefetching","resolveEnsureStaticConfig","config","filePath","resolveEnsureStaticConfigImpl","originalConfig","console","warn","formatEnsureStaticExport","mod","layoutOrPageMod","getEnsureStaticConfigForModule","parentResult","slotsResult","slotResultKey","parallelRoutes","parallelRouteKey","parallelRoute","childResult","compareEnsureStatic","Error","formatParallelSlot","comparison","slot","JSON","stringify","Comparison","ENSURE_STATIC_ORDER","left","right","leftSort","indexOf","rightSort","undefined"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 3683, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/staged-rendering.ts"],"sourcesContent":["import { InvariantError } from '../../shared/lib/invariant-error'\nimport { createPromiseWithResolvers } from '../../shared/lib/promise-with-resolvers'\n\nexport enum RenderStage {\n Before = 1,\n //\n ShellStatic = 10,\n /** Discrimination-only stage: `prefetch()` in validation renders (static) */\n PrefetchStatic_prefetchApi = 11,\n PrefetchStatic = 12,\n NavigationStatic = 13,\n Static = 14,\n //\n ShellRuntime = 20,\n /** Discrimination-only stage: `prefetch()` in validation renders (runtime) */\n PrefetchRuntime_prefetchApi = 21,\n PrefetchRuntime = 22,\n NavigationRuntime = 23,\n //\n Dynamic = 30,\n Abandoned = 40,\n}\n\nexport type AdvanceableRenderStage = Exclude<\n RenderStage,\n RenderStage.Before | RenderStage.Abandoned\n>\n\nexport const RENDER_STAGE_ADVANCE_ORDER: AdvanceableRenderStage[] = [\n RenderStage.ShellStatic,\n RenderStage.PrefetchStatic_prefetchApi,\n RenderStage.PrefetchStatic,\n RenderStage.NavigationStatic,\n RenderStage.Static,\n //\n RenderStage.ShellRuntime,\n RenderStage.PrefetchRuntime_prefetchApi,\n RenderStage.PrefetchRuntime,\n RenderStage.NavigationRuntime,\n //\n RenderStage.Dynamic,\n]\n\nexport function getNextStage(\n stage: Exclude\n) {\n return RENDER_STAGE_ADVANCE_ORDER[\n RENDER_STAGE_ADVANCE_ORDER.indexOf(stage) + 1\n ]\n}\n\nexport function isAdvanceableRenderStage(\n stage: RenderStage\n): stage is AdvanceableRenderStage {\n return RenderStage.Before < stage && stage <= RenderStage.Dynamic\n}\n\nexport enum SyncIOMode {\n /** Sync IO does not error in any stage. */\n Untracked = 1,\n /** Before `partialPrefetching`: Sync IO errors in static stages, and is allowed otherwise. */\n AllowedInRuntimeOrDynamic = 2,\n /** After `partialPrefetching`: Sync IO errors in all stages other than dynamic. */\n AllowedInDynamic = 3,\n}\n\nexport class StagedRenderingController {\n private abortSignal: AbortSignal | null\n private abandonController: AbortController | null\n private syncIOMode: SyncIOMode\n public readonly finalStage: AdvanceableRenderStage | null\n\n currentStage: RenderStage = RenderStage.Before\n\n syncInterruptReason: Error | null = null\n\n triggers: Record =\n createAdvanceableStageTriggers()\n\n constructor({\n abortSignal,\n abandonController,\n syncIO,\n finalStage,\n }: {\n abortSignal: AbortSignal | null\n abandonController: AbortController | null\n syncIO: SyncIOMode\n finalStage: AdvanceableRenderStage | null\n }) {\n this.abortSignal = abortSignal\n this.abandonController = abandonController\n this.syncIOMode = syncIO\n this.finalStage = finalStage\n\n if (abortSignal) {\n abortSignal.addEventListener(\n 'abort',\n () => {\n // Reject all stage promises that haven't already been resolved.\n // `cancelStageTrigger` is a noop if the trigger already resolved.\n const { reason } = abortSignal\n for (const trigger of Object.values(this.triggers)) {\n cancelStageTrigger(trigger, reason)\n }\n },\n { once: true }\n )\n }\n\n if (abandonController) {\n abandonController.signal.addEventListener(\n 'abort',\n () => {\n this.abandonRender()\n },\n { once: true }\n )\n }\n }\n\n /**\n * Schedules a callback that will execute synchronously when the controller is advanced\n * to `stage` or past it, before any promises for that stage are resolved.\n * If the controller is already past `stage`, the callback is executed immediately.\n * */\n onStage(stage: AdvanceableRenderStage, callback: () => void) {\n addSyncTriggerListener(this.triggers[stage], callback)\n }\n\n shouldTrackSyncInterrupt(): boolean {\n const { syncIOMode, currentStage } = this\n switch (syncIOMode) {\n case SyncIOMode.Untracked: {\n return false\n }\n case SyncIOMode.AllowedInRuntimeOrDynamic: {\n // Legacy: track Sync IO only in static stages.\n // Do not track it before the render, or in runtime/dynamic stages.\n return (\n currentStage > RenderStage.Before &&\n currentStage <= RenderStage.Static\n )\n }\n case SyncIOMode.AllowedInDynamic: {\n // Track sync IO in all cacheable stages.\n // This means all stages except:\n // - before the render\n // - in the dynamic stage\n return (\n currentStage > RenderStage.Before &&\n currentStage < RenderStage.Dynamic\n )\n }\n }\n }\n\n /** Note: only call this if `shouldTrackSyncInterrupt()` returned true */\n syncInterruptCurrentStageWithReason(reason: Error) {\n const { currentStage } = this\n if (\n currentStage === RenderStage.Before ||\n currentStage === RenderStage.Dynamic ||\n currentStage === RenderStage.Abandoned\n ) {\n // Not interruptible. Defensive noop.\n return\n }\n\n // If Sync IO occurs during an abandonable render, we trigger the abandon.\n // The abandon listener will call abandonRender which advances through\n // stages to let caches fill before marking as Abandoned.\n if (this.abandonController) {\n this.abandonController.abort()\n return\n }\n\n if (this.abortSignal) {\n // If this is an abortable render, we capture the interruption reason and stop advancing.\n // We don't release any more promises.\n // The caller is expected to abort the signal.\n this.syncInterruptReason = reason\n this.currentStage = RenderStage.Abandoned\n return\n }\n\n // If we're in a non-abandonable & non-abortable render,\n // we need to advance to the Dynamic stage and capture the interruption reason.\n // (in dev, this will be the restarted render)\n this.syncInterruptReason = reason\n this.advanceStage(RenderStage.Dynamic)\n }\n\n getSyncInterruptReason() {\n return this.syncInterruptReason\n }\n\n getStageEndTime(stage: Exclude) {\n return this.triggers[getNextStage(stage)].triggeredAt ?? Infinity\n }\n\n private abandonRender() {\n // In staged rendering, only the initial render is abandonable.\n // We can abandon the initial render if\n // 1. We notice a cache miss, and need to wait for caches to fill\n // 2. A sync IO error occurs, and the render should be interrupted\n // (this might be a lazy intitialization of a module,\n // so we still want to restart in this case and see if it still occurs)\n // In either case, we'll be doing another render after this one,\n // so we only want to unblock the next stage, not Dynamic, because\n // unblocking the dynamic stage would likely lead to wasted (uncached) IO.\n\n const { currentStage } = this\n\n if (currentStage === RenderStage.Before) {\n throw new InvariantError(\n \"A render that hasn't started yet cannot be abandoned\"\n )\n }\n if (\n currentStage === RenderStage.Dynamic ||\n currentStage === RenderStage.Abandoned\n ) {\n // We shouldn't ever trigger an abandon in these. Defensive noop.\n return\n }\n\n // Resolve all stages after the current one, up to runtime (excluding dynamic)\n const nextStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(currentStage) + 1\n const dynamicStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(\n RenderStage.Dynamic\n )\n for (let i = nextStageIx; i < dynamicStageIx; i++) {\n this.resolveStage(RENDER_STAGE_ADVANCE_ORDER[i])\n }\n\n this.currentStage = RenderStage.Abandoned\n }\n\n advanceStage(targetStage: AdvanceableRenderStage) {\n if (this.finalStage !== null && targetStage > this.finalStage) {\n throw new InvariantError(\n `Attempted to advance to stage ${RenderStage[targetStage]} but the render is limited to ${RenderStage[this.finalStage]}`\n )\n }\n const { currentStage } = this\n\n if (\n currentStage === RenderStage.Dynamic ||\n currentStage === RenderStage.Abandoned\n ) {\n // Terminal stages, nowhere left to advance.\n return\n }\n\n // If we're already at the target stage or beyond, do nothing.\n if (targetStage <= currentStage) {\n return\n }\n\n this.currentStage = targetStage\n\n // Resolve all stages between the current stage and the target.\n const nextStageIx =\n currentStage === RenderStage.Before\n ? 0\n : RENDER_STAGE_ADVANCE_ORDER.indexOf(currentStage) + 1\n const targetStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(targetStage)\n for (let i = nextStageIx; i <= targetStageIx; i++) {\n this.resolveStage(RENDER_STAGE_ADVANCE_ORDER[i])\n }\n }\n\n private resolveStage(stage: AdvanceableRenderStage) {\n fireStageTrigger(this.triggers[stage])\n }\n\n private getStagePromise(stage: AdvanceableRenderStage): Promise {\n return this.triggers[stage].promise\n }\n\n waitForStage(stage: AdvanceableRenderStage) {\n return this.getStagePromise(stage)\n }\n\n delayUntilStage(\n stage: AdvanceableRenderStage,\n displayName: string | undefined,\n resolvedValue: T\n ): Promise {\n const stagePromise = this.getStagePromise(stage)\n\n const promise =\n process.env.NODE_ENV === 'development'\n ? makeDevtoolsIOPromiseFromIOTrigger(\n stagePromise,\n displayName,\n resolvedValue\n )\n : stagePromise.then(() => resolvedValue)\n\n // Analogously to `makeDynamicHangingPromise`, we might reject this promise if the signal is invoked.\n // (e.g. in the case where we don't want want the render to proceed to the dynamic stage and abort it).\n // We shouldn't consider this an unhandled rejection, so we attach a noop catch handler here to suppress this warning.\n if (this.abortSignal) {\n promise.catch(ignoreReject)\n }\n return promise\n }\n}\n\nfunction createAdvanceableStageTriggers(): Record<\n AdvanceableRenderStage,\n StageTrigger\n> {\n const triggers: Partial> = {}\n for (const stage of RENDER_STAGE_ADVANCE_ORDER) {\n triggers[stage] = createStageTrigger()\n }\n return triggers as Record\n}\n\nfunction ignoreReject() {}\n\n// TODO(restart-on-cache-miss): the layering of `delayUntilStage`,\n// `makeDevtoolsIOPromiseFromIOTrigger` and and `makeDevtoolsIOAwarePromise`\n// is confusing, we should clean it up.\nfunction makeDevtoolsIOPromiseFromIOTrigger(\n ioTrigger: Promise,\n displayName: string | undefined,\n resolvedValue: T\n): Promise {\n // If we create a `new Promise` and give it a displayName\n // (with no userspace code above us in the stack)\n // React Devtools will use it as the IO cause when determining \"suspended by\".\n // In particular, it should shadow any inner IO that resolved/rejected the promise\n // (in case of staged rendering, this will be the `setTimeout` that triggers the relevant stage)\n const promise = new Promise((resolve, reject) => {\n ioTrigger.then(resolve.bind(null, resolvedValue), reject)\n })\n if (displayName !== undefined) {\n // @ts-expect-error\n promise.displayName = displayName\n }\n return promise\n}\n\ntype StageTrigger = {\n state: 'pending' | 'triggered' | 'cancelled'\n triggeredAt: number | null\n promise: Promise\n _listeners: Array<() => void>\n _resolvePromise: () => void\n _rejectPromise: (reason: unknown) => void\n}\n\nfunction addSyncTriggerListener(trigger: StageTrigger, listener: () => void) {\n if (trigger.state === 'pending') {\n trigger._listeners.push(listener)\n } else {\n listener()\n }\n}\n\nfunction createStageTrigger(): StageTrigger {\n const { promise, resolve, reject } = createPromiseWithResolvers()\n return {\n state: 'pending',\n triggeredAt: null,\n promise,\n _listeners: [],\n _resolvePromise: resolve,\n _rejectPromise: reject,\n }\n}\n\nfunction fireStageTrigger(trigger: StageTrigger) {\n if (trigger.state !== 'pending') {\n return\n }\n trigger.state = 'triggered'\n trigger.triggeredAt = performance.now() + performance.timeOrigin\n try {\n const { _listeners: listeners } = trigger\n for (let i = 0; i < listeners.length; i++) {\n listeners[i]()\n }\n listeners.length = 0\n } finally {\n trigger._resolvePromise()\n }\n}\n\nfunction cancelStageTrigger(trigger: StageTrigger, reason: unknown) {\n if (trigger.state !== 'pending') {\n return\n }\n trigger.state = 'cancelled'\n // we didn't trigger, so don't save `triggeredAt`.\n\n // We're not gonna fire the listeners, we may as well free them.\n trigger._listeners.length = 0\n\n // Suppress unhandled rejection warnings for promises that no one is awaiting.\n trigger.promise.catch(ignoreReject)\n trigger._rejectPromise(reason)\n}\n"],"names":["InvariantError","createPromiseWithResolvers","RenderStage","RENDER_STAGE_ADVANCE_ORDER","getNextStage","stage","indexOf","isAdvanceableRenderStage","SyncIOMode","StagedRenderingController","constructor","abortSignal","abandonController","syncIO","finalStage","currentStage","syncInterruptReason","triggers","createAdvanceableStageTriggers","syncIOMode","addEventListener","reason","trigger","Object","values","cancelStageTrigger","once","signal","abandonRender","onStage","callback","addSyncTriggerListener","shouldTrackSyncInterrupt","syncInterruptCurrentStageWithReason","abort","advanceStage","getSyncInterruptReason","getStageEndTime","triggeredAt","Infinity","nextStageIx","dynamicStageIx","i","resolveStage","targetStage","targetStageIx","fireStageTrigger","getStagePromise","promise","waitForStage","delayUntilStage","displayName","resolvedValue","stagePromise","process","env","NODE_ENV","makeDevtoolsIOPromiseFromIOTrigger","then","catch","ignoreReject","createStageTrigger","ioTrigger","Promise","resolve","reject","bind","undefined","listener","state","_listeners","push","_resolvePromise","_rejectPromise","performance","now","timeOrigin","listeners","length"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 3979, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/base-http/helpers.ts"],"sourcesContent":["import type { BaseNextRequest, BaseNextResponse } from './'\nimport type { NodeNextRequest, NodeNextResponse } from './node'\nimport type { WebNextRequest, WebNextResponse } from './web'\n\n/**\n * This file provides some helpers that should be used in conjunction with\n * explicit environment checks. When combined with the environment checks, it\n * will ensure that the correct typings are used as well as enable code\n * elimination.\n */\n\n/**\n * Type guard to determine if a request is a WebNextRequest. This does not\n * actually check the type of the request, but rather the runtime environment.\n * It's expected that when the runtime environment is the edge runtime, that any\n * base request is a WebNextRequest.\n */\nexport const isWebNextRequest = (req: BaseNextRequest): req is WebNextRequest =>\n process.env.NEXT_RUNTIME === 'edge'\n\n/**\n * Type guard to determine if a response is a WebNextResponse. This does not\n * actually check the type of the response, but rather the runtime environment.\n * It's expected that when the runtime environment is the edge runtime, that any\n * base response is a WebNextResponse.\n */\nexport const isWebNextResponse = (\n res: BaseNextResponse\n): res is WebNextResponse => process.env.NEXT_RUNTIME === 'edge'\n\n/**\n * Type guard to determine if a request is a NodeNextRequest. This does not\n * actually check the type of the request, but rather the runtime environment.\n * It's expected that when the runtime environment is the node runtime, that any\n * base request is a NodeNextRequest.\n */\nexport const isNodeNextRequest = (\n req: BaseNextRequest\n): req is NodeNextRequest => process.env.NEXT_RUNTIME !== 'edge'\n\n/**\n * Type guard to determine if a response is a NodeNextResponse. This does not\n * actually check the type of the response, but rather the runtime environment.\n * It's expected that when the runtime environment is the node runtime, that any\n * base response is a NodeNextResponse.\n */\nexport const isNodeNextResponse = (\n res: BaseNextResponse\n): res is NodeNextResponse => process.env.NEXT_RUNTIME !== 'edge'\n"],"names":["isWebNextRequest","req","process","env","NEXT_RUNTIME","isWebNextResponse","res","isNodeNextRequest","isNodeNextResponse"],"mappings":"AAIA;;;;;CAKC,GAED;;;;;CAKC,GACD;;;;;;;;;;AAAO,MAAMA,mBAAmB,CAACC,MAC/BC,QAAQC,GAAG,CAACC,YAAY,uBAAK,OAAM;AAQ9B,MAAMC,oBAAoB,CAC/BC,MAC2BJ,QAAQC,GAAG,CAACC,YAAY,uBAAK,OAAM;AAQzD,MAAMG,oBAAoB,CAC/BN,MAC2BC,QAAQC,GAAG,CAACC,YAAY,uBAAK,OAAM;AAQzD,MAAMI,qBAAqB,CAChCF,MAC4BJ,QAAQC,GAAG,CAACC,YAAY,uBAAK,OAAM","ignoreList":[0]}}, + {"offset": {"line": 4007, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/base-http/index.ts"],"sourcesContent":["import type { IncomingHttpHeaders, OutgoingHttpHeaders } from 'http'\nimport type { I18NConfig } from '../config-shared'\n\nimport { RedirectStatusCode } from '../../client/components/redirect-status-code'\nimport type { NextApiRequestCookies } from '../api-utils'\nimport { getCookieParser } from '../api-utils/get-cookie-parser'\n\nexport interface BaseNextRequestConfig {\n basePath: string | undefined\n i18n?: I18NConfig\n trailingSlash?: boolean | undefined\n}\n\nexport type FetchMetric = {\n url: string\n idx: number\n end: number\n start: number\n method: string\n status: number\n cacheReason: string\n cacheStatus: 'hit' | 'miss' | 'skip' | 'hmr'\n cacheWarning?: string\n}\n\nexport type FetchMetrics = Array\n\nexport abstract class BaseNextRequest {\n protected _cookies: NextApiRequestCookies | undefined\n public abstract headers: IncomingHttpHeaders\n public abstract fetchMetrics: FetchMetric[] | undefined\n\n constructor(\n public method: string,\n public url: string,\n public body: Body\n ) {}\n\n // Utils implemented using the abstract methods above\n\n public get cookies() {\n if (this._cookies) return this._cookies\n return (this._cookies = getCookieParser(this.headers)())\n }\n}\n\nexport abstract class BaseNextResponse {\n abstract statusCode: number | undefined\n abstract statusMessage: string | undefined\n abstract get sent(): boolean\n\n constructor(public destination: Destination) {}\n\n /**\n * Sets a value for the header overwriting existing values\n */\n abstract setHeader(name: string, value: string | string[]): this\n\n /**\n * Removes a header\n */\n abstract removeHeader(name: string): this\n\n /**\n * Appends value for the given header name\n */\n abstract appendHeader(name: string, value: string): this\n\n /**\n * Get all values for a header as an array or undefined if no value is present\n */\n abstract getHeaderValues(name: string): string[] | undefined\n\n abstract hasHeader(name: string): boolean\n\n /**\n * Get values for a header concatenated using `,` or undefined if no value is present\n */\n abstract getHeader(name: string): string | undefined\n\n abstract getHeaders(): OutgoingHttpHeaders\n\n abstract body(value: string): this\n\n abstract send(): void\n\n abstract onClose(callback: () => void): void\n\n // Utils implemented using the abstract methods above\n\n public redirect(destination: string, statusCode: number) {\n this.setHeader('Location', destination)\n this.statusCode = statusCode\n\n // Since IE11 doesn't support the 308 header add backwards\n // compatibility using refresh header\n if (statusCode === RedirectStatusCode.PermanentRedirect) {\n this.setHeader('Refresh', `0;url=${destination}`)\n }\n\n return this\n }\n}\n"],"names":["RedirectStatusCode","getCookieParser","BaseNextRequest","constructor","method","url","body","cookies","_cookies","headers","BaseNextResponse","destination","redirect","statusCode","setHeader","PermanentRedirect"],"mappings":";;;;;;AAGA,SAASA,kBAAkB,QAAQ,+CAA8C;AAEjF,SAASC,eAAe,QAAQ,iCAAgC;;;AAsBzD,MAAeC;IAKpBC,YACSC,MAAc,EACdC,GAAW,EACXC,IAAU,CACjB;aAHOF,MAAAA,GAAAA;aACAC,GAAAA,GAAAA;aACAC,IAAAA,GAAAA;IACN;IAEH,qDAAqD;IAErD,IAAWC,UAAU;QACnB,IAAI,IAAI,CAACC,QAAQ,EAAE,OAAO,IAAI,CAACA,QAAQ;QACvC,OAAQ,IAAI,CAACA,QAAQ,OAAGP,6MAAAA,EAAgB,IAAI,CAACQ,OAAO;IACtD;AACF;AAEO,MAAeC;IAKpBP,YAAmBQ,WAAwB,CAAE;aAA1BA,WAAAA,GAAAA;IAA2B;IAqC9C,qDAAqD;IAE9CC,SAASD,WAAmB,EAAEE,UAAkB,EAAE;QACvD,IAAI,CAACC,SAAS,CAAC,YAAYH;QAC3B,IAAI,CAACE,UAAU,GAAGA;QAElB,0DAA0D;QAC1D,qCAAqC;QACrC,IAAIA,eAAeb,iNAAAA,CAAmBe,iBAAiB,EAAE;YACvD,IAAI,CAACD,SAAS,CAAC,WAAW,CAAC,MAAM,EAAEH,aAAa;QAClD;QAEA,OAAO,IAAI;IACb;AACF","ignoreList":[0]}}, + {"offset": {"line": 4049, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/base-http/node.ts"],"sourcesContent":["import type { ServerResponse, IncomingMessage } from 'http'\nimport type { Writable, Readable } from 'stream'\n\nimport { SYMBOL_CLEARED_COOKIES } from '../api-utils'\nimport type { NextApiRequestCookies } from '../api-utils'\n\nimport { NEXT_REQUEST_META } from '../request-meta'\nimport type { RequestMeta } from '../request-meta'\n\nimport { BaseNextRequest, BaseNextResponse, type FetchMetric } from './index'\nimport type { OutgoingHttpHeaders } from 'node:http'\n\ntype Req = IncomingMessage & {\n [NEXT_REQUEST_META]?: RequestMeta\n cookies?: NextApiRequestCookies\n fetchMetrics?: FetchMetric[]\n}\n\nexport class NodeNextRequest extends BaseNextRequest {\n public headers = this._req.headers\n public fetchMetrics: FetchMetric[] | undefined = this._req?.fetchMetrics;\n\n [NEXT_REQUEST_META]: RequestMeta = this._req[NEXT_REQUEST_META] || {}\n\n constructor(private _req: Req) {\n super(_req.method!.toUpperCase(), _req.url!, _req)\n }\n\n get originalRequest() {\n // Need to mimic these changes to the original req object for places where we use it:\n // render.tsx, api/ssg requests\n this._req[NEXT_REQUEST_META] = this[NEXT_REQUEST_META]\n this._req.url = this.url\n this._req.cookies = this.cookies\n return this._req\n }\n\n set originalRequest(value: Req) {\n this._req = value\n }\n\n private streaming = false\n\n /**\n * Returns the request body as a Web Readable Stream. The body here can only\n * be read once as the body will start flowing as soon as the data handler\n * is attached.\n *\n * @internal\n */\n public stream() {\n if (this.streaming) {\n throw new Error(\n 'Invariant: NodeNextRequest.stream() can only be called once'\n )\n }\n this.streaming = true\n\n return new ReadableStream({\n start: (controller) => {\n this._req.on('data', (chunk) => {\n controller.enqueue(new Uint8Array(chunk))\n })\n this._req.on('end', () => {\n controller.close()\n })\n this._req.on('error', (err) => {\n controller.error(err)\n })\n },\n })\n }\n}\n\nexport class NodeNextResponse extends BaseNextResponse {\n private textBody: string | undefined = undefined\n\n public [SYMBOL_CLEARED_COOKIES]?: boolean\n\n get originalResponse() {\n if (SYMBOL_CLEARED_COOKIES in this) {\n this._res[SYMBOL_CLEARED_COOKIES] = this[SYMBOL_CLEARED_COOKIES]\n }\n\n return this._res\n }\n\n constructor(\n private _res: ServerResponse & { [SYMBOL_CLEARED_COOKIES]?: boolean }\n ) {\n super(_res)\n }\n\n get sent() {\n return this._res.finished || this._res.headersSent\n }\n\n get statusCode() {\n return this._res.statusCode\n }\n\n set statusCode(value: number) {\n this._res.statusCode = value\n }\n\n get statusMessage() {\n return this._res.statusMessage\n }\n\n set statusMessage(value: string) {\n this._res.statusMessage = value\n }\n\n setHeader(name: string, value: string | string[]): this {\n this._res.setHeader(name, value)\n return this\n }\n\n removeHeader(name: string): this {\n this._res.removeHeader(name)\n return this\n }\n\n getHeaderValues(name: string): string[] | undefined {\n const values = this._res.getHeader(name)\n\n if (values === undefined) return undefined\n\n return (Array.isArray(values) ? values : [values]).map((value) =>\n value.toString()\n )\n }\n\n hasHeader(name: string): boolean {\n return this._res.hasHeader(name)\n }\n\n getHeader(name: string): string | undefined {\n const values = this.getHeaderValues(name)\n return Array.isArray(values) ? values.join(',') : undefined\n }\n\n getHeaders(): OutgoingHttpHeaders {\n return this._res.getHeaders()\n }\n\n appendHeader(name: string, value: string): this {\n const currentValues = this.getHeaderValues(name) ?? []\n\n if (!currentValues.includes(value)) {\n this._res.setHeader(name, [...currentValues, value])\n }\n\n return this\n }\n\n body(value: string) {\n this.textBody = value\n return this\n }\n\n send() {\n this._res.end(this.textBody)\n }\n\n public onClose(callback: () => void) {\n this.originalResponse.on('close', callback)\n }\n}\n"],"names":["SYMBOL_CLEARED_COOKIES","NEXT_REQUEST_META","BaseNextRequest","BaseNextResponse","NodeNextRequest","constructor","_req","method","toUpperCase","url","headers","fetchMetrics","streaming","originalRequest","cookies","value","stream","Error","ReadableStream","start","controller","on","chunk","enqueue","Uint8Array","close","err","error","NodeNextResponse","originalResponse","_res","textBody","undefined","sent","finished","headersSent","statusCode","statusMessage","setHeader","name","removeHeader","getHeaderValues","values","getHeader","Array","isArray","map","toString","hasHeader","join","getHeaders","appendHeader","currentValues","includes","body","send","end","onClose","callback"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 4181, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/dynamic-rendering-utils.ts"],"sourcesContent":["import { InvariantError } from '../shared/lib/invariant-error'\nimport { createPromiseWithResolvers } from '../shared/lib/promise-with-resolvers'\nimport { EnsureStaticLevel } from './app-render/segment-config/ensure-static'\nimport {\n RenderStage,\n type StagedRenderingController,\n type AdvanceableRenderStage,\n} from './app-render/staged-rendering'\nimport { workAsyncStorage } from './app-render/work-async-storage.external'\nimport type {\n RequestStore,\n WorkUnitStore,\n} from './app-render/work-unit-async-storage.external'\nimport { workUnitAsyncStorage } from './app-render/work-unit-async-storage.external'\nimport { getServerReact, getClientReact } from './runtime-reacts.external'\n\nexport function isHangingPromiseRejectionError(\n err: unknown\n): err is HangingPromiseRejectionError {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false\n }\n\n return err.digest === HANGING_PROMISE_REJECTION\n}\n\nconst HANGING_PROMISE_REJECTION = 'HANGING_PROMISE_REJECTION'\n\nclass HangingPromiseRejectionError extends Error {\n public readonly digest = HANGING_PROMISE_REJECTION\n\n constructor(\n public readonly route: string,\n public readonly expression: string\n ) {\n super(\n `During prerendering, ${expression} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${expression} to a different context by using \\`setTimeout\\`, \\`after\\`, or similar functions you may observe this error and you should handle it in that context. This occurred at route \"${route}\".`\n )\n }\n}\n\nconst CLIENT_HOOK_DYNAMIC = 'CLIENT_HOOK_DYNAMIC'\n\nexport class ClientHookDynamicError extends Error {\n public readonly digest = CLIENT_HOOK_DYNAMIC\n\n constructor(route: string, expression: string) {\n super(\n `Route \"${route}\": Next.js encountered URL data \\`${expression}\\` in a Client Component outside of \\`\\`.\\n\\n` +\n `This blocks prerendering because the value is only available at runtime.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Wrap the component in \\`\\` so the hook value streams in after prerendering\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-client-hook`\n )\n }\n}\n\nexport function isClientHookDynamicError(\n err: unknown\n): err is ClientHookDynamicError {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false\n }\n\n return err.digest === CLIENT_HOOK_DYNAMIC\n}\n\ntype AbortListeners = Array<() => void>\nconst abortListenersBySignal = new WeakMap()\n\n/**\n * Constructs a promise that never resolves, standing in for *dynamic* data:\n * data that is only available during a real dynamic request and hangs in\n * every kind of prerender — `io()`, `connection()`, uncached `fetch()`.\n *\n * This is primarily useful for cacheComponents where we use promise\n * resolution timing to determine which parts of a render can be included in a\n * prerender.\n *\n * Records nothing on the prerender store: the promise's holes are only ever\n * filled by a real dynamic request, so a runtime prefetch response would have\n * the same holes as the static one. If the data source would resolve during a\n * runtime prerender, use `makeRuntimeHangingPromise` instead.\n */\nexport function makeDynamicHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string\n): Promise {\n return makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n}\n\nexport function makeUntrackedHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string\n): Promise {\n return makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n}\n\n/**\n * Constructs a promise that never resolves, standing in for session data\n * (which a runtime shell can access).\n * Examples: cookies, headers\n *\n * Awaiting one of these during a static prerender records on the prerender\n * store that a runtime shell would produce more content than the static\n * static shell, which the segment prefetch encoding uses\n * to tell the client whether a runtime request could be skipped.\n *\n * When unsure whether data is dynamic or runtime, prefer this method — the\n * cost of over-recording is a redundant runtime prefetch request; the cost of\n * under-recording is a permanently missing one.\n *\n * For fallback-param data — data a concrete (ISR-upgraded) prerender would\n * resolve — use `makeFallbackParamsHangingPromise` instead, so the access\n * is recorded with the right effect on the static-prefetch hint.\n */\nexport function makeSessionDataHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string,\n workUnitStore: WorkUnitStore\n): Promise {\n const promise = makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n return trackPromiseUsed(\n promise,\n trackSessionDataAccessed.bind(null, workUnitStore, expression)\n )\n}\n\n/**\n * Constructs a promise that never resolves, standing in for URL data,\n * which can be accessed in a runtime prefetch (but not a runtime shell).\n * Examples: fallback params, searchParams\n *\n * Awaiting one of these during a static prerender records on the prerender\n * store that a runtime prefetch would produce more content than the static\n * response, which the segment prefetch encoding uses\n * to tell the client whether a runtime prefetch request could be skipped.\n *\n * When unsure whether data is dynamic or runtime, prefer this method — the\n * cost of over-recording is a redundant runtime prefetch request; the cost of\n * under-recording is a permanently missing one.\n *\n * `workUnitStore` may be null ONLY when the caller tracks the access itself.\n * Such a caller MUST call `trackURLDataAccessed` from every path that\n * observes the promise (e.g. the proxy traps for `then`/`status`),\n * against the work unit store active at access time.\n *\n * For fallback-param data — data a concrete (ISR-upgraded) prerender would\n * resolve — use `makeFallbackParamsHangingPromise` instead, so the access\n * is recorded with the right effect on the static-prefetch hint.\n */\nexport function makeURLDataHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string,\n workUnitStore: WorkUnitStore | null\n): Promise {\n const promise = makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n if (workUnitStore === null) {\n return promise\n }\n return trackPromiseUsed(\n promise,\n trackURLDataAccessed.bind(null, workUnitStore, expression)\n )\n}\n\n/**\n * Creates a promise that stands in for a result that will either be session data\n * or URL data, but we don't know which.\n */\nexport function makeUnknownRuntimeDataHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string,\n workUnitStore: WorkUnitStore\n): Promise {\n // We don't know if this is session or URL data, i.e. if it should affect the shell\n // or only the prefetch. Track it conservatively as affecting both.\n return makeSessionDataHangingPromise(signal, route, expression, workUnitStore)\n}\n\n/**\n * Constructs a promise that never resolves, standing in for data that is only\n * accessible in the prefetch, but not in the shell, e.g. `prefetch()`.\n * This usage does *not* indicate that a runtime request is needed,\n * only that the data is not available in a shell.\n *\n * @internal\n */\nexport function makePrefetchHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string\n): Promise {\n return makeUntrackedHangingPromise(signal, route, expression)\n}\n\n/**\n * Variant of `makeRuntimeHangingPromise` for *fallback-param* data: fallback\n * route params and values derived solely from them (`params`, `rootParams`,\n * `pathname` during a fallback prerender). Like every runtime data access,\n * awaiting it records the access on the prerender store's response-level flag,\n * but its effect on the build-time static-prefetch hint differs — on a\n * fallback-upgradeable route the access is transient (a concrete prerender\n * resolves it), so it leaves the hint intact. See `trackFallbackParamsAccessed`.\n *\n * As with `makeRuntimeHangingPromise`, `workUnitStore` may be null ONLY when\n * the caller tracks the access itself by calling `trackFallbackParamsAccessed`\n * from every path that observes the promise.\n */\nexport function makeFallbackParamsHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string,\n workUnitStore: WorkUnitStore | null\n): Promise {\n const promise = makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n if (workUnitStore === null) {\n return promise\n }\n return trackPromiseUsed(\n promise,\n trackFallbackParamsAccessed.bind(null, workUnitStore, expression)\n )\n}\n\nexport type PrerenderDataTracking = {\n /**\n * Records when the render has accessed a request data source\n * that hangs during a static prerender but would resolve during a runtime\n * prerender — cookies, headers, fallback params, searchParams, and cache\n * entries excluded only from static prerenders.\n *\n * The client uses this promise as the actual source of truth for whether a segment\n * needs a runtime request. Prefetch hints can become stale after a revalidation,\n * so if a hint says a static request should be enough but `runtimeDataAccessed`\n * resolves to `true`, a follow-up runtime request will be issued.\n * This applies to both shells and prefetches.\n *\n * The promise is embedded in the RSC payload (`InitialRSCPayload['u']`),\n * and is meant to be rewindable. This means that the shell might not have\n * any runtime data accesses, even when the prefetch does.\n * (this has some subtleties; see `markRuntimeDataAccessWhenStageReached`\n * for more)\n *\n * After the prerender, the promise is consumed by `collectSegmentData` and each\n * static prefetch will contain it (`PrefetchFlightResponse['u']`).\n * However, all the segments for a route will use the same promise (because we're\n * only tracking this on the page level) so if one segment needs runtime data, then\n * all segments will be marked as such.\n * However, on the client `isPartial` takes precedence over `runtimeDataAccessed`,\n * so complete segments will not end up being deopted.\n */\n readonly runtimeDataAccessed: PromiseWithResolvers\n\n /** Corresponds to `PrefetchHint.ShouldAttemptStaticShell`. */\n shouldAttemptStaticShell: boolean\n /** Corresponds to `PrefetchHint.ShouldAttemptStaticPrefetch`. */\n shouldAttemptStaticPrefetch: boolean\n}\n\nexport function createPrerenderDataTracking(): PrerenderDataTracking {\n return {\n runtimeDataAccessed: createPromiseWithResolvers(),\n shouldAttemptStaticShell: true,\n shouldAttemptStaticPrefetch: true,\n }\n}\n\nexport function finishPrerenderDataTracking(\n prerenderDataTracking: PrerenderDataTracking\n) {\n // If a runtime data access already resolved this promise, this is a no-op.\n prerenderDataTracking.runtimeDataAccessed.resolve(false)\n}\n\n/**\n * Records on a static prerender store that the render accessed a data source\n * which would have resolved in a runtime shell (or runtime prefetch).\n * No-op for all other store types.\n *\n * Prefer `makeRuntimeHangingPromise`. Use this function only when implementing\n * similar tracking and that one is not enough.\n */\nfunction trackSessionDataAccessed(\n workUnitStore: WorkUnitStore,\n expression: string\n): void {\n trackRuntimeDataAccessed(\n workUnitStore,\n PrerenderDataKind.SessionData,\n expression\n )\n}\n\n/**\n * Records on a static prerender store that the render accessed a data source\n * which would have resolved in a runtime prefetch (but NOT in a runtime shell)\n * No-op for all other store types.\n *\n * Prefer `makeRuntimeHangingPromise`. Use this function only when implementing\n * similar tracking and that one is not enough.\n *\n * For fallback-param data, use `trackFallbackParamsAccessed` instead. When\n * unsure, this is the conservative choice.\n */\nexport function trackURLDataAccessed(\n workUnitStore: WorkUnitStore,\n expression: string\n): void {\n trackRuntimeDataAccessed(workUnitStore, PrerenderDataKind.UrlData, expression)\n}\n\n/**\n * Fallback-param variant of `trackRuntimeDataAccessed`, for accesses of\n * fallback route params and values derived solely from them. It records the\n * response-level flag all the same, but only clears the build-time\n * static-prefetch hint when the route is not fallback-upgradeable — on an\n * upgradeable route the access is transient, since ISR later produces a\n * concrete prerender that resolves it.\n */\nexport function trackFallbackParamsAccessed(\n workUnitStore: WorkUnitStore,\n expression: string\n): void {\n trackRuntimeDataAccessed(\n workUnitStore,\n PrerenderDataKind.FallbackParams,\n expression\n )\n}\n\nconst enum PrerenderDataKind {\n SessionData = 1,\n UrlData = 2,\n FallbackParams = 3,\n}\n\nfunction trackRuntimeDataAccessed(\n workUnitStore: WorkUnitStore,\n dataKind: PrerenderDataKind,\n expression: string\n): void {\n switch (workUnitStore.type) {\n case 'prerender': {\n const { prerenderDataTracking, stagedRendering } = workUnitStore\n if (!prerenderDataTracking || !stagedRendering) {\n return\n }\n const { currentStage } = stagedRendering\n if (currentStage === RenderStage.Before) {\n console.error(\n new InvariantError(\n 'Unexpected trackRuntimeDataAccessed in the Before stage.'\n )\n )\n return\n }\n if (currentStage >= RenderStage.NavigationStatic) {\n // Ignore any accesses that happen after `navigation()` resolves.\n // The purpose of this tracking is to judge whether a runtime prefetch\n // would give us a more complete result than a static one.\n // But `navigation()` wouldn't have resolved in a runtime prefetch,\n // so e.g. `await navigation(); await cookies()` wouldn't have more content\n // in those, and we shouldn't count it.\n return\n }\n\n const ensureStaticLevel =\n workUnitStore.ensureStaticLevel ?? EnsureStaticLevel.None\n\n // NOTE: In general, we keep hints in sync with `needsRuntimeRequest`, but they\n // don't have to always match. The client re-uses hints for the entire route,\n // while `needsRuntimeRequest` can vary across individual prerendered param values\n // (e.g. if cookies are accessed depending on a param value).\n // Hints can also become outdated if a route only starts using runtime data\n // after a revalidation, so we have to expect this and be resilient to it.\n // Also see the upgradeable fallback params case below, which deliberately\n // puts them out of sync.\n\n switch (dataKind) {\n case PrerenderDataKind.SessionData: {\n // Potentially deopt both the shell and the prefetch,\n // because if the shell accessed runtime data, so does the prefetch.\n // However, if we're already past the shell stage, the shell is not affected.\n // (which makes e.g. `await prefetch(); await cookies()` only affect the prefetch)\n let firstAffectedStage:\n | RenderStage.ShellStatic\n | RenderStage.PrefetchStatic\n | null = null\n\n if (\n currentStage <= RenderStage.ShellStatic &&\n // Only track if we're not forcing the shell to be static.\n ensureStaticLevel < EnsureStaticLevel.Shell\n ) {\n prerenderDataTracking.shouldAttemptStaticShell = false\n firstAffectedStage ??= RenderStage.ShellStatic\n logRuntimeDeopt?.(expression, 'shell')\n }\n\n if (\n currentStage <= RenderStage.PrefetchStatic &&\n // Only track if we're not forcing the prefetch to be static.\n ensureStaticLevel < EnsureStaticLevel.Prefetch\n ) {\n prerenderDataTracking.shouldAttemptStaticPrefetch = false\n // NOTE: if the shell is affected, don't override it.\n firstAffectedStage ??= RenderStage.PrefetchStatic\n logRuntimeDeopt?.(expression, 'prefetch')\n }\n\n if (firstAffectedStage !== null) {\n markRuntimeDataAccessWhenStageReached(\n prerenderDataTracking,\n stagedRendering,\n firstAffectedStage\n )\n }\n break\n }\n case PrerenderDataKind.FallbackParams: {\n if (workUnitStore.isFallbackUpgradeable) {\n // An fallback-param access is transient when the route is\n // fallback-upgradeable (i.e. ISR later produces the concrete prerender a\n // static prefetch would hit) so it does not indicate the need for a runtime\n // request and thus does not affect the static hints.\n //\n // If runtime prefetches are not disallowed by `ensureStatic`, then we still\n // set `runtimeDataAccessed` (while keeping the hints static). This means that\n // if the concrete prerender isn't ready yet and we served the fallback, then\n // the client knows it can use a *runtime* prefetch for speculative links --\n // a runtime prefetch can provide the same content (or more) as the concrete\n // prerender would.\n if (ensureStaticLevel < EnsureStaticLevel.Prefetch) {\n markRuntimeDataAccessWhenStageReached(\n prerenderDataTracking,\n stagedRendering,\n // `params` are URL data, so they only affect the prefetch\n RenderStage.PrefetchStatic\n )\n logRuntimeUpgradeableFallback?.()\n }\n break\n }\n // not an upgradeable fallback param access, so we treat it as URL data.\n // intentional fallthrough\n }\n case PrerenderDataKind.UrlData: {\n // Only deopt the prefetch, not the shell, which cannot access URL data anyway.\n if (\n currentStage <= RenderStage.PrefetchStatic &&\n ensureStaticLevel < EnsureStaticLevel.Prefetch\n ) {\n prerenderDataTracking.shouldAttemptStaticPrefetch = false\n logRuntimeDeopt?.(expression, 'prefetch')\n\n markRuntimeDataAccessWhenStageReached(\n prerenderDataTracking,\n stagedRendering,\n RenderStage.PrefetchStatic\n )\n }\n break\n }\n }\n\n break\n }\n case 'prerender-client':\n case 'prerender-legacy':\n case 'prerender-runtime':\n case 'validation-client':\n case 'request':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n // Only the modern server prerender tracks this; see the field docs on\n // PrerenderStoreModernServer.\n break\n default:\n workUnitStore satisfies never\n }\n}\n\n/**\n * Tracks a runtime data access on the `runtimeDataAccessed` promise,\n * but with a delay until `targetStage`.\n *\n * When we encounter a URL data access like `await params`, we need to mark the\n * *prefetch* as needing runtime data, but the *shell* should remain unaffected\n * (because it cannot access params anyway).\n *\n * However, the shell and the prefetch share one `runtimeDataAccessed` promise,\n * and it needs to be accurately rewindable by the client\n * In other words, we need to make sure that it reads as `false` when rewound\n * to a shell, but as `true` in the final response (the prefetch).\n *\n * This means that if the `await params` is encountered during the shell stage, we\n * cannot resolve `runtimeDataAccessed` immediately.\n * Instead, we delay the resolution until the PrefetchStatic stage, so the promise\n * will remain unresolved when rewound to the shell stage (which reads as `false`).\n */\nfunction markRuntimeDataAccessWhenStageReached(\n prerenderDataTracking: PrerenderDataTracking,\n stageController: StagedRenderingController,\n targetStage: AdvanceableRenderStage\n) {\n const { runtimeDataAccessed } = prerenderDataTracking\n // NOTE: If we're already in or past the target stage, we can avoid allocating a closure,\n // because `onStage` would've executed the callback immediately anyway.\n if (stageController.currentStage >= targetStage) {\n runtimeDataAccessed.resolve(true)\n } else {\n stageController.onStage(\n targetStage,\n runtimeDataAccessed.resolve.bind(null, true)\n )\n }\n}\n\nconst logRuntimeDeopt = process.env.NEXT_PRIVATE_DEBUG_RUNTIME_DATA\n ? (expression: string, kind: 'shell' | 'prefetch') => {\n const { route } = workAsyncStorage.getStore()!\n console.log(\n `Route '${route}': deopting to a runtime ${kind} because it used ${expression}`\n )\n }\n : undefined\n\nconst logRuntimeUpgradeableFallback = process.env\n .NEXT_PRIVATE_DEBUG_RUNTIME_DATA\n ? () => {\n const { route } = workAsyncStorage.getStore()!\n console.log(\n `Route '${route}': marking upgradeable fallback as runtime prefetchable`\n )\n }\n : undefined\n\n/**\n * Signals that we cannot recover both a runtime shell and a static (PPR) shell\n * from the same render. Use this whenever the stage of a promise varies on\n * `RequestStore.needsRuntimeShell`.\n * */\nexport function trackIncompatibleShellContent(\n workUnitStore: RequestStore,\n reason: string\n) {\n const { stagedRendering } = workUnitStore\n if (!stagedRendering) {\n return\n }\n\n // TODO(app-shells): optimize this to only consider stages that are relevant for validation.\n // We should only track incompatible content when it can affect them.\n // For now, we simply exclude everything that happens in the dynamic stage.\n // (Note that we also need to account for cache misses that move things to a\n // different stage -- those should also preemptively set `hasIncompatibleShellContent`\n // because there's a chance that a render with warm caches would set it)\n const { currentStage } = stagedRendering\n if (\n currentStage === RenderStage.Dynamic ||\n currentStage === RenderStage.Abandoned\n ) {\n return\n }\n if (process.env.NEXT_PRIVATE_DEBUG_VALIDATION) {\n const workStore = workAsyncStorage.getStore()!\n console.log(\n `Route ${workStore.route}: Incompatible shell content: ${reason}`\n )\n }\n workUnitStore.hasIncompatibleShellContent = true\n}\n\nexport function makeClientHookHangingPromise(\n signal: AbortSignal,\n error: ClientHookDynamicError\n): Promise {\n return makeHangingPromiseWithError(signal, error)\n}\n\nfunction makeHangingPromiseWithError(\n signal: AbortSignal,\n error: Error\n): Promise {\n if (signal.aborted) {\n return Promise.reject(error)\n } else {\n const hangingPromise = new Promise((_, reject) => {\n const boundRejection = reject.bind(null, error)\n let currentListeners = abortListenersBySignal.get(signal)\n if (currentListeners) {\n currentListeners.push(boundRejection)\n } else {\n const listeners = [boundRejection]\n abortListenersBySignal.set(signal, listeners)\n signal.addEventListener(\n 'abort',\n () => {\n for (let i = 0; i < listeners.length; i++) {\n listeners[i]()\n }\n },\n { once: true }\n )\n }\n })\n // We are fine if no one actually awaits this promise. We shouldn't consider this an unhandled rejection so\n // we attach a noop catch handler here to suppress this warning. If you actually await somewhere or construct\n // your own promise out of it you'll need to ensure you handle the error when it rejects.\n hangingPromise.catch(ignoreReject)\n return hangingPromise\n }\n}\n\nfunction ignoreReject() {}\n\n/**\n * Creates a promise that will be triggered when another promise resolves.\n * It will not emit unhandled rejections, which is important if the trigger\n * is a promise that might itself get rejected (e.g. when a prerender/render\n * are aborted due to sync IO)\n */\nexport function makePromiseFromTrigger(\n trigger: Promise,\n value: T\n): Promise {\n const promise = trigger.then(() => value)\n promise.catch(ignoreReject)\n return promise\n}\n\nexport function makeDevtoolsIOAwarePromise(\n underlying: T,\n requestStore: RequestStore,\n stage: AdvanceableRenderStage\n): Promise {\n if (requestStore.stagedRendering) {\n // We resolve each stage in a timeout, so React DevTools will pick this up as IO.\n return requestStore.stagedRendering.delayUntilStage(\n stage,\n undefined,\n underlying\n )\n }\n // in React DevTools if we resolve in a setTimeout we will observe\n // the promise resolution as something that can suspend a boundary or root.\n return new Promise((resolve) => {\n // Must use setTimeout to be considered IO React DevTools. setImmediate will not work.\n setTimeout(() => {\n resolve(underlying)\n }, 0)\n })\n}\n\n/**\n * Invokes `onUse` whenever `then()/catch()/finally()` are called on the promise\n * or when the promise is awaited. */\nexport function trackPromiseUsed(\n promise: Promise,\n onUse: () => void\n): Promise {\n // We can instrument `.then()/.catch()/.finally()` in one go by using a Promise subclass\n // that implements a custom `.then()`, because `catch` and `finally` delegate to it.\n //\n // Alternative implementation ideas that were tried and rejected:\n //\n // 1. Patching the methods directly via `promise.then = (..args) => { ... }`:\n // doesn't work, because Node does not call the monkeypatched methods for native `await`:\n // > Native Promise [...]: The promise is directly used and awaited natively, without calling `then()`.\n // > https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await#description\n //\n // 2. Wrapping in a proxy that returns a custom `then/catch/finally`:\n // breaks async stacks in React's IO tracking (stack becomes `Promise.then`)\n return TrackedPromise.from(promise, onUse)\n}\n\nclass TrackedPromise extends Promise {\n #onUse: (() => void) | null = null\n\n // We don't need derived promises to also be a TrackedPromise.\n // We only care about the first level of `.then()`.\n static get [Symbol.species]() {\n return Promise\n }\n\n static from(promise: Promise, onUse: () => void): TrackedPromise {\n // Whenever the promise we're tracking resolves/rejects, we should follow.\n const tracked = new TrackedPromise(promise.then.bind(promise))\n\n tracked.#onUse = onUse\n\n // Hanging promises catch rejections when created. Tracked promises are generally derived\n // from promises that may hang & reject, so we need to do the same.\n // However, we have to bypass the tracking we do in `TrackedPromise.then`.\n // (we're using `then` directly, because `catch` ends up delegating `TrackedPromise.then`)\n Promise.prototype.then.call(tracked, undefined, ignoreReject)\n\n return tracked\n }\n\n then(\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: unknown) => TResult2 | PromiseLike\n ): Promise {\n const onUse = this.#onUse\n if (onUse) {\n try {\n onUse()\n } catch (err) {\n // We don't want to break the method even if our tracking errored.\n console.error(err)\n }\n }\n\n return Promise.prototype.then.call(\n this,\n onFulfilled,\n onRejected\n ) as Promise\n }\n}\n\nexport const RENDER_STAGES_BY_DATA_KIND = {\n sessionData: RenderStage.ShellRuntime as const,\n /**\n * Statically-prerenderable URL data, like static `params`.\n * It may need to be pushed to a runtime stage in a runtime prerender,\n * but it's semantically distinct from `runtimeUrlData` like `searchParams`,\n * which is always excluded from static prerenders.\n * */\n staticUrlData: {\n /**\n * From that app's point of view, `prefetch()` is semantically the same as\n * `staticUrlData`, because it does not resolve in a shell but resolves in\n * a prefetch (even a static one).\n * We handle it separately to provide a specialized error in validation renders.\n */\n prefetchApi: {\n static: RenderStage.PrefetchStatic_prefetchApi as const,\n runtime: RenderStage.PrefetchRuntime_prefetchApi as const,\n },\n static: RenderStage.PrefetchStatic as const,\n runtime: RenderStage.PrefetchRuntime as const,\n },\n /**\n * URL data that is never statically-prerenderable, like static `searchParams`.\n * */\n runtimeUrlData: RenderStage.PrefetchRuntime as const,\n}\n\nexport function applyOwnerStack(error: Error): Error {\n if (process.env.NODE_ENV !== 'production') {\n let ownerStack: string | undefined | null\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n // captureOwnerStack() returns the owner stack for the current React\n // rendering context. Inside a cache scope this only includes the inner\n // component tree. The outer owner stack (captured before entering the\n // cache boundary in use-cache-wrapper.ts) is stored on the cache store.\n // We concatenate both to get the full component tree.\n const innerOwnerStack =\n getClientReact()?.captureOwnerStack?.() ??\n getServerReact()?.captureOwnerStack?.()\n\n switch (workUnitStore?.type) {\n case 'cache':\n case 'private-cache':\n ownerStack =\n (innerOwnerStack || '') + (workUnitStore.outerOwnerStack || '') ||\n undefined\n break\n case 'unstable-cache':\n case 'request':\n case 'prerender':\n case 'prerender-legacy':\n case 'prerender-runtime':\n case 'prerender-client':\n case 'validation-client':\n case 'build-time-generator':\n case undefined:\n ownerStack = innerOwnerStack\n break\n default:\n workUnitStore satisfies never\n }\n\n if (ownerStack) {\n let stack = ownerStack\n\n if (error.stack) {\n const frames: string[] = []\n\n for (const frame of error.stack.split('\\n').slice(1)) {\n if (frame.includes('react_stack_bottom_frame')) {\n break\n }\n\n frames.push(frame)\n }\n\n stack = '\\n' + frames.join('\\n') + stack\n }\n\n error.stack = error.name + ': ' + error.message + stack\n }\n }\n\n return error\n}\n"],"names":["InvariantError","createPromiseWithResolvers","EnsureStaticLevel","RenderStage","workAsyncStorage","workUnitAsyncStorage","getServerReact","getClientReact","isHangingPromiseRejectionError","err","digest","HANGING_PROMISE_REJECTION","HangingPromiseRejectionError","Error","constructor","route","expression","CLIENT_HOOK_DYNAMIC","ClientHookDynamicError","isClientHookDynamicError","abortListenersBySignal","WeakMap","makeDynamicHangingPromise","signal","makeHangingPromiseWithError","makeUntrackedHangingPromise","makeSessionDataHangingPromise","workUnitStore","promise","trackPromiseUsed","trackSessionDataAccessed","bind","makeURLDataHangingPromise","trackURLDataAccessed","makeUnknownRuntimeDataHangingPromise","makePrefetchHangingPromise","makeFallbackParamsHangingPromise","trackFallbackParamsAccessed","createPrerenderDataTracking","runtimeDataAccessed","shouldAttemptStaticShell","shouldAttemptStaticPrefetch","finishPrerenderDataTracking","prerenderDataTracking","resolve","trackRuntimeDataAccessed","dataKind","type","stagedRendering","currentStage","Before","console","error","NavigationStatic","ensureStaticLevel","None","firstAffectedStage","ShellStatic","Shell","logRuntimeDeopt","PrefetchStatic","Prefetch","markRuntimeDataAccessWhenStageReached","isFallbackUpgradeable","logRuntimeUpgradeableFallback","stageController","targetStage","onStage","process","env","NEXT_PRIVATE_DEBUG_RUNTIME_DATA","kind","getStore","log","undefined","trackIncompatibleShellContent","reason","Dynamic","Abandoned","NEXT_PRIVATE_DEBUG_VALIDATION","workStore","hasIncompatibleShellContent","makeClientHookHangingPromise","aborted","Promise","reject","hangingPromise","_","boundRejection","currentListeners","get","push","listeners","set","addEventListener","i","length","once","catch","ignoreReject","makePromiseFromTrigger","trigger","value","then","makeDevtoolsIOAwarePromise","underlying","requestStore","stage","delayUntilStage","setTimeout","onUse","TrackedPromise","from","Symbol","species","tracked","prototype","call","onFulfilled","onRejected","RENDER_STAGES_BY_DATA_KIND","sessionData","ShellRuntime","staticUrlData","prefetchApi","static","PrefetchStatic_prefetchApi","runtime","PrefetchRuntime_prefetchApi","PrefetchRuntime","runtimeUrlData","applyOwnerStack","NODE_ENV","ownerStack","innerOwnerStack","captureOwnerStack","outerOwnerStack","stack","frames","frame","split","slice","includes","join","name","message"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAASA,cAAc,QAAQ,gCAA+B;AAC9D,SAASC,0BAA0B,QAAQ,uCAAsC;AACjF,SAASC,iBAAiB,QAAQ,4CAA2C;AAC7E,SACEC,WAAW,QAGN,gCAA+B;AACtC,SAASC,gBAAgB,QAAQ,2CAA0C;AAK3E,SAASC,oBAAoB,QAAQ,gDAA+C;AACpF,SAASC,cAAc,EAAEC,cAAc,QAAQ,4BAA2B;;;;;;;;AAEnE,SAASC,+BACdC,GAAY;IAEZ,IAAI,OAAOA,QAAQ,YAAYA,QAAQ,QAAQ,CAAE,CAAA,YAAYA,GAAE,GAAI;QACjE,OAAO;IACT;IAEA,OAAOA,IAAIC,MAAM,KAAKC;AACxB;AAEA,MAAMA,4BAA4B;AAElC,MAAMC,qCAAqCC;IAGzCC,YACkBC,KAAa,EACbC,UAAkB,CAClC;QACA,KAAK,CACH,CAAC,qBAAqB,EAAEA,WAAW,qGAAqG,EAAEA,WAAW,8KAA8K,EAAED,MAAM,EAAE,CAAC,GAAA,IAAA,CAJhUA,KAAAA,GAAAA,OAAAA,IAAAA,CACAC,UAAAA,GAAAA,YAAAA,IAAAA,CAJFN,MAAAA,GAASC;IASzB;AACF;AAEA,MAAMM,sBAAsB;AAErB,MAAMC,+BAA+BL;IAG1CC,YAAYC,KAAa,EAAEC,UAAkB,CAAE;QAC7C,KAAK,CACH,CAAC,OAAO,EAAED,MAAM,kCAAkC,EAAEC,WAAW,uDAAuD,CAAC,GACrH,CAAC,4EAA4E,CAAC,GAC9E,CAAC,mBAAmB,CAAC,GACrB,CAAC,kHAAkH,CAAC,GACpH,CAAC,8EAA8E,CAAC,GAChF,CAAC,2EAA2E,CAAC,GAAA,IAAA,CATnEN,MAAAA,GAASO;IAWzB;AACF;AAEO,SAASE,yBACdV,GAAY;IAEZ,IAAI,OAAOA,QAAQ,YAAYA,QAAQ,QAAQ,CAAE,CAAA,YAAYA,GAAE,GAAI;QACjE,OAAO;IACT;IAEA,OAAOA,IAAIC,MAAM,KAAKO;AACxB;AAGA,MAAMG,yBAAyB,IAAIC;AAgB5B,SAASC,0BACdC,MAAmB,EACnBR,KAAa,EACbC,UAAkB;IAElB,OAAOQ,4BACLD,QACA,IAAIX,6BAA6BG,OAAOC;AAE5C;AAEO,SAASS,4BACdF,MAAmB,EACnBR,KAAa,EACbC,UAAkB;IAElB,OAAOQ,4BACLD,QACA,IAAIX,6BAA6BG,OAAOC;AAE5C;AAoBO,SAASU,8BACdH,MAAmB,EACnBR,KAAa,EACbC,UAAkB,EAClBW,aAA4B;IAE5B,MAAMC,UAAUJ,4BACdD,QACA,IAAIX,6BAA6BG,OAAOC;IAE1C,OAAOa,iBACLD,SACAE,yBAAyBC,IAAI,CAAC,MAAMJ,eAAeX;AAEvD;AAyBO,SAASgB,0BACdT,MAAmB,EACnBR,KAAa,EACbC,UAAkB,EAClBW,aAAmC;IAEnC,MAAMC,UAAUJ,4BACdD,QACA,IAAIX,6BAA6BG,OAAOC;IAE1C,IAAIW,kBAAkB,MAAM;QAC1B,OAAOC;IACT;IACA,OAAOC,iBACLD,SACAK,qBAAqBF,IAAI,CAAC,MAAMJ,eAAeX;AAEnD;AAMO,SAASkB,qCACdX,MAAmB,EACnBR,KAAa,EACbC,UAAkB,EAClBW,aAA4B;IAE5B,mFAAmF;IACnF,mEAAmE;IACnE,OAAOD,8BAA8BH,QAAQR,OAAOC,YAAYW;AAClE;AAUO,SAASQ,2BACdZ,MAAmB,EACnBR,KAAa,EACbC,UAAkB;IAElB,OAAOS,4BAA4BF,QAAQR,OAAOC;AACpD;AAeO,SAASoB,iCACdb,MAAmB,EACnBR,KAAa,EACbC,UAAkB,EAClBW,aAAmC;IAEnC,MAAMC,UAAUJ,4BACdD,QACA,IAAIX,6BAA6BG,OAAOC;IAE1C,IAAIW,kBAAkB,MAAM;QAC1B,OAAOC;IACT;IACA,OAAOC,iBACLD,SACAS,4BAA4BN,IAAI,CAAC,MAAMJ,eAAeX;AAE1D;AAqCO,SAASsB;IACd,OAAO;QACLC,yBAAqBtC,oNAAAA;QACrBuC,0BAA0B;QAC1BC,6BAA6B;IAC/B;AACF;AAEO,SAASC,4BACdC,qBAA4C;IAE5C,2EAA2E;IAC3EA,sBAAsBJ,mBAAmB,CAACK,OAAO,CAAC;AACpD;AAEA;;;;;;;CAOC,GACD,SAASd,yBACPH,aAA4B,EAC5BX,UAAkB;IAElB6B,yBACElB,eAAAA,GAEAX;AAEJ;AAaO,SAASiB,qBACdN,aAA4B,EAC5BX,UAAkB;IAElB6B,yBAAyBlB,eAAAA,GAA0CX;AACrE;AAUO,SAASqB,4BACdV,aAA4B,EAC5BX,UAAkB;IAElB6B,yBACElB,eAAAA,GAEAX;AAEJ;AAQA,SAAS6B,yBACPlB,aAA4B,EAC5BmB,QAA2B,EAC3B9B,UAAkB;IAElB,OAAQW,cAAcoB,IAAI;QACxB,KAAK;YAAa;gBAChB,MAAM,EAAEJ,qBAAqB,EAAEK,eAAe,EAAE,GAAGrB;gBACnD,IAAI,CAACgB,yBAAyB,CAACK,iBAAiB;oBAC9C;gBACF;gBACA,MAAM,EAAEC,YAAY,EAAE,GAAGD;gBACzB,IAAIC,iBAAiB9C,sMAAAA,CAAY+C,MAAM,EAAE;oBACvCC,QAAQC,KAAK,CACX,IAAIpD,8LAAAA,CACF;oBAGJ;gBACF;gBACA,IAAIiD,gBAAgB9C,sMAAAA,CAAYkD,gBAAgB,EAAE;oBAChD,iEAAiE;oBACjE,sEAAsE;oBACtE,0DAA0D;oBAC1D,mEAAmE;oBACnE,2EAA2E;oBAC3E,uCAAuC;oBACvC;gBACF;gBAEA,MAAMC,oBACJ3B,cAAc2B,iBAAiB,IAAIpD,8NAAAA,CAAkBqD,IAAI;gBAE3D,+EAA+E;gBAC/E,6EAA6E;gBAC7E,kFAAkF;gBAClF,6DAA6D;gBAC7D,2EAA2E;gBAC3E,0EAA0E;gBAC1E,0EAA0E;gBAC1E,yBAAyB;gBAEzB,OAAQT;oBACN,KAAA;wBAAoC;4BAClC,qDAAqD;4BACrD,oEAAoE;4BACpE,6EAA6E;4BAC7E,kFAAkF;4BAClF,IAAIU,qBAGO;4BAEX,IACEP,gBAAgB9C,sMAAAA,CAAYsD,WAAW,IACvC,0DAA0D;4BAC1DH,oBAAoBpD,8NAAAA,CAAkBwD,KAAK,EAC3C;gCACAf,sBAAsBH,wBAAwB,GAAG;gCACjDgB,uBAAuBrD,sMAAAA,CAAYsD,WAAW;gCAC9CE,mBAAAA,OAAAA,KAAAA,IAAAA,gBAAkB3C,YAAY;4BAChC;4BAEA,IACEiC,gBAAgB9C,sMAAAA,CAAYyD,cAAc,IAC1C,6DAA6D;4BAC7DN,oBAAoBpD,8NAAAA,CAAkB2D,QAAQ,EAC9C;gCACAlB,sBAAsBF,2BAA2B,GAAG;gCACpD,qDAAqD;gCACrDe,uBAAuBrD,sMAAAA,CAAYyD,cAAc;gCACjDD,mBAAAA,OAAAA,KAAAA,IAAAA,gBAAkB3C,YAAY;4BAChC;4BAEA,IAAIwC,uBAAuB,MAAM;gCAC/BM,sCACEnB,uBACAK,iBACAQ;4BAEJ;4BACA;wBACF;oBACA,KAAA;wBAAuC;4BACrC,IAAI7B,cAAcoC,qBAAqB,EAAE;gCACvC,0DAA0D;gCAC1D,yEAAyE;gCACzE,4EAA4E;gCAC5E,qDAAqD;gCACrD,EAAE;gCACF,4EAA4E;gCAC5E,8EAA8E;gCAC9E,6EAA6E;gCAC7E,4EAA4E;gCAC5E,4EAA4E;gCAC5E,mBAAmB;gCACnB,IAAIT,oBAAoBpD,8NAAAA,CAAkB2D,QAAQ,EAAE;oCAClDC,sCACEnB,uBACAK,iBAEA7C,AADA,0DAA0D,4IAC1DA,CAAYyD,cAAc;oCAE5BI,iCAAAA,OAAAA,KAAAA,IAAAA;gCACF;gCACA;4BACF;wBACA,wEAAwE;wBACxE,0BAA0B;wBAC5B;oBACA,KAAA;wBAAgC;4BAC9B,+EAA+E;4BAC/E,IACEf,gBAAgB9C,sMAAAA,CAAYyD,cAAc,IAC1CN,oBAAoBpD,8NAAAA,CAAkB2D,QAAQ,EAC9C;gCACAlB,sBAAsBF,2BAA2B,GAAG;gCACpDkB,mBAAAA,OAAAA,KAAAA,IAAAA,gBAAkB3C,YAAY;gCAE9B8C,sCACEnB,uBACAK,iBACA7C,sMAAAA,CAAYyD,cAAc;4BAE9B;4BACA;wBACF;gBACF;gBAEA;YACF;QACA,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;YAGH;QACF;YACEjC;IACJ;AACF;AAEA;;;;;;;;;;;;;;;;;CAiBC,GACD,SAASmC,sCACPnB,qBAA4C,EAC5CsB,eAA0C,EAC1CC,WAAmC;IAEnC,MAAM,EAAE3B,mBAAmB,EAAE,GAAGI;IAChC,yFAAyF;IACzF,uEAAuE;IACvE,IAAIsB,gBAAgBhB,YAAY,IAAIiB,aAAa;QAC/C3B,oBAAoBK,OAAO,CAAC;IAC9B,OAAO;QACLqB,gBAAgBE,OAAO,CACrBD,aACA3B,oBAAoBK,OAAO,CAACb,IAAI,CAAC,MAAM;IAE3C;AACF;AAEA,MAAM4B,kBAAkBS,QAAQC,GAAG,CAACC,+BAA+B,GAC/D,CAACtD,YAAoBuD;IACnB,MAAM,EAAExD,KAAK,EAAE,GAAGX,uRAAAA,CAAiBoE,QAAQ;IAC3CrB,QAAQsB,GAAG,CACT,CAAC,OAAO,EAAE1D,MAAM,yBAAyB,EAAEwD,KAAK,iBAAiB,EAAEvD,YAAY;AAEnF,IACA0D;AAEJ,MAAMV,gCAAgCI,QAAQC,GAAG,CAC9CC,+BAA+B,GAC9B;IACE,MAAM,EAAEvD,KAAK,EAAE,GAAGX,uRAAAA,CAAiBoE,QAAQ;IAC3CrB,QAAQsB,GAAG,CACT,CAAC,OAAO,EAAE1D,MAAM,uDAAuD,CAAC;AAE5E,IACA2D;AAOG,SAASC,8BACdhD,aAA2B,EAC3BiD,MAAc;IAEd,MAAM,EAAE5B,eAAe,EAAE,GAAGrB;IAC5B,IAAI,CAACqB,iBAAiB;QACpB;IACF;IAEA,4FAA4F;IAC5F,qEAAqE;IACrE,2EAA2E;IAC3E,4EAA4E;IAC5E,sFAAsF;IACtF,wEAAwE;IACxE,MAAM,EAAEC,YAAY,EAAE,GAAGD;IACzB,IACEC,iBAAiB9C,sMAAAA,CAAY0E,OAAO,IACpC5B,iBAAiB9C,sMAAAA,CAAY2E,SAAS,EACtC;QACA;IACF;IACA,IAAIV,QAAQC,GAAG,CAACU,6BAA6B,EAAE;QAC7C,MAAMC,YAAY5E,uRAAAA,CAAiBoE,QAAQ;QAC3CrB,QAAQsB,GAAG,CACT,CAAC,MAAM,EAAEO,UAAUjE,KAAK,CAAC,8BAA8B,EAAE6D,QAAQ;IAErE;IACAjD,cAAcsD,2BAA2B,GAAG;AAC9C;AAEO,SAASC,6BACd3D,MAAmB,EACnB6B,KAA6B;IAE7B,OAAO5B,4BAA4BD,QAAQ6B;AAC7C;AAEA,SAAS5B,4BACPD,MAAmB,EACnB6B,KAAY;IAEZ,IAAI7B,OAAO4D,OAAO,EAAE;QAClB,OAAOC,QAAQC,MAAM,CAACjC;IACxB,OAAO;QACL,MAAMkC,iBAAiB,IAAIF,QAAW,CAACG,GAAGF;YACxC,MAAMG,iBAAiBH,OAAOtD,IAAI,CAAC,MAAMqB;YACzC,IAAIqC,mBAAmBrE,uBAAuBsE,GAAG,CAACnE;YAClD,IAAIkE,kBAAkB;gBACpBA,iBAAiBE,IAAI,CAACH;YACxB,OAAO;gBACL,MAAMI,YAAY;oBAACJ;iBAAe;gBAClCpE,uBAAuByE,GAAG,CAACtE,QAAQqE;gBACnCrE,OAAOuE,gBAAgB,CACrB,SACA;oBACE,IAAK,IAAIC,IAAI,GAAGA,IAAIH,UAAUI,MAAM,EAAED,IAAK;wBACzCH,SAAS,CAACG,EAAE;oBACd;gBACF,GACA;oBAAEE,MAAM;gBAAK;YAEjB;QACF;QACA,2GAA2G;QAC3G,6GAA6G;QAC7G,yFAAyF;QACzFX,eAAeY,KAAK,CAACC;QACrB,OAAOb;IACT;AACF;AAEA,SAASa,gBAAgB;AAQlB,SAASC,uBACdC,OAAqB,EACrBC,KAAQ;IAER,MAAM1E,UAAUyE,QAAQE,IAAI,CAAC,IAAMD;IACnC1E,QAAQsE,KAAK,CAACC;IACd,OAAOvE;AACT;AAEO,SAAS4E,2BACdC,UAAa,EACbC,YAA0B,EAC1BC,KAA6B;IAE7B,IAAID,aAAa1D,eAAe,EAAE;QAChC,iFAAiF;QACjF,OAAO0D,aAAa1D,eAAe,CAAC4D,eAAe,CACjDD,OACAjC,WACA+B;IAEJ;IACA,kEAAkE;IAClE,2EAA2E;IAC3E,OAAO,IAAIrB,QAAW,CAACxC;QACrB,sFAAsF;QACtFiE,WAAW;YACTjE,QAAQ6D;QACV,GAAG;IACL;AACF;AAKO,SAAS5E,iBACdD,OAAmB,EACnBkF,KAAiB;IAEjB,wFAAwF;IACxF,oFAAoF;IACpF,EAAE;IACF,iEAAiE;IACjE,EAAE;IACF,6EAA6E;IAC7E,2FAA2F;IAC3F,yGAAyG;IACzG,oGAAoG;IACpG,EAAE;IACF,qEAAqE;IACrE,8EAA8E;IAC9E,OAAOC,eAAeC,IAAI,CAAIpF,SAASkF;AACzC;AAEA,MAAMC,uBAA0B3B;KAC9B,CAAA,IAAM,CAA4B;IAElC,8DAA8D;IAC9D,mDAAmD;IACnD,WAAW,CAAC6B,OAAOC,OAAO,CAAC,GAAG;QAC5B,OAAO9B;IACT;IAEA,OAAO4B,KAAQpF,OAAmB,EAAEkF,KAAiB,EAAqB;QACxE,0EAA0E;QAC1E,MAAMK,UAAU,IAAIJ,eAAkBnF,QAAQ2E,IAAI,CAACxE,IAAI,CAACH;QAExDuF,SAAQ,CAAA,IAAM,GAAGL;QAEjB,yFAAyF;QACzF,mEAAmE;QACnE,0EAA0E;QAC1E,0FAA0F;QAC1F1B,QAAQgC,SAAS,CAACb,IAAI,CAACc,IAAI,CAACF,SAASzC,WAAWyB;QAEhD,OAAOgB;IACT;IAEAZ,KACEe,WAA4D,EAC5DC,UAAkE,EACpC;QAC9B,MAAMT,QAAQ,IAAI,EAAC,CAAA,IAAM;QACzB,IAAIA,OAAO;YACT,IAAI;gBACFA;YACF,EAAE,OAAOrG,KAAK;gBACZ,kEAAkE;gBAClE0C,QAAQC,KAAK,CAAC3C;YAChB;QACF;QAEA,OAAO2E,QAAQgC,SAAS,CAACb,IAAI,CAACc,IAAI,CAChC,IAAI,EACJC,aACAC;IAEJ;;QA3CF,KAAA,IAAA,OAAA,IAAA,EACE,CAAA,IAAM,GAAwB;;AA2ChC;AAEO,MAAMC,6BAA6B;IACxCC,aAAatH,sMAAAA,CAAYuH,YAAY;IACrC;;;;;KAKG,GACHC,eAAe;QACb;;;;;KAKC,GACDC,aAAa;YACXC,QAAQ1H,sMAAAA,CAAY2H,0BAA0B;YAC9CC,SAAS5H,sMAAAA,CAAY6H,2BAA2B;QAClD;QACAH,QAAQ1H,sMAAAA,CAAYyD,cAAc;QAClCmE,SAAS5H,sMAAAA,CAAY8H,eAAe;IACtC;IACA;;KAEG,GACHC,gBAAgB/H,sMAAAA,CAAY8H,eAAe;AAC7C,EAAC;AAEM,SAASE,gBAAgB/E,KAAY;IAC1C,IAAIgB,QAAQC,GAAG,CAAC+D,QAAQ,KAAK,WAAc;YAUvC7H,mCAAAA,iBACAD,mCAAAA;QAVF,IAAI+H;QACJ,MAAM1G,gBAAgBtB,2SAAAA,CAAqBmE,QAAQ;QAEnD,oEAAoE;QACpE,uEAAuE;QACvE,sEAAsE;QACtE,wEAAwE;QACxE,sDAAsD;QACtD,MAAM8D,kBACJ/H,CAAAA,CAAAA,sBAAAA,qOAAAA,GAAAA,KAAAA,OAAAA,KAAAA,IAAAA,CAAAA,oCAAAA,gBAAkBgI,iBAAiB,KAAA,OAAA,KAAA,IAAnChI,kCAAAA,IAAAA,CAAAA,gBAAAA,KAAAA,CAAAA,CACAD,sBAAAA,qOAAAA,GAAAA,KAAAA,OAAAA,KAAAA,IAAAA,CAAAA,oCAAAA,gBAAkBiI,iBAAiB,KAAA,OAAA,KAAA,IAAnCjI,kCAAAA,IAAAA,CAAAA,gBAAAA;QAEF,OAAQqB,iBAAAA,OAAAA,KAAAA,IAAAA,cAAeoB,IAAI;YACzB,KAAK;YACL,KAAK;gBACHsF,aACGC,CAAAA,mBAAmB,EAAC,IAAM3G,CAAAA,cAAc6G,eAAe,IAAI,EAAC,KAC7D9D;gBACF;YACF,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAKA;gBACH2D,aAAaC;gBACb;YACF;gBACE3G;QACJ;QAEA,IAAI0G,YAAY;YACd,IAAII,QAAQJ;YAEZ,IAAIjF,MAAMqF,KAAK,EAAE;gBACf,MAAMC,SAAmB,EAAE;gBAE3B,KAAK,MAAMC,SAASvF,MAAMqF,KAAK,CAACG,KAAK,CAAC,MAAMC,KAAK,CAAC,GAAI;oBACpD,IAAIF,MAAMG,QAAQ,CAAC,6BAA6B;wBAC9C;oBACF;oBAEAJ,OAAO/C,IAAI,CAACgD;gBACd;gBAEAF,QAAQ,OAAOC,OAAOK,IAAI,CAAC,QAAQN;YACrC;YAEArF,MAAMqF,KAAK,GAAGrF,MAAM4F,IAAI,GAAG,OAAO5F,MAAM6F,OAAO,GAAGR;QACpD;IACF;IAEA,OAAOrF;AACT","ignoreList":[0]}}, + {"offset": {"line": 4663, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/instrumentation/utils.ts"],"sourcesContent":["export function getRevalidateReason(params: {\n isOnDemandRevalidate?: boolean\n isStaticGeneration?: boolean\n}): 'on-demand' | 'stale' | undefined {\n if (params.isOnDemandRevalidate) {\n return 'on-demand'\n }\n if (params.isStaticGeneration) {\n return 'stale'\n }\n return undefined\n}\n"],"names":["getRevalidateReason","params","isOnDemandRevalidate","isStaticGeneration","undefined"],"mappings":";;;;AAAO,SAASA,oBAAoBC,MAGnC;IACC,IAAIA,OAAOC,oBAAoB,EAAE;QAC/B,OAAO;IACT;IACA,IAAID,OAAOE,kBAAkB,EAAE;QAC7B,OAAO;IACT;IACA,OAAOC;AACT","ignoreList":[0]}}, + {"offset": {"line": 4680, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/app-dir-module.ts"],"sourcesContent":["import type { AppDirModules } from '../../build/webpack/loaders/next-app-loader'\nimport { DEFAULT_SEGMENT_KEY } from '../../shared/lib/segment'\n\n/**\n * LoaderTree is generated in next-app-loader.\n */\nexport type LoaderTree = [\n segment: string,\n parallelRoutes: { [parallelRouterKey: string]: LoaderTree },\n modules: AppDirModules,\n /**\n * At build time, for each dynamic segment, we compute the list of static\n * sibling segments that exist at the same URL path level. This is used by\n * the client router to determine if a prefetch can be reused.\n *\n * For example, given the following file structure:\n * /app/(group1)/products/sale/page.tsx -> /products/sale\n * /app/(group2)/products/[id]/page.tsx -> /products/[id]\n *\n * The [id] segment would have staticSiblings: ['sale']\n *\n * This accounts for route groups, which may place sibling routes in\n * different parts of the file system tree but at the same URL level.\n *\n * A value of `null` means the static siblings are unknown (e.g., in webpack\n * dev mode where routes are compiled on-demand).\n */\n staticSiblings: readonly string[] | null,\n]\n\nexport async function getLayoutOrPageModule(loaderTree: LoaderTree) {\n const { layout, page, defaultPage } = loaderTree[2]\n const isLayout = typeof layout !== 'undefined'\n const isPage = typeof page !== 'undefined'\n const isDefaultPage =\n typeof defaultPage !== 'undefined' && loaderTree[0] === DEFAULT_SEGMENT_KEY\n\n let mod = undefined\n let modType: 'layout' | 'page' | undefined = undefined\n let filePath = undefined\n\n if (isLayout) {\n mod = await layout[0]()\n modType = 'layout'\n filePath = layout[1]\n } else if (isPage) {\n mod = await page[0]()\n modType = 'page'\n filePath = page[1]\n } else if (isDefaultPage) {\n mod = await defaultPage[0]()\n modType = 'page'\n filePath = defaultPage[1]\n }\n\n return { mod, modType, filePath }\n}\n\nexport async function getComponentTypeModule(\n loaderTree: LoaderTree,\n moduleType: 'layout' | 'not-found' | 'forbidden' | 'unauthorized'\n) {\n const { [moduleType]: module } = loaderTree[2]\n if (typeof module !== 'undefined') {\n return await module[0]()\n }\n return undefined\n}\n"],"names":["DEFAULT_SEGMENT_KEY","getLayoutOrPageModule","loaderTree","layout","page","defaultPage","isLayout","isPage","isDefaultPage","mod","undefined","modType","filePath","getComponentTypeModule","moduleType","module"],"mappings":";;;;;;AACA,SAASA,mBAAmB,QAAQ,2BAA0B;;AA6BvD,eAAeC,sBAAsBC,UAAsB;IAChE,MAAM,EAAEC,MAAM,EAAEC,IAAI,EAAEC,WAAW,EAAE,GAAGH,UAAU,CAAC,EAAE;IACnD,MAAMI,WAAW,OAAOH,WAAW;IACnC,MAAMI,SAAS,OAAOH,SAAS;IAC/B,MAAMI,gBACJ,OAAOH,gBAAgB,eAAeH,UAAU,CAAC,EAAE,KAAKF,wLAAAA;IAE1D,IAAIS,MAAMC;IACV,IAAIC,UAAyCD;IAC7C,IAAIE,WAAWF;IAEf,IAAIJ,UAAU;QACZG,MAAM,MAAMN,MAAM,CAAC,EAAE;QACrBQ,UAAU;QACVC,WAAWT,MAAM,CAAC,EAAE;IACtB,OAAO,IAAII,QAAQ;QACjBE,MAAM,MAAML,IAAI,CAAC,EAAE;QACnBO,UAAU;QACVC,WAAWR,IAAI,CAAC,EAAE;IACpB,OAAO,IAAII,eAAe;QACxBC,MAAM,MAAMJ,WAAW,CAAC,EAAE;QAC1BM,UAAU;QACVC,WAAWP,WAAW,CAAC,EAAE;IAC3B;IAEA,OAAO;QAAEI;QAAKE;QAASC;IAAS;AAClC;AAEO,eAAeC,uBACpBX,UAAsB,EACtBY,UAAiE;IAEjE,MAAM,EAAE,CAACA,WAAW,EAAEC,MAAM,EAAE,GAAGb,UAAU,CAAC,EAAE;IAC9C,IAAI,OAAOa,WAAW,aAAa;QACjC,OAAO,MAAMA,MAAM,CAAC,EAAE;IACxB;IACA,OAAOL;AACT","ignoreList":[0]}}, + {"offset": {"line": 4726, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/cache-control.ts"],"sourcesContent":["import { CACHE_ONE_YEAR_SECONDS } from '../../lib/constants'\n\n/**\n * The revalidate option used internally for pages. A value of `false` means\n * that the page should not be revalidated. A number means that the page\n * should be revalidated after the given number of seconds (this also includes\n * `1` which means to revalidate after 1 second). A value of `0` is not a valid\n * value for this option.\n */\nexport type Revalidate = number | false\n\nexport interface CacheControl {\n revalidate: Revalidate\n expire: number | undefined\n}\n\nexport function getCacheControlHeader({\n revalidate,\n expire,\n}: CacheControl): string {\n const swrHeader =\n typeof revalidate === 'number' &&\n expire !== undefined &&\n revalidate < expire\n ? `, stale-while-revalidate=${expire - revalidate}`\n : ''\n\n if (revalidate === 0) {\n return 'private, no-cache, no-store, max-age=0, must-revalidate'\n } else if (typeof revalidate === 'number') {\n return `s-maxage=${revalidate}${swrHeader}`\n }\n\n return `s-maxage=${CACHE_ONE_YEAR_SECONDS}${swrHeader}`\n}\n"],"names":["CACHE_ONE_YEAR_SECONDS","getCacheControlHeader","revalidate","expire","swrHeader","undefined"],"mappings":";;;;AAAA,SAASA,sBAAsB,QAAQ,sBAAqB;;AAgBrD,SAASC,sBAAsB,EACpCC,UAAU,EACVC,MAAM,EACO;IACb,MAAMC,YACJ,OAAOF,eAAe,YACtBC,WAAWE,aACXH,aAAaC,SACT,CAAC,yBAAyB,EAAEA,SAASD,YAAY,GACjD;IAEN,IAAIA,eAAe,GAAG;QACpB,OAAO;IACT,OAAO,IAAI,OAAOA,eAAe,UAAU;QACzC,OAAO,CAAC,SAAS,EAAEA,aAAaE,WAAW;IAC7C;IAEA,OAAO,CAAC,SAAS,EAAEJ,mLAAAA,GAAyBI,WAAW;AACzD","ignoreList":[0]}}, + {"offset": {"line": 4745, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/clone-response.ts"],"sourcesContent":["const noop = () => {}\n\nlet registry: FinalizationRegistry> | undefined\n\nif (globalThis.FinalizationRegistry) {\n registry = new FinalizationRegistry((weakRef: WeakRef) => {\n const stream = weakRef.deref()\n if (stream && !stream.locked) {\n stream.cancel('Response object has been garbage collected').then(noop)\n }\n })\n}\n\n/**\n * Clones a response by teeing the body so we can return two independent\n * ReadableStreams from it. This avoids the bug in the undici library around\n * response cloning.\n *\n * After cloning, the original response's body will be consumed and closed.\n *\n * @see https://github.com/vercel/next.js/pull/73274\n *\n * @param original - The original response to clone.\n * @returns A tuple containing two independent clones of the original response.\n */\nexport function cloneResponse(original: Response): [Response, Response] {\n // If the response has no body, then we can just return the original response\n // twice because it's immutable.\n if (!original.body) {\n return [original, original]\n }\n\n const [body1, body2] = original.body.tee()\n\n const cloned1 = new Response(body1, {\n status: original.status,\n statusText: original.statusText,\n headers: original.headers,\n })\n\n Object.defineProperty(cloned1, 'url', {\n value: original.url,\n // How the original response.url behaves\n configurable: true,\n enumerable: true,\n writable: false,\n })\n\n const cloned2 = new Response(body2, {\n status: original.status,\n statusText: original.statusText,\n headers: original.headers,\n })\n\n Object.defineProperty(cloned2, 'url', {\n value: original.url,\n // How the original response.url behaves\n configurable: true,\n enumerable: true,\n writable: false,\n })\n\n // The Fetch Standard allows users to skip consuming the response body by\n // relying on garbage collection to release connection resources.\n // https://github.com/nodejs/undici?tab=readme-ov-file#garbage-collection\n //\n // To cancel the stream you then need to cancel both resulting branches.\n // Teeing a stream will generally lock it for the duration, preventing other\n // readers from locking it.\n // https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/tee\n if (registry) {\n if (cloned1.body) {\n registry.register(cloned1, new WeakRef(cloned1.body))\n }\n\n if (cloned2.body) {\n registry.register(cloned2, new WeakRef(cloned2.body))\n }\n }\n\n return [cloned1, cloned2]\n}\n"],"names":["noop","registry","globalThis","FinalizationRegistry","weakRef","stream","deref","locked","cancel","then","cloneResponse","original","body","body1","body2","tee","cloned1","Response","status","statusText","headers","Object","defineProperty","value","url","configurable","enumerable","writable","cloned2","register","WeakRef"],"mappings":";;;;AAAA,MAAMA,OAAO,KAAO;AAEpB,IAAIC;AAEJ,IAAIC,WAAWC,oBAAoB,EAAE;IACnCF,WAAW,IAAIE,qBAAqB,CAACC;QACnC,MAAMC,SAASD,QAAQE,KAAK;QAC5B,IAAID,UAAU,CAACA,OAAOE,MAAM,EAAE;YAC5BF,OAAOG,MAAM,CAAC,8CAA8CC,IAAI,CAACT;QACnE;IACF;AACF;AAcO,SAASU,cAAcC,QAAkB;IAC9C,6EAA6E;IAC7E,gCAAgC;IAChC,IAAI,CAACA,SAASC,IAAI,EAAE;QAClB,OAAO;YAACD;YAAUA;SAAS;IAC7B;IAEA,MAAM,CAACE,OAAOC,MAAM,GAAGH,SAASC,IAAI,CAACG,GAAG;IAExC,MAAMC,UAAU,IAAIC,SAASJ,OAAO;QAClCK,QAAQP,SAASO,MAAM;QACvBC,YAAYR,SAASQ,UAAU;QAC/BC,SAAST,SAASS,OAAO;IAC3B;IAEAC,OAAOC,cAAc,CAACN,SAAS,OAAO;QACpCO,OAAOZ,SAASa,GAAG;QACnB,wCAAwC;QACxCC,cAAc;QACdC,YAAY;QACZC,UAAU;IACZ;IAEA,MAAMC,UAAU,IAAIX,SAASH,OAAO;QAClCI,QAAQP,SAASO,MAAM;QACvBC,YAAYR,SAASQ,UAAU;QAC/BC,SAAST,SAASS,OAAO;IAC3B;IAEAC,OAAOC,cAAc,CAACM,SAAS,OAAO;QACpCL,OAAOZ,SAASa,GAAG;QACnB,wCAAwC;QACxCC,cAAc;QACdC,YAAY;QACZC,UAAU;IACZ;IAEA,yEAAyE;IACzE,iEAAiE;IACjE,yEAAyE;IACzE,EAAE;IACF,wEAAwE;IACxE,4EAA4E;IAC5E,2BAA2B;IAC3B,sEAAsE;IACtE,IAAI1B,UAAU;QACZ,IAAIe,QAAQJ,IAAI,EAAE;YAChBX,SAAS4B,QAAQ,CAACb,SAAS,IAAIc,QAAQd,QAAQJ,IAAI;QACrD;QAEA,IAAIgB,QAAQhB,IAAI,EAAE;YAChBX,SAAS4B,QAAQ,CAACD,SAAS,IAAIE,QAAQF,QAAQhB,IAAI;QACrD;IACF;IAEA,OAAO;QAACI;QAASY;KAAQ;AAC3B","ignoreList":[0]}}, + {"offset": {"line": 4818, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/dedupe-fetch.ts"],"sourcesContent":["/**\n * Based on https://github.com/facebook/react/blob/d4e78c42a94be027b4dc7ed2659a5fddfbf9bd4e/packages/react/src/ReactFetch.js\n */\nimport * as React from 'react'\nimport { cloneResponse } from './clone-response'\nimport { InvariantError } from '../../shared/lib/invariant-error'\n\nconst simpleCacheKey = '[\"GET\",[],null,\"follow\",null,null,null,null]' // generateCacheKey(new Request('https://blank'));\n\n// Headers that should not affect deduplication\n// traceparent and tracestate are used for distributed tracing and should not affect cache keys\nconst headersToExcludeInCacheKey = new Set(['traceparent', 'tracestate'])\n\nfunction generateCacheKey(request: Request): string {\n // We pick the fields that goes into the key used to dedupe requests.\n // We don't include the `cache` field, because we end up using whatever\n // caching resulted from the first request.\n // Notably we currently don't consider non-standard (or future) options.\n // This might not be safe. TODO: warn for non-standard extensions differing.\n // IF YOU CHANGE THIS UPDATE THE simpleCacheKey ABOVE.\n\n const filteredHeaders = Array.from(request.headers.entries()).filter(\n ([key]) => !headersToExcludeInCacheKey.has(key.toLowerCase())\n )\n\n return JSON.stringify([\n request.method,\n filteredHeaders,\n request.mode,\n request.redirect,\n request.credentials,\n request.referrer,\n request.referrerPolicy,\n request.integrity,\n ])\n}\n\ntype CacheEntry = [\n key: string,\n promise: Promise,\n response: Response | null,\n]\n\nexport function createDedupeFetch(originalFetch: typeof fetch) {\n const getCacheEntries = React.cache(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- url is the cache key\n (url: string): CacheEntry[] => []\n )\n\n return function dedupeFetch(\n resource: URL | RequestInfo,\n options?: RequestInit\n ): Promise {\n if (options && options.signal) {\n // If we're passed a signal, then we assume that\n // someone else controls the lifetime of this object and opts out of\n // caching. It's effectively the opt-out mechanism.\n // Ideally we should be able to check this on the Request but\n // it always gets initialized with its own signal so we don't\n // know if it's supposed to override - unless we also override the\n // Request constructor.\n return originalFetch(resource, options)\n }\n // Normalize the Request\n let url: string\n let cacheKey: string\n if (typeof resource === 'string' && !options) {\n // Fast path.\n cacheKey = simpleCacheKey\n url = resource\n } else {\n // Normalize the request.\n // if resource is not a string or a URL (its an instance of Request)\n // then do not instantiate a new Request but instead\n // reuse the request as to not disturb the body in the event it's a ReadableStream.\n const request =\n typeof resource === 'string' || resource instanceof URL\n ? new Request(resource, options)\n : resource\n if (\n (request.method !== 'GET' && request.method !== 'HEAD') ||\n request.keepalive\n ) {\n // We currently don't dedupe requests that might have side-effects. Those\n // have to be explicitly cached. We assume that the request doesn't have a\n // body if it's GET or HEAD.\n // keepalive gets treated the same as if you passed a custom cache signal.\n return originalFetch(resource, options)\n }\n cacheKey = generateCacheKey(request)\n url = request.url\n }\n\n const cacheEntries = getCacheEntries(url)\n for (let i = 0, j = cacheEntries.length; i < j; i += 1) {\n const [key, promise] = cacheEntries[i]\n if (key === cacheKey) {\n return promise.then(() => {\n const response = cacheEntries[i][2]\n if (!response) throw new InvariantError('No cached response')\n\n // We're cloning the response using this utility because there exists\n // a bug in the undici library around response cloning. See the\n // following pull request for more details:\n // https://github.com/vercel/next.js/pull/73274\n const [cloned1, cloned2] = cloneResponse(response)\n cacheEntries[i][2] = cloned2\n return cloned1\n })\n }\n }\n\n // We pass the original arguments here in case normalizing the Request\n // doesn't include all the options in this environment.\n const promise = originalFetch(resource, options)\n const entry: CacheEntry = [cacheKey, promise, null]\n cacheEntries.push(entry)\n\n return promise.then((response) => {\n // We're cloning the response using this utility because there exists\n // a bug in the undici library around response cloning. See the\n // following pull request for more details:\n // https://github.com/vercel/next.js/pull/73274\n const [cloned1, cloned2] = cloneResponse(response)\n entry[2] = cloned2\n return cloned1\n })\n }\n}\n"],"names":["React","cloneResponse","InvariantError","simpleCacheKey","headersToExcludeInCacheKey","Set","generateCacheKey","request","filteredHeaders","Array","from","headers","entries","filter","key","has","toLowerCase","JSON","stringify","method","mode","redirect","credentials","referrer","referrerPolicy","integrity","createDedupeFetch","originalFetch","getCacheEntries","cache","url","dedupeFetch","resource","options","signal","cacheKey","URL","Request","keepalive","cacheEntries","i","j","length","promise","then","response","cloned1","cloned2","entry","push"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 4934, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/encode-header-safe.ts"],"sourcesContent":["/**\n * Percent-encode every character other than horizontal tab and printable ASCII\n * so a value can be safely serialized into an HTTP header.\n *\n * Node's `validateHeaderValue` and `fetch`'s ByteString conversion accept\n * different character ranges. Restricting values to `\\t\\x20-\\x7e` produces a\n * conservative representation that both can serialize. Characters outside a\n * transport's accepted range (Hebrew, Arabic, Chinese, emoji, …) would\n * otherwise throw `ERR_INVALID_CHAR` or a `TypeError`, which crashes ISR or\n * fails a cache read on every affected request.\n *\n * Cache tags are encoded at the public boundaries — tag construction\n * (`getImplicitTags`, `validateTags`) and invalidation input\n * (`revalidatePath`, `revalidateTag`, `updateTag`) — so storage, comparison,\n * and the wire all see the same canonical form.\n *\n * The class is narrower than either transport accepts. Everything inside it\n * passes through byte-for-byte, including `,`, `/`, `%`, `[`, `]`, `_`, `-` and\n * `\\t`, which preserves the comma-separated header format and the\n * dynamic-segment markers in derived tags (`_N_T_/[slug]/page`).\n *\n * Properties:\n * - Fast-path: input that already fits the class is returned unchanged. This\n * makes the encoder idempotent on already-encoded `%xx` sequences.\n * - Matches *runs* of out-of-class code units so surrogate pairs (e.g. an\n * emoji) are handed to `encodeURIComponent` as a complete code point — a\n * per-code-unit regex would split the pair and throw `URIError`.\n */\nconst OUT_OF_CLASS_CHAR = /[^\\t\\x20-\\x7e]/\nconst OUT_OF_CLASS_RUN = /[^\\t\\x20-\\x7e]+/g\n\nexport function encodeHeaderSafe(value: string): string {\n return OUT_OF_CLASS_CHAR.test(value)\n ? value.replace(OUT_OF_CLASS_RUN, (run) => encodeURIComponent(run))\n : value\n}\n"],"names":["OUT_OF_CLASS_CHAR","OUT_OF_CLASS_RUN","encodeHeaderSafe","value","test","replace","run","encodeURIComponent"],"mappings":";;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BC,GACD,MAAMA,oBAAoB;AAC1B,MAAMC,mBAAmB;AAElB,SAASC,iBAAiBC,KAAa;IAC5C,OAAOH,kBAAkBI,IAAI,CAACD,SAC1BA,MAAME,OAAO,CAACJ,kBAAkB,CAACK,MAAQC,mBAAmBD,QAC5DH;AACN","ignoreList":[0]}}, + {"offset": {"line": 4974, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/lru-cache.ts"],"sourcesContent":["/**\n * Node in the doubly-linked list used for LRU tracking.\n * Each node represents a cache entry with bidirectional pointers.\n */\nclass LRUNode {\n public readonly key: string\n public data: T\n public size: number\n public prev: LRUNode | SentinelNode | null = null\n public next: LRUNode | SentinelNode | null = null\n\n constructor(key: string, data: T, size: number) {\n this.key = key\n this.data = data\n this.size = size\n }\n}\n\n/**\n * Sentinel node used for head/tail boundaries.\n * These nodes don't contain actual cache data but simplify list operations.\n */\nclass SentinelNode {\n public prev: LRUNode | SentinelNode | null = null\n public next: LRUNode | SentinelNode | null = null\n}\n\n/**\n * LRU (Least Recently Used) Cache implementation using a doubly-linked list\n * and hash map for O(1) operations.\n *\n * Algorithm:\n * - Uses a doubly-linked list to maintain access order (most recent at head)\n * - Hash map provides O(1) key-to-node lookup\n * - Sentinel head/tail nodes simplify edge case handling\n * - Size-based eviction supports custom size calculation functions\n *\n * Data Structure Layout:\n * HEAD <-> [most recent] <-> ... <-> [least recent] <-> TAIL\n *\n * Operations:\n * - get(): Move accessed node to head (mark as most recent)\n * - set(): Add new node at head, evict from tail if over capacity\n * - Eviction: Remove least recent node (tail.prev) when size exceeds limit\n */\nexport class LRUCache {\n private readonly cache: Map> = new Map()\n private readonly head: SentinelNode\n private readonly tail: SentinelNode\n private totalSize: number = 0\n private readonly maxSize: number\n private readonly calculateSize:\n | ((value: T, key: string) => number)\n | undefined\n private readonly onEvict: ((key: string, value: T) => void) | undefined\n\n constructor(\n maxSize: number,\n calculateSize?: (value: T, key: string) => number,\n onEvict?: (key: string, value: T) => void\n ) {\n this.maxSize = maxSize\n this.calculateSize = calculateSize\n this.onEvict = onEvict\n\n // Create sentinel nodes to simplify doubly-linked list operations\n // HEAD <-> TAIL (empty list)\n this.head = new SentinelNode()\n this.tail = new SentinelNode()\n this.head.next = this.tail\n this.tail.prev = this.head\n }\n\n /**\n * Adds a node immediately after the head (marks as most recently used).\n * Used when inserting new items or when an item is accessed.\n * PRECONDITION: node must be disconnected (prev/next should be null)\n */\n private addToHead(node: LRUNode): void {\n node.prev = this.head\n node.next = this.head.next\n // head.next is always non-null (points to tail or another node)\n this.head.next!.prev = node\n this.head.next = node\n }\n\n /**\n * Removes a node from its current position in the doubly-linked list.\n * Updates the prev/next pointers of adjacent nodes to maintain list integrity.\n * PRECONDITION: node must be connected (prev/next are non-null)\n */\n private removeNode(node: LRUNode): void {\n // Connected nodes always have non-null prev/next\n node.prev!.next = node.next\n node.next!.prev = node.prev\n }\n\n /**\n * Moves an existing node to the head position (marks as most recently used).\n * This is the core LRU operation - accessed items become most recent.\n */\n private moveToHead(node: LRUNode): void {\n this.removeNode(node)\n this.addToHead(node)\n }\n\n /**\n * Removes and returns the least recently used node (the one before tail).\n * This is called during eviction when the cache exceeds capacity.\n * PRECONDITION: cache is not empty (ensured by caller)\n */\n private removeTail(): LRUNode {\n const lastNode = this.tail.prev as LRUNode\n // tail.prev is always non-null and always LRUNode when cache is not empty\n this.removeNode(lastNode)\n return lastNode\n }\n\n /**\n * Sets a key-value pair in the cache.\n * If the key exists, updates the value and moves to head.\n * If new, adds at head and evicts from tail if necessary.\n *\n * Time Complexity:\n * - O(1) for uniform item sizes\n * - O(k) where k is the number of items evicted (can be O(N) for variable sizes)\n */\n public set(key: string, value: T): boolean {\n const size = this.calculateSize?.(value, key) ?? 1\n if (size <= 0) {\n throw new Error(\n `LRUCache: calculateSize returned ${size}, but size must be > 0. ` +\n `Items with size 0 would never be evicted, causing unbounded cache growth.`\n )\n }\n if (size > this.maxSize) {\n console.warn('Single item size exceeds maxSize')\n return false\n }\n\n const existing = this.cache.get(key)\n if (existing) {\n // Update existing node: adjust size and move to head (most recent)\n existing.data = value\n this.totalSize = this.totalSize - existing.size + size\n existing.size = size\n this.moveToHead(existing)\n } else {\n // Add new node at head (most recent position)\n const newNode = new LRUNode(key, value, size)\n this.cache.set(key, newNode)\n this.addToHead(newNode)\n this.totalSize += size\n }\n\n // Evict least recently used items until under capacity\n while (this.totalSize > this.maxSize && this.cache.size > 0) {\n const tail = this.removeTail()\n this.cache.delete(tail.key)\n this.totalSize -= tail.size\n this.onEvict?.(tail.key, tail.data)\n }\n\n return true\n }\n\n /**\n * Checks if a key exists in the cache.\n * This is a pure query operation - does NOT update LRU order.\n *\n * Time Complexity: O(1)\n */\n public has(key: string): boolean {\n return this.cache.has(key)\n }\n\n /**\n * Retrieves a value by key and marks it as most recently used.\n * Moving to head maintains the LRU property for future evictions.\n *\n * Time Complexity: O(1)\n */\n public get(key: string): T | undefined {\n const node = this.cache.get(key)\n if (!node) return undefined\n\n // Mark as most recently used by moving to head\n this.moveToHead(node)\n\n return node.data\n }\n\n /**\n * Returns an iterator over the cache entries. The order is outputted in the\n * order of most recently used to least recently used.\n */\n public *[Symbol.iterator](): IterableIterator<[string, T]> {\n let current = this.head.next\n while (current && current !== this.tail) {\n // Between head and tail, current is always LRUNode\n const node = current as LRUNode\n yield [node.key, node.data]\n current = current.next\n }\n }\n\n /**\n * Removes a specific key from the cache.\n * Updates both the hash map and doubly-linked list.\n *\n * Note: This is an explicit removal and does NOT trigger the `onEvict`\n * callback. Use this for intentional deletions where eviction tracking\n * is not needed.\n *\n * Time Complexity: O(1)\n */\n public remove(key: string): void {\n const node = this.cache.get(key)\n if (!node) return\n\n this.removeNode(node)\n this.cache.delete(key)\n this.totalSize -= node.size\n }\n\n /**\n * Returns the number of items in the cache.\n */\n public get size(): number {\n return this.cache.size\n }\n\n /**\n * Returns the current total size of all cached items.\n * This uses the custom size calculation if provided.\n */\n public get currentSize(): number {\n return this.totalSize\n }\n}\n"],"names":["LRUNode","constructor","key","data","size","prev","next","SentinelNode","LRUCache","maxSize","calculateSize","onEvict","cache","Map","totalSize","head","tail","addToHead","node","removeNode","moveToHead","removeTail","lastNode","set","value","Error","console","warn","existing","get","newNode","delete","has","undefined","Symbol","iterator","current","remove","currentSize"],"mappings":";;;;AAAA;;;CAGC,GACD,MAAMA;IAOJC,YAAYC,GAAW,EAAEC,IAAO,EAAEC,IAAY,CAAE;aAHzCC,IAAAA,GAA4C;aAC5CC,IAAAA,GAA4C;QAGjD,IAAI,CAACJ,GAAG,GAAGA;QACX,IAAI,CAACC,IAAI,GAAGA;QACZ,IAAI,CAACC,IAAI,GAAGA;IACd;AACF;AAEA;;;CAGC,GACD,MAAMG;;aACGF,IAAAA,GAA4C;aAC5CC,IAAAA,GAA4C;;AACrD;AAoBO,MAAME;IAWXP,YACEQ,OAAe,EACfC,aAAiD,EACjDC,OAAyC,CACzC;aAdeC,KAAAA,GAAiC,IAAIC;aAG9CC,SAAAA,GAAoB;QAY1B,IAAI,CAACL,OAAO,GAAGA;QACf,IAAI,CAACC,aAAa,GAAGA;QACrB,IAAI,CAACC,OAAO,GAAGA;QAEf,kEAAkE;QAClE,6BAA6B;QAC7B,IAAI,CAACI,IAAI,GAAG,IAAIR;QAChB,IAAI,CAACS,IAAI,GAAG,IAAIT;QAChB,IAAI,CAACQ,IAAI,CAACT,IAAI,GAAG,IAAI,CAACU,IAAI;QAC1B,IAAI,CAACA,IAAI,CAACX,IAAI,GAAG,IAAI,CAACU,IAAI;IAC5B;IAEA;;;;GAIC,GACOE,UAAUC,IAAgB,EAAQ;QACxCA,KAAKb,IAAI,GAAG,IAAI,CAACU,IAAI;QACrBG,KAAKZ,IAAI,GAAG,IAAI,CAACS,IAAI,CAACT,IAAI;QAC1B,gEAAgE;QAChE,IAAI,CAACS,IAAI,CAACT,IAAI,CAAED,IAAI,GAAGa;QACvB,IAAI,CAACH,IAAI,CAACT,IAAI,GAAGY;IACnB;IAEA;;;;GAIC,GACOC,WAAWD,IAAgB,EAAQ;QACzC,iDAAiD;QACjDA,KAAKb,IAAI,CAAEC,IAAI,GAAGY,KAAKZ,IAAI;QAC3BY,KAAKZ,IAAI,CAAED,IAAI,GAAGa,KAAKb,IAAI;IAC7B;IAEA;;;GAGC,GACOe,WAAWF,IAAgB,EAAQ;QACzC,IAAI,CAACC,UAAU,CAACD;QAChB,IAAI,CAACD,SAAS,CAACC;IACjB;IAEA;;;;GAIC,GACOG,aAAyB;QAC/B,MAAMC,WAAW,IAAI,CAACN,IAAI,CAACX,IAAI;QAC/B,0EAA0E;QAC1E,IAAI,CAACc,UAAU,CAACG;QAChB,OAAOA;IACT;IAEA;;;;;;;;GAQC,GACMC,IAAIrB,GAAW,EAAEsB,KAAQ,EAAW;QACzC,MAAMpB,OAAO,CAAA,IAAI,CAACM,aAAa,IAAA,OAAA,KAAA,IAAlB,IAAI,CAACA,aAAa,CAAA,IAAA,CAAlB,IAAI,EAAiBc,OAAOtB,IAAAA,KAAQ;QACjD,IAAIE,QAAQ,GAAG;YACb,MAAM,IAAIqB,MACR,CAAC,iCAAiC,EAAErB,KAAK,wBAAwB,CAAC,GAChE,CAAC,yEAAyE,CAAC;QAEjF;QACA,IAAIA,OAAO,IAAI,CAACK,OAAO,EAAE;YACvBiB,QAAQC,IAAI,CAAC;YACb,OAAO;QACT;QAEA,MAAMC,WAAW,IAAI,CAAChB,KAAK,CAACiB,GAAG,CAAC3B;QAChC,IAAI0B,UAAU;YACZ,mEAAmE;YACnEA,SAASzB,IAAI,GAAGqB;YAChB,IAAI,CAACV,SAAS,GAAG,IAAI,CAACA,SAAS,GAAGc,SAASxB,IAAI,GAAGA;YAClDwB,SAASxB,IAAI,GAAGA;YAChB,IAAI,CAACgB,UAAU,CAACQ;QAClB,OAAO;YACL,8CAA8C;YAC9C,MAAME,UAAU,IAAI9B,QAAQE,KAAKsB,OAAOpB;YACxC,IAAI,CAACQ,KAAK,CAACW,GAAG,CAACrB,KAAK4B;YACpB,IAAI,CAACb,SAAS,CAACa;YACf,IAAI,CAAChB,SAAS,IAAIV;QACpB;QAEA,uDAAuD;QACvD,MAAO,IAAI,CAACU,SAAS,GAAG,IAAI,CAACL,OAAO,IAAI,IAAI,CAACG,KAAK,CAACR,IAAI,GAAG,EAAG;YAC3D,MAAMY,OAAO,IAAI,CAACK,UAAU;YAC5B,IAAI,CAACT,KAAK,CAACmB,MAAM,CAACf,KAAKd,GAAG;YAC1B,IAAI,CAACY,SAAS,IAAIE,KAAKZ,IAAI;YAC3B,IAAI,CAACO,OAAO,IAAA,OAAA,KAAA,IAAZ,IAAI,CAACA,OAAO,CAAA,IAAA,CAAZ,IAAI,EAAWK,KAAKd,GAAG,EAAEc,KAAKb,IAAI;QACpC;QAEA,OAAO;IACT;IAEA;;;;;GAKC,GACM6B,IAAI9B,GAAW,EAAW;QAC/B,OAAO,IAAI,CAACU,KAAK,CAACoB,GAAG,CAAC9B;IACxB;IAEA;;;;;GAKC,GACM2B,IAAI3B,GAAW,EAAiB;QACrC,MAAMgB,OAAO,IAAI,CAACN,KAAK,CAACiB,GAAG,CAAC3B;QAC5B,IAAI,CAACgB,MAAM,OAAOe;QAElB,+CAA+C;QAC/C,IAAI,CAACb,UAAU,CAACF;QAEhB,OAAOA,KAAKf,IAAI;IAClB;IAEA;;;GAGC,GACD,CAAQ,CAAC+B,OAAOC,QAAQ,CAAC,GAAkC;QACzD,IAAIC,UAAU,IAAI,CAACrB,IAAI,CAACT,IAAI;QAC5B,MAAO8B,WAAWA,YAAY,IAAI,CAACpB,IAAI,CAAE;YACvC,mDAAmD;YACnD,MAAME,OAAOkB;YACb,MAAM;gBAAClB,KAAKhB,GAAG;gBAAEgB,KAAKf,IAAI;aAAC;YAC3BiC,UAAUA,QAAQ9B,IAAI;QACxB;IACF;IAEA;;;;;;;;;GASC,GACM+B,OAAOnC,GAAW,EAAQ;QAC/B,MAAMgB,OAAO,IAAI,CAACN,KAAK,CAACiB,GAAG,CAAC3B;QAC5B,IAAI,CAACgB,MAAM;QAEX,IAAI,CAACC,UAAU,CAACD;QAChB,IAAI,CAACN,KAAK,CAACmB,MAAM,CAAC7B;QAClB,IAAI,CAACY,SAAS,IAAII,KAAKd,IAAI;IAC7B;IAEA;;GAEC,GACD,IAAWA,OAAe;QACxB,OAAO,IAAI,CAACQ,KAAK,CAACR,IAAI;IACxB;IAEA;;;GAGC,GACD,IAAWkC,cAAsB;QAC/B,OAAO,IAAI,CAACxB,SAAS;IACvB;AACF","ignoreList":[0]}}, + {"offset": {"line": 5157, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/patch-fetch.ts"],"sourcesContent":["import type {\n WorkAsyncStorage,\n WorkStore,\n} from '../app-render/work-async-storage.external'\n\nimport { AppRenderSpan, NextNodeServerSpan } from './trace/constants'\nimport {\n isRequestInsightsEnabled,\n recordRequestInsightFetch,\n} from './trace/request-insights'\nimport { getRequestInsightsIdentity } from './trace/request-insights-identity'\nimport { getTracer, SpanKind } from './trace/tracer'\nimport {\n CACHE_ONE_YEAR_SECONDS,\n INFINITE_CACHE,\n NEXT_CACHE_TAG_MAX_ITEMS,\n NEXT_CACHE_TAG_MAX_LENGTH,\n} from '../../lib/constants'\nimport { markCurrentScopeAsDynamic } from '../app-render/dynamic-rendering'\nimport { makeDynamicHangingPromise } from '../dynamic-rendering-utils'\nimport type { FetchMetric } from '../base-http'\nimport { createDedupeFetch } from './dedupe-fetch'\nimport {\n getCacheSignal,\n type RevalidateStore,\n type WorkUnitAsyncStorage,\n type WorkUnitStore,\n willConsumerServerCache,\n} from '../app-render/work-unit-async-storage.external'\nimport {\n CachedRouteKind,\n IncrementalCacheKind,\n type CachedFetchData,\n type ServerComponentsHmrCache,\n type SetIncrementalFetchCacheContext,\n} from '../response-cache'\nimport { cloneResponse } from './clone-response'\nimport type { IncrementalCache } from './incremental-cache'\nimport { RenderStage } from '../app-render/staged-rendering'\nimport { encodeHeaderSafe } from './encode-header-safe'\nimport type { Span } from './trace/tracer'\n\nconst isEdgeRuntime = process.env.NEXT_RUNTIME === 'edge'\n\n/**\n * Whether fetch cache configuration needs to be processed for the current work\n * unit before an origin fetch. Static prerender stores use it for dynamic\n * access tracking. Cache scopes apply it to their own cache policy, regardless\n * of which outer work unit created them. Development staged renders additionally\n * coordinate dynamic fetches with the dynamic render stage.\n */\nfunction shouldProcessFetchConfigForWorkUnit(\n workUnitStore: WorkUnitStore | undefined\n): boolean {\n if (!workUnitStore) {\n return false\n }\n\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'prerender-legacy':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n return true\n case 'request':\n return Boolean(\n process.env.NODE_ENV === 'development' &&\n process.env.__NEXT_CACHE_COMPONENTS &&\n workUnitStore.stagedRendering\n )\n case 'prerender-runtime':\n case 'validation-client':\n case 'build-time-generator':\n return false\n default:\n return workUnitStore satisfies never\n }\n}\n\ntype Fetcher = typeof fetch\n\ntype PatchedFetcher = Fetcher & {\n readonly __nextPatched: true\n readonly __nextGetStaticStore: () => WorkAsyncStorage\n readonly _nextOriginalFetch: Fetcher\n}\n\nexport const NEXT_PATCH_SYMBOL = Symbol.for('next-patch')\n\nfunction isFetchPatched() {\n return (globalThis as Record)[NEXT_PATCH_SYMBOL] === true\n}\n\nexport function validateRevalidate(\n revalidateVal: unknown,\n route: string\n): undefined | number {\n try {\n let normalizedRevalidate: number | undefined = undefined\n\n if (revalidateVal === false || revalidateVal === Infinity) {\n // Unlike Infinity, INFINITE_CACHE survives JSON serialization (e.g. in\n // the fetch cache).\n normalizedRevalidate = INFINITE_CACHE\n } else if (\n typeof revalidateVal === 'number' &&\n !isNaN(revalidateVal) &&\n revalidateVal > -1\n ) {\n normalizedRevalidate = revalidateVal\n } else if (typeof revalidateVal !== 'undefined') {\n throw new Error(\n `Invalid revalidate value \"${revalidateVal}\" on \"${route}\", must be a non-negative number or false`\n )\n }\n return normalizedRevalidate\n } catch (err: any) {\n // handle client component error from attempting to check revalidate value\n if (err instanceof Error && err.message.includes('Invalid revalidate')) {\n throw err\n }\n return undefined\n }\n}\n\nexport function validateTags(tags: any[], description: string) {\n const validTags: string[] = []\n const invalidTags: Array<{\n tag: any\n reason: string\n }> = []\n\n for (let i = 0; i < tags.length; i++) {\n const tag = tags[i]\n\n if (typeof tag !== 'string') {\n invalidTags.push({ tag, reason: 'invalid type, must be a string' })\n } else if (tag.length > NEXT_CACHE_TAG_MAX_LENGTH) {\n invalidTags.push({\n tag,\n reason: `exceeded max length of ${NEXT_CACHE_TAG_MAX_LENGTH}`,\n })\n } else {\n // Encode so a non-ASCII tag can be safely serialized into the\n // `x-next-cache-tags` HTTP header without tripping Node's header\n // validation. Length is checked on the raw input above.\n validTags.push(encodeHeaderSafe(tag))\n }\n\n if (validTags.length > NEXT_CACHE_TAG_MAX_ITEMS) {\n console.warn(\n `Warning: exceeded max tag count for ${description}, dropped tags:`,\n tags.slice(i).join(', ')\n )\n break\n }\n }\n\n if (invalidTags.length > 0) {\n console.warn(`Warning: invalid tags passed to ${description}: `)\n\n for (const { tag, reason } of invalidTags) {\n console.log(`tag: \"${tag}\" ${reason}`)\n }\n }\n return validTags\n}\n\nfunction trackFetchMetric(\n workStore: WorkStore,\n span: Span | undefined,\n ctx: Omit\n) {\n const metric = {\n ...ctx,\n end: performance.timeOrigin + performance.now(),\n idx: workStore.nextFetchId || 0,\n }\n\n span?.setAttributes({\n 'http.status_code': metric.status,\n 'next.fetch.idx': metric.idx,\n 'next.fetch.cache_status': metric.cacheStatus,\n 'next.fetch.cache_reason': metric.cacheReason,\n })\n\n if (isRequestInsightsEnabled()) {\n const requestInsightsIdentity = getRequestInsightsIdentity()\n const requestInsightsRequestId =\n requestInsightsIdentity?.requestId ?? workStore.requestId\n\n if (requestInsightsRequestId) {\n recordRequestInsightFetch(\n {\n requestId: requestInsightsRequestId,\n kind: requestInsightsIdentity?.kind,\n htmlRequestId:\n requestInsightsIdentity?.htmlRequestId ?? workStore.htmlRequestId,\n route: workStore.route,\n },\n {\n url: metric.url,\n method: metric.method,\n statusCode: metric.status,\n startTime: metric.start,\n durationMs: metric.end - metric.start,\n cacheStatus: metric.cacheStatus,\n cacheReason: metric.cacheReason,\n index: metric.idx,\n }\n )\n }\n }\n\n if (!workStore.shouldTrackFetchMetrics) {\n return\n }\n\n workStore.fetchMetrics ??= []\n\n workStore.fetchMetrics.push(metric)\n}\n\nasync function createCachedPrerenderResponse(\n res: Response,\n cacheKey: string,\n incrementalCacheContext: SetIncrementalFetchCacheContext | undefined,\n incrementalCache: IncrementalCache,\n revalidate: number,\n handleUnlock: () => Promise | void\n): Promise {\n // We are prerendering at build time or revalidate time with cacheComponents so we\n // need to buffer the response so we can guarantee it can be read in a\n // microtask.\n const bodyBuffer = await res.arrayBuffer()\n\n const fetchedData = {\n headers: Object.fromEntries(res.headers.entries()),\n body: Buffer.from(bodyBuffer).toString('base64'),\n status: res.status,\n url: res.url,\n }\n\n // We can skip setting the serverComponentsHmrCache because we aren't in dev\n // mode.\n\n if (incrementalCacheContext) {\n await incrementalCache.set(\n cacheKey,\n { kind: CachedRouteKind.FETCH, data: fetchedData, revalidate },\n incrementalCacheContext\n )\n }\n\n await handleUnlock()\n\n // We return a new Response to the caller.\n return new Response(bodyBuffer, {\n headers: res.headers,\n status: res.status,\n statusText: res.statusText,\n })\n}\n\nasync function createCachedDynamicResponse(\n workStore: WorkStore,\n res: Response,\n cacheKey: string,\n incrementalCacheContext: SetIncrementalFetchCacheContext | undefined,\n incrementalCache: IncrementalCache,\n serverComponentsHmrCache: ServerComponentsHmrCache | undefined,\n revalidate: number,\n input: RequestInfo | URL,\n handleUnlock: () => Promise | void,\n signal: AbortSignal | null\n): Promise {\n // We're cloning the response using this utility because there exists a bug in\n // the undici library around response cloning. See the following pull request\n // for more details: https://github.com/vercel/next.js/pull/73274\n const [cloned1, cloned2] = cloneResponse(res)\n\n // We are dynamically rendering including dev mode. We want to return the\n // response to the caller as soon as possible because it might stream over a\n // very long time.\n const cacheSetPromise = cloned1\n .arrayBuffer()\n .then(async (arrayBuffer) => {\n const bodyBuffer = Buffer.from(arrayBuffer)\n\n const fetchedData = {\n headers: Object.fromEntries(cloned1.headers.entries()),\n body: bodyBuffer.toString('base64'),\n status: cloned1.status,\n url: cloned1.url,\n }\n\n serverComponentsHmrCache?.set(cacheKey, fetchedData)\n\n if (incrementalCacheContext) {\n await incrementalCache.set(\n cacheKey,\n { kind: CachedRouteKind.FETCH, data: fetchedData, revalidate },\n incrementalCacheContext\n )\n }\n })\n .catch((error) => {\n // Don't warn if the request was aborted intentionally.\n if (!signal?.aborted) {\n console.warn(`Failed to set fetch cache`, input, error)\n }\n })\n .finally(handleUnlock)\n\n const pendingRevalidateKey = `cache-set-${cacheKey}`\n const pendingRevalidates = (workStore.pendingRevalidates ??= {})\n\n let pendingRevalidatePromise = Promise.resolve()\n if (pendingRevalidateKey in pendingRevalidates) {\n // There is already a pending revalidate entry that we need to await to\n // avoid race conditions.\n pendingRevalidatePromise = pendingRevalidates[pendingRevalidateKey]\n }\n\n pendingRevalidates[pendingRevalidateKey] = pendingRevalidatePromise\n .then(() => cacheSetPromise)\n .finally(() => {\n // If the pending revalidate is not present in the store, then we have\n // nothing to delete.\n if (!pendingRevalidates?.[pendingRevalidateKey]) {\n return\n }\n\n delete pendingRevalidates[pendingRevalidateKey]\n })\n\n return cloned2\n}\n\ninterface PatchableModule {\n workAsyncStorage: WorkAsyncStorage\n workUnitAsyncStorage: WorkUnitAsyncStorage\n}\n\nexport function createPatchedFetcher(\n originFetch: Fetcher,\n { workAsyncStorage, workUnitAsyncStorage }: PatchableModule\n): PatchedFetcher {\n // Create the patched fetch function.\n const patched = async function fetch(\n input: RequestInfo | URL,\n init: RequestInit | undefined\n ): Promise {\n let url: URL | undefined\n try {\n url = new URL(input instanceof Request ? input.url : input)\n url.username = ''\n url.password = ''\n } catch {\n // Error caused by malformed URL should be handled by native fetch\n url = undefined\n }\n const fetchUrl = url?.href ?? ''\n const method = init?.method?.toUpperCase() || 'GET'\n\n // Do create a new span trace for internal fetches in the\n // non-verbose mode.\n const isInternal = (init?.next as any)?.internal === true\n const hideSpan = process.env.NEXT_OTEL_FETCH_DISABLED === '1'\n // We don't track fetch metrics for internal fetches\n // so it's not critical that we have a start time, as it won't be recorded.\n // This is to workaround a flaky issue where performance APIs might\n // not be available and will require follow-up investigation.\n const fetchStart: number | undefined = isInternal\n ? undefined\n : performance.timeOrigin + performance.now()\n\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n let cacheSignal = workUnitStore ? getCacheSignal(workUnitStore) : null\n if (cacheSignal) {\n cacheSignal.beginRead()\n }\n\n const result = getTracer().trace(\n isInternal ? NextNodeServerSpan.internalFetch : AppRenderSpan.fetch,\n {\n hideSpan,\n kind: SpanKind.CLIENT,\n spanName: ['fetch', method, fetchUrl].filter(Boolean).join(' '),\n attributes: {\n 'http.url': fetchUrl,\n 'http.method': method,\n 'net.peer.name': url?.hostname,\n 'net.peer.port': url?.port || undefined,\n },\n },\n async (span) => {\n // If this is an internal fetch, we should not do any special treatment.\n if (isInternal) {\n return originFetch(input, init)\n }\n\n // If the workStore is not available, we can't do any\n // special treatment of fetch, therefore fallback to the original\n // fetch implementation.\n if (!workStore) {\n return originFetch(input, init)\n }\n\n // We should also fallback to the original fetch implementation if we\n // are in draft mode, it does not constitute a static generation.\n if (workStore.isDraftMode) {\n return originFetch(input, init)\n }\n\n const isRequestInput =\n input &&\n typeof input === 'object' &&\n typeof (input as Request).method === 'string'\n\n // With `fetch(new Request(url), init)`, native fetch lets `init`\n // override the base Request. Merge them into a single effective Request\n // so cacheability, the cache key, and the upstream request all describe\n // the same thing.\n if (isRequestInput && init) {\n // `next` (revalidate/tags) is Next-specific and dropped by\n // `new Request`, so keep it on `init` and move the rest onto input.\n const { next, ...overrides } = init\n input = new Request(input as Request, overrides)\n init = next ? { next } : undefined\n }\n\n const getRequestMeta = (field: string) => {\n // If request input is present but init is not, retrieve from input first.\n const value = (init as any)?.[field]\n return value || (isRequestInput ? (input as any)[field] : null)\n }\n\n let finalRevalidate: number | undefined = undefined\n const getNextField = (field: 'revalidate' | 'tags') => {\n return typeof init?.next?.[field] !== 'undefined'\n ? init?.next?.[field]\n : isRequestInput\n ? (input as any).next?.[field]\n : undefined\n }\n // RequestInit doesn't keep extra fields e.g. next so it's\n // only available if init is used separate\n const originalFetchRevalidate = getNextField('revalidate')\n let currentFetchRevalidate = originalFetchRevalidate\n const tags: string[] = validateTags(\n getNextField('tags') || [],\n `fetch ${input.toString()}`\n )\n\n let revalidateStore: RevalidateStore | undefined\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-runtime':\n // TODO: Stop accumulating tags in client prerender. (fallthrough)\n case 'prerender-client':\n case 'validation-client':\n case 'prerender-legacy':\n case 'cache':\n case 'private-cache':\n revalidateStore = workUnitStore\n break\n case 'request':\n case 'unstable-cache':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n if (revalidateStore) {\n if (Array.isArray(tags)) {\n // Collect tags onto parent caches or parent prerenders.\n const collectedTags =\n revalidateStore.tags ?? (revalidateStore.tags = [])\n for (const tag of tags) {\n if (!collectedTags.includes(tag)) {\n collectedTags.push(tag)\n }\n }\n }\n }\n\n const implicitTags = workUnitStore?.implicitTags\n\n let pageFetchCacheMode = workStore.fetchCache\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'unstable-cache':\n // Inside unstable-cache we treat it the same as force-no-store on\n // the page.\n pageFetchCacheMode = 'force-no-store'\n break\n case 'prerender':\n case 'prerender-client':\n case 'validation-client':\n case 'prerender-runtime':\n case 'prerender-legacy':\n case 'request':\n case 'cache':\n case 'private-cache':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n const isUsingNoStore = !!workStore.isUnstableNoStore\n\n let currentFetchCacheConfig = getRequestMeta('cache')\n let cacheReason = ''\n let cacheWarning: string | undefined\n\n if (\n typeof currentFetchCacheConfig === 'string' &&\n typeof currentFetchRevalidate !== 'undefined'\n ) {\n // If the revalidate value conflicts with the cache value, we should warn the user and unset the conflicting values.\n const isConflictingRevalidate =\n // revalidate: 0 and cache: force-cache\n (currentFetchCacheConfig === 'force-cache' &&\n currentFetchRevalidate === 0) ||\n // revalidate: >0 or revalidate: false and cache: no-store\n (currentFetchCacheConfig === 'no-store' &&\n (currentFetchRevalidate > 0 || currentFetchRevalidate === false))\n\n if (isConflictingRevalidate) {\n cacheWarning = `Specified \"cache: ${currentFetchCacheConfig}\" and \"revalidate: ${currentFetchRevalidate}\", only one should be specified.`\n currentFetchCacheConfig = undefined\n currentFetchRevalidate = undefined\n }\n }\n\n const hasExplicitFetchCacheOptOut =\n // fetch config itself signals not to cache\n currentFetchCacheConfig === 'no-cache' ||\n currentFetchCacheConfig === 'no-store' ||\n // the fetch isn't explicitly caching and the segment level cache config signals not to cache\n // note: `pageFetchCacheMode` is also set by being in an unstable_cache context.\n pageFetchCacheMode === 'force-no-store' ||\n pageFetchCacheMode === 'only-no-store'\n\n // If no explicit fetch cache mode is set, but dynamic = `force-dynamic` is set,\n // we shouldn't consider caching the fetch. This is because the `dynamic` cache\n // is considered a \"top-level\" cache mode, whereas something like `fetchCache` is more\n // fine-grained. Top-level modes are responsible for setting reasonable defaults for the\n // other configurations.\n const noFetchConfigAndForceDynamic =\n !pageFetchCacheMode &&\n !currentFetchCacheConfig &&\n !currentFetchRevalidate &&\n workStore.forceDynamic\n\n if (\n // force-cache was specified without a revalidate value. We set the revalidate value to false\n // which will signal the cache to not revalidate\n currentFetchCacheConfig === 'force-cache' &&\n typeof currentFetchRevalidate === 'undefined'\n ) {\n currentFetchRevalidate = false\n } else if (\n hasExplicitFetchCacheOptOut ||\n noFetchConfigAndForceDynamic\n ) {\n currentFetchRevalidate = 0\n }\n\n if (\n currentFetchCacheConfig === 'no-cache' ||\n currentFetchCacheConfig === 'no-store'\n ) {\n cacheReason = `cache: ${currentFetchCacheConfig}`\n }\n\n finalRevalidate = validateRevalidate(\n currentFetchRevalidate,\n workStore.route\n )\n\n const _headers = getRequestMeta('headers')\n const initHeaders: Headers =\n typeof _headers?.get === 'function'\n ? _headers\n : new Headers(_headers || {})\n\n const hasUnCacheableHeader =\n initHeaders.get('authorization') || initHeaders.get('cookie')\n\n const isUnCacheableMethod = !['get', 'head'].includes(\n getRequestMeta('method')?.toLowerCase() || 'get'\n )\n\n /**\n * We automatically disable fetch caching under the following conditions:\n * - Fetch cache configs are not set. Specifically:\n * - A page fetch cache mode is not set (export const fetchCache=...)\n * - A fetch cache mode is not set in the fetch call (fetch(url, { cache: ... }))\n * or the fetch cache mode is set to 'default'\n * - A fetch revalidate value is not set in the fetch call (fetch(url, { revalidate: ... }))\n * - OR the fetch comes after a configuration that triggered dynamic rendering (e.g., reading cookies())\n * and the fetch was considered uncacheable (e.g., POST method or has authorization headers)\n */\n const hasNoExplicitCacheConfig =\n // eslint-disable-next-line eqeqeq\n pageFetchCacheMode == undefined &&\n // eslint-disable-next-line eqeqeq\n (currentFetchCacheConfig == undefined ||\n // when considering whether to opt into the default \"no-cache\" fetch semantics,\n // a \"default\" cache config should be treated the same as no cache config\n currentFetchCacheConfig === 'default') &&\n // eslint-disable-next-line eqeqeq\n currentFetchRevalidate == undefined\n\n let autoNoCache = Boolean(\n (hasUnCacheableHeader || isUnCacheableMethod) &&\n revalidateStore?.revalidate === 0\n )\n\n let isImplicitBuildTimeCache = false\n\n if (!autoNoCache && hasNoExplicitCacheConfig) {\n // We don't enable automatic no-cache behavior during build-time\n // prerendering so that we can still leverage the fetch cache between\n // export workers.\n if (workStore.isBuildTimePrerendering) {\n isImplicitBuildTimeCache = true\n } else {\n autoNoCache = true\n }\n }\n\n // If we have no cache config, and we're in Dynamic I/O prerendering,\n // it'll be a dynamic call. We don't have to issue that dynamic call.\n if (hasNoExplicitCacheConfig && workUnitStore !== undefined) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-runtime':\n // While we don't want to do caching in the client scope we know the\n // fetch will be dynamic for cacheComponents so we may as well avoid the\n // call here. (fallthrough)\n case 'prerender-client':\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n\n return makeDynamicHangingPromise(\n workUnitStore.renderSignal,\n workStore.route,\n 'fetch()'\n )\n case 'validation-client':\n break\n case 'request':\n if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore.stagedRendering\n ) {\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n await workUnitStore.stagedRendering.waitForStage(\n RenderStage.Dynamic\n )\n }\n break\n case 'prerender-legacy':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n switch (pageFetchCacheMode) {\n case 'force-no-store': {\n cacheReason = 'fetchCache = force-no-store'\n break\n }\n case 'only-no-store': {\n if (\n currentFetchCacheConfig === 'force-cache' ||\n (typeof finalRevalidate !== 'undefined' && finalRevalidate > 0)\n ) {\n throw new Error(\n `cache: 'force-cache' used on fetch for ${fetchUrl} with 'export const fetchCache = 'only-no-store'`\n )\n }\n cacheReason = 'fetchCache = only-no-store'\n break\n }\n case 'only-cache': {\n if (currentFetchCacheConfig === 'no-store') {\n throw new Error(\n `cache: 'no-store' used on fetch for ${fetchUrl} with 'export const fetchCache = 'only-cache'`\n )\n }\n break\n }\n case 'force-cache': {\n if (\n typeof currentFetchRevalidate === 'undefined' ||\n currentFetchRevalidate === 0\n ) {\n cacheReason = 'fetchCache = force-cache'\n finalRevalidate = INFINITE_CACHE\n }\n break\n }\n case 'default-cache':\n case 'default-no-store':\n case 'auto':\n case undefined:\n // sometimes we won't match the above cases. the reason we don't move\n // everything to this switch is the use of autoNoCache which is not a fetchCacheMode\n // I suspect this could be unified with fetchCacheMode however in which case we could\n // simplify the switch case and ensure we have an exhaustive switch handling all modes\n break\n default:\n pageFetchCacheMode satisfies never\n }\n\n if (typeof finalRevalidate === 'undefined') {\n if (pageFetchCacheMode === 'default-cache' && !isUsingNoStore) {\n finalRevalidate = INFINITE_CACHE\n cacheReason = 'fetchCache = default-cache'\n } else if (pageFetchCacheMode === 'default-no-store') {\n finalRevalidate = 0\n cacheReason = 'fetchCache = default-no-store'\n } else if (isUsingNoStore) {\n finalRevalidate = 0\n cacheReason = 'noStore call'\n } else if (autoNoCache) {\n finalRevalidate = 0\n cacheReason = 'auto no cache'\n } else {\n // TODO: should we consider this case an invariant?\n cacheReason = 'auto cache'\n finalRevalidate = revalidateStore\n ? revalidateStore.revalidate\n : INFINITE_CACHE\n }\n } else if (!cacheReason) {\n cacheReason = `revalidate: ${finalRevalidate}`\n }\n\n if (\n // when force static is configured we don't bail from\n // `revalidate: 0` values\n !(workStore.forceStatic && finalRevalidate === 0) &&\n // we don't consider autoNoCache to switch to dynamic for ISR\n !autoNoCache &&\n // If the revalidate value isn't currently set or the value is less\n // than the current revalidate value, we should update the revalidate\n // value.\n revalidateStore &&\n finalRevalidate < revalidateStore.revalidate\n ) {\n // If we were setting the revalidate value to 0, we should try to\n // postpone instead first.\n if (finalRevalidate === 0) {\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'prerender-runtime':\n // If we're in an instant validation, a dynamic fetch won't\n // have time to resolve during the validation prerender anyway,\n // so we leave it hanging. This can cause false negatives in shared parents,\n // but we accept that for now, because client data fetching is non-idiomatic.\n // eslint-disable-next-line no-fallthrough\n case 'validation-client':\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n return makeDynamicHangingPromise(\n workUnitStore.renderSignal,\n workStore.route,\n 'fetch()'\n )\n case 'request':\n if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore.stagedRendering\n ) {\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n await workUnitStore.stagedRendering.waitForStage(\n RenderStage.Dynamic\n )\n }\n break\n case 'prerender-legacy':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n markCurrentScopeAsDynamic(\n workStore,\n workUnitStore,\n `revalidate: 0 fetch ${input} ${workStore.route}`\n )\n }\n\n // We only want to set the revalidate store's revalidate time if it\n // was explicitly set for the fetch call, i.e.\n // originalFetchRevalidate.\n if (revalidateStore && originalFetchRevalidate === finalRevalidate) {\n revalidateStore.revalidate = finalRevalidate\n }\n }\n\n const isCacheableRevalidate =\n typeof finalRevalidate === 'number' && finalRevalidate > 0\n\n let cacheKey: string | undefined\n const { incrementalCache } = workStore\n let isHmrRefresh = false\n let serverComponentsHmrCache: ServerComponentsHmrCache | undefined\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'request':\n case 'cache':\n case 'private-cache':\n isHmrRefresh = workUnitStore.isHmrRefresh ?? false\n serverComponentsHmrCache = workUnitStore.serverComponentsHmrCache\n break\n case 'prerender':\n case 'prerender-client':\n case 'validation-client':\n case 'prerender-runtime':\n case 'prerender-legacy':\n case 'unstable-cache':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n if (\n incrementalCache &&\n (isCacheableRevalidate || serverComponentsHmrCache)\n ) {\n try {\n cacheKey = await incrementalCache.generateCacheKey(\n fetchUrl,\n isRequestInput ? (input as RequestInit) : init\n )\n } catch (cause) {\n console.error(`Failed to generate cache key for`, input, cause)\n }\n }\n\n const fetchIdx = workStore.nextFetchId ?? 1\n workStore.nextFetchId = fetchIdx + 1\n\n let handleUnlock: () => Promise | void = () => {}\n\n const doOriginalFetch = async (\n isStale?: boolean,\n cacheReasonOverride?: string\n ) => {\n const requestInputFields = [\n 'cache',\n 'credentials',\n 'headers',\n 'integrity',\n 'keepalive',\n 'method',\n 'mode',\n 'redirect',\n 'referrer',\n 'referrerPolicy',\n 'window',\n 'duplex',\n\n // don't pass through signal when revalidating\n ...(isStale ? [] : ['signal']),\n ]\n\n if (isRequestInput) {\n const reqInput: Request = input as any\n const reqOptions: RequestInit = {\n body: (reqInput as any)._ogBody || reqInput.body,\n }\n\n for (const field of requestInputFields) {\n // @ts-expect-error custom fields\n reqOptions[field] = reqInput[field]\n }\n input = new Request(reqInput.url, reqOptions)\n } else if (init) {\n const { _ogBody, body, signal, ...otherInput } =\n init as RequestInit & { _ogBody?: any }\n init = {\n ...otherInput,\n body: _ogBody || body,\n signal: isStale ? undefined : signal,\n }\n }\n\n // add metadata to init without editing the original\n const clonedInit = {\n ...init,\n next: { ...init?.next, fetchType: 'origin', fetchIdx },\n }\n\n return originFetch(input, clonedInit)\n .then(async (res) => {\n if (!isStale && fetchStart) {\n trackFetchMetric(workStore, span, {\n start: fetchStart,\n url: fetchUrl,\n cacheReason: cacheReasonOverride || cacheReason,\n cacheStatus:\n finalRevalidate === 0 || cacheReasonOverride\n ? 'skip'\n : 'miss',\n cacheWarning,\n status: res.status,\n method: clonedInit.method || 'GET',\n })\n }\n if (\n res.status === 200 &&\n incrementalCache &&\n cacheKey &&\n (isCacheableRevalidate || serverComponentsHmrCache)\n ) {\n const normalizedRevalidate =\n finalRevalidate >= INFINITE_CACHE\n ? CACHE_ONE_YEAR_SECONDS\n : finalRevalidate\n\n const incrementalCacheConfig:\n | SetIncrementalFetchCacheContext\n | undefined = isCacheableRevalidate\n ? {\n fetchCache: true,\n fetchUrl,\n fetchIdx,\n tags,\n isImplicitBuildTimeCache,\n }\n : undefined\n\n switch (workUnitStore?.type) {\n case 'prerender':\n case 'prerender-client':\n case 'validation-client':\n case 'prerender-runtime':\n return createCachedPrerenderResponse(\n res,\n cacheKey,\n incrementalCacheConfig,\n incrementalCache,\n normalizedRevalidate,\n handleUnlock\n )\n case 'request':\n if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore.stagedRendering &&\n workUnitStore.cacheSignal &&\n isCacheableRevalidate\n ) {\n // We're filling caches for a staged render with an\n // explicit cache config, so we need to wait for the\n // response to finish instead of streaming. For HMR-only\n // caching (no explicit revalidate), we fall through to\n // createCachedDynamicResponse which handles streaming\n // and abort gracefully.\n return createCachedPrerenderResponse(\n res,\n cacheKey,\n incrementalCacheConfig,\n incrementalCache,\n normalizedRevalidate,\n handleUnlock\n )\n }\n // fallthrough\n case 'prerender-legacy':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n case undefined:\n return createCachedDynamicResponse(\n workStore,\n res,\n cacheKey,\n incrementalCacheConfig,\n incrementalCache,\n serverComponentsHmrCache,\n normalizedRevalidate,\n input,\n handleUnlock,\n getRequestMeta('signal')\n )\n default:\n workUnitStore satisfies never\n }\n }\n\n // we had response that we determined shouldn't be cached so we return it\n // and don't cache it. This also needs to unlock the cache lock we acquired.\n await handleUnlock()\n\n return res\n })\n .catch((error) => {\n handleUnlock()\n throw error\n })\n }\n\n let cacheReasonOverride\n let isForegroundRevalidate = false\n let isHmrRefreshCache = false\n\n if (cacheKey && incrementalCache) {\n let cachedFetchData: CachedFetchData | undefined\n\n if (isHmrRefresh && serverComponentsHmrCache) {\n cachedFetchData = serverComponentsHmrCache.get(cacheKey)\n isHmrRefreshCache = true\n }\n\n if (isCacheableRevalidate && !cachedFetchData) {\n handleUnlock = await incrementalCache.lock(cacheKey)\n const entry = workStore.isOnDemandRevalidate\n ? null\n : await incrementalCache.get(cacheKey, {\n kind: IncrementalCacheKind.FETCH,\n revalidate: finalRevalidate,\n fetchUrl,\n fetchIdx,\n tags,\n softTags: implicitTags?.tags,\n })\n\n if (hasNoExplicitCacheConfig && workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'validation-client':\n case 'prerender-runtime':\n // We sometimes use the cache to dedupe fetches that do not\n // specify a cache configuration. In these cases we want to\n // make sure we still exclude them from prerenders if\n // cacheComponents is on so we introduce an artificial task boundary\n // here.\n await getTimeoutBoundary()\n break\n case 'request':\n if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore.stagedRendering\n ) {\n await workUnitStore.stagedRendering.waitForStage(\n RenderStage.Dynamic\n )\n }\n break\n case 'prerender-legacy':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n if (entry) {\n await handleUnlock()\n } else {\n // in dev, incremental cache response will be null in case the browser adds `cache-control: no-cache` in the request headers\n // TODO: it seems like we also hit this after revalidates in dev?\n cacheReasonOverride = 'cache-control: no-cache (hard refresh)'\n }\n\n if (entry?.value && entry.value.kind === CachedRouteKind.FETCH) {\n // If the consumer will persist this result in a server cache,\n // wait for fresh data so it doesn't persist a stale value.\n if (willConsumerServerCache(workUnitStore) && entry.isStale) {\n isForegroundRevalidate = true\n } else {\n if (entry.isStale) {\n workStore.pendingRevalidates ??= {}\n if (!workStore.pendingRevalidates[cacheKey]) {\n const pendingRevalidate = doOriginalFetch(true)\n .then(async (response) => ({\n body: await response.arrayBuffer(),\n headers: response.headers,\n status: response.status,\n statusText: response.statusText,\n }))\n .finally(() => {\n workStore.pendingRevalidates ??= {}\n delete workStore.pendingRevalidates[cacheKey || '']\n })\n\n // Attach the empty catch here so we don't get a \"unhandled\n // promise rejection\" warning.\n pendingRevalidate.catch(console.error)\n\n workStore.pendingRevalidates[cacheKey] = pendingRevalidate\n }\n }\n\n cachedFetchData = entry.value.data\n }\n }\n }\n\n if (cachedFetchData) {\n if (fetchStart) {\n trackFetchMetric(workStore, span, {\n start: fetchStart,\n url: fetchUrl,\n cacheReason,\n cacheStatus: isHmrRefreshCache ? 'hmr' : 'hit',\n cacheWarning,\n status: cachedFetchData.status || 200,\n method: init?.method || 'GET',\n })\n }\n\n const response = new Response(\n Buffer.from(cachedFetchData.body, 'base64'),\n {\n headers: cachedFetchData.headers,\n status: cachedFetchData.status,\n }\n )\n\n Object.defineProperty(response, 'url', {\n value: cachedFetchData.url,\n })\n\n return response\n }\n }\n\n if (\n init &&\n typeof init === 'object' &&\n shouldProcessFetchConfigForWorkUnit(workUnitStore)\n ) {\n const { cache } = init\n\n // Delete `cache` property as Cloudflare Workers will throw an error\n if (isEdgeRuntime) delete init.cache\n\n if (cache === 'no-store') {\n // If enabled, we should bail out of static generation.\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'prerender-runtime':\n case 'validation-client':\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n return makeDynamicHangingPromise(\n workUnitStore.renderSignal,\n workStore.route,\n 'fetch()'\n )\n case 'request':\n if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore.stagedRendering\n ) {\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n await workUnitStore.stagedRendering.waitForStage(\n RenderStage.Dynamic\n )\n }\n break\n case 'prerender-legacy':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n markCurrentScopeAsDynamic(\n workStore,\n workUnitStore,\n `no-store fetch ${input} ${workStore.route}`\n )\n }\n\n const hasNextConfig = 'next' in init\n const { next = {} } = init\n if (\n typeof next.revalidate === 'number' &&\n revalidateStore &&\n next.revalidate < revalidateStore.revalidate\n ) {\n if (next.revalidate === 0) {\n // If enabled, we should bail out of static generation.\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'prerender-runtime':\n case 'validation-client':\n return makeDynamicHangingPromise(\n workUnitStore.renderSignal,\n workStore.route,\n 'fetch()'\n )\n case 'request':\n if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore.stagedRendering\n ) {\n await workUnitStore.stagedRendering.waitForStage(\n RenderStage.Dynamic\n )\n }\n break\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'prerender-legacy':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n markCurrentScopeAsDynamic(\n workStore,\n workUnitStore,\n `revalidate: 0 fetch ${input} ${workStore.route}`\n )\n }\n\n if (!workStore.forceStatic || next.revalidate !== 0) {\n revalidateStore.revalidate = next.revalidate\n }\n }\n if (hasNextConfig) delete init.next\n }\n\n // if we are revalidating the whole page via time or on-demand and\n // the fetch cache entry is stale we should still de-dupe the\n // origin hit if it's a cache-able entry\n if (cacheKey && isForegroundRevalidate) {\n const pendingRevalidateKey = cacheKey\n workStore.pendingRevalidates ??= {}\n let pendingRevalidate =\n workStore.pendingRevalidates[pendingRevalidateKey]\n\n if (pendingRevalidate) {\n const revalidatedResult: {\n body: ArrayBuffer\n headers: Headers\n status: number\n statusText: string\n } = await pendingRevalidate\n return new Response(revalidatedResult.body, {\n headers: revalidatedResult.headers,\n status: revalidatedResult.status,\n statusText: revalidatedResult.statusText,\n })\n }\n\n // We used to just resolve the Response and clone it however for\n // static generation with cacheComponents we need the response to be able to\n // be resolved in a microtask and cloning the response will never have\n // a body that can resolve in a microtask in node (as observed through\n // experimentation) So instead we await the body and then when it is\n // available we construct manually cloned Response objects with the\n // body as an ArrayBuffer. This will be resolvable in a microtask\n // making it compatible with cacheComponents.\n const pendingResponse = doOriginalFetch(true, cacheReasonOverride)\n // We're cloning the response using this utility because there\n // exists a bug in the undici library around response cloning.\n // See the following pull request for more details:\n // https://github.com/vercel/next.js/pull/73274\n .then(cloneResponse)\n\n pendingRevalidate = pendingResponse\n .then(async (responses) => {\n const response = responses[0]\n return {\n body: await response.arrayBuffer(),\n headers: response.headers,\n status: response.status,\n statusText: response.statusText,\n }\n })\n .finally(() => {\n // If the pending revalidate is not present in the store, then\n // we have nothing to delete.\n if (!workStore.pendingRevalidates?.[pendingRevalidateKey]) {\n return\n }\n\n delete workStore.pendingRevalidates[pendingRevalidateKey]\n })\n\n // Attach the empty catch here so we don't get a \"unhandled promise\n // rejection\" warning\n pendingRevalidate.catch(() => {})\n\n workStore.pendingRevalidates[pendingRevalidateKey] = pendingRevalidate\n\n return pendingResponse.then((responses) => responses[1])\n } else {\n return doOriginalFetch(false, cacheReasonOverride)\n }\n }\n )\n\n if (cacheSignal) {\n try {\n return await result\n } finally {\n if (cacheSignal) {\n cacheSignal.endRead()\n }\n }\n }\n return result\n }\n\n // Attach the necessary properties to the patched fetch function.\n // We don't use this to determine if the fetch function has been patched,\n // but for external consumers to determine if the fetch function has been\n // patched.\n patched.__nextPatched = true as const\n patched.__nextGetStaticStore = () => workAsyncStorage\n patched._nextOriginalFetch = originFetch\n ;(globalThis as Record)[NEXT_PATCH_SYMBOL] = true\n\n // Assign the function name also as a name property, so that it's preserved\n // even when mangling is enabled.\n Object.defineProperty(patched, 'name', { value: 'fetch', writable: false })\n\n return patched\n}\n\n// we patch fetch to collect cache information used for\n// determining if a page is static or not\nexport function patchFetch(options: PatchableModule) {\n // If we've already patched fetch, we should not patch it again.\n if (isFetchPatched()) return\n\n // Grab the original fetch function. We'll attach this so we can use it in\n // the patched fetch function.\n const original = createDedupeFetch(globalThis.fetch)\n\n // Set the global fetch to the patched fetch.\n globalThis.fetch = createPatchedFetcher(original, options)\n}\n\nlet currentTimeoutBoundary: null | Promise = null\nfunction getTimeoutBoundary() {\n if (!currentTimeoutBoundary) {\n currentTimeoutBoundary = new Promise((r) => {\n setTimeout(() => {\n currentTimeoutBoundary = null\n r()\n }, 0)\n })\n }\n return currentTimeoutBoundary\n}\n"],"names":["AppRenderSpan","NextNodeServerSpan","isRequestInsightsEnabled","recordRequestInsightFetch","getRequestInsightsIdentity","getTracer","SpanKind","CACHE_ONE_YEAR_SECONDS","INFINITE_CACHE","NEXT_CACHE_TAG_MAX_ITEMS","NEXT_CACHE_TAG_MAX_LENGTH","markCurrentScopeAsDynamic","makeDynamicHangingPromise","createDedupeFetch","getCacheSignal","willConsumerServerCache","CachedRouteKind","IncrementalCacheKind","cloneResponse","RenderStage","encodeHeaderSafe","isEdgeRuntime","process","env","NEXT_RUNTIME","shouldProcessFetchConfigForWorkUnit","workUnitStore","type","Boolean","NODE_ENV","__NEXT_CACHE_COMPONENTS","stagedRendering","NEXT_PATCH_SYMBOL","Symbol","for","isFetchPatched","globalThis","validateRevalidate","revalidateVal","route","normalizedRevalidate","undefined","Infinity","isNaN","Error","err","message","includes","validateTags","tags","description","validTags","invalidTags","i","length","tag","push","reason","console","warn","slice","join","log","trackFetchMetric","workStore","span","ctx","metric","end","performance","timeOrigin","now","idx","nextFetchId","setAttributes","status","cacheStatus","cacheReason","requestInsightsIdentity","requestInsightsRequestId","requestId","kind","htmlRequestId","url","method","statusCode","startTime","start","durationMs","index","shouldTrackFetchMetrics","fetchMetrics","createCachedPrerenderResponse","res","cacheKey","incrementalCacheContext","incrementalCache","revalidate","handleUnlock","bodyBuffer","arrayBuffer","fetchedData","headers","Object","fromEntries","entries","body","Buffer","from","toString","set","FETCH","data","Response","statusText","createCachedDynamicResponse","serverComponentsHmrCache","input","signal","cloned1","cloned2","cacheSetPromise","then","catch","error","aborted","finally","pendingRevalidateKey","pendingRevalidates","pendingRevalidatePromise","Promise","resolve","createPatchedFetcher","originFetch","workAsyncStorage","workUnitAsyncStorage","patched","fetch","init","URL","Request","username","password","fetchUrl","href","toUpperCase","isInternal","next","internal","hideSpan","NEXT_OTEL_FETCH_DISABLED","fetchStart","getStore","cacheSignal","beginRead","result","trace","internalFetch","CLIENT","spanName","filter","attributes","hostname","port","getRequestMeta","isDraftMode","isRequestInput","overrides","field","value","finalRevalidate","getNextField","originalFetchRevalidate","currentFetchRevalidate","revalidateStore","Array","isArray","collectedTags","implicitTags","pageFetchCacheMode","fetchCache","isUsingNoStore","isUnstableNoStore","currentFetchCacheConfig","cacheWarning","isConflictingRevalidate","hasExplicitFetchCacheOptOut","noFetchConfigAndForceDynamic","forceDynamic","_headers","initHeaders","get","Headers","hasUnCacheableHeader","isUnCacheableMethod","toLowerCase","hasNoExplicitCacheConfig","autoNoCache","isImplicitBuildTimeCache","isBuildTimePrerendering","endRead","renderSignal","waitForStage","Dynamic","forceStatic","isCacheableRevalidate","isHmrRefresh","generateCacheKey","cause","fetchIdx","doOriginalFetch","isStale","cacheReasonOverride","requestInputFields","reqInput","reqOptions","_ogBody","otherInput","clonedInit","fetchType","incrementalCacheConfig","isForegroundRevalidate","isHmrRefreshCache","cachedFetchData","lock","entry","isOnDemandRevalidate","softTags","getTimeoutBoundary","pendingRevalidate","response","defineProperty","cache","hasNextConfig","revalidatedResult","pendingResponse","responses","__nextPatched","__nextGetStaticStore","_nextOriginalFetch","writable","patchFetch","options","original","currentTimeoutBoundary","r","setTimeout"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 6181, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/route-cache-key.ts"],"sourcesContent":["import type { RouteDefinition } from '../route-definitions/route-definition'\nimport type {\n DynamicPrerenderManifestRoute,\n PrerenderManifestRoute,\n} from '../../build'\nimport { normalizePagePath } from '../../shared/lib/page-path/normalize-page-path'\nimport { normalizeLocalePath } from '../../shared/lib/i18n/normalize-locale-path'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport { AppPathnameNormalizer } from '../normalizers/built/app/app-pathname-normalizer'\nimport { RouteKind } from '../route-kind'\n\nexport const ROUTE_CACHE_DIRECTORY = 'route-cache'\n\nexport type ResponseCacheOwner = {\n readonly kind: RouteKind\n /** Canonical Pages pathname or full App module name, including groups and slots. */\n readonly sourceRoute: string\n}\n\nconst appPathnameNormalizer = new AppPathnameNormalizer()\n\n/** Convert a runtime route definition to the identity used by response caches. */\nexport function getResponseCacheOwner(\n definition: Pick\n): ResponseCacheOwner {\n return {\n kind: definition.kind,\n // Pages module names can include a trailing /index in Turbopack. Their\n // pathname matches the manifest's source in both bundlers. App modules\n // retain groups and parallel slots in their cache identity.\n sourceRoute:\n definition.kind === RouteKind.PAGES\n ? definition.pathname\n : definition.page,\n }\n}\n\n/**\n * Prerender metadata already identifies its source route. Compare that source\n * with the selected module before using its metadata, including negative\n * entries and partially specialized fallback shells. Cache storage continues\n * to use the full module identity, including groups and parallel slots.\n */\nexport function isRouteCacheOwner(\n pathname: string,\n owner: ResponseCacheOwner,\n prerender:\n | Pick\n | Pick\n | undefined,\n locales?: readonly string[]\n): boolean {\n if (!prerender) {\n return false\n }\n\n // Pages have JSON data routes, App Pages have RSC data routes, and App\n // Route Handlers have no separate data route.\n const kind =\n prerender.dataRoute === null\n ? RouteKind.APP_ROUTE\n : prerender.dataRoute.endsWith('.json')\n ? RouteKind.PAGES\n : prerender.dataRoute.endsWith('.rsc')\n ? RouteKind.APP_PAGE\n : undefined\n if (kind !== owner.kind) {\n return false\n }\n\n const source =\n 'srcRoute' in prerender ? prerender.srcRoute : prerender.fallbackSourceRoute\n const prerenderOwner =\n source ??\n (kind === RouteKind.PAGES\n ? normalizeLocalePath(pathname, locales).pathname\n : pathname)\n\n return (\n prerenderOwner ===\n (kind === RouteKind.PAGES\n ? owner.sourceRoute\n : appPathnameNormalizer.normalize(owner.sourceRoute))\n )\n}\n\n/**\n * Response keys are opaque to cache handlers. Hash the source route into one\n * fixed-length directory, preserving App groups and slots without expanding\n * Unicode names or repeating the source directory hierarchy on disk. The\n * pathname stays readable and is normalized exactly once before namespacing.\n */\nexport function getRouteCacheKey(\n pathname: string,\n owner: ResponseCacheOwner\n): string {\n if (!owner) {\n throw new InvariantError('Response cache requires a source route')\n }\n const { sourceRoute } = owner\n let source: string\n if (process.env.NEXT_RUNTIME === 'edge') {\n const sha256 =\n require('next/dist/compiled/hash.js/sha256') as typeof import('next/dist/compiled/hash.js/sha256')\n source = sha256()\n .update(new TextEncoder().encode(sourceRoute))\n .digest('hex')\n } else {\n const { createHash } = require('crypto') as typeof import('crypto')\n source = createHash('sha256').update(sourceRoute).digest('hex')\n }\n return `/${ROUTE_CACHE_DIRECTORY}/${owner.kind}/${source}/$${normalizePagePath(pathname)}`\n}\n"],"names":["normalizePagePath","normalizeLocalePath","InvariantError","AppPathnameNormalizer","RouteKind","ROUTE_CACHE_DIRECTORY","appPathnameNormalizer","getResponseCacheOwner","definition","kind","sourceRoute","PAGES","pathname","page","isRouteCacheOwner","owner","prerender","locales","dataRoute","APP_ROUTE","endsWith","APP_PAGE","undefined","source","srcRoute","fallbackSourceRoute","prerenderOwner","normalize","getRouteCacheKey","process","env","NEXT_RUNTIME","sha256","require","update","TextEncoder","encode","digest","createHash"],"mappings":";;;;;;;;;;AAKA,SAASA,iBAAiB,QAAQ,iDAAgD;AAClF,SAASC,mBAAmB,QAAQ,8CAA6C;AACjF,SAASC,cAAc,QAAQ,mCAAkC;AACjE,SAASC,qBAAqB,QAAQ,mDAAkD;AACxF,SAASC,SAAS,QAAQ,gBAAe;;;;;;AAElC,MAAMC,wBAAwB,cAAa;AAQlD,MAAMC,wBAAwB,IAAIH,wOAAAA;AAG3B,SAASI,sBACdC,UAA+D;IAE/D,OAAO;QACLC,MAAMD,WAAWC,IAAI;QACrB,uEAAuE;QACvE,uEAAuE;QACvE,4DAA4D;QAC5DC,aACEF,WAAWC,IAAI,KAAKL,6KAAAA,CAAUO,KAAK,GAC/BH,WAAWI,QAAQ,GACnBJ,WAAWK,IAAI;IACvB;AACF;AAQO,SAASC,kBACdF,QAAgB,EAChBG,KAAyB,EACzBC,SAGa,EACbC,OAA2B;IAE3B,IAAI,CAACD,WAAW;QACd,OAAO;IACT;IAEA,uEAAuE;IACvE,8CAA8C;IAC9C,MAAMP,OACJO,UAAUE,SAAS,KAAK,OACpBd,6KAAAA,CAAUe,SAAS,GACnBH,UAAUE,SAAS,CAACE,QAAQ,CAAC,WAC3BhB,6KAAAA,CAAUO,KAAK,GACfK,UAAUE,SAAS,CAACE,QAAQ,CAAC,UAC3BhB,6KAAAA,CAAUiB,QAAQ,GAClBC;IACV,IAAIb,SAASM,MAAMN,IAAI,EAAE;QACvB,OAAO;IACT;IAEA,MAAMc,SACJ,cAAcP,YAAYA,UAAUQ,QAAQ,GAAGR,UAAUS,mBAAmB;IAC9E,MAAMC,iBACJH,UACCd,CAAAA,SAASL,6KAAAA,CAAUO,KAAK,OACrBV,oNAAAA,EAAoBW,UAAUK,SAASL,QAAQ,GAC/CA,QAAO;IAEb,OACEc,mBACCjB,CAAAA,SAASL,6KAAAA,CAAUO,KAAK,GACrBI,MAAML,WAAW,GACjBJ,sBAAsBqB,SAAS,CAACZ,MAAML,WAAW,CAAA;AAEzD;AAQO,SAASkB,iBACdhB,QAAgB,EAChBG,KAAyB;IAEzB,IAAI,CAACA,OAAO;QACV,MAAM,IAAIb,8LAAAA,CAAe;IAC3B;IACA,MAAM,EAAEQ,WAAW,EAAE,GAAGK;IACxB,IAAIQ;IACJ,IAAIM,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;SAMlC;QACL,MAAM,EAAEO,UAAU,EAAE,GAAGL,QAAQ;QAC/BV,SAASe,WAAW,UAAUJ,MAAM,CAACxB,aAAa2B,MAAM,CAAC;IAC3D;IACA,OAAO,CAAC,CAAC,EAAEhC,sBAAsB,CAAC,EAAEU,MAAMN,IAAI,CAAC,CAAC,EAAEc,OAAO,EAAE,MAAEvB,wNAAAA,EAAkBY,WAAW;AAC5F","ignoreList":[0]}}, + {"offset": {"line": 6244, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/trace/constants.ts"],"sourcesContent":["/**\n * Contains predefined constants for the trace span name in next/server.\n *\n * Currently, next/server/tracer is internal implementation only for tracking\n * next.js's implementation only with known span names defined here.\n **/\n\n// eslint typescript has a bug with TS enums\n\nenum BaseServerSpan {\n handleRequest = 'BaseServer.handleRequest',\n run = 'BaseServer.run',\n pipe = 'BaseServer.pipe',\n getStaticHTML = 'BaseServer.getStaticHTML',\n render = 'BaseServer.render',\n renderToResponseWithComponents = 'BaseServer.renderToResponseWithComponents',\n renderToResponse = 'BaseServer.renderToResponse',\n renderToHTML = 'BaseServer.renderToHTML',\n renderError = 'BaseServer.renderError',\n renderErrorToResponse = 'BaseServer.renderErrorToResponse',\n renderErrorToHTML = 'BaseServer.renderErrorToHTML',\n render404 = 'BaseServer.render404',\n}\n\nenum LoadComponentsSpan {\n loadDefaultErrorComponents = 'LoadComponents.loadDefaultErrorComponents',\n loadComponents = 'LoadComponents.loadComponents',\n loadRouteModule = 'LoadComponents.loadRouteModule',\n}\n\nenum InstrumentationSpan {\n loadModule = 'Instrumentation.loadModule',\n register = 'Instrumentation.register',\n}\n\nenum NextServerSpan {\n getRequestHandler = 'NextServer.getRequestHandler',\n getRequestHandlerWithMetadata = 'NextServer.getRequestHandlerWithMetadata',\n getServer = 'NextServer.getServer',\n getServerRequestHandler = 'NextServer.getServerRequestHandler',\n createServer = 'createServer.createServer',\n}\n\nenum NextNodeServerSpan {\n compression = 'NextNodeServer.compression',\n getBuildId = 'NextNodeServer.getBuildId',\n createComponentTree = 'NextNodeServer.createComponentTree',\n clientComponentLoading = 'NextNodeServer.clientComponentLoading',\n getLayoutOrPageModule = 'NextNodeServer.getLayoutOrPageModule',\n generateStaticRoutes = 'NextNodeServer.generateStaticRoutes',\n generateFsStaticRoutes = 'NextNodeServer.generateFsStaticRoutes',\n generatePublicRoutes = 'NextNodeServer.generatePublicRoutes',\n generateImageRoutes = 'NextNodeServer.generateImageRoutes.route',\n sendRenderResult = 'NextNodeServer.sendRenderResult',\n proxyRequest = 'NextNodeServer.proxyRequest',\n runApi = 'NextNodeServer.runApi',\n render = 'NextNodeServer.render',\n renderHTML = 'NextNodeServer.renderHTML',\n imageOptimizer = 'NextNodeServer.imageOptimizer',\n getPagePath = 'NextNodeServer.getPagePath',\n getRoutesManifest = 'NextNodeServer.getRoutesManifest',\n findPageComponents = 'NextNodeServer.findPageComponents',\n getFontManifest = 'NextNodeServer.getFontManifest',\n getServerComponentManifest = 'NextNodeServer.getServerComponentManifest',\n getRequestHandler = 'NextNodeServer.getRequestHandler',\n renderToHTML = 'NextNodeServer.renderToHTML',\n renderError = 'NextNodeServer.renderError',\n renderErrorToHTML = 'NextNodeServer.renderErrorToHTML',\n render404 = 'NextNodeServer.render404',\n startResponse = 'NextNodeServer.startResponse',\n\n // nested inner span, does not require parent scope name\n route = 'route',\n onProxyReq = 'onProxyReq',\n apiResolver = 'apiResolver',\n internalFetch = 'internalFetch',\n}\n\nenum StartServerSpan {\n startServer = 'startServer.startServer',\n}\n\nenum RenderSpan {\n getServerSideProps = 'Render.getServerSideProps',\n getStaticProps = 'Render.getStaticProps',\n renderToString = 'Render.renderToString',\n renderDocument = 'Render.renderDocument',\n createBodyResult = 'Render.createBodyResult',\n}\n\nenum AppRenderSpan {\n renderToString = 'AppRender.renderToString',\n renderToReadableStream = 'AppRender.renderToReadableStream',\n getBodyResult = 'AppRender.getBodyResult',\n fetch = 'AppRender.fetch',\n waitShellReady = 'AppRender.waitShellReady',\n renderToNodeFizzStream = 'AppRender.renderToNodeFizzStream',\n instantInsights = 'AppRender.instantInsights',\n instantInsightsPrepareValidation = 'AppRender.instantInsights.prepareValidation',\n instantInsightsRunValidation = 'AppRender.instantInsights.runValidation',\n}\n\nenum DevBundlerServiceSpan {\n ensurePage = 'DevBundlerService.ensurePage',\n}\n\nenum RouterSpan {\n executeRoute = 'Router.executeRoute',\n}\n\nenum NodeSpan {\n runHandler = 'Node.runHandler',\n}\n\nenum AppRouteRouteHandlersSpan {\n runHandler = 'AppRouteRouteHandlers.runHandler',\n}\n\nenum AppRouteRouteModuleSpan {\n loadUserland = 'AppRouteRouteModule.loadUserland',\n}\n\nenum RouteModuleSpan {\n prepare = 'RouteModule.prepare',\n loadManifests = 'RouteModule.loadManifests',\n}\nenum ResolveMetadataSpan {\n generateMetadata = 'ResolveMetadata.generateMetadata',\n generateViewport = 'ResolveMetadata.generateViewport',\n}\n\nenum MiddlewareSpan {\n execute = 'Middleware.execute',\n}\n\ntype SpanTypes =\n | `${BaseServerSpan}`\n | `${LoadComponentsSpan}`\n | `${InstrumentationSpan}`\n | `${NextServerSpan}`\n | `${StartServerSpan}`\n | `${NextNodeServerSpan}`\n | `${RenderSpan}`\n | `${RouterSpan}`\n | `${AppRenderSpan}`\n | `${DevBundlerServiceSpan}`\n | `${NodeSpan}`\n | `${AppRouteRouteHandlersSpan}`\n | `${AppRouteRouteModuleSpan}`\n | `${RouteModuleSpan}`\n | `${ResolveMetadataSpan}`\n | `${MiddlewareSpan}`\n\n// This list is used to filter out spans that are not relevant to the user\nexport const NextVanillaSpanAllowlist = new Set([\n MiddlewareSpan.execute,\n BaseServerSpan.handleRequest,\n RenderSpan.getServerSideProps,\n RenderSpan.getStaticProps,\n AppRenderSpan.fetch,\n AppRenderSpan.getBodyResult,\n LoadComponentsSpan.loadRouteModule,\n RenderSpan.renderDocument,\n NodeSpan.runHandler,\n AppRouteRouteHandlersSpan.runHandler,\n AppRouteRouteModuleSpan.loadUserland,\n RouteModuleSpan.prepare,\n InstrumentationSpan.loadModule,\n InstrumentationSpan.register,\n ResolveMetadataSpan.generateMetadata,\n ResolveMetadataSpan.generateViewport,\n NextNodeServerSpan.createComponentTree,\n NextNodeServerSpan.findPageComponents,\n NextNodeServerSpan.getLayoutOrPageModule,\n NextNodeServerSpan.startResponse,\n NextNodeServerSpan.clientComponentLoading,\n])\n\n// These Spans are allowed to be always logged\n// when the otel log prefix env is set\nexport const LogSpanAllowList = new Set([\n NextNodeServerSpan.findPageComponents,\n NextNodeServerSpan.createComponentTree,\n NextNodeServerSpan.clientComponentLoading,\n])\n\nexport {\n BaseServerSpan,\n LoadComponentsSpan,\n InstrumentationSpan,\n NextServerSpan,\n NextNodeServerSpan,\n StartServerSpan,\n RenderSpan,\n RouterSpan,\n AppRenderSpan,\n DevBundlerServiceSpan,\n NodeSpan,\n AppRouteRouteHandlersSpan,\n AppRouteRouteModuleSpan,\n RouteModuleSpan,\n ResolveMetadataSpan,\n MiddlewareSpan,\n}\n\nexport type { SpanTypes }\n"],"names":["BaseServerSpan","LoadComponentsSpan","InstrumentationSpan","NextServerSpan","NextNodeServerSpan","StartServerSpan","RenderSpan","AppRenderSpan","DevBundlerServiceSpan","RouterSpan","NodeSpan","AppRouteRouteHandlersSpan","AppRouteRouteModuleSpan","RouteModuleSpan","ResolveMetadataSpan","MiddlewareSpan","NextVanillaSpanAllowlist","Set","LogSpanAllowList"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;EAKE,GAEF,4CAA4C;AAE5C,IAAKA,iBAAAA,WAAAA,GAAAA,SAAAA,cAAAA;;;;;;;;;;;;;WAAAA;EAAAA,kBAAAA,CAAAA;AAeL,IAAKC,qBAAAA,WAAAA,GAAAA,SAAAA,kBAAAA;;;;WAAAA;EAAAA,sBAAAA,CAAAA;AAML,IAAKC,sBAAAA,WAAAA,GAAAA,SAAAA,mBAAAA;;;WAAAA;EAAAA,uBAAAA,CAAAA;AAKL,IAAKC,iBAAAA,WAAAA,GAAAA,SAAAA,cAAAA;;;;;;WAAAA;EAAAA,kBAAAA,CAAAA;AAQL,IAAKC,qBAAAA,WAAAA,GAAAA,SAAAA,kBAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4BH,wDAAwD;;;;;WA5BrDA;EAAAA,sBAAAA,CAAAA;AAmCL,IAAKC,kBAAAA,WAAAA,GAAAA,SAAAA,eAAAA;;WAAAA;EAAAA,mBAAAA,CAAAA;AAIL,IAAKC,aAAAA,WAAAA,GAAAA,SAAAA,UAAAA;;;;;;WAAAA;EAAAA,cAAAA,CAAAA;AAQL,IAAKC,gBAAAA,WAAAA,GAAAA,SAAAA,aAAAA;;;;;;;;;;WAAAA;EAAAA,iBAAAA,CAAAA;AAYL,IAAKC,wBAAAA,WAAAA,GAAAA,SAAAA,qBAAAA;;WAAAA;EAAAA,yBAAAA,CAAAA;AAIL,IAAKC,aAAAA,WAAAA,GAAAA,SAAAA,UAAAA;;WAAAA;EAAAA,cAAAA,CAAAA;AAIL,IAAKC,WAAAA,WAAAA,GAAAA,SAAAA,QAAAA;;WAAAA;EAAAA,YAAAA,CAAAA;AAIL,IAAKC,4BAAAA,WAAAA,GAAAA,SAAAA,yBAAAA;;WAAAA;EAAAA,6BAAAA,CAAAA;AAIL,IAAKC,0BAAAA,WAAAA,GAAAA,SAAAA,uBAAAA;;WAAAA;EAAAA,2BAAAA,CAAAA;AAIL,IAAKC,kBAAAA,WAAAA,GAAAA,SAAAA,eAAAA;;;WAAAA;EAAAA,mBAAAA,CAAAA;AAIL,IAAKC,sBAAAA,WAAAA,GAAAA,SAAAA,mBAAAA;;;WAAAA;EAAAA,uBAAAA,CAAAA;AAKL,IAAKC,iBAAAA,WAAAA,GAAAA,SAAAA,cAAAA;;WAAAA;EAAAA,kBAAAA,CAAAA;AAuBE,MAAMC,2BAA2B,IAAIC,IAAI;;;;;;;;;;;;;;;;;;;;;;CAsB/C,EAAC;AAIK,MAAMC,mBAAmB,IAAID,IAAI;;;;CAIvC,EAAC","ignoreList":[0]}}, + {"offset": {"line": 6447, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/trace/request-insights-identity.ts"],"sourcesContent":["import type { AsyncLocalStorage } from 'async_hooks'\nimport type { RequestInsightKind } from '../../../next-devtools/shared/request-insights'\nimport { getOrCreateGlobalAsyncLocalStorage } from '../../app-render/async-local-storage'\n\nexport type RequestInsightsIdentity = {\n requestId: string\n kind?: RequestInsightKind\n htmlRequestId: string\n url: string | undefined\n}\n\n// This storage covers the part of BaseServer request handling that runs before\n// App Render creates workAsyncStorage. Once available, workStore remains the\n// primary identity source for locally recorded spans.\nfunction getRequestInsightsIdentityStorage(): AsyncLocalStorage {\n return getOrCreateGlobalAsyncLocalStorage('request-insights-identity-storage')\n}\n\nexport function runWithRequestInsightsIdentity(\n identity: RequestInsightsIdentity,\n fn: () => T\n): T {\n return getRequestInsightsIdentityStorage().run(identity, fn)\n}\n\nexport function getRequestInsightsIdentity():\n | RequestInsightsIdentity\n | undefined {\n return getRequestInsightsIdentityStorage().getStore()\n}\n"],"names":["getOrCreateGlobalAsyncLocalStorage","getRequestInsightsIdentityStorage","runWithRequestInsightsIdentity","identity","fn","run","getRequestInsightsIdentity","getStore"],"mappings":";;;;;;AAEA,SAASA,kCAAkC,QAAQ,uCAAsC;;AASzF,+EAA+E;AAC/E,6EAA6E;AAC7E,sDAAsD;AACtD,SAASC;IACP,WAAOD,mOAAAA,EAAmC;AAC5C;AAEO,SAASE,+BACdC,QAAiC,EACjCC,EAAW;IAEX,OAAOH,oCAAoCI,GAAG,CAACF,UAAUC;AAC3D;AAEO,SAASE;IAGd,OAAOL,oCAAoCM,QAAQ;AACrD","ignoreList":[0]}}, + {"offset": {"line": 6471, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/trace/request-insights.ts"],"sourcesContent":["import type { AttributeValue } from 'next/dist/compiled/@opentelemetry/api'\nimport type {\n RequestInsight,\n RequestInsightFetch,\n RequestInsightsSnapshot,\n} from '../../../next-devtools/shared/request-insights'\nimport type { RequestInsightKind } from '../../../shared/lib/request-insights'\nimport {\n getRequestInsightKey,\n getRequestInsightKind,\n} from '../../../shared/lib/request-insights'\nimport type { SpanStoreRecord } from './span-store'\nexport { isRequestInsightsEnabled } from './span-store'\n\nconst MAX_REQUEST_INSIGHTS = 100\nconst REQUEST_INSIGHTS_STORE_KEY = Symbol.for('@next/request-insights-store')\nconst CLIENT_COMPONENT_LOADING_SPAN_TYPE =\n 'NextNodeServer.clientComponentLoading'\n\ntype RequestInsightsListener = (insight: RequestInsight) => void\ntype RequestInsightIdentity = {\n requestId?: string\n kind?: RequestInsightKind\n htmlRequestId?: string\n route?: string\n url?: string\n}\n\nconst REDACTED_VALUE = 'redacted'\nconst SAFE_SPAN_ATTRIBUTE_KEYS = new Set([\n 'http.method',\n 'http.route',\n 'http.status_code',\n 'http.url',\n 'net.peer.name',\n 'net.peer.port',\n 'next.fetch.cache_reason',\n 'next.fetch.cache_status',\n 'next.fetch.idx',\n 'next.route',\n 'next.rsc',\n 'next.segment',\n 'next.span_category',\n 'next.span_name',\n 'next.span_type',\n])\nconst SENSITIVE_PARAM_NAME_RE =\n /(?:^|[_-])(?:access[_-]?token|api[_-]?key|auth|authorization|code|cookie|credential|id[_-]?token|jwt|key|password|secret|session|signature|sig|token)(?:$|[_-])/i\n\nclass InMemoryRequestInsightsStore {\n private readonly requests = new Map()\n private readonly requestTimings = new Map<\n string,\n { startTime: number; durationMs: number }\n >()\n private readonly requestOrder: string[] = []\n private readonly listeners = new Set()\n\n recordSpan(span: SpanStoreRecord): void {\n if (!span.requestId) {\n return\n }\n\n const insight = this.getOrCreateRequest(\n {\n requestId: span.requestId,\n kind: span.requestInsightKind,\n htmlRequestId: span.htmlRequestId,\n route: span.route,\n url: span.url,\n },\n span.startTime ?? span.timestamp\n )\n\n const spanStartTime = span.startTime ?? span.timestamp\n insight.htmlRequestId = span.htmlRequestId ?? insight.htmlRequestId\n insight.route = insight.route ?? span.route\n insight.url = insight.url ?? sanitizeUrl(span.url)\n this.updateTiming(\n insight,\n spanStartTime,\n span.durationMs,\n span.attributes?.['next.span_type'] === 'BaseServer.handleRequest'\n )\n insight.status =\n insight.status === 'error' || span.status === 'error'\n ? 'error'\n : span.status === 'ok'\n ? 'ok'\n : insight.status\n\n insight.spans.push({\n name: span.name,\n startTime: spanStartTime,\n durationMs: span.durationMs,\n status: span.status,\n traceId: span.traceId,\n spanId: span.spanId,\n parentSpanId: span.parentSpanId,\n attributes: sanitizeSpanAttributes(span.attributes),\n links: sanitizeSpanLinks(span.links),\n events: sanitizeSpanEvents(span.events),\n error: span.error,\n })\n\n const fetch = getFetchInsight(span)\n if (fetch) {\n this.recordFetchForInsight(insight, fetch)\n }\n\n this.notify(insight)\n }\n\n recordFetch(identity: RequestInsightIdentity, fetch: RequestInsightFetch) {\n if (!identity.requestId) {\n return\n }\n\n const fetchStartTime = fetch.startTime ?? getCurrentTimestamp()\n const insight = this.getOrCreateRequest(identity, fetchStartTime)\n this.updateTiming(insight, fetchStartTime, fetch.durationMs, false)\n this.recordFetchForInsight(insight, sanitizeFetchInsight(fetch))\n this.notify(insight)\n }\n\n getSnapshot(): RequestInsightsSnapshot {\n return {\n requests: this.requestOrder\n .map((insightKey) => this.requests.get(insightKey))\n .filter((request): request is RequestInsight => request !== undefined),\n }\n }\n\n subscribe(listener: RequestInsightsListener): () => void {\n this.listeners.add(listener)\n return () => {\n this.listeners.delete(listener)\n }\n }\n\n clear(): void {\n this.requests.clear()\n this.requestTimings.clear()\n this.requestOrder.length = 0\n }\n\n private updateTiming(\n insight: RequestInsight,\n startTime: number,\n durationMs: number | undefined,\n isRequestSpan: boolean\n ): void {\n const insightKey = getRequestInsightKey(insight)\n if (isRequestSpan && durationMs !== undefined) {\n const requestTiming = { startTime, durationMs }\n this.requestTimings.set(insightKey, requestTiming)\n insight.startTime = requestTiming.startTime\n insight.durationMs = requestTiming.durationMs\n return\n }\n\n const requestTiming = this.requestTimings.get(insightKey)\n if (requestTiming) {\n insight.startTime = requestTiming.startTime\n insight.durationMs = requestTiming.durationMs\n return\n }\n\n const endTime = startTime + (durationMs ?? 0)\n const requestEndTime = insight.startTime + (insight.durationMs ?? 0)\n insight.startTime = Math.min(insight.startTime, startTime)\n insight.durationMs = Math.max(requestEndTime, endTime) - insight.startTime\n }\n\n private notify(insight: RequestInsight): void {\n for (const listener of this.listeners) {\n listener(insight)\n }\n }\n\n private getOrCreateRequest(\n identity: RequestInsightIdentity,\n startTime: number\n ): RequestInsight {\n const requestId = identity.requestId!\n const insightKey = getRequestInsightKey({\n requestId,\n kind: identity.kind,\n })\n let insight = this.requests.get(insightKey)\n\n if (!insight) {\n insight = {\n requestId,\n kind: getRequestInsightKind(identity),\n htmlRequestId: identity.htmlRequestId ?? requestId,\n route: identity.route,\n url: sanitizeUrl(identity.url),\n startTime,\n status: 'pending',\n spans: [],\n fetches: [],\n }\n this.requests.set(insightKey, insight)\n this.requestOrder.push(insightKey)\n this.trim()\n }\n\n insight.htmlRequestId = identity.htmlRequestId ?? insight.htmlRequestId\n insight.route = insight.route ?? identity.route\n insight.url = insight.url ?? sanitizeUrl(identity.url)\n insight.startTime = Math.min(insight.startTime, startTime)\n\n return insight\n }\n\n private recordFetchForInsight(\n insight: RequestInsight,\n fetch: RequestInsightFetch\n ): void {\n if (\n insight.fetches.some(\n (existingFetch) =>\n existingFetch.url === fetch.url &&\n (existingFetch.index !== undefined && fetch.index !== undefined\n ? existingFetch.index === fetch.index\n : existingFetch.startTime === fetch.startTime)\n )\n ) {\n return\n }\n\n insight.fetches.push(sanitizeFetchInsight(fetch))\n }\n\n private trim(): void {\n while (this.requestOrder.length > MAX_REQUEST_INSIGHTS) {\n const insightKey = this.requestOrder.shift()\n if (insightKey) {\n this.requests.delete(insightKey)\n this.requestTimings.delete(insightKey)\n }\n }\n }\n}\n\nexport function recordRequestInsightSpan(span: SpanStoreRecord): void {\n if (\n span.attributes?.['next.span_type'] === CLIENT_COMPONENT_LOADING_SPAN_TYPE\n ) {\n return\n }\n\n getRequestInsightsStore().recordSpan(span)\n}\n\nexport function recordRequestInsightFetch(\n identity: RequestInsightIdentity,\n fetch: RequestInsightFetch\n): void {\n getRequestInsightsStore().recordFetch(identity, fetch)\n}\n\nexport function getRequestInsightsSnapshot(): RequestInsightsSnapshot {\n return getRequestInsightsStore().getSnapshot()\n}\n\nexport function subscribeRequestInsights(\n listener: RequestInsightsListener\n): () => void {\n return getRequestInsightsStore().subscribe(listener)\n}\n\nexport function clearRequestInsightsForTest(): void {\n getRequestInsightsStore().clear()\n}\n\nfunction getRequestInsightsStore(): InMemoryRequestInsightsStore {\n const globalStore = globalThis as typeof globalThis & {\n [REQUEST_INSIGHTS_STORE_KEY]?: InMemoryRequestInsightsStore\n }\n\n return (globalStore[REQUEST_INSIGHTS_STORE_KEY] ??=\n new InMemoryRequestInsightsStore())\n}\n\nfunction getFetchInsight(span: SpanStoreRecord): RequestInsightFetch | null {\n const attributes = span.attributes\n\n if (!attributes || attributes['next.span_type'] !== 'AppRender.fetch') {\n return null\n }\n\n return {\n url: sanitizeUrl(getStringAttribute(attributes['http.url']) ?? span.url),\n method: getStringAttribute(attributes['http.method']),\n statusCode: getNumberAttribute(attributes['http.status_code']),\n startTime: span.startTime ?? span.timestamp,\n durationMs: span.durationMs,\n cacheStatus: getStringAttribute(attributes['next.fetch.cache_status']),\n cacheReason: getStringAttribute(attributes['next.fetch.cache_reason']),\n index: getNumberAttribute(attributes['next.fetch.idx']),\n }\n}\n\nfunction sanitizeFetchInsight(fetch: RequestInsightFetch): RequestInsightFetch {\n return {\n ...fetch,\n url: sanitizeUrl(fetch.url),\n }\n}\n\nfunction getCurrentTimestamp(): number {\n return performance.timeOrigin + performance.now()\n}\n\nfunction sanitizeSpanAttributes(\n attributes: SpanStoreRecord['attributes']\n): SpanStoreRecord['attributes'] {\n if (!attributes) {\n return undefined\n }\n\n const sanitized: NonNullable = {}\n for (const [key, value] of Object.entries(attributes)) {\n if (!SAFE_SPAN_ATTRIBUTE_KEYS.has(key)) {\n continue\n }\n\n sanitized[key] = key === 'http.url' ? sanitizeUrlAttribute(value) : value\n }\n\n return Object.keys(sanitized).length > 0 ? sanitized : undefined\n}\n\nfunction sanitizeSpanEvents(\n events: SpanStoreRecord['events']\n): SpanStoreRecord['events'] {\n return events?.map((event) => ({\n ...event,\n attributes: sanitizeSpanAttributes(event.attributes),\n }))\n}\n\nfunction sanitizeSpanLinks(\n links: SpanStoreRecord['links']\n): SpanStoreRecord['links'] {\n return links?.map((link) => ({\n ...link,\n attributes: sanitizeSpanAttributes(link.attributes),\n }))\n}\n\nfunction sanitizeUrlAttribute(value: AttributeValue): AttributeValue {\n return typeof value === 'string' ? (sanitizeUrl(value) ?? '') : value\n}\n\nfunction sanitizeUrl(value: string | undefined): string | undefined {\n if (!value) {\n return value\n }\n\n const isRelativeUrl = value.startsWith('/')\n\n try {\n const url = isRelativeUrl ? new URL(value, 'http://n') : new URL(value)\n\n url.username = ''\n url.password = ''\n\n for (const name of Array.from(url.searchParams.keys())) {\n if (SENSITIVE_PARAM_NAME_RE.test(name)) {\n url.searchParams.set(name, REDACTED_VALUE)\n }\n }\n\n return isRelativeUrl ? `${url.pathname}${url.search}${url.hash}` : url.href\n } catch {\n return value\n }\n}\n\nfunction getStringAttribute(value: AttributeValue | undefined) {\n return typeof value === 'string' ? value : undefined\n}\n\nfunction getNumberAttribute(value: AttributeValue | undefined) {\n return typeof value === 'number' ? value : undefined\n}\n"],"names":["getRequestInsightKey","getRequestInsightKind","isRequestInsightsEnabled","MAX_REQUEST_INSIGHTS","REQUEST_INSIGHTS_STORE_KEY","Symbol","for","CLIENT_COMPONENT_LOADING_SPAN_TYPE","REDACTED_VALUE","SAFE_SPAN_ATTRIBUTE_KEYS","Set","SENSITIVE_PARAM_NAME_RE","InMemoryRequestInsightsStore","recordSpan","span","requestId","insight","getOrCreateRequest","kind","requestInsightKind","htmlRequestId","route","url","startTime","timestamp","spanStartTime","sanitizeUrl","updateTiming","durationMs","attributes","status","spans","push","name","traceId","spanId","parentSpanId","sanitizeSpanAttributes","links","sanitizeSpanLinks","events","sanitizeSpanEvents","error","fetch","getFetchInsight","recordFetchForInsight","notify","recordFetch","identity","fetchStartTime","getCurrentTimestamp","sanitizeFetchInsight","getSnapshot","requests","requestOrder","map","insightKey","get","filter","request","undefined","subscribe","listener","listeners","add","delete","clear","requestTimings","length","isRequestSpan","requestTiming","set","endTime","requestEndTime","Math","min","max","fetches","trim","some","existingFetch","index","shift","Map","recordRequestInsightSpan","getRequestInsightsStore","recordRequestInsightFetch","getRequestInsightsSnapshot","subscribeRequestInsights","clearRequestInsightsForTest","globalStore","globalThis","getStringAttribute","method","statusCode","getNumberAttribute","cacheStatus","cacheReason","performance","timeOrigin","now","sanitized","key","value","Object","entries","has","sanitizeUrlAttribute","keys","event","link","isRelativeUrl","startsWith","URL","username","password","Array","from","searchParams","test","pathname","search","hash","href"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 6756, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/trace/span-store.ts"],"sourcesContent":["import type { AttributeValue } from 'next/dist/compiled/@opentelemetry/api'\nimport type { RequestInsightKind } from '../../../next-devtools/shared/request-insights'\n\nexport type SpanStoreAttributes = Record\n\nexport type SpanStoreLink = {\n traceId: string\n spanId: string\n attributes?: SpanStoreAttributes\n}\n\nexport type SpanStoreEvent = {\n name: string\n timestamp: number\n attributes?: SpanStoreAttributes\n}\n\nexport type SpanStoreRecord = {\n name: string\n timestamp: number\n startTime?: number\n durationMs?: number\n status?: 'ok' | 'error'\n traceId?: string\n spanId?: string\n parentSpanId?: string\n requestId?: string\n requestInsightKind?: RequestInsightKind\n htmlRequestId?: string\n route?: string\n url?: string\n attributes?: SpanStoreAttributes\n links?: SpanStoreLink[]\n events?: SpanStoreEvent[]\n error?: {\n type?: string\n message?: string\n }\n}\n\ntype SpanRecorderForTest = (span: SpanStoreRecord) => void\n\nlet spanRecorderForTest: SpanRecorderForTest | undefined\n\nexport function recordSpan(record: Omit): void {\n if (!isLocalSpanRecordingEnabled()) {\n return\n }\n\n const spanRecord: SpanStoreRecord = {\n timestamp: getCurrentTimestamp(),\n ...record,\n }\n\n spanRecorderForTest?.(spanRecord)\n\n if (isRequestInsightsEnabled() && spanRecord.requestId) {\n const { recordRequestInsightSpan } =\n require('./request-insights') as typeof import('./request-insights')\n recordRequestInsightSpan(spanRecord)\n }\n}\n\nexport function setSpanRecorderForTest(\n recorder: SpanRecorderForTest | undefined\n): void {\n spanRecorderForTest = recorder\n}\n\nexport function isLocalSpanRecordingEnabled(): boolean {\n if (!process.env.__NEXT_DEV_SERVER) {\n return false\n }\n\n return spanRecorderForTest !== undefined || isRequestInsightsEnabled()\n}\n\nexport function isRequestInsightsEnabled(): boolean {\n if (!process.env.__NEXT_DEV_SERVER) {\n return false\n }\n\n const value = process.env.__NEXT_REQUEST_INSIGHTS\n return isEnabledEnvValue(value)\n}\n\nfunction isEnabledEnvValue(value: string | undefined): boolean {\n return value === '1' || value === 'true' || (value as unknown) === true\n}\n\nfunction getCurrentTimestamp(): number {\n return performance.timeOrigin + performance.now()\n}\n"],"names":["spanRecorderForTest","recordSpan","record","isLocalSpanRecordingEnabled","spanRecord","timestamp","getCurrentTimestamp","isRequestInsightsEnabled","requestId","recordRequestInsightSpan","require","setSpanRecorderForTest","recorder","process","env","__NEXT_DEV_SERVER","undefined","value","__NEXT_REQUEST_INSIGHTS","isEnabledEnvValue","performance","timeOrigin","now"],"mappings":";;;;;;;;;;AA0CA,IAAIA;AAEG,SAASC,WAAWC,MAA0C;IACnE,IAAI,CAACC,+BAA+B;QAClC;IACF;IAEA,MAAMC,aAA8B;QAClCC,WAAWC;QACX,GAAGJ,MAAM;IACX;IAEAF,uBAAAA,OAAAA,KAAAA,IAAAA,oBAAsBI;IAEtB,IAAIG,8BAA8BH,WAAWI,SAAS,EAAE;;AAK1D;AAEO,SAASG,uBACdC,QAAyC;IAEzCZ,sBAAsBY;AACxB;AAEO,SAAST;IACd,IAAI,CAACU,QAAQC,GAAG,CAACC,iBAAiB,EAAE;;IAIpC,OAAOf,wBAAwBgB,aAAaT;AAC9C;AAEO,SAASA;IACd,IAAI,CAACM,QAAQC,GAAG,CAACC,iBAAiB,EAAE;;IAIpC,MAAME,QAAQJ,QAAQC,GAAG,CAACI,uBAAuB;IACjD,OAAOC,kBAAkBF;AAC3B;AAEA,SAASE,kBAAkBF,KAAyB;IAClD,OAAOA,UAAU,OAAOA,UAAU,UAAWA,UAAsB;AACrE;AAEA,SAASX;IACP,OAAOc,YAAYC,UAAU,GAAGD,YAAYE,GAAG;AACjD","ignoreList":[0]}}, + {"offset": {"line": 6803, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/trace/tracer.ts"],"sourcesContent":["import type { FetchEventResult } from '../../web/types'\nimport type { TextMapSetter } from '@opentelemetry/api'\nimport type { SpanTypes } from './constants'\nimport type { LocalSpanRecorder } from './local-span-recorder'\nimport { LogSpanAllowList, NextVanillaSpanAllowlist } from './constants'\n\nimport type {\n Context,\n ContextAPI,\n Span,\n SpanOptions,\n Tracer,\n AttributeValue,\n TextMapGetter,\n} from 'next/dist/compiled/@opentelemetry/api'\nimport { isThenable } from '../../../shared/lib/is-thenable'\n\nconst NEXT_OTEL_PERFORMANCE_PREFIX = process.env.NEXT_OTEL_PERFORMANCE_PREFIX\nconst LOCAL_SPAN_RECORDER_KEY = Symbol.for('@next/local-span-recorder')\n\ntype GlobalWithLocalSpanRecorder = typeof globalThis & {\n [LOCAL_SPAN_RECORDER_KEY]?: LocalSpanRecorder\n}\n\nlet api: typeof import('next/dist/compiled/@opentelemetry/api')\n\nfunction getLocalSpanRecorder() {\n if (process.env.__NEXT_DEV_SERVER) {\n return (globalThis as GlobalWithLocalSpanRecorder)[LOCAL_SPAN_RECORDER_KEY]\n } else {\n return undefined\n }\n}\n\n// we want to allow users to use their own version of @opentelemetry/api if they\n// want to, so we try to require it first, and if it fails we fall back to the\n// version that is bundled with Next.js\n// this is because @opentelemetry/api has to be synced with the version of\n// @opentelemetry/tracing that is used, and we don't want to force users to use\n// the version that is bundled with Next.js.\n// the API is ~stable, so this should be fine\nif (process.env.NEXT_RUNTIME === 'edge') {\n api = require('@opentelemetry/api') as typeof import('@opentelemetry/api')\n} else {\n try {\n api = require('@opentelemetry/api') as typeof import('@opentelemetry/api')\n } catch (err) {\n api =\n require('next/dist/compiled/@opentelemetry/api') as typeof import('next/dist/compiled/@opentelemetry/api')\n }\n}\n\nconst { context, propagation, trace, SpanStatusCode, SpanKind, ROOT_CONTEXT } =\n api\n\nexport class BubbledError extends Error {\n constructor(\n public readonly bubble?: boolean,\n public readonly result?: FetchEventResult\n ) {\n super()\n }\n}\n\nexport function isBubbledError(error: unknown): error is BubbledError {\n if (typeof error !== 'object' || error === null) return false\n return error instanceof BubbledError\n}\n\nconst closeSpanWithError = (\n span: Span,\n error?: Error,\n endTime?: Parameters[0]\n) => {\n if (isBubbledError(error) && error.bubble) {\n span.setAttribute('next.bubble', true)\n } else {\n if (error) {\n span.recordException(error)\n span.setAttribute('error.type', error.name)\n }\n span.setStatus({ code: SpanStatusCode.ERROR, message: error?.message })\n }\n span.end(endTime)\n}\n\ntype TracerSpanOptions = Omit & {\n endTime?: Parameters[0]\n parentSpan?: Span\n spanName?: string\n attributes?: Partial>\n hideSpan?: boolean\n}\n\ninterface NextTracer {\n getContext(): ContextAPI\n\n /**\n * Instruments a function by automatically creating a span activated on its\n * scope.\n *\n * The span will automatically be finished when one of these conditions is\n * met:\n *\n * * The function returns a promise, in which case the span will finish when\n * the promise is resolved or rejected.\n * * The function takes a callback as its second parameter, in which case the\n * span will finish when that callback is called.\n * * The function doesn't accept a callback and doesn't return a promise, in\n * which case the span will finish at the end of the function execution.\n *\n */\n trace(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise\n ): Promise\n trace(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n trace(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise\n ): Promise\n trace(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n\n /**\n * Wrap a function to automatically create a span activated on its\n * scope when it's called.\n *\n * The span will automatically be finished when one of these conditions is\n * met:\n *\n * * The function returns a promise, in which case the span will finish when\n * the promise is resolved or rejected.\n * * The function takes a callback as its last parameter, in which case the\n * span will finish when that callback is called.\n * * The function doesn't accept a callback and doesn't return a promise, in\n * which case the span will finish at the end of the function execution.\n */\n wrap) => any>(type: SpanTypes, fn: T): T\n wrap) => any>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: T\n ): T\n wrap) => any>(\n type: SpanTypes,\n options: (...args: any[]) => TracerSpanOptions,\n fn: T\n ): T\n\n /**\n * Starts and returns a new Span representing a logical unit of work.\n *\n * This method do NOT modify the current Context by default. In result, any inner span will not\n * automatically set its parent context to the span created by this method unless manually activate\n * context via `tracer.getContext().with`. `trace`, or `wrap` is generally recommended as it gracefully\n * handles context activation. (ref: https://github.com/open-telemetry/opentelemetry-js/issues/1923)\n */\n startSpan(type: SpanTypes): Span\n startSpan(type: SpanTypes, options: TracerSpanOptions): Span\n\n /**\n * Returns currently activated span if current context is in the scope of the span.\n * Returns undefined otherwise.\n */\n getActiveScopeSpan(): Span | undefined\n\n /**\n * Returns trace propagation data for the currently active context. The format is equal to data provided\n * through the OpenTelemetry propagator API.\n */\n getTracePropagationData(): ClientTraceDataEntry[]\n\n /**\n * Executes a function with the given span set as the active span in the context.\n * This allows child spans created within the function to automatically parent to this span.\n */\n withSpan(span: Span, fn: () => T): T\n}\n\ntype NextAttributeNames =\n | 'next.route'\n | 'next.page'\n | 'next.rsc'\n | 'next.segment'\n | 'next.span_category'\n | 'next.span_name'\n | 'next.span_type'\n | 'next.clientComponentLoadCount'\ntype OTELAttributeNames = `http.${string}` | `net.${string}`\ntype AttributeNames = NextAttributeNames | OTELAttributeNames\n\n/** we use this map to propagate attributes from nested spans to the top span */\nconst rootSpanAttributesStore = new Map<\n number,\n Map\n>()\nconst rootSpanIdKey = api.createContextKey('next.rootSpanId')\nlet lastSpanId = 0\nconst getSpanId = () => lastSpanId++\n\nexport interface ClientTraceDataEntry {\n key: string\n value: string\n}\n\nconst clientTraceDataSetter: TextMapSetter = {\n set(carrier, key, value) {\n carrier.push({\n key,\n value,\n })\n },\n}\n\nclass NextTracerImpl implements NextTracer {\n /**\n * Returns an instance to the trace with configured name.\n * Since wrap / trace can be defined in any place prior to actual trace subscriber initialization,\n * This should be lazily evaluated.\n */\n private getTracerInstance(): Tracer {\n return trace.getTracer('next.js', process.env.__NEXT_VERSION)\n }\n\n private isOpenTelemetryEnabled(): boolean {\n const activeSpan = trace.getSpan(context.active())\n if (activeSpan?.isRecording()) {\n return true\n }\n\n const tracerProvider = trace.getTracerProvider() as {\n getDelegate?: () => { constructor?: { name?: string } } | undefined\n }\n\n if (!('getDelegate' in tracerProvider)) {\n return true\n }\n\n return (\n tracerProvider.getDelegate?.()?.constructor?.name !== 'NoopTracerProvider'\n )\n }\n\n public getContext(): ContextAPI {\n return context\n }\n\n public getTracePropagationData(): ClientTraceDataEntry[] {\n const activeContext = context.active()\n const entries: ClientTraceDataEntry[] = []\n propagation.inject(activeContext, entries, clientTraceDataSetter)\n return entries\n }\n\n public getActiveScopeSpan(): Span | undefined {\n const localSpanRecorder = getLocalSpanRecorder()\n const activeLocalSpan = localSpanRecorder?.getActiveLocalSpan()\n if (\n activeLocalSpan &&\n localSpanRecorder?.isOpenTelemetryIsolatedSpan(activeLocalSpan)\n ) {\n return activeLocalSpan\n }\n\n const activeSpan = trace.getSpan(context.active())\n if (activeSpan || !process.env.__NEXT_DEV_SERVER) {\n return activeSpan\n }\n return activeLocalSpan\n }\n\n /**\n * Run `fn` with the active span cleared, so spans created inside become new\n * roots (or parent to incoming propagated context). Used for in-process\n * Node.js middleware so its span is a sibling of the request span, matching\n * edge middleware which runs in a detached sandbox.\n */\n public runWithDetachedContext(fn: () => T): T {\n if (!NEXT_OTEL_PERFORMANCE_PREFIX && !this.isOpenTelemetryEnabled()) {\n return fn()\n }\n return context.with(ROOT_CONTEXT, fn)\n }\n\n public withPropagatedContext(\n carrier: C,\n fn: () => T,\n getter?: TextMapGetter,\n force = false\n ): T {\n const activeContext = context.active()\n\n if (\n !NEXT_OTEL_PERFORMANCE_PREFIX &&\n !this.isOpenTelemetryEnabled() &&\n !trace.getSpanContext(activeContext)\n ) {\n return fn()\n }\n\n if (force) {\n const remoteContext = propagation.extract(ROOT_CONTEXT, carrier, getter)\n\n if (trace.getSpanContext(remoteContext)) {\n return context.with(remoteContext, fn)\n }\n\n // Preserve the current active span while still merging any extracted\n // baggage/context values from the carrier.\n const mergedContext = propagation.extract(activeContext, carrier, getter)\n return context.with(mergedContext, fn)\n }\n\n if (trace.getSpanContext(activeContext)) {\n // Active span is already set, too late to propagate.\n return fn()\n }\n\n const remoteContext = propagation.extract(activeContext, carrier, getter)\n return context.with(remoteContext, fn)\n }\n\n // Trace, wrap implementation is inspired by datadog trace implementation\n // (https://datadoghq.dev/dd-trace-js/interfaces/tracer.html#trace).\n public trace(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise\n ): Promise\n public trace(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n public trace(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise\n ): Promise\n public trace(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n public trace(...args: Array) {\n const [type, fnOrOptions, fnOrEmpty] = args\n const tracingEnabled =\n Boolean(NEXT_OTEL_PERFORMANCE_PREFIX) || this.isOpenTelemetryEnabled()\n const localSpanRecorder = getLocalSpanRecorder()\n const localSpanRecordingEnabled =\n localSpanRecorder?.isLocalSpanRecordingEnabled() ?? false\n\n if (!tracingEnabled && !localSpanRecordingEnabled) {\n return typeof fnOrOptions === 'function' ? fnOrOptions() : fnOrEmpty()\n }\n\n // coerce options form overload\n const {\n fn,\n options,\n }: {\n fn: (span?: Span, done?: (error?: Error) => any) => T | Promise\n options: TracerSpanOptions\n } =\n typeof fnOrOptions === 'function'\n ? {\n fn: fnOrOptions,\n options: {},\n }\n : {\n fn: fnOrEmpty,\n options: { ...fnOrOptions },\n }\n\n const spanName = options.spanName ?? type\n\n const parentSpan = options.parentSpan ?? this.getActiveScopeSpan()\n const isolatedParentSpan =\n parentSpan && localSpanRecorder?.isOpenTelemetryIsolatedSpan(parentSpan)\n ? parentSpan\n : undefined\n const shouldDelegateSpan =\n !isolatedParentSpan &&\n (NextVanillaSpanAllowlist.has(type) ||\n process.env.NEXT_OTEL_VERBOSE === '1')\n const shouldTraceSpan =\n shouldDelegateSpan ||\n (localSpanRecorder?.isRequestInsightsEnabled() ?? false)\n\n if (!shouldTraceSpan || options.hideSpan) {\n return fn()\n }\n\n // Trying to get active scoped span to assign parent. If option specifies parent span manually, will try to use it.\n let spanContext = isolatedParentSpan\n ? context.active()\n : this.getSpanContext(parentSpan)\n\n if (!spanContext) {\n spanContext = context?.active() ?? ROOT_CONTEXT\n }\n // Check if there's already a root span in the store for this trace\n // We are intentionally not checking whether there is an active context\n // from outside of nextjs to ensure that we can provide the same level\n // of telemetry when using a custom server\n const existingRootSpanId = spanContext.getValue(rootSpanIdKey)\n const isRootSpan =\n typeof existingRootSpanId !== 'number' ||\n !rootSpanAttributesStore.has(existingRootSpanId)\n\n const spanId = getSpanId()\n\n options.attributes = {\n 'next.span_category': 'nextjs',\n 'next.span_name': spanName,\n 'next.span_type': type,\n ...options.attributes,\n }\n\n return context.with(spanContext.setValue(rootSpanIdKey, spanId), () =>\n this.runWithActiveSpan(\n spanName,\n options,\n spanContext,\n tracingEnabled && shouldDelegateSpan,\n localSpanRecordingEnabled,\n isolatedParentSpan,\n (span: Span) => {\n let startTime: number | undefined\n if (\n NEXT_OTEL_PERFORMANCE_PREFIX &&\n type &&\n LogSpanAllowList.has(type)\n ) {\n startTime =\n 'performance' in globalThis && 'measure' in performance\n ? globalThis.performance.now()\n : undefined\n }\n\n let cleanedUp = false\n const onCleanup = () => {\n if (cleanedUp) return\n cleanedUp = true\n rootSpanAttributesStore.delete(spanId)\n if (startTime) {\n performance.measure(\n `${NEXT_OTEL_PERFORMANCE_PREFIX}:next-${(\n type.split('.').pop() || ''\n ).replace(\n /[A-Z]/g,\n (match: string) => '-' + match.toLowerCase()\n )}`,\n {\n start: startTime,\n end: performance.now(),\n }\n )\n }\n }\n\n if (isRootSpan) {\n rootSpanAttributesStore.set(\n spanId,\n new Map(\n Object.entries(options.attributes ?? {}) as [\n AttributeNames,\n AttributeValue | undefined,\n ][]\n )\n )\n }\n if (fn.length > 1) {\n try {\n return fn(span, (err) => {\n if (err) {\n closeSpanWithError(span, err, options.endTime)\n } else {\n span.end(options.endTime)\n }\n })\n } catch (err: any) {\n closeSpanWithError(span, err, options.endTime)\n throw err\n } finally {\n onCleanup()\n }\n }\n\n try {\n const result = fn(span)\n if (isThenable(result)) {\n // If there's error make sure it throws\n return result\n .then((res) => {\n span.end(options.endTime)\n // Need to pass down the promise result,\n // it could be react stream response with error { error, stream }\n return res\n })\n .catch((err) => {\n closeSpanWithError(span, err, options.endTime)\n throw err\n })\n .finally(onCleanup)\n } else {\n span.end(options.endTime)\n onCleanup()\n }\n\n return result\n } catch (err: any) {\n closeSpanWithError(span, err, options.endTime)\n onCleanup()\n throw err\n }\n }\n )\n )\n }\n\n private runWithActiveSpan(\n spanName: string,\n options: TracerSpanOptions,\n parentContext: Context,\n tracingEnabled: boolean,\n localSpanRecordingEnabled: boolean,\n isolatedParentSpan: Span | undefined,\n fn: (span: Span) => T\n ): T {\n if (tracingEnabled) {\n return this.getTracerInstance().startActiveSpan(\n spanName,\n options,\n (span: Span) =>\n fn(\n localSpanRecordingEnabled\n ? this.createLocalRecordingSpan(\n spanName,\n options,\n parentContext,\n span,\n isolatedParentSpan\n )\n : span\n )\n )\n }\n\n const span = this.createLocalRecordingSpan(\n spanName,\n options,\n parentContext,\n undefined,\n isolatedParentSpan\n )\n const localSpanRecorder = getLocalSpanRecorder()!\n return localSpanRecorder.withLocalSpan(span, () =>\n localSpanRecorder.isOpenTelemetryIsolatedSpan(span)\n ? fn(span)\n : context.with(\n trace.setSpan(context.active(), span),\n fn,\n undefined,\n span\n )\n )\n }\n\n private createLocalRecordingSpan(\n name: string,\n options: TracerSpanOptions,\n parentContext: Context,\n delegateSpan?: Span,\n isolatedParentSpan?: Span\n ): Span {\n const parentSpanContext =\n isolatedParentSpan?.spanContext() ?? trace.getSpanContext(parentContext)\n const delegateSpanContext = delegateSpan?.spanContext()\n\n return getLocalSpanRecorder()!.createLocalSpan({\n name,\n attributes: options.attributes,\n links: options.links,\n startTime: options.startTime,\n delegateSpan,\n traceId: delegateSpanContext?.traceId ?? parentSpanContext?.traceId,\n spanId: delegateSpanContext?.spanId,\n parentSpanId: parentSpanContext?.spanId,\n isolateOpenTelemetry: isolatedParentSpan !== undefined,\n })\n }\n\n public wrap) => any>(type: SpanTypes, fn: T): T\n public wrap) => any>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: T\n ): T\n public wrap) => any>(\n type: SpanTypes,\n options: (...args: any[]) => TracerSpanOptions,\n fn: T\n ): T\n public wrap(...args: Array) {\n const tracer = this\n const [name, options, fn] =\n args.length === 3 ? args : [args[0], {}, args[1]]\n\n if (\n !NextVanillaSpanAllowlist.has(name) &&\n process.env.NEXT_OTEL_VERBOSE !== '1' &&\n !process.env.__NEXT_DEV_SERVER\n ) {\n return fn\n }\n\n return function (this: any) {\n let optionsObj = options\n if (typeof optionsObj === 'function' && typeof fn === 'function') {\n optionsObj = optionsObj.apply(this, arguments)\n }\n\n const lastArgId = arguments.length - 1\n const cb = arguments[lastArgId]\n\n if (typeof cb === 'function') {\n const scopeBoundCb = tracer.getContext().bind(context.active(), cb)\n return tracer.trace(name, optionsObj, (_span, done) => {\n arguments[lastArgId] = function (err: any) {\n done?.(err)\n return scopeBoundCb.apply(this, arguments)\n }\n\n return fn.apply(this, arguments)\n })\n } else {\n return tracer.trace(name, optionsObj, () => fn.apply(this, arguments))\n }\n }\n }\n\n public startSpan(type: SpanTypes): Span\n public startSpan(type: SpanTypes, options: TracerSpanOptions): Span\n public startSpan(...args: Array): Span {\n const [type, passedOptions]: [string, TracerSpanOptions | undefined] =\n args as any\n const options: TracerSpanOptions = passedOptions\n ? {\n ...passedOptions,\n attributes: {\n 'next.span_category': 'nextjs',\n ...passedOptions.attributes,\n },\n }\n : { attributes: { 'next.span_category': 'nextjs' } }\n\n const localSpanRecorder = getLocalSpanRecorder()\n const parentSpan = options.parentSpan ?? this.getActiveScopeSpan()\n const isolatedParentSpan =\n parentSpan && localSpanRecorder?.isOpenTelemetryIsolatedSpan(parentSpan)\n ? parentSpan\n : undefined\n const parentContext =\n (isolatedParentSpan ? undefined : this.getSpanContext(parentSpan)) ??\n context.active()\n const localSpanRecordingEnabled =\n localSpanRecorder?.isLocalSpanRecordingEnabled() ?? false\n\n if (!localSpanRecordingEnabled) {\n return this.getTracerInstance().startSpan(type, options, parentContext)\n }\n\n const delegateSpan =\n !isolatedParentSpan && this.isOpenTelemetryEnabled()\n ? this.getTracerInstance().startSpan(type, options, parentContext)\n : undefined\n\n return this.createLocalRecordingSpan(\n type,\n options,\n parentContext,\n delegateSpan,\n isolatedParentSpan\n )\n }\n\n private getSpanContext(parentSpan?: Span) {\n const spanContext = parentSpan\n ? trace.setSpan(context.active(), parentSpan)\n : undefined\n\n return spanContext\n }\n\n public getRootSpanAttributes() {\n const spanId = context.active().getValue(rootSpanIdKey) as number\n return rootSpanAttributesStore.get(spanId)\n }\n\n public setRootSpanAttribute(key: AttributeNames, value: AttributeValue) {\n const spanId = context.active().getValue(rootSpanIdKey) as number\n const attributes = rootSpanAttributesStore.get(spanId)\n if (attributes && !attributes.has(key)) {\n attributes.set(key, value)\n }\n\n if (process.env.__NEXT_DEV_SERVER) {\n const localSpan = getLocalSpanRecorder()?.getActiveLocalSpan()\n if (localSpan) {\n localSpan.setAttribute(key, value)\n }\n }\n }\n\n public withSpan(span: Span, fn: () => T): T {\n const recorder = getLocalSpanRecorder()\n if (recorder?.isLocalRecordingSpan(span)) {\n return recorder.withLocalSpan(span, () =>\n recorder.isOpenTelemetryIsolatedSpan(span)\n ? fn()\n : context.with(trace.setSpan(context.active(), span), fn)\n )\n }\n return context.with(trace.setSpan(context.active(), span), fn)\n }\n}\n\nconst getTracer = (() => {\n const tracer = new NextTracerImpl()\n\n return () => tracer\n})()\n\nexport { getTracer, SpanStatusCode, SpanKind }\nexport type { NextTracer, Span, SpanOptions, ContextAPI, TracerSpanOptions }\n"],"names":["LogSpanAllowList","NextVanillaSpanAllowlist","isThenable","NEXT_OTEL_PERFORMANCE_PREFIX","process","env","LOCAL_SPAN_RECORDER_KEY","Symbol","for","api","getLocalSpanRecorder","__NEXT_DEV_SERVER","globalThis","undefined","NEXT_RUNTIME","require","err","context","propagation","trace","SpanStatusCode","SpanKind","ROOT_CONTEXT","BubbledError","Error","constructor","bubble","result","isBubbledError","error","closeSpanWithError","span","endTime","setAttribute","recordException","name","setStatus","code","ERROR","message","end","rootSpanAttributesStore","Map","rootSpanIdKey","createContextKey","lastSpanId","getSpanId","clientTraceDataSetter","set","carrier","key","value","push","NextTracerImpl","getTracerInstance","getTracer","__NEXT_VERSION","isOpenTelemetryEnabled","tracerProvider","activeSpan","getSpan","active","isRecording","getTracerProvider","getDelegate","getContext","getTracePropagationData","activeContext","entries","inject","getActiveScopeSpan","localSpanRecorder","activeLocalSpan","getActiveLocalSpan","isOpenTelemetryIsolatedSpan","runWithDetachedContext","fn","with","withPropagatedContext","getter","force","getSpanContext","remoteContext","extract","mergedContext","args","type","fnOrOptions","fnOrEmpty","tracingEnabled","Boolean","localSpanRecordingEnabled","isLocalSpanRecordingEnabled","options","spanName","parentSpan","isolatedParentSpan","shouldDelegateSpan","has","NEXT_OTEL_VERBOSE","shouldTraceSpan","isRequestInsightsEnabled","hideSpan","spanContext","existingRootSpanId","getValue","isRootSpan","spanId","attributes","setValue","runWithActiveSpan","startTime","performance","now","cleanedUp","onCleanup","delete","measure","split","pop","replace","match","toLowerCase","start","Object","length","then","res","catch","finally","parentContext","startActiveSpan","createLocalRecordingSpan","withLocalSpan","setSpan","delegateSpan","parentSpanContext","delegateSpanContext","createLocalSpan","links","traceId","parentSpanId","isolateOpenTelemetry","wrap","tracer","optionsObj","apply","arguments","lastArgId","cb","scopeBoundCb","bind","_span","done","startSpan","passedOptions","getRootSpanAttributes","get","setRootSpanAttribute","localSpan","withSpan","recorder","isLocalRecordingSpan"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 7176, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/normalizers/built/app/app-pathname-normalizer.ts"],"sourcesContent":["import { normalizeAppPath } from '../../../../shared/lib/router/utils/app-paths'\nimport { Normalizers } from '../../normalizers'\nimport { wrapNormalizerFn } from '../../wrap-normalizer-fn'\nimport { UnderscoreNormalizer } from '../../underscore-normalizer'\nimport type { Normalizer } from '../../normalizer'\n\nexport class AppPathnameNormalizer extends Normalizers {\n constructor() {\n super([\n // The pathname to match should have the trailing `/page` and other route\n // group information stripped from it.\n wrapNormalizerFn(normalizeAppPath),\n // The page should have the `%5F` characters replaced with `_` characters.\n new UnderscoreNormalizer(),\n ])\n }\n\n public normalize(page: string): string {\n return super.normalize(page)\n }\n}\n\nexport class DevAppPathnameNormalizer extends Normalizers {\n constructor(pageNormalizer: Normalizer) {\n super([\n // This should normalize the filename to a page.\n pageNormalizer,\n // Normalize the app page to a pathname.\n new AppPathnameNormalizer(),\n ])\n }\n\n public normalize(filename: string): string {\n return super.normalize(filename)\n }\n}\n"],"names":["normalizeAppPath","Normalizers","wrapNormalizerFn","UnderscoreNormalizer","AppPathnameNormalizer","constructor","normalize","page","DevAppPathnameNormalizer","pageNormalizer","filename"],"mappings":";;;;;;AAAA,SAASA,gBAAgB,QAAQ,gDAA+C;AAChF,SAASC,WAAW,QAAQ,oBAAmB;AAC/C,SAASC,gBAAgB,QAAQ,2BAA0B;AAC3D,SAASC,oBAAoB,QAAQ,8BAA6B;;;;;AAG3D,MAAMC,8BAA8BH,4LAAAA;IACzCI,aAAc;QACZ,KAAK,CAAC;YACJ,yEAAyE;YACzE,sCAAsC;gBACtCH,8MAAAA,EAAiBF,6MAAAA;YACjB,0EAA0E;YAC1E,IAAIG,kNAAAA;SACL;IACH;IAEOG,UAAUC,IAAY,EAAU;QACrC,OAAO,KAAK,CAACD,UAAUC;IACzB;AACF;AAEO,MAAMC,iCAAiCP,4LAAAA;IAC5CI,YAAYI,cAA0B,CAAE;QACtC,KAAK,CAAC;YACJ,gDAAgD;YAChDA;YACA,wCAAwC;YACxC,IAAIL;SACL;IACH;IAEOE,UAAUI,QAAgB,EAAU;QACzC,OAAO,KAAK,CAACJ,UAAUI;IACzB;AACF","ignoreList":[0]}}, + {"offset": {"line": 7221, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/normalizers/normalizers.ts"],"sourcesContent":["import type { Normalizer } from './normalizer'\n\n/**\n * Normalizers combines many normalizers into a single normalizer interface that\n * will normalize the inputted pathname with each normalizer in order.\n */\nexport class Normalizers implements Normalizer {\n constructor(private readonly normalizers: Array = []) {}\n\n public push(normalizer: Normalizer) {\n this.normalizers.push(normalizer)\n }\n\n public normalize(pathname: string): string {\n return this.normalizers.reduce(\n (normalized, normalizer) => normalizer.normalize(normalized),\n pathname\n )\n }\n}\n"],"names":["Normalizers","constructor","normalizers","push","normalizer","normalize","pathname","reduce","normalized"],"mappings":"AAEA;;;CAGC,GACD;;;;AAAO,MAAMA;IACXC,YAA6BC,cAAiC,EAAE,CAAE;aAArCA,WAAAA,GAAAA;IAAsC;IAE5DC,KAAKC,UAAsB,EAAE;QAClC,IAAI,CAACF,WAAW,CAACC,IAAI,CAACC;IACxB;IAEOC,UAAUC,QAAgB,EAAU;QACzC,OAAO,IAAI,CAACJ,WAAW,CAACK,MAAM,CAC5B,CAACC,YAAYJ,aAAeA,WAAWC,SAAS,CAACG,aACjDF;IAEJ;AACF","ignoreList":[0]}}, + {"offset": {"line": 7243, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/normalizers/underscore-normalizer.ts"],"sourcesContent":["import type { Normalizer } from './normalizer'\n\n/**\n * UnderscoreNormalizer replaces all instances of %5F with _.\n */\nexport class UnderscoreNormalizer implements Normalizer {\n public normalize(pathname: string): string {\n return pathname.replace(/%5F/g, '_')\n }\n}\n"],"names":["UnderscoreNormalizer","normalize","pathname","replace"],"mappings":"AAEA;;CAEC,GACD;;;;AAAO,MAAMA;IACJC,UAAUC,QAAgB,EAAU;QACzC,OAAOA,SAASC,OAAO,CAAC,QAAQ;IAClC;AACF","ignoreList":[0]}}, + {"offset": {"line": 7258, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/normalizers/wrap-normalizer-fn.ts"],"sourcesContent":["import type { Normalizer } from './normalizer'\n\nexport function wrapNormalizerFn(fn: (pathname: string) => string): Normalizer {\n return { normalize: fn }\n}\n"],"names":["wrapNormalizerFn","fn","normalize"],"mappings":";;;;AAEO,SAASA,iBAAiBC,EAAgC;IAC/D,OAAO;QAAEC,WAAWD;IAAG;AACzB","ignoreList":[0]}}, + {"offset": {"line": 7271, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/pipe-readable.ts"],"sourcesContent":["import type { ServerResponse } from 'node:http'\nimport type { Readable } from 'node:stream'\n\nimport {\n ResponseAbortedName,\n createAbortController,\n} from './web/spec-extension/adapters/next-request'\nimport { createPromiseWithResolvers } from '../shared/lib/promise-with-resolvers'\nimport { getTracer } from './lib/trace/tracer'\nimport { NextNodeServerSpan } from './lib/trace/constants'\nimport type { ClientComponentLoadTracker } from './client-component-renderer-logger'\n\nexport function isAbortError(e: any): e is Error & { name: 'AbortError' } {\n return e?.name === 'AbortError' || e?.name === ResponseAbortedName\n}\n\nconst HAS_CLIENT_COMPONENT_METRICS_ENABLED =\n 'performance' in globalThis && process.env.NEXT_OTEL_PERFORMANCE_PREFIX\n\nfunction createWriterFromResponse(\n res: ServerResponse,\n waitUntilForEnd?: Promise,\n clientComponentLoadTracker?: ClientComponentLoadTracker\n): WritableStream {\n let started = false\n\n // Create a promise that will resolve once the response has drained. See\n // https://nodejs.org/api/stream.html#stream_event_drain\n let drained = createPromiseWithResolvers()\n function onDrain() {\n drained.resolve()\n }\n res.on('drain', onDrain)\n\n // If the finish event fires, it means we shouldn't block and wait for the\n // drain event.\n res.once('close', () => {\n res.off('drain', onDrain)\n drained.resolve()\n })\n\n // Create a promise that will resolve once the response has finished. See\n // https://nodejs.org/api/http.html#event-finish_1\n const finished = createPromiseWithResolvers()\n res.once('finish', () => {\n finished.resolve()\n })\n\n // Create a writable stream that will write to the response.\n return new WritableStream({\n write: async (chunk) => {\n // You'd think we'd want to use `start` instead of placing this in `write`\n // but this ensures that we don't actually flush the headers until we've\n // started writing chunks.\n if (!started) {\n started = true\n\n if (HAS_CLIENT_COMPONENT_METRICS_ENABLED) {\n const metrics = clientComponentLoadTracker?.snapshot()\n if (metrics) {\n performance.measure(\n `${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`,\n {\n start: metrics.clientComponentLoadStart,\n end:\n metrics.clientComponentLoadStart +\n metrics.clientComponentLoadTimes,\n }\n )\n }\n }\n\n res.flushHeaders()\n getTracer().trace(\n NextNodeServerSpan.startResponse,\n {\n spanName: 'start response',\n },\n () => undefined\n )\n }\n\n try {\n const ok = res.write(chunk)\n\n // Added by the `compression` middleware, this is a function that will\n // flush the partially-compressed response to the client.\n if ('flush' in res && typeof res.flush === 'function') {\n res.flush()\n }\n\n // If the write returns false, it means there's some backpressure, so\n // wait until it's streamed before continuing.\n if (!ok) {\n await drained.promise\n\n // Reset the drained promise so that we can wait for the next drain event.\n drained = createPromiseWithResolvers()\n }\n } catch (err) {\n res.end()\n throw new Error('failed to write chunk to response', { cause: err })\n }\n },\n abort: (err) => {\n if (res.writableFinished) return\n\n res.destroy(err)\n },\n close: async () => {\n // if a waitUntil promise was passed, wait for it to resolve before\n // ending the response.\n if (waitUntilForEnd) {\n await waitUntilForEnd\n }\n\n if (res.writableFinished) return\n\n res.end()\n return finished.promise\n },\n })\n}\n\nexport async function pipeToNodeResponse(\n readable: ReadableStream,\n res: ServerResponse,\n waitUntilForEnd?: Promise,\n clientComponentLoadTracker?: ClientComponentLoadTracker\n) {\n try {\n // If the response has already errored, then just return now.\n const { errored, destroyed } = res\n if (errored || destroyed) return\n\n // Create a new AbortController so that we can abort the readable if the\n // client disconnects.\n const controller = createAbortController(res)\n\n const writer = createWriterFromResponse(\n res,\n waitUntilForEnd,\n clientComponentLoadTracker\n )\n\n await readable.pipeTo(writer, { signal: controller.signal })\n } catch (err: any) {\n // If this isn't related to an abort error, re-throw it.\n if (isAbortError(err)) return\n\n throw new Error('failed to pipe response', { cause: err })\n }\n}\n\nexport async function pipeNodeReadableToNodeResponse(\n readable: Readable,\n res: ServerResponse,\n waitUntilForEnd?: Promise,\n clientComponentLoadTracker?: ClientComponentLoadTracker\n) {\n try {\n const { errored, destroyed } = res\n if (errored || destroyed) return\n\n let started = false\n\n const finished = createPromiseWithResolvers()\n\n // One `drain` listener for the whole response, as in\n // `createWriterFromResponse` above. It must not be `res.once('drain')` per\n // backpressured write: the `compression` middleware forwards `res.on` to\n // its zlib stream but leaves `removeListener` pointing at the response, so\n // a `once` listener is never removed from the stream it was added to. Each\n // backpressured write would leak one, and past ten Node reports the stream\n // as a probable leak via `MaxListenersExceededWarning`.\n //\n // TODO: the upstream fix for that asymmetry is\n // https://github.com/expressjs/compression/pull/153, which intercepts\n // `removeListener` so it reaches the zlib stream. It has been open since\n // 2019 and is not in upstream 1.8.1; we vendor 1.7.4. If it ever lands and\n // we upgrade, `res.off('drain', onDrain)` below would start working with\n // compression active and the caveat on the `close` handler could go away.\n let paused = false\n const onDrain = () => {\n // The listener outlives the readable: `off` below cannot reach the zlib\n // stream either, so a late drain can arrive after teardown.\n if (!paused || readable.destroyed) return\n\n paused = false\n readable.resume()\n }\n res.on('drain', onDrain)\n\n res.once('close', () => {\n // Only removes the listener when compression is inactive, which is the\n // case where it was added to the response itself. Otherwise it lives on\n // the zlib stream, which is released with the response.\n res.off('drain', onDrain)\n readable.destroy()\n finished.resolve()\n })\n\n readable.on('data', (chunk: Buffer) => {\n if (!started) {\n started = true\n\n if (\n 'performance' in globalThis &&\n process.env.NEXT_OTEL_PERFORMANCE_PREFIX\n ) {\n const metrics = clientComponentLoadTracker?.snapshot()\n if (metrics) {\n performance.measure(\n `${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`,\n {\n start: metrics.clientComponentLoadStart,\n end:\n metrics.clientComponentLoadStart +\n metrics.clientComponentLoadTimes,\n }\n )\n }\n }\n\n res.flushHeaders()\n getTracer().trace(\n NextNodeServerSpan.startResponse,\n {\n spanName: 'start response',\n },\n () => undefined\n )\n }\n\n const ok = res.write(chunk)\n\n if ('flush' in res && typeof res.flush === 'function') {\n res.flush()\n }\n\n if (!ok) {\n paused = true\n readable.pause()\n }\n })\n\n readable.on('end', async () => {\n if (waitUntilForEnd) {\n await waitUntilForEnd\n }\n\n if (!res.writableFinished) {\n res.end()\n }\n\n finished.resolve()\n })\n\n readable.on('error', (err) => {\n if (isAbortError(err)) {\n finished.resolve()\n return\n }\n\n res.destroy(err)\n finished.resolve()\n })\n\n await finished.promise\n } catch (err: any) {\n if (isAbortError(err)) return\n\n throw new Error('failed to pipe response', { cause: err })\n }\n}\n"],"names":["ResponseAbortedName","createAbortController","createPromiseWithResolvers","getTracer","NextNodeServerSpan","isAbortError","e","name","HAS_CLIENT_COMPONENT_METRICS_ENABLED","globalThis","process","env","NEXT_OTEL_PERFORMANCE_PREFIX","createWriterFromResponse","res","waitUntilForEnd","clientComponentLoadTracker","started","drained","onDrain","resolve","on","once","off","finished","WritableStream","write","chunk","metrics","snapshot","performance","measure","start","clientComponentLoadStart","end","clientComponentLoadTimes","flushHeaders","trace","startResponse","spanName","undefined","ok","flush","promise","err","Error","cause","abort","writableFinished","destroy","close","pipeToNodeResponse","readable","errored","destroyed","controller","writer","pipeTo","signal","pipeNodeReadableToNodeResponse","paused","resume","pause"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 7483, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/render-result.ts"],"sourcesContent":["import type { OutgoingHttpHeaders, ServerResponse } from 'http'\nimport type { Readable } from 'stream'\nimport type { CacheControl } from './lib/cache-control'\nimport type { FetchMetrics } from './base-http'\nimport type { PrefetchHints } from '../shared/lib/app-router-types'\nimport type { ClientComponentLoadTracker } from './client-component-renderer-logger'\n\nimport {\n chainStreams,\n streamFromBuffer,\n streamFromString,\n streamToString,\n} from './stream-utils/node-web-streams-helper'\nimport {\n isAbortError,\n pipeToNodeResponse,\n pipeNodeReadableToNodeResponse,\n} from './pipe-readable'\nimport type { RenderResumeDataCache } from './resume-data-cache/resume-data-cache'\nimport { InvariantError } from '../shared/lib/invariant-error'\nimport type {\n HTML_CONTENT_TYPE_HEADER,\n JSON_CONTENT_TYPE_HEADER,\n TEXT_PLAIN_CONTENT_TYPE_HEADER,\n} from '../lib/constants'\nimport type { RSC_CONTENT_TYPE_HEADER } from '../client/components/app-router-headers'\n\ntype ContentTypeOption =\n | typeof RSC_CONTENT_TYPE_HEADER // For App Page RSC responses\n | typeof HTML_CONTENT_TYPE_HEADER // For App Page, Pages HTML responses\n | typeof JSON_CONTENT_TYPE_HEADER // For API routes, Next.js data requests\n | typeof TEXT_PLAIN_CONTENT_TYPE_HEADER // For simplified errors\n\nexport type AppPageRenderResultMetadata = {\n /** Request-local metrics for the first response write. Never cache this. */\n clientComponentLoadTracker?: ClientComponentLoadTracker\n flightData?: Buffer\n cacheControl?: CacheControl\n staticBailoutInfo?: {\n stack?: string\n description?: string\n }\n\n /**\n * The postponed state if the render had postponed and needs to be resumed.\n */\n postponed?: string\n\n /**\n * Whether the prerender left any UI pending in a Suspense boundary. This is\n * reported directly by React's prerender result before Next.js resumes\n * client-only boundaries.\n */\n hasPendingUi?: boolean\n\n /**\n * The headers to set on the response that were added by the render.\n */\n headers?: OutgoingHttpHeaders\n statusCode?: number\n fetchTags?: string\n fetchMetrics?: FetchMetrics\n\n segmentData?: Map\n\n /**\n * Per-route prefetch hints computed at build time (e.g. segment inlining\n * decisions based on gzip sizes). Written to prefetch-hints.json by the\n * build pipeline.\n */\n prefetchHints?: PrefetchHints\n\n /**\n * In development, the resume data cache is warmed up before the render. This\n * is attached to the metadata so that it can be used during the render. When\n * prerendering, the filled resume data cache is also attached to the metadata\n * so that it can be used when prerendering matching fallback shells.\n */\n renderResumeDataCache?: RenderResumeDataCache\n}\n\nexport type PrerenderFailure = {\n readonly error: Error\n readonly result: RenderResult<\n Pick<\n AppPageRenderResultMetadata,\n 'headers' | 'flightData' | 'fetchMetrics' | 'postponed'\n >\n >\n}\n\nexport type PrerenderResult =\n | RenderResult\n | PrerenderFailure\n\nexport type PagesRenderResultMetadata = {\n pageData?: any\n cacheControl?: CacheControl\n isNotFound?: boolean\n isRedirect?: boolean\n}\n\nexport type StaticRenderResultMetadata = {}\n\nexport type RenderResultMetadata = AppPageRenderResultMetadata &\n PagesRenderResultMetadata &\n StaticRenderResultMetadata\n\nexport type RenderResultResponse =\n | ReadableStream[]\n | ReadableStream\n | Readable\n | string\n | Buffer\n | null\n\nexport type RenderResultOptions<\n Metadata extends RenderResultMetadata = RenderResultMetadata,\n> = {\n contentType: ContentTypeOption | null\n waitUntil?: Promise\n metadata: Metadata\n}\n\nfunction isNodeReadable(value: unknown): value is Readable {\n return (\n value !== null &&\n typeof value === 'object' &&\n typeof (value as Record).pipe === 'function' &&\n typeof (value as Record).on === 'function' &&\n !(value instanceof ReadableStream)\n )\n}\n\nexport default class RenderResult<\n Metadata extends RenderResultMetadata = RenderResultMetadata,\n> {\n /**\n * The detected content type for the response. This is used to set the\n * `Content-Type` header.\n */\n public readonly contentType: ContentTypeOption | null\n\n /**\n * The metadata for the response. This is used to set the revalidation times\n * and other metadata.\n */\n public readonly metadata: Readonly\n\n /**\n * The response itself. This can be a string, a stream, or null. If it's a\n * string, then it's a static response. If it's a stream, then it's a\n * dynamic response. If it's null, then the response was not found or was\n * already sent.\n */\n private response: RenderResultResponse\n\n /**\n * A render result that represents an empty response. This is used to\n * represent a response that was not found or was already sent.\n */\n public static readonly EMPTY = new RenderResult(\n null,\n { metadata: {}, contentType: null }\n )\n\n /**\n * Creates a new RenderResult instance from a static response.\n *\n * @param value the static response value\n * @param contentType the content type of the response\n * @returns a new RenderResult instance\n */\n public static fromStatic(\n value: string | Buffer,\n contentType: ContentTypeOption\n ) {\n return new RenderResult(value, {\n metadata: {},\n contentType,\n })\n }\n\n private readonly waitUntil?: Promise\n\n constructor(\n response: RenderResultResponse,\n { contentType, waitUntil, metadata }: RenderResultOptions\n ) {\n this.response = response\n this.contentType = contentType\n this.metadata = metadata\n this.waitUntil = waitUntil\n }\n\n public assignMetadata(metadata: Metadata) {\n Object.assign(this.metadata, metadata)\n }\n\n /**\n * Returns true if the response is null. It can be null if the response was\n * not found or was already sent.\n */\n public get isNull(): boolean {\n return this.response === null\n }\n\n /**\n * Returns false if the response is a string. It can be a string if the page\n * was prerendered. If it's not, then it was generated dynamically.\n */\n public get isDynamic(): boolean {\n return typeof this.response !== 'string'\n }\n\n /**\n * Returns the response if it is a string. If the page was dynamic, this will\n * return a promise if the `stream` option is true, or it will throw an error.\n *\n * @param stream Whether or not to return a promise if the response is dynamic\n * @returns The response as a string\n */\n public toUnchunkedString(stream?: false): string\n public toUnchunkedString(stream: true): Promise\n public toUnchunkedString(stream = false): Promise | string {\n if (this.response === null) {\n // If the response is null, return an empty string. This behavior is\n // intentional as we're now providing the `RenderResult.EMPTY` value.\n return ''\n }\n\n if (typeof this.response !== 'string') {\n if (!stream) {\n throw new InvariantError(\n 'dynamic responses cannot be unchunked. This is a bug in Next.js'\n )\n }\n\n return streamToString(this.readable)\n }\n\n return this.response\n }\n\n /**\n * Returns a readable stream of the response.\n */\n private get readable(): ReadableStream {\n if (this.response === null) {\n // If the response is null, return an empty stream. This behavior is\n // intentional as we're now providing the `RenderResult.EMPTY` value.\n return new ReadableStream({\n start(controller) {\n controller.close()\n },\n })\n }\n\n if (typeof this.response === 'string') {\n return streamFromString(this.response)\n }\n\n if (Buffer.isBuffer(this.response)) {\n return streamFromBuffer(this.response)\n }\n\n // If the response is an array of streams, then chain them together.\n if (Array.isArray(this.response)) {\n return chainStreams(...this.response)\n }\n\n if (isNodeReadable(this.response)) {\n if (process.env.NEXT_RUNTIME === 'edge') {\n throw new InvariantError(\n 'Node.js Readable cannot be converted to a web stream in the edge runtime'\n )\n } else {\n let Readable: typeof import('node:stream').Readable\n if (process.env.TURBOPACK) {\n Readable = (require('node:stream') as typeof import('node:stream'))\n .Readable\n } else {\n Readable = (\n __non_webpack_require__(\n 'node:stream'\n ) as typeof import('node:stream')\n ).Readable\n }\n return Readable.toWeb(this.response) as ReadableStream\n }\n }\n\n return this.response\n }\n\n /**\n * Coerces the response to an array of streams. This will convert the response\n * to an array of streams if it is not already one.\n *\n * @returns An array of streams\n */\n private coerce(): ReadableStream[] {\n if (this.response === null) {\n // If the response is null, return an empty stream. This behavior is\n // intentional as we're now providing the `RenderResult.EMPTY` value.\n return []\n }\n\n if (typeof this.response === 'string') {\n return [streamFromString(this.response)]\n } else if (Array.isArray(this.response)) {\n return this.response\n } else if (Buffer.isBuffer(this.response)) {\n return [streamFromBuffer(this.response)]\n } else if (isNodeReadable(this.response)) {\n if (process.env.NEXT_RUNTIME === 'edge') {\n throw new InvariantError(\n 'Node.js Readable cannot be converted to a web stream in the edge runtime'\n )\n } else {\n let Readable: typeof import('node:stream').Readable\n if (process.env.TURBOPACK) {\n Readable = (require('node:stream') as typeof import('node:stream'))\n .Readable\n } else {\n Readable = (\n __non_webpack_require__(\n 'node:stream'\n ) as typeof import('node:stream')\n ).Readable\n }\n return [Readable.toWeb(this.response) as ReadableStream]\n }\n } else {\n return [this.response]\n }\n }\n\n /**\n * Pipes the response through a transform stream. This converts the response\n * to a single readable stream (chaining if needed) and pipes it through the\n * provided transform.\n *\n * @param transform The transform stream to pipe through\n */\n public pipeThrough(transform: TransformStream): void {\n this.response = this.readable.pipeThrough(transform)\n }\n\n /**\n * Unshifts a new stream to the response. This will convert the response to an\n * array of streams if it is not already one and will add the new stream to\n * the start of the array. When this response is piped, all of the streams\n * will be piped one after the other.\n *\n * @param readable The new stream to unshift\n */\n public unshift(readable: ReadableStream): void {\n // Coerce the response to an array of streams.\n this.response = this.coerce()\n\n // Add the new stream to the start of the array.\n this.response.unshift(readable)\n }\n\n /**\n * Chains a new stream to the response. This will convert the response to an\n * array of streams if it is not already one and will add the new stream to\n * the end. When this response is piped, all of the streams will be piped\n * one after the other.\n *\n * @param readable The new stream to chain\n */\n public push(readable: ReadableStream): void {\n // Coerce the response to an array of streams.\n this.response = this.coerce()\n\n // Add the new stream to the end of the array.\n this.response.push(readable)\n }\n\n /**\n * Pipes the response to a writable stream. This will close/cancel the\n * writable stream if an error is encountered. If this doesn't throw, then\n * the writable stream will be closed or aborted.\n *\n * @param writable Writable stream to pipe the response to\n */\n public async pipeTo(writable: WritableStream): Promise {\n try {\n await this.readable.pipeTo(writable, {\n // We want to close the writable stream ourselves so that we can wait\n // for the waitUntil promise to resolve before closing it. If an error\n // is encountered, we'll abort the writable stream if we swallowed the\n // error.\n preventClose: true,\n })\n\n // If there is a waitUntil promise, wait for it to resolve before\n // closing the writable stream.\n if (this.waitUntil) await this.waitUntil\n\n // Close the writable stream.\n await writable.close()\n } catch (err) {\n // If this is an abort error, we should abort the writable stream (as we\n // took ownership of it when we started piping). We don't need to re-throw\n // because we handled the error.\n if (isAbortError(err)) {\n // Abort the writable stream if an error is encountered.\n await writable.abort(err)\n\n return\n }\n\n // We're not aborting the writer here as when this method throws it's not\n // clear as to how so the caller should assume it's their responsibility\n // to clean up the writer.\n throw err\n }\n }\n\n /**\n * Pipes the response to a node response. This will close/cancel the node\n * response if an error is encountered.\n *\n * @param res\n */\n public async pipeToNodeResponse(res: ServerResponse) {\n if (\n this.response !== null &&\n typeof this.response !== 'string' &&\n !Buffer.isBuffer(this.response) &&\n !Array.isArray(this.response) &&\n isNodeReadable(this.response)\n ) {\n await pipeNodeReadableToNodeResponse(\n this.response,\n res,\n this.waitUntil,\n this.metadata.clientComponentLoadTracker\n )\n return\n }\n await pipeToNodeResponse(\n this.readable,\n res,\n this.waitUntil,\n this.metadata.clientComponentLoadTracker\n )\n }\n}\n"],"names":["chainStreams","streamFromBuffer","streamFromString","streamToString","isAbortError","pipeToNodeResponse","pipeNodeReadableToNodeResponse","InvariantError","isNodeReadable","value","pipe","on","ReadableStream","RenderResult","EMPTY","metadata","contentType","fromStatic","constructor","response","waitUntil","assignMetadata","Object","assign","isNull","isDynamic","toUnchunkedString","stream","readable","start","controller","close","Buffer","isBuffer","Array","isArray","process","env","NEXT_RUNTIME","Readable","TURBOPACK","require","__non_webpack_require__","toWeb","coerce","pipeThrough","transform","unshift","push","pipeTo","writable","preventClose","err","abort","res","clientComponentLoadTracker"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 7714, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/request-meta.ts"],"sourcesContent":["import type { IncomingMessage, ServerResponse } from 'http'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { UrlWithParsedQuery } from 'url'\nimport type { BaseNextRequest } from './base-http'\nimport type { CloneableBody } from './body-streams'\nimport type { RouteMatch } from './route-matches/route-match'\nimport type { NEXT_RSC_UNION_QUERY } from '../client/components/app-router-headers'\nimport type {\n ResponseCacheEntry,\n ServerComponentsHmrCache,\n} from './response-cache'\nimport type { PagesDevOverlayBridgeType } from '../next-devtools/userspace/pages/pages-dev-overlay-setup'\nimport type { OpaqueFallbackRouteParams } from './request/fallback-params'\nimport type { IncrementalCache } from './lib/incremental-cache'\nimport type { RevalidateFn } from './lib/router-utils/router-server-context'\nimport type { NextRequest } from './web/exports'\n\n// FIXME: (wyattjoh) this is a temporary solution to allow us to pass data between bundled modules\nexport const NEXT_REQUEST_META = Symbol.for('NextInternalRequestMeta')\n\nexport type NextIncomingMessage = (\n | BaseNextRequest\n | IncomingMessage\n | NextRequest\n) & {\n [NEXT_REQUEST_META]?: RequestMeta\n}\n\n/**\n * The callback function to call when a response cache entry was generated or\n * looked up in the cache. When it returns true, the server assumes that the\n * handler has already responded to the request and will not do so itself.\n */\nexport type OnCacheEntryHandler = (\n /**\n * The response cache entry that was generated or looked up in the cache.\n */\n cacheEntry: ResponseCacheEntry,\n\n /**\n * The request metadata.\n */\n requestMeta: {\n /**\n * The URL that was used to make the request.\n */\n url: string | undefined\n }\n) => Promise | boolean | void\n\nexport interface RequestMeta {\n /**\n * The query that was used to make the request.\n */\n initQuery?: ParsedUrlQuery\n\n /**\n * The URL that was used to make the request.\n */\n initURL?: string\n\n /**\n * The protocol that was used to make the request.\n */\n initProtocol?: string\n\n /**\n * The body that was read from the request. This is used to allow the body to\n * be read multiple times.\n */\n clonableBody?: CloneableBody\n\n /**\n * True when the request matched a locale domain that was configured in the\n * next.config.js file.\n */\n isLocaleDomain?: boolean\n\n /**\n * True when the request had locale information stripped from the pathname\n * part of the URL.\n */\n didStripLocale?: boolean\n\n /**\n * If the request had its URL rewritten, this is the pathname it was rewritten\n * to (not a full URL, just the pathname).\n */\n rewrittenPathname?: string\n\n /**\n * The cookies that were added by middleware and were added to the response.\n */\n middlewareCookie?: string[]\n\n /**\n * The match on the request for a given route.\n */\n match?: RouteMatch\n\n /**\n * The incremental cache to use for the request.\n */\n incrementalCache?: IncrementalCache\n\n /**\n * The server components HMR cache, only for dev.\n */\n serverComponentsHmrCache?: ServerComponentsHmrCache\n\n /**\n * The hash of the most recent server component change (dev only), set by the\n * router-server from the hot-reloader. Included in `\"use cache\"` cache keys\n * so that cached entries are revalidated after an edit, for every client,\n * regardless of whether it runs the HMR client.\n */\n hmrRefreshHash?: string\n\n /**\n * Equals the segment path that was used for the prefetch RSC request.\n */\n segmentPrefetchRSCRequest?: string\n\n /**\n * True when the request is for the prefetch flight data.\n */\n isPrefetchRSCRequest?: true\n\n /**\n * True when the request is for the flight data.\n */\n isRSCRequest?: true\n\n /**\n * A search param set by the Next.js client when performing RSC requests.\n * Because some CDNs do not vary their cache entries on our custom headers,\n * this search param represents a hash of the header values. For any cached\n * RSC request, we should verify that the hash matches before responding.\n * Otherwise this can lead to cache poisoning.\n * TODO: Consider not using custom request headers at all, and instead encode\n * everything into the search param.\n */\n cacheBustingSearchParam?: string\n\n /**\n * True when the request is for the `/_next/data` route using the pages\n * router.\n */\n isNextDataReq?: true\n\n /**\n * Postponed state to use for resumption. When absent, the request is not a\n * resume request. A non-empty string contains the state to resume, while an\n * empty string represents a resume request without postponed state and\n * signals that the renderer should perform a full dynamic render.\n *\n * There are no guarantees that the page actually postponed, as verifying\n * that would incur an additional cache lookup.\n */\n postponed?: string\n\n /**\n * The action body extracted from a server action request when the postponed\n * state was prepended to the body by the proxy. This allows the action\n * handler to read the action payload without re-reading the consumed stream.\n */\n actionBody?: Buffer\n\n /**\n * If provided, this will be called when a response cache entry was generated\n * or looked up in the cache.\n *\n * @deprecated Use `onCacheEntryV2` instead.\n */\n onCacheEntry?: OnCacheEntryHandler\n\n /**\n * If provided, this will be called when a response cache entry was generated\n * or looked up in the cache.\n */\n onCacheEntryV2?: OnCacheEntryHandler\n\n /**\n * The previous revalidate before rendering 404 page for notFound: true\n */\n notFoundRevalidate?: number | false\n\n /**\n * In development, the original source page that returned a 404.\n */\n developmentNotFoundSourcePage?: string\n\n /**\n * The path we routed to and should be invoked\n */\n invokePath?: string\n\n /**\n * The specific page output we should be matching\n */\n invokeOutput?: string\n\n /**\n * The status we are invoking the request with from routing\n */\n invokeStatus?: number\n\n /**\n * The routing error we are invoking with\n */\n invokeError?: Error\n\n /**\n * The query parsed for the invocation\n */\n invokeQuery?: Record\n\n /**\n * Whether the request is a middleware invocation\n */\n middlewareInvoke?: boolean\n\n /**\n * Whether the request should render the fallback shell or not.\n */\n renderFallbackShell?: boolean\n\n /**\n * Route param keys that were explicitly resolved from partial nxtP*\n * query params during background revalidation. Used by app-page.ts to\n * determine which fallback params should remain deferred vs resolved\n * in intermediate PPR shells.\n */\n resolvedRouteParamKeys?: Set\n\n /**\n * Whether the request is for the custom error page.\n */\n customErrorRender?: true\n\n /**\n * Whether to bubble up the NoFallbackError to the caller when a 404 is\n * returned.\n */\n bubbleNoFallback?: true\n\n /**\n * True when the request had locale information inferred from the default\n * locale.\n */\n localeInferredFromDefault?: true\n\n /**\n * The locale that was inferred or explicitly set for the request.\n */\n locale?: string\n\n /**\n * The default locale that was inferred or explicitly set for the request.\n */\n defaultLocale?: string\n\n /**\n * The relative project dir the server is running in from project root\n */\n relativeProjectDir?: string\n\n /**\n * The dist directory the server is currently using\n */\n distDir?: string\n\n /**\n Optional hostname used by route handlers when constructing absolute URLs.\n hostname: '127.0.0.1',\n */\n hostname?: string\n\n /**\n Optional internal revalidate function to avoid revalidating over the network\n */\n revalidate?: RevalidateFn\n\n /**\n Optional function to render the 404 page for pages router `notFound: true`\n */\n render404?: (\n req: IncomingMessage,\n res: ServerResponse,\n parsedUrl?: UrlWithParsedQuery,\n setHeaders?: boolean\n ) => Promise\n\n /**\n * The query after resolving routes\n */\n query?: ParsedUrlQuery\n\n /**\n * The params after resolving routes\n */\n params?: ParsedUrlQuery\n\n /**\n * ErrorOverlay component to use in development for pages router\n */\n PagesErrorDebug?: PagesDevOverlayBridgeType\n\n /**\n * Whether server is in minimal mode (this will be replaced with more\n * specific flags in future)\n */\n minimalMode?: boolean\n\n /**\n * Staged renders defer these route params until after the static stage. They\n * keep their concrete request values instead of replacing them with\n * placeholders. Dev static-shell validation uses the same set for the\n * selected shell.\n *\n * For `/t2/items/b2` with selected shell `/t2/items/[bottom]`, this map\n * contains only `bottom`:\n * - A layout's `params` containing only `top` can resolve statically.\n * - A page's `params` containing `bottom` waits until after the static stage.\n *\n * A set recorded in postponed state overrides this metadata on a resume,\n * including an explicitly empty set.\n */\n stagedFallbackParams?: OpaqueFallbackRouteParams | null\n\n /**\n * Dev static-shell debug renders use these params to prerender the matched\n * source shell. The Instant Navigation Testing API uses this path too. The\n * prerender substitutes opaque placeholders for these params rather than\n * using their request values.\n *\n * Suppose `generateStaticParams` returns `[{ top: 't1' }]` for\n * `/[top]/items/[bottom]`. A request for `/t2/items/b2` has:\n * - Source `/[top]/items/[bottom]`: `top` and `bottom` are unresolved.\n * - Completed shell `/t2/items/[bottom]`: only `bottom` is unresolved.\n *\n * This map contains the source's `top` and `bottom`. A debug render of that\n * source also uses this map as `stagedFallbackParams`.\n */\n fallbackRouteParams?: OpaqueFallbackRouteParams | null\n\n /** DEV only: parameter matching rejected this request as not found. */\n devParamMatchingRejected?: boolean\n\n /** DEV only: closed parameters, including for successful allowed values. */\n devNotFoundParams?: readonly string[]\n\n /**\n * DEV only: Request timings in process.hrtime.bigint()\n */\n devRequestTimingStart?: bigint\n devRequestTimingMiddlewareStart?: bigint\n devRequestTimingMiddlewareEnd?: bigint\n devRequestTimingInternalsEnd?: bigint\n\n /**\n * DEV only: The duration of getStaticPaths/generateStaticParams in process.hrtime.bigint()\n */\n devGenerateStaticParamsDuration?: bigint\n\n /**\n * DEV only: Server action log info to be logged after the request log\n */\n devServerActionLog?: {\n functionName: string\n args: unknown[]\n location: string\n duration: number\n }\n}\n\n/**\n * Gets the request metadata. If no key is provided, the entire metadata object\n * is returned.\n *\n * @param req the request to get the metadata from\n * @param key the key to get from the metadata (optional)\n * @returns the value for the key or the entire metadata object\n */\nexport function getRequestMeta(\n req: NextIncomingMessage,\n key?: undefined\n): RequestMeta\nexport function getRequestMeta(\n req: NextIncomingMessage,\n key: K\n): RequestMeta[K]\nexport function getRequestMeta(\n req: NextIncomingMessage,\n key?: K\n): RequestMeta | RequestMeta[K] {\n const meta = req[NEXT_REQUEST_META] || {}\n return typeof key === 'string' ? meta[key] : meta\n}\n\n/**\n * Sets the request metadata.\n *\n * @param req the request to set the metadata on\n * @param meta the metadata to set\n * @returns the mutated request metadata\n */\nexport function setRequestMeta(req: NextIncomingMessage, meta: RequestMeta) {\n req[NEXT_REQUEST_META] = meta\n return meta\n}\n\n/**\n * Adds a value to the request metadata.\n *\n * @param request the request to mutate\n * @param key the key to set\n * @param value the value to set\n * @returns the mutated request metadata\n */\nexport function addRequestMeta(\n request: NextIncomingMessage,\n key: K,\n value: RequestMeta[K]\n) {\n const meta = getRequestMeta(request)\n meta[key] = value\n return setRequestMeta(request, meta)\n}\n\n/**\n * Removes a key from the request metadata.\n *\n * @param request the request to mutate\n * @param key the key to remove\n * @returns the mutated request metadata\n */\nexport function removeRequestMeta(\n request: NextIncomingMessage,\n key: K\n) {\n const meta = getRequestMeta(request)\n delete meta[key]\n return setRequestMeta(request, meta)\n}\n\ntype NextQueryMetadata = {\n /**\n * The `_rsc` query parameter used for cache busting to ensure that the RSC\n * requests do not get cached by the browser explicitly.\n */\n [NEXT_RSC_UNION_QUERY]?: string\n}\n\nexport type NextParsedUrlQuery = ParsedUrlQuery & NextQueryMetadata\n\n/**\n * subset of `url.parse` return value\n */\ninterface LegacyUrl {\n auth?: string | null\n hash: string | null\n hostname: string | null\n href: string\n pathname: string | null\n protocol: string | null\n search: string | null\n slashes: boolean | null\n port: string | null\n query: string | null | ParsedUrlQuery\n}\ninterface LegacyUrlWithParsedQuery extends LegacyUrl {\n query: ParsedUrlQuery\n}\n\n// TODO: Remove in favor of WHATWG URLs\nexport interface NextUrlWithParsedQuery extends LegacyUrlWithParsedQuery {\n query: NextParsedUrlQuery\n}\n"],"names":["NEXT_REQUEST_META","Symbol","for","getRequestMeta","req","key","meta","setRequestMeta","addRequestMeta","request","value","removeRequestMeta"],"mappings":"AAiBA,kGAAkG;;;;;;;;;;;;;AAC3F,MAAMA,oBAAoBC,OAAOC,GAAG,CAAC,2BAA0B;AAsX/D,SAASC,eACdC,GAAwB,EACxBC,GAAO;IAEP,MAAMC,OAAOF,GAAG,CAACJ,kBAAkB,IAAI,CAAC;IACxC,OAAO,OAAOK,QAAQ,WAAWC,IAAI,CAACD,IAAI,GAAGC;AAC/C;AASO,SAASC,eAAeH,GAAwB,EAAEE,IAAiB;IACxEF,GAAG,CAACJ,kBAAkB,GAAGM;IACzB,OAAOA;AACT;AAUO,SAASE,eACdC,OAA4B,EAC5BJ,GAAM,EACNK,KAAqB;IAErB,MAAMJ,OAAOH,eAAeM;IAC5BH,IAAI,CAACD,IAAI,GAAGK;IACZ,OAAOH,eAAeE,SAASH;AACjC;AASO,SAASK,kBACdF,OAA4B,EAC5BJ,GAAM;IAEN,MAAMC,OAAOH,eAAeM;IAC5B,OAAOH,IAAI,CAACD,IAAI;IAChB,OAAOE,eAAeE,SAASH;AACjC","ignoreList":[0]}}, + {"offset": {"line": 7750, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/response-cache/index.ts"],"sourcesContent":["import type { ResponseCacheOwner } from '../lib/route-cache-key'\nimport type {\n ResponseCacheResult,\n ResponseGenerator,\n ResponseCacheBase,\n IncrementalResponseCacheEntry,\n IncrementalResponseCache,\n GetIncrementalResponseCacheContext,\n GetIncrementalImageCacheContext,\n} from './types'\nimport { IncrementalCacheKind } from './types'\nimport { InvariantError } from '../../shared/lib/invariant-error'\n\nimport { Batcher } from '../../lib/batcher'\nimport { LRUCache } from '../lib/lru-cache'\nimport { warnOnce } from '../../build/output/log'\nimport { scheduleOnNextTick } from '../../lib/scheduler'\nimport {\n fromResponseCacheEntry,\n routeKindToIncrementalCacheKind,\n toResponseCacheEntry,\n} from './utils'\nimport type { RouteKind } from '../route-kind'\nimport type { PrerenderFailure } from '../render-result'\n\ntype IncrementalResponseCacheResult =\n | IncrementalResponseCacheEntry\n | PrerenderFailure\n | null\n\n/**\n * Parses an environment variable as a positive integer, returning the fallback\n * if the value is missing, not a number, or not positive.\n */\nfunction parsePositiveInt(\n envValue: string | undefined,\n fallback: number\n): number {\n if (!envValue) return fallback\n const parsed = parseInt(envValue, 10)\n return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback\n}\n\n/**\n * Default TTL (in milliseconds) for minimal mode response cache entries.\n * Used for cache hit validation as a fallback for providers that don't\n * send the x-invocation-id header yet.\n *\n * 10 seconds chosen because:\n * - Long enough to dedupe rapid successive requests (e.g., page + data)\n * - Short enough to not serve stale data across unrelated requests\n *\n * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_TTL` environment variable.\n */\nconst DEFAULT_TTL_MS = parsePositiveInt(\n process.env.NEXT_PRIVATE_RESPONSE_CACHE_TTL,\n 10_000\n)\n\n/**\n * Default maximum number of entries in the response cache.\n * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE` environment variable.\n */\nconst DEFAULT_MAX_SIZE = parsePositiveInt(\n process.env.NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE,\n 150\n)\n\n/**\n * Separator used in compound cache keys to join pathname and invocationID.\n * Using null byte (\\0) since it cannot appear in valid URL paths or UUIDs.\n */\nconst KEY_SEPARATOR = '\\0'\n\n/**\n * Sentinel value used for TTL-based cache entries (when invocationID is undefined).\n * Chosen to be a clearly reserved marker for internal cache keys.\n */\nconst TTL_SENTINEL = '__ttl_sentinel__'\n\n/**\n * Entry stored in the LRU cache.\n */\ntype CacheEntry = {\n entry: IncrementalResponseCacheResult\n /**\n * TTL expiration timestamp in milliseconds. Used as a fallback for\n * cache hit validation when providers don't send x-invocation-id.\n * Memory pressure is managed by LRU eviction rather than timers.\n */\n expiresAt: number\n}\n\n/**\n * Creates a compound cache key from pathname and invocationID.\n */\nfunction createCacheKey(\n pathname: string,\n invocationID: string | undefined\n): string {\n return `${pathname}${KEY_SEPARATOR}${invocationID ?? TTL_SENTINEL}`\n}\n\n/**\n * Extracts the invocationID from a compound cache key.\n * Returns undefined if the key used TTL_SENTINEL.\n */\nfunction extractInvocationID(compoundKey: string): string | undefined {\n const separatorIndex = compoundKey.lastIndexOf(KEY_SEPARATOR)\n if (separatorIndex === -1) return undefined\n\n const invocationID = compoundKey.slice(separatorIndex + 1)\n return invocationID === TTL_SENTINEL ? undefined : invocationID\n}\n\nexport * from './types'\n\nexport default class ResponseCache implements ResponseCacheBase {\n // The get and revalidate batchers share pending renders across invocation\n // IDs, including failures. Invocation IDs scope reuse of completed results in\n // the LRU below.\n private readonly getBatcher = Batcher.create<\n { key: string; isOnDemandRevalidate: boolean },\n IncrementalResponseCacheResult,\n string\n >({\n // Ensure on-demand revalidate doesn't block normal requests, it should be\n // safe to run an on-demand revalidate for the same key as a normal request.\n cacheKeyFn: ({ key, isOnDemandRevalidate }) =>\n `${key}-${isOnDemandRevalidate ? '1' : '0'}`,\n // We wait to do any async work until after we've added our promise to\n // `pendingResponses` to ensure that any any other calls will reuse the\n // same promise until we've fully finished our work.\n schedulerFn: scheduleOnNextTick,\n })\n\n private readonly revalidateBatcher = Batcher.create<\n string,\n IncrementalResponseCacheResult\n >({\n // We wait to do any async work until after we've added our promise to\n // `pendingResponses` to ensure that any any other calls will reuse the\n // same promise until we've fully finished our work.\n schedulerFn: scheduleOnNextTick,\n })\n\n /**\n * LRU cache for minimal mode using compound keys (pathname + invocationID).\n * This allows multiple invocations to cache the same pathname without\n * overwriting each other's entries.\n */\n private readonly cache: LRUCache\n\n /**\n * Set of invocation IDs that have had cache entries evicted.\n * Used to detect when the cache size may be too small.\n * Bounded to prevent memory growth.\n */\n private readonly evictedInvocationIDs: Set = new Set()\n\n /**\n * The configured max size, stored for logging.\n */\n private readonly maxSize: number\n\n /**\n * The configured TTL for cache entries in milliseconds.\n */\n private readonly ttl: number\n\n // we don't use minimal_mode name here as this.minimal_mode is\n // statically replace for server runtimes but we need it to\n // be dynamic here\n private minimal_mode?: boolean\n\n private readonly route: ResponseCacheOwner | 'image'\n\n constructor({\n minimalMode,\n route,\n maxSize = DEFAULT_MAX_SIZE,\n ttl = DEFAULT_TTL_MS,\n }: {\n minimalMode: boolean\n route: ResponseCacheOwner | 'image'\n maxSize?: number\n ttl?: number\n }) {\n if (!route) {\n throw new InvariantError('Response cache requires a source route')\n }\n this.route = route\n this.minimal_mode = minimalMode\n this.maxSize = maxSize\n this.ttl = ttl\n\n // Create the LRU cache with eviction tracking\n this.cache = new LRUCache(maxSize, undefined, (compoundKey) => {\n const invocationID = extractInvocationID(compoundKey)\n if (invocationID) {\n // Bound to 100 entries to prevent unbounded memory growth.\n // FIFO eviction is acceptable here because:\n // 1. Invocations are short-lived (single request lifecycle), so older\n // invocations are unlikely to still be active after 100 newer ones\n // 2. This warning mechanism is best-effort for developer guidance—\n // missing occasional eviction warnings doesn't affect correctness\n // 3. If a long-running invocation is somehow evicted and then has\n // another cache entry evicted, it will simply be re-added\n if (this.evictedInvocationIDs.size >= 100) {\n const first = this.evictedInvocationIDs.values().next().value\n if (first) this.evictedInvocationIDs.delete(first)\n }\n this.evictedInvocationIDs.add(invocationID)\n }\n })\n }\n\n /**\n * Gets the response cache entry for the given key.\n *\n * @param key - The key to get the response cache entry for.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param context - The context for the get request.\n * @returns The response cache entry.\n */\n public async get(\n key: string | null,\n responseGenerator: ResponseGenerator,\n context: {\n routeKind: RouteKind\n isOnDemandRevalidate?: boolean\n isPrefetch?: boolean\n incrementalCache: IncrementalResponseCache\n isRoutePPREnabled?: boolean\n isFallback?: boolean\n waitUntil?: (prom: Promise) => void\n\n /**\n * The invocation ID from the infrastructure. Used to scope the in-memory\n * cache to a single revalidation request in minimal mode. Concurrent\n * invocations can still share a pending render through the batchers.\n */\n invocationID?: string\n }\n ): Promise {\n // If there is no key for the cache, we can't possibly look this up in the\n // cache so just return the result of the response generator.\n if (!key) {\n return responseGenerator({\n hasResolved: false,\n previousCacheEntry: null,\n })\n }\n\n // Check minimal mode cache before doing any other work.\n if (this.minimal_mode) {\n const cacheKey = createCacheKey(key, context.invocationID)\n const cachedItem = this.cache.get(cacheKey)\n\n if (cachedItem) {\n // With invocationID: exact match found - always a hit\n // With TTL mode: must check expiration\n if (context.invocationID !== undefined) {\n return cachedItem.entry !== null && 'error' in cachedItem.entry\n ? cachedItem.entry\n : toResponseCacheEntry(cachedItem.entry)\n }\n\n // TTL entries can be reused by unrelated requests. Exclude failures so\n // those requests can retry instead of receiving a cached error.\n const now = Date.now()\n if (\n (cachedItem.entry === null || !('error' in cachedItem.entry)) &&\n cachedItem.expiresAt > now\n ) {\n return toResponseCacheEntry(cachedItem.entry)\n }\n\n // TTL expired - clean up\n this.cache.remove(cacheKey)\n }\n\n // Warn if this invocation had entries evicted - indicates cache may be too small.\n if (\n context.invocationID &&\n this.evictedInvocationIDs.has(context.invocationID)\n ) {\n warnOnce(\n `Response cache entry was evicted for invocation ${context.invocationID}. ` +\n `Consider increasing NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE (current: ${this.maxSize}).`\n )\n }\n }\n\n const {\n incrementalCache,\n isOnDemandRevalidate = false,\n isFallback = false,\n isRoutePPREnabled = false,\n isPrefetch = false,\n waitUntil,\n invocationID,\n } = context\n\n const response = await this.getBatcher.batch(\n { key, isOnDemandRevalidate },\n ({ resolve }) => {\n const promise = this.handleGet(\n key,\n responseGenerator,\n {\n incrementalCache,\n isOnDemandRevalidate,\n isFallback,\n isRoutePPREnabled,\n isPrefetch,\n invocationID,\n },\n resolve\n )\n\n // We need to ensure background revalidates are passed to waitUntil.\n if (waitUntil) waitUntil(promise)\n\n return promise\n }\n )\n\n // In minimal mode, each caller with an invocation ID stores the shared\n // failure under its own ID for reuse by related requests. Callers without\n // an invocation ID receive the failure but do not store it in the LRU.\n if (\n this.minimal_mode &&\n response &&\n ('error' in response ? invocationID !== undefined : response.cacheControl)\n ) {\n const cacheKey = createCacheKey(key, invocationID)\n this.cache.set(cacheKey, {\n entry: response,\n expiresAt: Date.now() + this.ttl,\n })\n }\n\n return response !== null && 'error' in response\n ? response\n : toResponseCacheEntry(response)\n }\n\n /**\n * Handles the get request for the response cache.\n *\n * @param key - The key to get the response cache entry for.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param context - The context for the get request.\n * @param resolve - The resolve function to use to resolve the response cache entry.\n * @returns The response cache entry.\n */\n private async handleGet(\n key: string,\n responseGenerator: ResponseGenerator,\n context: {\n incrementalCache: IncrementalResponseCache\n isOnDemandRevalidate: boolean\n isFallback: boolean\n isRoutePPREnabled: boolean\n isPrefetch: boolean\n invocationID: string | undefined\n },\n resolve: (value: IncrementalResponseCacheResult) => void\n ): Promise {\n let previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null =\n null\n let resolved = false\n\n try {\n // Get the previous cache entry if not in minimal mode\n previousIncrementalCacheEntry = !this.minimal_mode\n ? await context.incrementalCache.get(\n key,\n this.getCacheContext(context.isRoutePPREnabled, context.isFallback)\n )\n : null\n\n // `isStale === -1` signals that the entry is past its `expire` (either\n // via an expired tag or, with `cacheLife({ expire })`, past the route's\n // expire time in the prerender manifest). In that case we must NOT\n // early-resolve with the stale value — instead we fall through to a\n // blocking revalidation so the response returned to the user is fresh.\n if (\n previousIncrementalCacheEntry &&\n !context.isOnDemandRevalidate &&\n previousIncrementalCacheEntry.isStale !== -1\n ) {\n resolve(previousIncrementalCacheEntry)\n resolved = true\n\n if (!previousIncrementalCacheEntry.isStale || context.isPrefetch) {\n // The cached value is still valid, so we don't need to update it yet.\n return previousIncrementalCacheEntry\n }\n }\n\n // Revalidate the cache entry.\n //\n // A prefetch request that missed must run its own response generator\n // rather than joining an in-flight revalidation through the batcher. A\n // background revalidation may be regenerating the concrete (non-fallback)\n // entry for this route — e.g. an ISR fallback-shell upgrade scheduled by\n // an earlier prefetch sub-request. Joining it would serve that concrete\n // result to the prefetch instead of the fallback shell, and which segment\n // wins would depend purely on request timing. Running the generator\n // directly lets every prefetch segment take the same fallback-shell path,\n // independent of any concurrent background upgrade.\n const incrementalResponseCacheEntry =\n context.isPrefetch && previousIncrementalCacheEntry === null\n ? await this.handleRevalidate(\n key,\n context.incrementalCache,\n context.isRoutePPREnabled,\n context.isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n resolved\n )\n : await this.revalidate(\n key,\n context.incrementalCache,\n context.isRoutePPREnabled,\n context.isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n resolved\n )\n\n if (\n incrementalResponseCacheEntry !== null &&\n 'error' in incrementalResponseCacheEntry &&\n resolved\n ) {\n // The caller already received the stale entry. Report the background\n // failure here, as the catch below does for a thrown error.\n console.error(incrementalResponseCacheEntry.error)\n return null\n }\n\n // Handle null response\n if (!incrementalResponseCacheEntry) {\n // Remove the cache item if it was set so we don't use it again.\n if (this.minimal_mode) {\n const cacheKey = createCacheKey(key, context.invocationID)\n this.cache.remove(cacheKey)\n }\n return null\n }\n\n // Resolve for on-demand revalidation or if not already resolved\n if (context.isOnDemandRevalidate && !resolved) {\n return incrementalResponseCacheEntry\n }\n\n return incrementalResponseCacheEntry\n } catch (err) {\n // If we've already resolved the cache entry, we can't reject as we\n // already resolved the cache entry so log the error here.\n if (resolved) {\n console.error(err)\n return null\n }\n\n throw err\n }\n }\n\n /**\n * Revalidates the cache entry for the given key.\n *\n * @param key - The key to revalidate the cache entry for.\n * @param incrementalCache - The incremental cache to use to revalidate the cache entry.\n * @param isRoutePPREnabled - Whether the route is PPR enabled.\n * @param isFallback - Whether the route is a fallback.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param previousIncrementalCacheEntry - The previous cache entry to use to revalidate the cache entry.\n * @param hasResolved - Whether the response has been resolved.\n * @param waitUntil - Optional function to register background work.\n * @param invocationID - The invocation ID for cache key scoping.\n * @returns The revalidated cache entry.\n */\n public async revalidate(\n key: string,\n incrementalCache: IncrementalResponseCache,\n isRoutePPREnabled: boolean,\n isFallback: boolean,\n responseGenerator: ResponseGenerator,\n previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null,\n hasResolved: boolean,\n waitUntil?: (prom: Promise) => void\n ) {\n return this.revalidateBatcher.batch(key, () => {\n const promise = this.handleRevalidate(\n key,\n incrementalCache,\n isRoutePPREnabled,\n isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n hasResolved\n )\n\n // We need to ensure background revalidates are passed to waitUntil.\n if (waitUntil) waitUntil(promise)\n\n return promise\n })\n }\n\n private async handleRevalidate(\n key: string,\n incrementalCache: IncrementalResponseCache,\n isRoutePPREnabled: boolean,\n isFallback: boolean,\n responseGenerator: ResponseGenerator,\n previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null,\n hasResolved: boolean\n ): Promise {\n let failure: PrerenderFailure\n try {\n // Generate the response cache entry using the response generator.\n const responseCacheEntry = await responseGenerator({\n hasResolved,\n previousCacheEntry: previousIncrementalCacheEntry,\n isRevalidating: true,\n })\n if (!responseCacheEntry) {\n return null\n }\n\n if ('error' in responseCacheEntry) {\n failure = responseCacheEntry\n } else {\n // Convert the response cache entry to an incremental response cache entry.\n const incrementalResponseCacheEntry = await fromResponseCacheEntry({\n ...responseCacheEntry,\n isMiss: !previousIncrementalCacheEntry,\n })\n\n // We want to persist the result only if it has a cache control value\n // defined. The minimal mode LRU write is handled in get() so that every\n // caller, including batched invocations, populates the cache.\n if (incrementalResponseCacheEntry.cacheControl && !this.minimal_mode) {\n await incrementalCache.set(key, incrementalResponseCacheEntry.value, {\n ...this.getCacheContext(isRoutePPREnabled, isFallback),\n cacheControl: incrementalResponseCacheEntry.cacheControl,\n })\n }\n\n return incrementalResponseCacheEntry\n }\n } catch (err) {\n await this.retainPreviousCacheEntry(\n key,\n incrementalCache,\n isRoutePPREnabled,\n isFallback,\n previousIncrementalCacheEntry\n )\n throw err\n }\n\n await this.retainPreviousCacheEntry(\n key,\n incrementalCache,\n isRoutePPREnabled,\n isFallback,\n previousIncrementalCacheEntry\n )\n return failure\n }\n\n // Retain the previous successful value and delay retries after revalidation\n // fails.\n private async retainPreviousCacheEntry(\n key: string,\n incrementalCache: IncrementalResponseCache,\n isRoutePPREnabled: boolean,\n isFallback: boolean,\n previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null\n ): Promise {\n if (previousIncrementalCacheEntry?.cacheControl) {\n const revalidate = Math.min(\n Math.max(previousIncrementalCacheEntry.cacheControl.revalidate || 3, 3),\n 30\n )\n const expire =\n previousIncrementalCacheEntry.cacheControl.expire === undefined\n ? undefined\n : Math.max(\n revalidate + 3,\n previousIncrementalCacheEntry.cacheControl.expire\n )\n\n await incrementalCache.set(key, previousIncrementalCacheEntry.value, {\n ...this.getCacheContext(isRoutePPREnabled, isFallback),\n cacheControl: { revalidate: revalidate, expire: expire },\n })\n }\n }\n\n private getCacheContext(\n isRoutePPREnabled: boolean,\n isFallback: boolean\n ): GetIncrementalResponseCacheContext | GetIncrementalImageCacheContext {\n if (this.route === 'image') {\n return { kind: IncrementalCacheKind.IMAGE, isFallback: false }\n }\n const kind = routeKindToIncrementalCacheKind(this.route.kind)\n if (kind === IncrementalCacheKind.IMAGE) {\n throw new InvariantError('Images must use the image response cache')\n }\n return { route: this.route, kind, isRoutePPREnabled, isFallback }\n }\n}\n"],"names":["IncrementalCacheKind","InvariantError","Batcher","LRUCache","warnOnce","scheduleOnNextTick","fromResponseCacheEntry","routeKindToIncrementalCacheKind","toResponseCacheEntry","parsePositiveInt","envValue","fallback","parsed","parseInt","Number","isFinite","DEFAULT_TTL_MS","process","env","NEXT_PRIVATE_RESPONSE_CACHE_TTL","DEFAULT_MAX_SIZE","NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE","KEY_SEPARATOR","TTL_SENTINEL","createCacheKey","pathname","invocationID","extractInvocationID","compoundKey","separatorIndex","lastIndexOf","undefined","slice","ResponseCache","constructor","minimalMode","route","maxSize","ttl","getBatcher","create","cacheKeyFn","key","isOnDemandRevalidate","schedulerFn","revalidateBatcher","evictedInvocationIDs","Set","minimal_mode","cache","size","first","values","next","value","delete","add","get","responseGenerator","context","hasResolved","previousCacheEntry","cacheKey","cachedItem","entry","now","Date","expiresAt","remove","has","incrementalCache","isFallback","isRoutePPREnabled","isPrefetch","waitUntil","response","batch","resolve","promise","handleGet","cacheControl","set","previousIncrementalCacheEntry","resolved","getCacheContext","isStale","incrementalResponseCacheEntry","handleRevalidate","revalidate","console","error","err","failure","responseCacheEntry","isRevalidating","isMiss","retainPreviousCacheEntry","Math","min","max","expire","kind","IMAGE"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 8101, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/response-cache/types.ts"],"sourcesContent":["import type { ResponseCacheOwner } from '../lib/route-cache-key'\nimport type { OutgoingHttpHeaders } from 'http'\nimport type RenderResult from '../render-result'\nimport type { CacheControl, Revalidate } from '../lib/cache-control'\nimport type { RouteKind } from '../route-kind'\nimport type { PrerenderFailure } from '../render-result'\n\nexport interface ResponseCacheBase {\n get(\n key: string | null,\n responseGenerator: ResponseGenerator,\n context: {\n isOnDemandRevalidate?: boolean\n isPrefetch?: boolean\n incrementalCache: IncrementalCache\n /**\n * This is a hint to the cache to help it determine what kind of route\n * this is so it knows where to look up the cache entry from. If not\n * provided it will test the filesystem to check.\n */\n routeKind: RouteKind\n\n /**\n * True if this is a fallback request.\n */\n isFallback?: boolean\n\n /**\n * True if the route is enabled for PPR.\n */\n isRoutePPREnabled?: boolean\n }\n ): Promise\n}\n\n// The server components HMR cache might store other data as well in the future,\n// at which point this should be refactored to a discriminated union type.\nexport interface ServerComponentsHmrCache {\n get(key: string): CachedFetchData | undefined\n set(key: string, data: CachedFetchData): void\n}\n\nexport type CachedFetchData = {\n headers: Record\n body: string\n url: string\n status?: number\n}\n\nexport const enum CachedRouteKind {\n APP_PAGE = 'APP_PAGE',\n APP_ROUTE = 'APP_ROUTE',\n PAGES = 'PAGES',\n FETCH = 'FETCH',\n REDIRECT = 'REDIRECT',\n IMAGE = 'IMAGE',\n}\n\nexport interface CachedFetchValue {\n kind: CachedRouteKind.FETCH\n data: CachedFetchData\n // tags are only present with file-system-cache\n // fetch cache stores tags outside of cache entry\n tags?: string[]\n revalidate: number\n}\n\nexport interface CachedRedirectValue {\n kind: CachedRouteKind.REDIRECT\n props: Object\n}\n\nexport interface CachedAppPageValue {\n kind: CachedRouteKind.APP_PAGE\n // this needs to be a RenderResult so since renderResponse\n // expects that type instead of a string\n html: RenderResult\n rscData: Buffer | undefined\n status: number | undefined\n postponed: string | undefined\n headers: OutgoingHttpHeaders | undefined\n segmentData: Map | undefined\n}\n\nexport interface CachedPageValue {\n kind: CachedRouteKind.PAGES\n // this needs to be a RenderResult so since renderResponse\n // expects that type instead of a string\n html: RenderResult\n pageData: Object\n status: number | undefined\n headers: OutgoingHttpHeaders | undefined\n}\n\nexport interface CachedRouteValue {\n kind: CachedRouteKind.APP_ROUTE\n // this needs to be a RenderResult so since renderResponse\n // expects that type instead of a string\n body: Buffer\n status: number\n headers: OutgoingHttpHeaders\n}\n\nexport interface CachedImageValue {\n kind: CachedRouteKind.IMAGE\n etag: string\n upstreamEtag: string\n buffer: Buffer\n extension: string\n revalidate?: number\n isMiss?: boolean\n isStale?: boolean\n}\n\nexport interface IncrementalCachedAppPageValue {\n kind: CachedRouteKind.APP_PAGE\n // this needs to be a string since the cache expects to store\n // the string value\n html: string\n rscData: Buffer | undefined\n headers: OutgoingHttpHeaders | undefined\n postponed: string | undefined\n status: number | undefined\n segmentData: Map | undefined\n}\n\nexport interface IncrementalCachedPageValue {\n kind: CachedRouteKind.PAGES\n // this needs to be a string since the cache expects to store\n // the string value\n html: string\n pageData: Object\n headers: OutgoingHttpHeaders | undefined\n status: number | undefined\n}\n\nexport interface IncrementalResponseCacheEntry {\n cacheControl?: CacheControl\n /**\n * timestamp in milliseconds to revalidate after\n */\n revalidateAfter?: Revalidate\n /**\n * `-1` here dictates a blocking revalidate should be used\n */\n isStale?: boolean | -1\n isMiss?: boolean\n isFallback?: boolean\n value: Exclude | null\n}\n\nexport interface IncrementalFetchCacheEntry {\n /**\n * `-1` here dictates a blocking revalidate should be used\n */\n isStale?: boolean | -1\n value: CachedFetchValue\n}\n\nexport type IncrementalCacheEntry =\n | IncrementalResponseCacheEntry\n | IncrementalFetchCacheEntry\n\nexport type IncrementalCacheValue =\n | CachedRedirectValue\n | IncrementalCachedPageValue\n | IncrementalCachedAppPageValue\n | CachedImageValue\n | CachedFetchValue\n | CachedRouteValue\n\nexport type ResponseCacheValue =\n | CachedRedirectValue\n | CachedPageValue\n | CachedAppPageValue\n | CachedImageValue\n | CachedRouteValue\n\nexport type ResponseCacheEntry = {\n cacheControl?: CacheControl\n value: ResponseCacheValue | null\n isStale?: boolean | -1\n isMiss?: boolean\n isFallback?: boolean\n}\n\nexport type ResponseCacheResult = ResponseCacheEntry | PrerenderFailure | null\n\n/**\n * @param hasResolved whether the responseGenerator has resolved it's promise\n * @param previousCacheEntry the previous cache entry if it exists or the current\n */\nexport type ResponseGenerator = (state: {\n hasResolved: boolean\n previousCacheEntry?: IncrementalResponseCacheEntry | null\n isRevalidating?: boolean\n span?: any\n\n /**\n * When true, this indicates that the response generator is being called in a\n * context where the response must be generated statically.\n *\n * CRITICAL: This should only currently be used when revalidating due to a\n * dynamic RSC request.\n */\n forceStaticRender?: boolean\n}) => Promise\n\nexport const enum IncrementalCacheKind {\n APP_PAGE = 'APP_PAGE',\n APP_ROUTE = 'APP_ROUTE',\n PAGES = 'PAGES',\n FETCH = 'FETCH',\n IMAGE = 'IMAGE',\n}\n\nexport interface GetIncrementalFetchCacheContext {\n kind: IncrementalCacheKind.FETCH\n revalidate?: Revalidate\n fetchUrl?: string\n fetchIdx?: number\n tags?: string[]\n softTags?: string[]\n}\n\nexport interface GetIncrementalResponseCacheHandlerContext {\n kind: Exclude<\n IncrementalCacheKind,\n IncrementalCacheKind.FETCH | IncrementalCacheKind.IMAGE\n >\n\n /**\n * True if the route is enabled for PPR.\n */\n isRoutePPREnabled?: boolean\n\n /**\n * True if this is a fallback request.\n */\n isFallback: boolean\n}\n\nexport interface GetIncrementalResponseCacheContext\n extends GetIncrementalResponseCacheHandlerContext {\n /** Internal ownership used before invoking the storage handler. */\n route: ResponseCacheOwner\n}\n\nexport interface SetIncrementalFetchCacheContext {\n fetchCache: true\n fetchUrl?: string\n fetchIdx?: number\n tags?: string[]\n isImplicitBuildTimeCache?: boolean\n}\n\nexport interface SetIncrementalResponseCacheHandlerContext {\n fetchCache?: false\n cacheControl?: CacheControl\n\n /**\n * True if the route is enabled for PPR.\n */\n isRoutePPREnabled?: boolean\n\n /**\n * True if this is a fallback request.\n */\n isFallback?: boolean\n}\n\nexport interface SetIncrementalResponseCacheContext\n extends SetIncrementalResponseCacheHandlerContext {\n /** Internal ownership used before invoking the storage handler. */\n route: ResponseCacheOwner\n}\n\nexport interface GetIncrementalImageCacheContext {\n kind: IncrementalCacheKind.IMAGE\n route?: never\n isFallback: false\n isRoutePPREnabled?: false\n}\n\nexport interface SetIncrementalImageCacheContext {\n kind: IncrementalCacheKind.IMAGE\n route?: never\n fetchCache?: false\n cacheControl?: CacheControl\n}\n\nexport interface IncrementalResponseCache {\n get(\n cacheKey: string,\n ctx: GetIncrementalResponseCacheContext | GetIncrementalImageCacheContext\n ): Promise\n set(\n key: string,\n data: Exclude | null,\n ctx: SetIncrementalResponseCacheContext | SetIncrementalImageCacheContext\n ): Promise\n}\n\nexport interface IncrementalCache extends IncrementalResponseCache {\n get(\n cacheKey: string,\n ctx: GetIncrementalFetchCacheContext\n ): Promise\n get(\n cacheKey: string,\n ctx: GetIncrementalResponseCacheContext | GetIncrementalImageCacheContext\n ): Promise\n set(\n key: string,\n data: CachedFetchValue | null,\n ctx: SetIncrementalFetchCacheContext\n ): Promise\n set(\n key: string,\n data: Exclude | null,\n ctx: SetIncrementalResponseCacheContext | SetIncrementalImageCacheContext\n ): Promise\n revalidateTag(\n tags: string | string[],\n durations?: { expire?: number }\n ): Promise\n}\n"],"names":["CachedRouteKind","IncrementalCacheKind"],"mappings":";;;;;;AAiDO,IAAWA,kBAAAA,WAAAA,GAAAA,SAAAA,eAAAA;;;;;;;WAAAA;MAOjB;AAwJM,IAAWC,uBAAAA,WAAAA,GAAAA,SAAAA,oBAAAA;;;;;;WAAAA;MAMjB","ignoreList":[0]}}, + {"offset": {"line": 8128, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/response-cache/utils.ts"],"sourcesContent":["import {\n CachedRouteKind,\n IncrementalCacheKind,\n type CachedAppPageValue,\n type CachedPageValue,\n type IncrementalResponseCacheEntry,\n type ResponseCacheEntry,\n} from './types'\n\nimport RenderResult from '../render-result'\nimport { RouteKind } from '../route-kind'\nimport { HTML_CONTENT_TYPE_HEADER } from '../../lib/constants'\n\nexport async function fromResponseCacheEntry(\n cacheEntry: ResponseCacheEntry\n): Promise {\n return {\n ...cacheEntry,\n value:\n cacheEntry.value?.kind === CachedRouteKind.PAGES\n ? {\n kind: CachedRouteKind.PAGES,\n html: await cacheEntry.value.html.toUnchunkedString(true),\n pageData: cacheEntry.value.pageData,\n headers: cacheEntry.value.headers,\n status: cacheEntry.value.status,\n }\n : cacheEntry.value?.kind === CachedRouteKind.APP_PAGE\n ? {\n kind: CachedRouteKind.APP_PAGE,\n html: await cacheEntry.value.html.toUnchunkedString(true),\n postponed: cacheEntry.value.postponed,\n rscData: cacheEntry.value.rscData,\n headers: cacheEntry.value.headers,\n status: cacheEntry.value.status,\n segmentData: cacheEntry.value.segmentData,\n }\n : cacheEntry.value,\n }\n}\n\nexport async function toResponseCacheEntry(\n response: IncrementalResponseCacheEntry | null\n): Promise {\n if (!response) return null\n\n return {\n isMiss: response.isMiss,\n isStale: response.isStale,\n cacheControl: response.cacheControl,\n isFallback: response.isFallback,\n value:\n response.value?.kind === CachedRouteKind.PAGES\n ? ({\n kind: CachedRouteKind.PAGES,\n html: RenderResult.fromStatic(\n response.value.html,\n HTML_CONTENT_TYPE_HEADER\n ),\n pageData: response.value.pageData,\n headers: response.value.headers,\n status: response.value.status,\n } satisfies CachedPageValue)\n : response.value?.kind === CachedRouteKind.APP_PAGE\n ? ({\n kind: CachedRouteKind.APP_PAGE,\n html: RenderResult.fromStatic(\n response.value.html,\n HTML_CONTENT_TYPE_HEADER\n ),\n rscData: response.value.rscData,\n headers: response.value.headers,\n status: response.value.status,\n postponed: response.value.postponed,\n segmentData: response.value.segmentData,\n } satisfies CachedAppPageValue)\n : response.value,\n }\n}\n\nexport function routeKindToIncrementalCacheKind(\n routeKind: RouteKind\n): Exclude {\n switch (routeKind) {\n case RouteKind.PAGES:\n return IncrementalCacheKind.PAGES\n case RouteKind.APP_PAGE:\n return IncrementalCacheKind.APP_PAGE\n case RouteKind.IMAGE:\n return IncrementalCacheKind.IMAGE\n case RouteKind.APP_ROUTE:\n return IncrementalCacheKind.APP_ROUTE\n case RouteKind.PAGES_API:\n // Pages Router API routes are not cached in the incremental cache.\n throw new Error(`Unexpected route kind ${routeKind}`)\n default:\n return routeKind satisfies never\n }\n}\n"],"names":["CachedRouteKind","IncrementalCacheKind","RenderResult","RouteKind","HTML_CONTENT_TYPE_HEADER","fromResponseCacheEntry","cacheEntry","value","kind","PAGES","html","toUnchunkedString","pageData","headers","status","APP_PAGE","postponed","rscData","segmentData","toResponseCacheEntry","response","isMiss","isStale","cacheControl","isFallback","fromStatic","routeKindToIncrementalCacheKind","routeKind","IMAGE","APP_ROUTE","PAGES_API","Error"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 8211, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/route-kind.ts"],"sourcesContent":["export const enum RouteKind {\n /**\n * `PAGES` represents all the React pages that are under `pages/`.\n */\n PAGES = 'PAGES',\n /**\n * `PAGES_API` represents all the API routes under `pages/api/`.\n */\n PAGES_API = 'PAGES_API',\n /**\n * `APP_PAGE` represents all the React pages that are under `app/` with the\n * filename of `page.{j,t}s{,x}`.\n */\n APP_PAGE = 'APP_PAGE',\n /**\n * `APP_ROUTE` represents all the API routes and metadata routes that are under `app/` with the\n * filename of `route.{j,t}s{,x}`.\n */\n APP_ROUTE = 'APP_ROUTE',\n\n /**\n * `IMAGE` represents all the images that are generated by `next/image`.\n */\n IMAGE = 'IMAGE',\n}\n"],"names":["RouteKind"],"mappings":";;;;AAAO,IAAWA,YAAAA,WAAAA,GAAAA,SAAAA,SAAAA;IAChB;;GAEC,GAAA,SAAA,CAAA,QAAA,GAAA;IAED;;GAEC,GAAA,SAAA,CAAA,YAAA,GAAA;IAED;;;GAGC,GAAA,SAAA,CAAA,WAAA,GAAA;IAED;;;GAGC,GAAA,SAAA,CAAA,YAAA,GAAA;IAGD;;GAEC,GAAA,SAAA,CAAA,QAAA,GAAA;WAtBeA;MAwBjB","ignoreList":[0]}}, + {"offset": {"line": 8239, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/send-response.ts"],"sourcesContent":["import type { BaseNextRequest, BaseNextResponse } from './base-http'\nimport { isNodeNextResponse } from './base-http/helpers'\n\nimport { pipeToNodeResponse } from './pipe-readable'\nimport { splitCookiesString } from './web/utils'\n\n/**\n * Sends the response on the underlying next response object.\n *\n * @param req the underlying request object\n * @param res the underlying response object\n * @param response the response to send\n */\nexport async function sendResponse(\n req: BaseNextRequest,\n res: BaseNextResponse,\n response: Response,\n waitUntil?: Promise\n): Promise {\n if (\n // The type check here ensures that `req` is correctly typed, and the\n // environment variable check provides dead code elimination.\n process.env.NEXT_RUNTIME !== 'edge' &&\n isNodeNextResponse(res)\n ) {\n // Copy over the response status.\n res.statusCode = response.status\n res.statusMessage = response.statusText\n\n // TODO: this is not spec-compliant behavior and we should not restrict\n // headers that are allowed to appear many times.\n //\n // See:\n // https://github.com/vercel/next.js/pull/70127\n const headersWithMultipleValuesAllowed = [\n // can add more headers to this list if needed\n 'set-cookie',\n 'www-authenticate',\n 'proxy-authenticate',\n 'vary',\n ]\n\n // Copy over the response headers.\n response.headers?.forEach((value, name) => {\n // `x-middleware-set-cookie` is an internal header not needed for the response\n if (name.toLowerCase() === 'x-middleware-set-cookie') {\n return\n }\n\n // The append handling is special cased for `set-cookie`.\n if (name.toLowerCase() === 'set-cookie') {\n // TODO: (wyattjoh) replace with native response iteration when we can upgrade undici\n for (const cookie of splitCookiesString(value)) {\n res.appendHeader(name, cookie)\n }\n } else {\n // only append the header if it is either not present in the outbound response\n // or if the header supports multiple values\n const isHeaderPresent = typeof res.getHeader(name) !== 'undefined'\n if (\n headersWithMultipleValuesAllowed.includes(name.toLowerCase()) ||\n !isHeaderPresent\n ) {\n res.appendHeader(name, value)\n }\n }\n })\n\n /**\n * The response can't be directly piped to the underlying response. The\n * following is duplicated from the edge runtime handler.\n *\n * See packages/next/server/next-server.ts\n */\n\n const { originalResponse } = res\n\n // A response body must not be sent for HEAD requests. See https://httpwg.org/specs/rfc9110.html#HEAD\n if (response.body && req.method !== 'HEAD') {\n await pipeToNodeResponse(response.body, originalResponse, waitUntil)\n } else {\n originalResponse.end()\n }\n }\n}\n"],"names":["isNodeNextResponse","pipeToNodeResponse","splitCookiesString","sendResponse","req","res","response","waitUntil","process","env","NEXT_RUNTIME","statusCode","status","statusMessage","statusText","headersWithMultipleValuesAllowed","headers","forEach","value","name","toLowerCase","cookie","appendHeader","isHeaderPresent","getHeader","includes","originalResponse","body","method","end"],"mappings":";;;;AACA,SAASA,kBAAkB,QAAQ,sBAAqB;AAExD,SAASC,kBAAkB,QAAQ,kBAAiB;AACpD,SAASC,kBAAkB,QAAQ,cAAa;;;;AASzC,eAAeC,aACpBC,GAAoB,EACpBC,GAAqB,EACrBC,QAAkB,EAClBC,SAA4B;IAE5B,IACE,AACA,6DAA6D,QADQ;IAErEC,QAAQC,GAAG,CAACC,YAAY,uBAAK,cAC7BV,gMAAAA,EAAmBK,MACnB;YAkBA,AACAC,kCADkC;QAjBlC,iCAAiC;QACjCD,IAAIM,UAAU,GAAGL,SAASM,MAAM;QAChCP,IAAIQ,aAAa,GAAGP,SAASQ,UAAU;QAEvC,uEAAuE;QACvE,iDAAiD;QACjD,EAAE;QACF,OAAO;QACP,+CAA+C;QAC/C,MAAMC,mCAAmC;YACvC,8CAA8C;YAC9C;YACA;YACA;YACA;SACD;SAGDT,oBAAAA,SAASU,OAAO,KAAA,OAAA,KAAA,IAAhBV,kBAAkBW,OAAO,CAAC,CAACC,OAAOC;YAChC,8EAA8E;YAC9E,IAAIA,KAAKC,WAAW,OAAO,2BAA2B;gBACpD;YACF;YAEA,yDAAyD;YACzD,IAAID,KAAKC,WAAW,OAAO,cAAc;gBACvC,qFAAqF;gBACrF,KAAK,MAAMC,cAAUnB,qLAAAA,EAAmBgB,OAAQ;oBAC9Cb,IAAIiB,YAAY,CAACH,MAAME;gBACzB;YACF,OAAO;gBACL,8EAA8E;gBAC9E,4CAA4C;gBAC5C,MAAME,kBAAkB,OAAOlB,IAAImB,SAAS,CAACL,UAAU;gBACvD,IACEJ,iCAAiCU,QAAQ,CAACN,KAAKC,WAAW,OAC1D,CAACG,iBACD;oBACAlB,IAAIiB,YAAY,CAACH,MAAMD;gBACzB;YACF;QACF;QAEA;;;;;KAKC,GAED,MAAM,EAAEQ,gBAAgB,EAAE,GAAGrB;QAE7B,qGAAqG;QACrG,IAAIC,SAASqB,IAAI,IAAIvB,IAAIwB,MAAM,KAAK,QAAQ;YAC1C,UAAM3B,yLAAAA,EAAmBK,SAASqB,IAAI,EAAED,kBAAkBnB;QAC5D,OAAO;YACLmB,iBAAiBG,GAAG;QACtB;IACF;AACF","ignoreList":[0]}}, + {"offset": {"line": 8306, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/stream-utils/encoded-tags.ts"],"sourcesContent":["export const ENCODED_TAGS = {\n // opening tags do not have the closing `>` since they can contain other attributes such as ``\n OPENING: {\n // \n HEAD: new Uint8Array([60, 47, 104, 101, 97, 100, 62]),\n // \n BODY: new Uint8Array([60, 47, 98, 111, 100, 121, 62]),\n // \n HTML: new Uint8Array([60, 47, 104, 116, 109, 108, 62]),\n // \n BODY_AND_HTML: new Uint8Array([\n 60, 47, 98, 111, 100, 121, 62, 60, 47, 104, 116, 109, 108, 62,\n ]),\n },\n META: {\n // Only the match the prefix cause the suffix can be different whether it's xml compatible or not \">\" or \"/>\"\n // (\n ...streams: ReadableStream[]\n): ReadableStream {\n // If we have no streams, return an empty stream. This behavior is\n // intentional as we're now providing the `RenderResult.EMPTY` value.\n if (streams.length === 0) {\n return new ReadableStream({\n start(controller) {\n controller.close()\n },\n })\n }\n\n // If we only have 1 stream we fast path it by returning just this stream\n if (streams.length === 1) {\n return streams[0]\n }\n\n const { readable, writable } = new TransformStream()\n\n // We always initiate pipeTo immediately. We know we have at least 2 streams\n // so we need to avoid closing the writable when this one finishes.\n let promise = streams[0].pipeTo(writable, { preventClose: true })\n\n let i = 1\n for (; i < streams.length - 1; i++) {\n const nextStream = streams[i]\n promise = promise.then(() =>\n nextStream.pipeTo(writable, { preventClose: true })\n )\n }\n\n // We can omit the length check because we halted before the last stream and there\n // is at least two streams so the lastStream here will always be defined\n const lastStream = streams[i]\n promise = promise.then(() => lastStream.pipeTo(writable))\n\n // Catch any errors from the streams and ignore them, they will be handled\n // by whatever is consuming the readable stream.\n promise.catch(voidCatch)\n\n return readable\n}\n\nexport function streamFromString(str: string): ReadableStream {\n return new ReadableStream({\n start(controller) {\n controller.enqueue(encoder.encode(str))\n controller.close()\n },\n })\n}\n\n/**\n * Creates a stream that delivers `chunk` and then closes.\n *\n * The stream is a default stream, and it has to stay one. A byte stream (`type:\n * 'bytes'`) transfers the buffer of each chunk that it receives, which detaches\n * `chunk`. A caller that keeps `chunk` to serve more than one read, such as an\n * in-memory cache handler, loses the data on the first read.\n *\n * Every reader receives the same `chunk` instance. A reader that modifies it\n * changes what later readers see.\n */\nexport function streamFromBuffer(chunk: Buffer): ReadableStream {\n return new ReadableStream({\n start(controller) {\n controller.enqueue(chunk)\n controller.close()\n },\n })\n}\n\nasync function streamToChunks(\n stream: ReadableStream\n): Promise> {\n const reader = stream.getReader()\n const chunks: Array = []\n\n while (true) {\n const { done, value } = await reader.read()\n if (done) {\n break\n }\n\n chunks.push(value)\n }\n\n return chunks\n}\n\nfunction concatUint8Arrays(chunks: Array): Uint8Array {\n const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0)\n const result = new Uint8Array(totalLength)\n let offset = 0\n for (const chunk of chunks) {\n result.set(chunk, offset)\n offset += chunk.length\n }\n return result\n}\n\nexport async function webstreamToUint8Array(\n stream: ReadableStream\n): Promise {\n return concatUint8Arrays(await streamToChunks(stream))\n}\n\nfunction webToReadable(\n stream: ReadableStream | import('node:stream').Readable\n): import('node:stream').Readable {\n if (process.env.NEXT_RUNTIME === 'edge') {\n throw new Error('webToReadable cannot be used in the edge runtime')\n } else {\n let Readable: typeof import('node:stream').Readable\n if (process.env.TURBOPACK) {\n Readable = (require('node:stream') as typeof import('node:stream'))\n .Readable\n } else if (\n process.env.__NEXT_BUNDLER === 'Webpack' ||\n process.env.__NEXT_BUNDLER === 'Rspack'\n ) {\n Readable = (\n __non_webpack_require__('node:stream') as typeof import('node:stream')\n ).Readable\n } else {\n Readable = (require('node:stream') as typeof import('node:stream'))\n .Readable\n }\n if (stream instanceof Readable) {\n return stream\n }\n return Readable.fromWeb(stream as import('stream/web').ReadableStream)\n }\n}\n\nexport async function nodestreamToUint8Array(\n stream: AnyStream\n): Promise {\n const chunks: Buffer[] = []\n for await (const chunk of webToReadable(stream)) {\n chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk)\n }\n return Buffer.concat(chunks)\n}\n\nexport async function streamToUint8Array(stream: AnyStream) {\n if (process.env.NEXT_RUNTIME === 'edge') {\n // Edge runtime always uses web streams\n return webstreamToUint8Array(stream as ReadableStream)\n } else {\n let Readable: typeof import('node:stream').Readable\n if (process.env.TURBOPACK) {\n Readable = (require('node:stream') as typeof import('node:stream'))\n .Readable\n } else if (\n process.env.__NEXT_BUNDLER === 'Webpack' ||\n process.env.__NEXT_BUNDLER === 'Rspack'\n ) {\n Readable = (\n __non_webpack_require__('node:stream') as typeof import('node:stream')\n ).Readable\n } else {\n Readable = (require('node:stream') as typeof import('node:stream'))\n .Readable\n }\n\n if (stream instanceof Readable) {\n return nodestreamToUint8Array(stream)\n }\n\n return webstreamToUint8Array(stream)\n }\n}\n\nexport async function streamToBuffer(\n stream: ReadableStream\n): Promise {\n return Buffer.concat(await streamToChunks(stream))\n}\n\nexport async function streamToString(\n stream: ReadableStream,\n signal?: AbortSignal\n): Promise {\n const decoder = new TextDecoder('utf-8', { fatal: true })\n let string = ''\n\n for await (const chunk of stream) {\n if (signal?.aborted) {\n return string\n }\n\n string += decoder.decode(chunk, { stream: true })\n }\n\n string += decoder.decode()\n\n return string\n}\n\nexport type BufferedTransformOptions = {\n /**\n * Flush synchronously once the buffer reaches this many bytes.\n */\n readonly maxBufferByteLength?: number\n}\n\nexport function createBufferedTransformStream(\n options: BufferedTransformOptions = {}\n): TransformStream {\n const { maxBufferByteLength = Infinity } = options\n\n let bufferedChunks: Array = []\n let bufferByteLength: number = 0\n let pending: PromiseWithResolvers | undefined\n\n const flush = (controller: TransformStreamDefaultController) => {\n try {\n if (bufferedChunks.length === 0) {\n return\n }\n\n const chunk = new Uint8Array(bufferByteLength)\n let copiedBytes = 0\n\n for (let i = 0; i < bufferedChunks.length; i++) {\n const bufferedChunk = bufferedChunks[i]\n chunk.set(bufferedChunk, copiedBytes)\n copiedBytes += bufferedChunk.byteLength\n }\n // We just wrote all the buffered chunks so we need to reset the bufferedChunks array\n // and our bufferByteLength to prepare for the next round of buffered chunks\n bufferedChunks.length = 0\n bufferByteLength = 0\n controller.enqueue(chunk)\n } catch {\n // If an error occurs while enqueuing, it can't be due to this\n // transformer. It's most likely caused by the controller having been\n // errored (for example, if the stream was cancelled).\n }\n }\n\n const scheduleFlush = (controller: TransformStreamDefaultController) => {\n if (pending) {\n return\n }\n\n const detached = createPromiseWithResolvers()\n pending = detached\n\n scheduleImmediate(() => {\n try {\n flush(controller)\n } finally {\n pending = undefined\n detached.resolve()\n }\n })\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n // Combine the previous buffer with the new chunk.\n bufferedChunks.push(chunk)\n bufferByteLength += chunk.byteLength\n\n if (bufferByteLength >= maxBufferByteLength) {\n flush(controller)\n } else {\n scheduleFlush(controller)\n }\n },\n flush() {\n return pending?.promise\n },\n })\n}\n\n// TODO this is currently unused but once we add proper output:export support, it needs to be\n// revisited. See https://github.com/vercel/next.js/pull/89478 for more details\n//\n// function createPrefetchCommentStream(\n// isBuildTimePrerendering: boolean,\n// buildId: string\n// ): TransformStream {\n// // Insert an extra comment at the beginning of the HTML document. This must\n// // come after the DOCTYPE, which is inserted by React.\n// //\n// // The first chunk sent by React will contain the doctype. After that, we can\n// // pass through the rest of the chunks as-is.\n// let didTransformFirstChunk = false\n// return new TransformStream({\n// transform(chunk, controller) {\n// if (isBuildTimePrerendering && !didTransformFirstChunk) {\n// didTransformFirstChunk = true\n// const decoder = new TextDecoder('utf-8', { fatal: true })\n// const chunkStr = decoder.decode(chunk, {\n// stream: true,\n// })\n// const updatedChunkStr = insertBuildIdComment(chunkStr, buildId)\n// controller.enqueue(encoder.encode(updatedChunkStr))\n// return\n// }\n// controller.enqueue(chunk)\n// },\n// })\n// }\n\nexport function renderToInitialFizzStream({\n ReactDOMServer,\n element,\n streamOptions,\n}: {\n ReactDOMServer: {\n renderToReadableStream: typeof import('react-dom/server').renderToReadableStream\n }\n element: React.ReactElement\n streamOptions?: Parameters[1]\n}): Promise {\n return getTracer().trace(AppRenderSpan.renderToReadableStream, async () =>\n ReactDOMServer.renderToReadableStream(element, streamOptions)\n )\n}\n\nexport function createMetadataTransformStream(\n insert: () => Promise | string\n): TransformStream {\n let chunkIndex = -1\n let isMarkRemoved = false\n\n return new TransformStream({\n async transform(chunk, controller) {\n let iconMarkIndex = -1\n let closedHeadIndex = -1\n chunkIndex++\n\n if (isMarkRemoved) {\n controller.enqueue(chunk)\n return\n }\n let iconMarkLength = 0\n // Only search for the closed head tag once\n if (iconMarkIndex === -1) {\n iconMarkIndex = indexOfUint8Array(chunk, ENCODED_TAGS.META.ICON_MARK)\n if (iconMarkIndex === -1) {\n controller.enqueue(chunk)\n return\n } else {\n // When we found the `` or `>`, checking the next char to ensure we cover both cases.\n iconMarkLength = ENCODED_TAGS.META.ICON_MARK.length\n // Check if next char is /, this is for xml mode.\n if (chunk[iconMarkIndex + iconMarkLength] === 47) {\n iconMarkLength += 2\n } else {\n // The last char is `>`\n iconMarkLength++\n }\n }\n }\n\n // Check if icon mark is inside tag in the first chunk.\n if (chunkIndex === 0) {\n closedHeadIndex = indexOfUint8Array(chunk, ENCODED_TAGS.CLOSED.HEAD)\n if (iconMarkIndex !== -1) {\n // The mark icon is located in the 1st chunk before the head tag.\n // We do not need to insert the script tag in this case because it's in the head.\n // Just remove the icon mark from the chunk.\n if (iconMarkIndex < closedHeadIndex) {\n const replaced = new Uint8Array(chunk.length - iconMarkLength)\n\n // Remove the icon mark from the chunk.\n replaced.set(chunk.subarray(0, iconMarkIndex))\n replaced.set(\n chunk.subarray(iconMarkIndex + iconMarkLength),\n iconMarkIndex\n )\n chunk = replaced\n } else {\n // The icon mark is after the head tag, replace and insert the script tag at that position.\n const insertion = await insert()\n const encodedInsertion = encoder.encode(insertion)\n const insertionLength = encodedInsertion.length\n const replaced = new Uint8Array(\n chunk.length - iconMarkLength + insertionLength\n )\n replaced.set(chunk.subarray(0, iconMarkIndex))\n replaced.set(encodedInsertion, iconMarkIndex)\n replaced.set(\n chunk.subarray(iconMarkIndex + iconMarkLength),\n iconMarkIndex + insertionLength\n )\n chunk = replaced\n }\n isMarkRemoved = true\n }\n // If there's no icon mark located, it will be handled later when if present in the following chunks.\n } else {\n // When it's appeared in the following chunks, we'll need to\n // remove the mark and then insert the script tag at that position.\n const insertion = await insert()\n const encodedInsertion = encoder.encode(insertion)\n const insertionLength = encodedInsertion.length\n // Replace the icon mark with the hoist script or empty string.\n const replaced = new Uint8Array(\n chunk.length - iconMarkLength + insertionLength\n )\n // Set the first part of the chunk, before the icon mark.\n replaced.set(chunk.subarray(0, iconMarkIndex))\n // Set the insertion after the icon mark.\n replaced.set(encodedInsertion, iconMarkIndex)\n\n // Set the rest of the chunk after the icon mark.\n replaced.set(\n chunk.subarray(iconMarkIndex + iconMarkLength),\n iconMarkIndex + insertionLength\n )\n chunk = replaced\n isMarkRemoved = true\n }\n controller.enqueue(chunk)\n },\n })\n}\n\nexport function createHeadInsertionTransformStream(\n insert: () => Promise\n): TransformStream {\n let inserted = false\n\n // We need to track if this transform saw any bytes because if it didn't\n // we won't want to insert any server HTML at all\n let hasBytes = false\n\n return new TransformStream({\n async transform(chunk, controller) {\n hasBytes = true\n\n const insertion = await insert()\n if (inserted) {\n if (insertion) {\n const encodedInsertion = encoder.encode(insertion)\n controller.enqueue(encodedInsertion)\n }\n controller.enqueue(chunk)\n } else {\n // TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for.\n const index = indexOfUint8Array(chunk, ENCODED_TAGS.CLOSED.HEAD)\n // In fully static rendering or non PPR rendering cases:\n // `/head>` will always be found in the chunk in first chunk rendering.\n if (index !== -1) {\n if (insertion) {\n const encodedInsertion = encoder.encode(insertion)\n // Get the total count of the bytes in the chunk and the insertion\n // e.g.\n // chunk = \n // insertion = \n // output = [ ] \n const insertedHeadContent = new Uint8Array(\n chunk.length + encodedInsertion.length\n )\n // Append the first part of the chunk, before the head tag\n insertedHeadContent.set(chunk.slice(0, index))\n // Append the server inserted content\n insertedHeadContent.set(encodedInsertion, index)\n // Append the rest of the chunk\n insertedHeadContent.set(\n chunk.slice(index),\n index + encodedInsertion.length\n )\n controller.enqueue(insertedHeadContent)\n } else {\n controller.enqueue(chunk)\n }\n inserted = true\n } else {\n // This will happens in PPR rendering during next start, when the page is partially rendered.\n // When the page resumes, the head tag will be found in the middle of the chunk.\n // Where we just need to append the insertion and chunk to the current stream.\n // e.g.\n // PPR-static: ... [ resume content ] \n // PPR-resume: [ insertion ] [ rest content ]\n if (insertion) {\n controller.enqueue(encoder.encode(insertion))\n }\n controller.enqueue(chunk)\n inserted = true\n }\n }\n },\n async flush(controller) {\n // Check before closing if there's anything remaining to insert.\n if (hasBytes) {\n const insertion = await insert()\n if (insertion) {\n controller.enqueue(encoder.encode(insertion))\n }\n }\n },\n })\n}\n\nasync function createClientResumeScriptInsertionTransformStream(): Promise<\n TransformStream\n> {\n const segmentPath = '/_full'\n const cacheBustingHeader = await computeCacheBustingSearchParam(\n '1', // headers[NEXT_ROUTER_PREFETCH_HEADER]\n '/_full', // headers[NEXT_ROUTER_SEGMENT_PREFETCH_HEADER]\n undefined, // headers[NEXT_ROUTER_STATE_TREE_HEADER]\n undefined // headers[NEXT_URL]\n )\n const searchStr = `${NEXT_RSC_UNION_QUERY}=${cacheBustingHeader}`\n const NEXT_CLIENT_RESUME_SCRIPT = ``\n\n let didAlreadyInsert = false\n return new TransformStream({\n transform(chunk, controller) {\n if (didAlreadyInsert) {\n // Already inserted the script into the head. Pass through.\n controller.enqueue(chunk)\n return\n }\n // TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for.\n const headClosingTagIndex = indexOfUint8Array(\n chunk,\n ENCODED_TAGS.CLOSED.HEAD\n )\n\n if (headClosingTagIndex === -1) {\n // In fully static rendering or non PPR rendering cases:\n // `/head>` will always be found in the chunk in first chunk rendering.\n controller.enqueue(chunk)\n return\n }\n\n const encodedInsertion = encoder.encode(NEXT_CLIENT_RESUME_SCRIPT)\n // Get the total count of the bytes in the chunk and the insertion\n // e.g.\n // chunk = \n // insertion = \n // output = [ ] \n const insertedHeadContent = new Uint8Array(\n chunk.length + encodedInsertion.length\n )\n // Append the first part of the chunk, before the head tag\n insertedHeadContent.set(chunk.slice(0, headClosingTagIndex))\n // Append the server inserted content\n insertedHeadContent.set(encodedInsertion, headClosingTagIndex)\n // Append the rest of the chunk\n insertedHeadContent.set(\n chunk.slice(headClosingTagIndex),\n headClosingTagIndex + encodedInsertion.length\n )\n\n controller.enqueue(insertedHeadContent)\n didAlreadyInsert = true\n },\n })\n}\n\n// Suffix after main body content - scripts before ,\n// but wait for the major chunks to be enqueued.\nexport function createDeferredSuffixStream(\n suffix: string\n): TransformStream {\n let flushed = false\n let pending: PromiseWithResolvers | undefined\n\n const flush = (controller: TransformStreamDefaultController) => {\n const detached = createPromiseWithResolvers()\n pending = detached\n\n scheduleImmediate(() => {\n try {\n controller.enqueue(encoder.encode(suffix))\n } catch {\n // If an error occurs while enqueuing it can't be due to this\n // transformers fault. It's likely due to the controller being\n // errored due to the stream being cancelled.\n } finally {\n pending = undefined\n detached.resolve()\n }\n })\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n controller.enqueue(chunk)\n\n // If we've already flushed, we're done.\n if (flushed) return\n\n // Schedule the flush to happen.\n flushed = true\n flush(controller)\n },\n flush(controller) {\n if (pending) return pending.promise\n if (flushed) return\n\n // Flush now.\n controller.enqueue(encoder.encode(suffix))\n },\n })\n}\n\nexport function createFlightDataInjectionTransformStream(\n stream: ReadableStream,\n delayDataUntilFirstHtmlChunk: boolean\n): TransformStream {\n let htmlStreamFinished = false\n\n let pull: Promise | null = null\n let donePulling = false\n\n function startOrContinuePulling(\n controller: TransformStreamDefaultController\n ) {\n if (!pull) {\n pull = startPulling(controller)\n }\n return pull\n }\n\n async function startPulling(controller: TransformStreamDefaultController) {\n const reader = stream.getReader()\n\n if (delayDataUntilFirstHtmlChunk) {\n // NOTE: streaming flush\n // We are buffering here for the inlined data stream because the\n // \"shell\" stream might be chunkenized again by the underlying stream\n // implementation, e.g. with a specific high-water mark. To ensure it's\n // the safe timing to pipe the data stream, this extra tick is\n // necessary.\n\n // We don't start reading until we've left the current Task to ensure\n // that it's inserted after flushing the shell. Note that this implementation\n // might get stale if impl details of Fizz change in the future.\n await atLeastOneTask()\n }\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) {\n donePulling = true\n return\n }\n\n // We want to prioritize HTML over RSC data.\n // The SSR render is based on the same RSC stream, so when we get a new RSC chunk,\n // we're likely to produce an HTML chunk as well, so give it a chance to flush first.\n if (!delayDataUntilFirstHtmlChunk && !htmlStreamFinished) {\n await atLeastOneTask()\n }\n controller.enqueue(value)\n }\n } catch (err) {\n controller.error(err)\n }\n }\n\n return new TransformStream({\n start(controller) {\n if (!delayDataUntilFirstHtmlChunk) {\n startOrContinuePulling(controller)\n }\n },\n transform(chunk, controller) {\n controller.enqueue(chunk)\n\n // Start the streaming if it hasn't already been started yet.\n if (delayDataUntilFirstHtmlChunk) {\n startOrContinuePulling(controller)\n }\n },\n flush(controller) {\n htmlStreamFinished = true\n if (donePulling) {\n return\n }\n return startOrContinuePulling(controller)\n },\n })\n}\n\nexport const CLOSE_TAG = ''\n\n/**\n * This transform stream moves the suffix to the end of the stream, so results\n * like `` will be transformed to\n * ``.\n */\nexport function createMoveSuffixStream(): TransformStream<\n Uint8Array,\n Uint8Array\n> {\n let foundSuffix = false\n\n return new TransformStream({\n transform(chunk, controller) {\n if (foundSuffix) {\n return controller.enqueue(chunk)\n }\n\n const index = indexOfUint8Array(chunk, ENCODED_TAGS.CLOSED.BODY_AND_HTML)\n if (index > -1) {\n foundSuffix = true\n\n // If the whole chunk is the suffix, then don't write anything, it will\n // be written in the flush.\n if (chunk.length === ENCODED_TAGS.CLOSED.BODY_AND_HTML.length) {\n return\n }\n\n // Write out the part before the suffix.\n const before = chunk.slice(0, index)\n controller.enqueue(before)\n\n // In the case where the suffix is in the middle of the chunk, we need\n // to split the chunk into two parts.\n if (chunk.length > ENCODED_TAGS.CLOSED.BODY_AND_HTML.length + index) {\n // Write out the part after the suffix.\n const after = chunk.slice(\n index + ENCODED_TAGS.CLOSED.BODY_AND_HTML.length\n )\n controller.enqueue(after)\n }\n } else {\n controller.enqueue(chunk)\n }\n },\n flush(controller) {\n // Even if we didn't find the suffix, the HTML is not valid if we don't\n // add it, so insert it at the end.\n controller.enqueue(ENCODED_TAGS.CLOSED.BODY_AND_HTML)\n },\n })\n}\n\nfunction createStripDocumentClosingTagsTransform(): TransformStream<\n Uint8Array,\n Uint8Array\n> {\n return new TransformStream({\n transform(chunk, controller) {\n // We rely on the assumption that chunks will never break across a code unit.\n // This is reasonable because we currently concat all of React's output from a single\n // flush into one chunk before streaming it forward which means the chunk will represent\n // a single coherent utf-8 string. This is not safe to use if we change our streaming to no\n // longer do this large buffered chunk\n if (\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.BODY_AND_HTML) ||\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.BODY) ||\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.HTML)\n ) {\n // the entire chunk is the closing tags; return without enqueueing anything.\n return\n }\n\n // We assume these tags will go at together at the end of the document and that\n // they won't appear anywhere else in the document. This is not really a safe assumption\n // but until we revamp our streaming infra this is a performant way to string the tags\n chunk = removeFromUint8Array(chunk, ENCODED_TAGS.CLOSED.BODY)\n chunk = removeFromUint8Array(chunk, ENCODED_TAGS.CLOSED.HTML)\n\n controller.enqueue(chunk)\n },\n })\n}\n\nexport function createHtmlDataDplIdTransformStream(\n dplId: string\n): TransformStream {\n let didTransform = false\n\n return new TransformStream({\n transform(chunk, controller) {\n if (didTransform) {\n controller.enqueue(chunk)\n return\n }\n\n const htmlTagIndex = indexOfUint8Array(chunk, ENCODED_TAGS.OPENING.HTML)\n if (htmlTagIndex === -1) {\n controller.enqueue(chunk)\n return\n }\n\n // Insert the data-dpl-id attribute right after \" {\n let foundHtml = false\n let foundBody = false\n return new TransformStream({\n async transform(chunk, controller) {\n // Peek into the streamed chunk to see if the tags are present.\n if (\n !foundHtml &&\n indexOfUint8Array(chunk, ENCODED_TAGS.OPENING.HTML) > -1\n ) {\n foundHtml = true\n }\n\n if (\n !foundBody &&\n indexOfUint8Array(chunk, ENCODED_TAGS.OPENING.BODY) > -1\n ) {\n foundBody = true\n }\n\n controller.enqueue(chunk)\n },\n flush(controller) {\n const missingTags: ('html' | 'body')[] = []\n if (!foundHtml) missingTags.push('html')\n if (!foundBody) missingTags.push('body')\n\n if (!missingTags.length) return\n\n controller.enqueue(\n encoder.encode(\n `\n `<${c}>`)\n .join(\n missingTags.length > 1 ? ' and ' : ''\n )} tags in the root layout.\\nRead more at https://nextjs.org/docs/messages/missing-root-layout-tags\"\n data-next-error-digest=\"${MISSING_ROOT_TAGS_ERROR}\"\n data-next-error-stack=\"\"\n >\n `\n )\n )\n },\n })\n}\n\nexport function chainTransformers(\n readable: ReadableStream,\n transformers: ReadonlyArray | null>\n): ReadableStream {\n let stream = readable\n for (const transformer of transformers) {\n if (!transformer) continue\n\n stream = stream.pipeThrough(transformer)\n }\n return stream\n}\n\nexport type ContinueStreamOptions = {\n inlinedDataStream: ReadableStream | undefined\n waitForAllReady: boolean\n deploymentId: string | undefined\n getServerInsertedHTML: () => Promise\n getServerInsertedMetadata: () => Promise\n validateRootLayout?: boolean\n /**\n * Suffix to inject after the buffered data, but before the close tags.\n */\n suffix?: string | undefined\n}\n\nexport async function continueFizzStream(\n renderStream: ReactDOMServerReadableStream,\n {\n suffix,\n inlinedDataStream,\n waitForAllReady,\n deploymentId,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n validateRootLayout,\n }: ContinueStreamOptions\n): Promise> {\n // Suffix itself might contain close tags at the end, so we need to split it.\n const suffixUnclosed = suffix ? suffix.split(CLOSE_TAG, 1)[0] : null\n\n if (waitForAllReady) {\n // Wait for all Suspense boundaries to resolve before continuing.\n await renderStream.allReady\n } else {\n // Otherwise, we want to make sure Fizz is done with all microtasky work\n // before we start pulling the stream and cause a flush.\n await waitAtLeastOneReactRenderTask()\n }\n\n return chainTransformers(renderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n\n // Insert data-dpl-id attribute on the html tag\n deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,\n\n // Transform metadata\n createMetadataTransformStream(getServerInsertedMetadata),\n\n // Insert suffix content\n suffixUnclosed != null && suffixUnclosed.length > 0\n ? createDeferredSuffixStream(suffixUnclosed)\n : null,\n\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n inlinedDataStream\n ? createFlightDataInjectionTransformStream(inlinedDataStream, true)\n : null,\n\n // Validate the root layout for missing html or body tags\n validateRootLayout ? createRootLayoutValidatorStream() : null,\n\n // Close tags should always be deferred to the end\n createMoveSuffixStream(),\n\n // Special head insertions\n // TODO-APP: Insert server side html to end of head in app layout rendering, to avoid\n // hydration errors. Remove this once it's ready to be handled by react itself.\n createHeadInsertionTransformStream(getServerInsertedHTML),\n ])\n}\n\ntype ContinueDynamicPrerenderOptions = {\n getServerInsertedHTML: () => Promise\n getServerInsertedMetadata: () => Promise\n deploymentId: string | undefined\n}\n\nexport async function continueDynamicPrerender(\n prerenderStream: ReadableStream,\n {\n getServerInsertedHTML,\n getServerInsertedMetadata,\n deploymentId,\n }: ContinueDynamicPrerenderOptions\n) {\n return chainTransformers(prerenderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n createStripDocumentClosingTagsTransform(),\n // Insert data-dpl-id attribute on the html tag\n deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,\n // Insert generated tags to head\n createHeadInsertionTransformStream(getServerInsertedHTML),\n // Transform metadata\n createMetadataTransformStream(getServerInsertedMetadata),\n ])\n}\n\ntype ContinueStaticPrerenderOptions = {\n inlinedDataStream: ReadableStream\n getServerInsertedHTML: () => Promise\n getServerInsertedMetadata: () => Promise\n deploymentId: string | undefined\n}\n\nexport async function continueStaticPrerender(\n prerenderStream: ReadableStream,\n {\n inlinedDataStream,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n deploymentId,\n }: ContinueStaticPrerenderOptions\n) {\n return chainTransformers(prerenderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n // Add build id comment to start of the HTML document (in export mode)\n // Insert data-dpl-id attribute on the html tag\n deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,\n // Insert generated tags to head\n createHeadInsertionTransformStream(getServerInsertedHTML),\n // Transform metadata\n createMetadataTransformStream(getServerInsertedMetadata),\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n createFlightDataInjectionTransformStream(inlinedDataStream, true),\n // Close tags should always be deferred to the end\n createMoveSuffixStream(),\n ])\n}\n\nexport async function continueStaticFallbackPrerender(\n prerenderStream: ReadableStream,\n {\n inlinedDataStream,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n deploymentId,\n }: ContinueStaticPrerenderOptions\n) {\n // Same as `continueStaticPrerender`, but also inserts an additional script\n // to instruct the client to start fetching the hydration data as early\n // as possible.\n return chainTransformers(prerenderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n // Insert data-dpl-id attribute on the html tag\n deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,\n // Insert generated tags to head\n createHeadInsertionTransformStream(getServerInsertedHTML),\n // Insert the client resume script into the head\n await createClientResumeScriptInsertionTransformStream(),\n // Transform metadata\n createMetadataTransformStream(getServerInsertedMetadata),\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n createFlightDataInjectionTransformStream(inlinedDataStream, true),\n // Close tags should always be deferred to the end\n createMoveSuffixStream(),\n ])\n}\n\ntype ContinueResumeOptions = {\n inlinedDataStream: ReadableStream\n getServerInsertedHTML: () => Promise\n getServerInsertedMetadata: () => Promise\n delayDataUntilFirstHtmlChunk: boolean\n deploymentId: string | undefined\n}\n\nexport async function continueDynamicHTMLResume(\n renderStream: ReadableStream,\n {\n delayDataUntilFirstHtmlChunk,\n inlinedDataStream,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n deploymentId,\n }: ContinueResumeOptions\n) {\n return chainTransformers(renderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n // Insert data-dpl-id attribute on the html tag\n deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,\n // Insert generated tags to head\n createHeadInsertionTransformStream(getServerInsertedHTML),\n // Transform metadata\n createMetadataTransformStream(getServerInsertedMetadata),\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n createFlightDataInjectionTransformStream(\n inlinedDataStream,\n delayDataUntilFirstHtmlChunk\n ),\n // Close tags should always be deferred to the end\n createMoveSuffixStream(),\n ])\n}\n\nexport function createDocumentClosingStream(): ReadableStream {\n return streamFromString(CLOSE_TAG)\n}\n\n// ---------------------------------------------------------------------------\n// Runtime prefetch transform (Web streams)\n// ---------------------------------------------------------------------------\n\n/**\n * Web TransformStream that replaces the runtime prefetch sentinel in an RSC\n * payload stream: `[]` -> `[,]`.\n *\n * This is the web equivalent of createRuntimePrefetchNodeTransform\n * in node-stream-helpers.ts.\n */\nexport function createRuntimePrefetchTransformStream(\n sentinel: number,\n isPartial: boolean,\n staleTime: number\n): TransformStream {\n const enc = new TextEncoder()\n\n // Search for: []\n // Replace with: [,]\n const search = enc.encode(`[${sentinel}]`)\n const first = search[0]\n const replace = enc.encode(`[${isPartial},${staleTime}]`)\n const searchLen = search.length\n\n let currentChunk: Uint8Array | null = null\n let found = false\n\n function processChunk(\n controller: TransformStreamDefaultController,\n nextChunk: null | Uint8Array\n ) {\n if (found) {\n if (nextChunk) {\n controller.enqueue(nextChunk)\n }\n return\n }\n\n if (currentChunk) {\n // We can't search past the index that can contain a full match\n let exclusiveUpperBound = currentChunk.length - (searchLen - 1)\n if (nextChunk) {\n // If we have any overflow bytes we can search up to the chunk's final byte\n exclusiveUpperBound += Math.min(nextChunk.length, searchLen - 1)\n }\n if (exclusiveUpperBound < 1) {\n // we can't match the current chunk.\n controller.enqueue(currentChunk)\n currentChunk = nextChunk // advance so we don't process this chunk again\n return\n }\n\n let currentIndex = currentChunk.indexOf(first)\n\n // check the current candidate match if it is within the bounds of our search space for the currentChunk\n candidateLoop: while (\n -1 < currentIndex &&\n currentIndex < exclusiveUpperBound\n ) {\n // We already know index 0 matches because we used indexOf to find the candidateIndex so we start at index 1\n let matchIndex = 1\n while (matchIndex < searchLen) {\n const candidateIndex = currentIndex + matchIndex\n const candidateValue =\n candidateIndex < currentChunk.length\n ? currentChunk[candidateIndex]\n : // if we ever hit this condition it is because there is a nextChunk we can read from\n nextChunk![candidateIndex - currentChunk.length]\n if (candidateValue !== search[matchIndex]) {\n // No match, reset and continue the search from the next position\n currentIndex = currentChunk.indexOf(first, currentIndex + 1)\n continue candidateLoop\n }\n matchIndex++\n }\n // We found a complete match. currentIndex is our starting point to replace the value.\n found = true\n // enqueue everything up to the match\n controller.enqueue(currentChunk.subarray(0, currentIndex))\n // enqueue the replacement value\n controller.enqueue(replace)\n // If there are bytes in the currentChunk after the match enqueue them\n if (currentIndex + searchLen < currentChunk.length) {\n controller.enqueue(currentChunk.slice(currentIndex + searchLen))\n }\n // If we have a next chunk we enqueue it now\n if (nextChunk) {\n // if replacement spills over to the next chunk we first exclude the replaced bytes\n const overflowBytes = currentIndex + searchLen - currentChunk.length\n const truncatedChunk =\n overflowBytes > 0 ? nextChunk!.subarray(overflowBytes) : nextChunk\n controller.enqueue(truncatedChunk)\n }\n // We are now in found mode and don't need to track currentChunk anymore\n currentChunk = null\n return\n }\n // No match found in this chunk, emit it and wait for the next one\n controller.enqueue(currentChunk)\n }\n\n // Advance to the next chunk\n currentChunk = nextChunk\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n processChunk(controller, chunk)\n },\n flush(controller) {\n processChunk(controller, null)\n },\n })\n}\n"],"names":["getTracer","AppRenderSpan","createPromiseWithResolvers","scheduleImmediate","atLeastOneTask","waitAtLeastOneReactRenderTask","ENCODED_TAGS","indexOfUint8Array","isEquivalentUint8Arrays","removeFromUint8Array","MISSING_ROOT_TAGS_ERROR","RSC_HEADER","NEXT_ROUTER_PREFETCH_HEADER","NEXT_ROUTER_SEGMENT_PREFETCH_HEADER","NEXT_RSC_UNION_QUERY","computeCacheBustingSearchParam","voidCatch","encoder","TextEncoder","chainStreams","streams","length","ReadableStream","start","controller","close","readable","writable","TransformStream","promise","pipeTo","preventClose","i","nextStream","then","lastStream","catch","streamFromString","str","enqueue","encode","streamFromBuffer","chunk","streamToChunks","stream","reader","getReader","chunks","done","value","read","push","concatUint8Arrays","totalLength","reduce","sum","result","Uint8Array","offset","set","webstreamToUint8Array","webToReadable","process","env","NEXT_RUNTIME","Error","Readable","TURBOPACK","require","__NEXT_BUNDLER","__non_webpack_require__","fromWeb","nodestreamToUint8Array","Buffer","from","concat","streamToUint8Array","streamToBuffer","streamToString","signal","decoder","TextDecoder","fatal","string","aborted","decode","createBufferedTransformStream","options","maxBufferByteLength","Infinity","bufferedChunks","bufferByteLength","pending","flush","copiedBytes","bufferedChunk","byteLength","scheduleFlush","detached","undefined","resolve","transform","renderToInitialFizzStream","ReactDOMServer","element","streamOptions","trace","renderToReadableStream","createMetadataTransformStream","insert","chunkIndex","isMarkRemoved","iconMarkIndex","closedHeadIndex","iconMarkLength","META","ICON_MARK","CLOSED","HEAD","replaced","subarray","insertion","encodedInsertion","insertionLength","createHeadInsertionTransformStream","inserted","hasBytes","index","insertedHeadContent","slice","createClientResumeScriptInsertionTransformStream","segmentPath","cacheBustingHeader","searchStr","NEXT_CLIENT_RESUME_SCRIPT","didAlreadyInsert","headClosingTagIndex","createDeferredSuffixStream","suffix","flushed","createFlightDataInjectionTransformStream","delayDataUntilFirstHtmlChunk","htmlStreamFinished","pull","donePulling","startOrContinuePulling","startPulling","err","error","CLOSE_TAG","createMoveSuffixStream","foundSuffix","BODY_AND_HTML","before","after","createStripDocumentClosingTagsTransform","BODY","HTML","createHtmlDataDplIdTransformStream","dplId","didTransform","htmlTagIndex","OPENING","insertionPoint","attribute","encodedAttribute","modifiedChunk","createRootLayoutValidatorStream","foundHtml","foundBody","missingTags","map","c","join","chainTransformers","transformers","transformer","pipeThrough","continueFizzStream","renderStream","inlinedDataStream","waitForAllReady","deploymentId","getServerInsertedHTML","getServerInsertedMetadata","validateRootLayout","suffixUnclosed","split","allReady","continueDynamicPrerender","prerenderStream","continueStaticPrerender","continueStaticFallbackPrerender","continueDynamicHTMLResume","createDocumentClosingStream","createRuntimePrefetchTransformStream","sentinel","isPartial","staleTime","enc","search","first","replace","searchLen","currentChunk","found","processChunk","nextChunk","exclusiveUpperBound","Math","min","currentIndex","indexOf","candidateLoop","matchIndex","candidateIndex","candidateValue","overflowBytes","truncatedChunk"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 9299, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/stream-utils/uint8array-helpers.ts"],"sourcesContent":["/**\n * Find the starting index of Uint8Array `b` within Uint8Array `a`.\n */\nexport function indexOfUint8Array(a: Uint8Array, b: Uint8Array) {\n if (b.length === 0) return 0\n if (a.length === 0 || b.length > a.length) return -1\n\n // Use Node's native implementation when available.\n if (typeof Buffer !== 'undefined') {\n const haystack = Buffer.isBuffer(a)\n ? a\n : Buffer.from(a.buffer, a.byteOffset, a.byteLength)\n return haystack.indexOf(b)\n }\n\n // start iterating through `a`\n for (let i = 0; i <= a.length - b.length; i++) {\n let completeMatch = true\n // from index `i`, iterate through `b` and check for mismatch\n for (let j = 0; j < b.length; j++) {\n // if the values do not match, then this isn't a complete match, exit `b` iteration early and iterate to next index of `a`.\n if (a[i + j] !== b[j]) {\n completeMatch = false\n break\n }\n }\n\n if (completeMatch) {\n return i\n }\n }\n\n return -1\n}\n\n/**\n * Check if two Uint8Arrays are strictly equivalent.\n */\nexport function isEquivalentUint8Arrays(a: Uint8Array, b: Uint8Array) {\n if (a.length !== b.length) return false\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false\n }\n\n return true\n}\n\n/**\n * Remove Uint8Array `b` from Uint8Array `a`.\n *\n * If `b` is not in `a`, `a` is returned unchanged.\n *\n * Otherwise, the function returns a new Uint8Array instance with size `a.length - b.length`\n */\nexport function removeFromUint8Array(a: Uint8Array, b: Uint8Array) {\n const tagIndex = indexOfUint8Array(a, b)\n if (tagIndex === 0) return a.subarray(b.length)\n if (tagIndex > -1) {\n const removed = new Uint8Array(a.length - b.length)\n removed.set(a.subarray(0, tagIndex))\n removed.set(a.subarray(tagIndex + b.length), tagIndex)\n return removed\n } else {\n return a\n }\n}\n"],"names":["indexOfUint8Array","a","b","length","Buffer","haystack","isBuffer","from","buffer","byteOffset","byteLength","indexOf","i","completeMatch","j","isEquivalentUint8Arrays","removeFromUint8Array","tagIndex","subarray","removed","Uint8Array","set"],"mappings":"AAAA;;CAEC,GACD;;;;;;;;AAAO,SAASA,kBAAkBC,CAAa,EAAEC,CAAa;IAC5D,IAAIA,EAAEC,MAAM,KAAK,GAAG,OAAO;IAC3B,IAAIF,EAAEE,MAAM,KAAK,KAAKD,EAAEC,MAAM,GAAGF,EAAEE,MAAM,EAAE,OAAO,CAAC;IAEnD,mDAAmD;IACnD,IAAI,OAAOC,WAAW,aAAa;QACjC,MAAMC,WAAWD,OAAOE,QAAQ,CAACL,KAC7BA,IACAG,OAAOG,IAAI,CAACN,EAAEO,MAAM,EAAEP,EAAEQ,UAAU,EAAER,EAAES,UAAU;QACpD,OAAOL,SAASM,OAAO,CAACT;IAC1B;IAEA,8BAA8B;IAC9B,IAAK,IAAIU,IAAI,GAAGA,KAAKX,EAAEE,MAAM,GAAGD,EAAEC,MAAM,EAAES,IAAK;QAC7C,IAAIC,gBAAgB;QACpB,6DAA6D;QAC7D,IAAK,IAAIC,IAAI,GAAGA,IAAIZ,EAAEC,MAAM,EAAEW,IAAK;YACjC,2HAA2H;YAC3H,IAAIb,CAAC,CAACW,IAAIE,EAAE,KAAKZ,CAAC,CAACY,EAAE,EAAE;gBACrBD,gBAAgB;gBAChB;YACF;QACF;QAEA,IAAIA,eAAe;YACjB,OAAOD;QACT;IACF;IAEA,OAAO,CAAC;AACV;AAKO,SAASG,wBAAwBd,CAAa,EAAEC,CAAa;IAClE,IAAID,EAAEE,MAAM,KAAKD,EAAEC,MAAM,EAAE,OAAO;IAElC,IAAK,IAAIS,IAAI,GAAGA,IAAIX,EAAEE,MAAM,EAAES,IAAK;QACjC,IAAIX,CAAC,CAACW,EAAE,KAAKV,CAAC,CAACU,EAAE,EAAE,OAAO;IAC5B;IAEA,OAAO;AACT;AASO,SAASI,qBAAqBf,CAAa,EAAEC,CAAa;IAC/D,MAAMe,WAAWjB,kBAAkBC,GAAGC;IACtC,IAAIe,aAAa,GAAG,OAAOhB,EAAEiB,QAAQ,CAAChB,EAAEC,MAAM;IAC9C,IAAIc,WAAW,CAAC,GAAG;QACjB,MAAME,UAAU,IAAIC,WAAWnB,EAAEE,MAAM,GAAGD,EAAEC,MAAM;QAClDgB,QAAQE,GAAG,CAACpB,EAAEiB,QAAQ,CAAC,GAAGD;QAC1BE,QAAQE,GAAG,CAACpB,EAAEiB,QAAQ,CAACD,WAAWf,EAAEC,MAAM,GAAGc;QAC7C,OAAOE;IACT,OAAO;QACL,OAAOlB;IACT;AACF","ignoreList":[0]}}, + {"offset": {"line": 9357, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/error.ts"],"sourcesContent":["export class PageSignatureError extends Error {\n constructor({ page }: { page: string }) {\n super(`The middleware \"${page}\" accepts an async API directly with the form:\n \n export function middleware(request, event) {\n return NextResponse.redirect('/new-location')\n }\n \n Read more: https://nextjs.org/docs/messages/middleware-new-signature\n `)\n }\n}\n\nexport class RemovedPageError extends Error {\n constructor() {\n super(`The request.page has been deprecated in favour of \\`URLPattern\\`.\n Read more: https://nextjs.org/docs/messages/middleware-request-page\n `)\n }\n}\n\nexport class RemovedUAError extends Error {\n constructor() {\n super(`The request.ua has been removed in favour of \\`userAgent\\` function.\n Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent\n `)\n }\n}\n"],"names":["PageSignatureError","Error","constructor","page","RemovedPageError","RemovedUAError"],"mappings":";;;;;;;;AAAO,MAAMA,2BAA2BC;IACtCC,YAAY,EAAEC,IAAI,EAAoB,CAAE;QACtC,KAAK,CAAC,CAAC,gBAAgB,EAAEA,KAAK;;;;;;;EAOhC,CAAC;IACD;AACF;AAEO,MAAMC,yBAAyBH;IACpCC,aAAc;QACZ,KAAK,CAAC,CAAC;;EAET,CAAC;IACD;AACF;AAEO,MAAMG,uBAAuBJ;IAClCC,aAAc;QACZ,KAAK,CAAC,CAAC;;EAET,CAAC;IACD;AACF","ignoreList":[0]}}, + {"offset": {"line": 9395, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/next-url.ts"],"sourcesContent":["import type { OutgoingHttpHeaders } from 'http'\nimport type { DomainLocale, I18NConfig } from '../config-shared'\nimport type { I18NProvider } from '../lib/i18n-provider'\n\nimport { detectDomainLocale } from '../../shared/lib/i18n/detect-domain-locale'\nimport { formatNextPathnameInfo } from '../../shared/lib/router/utils/format-next-pathname-info'\nimport { getHostname } from '../../shared/lib/get-hostname'\nimport { getNextPathnameInfo } from '../../shared/lib/router/utils/get-next-pathname-info'\n\ninterface Options {\n base?: string | URL\n headers?: OutgoingHttpHeaders\n forceLocale?: boolean\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig | null\n trailingSlash?: boolean\n }\n i18nProvider?: I18NProvider\n}\n\nconst REGEX_LOCALHOST_HOSTNAME =\n /^(?:127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\\[::1\\]|localhost)$/\n\nfunction parseURL(url: string | URL, base?: string | URL) {\n const parsed = new URL(String(url), base && String(base))\n if (REGEX_LOCALHOST_HOSTNAME.test(parsed.hostname)) {\n parsed.hostname = 'localhost'\n }\n return parsed\n}\n\nconst Internal = Symbol('NextURLInternal')\n\nexport class NextURL {\n private [Internal]: {\n basePath: string\n buildId?: string\n flightSearchParameters?: Record\n defaultLocale?: string\n domainLocale?: DomainLocale\n locale?: string\n options: Options\n trailingSlash?: boolean\n url: URL\n }\n\n constructor(input: string | URL, base?: string | URL, opts?: Options)\n constructor(input: string | URL, opts?: Options)\n constructor(\n input: string | URL,\n baseOrOpts?: string | URL | Options,\n opts?: Options\n ) {\n let base: undefined | string | URL\n let options: Options\n\n if (\n (typeof baseOrOpts === 'object' && 'pathname' in baseOrOpts) ||\n typeof baseOrOpts === 'string'\n ) {\n base = baseOrOpts\n options = opts || {}\n } else {\n options = opts || baseOrOpts || {}\n }\n\n this[Internal] = {\n url: parseURL(input, base ?? options.base),\n options: options,\n basePath: '',\n }\n\n this.analyze()\n }\n\n private analyze() {\n const info = getNextPathnameInfo(this[Internal].url.pathname, {\n nextConfig: this[Internal].options.nextConfig,\n parseData: !process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE,\n i18nProvider: this[Internal].options.i18nProvider,\n })\n\n const hostname = getHostname(\n this[Internal].url,\n this[Internal].options.headers\n )\n this[Internal].domainLocale = this[Internal].options.i18nProvider\n ? this[Internal].options.i18nProvider.detectDomainLocale(hostname)\n : detectDomainLocale(\n this[Internal].options.nextConfig?.i18n?.domains,\n hostname\n )\n\n const defaultLocale =\n this[Internal].domainLocale?.defaultLocale ||\n this[Internal].options.nextConfig?.i18n?.defaultLocale\n\n this[Internal].url.pathname = info.pathname\n this[Internal].defaultLocale = defaultLocale\n this[Internal].basePath = info.basePath ?? ''\n this[Internal].buildId = info.buildId\n this[Internal].locale = info.locale ?? defaultLocale\n this[Internal].trailingSlash = info.trailingSlash\n }\n\n private formatPathname() {\n return formatNextPathnameInfo({\n basePath: this[Internal].basePath,\n buildId: this[Internal].buildId,\n defaultLocale: !this[Internal].options.forceLocale\n ? this[Internal].defaultLocale\n : undefined,\n locale: this[Internal].locale,\n pathname: this[Internal].url.pathname,\n trailingSlash: this[Internal].trailingSlash,\n })\n }\n\n private formatSearch() {\n return this[Internal].url.search\n }\n\n public get buildId() {\n return this[Internal].buildId\n }\n\n public set buildId(buildId: string | undefined) {\n this[Internal].buildId = buildId\n }\n\n public get locale() {\n return this[Internal].locale ?? ''\n }\n\n public set locale(locale: string) {\n if (\n !this[Internal].locale ||\n !this[Internal].options.nextConfig?.i18n?.locales.includes(locale)\n ) {\n throw new TypeError(\n `The NextURL configuration includes no locale \"${locale}\"`\n )\n }\n\n this[Internal].locale = locale\n }\n\n get defaultLocale() {\n return this[Internal].defaultLocale\n }\n\n get domainLocale() {\n return this[Internal].domainLocale\n }\n\n get searchParams() {\n return this[Internal].url.searchParams\n }\n\n get host() {\n return this[Internal].url.host\n }\n\n set host(value: string) {\n this[Internal].url.host = value\n }\n\n get hostname() {\n return this[Internal].url.hostname\n }\n\n set hostname(value: string) {\n this[Internal].url.hostname = value\n }\n\n get port() {\n return this[Internal].url.port\n }\n\n set port(value: string) {\n this[Internal].url.port = value\n }\n\n get protocol() {\n return this[Internal].url.protocol\n }\n\n set protocol(value: string) {\n this[Internal].url.protocol = value\n }\n\n get href() {\n const pathname = this.formatPathname()\n const search = this.formatSearch()\n return `${this.protocol}//${this.host}${pathname}${search}${this.hash}`\n }\n\n set href(url: string) {\n this[Internal].url = parseURL(url)\n this.analyze()\n }\n\n get origin() {\n return this[Internal].url.origin\n }\n\n get pathname() {\n return this[Internal].url.pathname\n }\n\n set pathname(value: string) {\n this[Internal].url.pathname = value\n }\n\n get hash() {\n return this[Internal].url.hash\n }\n\n set hash(value: string) {\n this[Internal].url.hash = value\n }\n\n get search() {\n return this[Internal].url.search\n }\n\n set search(value: string) {\n this[Internal].url.search = value\n }\n\n get password() {\n return this[Internal].url.password\n }\n\n set password(value: string) {\n this[Internal].url.password = value\n }\n\n get username() {\n return this[Internal].url.username\n }\n\n set username(value: string) {\n this[Internal].url.username = value\n }\n\n get basePath() {\n return this[Internal].basePath\n }\n\n set basePath(value: string) {\n this[Internal].basePath = value.startsWith('/') ? value : `/${value}`\n }\n\n toString() {\n return this.href\n }\n\n toJSON() {\n return this.href\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n href: this.href,\n origin: this.origin,\n protocol: this.protocol,\n username: this.username,\n password: this.password,\n host: this.host,\n hostname: this.hostname,\n port: this.port,\n pathname: this.pathname,\n search: this.search,\n searchParams: this.searchParams,\n hash: this.hash,\n }\n }\n\n clone() {\n return new NextURL(String(this), this[Internal].options)\n }\n}\n"],"names":["detectDomainLocale","formatNextPathnameInfo","getHostname","getNextPathnameInfo","REGEX_LOCALHOST_HOSTNAME","parseURL","url","base","parsed","URL","String","test","hostname","Internal","Symbol","NextURL","constructor","input","baseOrOpts","opts","options","basePath","analyze","info","pathname","nextConfig","parseData","process","env","__NEXT_NO_MIDDLEWARE_URL_NORMALIZE","i18nProvider","headers","domainLocale","i18n","domains","defaultLocale","buildId","locale","trailingSlash","formatPathname","forceLocale","undefined","formatSearch","search","locales","includes","TypeError","searchParams","host","value","port","protocol","href","hash","origin","password","username","startsWith","toString","toJSON","for","clone"],"mappings":";;;;AAIA,SAASA,kBAAkB,QAAQ,6CAA4C;AAC/E,SAASC,sBAAsB,QAAQ,0DAAyD;AAChG,SAASC,WAAW,QAAQ,gCAA+B;AAC3D,SAASC,mBAAmB,QAAQ,uDAAsD;;;;;AAc1F,MAAMC,2BACJ;AAEF,SAASC,SAASC,GAAiB,EAAEC,IAAmB;IACtD,MAAMC,SAAS,IAAIC,IAAIC,OAAOJ,MAAMC,QAAQG,OAAOH;IACnD,IAAIH,yBAAyBO,IAAI,CAACH,OAAOI,QAAQ,GAAG;QAClDJ,OAAOI,QAAQ,GAAG;IACpB;IACA,OAAOJ;AACT;AAEA,MAAMK,WAAWC,OAAO;AAEjB,MAAMC;IAeXC,YACEC,KAAmB,EACnBC,UAAmC,EACnCC,IAAc,CACd;QACA,IAAIZ;QACJ,IAAIa;QAEJ,IACG,OAAOF,eAAe,YAAY,cAAcA,cACjD,OAAOA,eAAe,UACtB;YACAX,OAAOW;YACPE,UAAUD,QAAQ,CAAC;QACrB,OAAO;YACLC,UAAUD,QAAQD,cAAc,CAAC;QACnC;QAEA,IAAI,CAACL,SAAS,GAAG;YACfP,KAAKD,SAASY,OAAOV,QAAQa,QAAQb,IAAI;YACzCa,SAASA;YACTC,UAAU;QACZ;QAEA,IAAI,CAACC,OAAO;IACd;IAEQA,UAAU;YAcV,wCAAA,mCAKJ,6BACA,yCAAA;QAnBF,MAAMC,WAAOpB,mOAAAA,EAAoB,IAAI,CAACU,SAAS,CAACP,GAAG,CAACkB,QAAQ,EAAE;YAC5DC,YAAY,IAAI,CAACZ,SAAS,CAACO,OAAO,CAACK,UAAU;YAC7CC,WAAW,CAACC,QAAQC,GAAG,CAACC,kCAAkC;YAC1DC,cAAc,IAAI,CAACjB,SAAS,CAACO,OAAO,CAACU,YAAY;QACnD;QAEA,MAAMlB,eAAWV,wLAAAA,EACf,IAAI,CAACW,SAAS,CAACP,GAAG,EAClB,IAAI,CAACO,SAAS,CAACO,OAAO,CAACW,OAAO;QAEhC,IAAI,CAAClB,SAAS,CAACmB,YAAY,GAAG,IAAI,CAACnB,SAAS,CAACO,OAAO,CAACU,YAAY,GAC7D,IAAI,CAACjB,SAAS,CAACO,OAAO,CAACU,YAAY,CAAC9B,kBAAkB,CAACY,gBACvDZ,kNAAAA,EAAAA,CACE,oCAAA,IAAI,CAACa,SAAS,CAACO,OAAO,CAACK,UAAU,KAAA,OAAA,KAAA,IAAA,CAAjC,yCAAA,kCAAmCQ,IAAI,KAAA,OAAA,KAAA,IAAvC,uCAAyCC,OAAO,EAChDtB;QAGN,MAAMuB,gBACJ,CAAA,CAAA,8BAAA,IAAI,CAACtB,SAAS,CAACmB,YAAY,KAAA,OAAA,KAAA,IAA3B,4BAA6BG,aAAa,KAAA,CAAA,CAC1C,qCAAA,IAAI,CAACtB,SAAS,CAACO,OAAO,CAACK,UAAU,KAAA,OAAA,KAAA,IAAA,CAAjC,0CAAA,mCAAmCQ,IAAI,KAAA,OAAA,KAAA,IAAvC,wCAAyCE,aAAa;QAExD,IAAI,CAACtB,SAAS,CAACP,GAAG,CAACkB,QAAQ,GAAGD,KAAKC,QAAQ;QAC3C,IAAI,CAACX,SAAS,CAACsB,aAAa,GAAGA;QAC/B,IAAI,CAACtB,SAAS,CAACQ,QAAQ,GAAGE,KAAKF,QAAQ,IAAI;QAC3C,IAAI,CAACR,SAAS,CAACuB,OAAO,GAAGb,KAAKa,OAAO;QACrC,IAAI,CAACvB,SAAS,CAACwB,MAAM,GAAGd,KAAKc,MAAM,IAAIF;QACvC,IAAI,CAACtB,SAAS,CAACyB,aAAa,GAAGf,KAAKe,aAAa;IACnD;IAEQC,iBAAiB;QACvB,WAAOtC,yOAAAA,EAAuB;YAC5BoB,UAAU,IAAI,CAACR,SAAS,CAACQ,QAAQ;YACjCe,SAAS,IAAI,CAACvB,SAAS,CAACuB,OAAO;YAC/BD,eAAe,CAAC,IAAI,CAACtB,SAAS,CAACO,OAAO,CAACoB,WAAW,GAC9C,IAAI,CAAC3B,SAAS,CAACsB,aAAa,GAC5BM;YACJJ,QAAQ,IAAI,CAACxB,SAAS,CAACwB,MAAM;YAC7Bb,UAAU,IAAI,CAACX,SAAS,CAACP,GAAG,CAACkB,QAAQ;YACrCc,eAAe,IAAI,CAACzB,SAAS,CAACyB,aAAa;QAC7C;IACF;IAEQI,eAAe;QACrB,OAAO,IAAI,CAAC7B,SAAS,CAACP,GAAG,CAACqC,MAAM;IAClC;IAEA,IAAWP,UAAU;QACnB,OAAO,IAAI,CAACvB,SAAS,CAACuB,OAAO;IAC/B;IAEA,IAAWA,QAAQA,OAA2B,EAAE;QAC9C,IAAI,CAACvB,SAAS,CAACuB,OAAO,GAAGA;IAC3B;IAEA,IAAWC,SAAS;QAClB,OAAO,IAAI,CAACxB,SAAS,CAACwB,MAAM,IAAI;IAClC;IAEA,IAAWA,OAAOA,MAAc,EAAE;YAG7B,wCAAA;QAFH,IACE,CAAC,IAAI,CAACxB,SAAS,CAACwB,MAAM,IACtB,CAAA,CAAA,CAAC,oCAAA,IAAI,CAACxB,SAAS,CAACO,OAAO,CAACK,UAAU,KAAA,OAAA,KAAA,IAAA,CAAjC,yCAAA,kCAAmCQ,IAAI,KAAA,OAAA,KAAA,IAAvC,uCAAyCW,OAAO,CAACC,QAAQ,CAACR,OAAAA,GAC3D;YACA,MAAM,IAAIS,UACR,CAAC,8CAA8C,EAAET,OAAO,CAAC,CAAC;QAE9D;QAEA,IAAI,CAACxB,SAAS,CAACwB,MAAM,GAAGA;IAC1B;IAEA,IAAIF,gBAAgB;QAClB,OAAO,IAAI,CAACtB,SAAS,CAACsB,aAAa;IACrC;IAEA,IAAIH,eAAe;QACjB,OAAO,IAAI,CAACnB,SAAS,CAACmB,YAAY;IACpC;IAEA,IAAIe,eAAe;QACjB,OAAO,IAAI,CAAClC,SAAS,CAACP,GAAG,CAACyC,YAAY;IACxC;IAEA,IAAIC,OAAO;QACT,OAAO,IAAI,CAACnC,SAAS,CAACP,GAAG,CAAC0C,IAAI;IAChC;IAEA,IAAIA,KAAKC,KAAa,EAAE;QACtB,IAAI,CAACpC,SAAS,CAACP,GAAG,CAAC0C,IAAI,GAAGC;IAC5B;IAEA,IAAIrC,WAAW;QACb,OAAO,IAAI,CAACC,SAAS,CAACP,GAAG,CAACM,QAAQ;IACpC;IAEA,IAAIA,SAASqC,KAAa,EAAE;QAC1B,IAAI,CAACpC,SAAS,CAACP,GAAG,CAACM,QAAQ,GAAGqC;IAChC;IAEA,IAAIC,OAAO;QACT,OAAO,IAAI,CAACrC,SAAS,CAACP,GAAG,CAAC4C,IAAI;IAChC;IAEA,IAAIA,KAAKD,KAAa,EAAE;QACtB,IAAI,CAACpC,SAAS,CAACP,GAAG,CAAC4C,IAAI,GAAGD;IAC5B;IAEA,IAAIE,WAAW;QACb,OAAO,IAAI,CAACtC,SAAS,CAACP,GAAG,CAAC6C,QAAQ;IACpC;IAEA,IAAIA,SAASF,KAAa,EAAE;QAC1B,IAAI,CAACpC,SAAS,CAACP,GAAG,CAAC6C,QAAQ,GAAGF;IAChC;IAEA,IAAIG,OAAO;QACT,MAAM5B,WAAW,IAAI,CAACe,cAAc;QACpC,MAAMI,SAAS,IAAI,CAACD,YAAY;QAChC,OAAO,GAAG,IAAI,CAACS,QAAQ,CAAC,EAAE,EAAE,IAAI,CAACH,IAAI,GAAGxB,WAAWmB,SAAS,IAAI,CAACU,IAAI,EAAE;IACzE;IAEA,IAAID,KAAK9C,GAAW,EAAE;QACpB,IAAI,CAACO,SAAS,CAACP,GAAG,GAAGD,SAASC;QAC9B,IAAI,CAACgB,OAAO;IACd;IAEA,IAAIgC,SAAS;QACX,OAAO,IAAI,CAACzC,SAAS,CAACP,GAAG,CAACgD,MAAM;IAClC;IAEA,IAAI9B,WAAW;QACb,OAAO,IAAI,CAACX,SAAS,CAACP,GAAG,CAACkB,QAAQ;IACpC;IAEA,IAAIA,SAASyB,KAAa,EAAE;QAC1B,IAAI,CAACpC,SAAS,CAACP,GAAG,CAACkB,QAAQ,GAAGyB;IAChC;IAEA,IAAII,OAAO;QACT,OAAO,IAAI,CAACxC,SAAS,CAACP,GAAG,CAAC+C,IAAI;IAChC;IAEA,IAAIA,KAAKJ,KAAa,EAAE;QACtB,IAAI,CAACpC,SAAS,CAACP,GAAG,CAAC+C,IAAI,GAAGJ;IAC5B;IAEA,IAAIN,SAAS;QACX,OAAO,IAAI,CAAC9B,SAAS,CAACP,GAAG,CAACqC,MAAM;IAClC;IAEA,IAAIA,OAAOM,KAAa,EAAE;QACxB,IAAI,CAACpC,SAAS,CAACP,GAAG,CAACqC,MAAM,GAAGM;IAC9B;IAEA,IAAIM,WAAW;QACb,OAAO,IAAI,CAAC1C,SAAS,CAACP,GAAG,CAACiD,QAAQ;IACpC;IAEA,IAAIA,SAASN,KAAa,EAAE;QAC1B,IAAI,CAACpC,SAAS,CAACP,GAAG,CAACiD,QAAQ,GAAGN;IAChC;IAEA,IAAIO,WAAW;QACb,OAAO,IAAI,CAAC3C,SAAS,CAACP,GAAG,CAACkD,QAAQ;IACpC;IAEA,IAAIA,SAASP,KAAa,EAAE;QAC1B,IAAI,CAACpC,SAAS,CAACP,GAAG,CAACkD,QAAQ,GAAGP;IAChC;IAEA,IAAI5B,WAAW;QACb,OAAO,IAAI,CAACR,SAAS,CAACQ,QAAQ;IAChC;IAEA,IAAIA,SAAS4B,KAAa,EAAE;QAC1B,IAAI,CAACpC,SAAS,CAACQ,QAAQ,GAAG4B,MAAMQ,UAAU,CAAC,OAAOR,QAAQ,CAAC,CAAC,EAAEA,OAAO;IACvE;IAEAS,WAAW;QACT,OAAO,IAAI,CAACN,IAAI;IAClB;IAEAO,SAAS;QACP,OAAO,IAAI,CAACP,IAAI;IAClB;IAEA,CAACtC,OAAO8C,GAAG,CAAC,+BAA+B,GAAG;QAC5C,OAAO;YACLR,MAAM,IAAI,CAACA,IAAI;YACfE,QAAQ,IAAI,CAACA,MAAM;YACnBH,UAAU,IAAI,CAACA,QAAQ;YACvBK,UAAU,IAAI,CAACA,QAAQ;YACvBD,UAAU,IAAI,CAACA,QAAQ;YACvBP,MAAM,IAAI,CAACA,IAAI;YACfpC,UAAU,IAAI,CAACA,QAAQ;YACvBsC,MAAM,IAAI,CAACA,IAAI;YACf1B,UAAU,IAAI,CAACA,QAAQ;YACvBmB,QAAQ,IAAI,CAACA,MAAM;YACnBI,cAAc,IAAI,CAACA,YAAY;YAC/BM,MAAM,IAAI,CAACA,IAAI;QACjB;IACF;IAEAQ,QAAQ;QACN,OAAO,IAAI9C,QAAQL,OAAO,IAAI,GAAG,IAAI,CAACG,SAAS,CAACO,OAAO;IACzD;AACF","ignoreList":[0]}}, + {"offset": {"line": 9590, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/adapters/headers.ts"],"sourcesContent":["import type { IncomingHttpHeaders } from 'http'\n\nimport { ReflectAdapter } from './reflect'\n\n/**\n * @internal\n */\nexport class ReadonlyHeadersError extends Error {\n constructor() {\n super(\n 'Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers'\n )\n }\n\n public static callable() {\n throw new ReadonlyHeadersError()\n }\n}\n\nexport type ReadonlyHeaders = Headers & {\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n append(...args: any[]): void\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n set(...args: any[]): void\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n delete(...args: any[]): void\n}\n\n/**\n * The read methods that a sealed view provides itself instead of forwarding to\n * the underlying `Headers`. Deriving the type from `Headers` keeps the\n * implementations in step with the platform signatures.\n */\ntype SealedHeaderMethods = Pick<\n Headers,\n | 'get'\n | 'has'\n | 'getSetCookie'\n | 'keys'\n | 'values'\n | 'entries'\n | 'forEach'\n | typeof Symbol.iterator\n>\n\n/**\n * Builds the read methods for a sealed view that exposes all of `target`.\n */\nfunction createPassThroughMethods(\n target: Headers,\n sealed: ReadonlyHeaders\n): SealedHeaderMethods {\n return {\n get: target.get.bind(target),\n has: target.has.bind(target),\n getSetCookie: target.getSetCookie.bind(target),\n keys: target.keys.bind(target),\n values: target.values.bind(target),\n entries: target.entries.bind(target),\n [Symbol.iterator]: target[Symbol.iterator].bind(target),\n // The native method passes the unsealed target as the callback's `parent`\n // argument. That is a mutable handle on the underlying headers. Pass the\n // sealed view instead.\n forEach(callbackfn, thisArg) {\n for (const [name, value] of target.entries()) {\n callbackfn.call(thisArg, value, name, sealed)\n }\n },\n }\n}\n\n/**\n * Builds the read methods for a sealed view that omits the header names matched\n * by `isHidden`.\n */\nfunction createHidingMethods(\n target: Headers,\n sealed: ReadonlyHeaders,\n isHidden: (name: string) => boolean\n): SealedHeaderMethods {\n function* entries(): HeadersIterator<[string, string]> {\n for (const entry of target.entries()) {\n if (!isHidden(entry[0])) {\n yield entry\n }\n }\n }\n\n return {\n entries,\n [Symbol.iterator]: entries,\n get: (name) => (isHidden(name) ? null : target.get(name)),\n has: (name) => (isHidden(name) ? false : target.has(name)),\n getSetCookie: () => (isHidden('set-cookie') ? [] : target.getSetCookie()),\n *keys(): HeadersIterator {\n for (const name of target.keys()) {\n if (!isHidden(name)) {\n yield name\n }\n }\n },\n *values(): HeadersIterator {\n for (const [, value] of entries()) {\n yield value\n }\n },\n // The native method passes the unsealed target as the callback's `parent`\n // argument. That is a mutable handle on the underlying headers. Pass the\n // sealed view instead.\n forEach(callbackfn, thisArg) {\n for (const [name, value] of entries()) {\n callbackfn.call(thisArg, value, name, sealed)\n }\n },\n }\n}\n\nexport class HeadersAdapter extends Headers {\n private readonly headers: IncomingHttpHeaders\n\n constructor(headers: IncomingHttpHeaders) {\n // We've already overridden the methods that would be called, so we're just\n // calling the super constructor to ensure that the instanceof check works.\n super()\n\n this.headers = new Proxy(headers, {\n get(target, prop, receiver) {\n // Because this is just an object, we expect that all \"get\" operations\n // are for properties. If it's a \"get\" for a symbol, we'll just return\n // the symbol.\n if (typeof prop === 'symbol') {\n return ReflectAdapter.get(target, prop, receiver)\n }\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return undefined.\n if (typeof original === 'undefined') return\n\n // If the original casing exists, return the value.\n return ReflectAdapter.get(target, original, receiver)\n },\n set(target, prop, value, receiver) {\n if (typeof prop === 'symbol') {\n return ReflectAdapter.set(target, prop, value, receiver)\n }\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, use the prop as the key.\n return ReflectAdapter.set(target, original ?? prop, value, receiver)\n },\n has(target, prop) {\n if (typeof prop === 'symbol') return ReflectAdapter.has(target, prop)\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return false.\n if (typeof original === 'undefined') return false\n\n // If the original casing exists, return true.\n return ReflectAdapter.has(target, original)\n },\n deleteProperty(target, prop) {\n if (typeof prop === 'symbol')\n return ReflectAdapter.deleteProperty(target, prop)\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return true.\n if (typeof original === 'undefined') return true\n\n // If the original casing exists, delete the property.\n return ReflectAdapter.deleteProperty(target, original)\n },\n })\n }\n\n /**\n * Seals a Headers instance to prevent modification by throwing an error when\n * any mutating method is called.\n *\n * The sealed view stays live. Later writes to `headers` remain visible\n * through it.\n *\n * `hidden` omits the given header names from every read operation (`get`,\n * `has`, `getSetCookie`, `forEach`, and iteration). The names must be\n * lowercase. The underlying headers are neither copied nor mutated, so hidden\n * headers remain available to the framework.\n */\n public static seal(\n headers: Headers,\n hidden?: ReadonlySet\n ): ReadonlyHeaders {\n const isHidden =\n hidden && hidden.size > 0\n ? (name: string): boolean => hidden.has(name.toLowerCase())\n : null\n\n // The methods are built once per sealed view and reused, so repeated access\n // returns the same function instead of a fresh closure. They are assigned\n // after the proxy exists because `forEach` hands the proxy to its callback.\n // Creating the proxy runs no trap, so nothing can read them before then.\n let methods: SealedHeaderMethods\n\n const sealed: ReadonlyHeaders = new Proxy(headers, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'append':\n case 'delete':\n case 'set':\n return ReadonlyHeadersError.callable\n case Symbol.iterator:\n return methods[Symbol.iterator]\n case 'get':\n case 'has':\n case 'getSetCookie':\n case 'keys':\n case 'values':\n case 'entries':\n case 'forEach':\n return methods[prop]\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n\n methods = isHidden\n ? createHidingMethods(headers, sealed, isHidden)\n : createPassThroughMethods(headers, sealed)\n\n return sealed\n }\n\n /**\n * @param headers\n * @returns A fresh object identity backed by the original value\n */\n public static fresh(headers: ReadonlyHeaders): ReadonlyHeaders {\n return new Proxy(headers, {\n get(target, prop, receiver) {\n return ReflectAdapter.get(target, prop, receiver)\n },\n })\n }\n\n /**\n * Merges a header value into a string. This stores multiple values as an\n * array, so we need to merge them into a string.\n *\n * @param value a header value\n * @returns a merged header value (a string)\n */\n private merge(value: string | string[]): string {\n if (Array.isArray(value)) return value.join(', ')\n\n return value\n }\n\n /**\n * Creates a Headers instance from a plain object or a Headers instance.\n *\n * @param headers a plain object or a Headers instance\n * @returns a headers instance\n */\n public static from(headers: IncomingHttpHeaders | Headers): Headers {\n if (headers instanceof Headers) return headers\n\n return new HeadersAdapter(headers)\n }\n\n public append(name: string, value: string): void {\n const existing = this.headers[name]\n if (typeof existing === 'string') {\n this.headers[name] = [existing, value]\n } else if (Array.isArray(existing)) {\n existing.push(value)\n } else {\n this.headers[name] = value\n }\n }\n\n public delete(name: string): void {\n delete this.headers[name]\n }\n\n public get(name: string): string | null {\n const value = this.headers[name]\n if (typeof value !== 'undefined') return this.merge(value)\n\n return null\n }\n\n public has(name: string): boolean {\n return typeof this.headers[name] !== 'undefined'\n }\n\n public set(name: string, value: string): void {\n this.headers[name] = value\n }\n\n public forEach(\n callbackfn: (value: string, name: string, parent: Headers) => void,\n thisArg?: any\n ): void {\n for (const [name, value] of this.entries()) {\n callbackfn.call(thisArg, value, name, this)\n }\n }\n\n public *entries(): HeadersIterator<[string, string]> {\n for (const key of Object.keys(this.headers)) {\n const name = key.toLowerCase()\n // We assert here that this is a string because we got it from the\n // Object.keys() call above.\n const value = this.get(name) as string\n\n yield [name, value] as [string, string]\n }\n }\n\n public *keys(): HeadersIterator {\n for (const key of Object.keys(this.headers)) {\n const name = key.toLowerCase()\n yield name\n }\n }\n\n public *values(): HeadersIterator {\n for (const key of Object.keys(this.headers)) {\n // We assert here that this is a string because we got it from the\n // Object.keys() call above.\n const value = this.get(key) as string\n\n yield value\n }\n }\n\n public [Symbol.iterator](): HeadersIterator<[string, string]> {\n return this.entries()\n }\n}\n"],"names":["ReflectAdapter","ReadonlyHeadersError","Error","constructor","callable","createPassThroughMethods","target","sealed","get","bind","has","getSetCookie","keys","values","entries","Symbol","iterator","forEach","callbackfn","thisArg","name","value","call","createHidingMethods","isHidden","entry","HeadersAdapter","Headers","headers","Proxy","prop","receiver","lowercased","toLowerCase","original","Object","find","o","set","deleteProperty","seal","hidden","size","methods","fresh","merge","Array","isArray","join","from","append","existing","push","delete","key"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 9865, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/adapters/next-request.ts"],"sourcesContent":["import type { BaseNextRequest } from '../../../base-http'\nimport type { NodeNextRequest } from '../../../base-http/node'\nimport type { WebNextRequest } from '../../../base-http/web'\nimport type { Writable } from 'node:stream'\n\nimport { getRequestMeta } from '../../../request-meta'\nimport { fromNodeOutgoingHttpHeaders } from '../../utils'\nimport { NextRequest } from '../request'\nimport { isNodeNextRequest, isWebNextRequest } from '../../../base-http/helpers'\n\nexport const ResponseAbortedName = 'ResponseAborted'\nexport class ResponseAborted extends Error {\n public readonly name = ResponseAbortedName\n}\n\n/**\n * Creates an AbortController tied to the closing of a ServerResponse (or other\n * appropriate Writable).\n *\n * If the `close` event is fired before the `finish` event, then we'll send the\n * `abort` signal.\n */\nexport function createAbortController(response: Writable): AbortController {\n const controller = new AbortController()\n\n // If `finish` fires first, then `res.end()` has been called and the close is\n // just us finishing the stream on our side. If `close` fires first, then we\n // know the client disconnected before we finished.\n response.once('close', () => {\n if (response.writableFinished) return\n\n controller.abort(new ResponseAborted())\n })\n\n return controller\n}\n\n/**\n * Creates an AbortSignal tied to the closing of a ServerResponse (or other\n * appropriate Writable).\n *\n * This cannot be done with the request (IncomingMessage or Readable) because\n * the `abort` event will not fire if to data has been fully read (because that\n * will \"close\" the readable stream and nothing fires after that).\n */\nexport function signalFromNodeResponse(response: Writable): AbortSignal {\n const { errored, destroyed } = response\n if (errored || destroyed) {\n return AbortSignal.abort(errored ?? new ResponseAborted())\n }\n\n const { signal } = createAbortController(response)\n return signal\n}\n\nexport class NextRequestAdapter {\n public static fromBaseNextRequest(\n request: BaseNextRequest,\n signal: AbortSignal\n ): NextRequest {\n if (\n // The type check here ensures that `req` is correctly typed, and the\n // environment variable check provides dead code elimination.\n process.env.NEXT_RUNTIME === 'edge' &&\n isWebNextRequest(request)\n ) {\n return NextRequestAdapter.fromWebNextRequest(request)\n } else if (\n // The type check here ensures that `req` is correctly typed, and the\n // environment variable check provides dead code elimination.\n process.env.NEXT_RUNTIME !== 'edge' &&\n isNodeNextRequest(request)\n ) {\n return NextRequestAdapter.fromNodeNextRequest(request, signal)\n } else {\n throw new Error('Invariant: Unsupported NextRequest type')\n }\n }\n\n public static fromNodeNextRequest(\n request: NodeNextRequest,\n signal: AbortSignal\n ): NextRequest {\n // HEAD and GET requests can not have a body.\n let body: BodyInit | null = null\n if (request.method !== 'GET' && request.method !== 'HEAD' && request.body) {\n // @ts-expect-error - this is handled by undici, when streams/web land use it instead\n body = request.body\n }\n\n let url: URL\n if (request.url.startsWith('http')) {\n url = new URL(request.url)\n } else {\n // Grab the full URL from the request metadata.\n const base = getRequestMeta(request, 'initURL')\n if (!base || !base.startsWith('http')) {\n // Because the URL construction relies on the fact that the URL provided\n // is absolute, we need to provide a base URL. We can't use the request\n // URL because it's relative, so we use a dummy URL instead.\n url = new URL(request.url, 'http://n')\n } else {\n url = new URL(request.url, base)\n }\n }\n\n return new NextRequest(url, {\n method: request.method,\n headers: fromNodeOutgoingHttpHeaders(request.headers),\n duplex: 'half',\n signal,\n // geo\n // ip\n // nextConfig\n\n // body can not be passed if request was aborted\n // or we get a Request body was disturbed error\n ...(signal.aborted\n ? {}\n : {\n body,\n }),\n })\n }\n\n public static fromWebNextRequest(request: WebNextRequest): NextRequest {\n // HEAD and GET requests can not have a body.\n let body: ReadableStream | null = null\n if (request.method !== 'GET' && request.method !== 'HEAD') {\n body = request.body\n }\n\n return new NextRequest(request.url, {\n method: request.method,\n headers: fromNodeOutgoingHttpHeaders(request.headers),\n duplex: 'half',\n signal: request.request.signal,\n // geo\n // ip\n // nextConfig\n\n // body can not be passed if request was aborted\n // or we get a Request body was disturbed error\n ...(request.request.signal.aborted\n ? {}\n : {\n body,\n }),\n })\n }\n}\n"],"names":["getRequestMeta","fromNodeOutgoingHttpHeaders","NextRequest","isNodeNextRequest","isWebNextRequest","ResponseAbortedName","ResponseAborted","Error","name","createAbortController","response","controller","AbortController","once","writableFinished","abort","signalFromNodeResponse","errored","destroyed","AbortSignal","signal","NextRequestAdapter","fromBaseNextRequest","request","process","env","NEXT_RUNTIME","fromWebNextRequest","fromNodeNextRequest","body","method","url","startsWith","URL","base","headers","duplex","aborted"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 9985, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/adapters/reflect.ts"],"sourcesContent":["export class ReflectAdapter {\n static get(\n target: T,\n prop: string | symbol,\n receiver: unknown\n ): any {\n const value = Reflect.get(target, prop, receiver)\n if (typeof value === 'function') {\n return value.bind(target)\n }\n\n return value\n }\n\n static set(\n target: T,\n prop: string | symbol,\n value: any,\n receiver: any\n ): boolean {\n return Reflect.set(target, prop, value, receiver)\n }\n\n static has(target: T, prop: string | symbol): boolean {\n return Reflect.has(target, prop)\n }\n\n static deleteProperty(\n target: T,\n prop: string | symbol\n ): boolean {\n return Reflect.deleteProperty(target, prop)\n }\n}\n"],"names":["ReflectAdapter","get","target","prop","receiver","value","Reflect","bind","set","has","deleteProperty"],"mappings":";;;;AAAO,MAAMA;IACX,OAAOC,IACLC,MAAS,EACTC,IAAqB,EACrBC,QAAiB,EACZ;QACL,MAAMC,QAAQC,QAAQL,GAAG,CAACC,QAAQC,MAAMC;QACxC,IAAI,OAAOC,UAAU,YAAY;YAC/B,OAAOA,MAAME,IAAI,CAACL;QACpB;QAEA,OAAOG;IACT;IAEA,OAAOG,IACLN,MAAS,EACTC,IAAqB,EACrBE,KAAU,EACVD,QAAa,EACJ;QACT,OAAOE,QAAQE,GAAG,CAACN,QAAQC,MAAME,OAAOD;IAC1C;IAEA,OAAOK,IAAsBP,MAAS,EAAEC,IAAqB,EAAW;QACtE,OAAOG,QAAQG,GAAG,CAACP,QAAQC;IAC7B;IAEA,OAAOO,eACLR,MAAS,EACTC,IAAqB,EACZ;QACT,OAAOG,QAAQI,cAAc,CAACR,QAAQC;IACxC;AACF","ignoreList":[0]}}, + {"offset": {"line": 10011, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/cookies.ts"],"sourcesContent":["export {\n RequestCookies,\n ResponseCookies,\n stringifyCookie,\n} from 'next/dist/compiled/@edge-runtime/cookies'\n"],"names":["RequestCookies","ResponseCookies","stringifyCookie"],"mappings":";AAAA,SACEA,cAAc,EACdC,eAAe,EACfC,eAAe,QACV,2CAA0C","ignoreList":[0]}}, + {"offset": {"line": 10018, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/request.ts"],"sourcesContent":["import type { I18NConfig } from '../../config-shared'\nimport { NextURL } from '../next-url'\nimport { toNodeOutgoingHttpHeaders, validateURL } from '../utils'\nimport { RemovedUAError, RemovedPageError } from '../error'\nimport { RequestCookies } from './cookies'\n\nexport const INTERNALS = Symbol('internal request')\n\n/**\n * This class extends the [Web `Request` API](https://developer.mozilla.org/docs/Web/API/Request) with additional convenience methods.\n *\n * Read more: [Next.js Docs: `NextRequest`](https://nextjs.org/docs/app/api-reference/functions/next-request)\n */\nexport class NextRequest extends Request {\n /** @internal */\n [INTERNALS]: {\n cookies: RequestCookies\n url: string\n nextUrl: NextURL\n }\n\n constructor(input: URL | RequestInfo, init: RequestInit = {}) {\n const url =\n typeof input !== 'string' && 'url' in input ? input.url : String(input)\n\n validateURL(url)\n\n // node Request instance requires duplex option when a body\n // is present or it errors, we don't handle this for\n // Request being passed in since it would have already\n // errored if this wasn't configured\n if (process.env.NEXT_RUNTIME !== 'edge') {\n if (init.body && init.duplex !== 'half') {\n init.duplex = 'half'\n }\n }\n\n if (input instanceof Request) super(input, init)\n else super(url, init)\n\n const nextUrl = new NextURL(url, {\n headers: toNodeOutgoingHttpHeaders(this.headers),\n nextConfig: init.nextConfig,\n })\n this[INTERNALS] = {\n cookies: new RequestCookies(this.headers),\n nextUrl,\n url: process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE\n ? url\n : nextUrl.toString(),\n }\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n cookies: this.cookies,\n nextUrl: this.nextUrl,\n url: this.url,\n // rest of props come from Request\n bodyUsed: this.bodyUsed,\n cache: this.cache,\n credentials: this.credentials,\n destination: this.destination,\n headers: Object.fromEntries(this.headers),\n integrity: this.integrity,\n keepalive: this.keepalive,\n method: this.method,\n mode: this.mode,\n redirect: this.redirect,\n referrer: this.referrer,\n referrerPolicy: this.referrerPolicy,\n signal: this.signal,\n }\n }\n\n public get cookies() {\n return this[INTERNALS].cookies\n }\n\n public get nextUrl() {\n return this[INTERNALS].nextUrl\n }\n\n /**\n * @deprecated\n * `page` has been deprecated in favour of `URLPattern`.\n * Read more: https://nextjs.org/docs/messages/middleware-request-page\n */\n public get page() {\n throw new RemovedPageError()\n }\n\n /**\n * @deprecated\n * `ua` has been removed in favour of \\`userAgent\\` function.\n * Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent\n */\n public get ua() {\n throw new RemovedUAError()\n }\n\n public get url() {\n return this[INTERNALS].url\n }\n}\n\nexport interface RequestInit extends globalThis.RequestInit {\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig | null\n trailingSlash?: boolean\n }\n signal?: AbortSignal\n // see https://github.com/whatwg/fetch/pull/1457\n duplex?: 'half'\n}\n"],"names":["NextURL","toNodeOutgoingHttpHeaders","validateURL","RemovedUAError","RemovedPageError","RequestCookies","INTERNALS","Symbol","NextRequest","Request","constructor","input","init","url","String","process","env","NEXT_RUNTIME","body","duplex","nextUrl","headers","nextConfig","cookies","__NEXT_NO_MIDDLEWARE_URL_NORMALIZE","toString","for","bodyUsed","cache","credentials","destination","Object","fromEntries","integrity","keepalive","method","mode","redirect","referrer","referrerPolicy","signal","page","ua"],"mappings":";;;;;;AACA,SAASA,OAAO,QAAQ,cAAa;AACrC,SAASC,yBAAyB,EAAEC,WAAW,QAAQ,WAAU;AACjE,SAASC,cAAc,EAAEC,gBAAgB,QAAQ,WAAU;;AAC3D,SAASC,cAAc,QAAQ,YAAW;;;;;AAEnC,MAAMC,YAAYC,OAAO,oBAAmB;AAO5C,MAAMC,oBAAoBC;IAQ/BC,YAAYC,KAAwB,EAAEC,OAAoB,CAAC,CAAC,CAAE;QAC5D,MAAMC,MACJ,OAAOF,UAAU,YAAY,SAASA,QAAQA,MAAME,GAAG,GAAGC,OAAOH;YAEnET,8KAAAA,EAAYW;QAEZ,2DAA2D;QAC3D,oDAAoD;QACpD,sDAAsD;QACtD,oCAAoC;QACpC,IAAIE,QAAQC,GAAG,CAACC,YAAY,KAAK,OAAQ;YACvC,IAAIL,KAAKM,IAAI,IAAIN,KAAKO,MAAM,KAAK,QAAQ;gBACvCP,KAAKO,MAAM,GAAG;YAChB;QACF;QAEA,IAAIR,iBAAiBF,SAAS,KAAK,CAACE,OAAOC;aACtC,KAAK,CAACC,KAAKD;QAEhB,MAAMQ,UAAU,IAAIpB,gLAAAA,CAAQa,KAAK;YAC/BQ,aAASpB,4LAAAA,EAA0B,IAAI,CAACoB,OAAO;YAC/CC,YAAYV,KAAKU,UAAU;QAC7B;QACA,IAAI,CAAChB,UAAU,GAAG;YAChBiB,SAAS,IAAIlB,qMAAAA,CAAe,IAAI,CAACgB,OAAO;YACxCD;YACAP,KAAKE,QAAQC,GAAG,CAACQ,0BACbX,QAD+C,kBAE/CO,QAAQK,QAAQ;QACtB;IACF;IAEA,CAAClB,OAAOmB,GAAG,CAAC,+BAA+B,GAAG;QAC5C,OAAO;YACLH,SAAS,IAAI,CAACA,OAAO;YACrBH,SAAS,IAAI,CAACA,OAAO;YACrBP,KAAK,IAAI,CAACA,GAAG;YACb,kCAAkC;YAClCc,UAAU,IAAI,CAACA,QAAQ;YACvBC,OAAO,IAAI,CAACA,KAAK;YACjBC,aAAa,IAAI,CAACA,WAAW;YAC7BC,aAAa,IAAI,CAACA,WAAW;YAC7BT,SAASU,OAAOC,WAAW,CAAC,IAAI,CAACX,OAAO;YACxCY,WAAW,IAAI,CAACA,SAAS;YACzBC,WAAW,IAAI,CAACA,SAAS;YACzBC,QAAQ,IAAI,CAACA,MAAM;YACnBC,MAAM,IAAI,CAACA,IAAI;YACfC,UAAU,IAAI,CAACA,QAAQ;YACvBC,UAAU,IAAI,CAACA,QAAQ;YACvBC,gBAAgB,IAAI,CAACA,cAAc;YACnCC,QAAQ,IAAI,CAACA,MAAM;QACrB;IACF;IAEA,IAAWjB,UAAU;QACnB,OAAO,IAAI,CAACjB,UAAU,CAACiB,OAAO;IAChC;IAEA,IAAWH,UAAU;QACnB,OAAO,IAAI,CAACd,UAAU,CAACc,OAAO;IAChC;IAEA;;;;GAIC,GACD,IAAWqB,OAAO;QAChB,MAAM,IAAIrC,mLAAAA;IACZ;IAEA;;;;GAIC,GACD,IAAWsC,KAAK;QACd,MAAM,IAAIvC,iLAAAA;IACZ;IAEA,IAAWU,MAAM;QACf,OAAO,IAAI,CAACP,UAAU,CAACO,GAAG;IAC5B;AACF","ignoreList":[0]}}, + {"offset": {"line": 10108, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/utils.ts"],"sourcesContent":["import type { OutgoingHttpHeaders } from 'http'\nimport {\n NEXT_INTERCEPTION_MARKER_PREFIX,\n NEXT_QUERY_PARAM_PREFIX,\n} from '../../lib/constants'\n\n/**\n * Converts a Node.js IncomingHttpHeaders object to a Headers object. Any\n * headers with multiple values will be joined with a comma and space. Any\n * headers that have an undefined value will be ignored and others will be\n * coerced to strings.\n *\n * @param nodeHeaders the headers object to convert\n * @returns the converted headers object\n */\nexport function fromNodeOutgoingHttpHeaders(\n nodeHeaders: OutgoingHttpHeaders\n): Headers {\n const headers = new Headers()\n for (let [key, value] of Object.entries(nodeHeaders)) {\n const values = Array.isArray(value) ? value : [value]\n for (let v of values) {\n if (typeof v === 'undefined') continue\n if (typeof v === 'number') {\n v = v.toString()\n }\n\n headers.append(key, v)\n }\n }\n return headers\n}\n\n/*\n Set-Cookie header field-values are sometimes comma joined in one string. This splits them without choking on commas\n that are within a single set-cookie field-value, such as in the Expires portion.\n This is uncommon, but explicitly allowed - see https://tools.ietf.org/html/rfc2616#section-4.2\n Node.js does this for every header *except* set-cookie - see https://github.com/nodejs/node/blob/d5e363b77ebaf1caf67cd7528224b651c86815c1/lib/_http_incoming.js#L128\n React Native's fetch does this for *every* header, including set-cookie.\n \n Based on: https://github.com/google/j2objc/commit/16820fdbc8f76ca0c33472810ce0cb03d20efe25\n Credits to: https://github.com/tomball for original and https://github.com/chrusart for JavaScript implementation\n*/\nexport function splitCookiesString(cookiesString: string) {\n var cookiesStrings = []\n var pos = 0\n var start\n var ch\n var lastComma\n var nextStart\n var cookiesSeparatorFound\n\n function skipWhitespace() {\n while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n pos += 1\n }\n return pos < cookiesString.length\n }\n\n function notSpecialChar() {\n ch = cookiesString.charAt(pos)\n\n return ch !== '=' && ch !== ';' && ch !== ','\n }\n\n while (pos < cookiesString.length) {\n start = pos\n cookiesSeparatorFound = false\n\n while (skipWhitespace()) {\n ch = cookiesString.charAt(pos)\n if (ch === ',') {\n // ',' is a cookie separator if we have later first '=', not ';' or ','\n lastComma = pos\n pos += 1\n\n skipWhitespace()\n nextStart = pos\n\n while (pos < cookiesString.length && notSpecialChar()) {\n pos += 1\n }\n\n // currently special character\n if (pos < cookiesString.length && cookiesString.charAt(pos) === '=') {\n // we found cookies separator\n cookiesSeparatorFound = true\n // pos is inside the next cookie, so back up and return it.\n pos = nextStart\n cookiesStrings.push(cookiesString.substring(start, lastComma))\n start = pos\n } else {\n // in param ',' or param separator ';',\n // we continue from that comma\n pos = lastComma + 1\n }\n } else {\n pos += 1\n }\n }\n\n if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n cookiesStrings.push(cookiesString.substring(start, cookiesString.length))\n }\n }\n\n return cookiesStrings\n}\n\n/**\n * Converts a Headers object to a Node.js OutgoingHttpHeaders object. This is\n * required to support the set-cookie header, which may have multiple values.\n *\n * @param headers the headers object to convert\n * @returns the converted headers object\n */\nexport function toNodeOutgoingHttpHeaders(\n headers: Headers\n): OutgoingHttpHeaders {\n const nodeHeaders: OutgoingHttpHeaders = {}\n const cookies: string[] = []\n if (headers) {\n for (const [key, value] of headers.entries()) {\n if (key.toLowerCase() === 'set-cookie') {\n // We may have gotten a comma joined string of cookies, or multiple\n // set-cookie headers. We need to merge them into one header array\n // to represent all the cookies.\n cookies.push(...splitCookiesString(value))\n nodeHeaders[key] = cookies.length === 1 ? cookies[0] : cookies\n } else {\n nodeHeaders[key] = value\n }\n }\n }\n return nodeHeaders\n}\n\n/**\n * Validate the correctness of a user-provided URL.\n */\nexport function validateURL(url: string | URL): string {\n try {\n return String(new URL(String(url)))\n } catch (error: any) {\n throw new Error(\n `URL is malformed \"${String(\n url\n )}\". Please use only absolute URLs - https://nextjs.org/docs/messages/middleware-relative-urls`,\n { cause: error }\n )\n }\n}\n\n/**\n * Normalizes `nxtP` and `nxtI` query param values to remove the prefix.\n * This function does not mutate the input key.\n */\nexport function normalizeNextQueryParam(key: string): null | string {\n const prefixes = [NEXT_QUERY_PARAM_PREFIX, NEXT_INTERCEPTION_MARKER_PREFIX]\n for (const prefix of prefixes) {\n if (key !== prefix && key.startsWith(prefix)) {\n return key.substring(prefix.length)\n }\n }\n return null\n}\n"],"names":["NEXT_INTERCEPTION_MARKER_PREFIX","NEXT_QUERY_PARAM_PREFIX","fromNodeOutgoingHttpHeaders","nodeHeaders","headers","Headers","key","value","Object","entries","values","Array","isArray","v","toString","append","splitCookiesString","cookiesString","cookiesStrings","pos","start","ch","lastComma","nextStart","cookiesSeparatorFound","skipWhitespace","length","test","charAt","notSpecialChar","push","substring","toNodeOutgoingHttpHeaders","cookies","toLowerCase","validateURL","url","String","URL","error","Error","cause","normalizeNextQueryParam","prefixes","prefix","startsWith"],"mappings":";;;;;;;;;;;;AACA,SACEA,+BAA+B,EAC/BC,uBAAuB,QAClB,sBAAqB;;AAWrB,SAASC,4BACdC,WAAgC;IAEhC,MAAMC,UAAU,IAAIC;IACpB,KAAK,IAAI,CAACC,KAAKC,MAAM,IAAIC,OAAOC,OAAO,CAACN,aAAc;QACpD,MAAMO,SAASC,MAAMC,OAAO,CAACL,SAASA,QAAQ;YAACA;SAAM;QACrD,KAAK,IAAIM,KAAKH,OAAQ;YACpB,IAAI,OAAOG,MAAM,aAAa;YAC9B,IAAI,OAAOA,MAAM,UAAU;gBACzBA,IAAIA,EAAEC,QAAQ;YAChB;YAEAV,QAAQW,MAAM,CAACT,KAAKO;QACtB;IACF;IACA,OAAOT;AACT;AAYO,SAASY,mBAAmBC,aAAqB;IACtD,IAAIC,iBAAiB,EAAE;IACvB,IAAIC,MAAM;IACV,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IACJ,IAAIC;IAEJ,SAASC;QACP,MAAON,MAAMF,cAAcS,MAAM,IAAI,KAAKC,IAAI,CAACV,cAAcW,MAAM,CAACT,MAAO;YACzEA,OAAO;QACT;QACA,OAAOA,MAAMF,cAAcS,MAAM;IACnC;IAEA,SAASG;QACPR,KAAKJ,cAAcW,MAAM,CAACT;QAE1B,OAAOE,OAAO,OAAOA,OAAO,OAAOA,OAAO;IAC5C;IAEA,MAAOF,MAAMF,cAAcS,MAAM,CAAE;QACjCN,QAAQD;QACRK,wBAAwB;QAExB,MAAOC,iBAAkB;YACvBJ,KAAKJ,cAAcW,MAAM,CAACT;YAC1B,IAAIE,OAAO,KAAK;gBACd,uEAAuE;gBACvEC,YAAYH;gBACZA,OAAO;gBAEPM;gBACAF,YAAYJ;gBAEZ,MAAOA,MAAMF,cAAcS,MAAM,IAAIG,iBAAkB;oBACrDV,OAAO;gBACT;gBAEA,8BAA8B;gBAC9B,IAAIA,MAAMF,cAAcS,MAAM,IAAIT,cAAcW,MAAM,CAACT,SAAS,KAAK;oBACnE,6BAA6B;oBAC7BK,wBAAwB;oBACxB,2DAA2D;oBAC3DL,MAAMI;oBACNL,eAAeY,IAAI,CAACb,cAAcc,SAAS,CAACX,OAAOE;oBACnDF,QAAQD;gBACV,OAAO;oBACL,uCAAuC;oBACvC,8BAA8B;oBAC9BA,MAAMG,YAAY;gBACpB;YACF,OAAO;gBACLH,OAAO;YACT;QACF;QAEA,IAAI,CAACK,yBAAyBL,OAAOF,cAAcS,MAAM,EAAE;YACzDR,eAAeY,IAAI,CAACb,cAAcc,SAAS,CAACX,OAAOH,cAAcS,MAAM;QACzE;IACF;IAEA,OAAOR;AACT;AASO,SAASc,0BACd5B,OAAgB;IAEhB,MAAMD,cAAmC,CAAC;IAC1C,MAAM8B,UAAoB,EAAE;IAC5B,IAAI7B,SAAS;QACX,KAAK,MAAM,CAACE,KAAKC,MAAM,IAAIH,QAAQK,OAAO,GAAI;YAC5C,IAAIH,IAAI4B,WAAW,OAAO,cAAc;gBACtC,mEAAmE;gBACnE,kEAAkE;gBAClE,gCAAgC;gBAChCD,QAAQH,IAAI,IAAId,mBAAmBT;gBACnCJ,WAAW,CAACG,IAAI,GAAG2B,QAAQP,MAAM,KAAK,IAAIO,OAAO,CAAC,EAAE,GAAGA;YACzD,OAAO;gBACL9B,WAAW,CAACG,IAAI,GAAGC;YACrB;QACF;IACF;IACA,OAAOJ;AACT;AAKO,SAASgC,YAAYC,GAAiB;IAC3C,IAAI;QACF,OAAOC,OAAO,IAAIC,IAAID,OAAOD;IAC/B,EAAE,OAAOG,OAAY;QACnB,MAAM,IAAIC,MACR,CAAC,kBAAkB,EAAEH,OACnBD,KACA,4FAA4F,CAAC,EAC/F;YAAEK,OAAOF;QAAM;IAEnB;AACF;AAMO,SAASG,wBAAwBpC,GAAW;IACjD,MAAMqC,WAAW;QAAC1C,oLAAAA;QAAyBD,4LAAAA;KAAgC;IAC3E,KAAK,MAAM4C,UAAUD,SAAU;QAC7B,IAAIrC,QAAQsC,UAAUtC,IAAIuC,UAAU,CAACD,SAAS;YAC5C,OAAOtC,IAAIyB,SAAS,CAACa,OAAOlB,MAAM;QACpC;IACF;IACA,OAAO;AACT","ignoreList":[0]}}, + {"offset": {"line": 10236, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/errors/constants.ts"],"sourcesContent":["export const MISSING_ROOT_TAGS_ERROR = 'NEXT_MISSING_ROOT_TAGS'\n"],"names":["MISSING_ROOT_TAGS_ERROR"],"mappings":";;;;AAAO,MAAMA,0BAA0B,yBAAwB","ignoreList":[0]}}, + {"offset": {"line": 10245, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/get-hostname.ts"],"sourcesContent":["import type { OutgoingHttpHeaders } from 'http'\n\n/**\n * Takes an object with a hostname property (like a parsed URL) and some\n * headers that may contain Host and returns the preferred hostname.\n * @param parsed An object containing a hostname property.\n * @param headers A dictionary with headers containing a `host`.\n */\nexport function getHostname(\n parsed: { hostname?: string | null },\n headers?: OutgoingHttpHeaders\n): string | undefined {\n // Get the hostname from the headers if it exists, otherwise use the parsed\n // hostname.\n let hostname: string\n if (headers?.host && !Array.isArray(headers.host)) {\n hostname = headers.host.toString().split(':', 1)[0]\n } else if (parsed.hostname) {\n hostname = parsed.hostname\n } else return\n\n return hostname.toLowerCase()\n}\n"],"names":["getHostname","parsed","headers","hostname","host","Array","isArray","toString","split","toLowerCase"],"mappings":"AAEA;;;;;CAKC,GACD;;;;AAAO,SAASA,YACdC,MAAoC,EACpCC,OAA6B;IAE7B,2EAA2E;IAC3E,YAAY;IACZ,IAAIC;IACJ,IAAID,SAASE,QAAQ,CAACC,MAAMC,OAAO,CAACJ,QAAQE,IAAI,GAAG;QACjDD,WAAWD,QAAQE,IAAI,CAACG,QAAQ,GAAGC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE;IACrD,OAAO,IAAIP,OAAOE,QAAQ,EAAE;QAC1BA,WAAWF,OAAOE,QAAQ;IAC5B,OAAO;IAEP,OAAOA,SAASM,WAAW;AAC7B","ignoreList":[0]}}, + {"offset": {"line": 10269, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/hash.ts"],"sourcesContent":["// http://www.cse.yorku.ca/~oz/hash.html\n// More specifically, 32-bit hash via djbxor\n// (ref: https://gist.github.com/eplawless/52813b1d8ad9af510d85?permalink_comment_id=3367765#gistcomment-3367765)\n// This is due to number type differences between rust for turbopack to js number types,\n// where rust does not have easy way to repreesnt js's 53-bit float number type for the matching\n// overflow behavior. This is more `correct` in terms of having canonical hash across different runtime / implementation\n// as can gaurantee determinstic output from 32bit hash.\nexport function djb2Hash(str: string) {\n let hash = 5381\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i)\n hash = ((hash << 5) + hash + char) & 0xffffffff\n }\n return hash >>> 0\n}\n\nexport function hexHash(str: string) {\n return djb2Hash(str).toString(36).slice(0, 5)\n}\n"],"names":["djb2Hash","str","hash","i","length","char","charCodeAt","hexHash","toString","slice"],"mappings":"AAAA,wCAAwC;AACxC,4CAA4C;AAC5C,iHAAiH;AACjH,wFAAwF;AACxF,gGAAgG;AAChG,wHAAwH;AACxH,wDAAwD;;;;;;;AACjD,SAASA,SAASC,GAAW;IAClC,IAAIC,OAAO;IACX,IAAK,IAAIC,IAAI,GAAGA,IAAIF,IAAIG,MAAM,EAAED,IAAK;QACnC,MAAME,OAAOJ,IAAIK,UAAU,CAACH;QAC5BD,OAASA,CAAAA,QAAQ,CAAA,IAAKA,OAAOG,OAAQ;IACvC;IACA,OAAOH,SAAS;AAClB;AAEO,SAASK,QAAQN,GAAW;IACjC,OAAOD,SAASC,KAAKO,QAAQ,CAAC,IAAIC,KAAK,CAAC,GAAG;AAC7C","ignoreList":[0]}}, + {"offset": {"line": 10297, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/i18n/detect-domain-locale.ts"],"sourcesContent":["import type { DomainLocale } from '../../../server/config-shared'\n\nexport function detectDomainLocale(\n domainItems?: readonly DomainLocale[],\n hostname?: string,\n detectedLocale?: string\n) {\n if (!domainItems) return\n\n if (detectedLocale) {\n detectedLocale = detectedLocale.toLowerCase()\n }\n\n for (const item of domainItems) {\n // remove port if present\n const domainHostname = item.domain?.split(':', 1)[0].toLowerCase()\n if (\n hostname === domainHostname ||\n detectedLocale === item.defaultLocale.toLowerCase() ||\n item.locales?.some((locale) => locale.toLowerCase() === detectedLocale)\n ) {\n return item\n }\n }\n}\n"],"names":["detectDomainLocale","domainItems","hostname","detectedLocale","toLowerCase","item","domainHostname","domain","split","defaultLocale","locales","some","locale"],"mappings":";;;;AAEO,SAASA,mBACdC,WAAqC,EACrCC,QAAiB,EACjBC,cAAuB;IAEvB,IAAI,CAACF,aAAa;IAElB,IAAIE,gBAAgB;QAClBA,iBAAiBA,eAAeC,WAAW;IAC7C;IAEA,KAAK,MAAMC,QAAQJ,YAAa;QAC9B,yBAAyB;QACzB,MAAMK,iBAAiBD,KAAKE,MAAM,EAAEC,MAAM,KAAK,EAAE,CAAC,EAAE,CAACJ;QACrD,IACEF,aAAaI,kBACbH,mBAAmBE,KAAKI,aAAa,CAACL,WAAW,MACjDC,KAAKK,OAAO,EAAEC,KAAK,CAACC,SAAWA,OAAOR,WAAW,OAAOD,iBACxD;YACA,OAAOE;QACT;IACF;AACF","ignoreList":[0]}}, + {"offset": {"line": 10318, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/i18n/normalize-locale-path.ts"],"sourcesContent":["export interface PathLocale {\n detectedLocale?: string\n pathname: string\n}\n\n/**\n * A cache of lowercased locales for each list of locales. This is stored as a\n * WeakMap so if the locales are garbage collected, the cache entry will be\n * removed as well.\n */\nconst cache = new WeakMap()\n\n/**\n * For a pathname that may include a locale from a list of locales, it\n * removes the locale from the pathname returning it alongside with the\n * detected locale.\n *\n * @param pathname A pathname that may include a locale.\n * @param locales A list of locales.\n * @returns The detected locale and pathname without locale\n */\nexport function normalizeLocalePath(\n pathname: string,\n locales?: readonly string[]\n): PathLocale {\n // If locales is undefined, return the pathname as is.\n if (!locales) return { pathname }\n\n // Get the cached lowercased locales or create a new cache entry.\n let lowercasedLocales = cache.get(locales)\n if (!lowercasedLocales) {\n lowercasedLocales = locales.map((locale) => locale.toLowerCase())\n cache.set(locales, lowercasedLocales)\n }\n\n let detectedLocale: string | undefined\n\n // The first segment will be empty, because it has a leading `/`. If\n // there is no further segment, there is no locale (or it's the default).\n const segments = pathname.split('/', 2)\n\n // If there's no second segment (ie, the pathname is just `/`), there's no\n // locale.\n if (!segments[1]) return { pathname }\n\n // The second segment will contain the locale part if any.\n const segment = segments[1].toLowerCase()\n\n // See if the segment matches one of the locales. If it doesn't, there is\n // no locale (or it's the default).\n const index = lowercasedLocales.indexOf(segment)\n if (index < 0) return { pathname }\n\n // Return the case-sensitive locale.\n detectedLocale = locales[index]\n\n // Remove the `/${locale}` part of the pathname.\n pathname = pathname.slice(detectedLocale.length + 1) || '/'\n\n return { pathname, detectedLocale }\n}\n"],"names":["cache","WeakMap","normalizeLocalePath","pathname","locales","lowercasedLocales","get","map","locale","toLowerCase","set","detectedLocale","segments","split","segment","index","indexOf","slice","length"],"mappings":";;;;AAKA;;;;CAIC,GACD,MAAMA,QAAQ,IAAIC;AAWX,SAASC,oBACdC,QAAgB,EAChBC,OAA2B;IAE3B,sDAAsD;IACtD,IAAI,CAACA,SAAS,OAAO;QAAED;IAAS;IAEhC,iEAAiE;IACjE,IAAIE,oBAAoBL,MAAMM,GAAG,CAACF;IAClC,IAAI,CAACC,mBAAmB;QACtBA,oBAAoBD,QAAQG,GAAG,CAAC,CAACC,SAAWA,OAAOC,WAAW;QAC9DT,MAAMU,GAAG,CAACN,SAASC;IACrB;IAEA,IAAIM;IAEJ,oEAAoE;IACpE,yEAAyE;IACzE,MAAMC,WAAWT,SAASU,KAAK,CAAC,KAAK;IAErC,0EAA0E;IAC1E,UAAU;IACV,IAAI,CAACD,QAAQ,CAAC,EAAE,EAAE,OAAO;QAAET;IAAS;IAEpC,0DAA0D;IAC1D,MAAMW,UAAUF,QAAQ,CAAC,EAAE,CAACH,WAAW;IAEvC,yEAAyE;IACzE,mCAAmC;IACnC,MAAMM,QAAQV,kBAAkBW,OAAO,CAACF;IACxC,IAAIC,QAAQ,GAAG,OAAO;QAAEZ;IAAS;IAEjC,oCAAoC;IACpCQ,iBAAiBP,OAAO,CAACW,MAAM;IAE/B,gDAAgD;IAChDZ,WAAWA,SAASc,KAAK,CAACN,eAAeO,MAAM,GAAG,MAAM;IAExD,OAAO;QAAEf;QAAUQ;IAAe;AACpC","ignoreList":[0]}}, + {"offset": {"line": 10368, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/instant-messages.ts"],"sourcesContent":["export function createUnrenderedSegmentError(\n route: string,\n missingFiles: readonly string[]\n): Error {\n let message = `Route \"${route}\": Could not validate that a segment in your UI has instant navigation.`\n if (missingFiles.length > 0) {\n const label =\n missingFiles.length === 1 ? 'Dropped segment' : 'Dropped segments'\n message +=\n `\\n\\nThis segment was dropped from rendering. Issues that would prevent instant navigation will go undetected.` +\n `\\n\\n${label}:\\n${missingFiles.map((p) => ` ${p}`).join('\\n')}` +\n `\\n\\nWays to fix this:` +\n `\\n - [render] Render the dropped segment` +\n `\\n - [ignore] Set \\`export const instant = false\\` to opt the dropped segment out of instant-navigation validation` +\n `\\n\\nLearn more: https://nextjs.org/docs/messages/instant-unrendered-segment`\n }\n return new Error(message)\n}\n\nexport function createLinkPrefetchPartialError(pathname: string): Error {\n return new Error(\n `Next.js encountered dynamic data during prefetching for \"${pathname}\".\\n\\n` +\n `This will lead to slower, more expensive prefetches.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [upgrade] Opt into Partial Prefetching by exporting \\`const prefetch = 'partial'\\` from the page or layout, or by setting \\`partialPrefetching: true\\` in next.config to opt the whole app in\\n` +\n ` - [disable] Remove \\`prefetch={true}\\` from the to use the default prefetch\\n` +\n ` - [ignore] Set \\`export const instant = false\\` to opt the route out of instant-navigation validation\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-link-prefetch-partial`\n )\n}\n"],"names":["createUnrenderedSegmentError","route","missingFiles","message","length","label","map","p","join","Error","createLinkPrefetchPartialError","pathname"],"mappings":";;;;;;AAAO,SAASA,6BACdC,KAAa,EACbC,YAA+B;IAE/B,IAAIC,UAAU,CAAC,OAAO,EAAEF,MAAM,uEAAuE,CAAC;IACtG,IAAIC,aAAaE,MAAM,GAAG,GAAG;QAC3B,MAAMC,QACJH,aAAaE,MAAM,KAAK,IAAI,oBAAoB;QAClDD,WACE,CAAC,6GAA6G,CAAC,GAC/G,CAAC,IAAI,EAAEE,MAAM,GAAG,EAAEH,aAAaI,GAAG,CAAC,CAACC,IAAM,CAAC,EAAE,EAAEA,GAAG,EAAEC,IAAI,CAAC,OAAO,GAChE,CAAC,qBAAqB,CAAC,GACvB,CAAC,yCAAyC,CAAC,GAC3C,CAAC,mHAAmH,CAAC,GACrH,CAAC,2EAA2E,CAAC;IACjF;IACA,OAAO,IAAIC,MAAMN;AACnB;AAEO,SAASO,+BAA+BC,QAAgB;IAC7D,OAAO,IAAIF,MACT,CAAC,yDAAyD,EAAEE,SAAS,MAAM,CAAC,GAC1E,CAAC,wDAAwD,CAAC,GAC1D,CAAC,mBAAmB,CAAC,GACrB,CAAC,mMAAmM,CAAC,GACrM,CAAC,sFAAsF,CAAC,GACxF,CAAC,2GAA2G,CAAC,GAC7G,CAAC,0EAA0E,CAAC;AAElF","ignoreList":[0]}}, + {"offset": {"line": 10389, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/invariant-error.ts"],"sourcesContent":["export class InvariantError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(\n `Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`,\n options\n )\n this.name = 'InvariantError'\n }\n}\n"],"names":["InvariantError","Error","constructor","message","options","endsWith","name"],"mappings":";;;;AAAO,MAAMA,uBAAuBC;IAClCC,YAAYC,OAAe,EAAEC,OAAsB,CAAE;QACnD,KAAK,CACH,CAAC,WAAW,EAAED,QAAQE,QAAQ,CAAC,OAAOF,UAAUA,UAAU,IAAI,0BAA0B,CAAC,EACzFC;QAEF,IAAI,CAACE,IAAI,GAAG;IACd;AACF","ignoreList":[0]}}, + {"offset": {"line": 10403, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/is-thenable.ts"],"sourcesContent":["/**\n * Check to see if a value is Thenable.\n *\n * @param promise the maybe-thenable value\n * @returns true if the value is thenable\n */\nexport function isThenable(\n promise: Promise | T\n): promise is Promise {\n return (\n promise !== null &&\n typeof promise === 'object' &&\n 'then' in promise &&\n typeof promise.then === 'function'\n )\n}\n"],"names":["isThenable","promise","then"],"mappings":"AAAA;;;;;CAKC,GACD;;;;AAAO,SAASA,WACdC,OAAuB;IAEvB,OACEA,YAAY,QACZ,OAAOA,YAAY,YACnB,UAAUA,WACV,OAAOA,QAAQC,IAAI,KAAK;AAE5B","ignoreList":[0]}}, + {"offset": {"line": 10419, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/lazy-dynamic/react-browser-bailout.ts"],"sourcesContent":["// This module is bundled separately into user code and the precompiled App\n// Router runtime. Use the global symbol registry so both copies recognize the\n// same browser bailout reason.\nconst REACT_BROWSER_BAILOUT_REASON = Symbol.for('next.browser-bailout-reason')\n\ntype ReactBrowserBailoutReason = {\n $$typeof: symbol\n reason: string\n}\n\nexport function createReactBrowserBailoutReason(\n reason: string\n): ReactBrowserBailoutReason {\n return {\n $$typeof: REACT_BROWSER_BAILOUT_REASON,\n reason,\n }\n}\n\nexport function getReactBrowserBailoutReason(\n error: unknown\n): string | undefined {\n const cause = (error as Error)?.cause as ReactBrowserBailoutReason | undefined\n\n return cause?.$$typeof === REACT_BROWSER_BAILOUT_REASON\n ? cause.reason\n : undefined\n}\n\nexport function isNextBrowserBailoutError(error: unknown): boolean {\n return getReactBrowserBailoutReason(error) !== undefined\n}\n"],"names":["REACT_BROWSER_BAILOUT_REASON","Symbol","for","createReactBrowserBailoutReason","reason","$$typeof","getReactBrowserBailoutReason","error","cause","undefined","isNextBrowserBailoutError"],"mappings":";;;;;;;;AAAA,2EAA2E;AAC3E,8EAA8E;AAC9E,+BAA+B;AAC/B,MAAMA,+BAA+BC,OAAOC,GAAG,CAAC;AAOzC,SAASC,gCACdC,MAAc;IAEd,OAAO;QACLC,UAAUL;QACVI;IACF;AACF;AAEO,SAASE,6BACdC,KAAc;IAEd,MAAMC,QAASD,OAAiBC;IAEhC,OAAOA,OAAOH,aAAaL,+BACvBQ,MAAMJ,MAAM,GACZK;AACN;AAEO,SAASC,0BAA0BH,KAAc;IACtD,OAAOD,6BAA6BC,WAAWE;AACjD","ignoreList":[0]}}, + {"offset": {"line": 10448, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/page-path/ensure-leading-slash.ts"],"sourcesContent":["/**\n * For a given page path, this function ensures that there is a leading slash.\n * If there is not a leading slash, one is added, otherwise it is noop.\n */\nexport function ensureLeadingSlash(path: string) {\n return path.startsWith('/') ? path : `/${path}`\n}\n"],"names":["ensureLeadingSlash","path","startsWith"],"mappings":"AAAA;;;CAGC,GACD;;;;AAAO,SAASA,mBAAmBC,IAAY;IAC7C,OAAOA,KAAKC,UAAU,CAAC,OAAOD,OAAO,CAAC,CAAC,EAAEA,MAAM;AACjD","ignoreList":[0]}}, + {"offset": {"line": 10462, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/page-path/normalize-page-path.ts"],"sourcesContent":["import { ensureLeadingSlash } from './ensure-leading-slash'\nimport { isDynamicRoute } from '../router/utils'\nimport { NormalizeError } from '../utils'\n\n/**\n * Takes a page and transforms it into its file counterpart ensuring that the\n * output is normalized. Note this function is not idempotent because a page\n * `/index` can be referencing `/index/index.js` and `/index/index` could be\n * referencing `/index/index/index.js`. Examples:\n * - `/` -> `/index`\n * - `/index/foo` -> `/index/index/foo`\n * - `/index` -> `/index/index`\n */\nexport function normalizePagePath(page: string): string {\n const normalized =\n /^\\/index(\\/|$)/.test(page) && !isDynamicRoute(page)\n ? `/index${page}`\n : page === '/'\n ? '/index'\n : ensureLeadingSlash(page)\n\n if (process.env.NEXT_RUNTIME !== 'edge') {\n const { posix } = require('path') as typeof import('path')\n const resolvedPage = posix.normalize(normalized)\n if (resolvedPage !== normalized) {\n throw new NormalizeError(\n `Requested and resolved page mismatch: ${normalized} ${resolvedPage}`\n )\n }\n }\n\n return normalized\n}\n"],"names":["ensureLeadingSlash","isDynamicRoute","NormalizeError","normalizePagePath","page","normalized","test","process","env","NEXT_RUNTIME","posix","require","resolvedPage","normalize"],"mappings":";;;;AAAA,SAASA,kBAAkB,QAAQ,yBAAwB;;AAC3D,SAASC,cAAc,QAAQ,kBAAiB;AAChD,SAASC,cAAc,QAAQ,WAAU;;;;AAWlC,SAASC,kBAAkBC,IAAY;IAC5C,MAAMC,aACJ,iBAAiBC,IAAI,CAACF,SAAS,KAACH,4MAAAA,EAAeG,QAC3C,CAAC,MAAM,EAAEA,MAAM,GACfA,SAAS,MACP,eACAJ,0NAAAA,EAAmBI;IAE3B,IAAIG,QAAQC,GAAG,CAACC,YAAY,KAAK,OAAQ;QACvC,MAAM,EAAEC,KAAK,EAAE,GAAGC,QAAQ;QAC1B,MAAMC,eAAeF,MAAMG,SAAS,CAACR;QACrC,IAAIO,iBAAiBP,YAAY;YAC/B,MAAM,IAAIH,iLAAAA,CACR,CAAC,sCAAsC,EAAEG,WAAW,CAAC,EAAEO,cAAc;QAEzE;IACF;IAEA,OAAOP;AACT","ignoreList":[0]}}, + {"offset": {"line": 10488, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/promise-with-resolvers.ts"],"sourcesContent":["export function createPromiseWithResolvers(): PromiseWithResolvers {\n // Shim of Stage 4 Promise.withResolvers proposal\n let resolve: (value: T | PromiseLike) => void\n let reject: (reason: any) => void\n const promise = new Promise((res, rej) => {\n resolve = res\n reject = rej\n })\n return { resolve: resolve!, reject: reject!, promise }\n}\n"],"names":["createPromiseWithResolvers","resolve","reject","promise","Promise","res","rej"],"mappings":";;;;AAAO,SAASA;IACd,iDAAiD;IACjD,IAAIC;IACJ,IAAIC;IACJ,MAAMC,UAAU,IAAIC,QAAW,CAACC,KAAKC;QACnCL,UAAUI;QACVH,SAASI;IACX;IACA,OAAO;QAAEL,SAASA;QAAUC,QAAQA;QAASC;IAAQ;AACvD","ignoreList":[0]}}, + {"offset": {"line": 10510, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/request-insights.ts"],"sourcesContent":["export type RequestInsightKind = 'request' | 'instant-insights'\n\nexport type RequestInsightIdentity = {\n requestId: string\n kind?: RequestInsightKind\n}\n\nexport function getRequestInsightKind(\n insight: Pick\n): RequestInsightKind {\n return insight.kind ?? 'request'\n}\n\nexport function getRequestInsightKey(insight: RequestInsightIdentity): string {\n return `${getRequestInsightKind(insight)}:${insight.requestId}`\n}\n"],"names":["getRequestInsightKind","insight","kind","getRequestInsightKey","requestId"],"mappings":";;;;;;AAOO,SAASA,sBACdC,OAA6C;IAE7C,OAAOA,QAAQC,IAAI,IAAI;AACzB;AAEO,SAASC,qBAAqBF,OAA+B;IAClE,OAAO,GAAGD,sBAAsBC,SAAS,CAAC,EAAEA,QAAQG,SAAS,EAAE;AACjE","ignoreList":[0]}}, + {"offset": {"line": 10526, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/add-locale.ts"],"sourcesContent":["import { addPathPrefix } from './add-path-prefix'\nimport { pathHasPrefix } from './path-has-prefix'\n\n/**\n * For a given path and a locale, if the locale is given, it will prefix the\n * locale. The path shouldn't be an API path. If a default locale is given the\n * prefix will be omitted if the locale is already the default locale.\n */\nexport function addLocale(\n path: string,\n locale?: string | false,\n defaultLocale?: string,\n ignorePrefix?: boolean\n) {\n // If no locale was given or the locale is the default locale, we don't need\n // to prefix the path.\n if (!locale || locale === defaultLocale) return path\n\n const lower = path.toLowerCase()\n\n // If the path is an API path or the path already has the locale prefix, we\n // don't need to prefix the path.\n if (!ignorePrefix) {\n if (pathHasPrefix(lower, '/api')) return path\n if (pathHasPrefix(lower, `/${locale.toLowerCase()}`)) return path\n }\n\n // Add the locale prefix to the path.\n return addPathPrefix(path, `/${locale}`)\n}\n"],"names":["addPathPrefix","pathHasPrefix","addLocale","path","locale","defaultLocale","ignorePrefix","lower","toLowerCase"],"mappings":";;;;AAAA,SAASA,aAAa,QAAQ,oBAAmB;AACjD,SAASC,aAAa,QAAQ,oBAAmB;;;AAO1C,SAASC,UACdC,IAAY,EACZC,MAAuB,EACvBC,aAAsB,EACtBC,YAAsB;IAEtB,4EAA4E;IAC5E,sBAAsB;IACtB,IAAI,CAACF,UAAUA,WAAWC,eAAe,OAAOF;IAEhD,MAAMI,QAAQJ,KAAKK,WAAW;IAE9B,2EAA2E;IAC3E,iCAAiC;IACjC,IAAI,CAACF,cAAc;QACjB,QAAIL,mNAAAA,EAAcM,OAAO,SAAS,OAAOJ;QACzC,QAAIF,mNAAAA,EAAcM,OAAO,CAAC,CAAC,EAAEH,OAAOI,WAAW,IAAI,GAAG,OAAOL;IAC/D;IAEA,qCAAqC;IACrC,WAAOH,mNAAAA,EAAcG,MAAM,CAAC,CAAC,EAAEC,QAAQ;AACzC","ignoreList":[0]}}, + {"offset": {"line": 10552, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/add-path-prefix.ts"],"sourcesContent":["import { parsePath } from './parse-path'\n\n/**\n * Adds the provided prefix to the given path. It first ensures that the path\n * is indeed starting with a slash.\n */\nexport function addPathPrefix(path: string, prefix?: string) {\n if (!path.startsWith('/') || !prefix) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n return `${prefix}${pathname}${query}${hash}`\n}\n"],"names":["parsePath","addPathPrefix","path","prefix","startsWith","pathname","query","hash"],"mappings":";;;;AAAA,SAASA,SAAS,QAAQ,eAAc;;AAMjC,SAASC,cAAcC,IAAY,EAAEC,MAAe;IACzD,IAAI,CAACD,KAAKE,UAAU,CAAC,QAAQ,CAACD,QAAQ;QACpC,OAAOD;IACT;IAEA,MAAM,EAAEG,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAE,OAAGP,uMAAAA,EAAUE;IAC5C,OAAO,GAAGC,SAASE,WAAWC,QAAQC,MAAM;AAC9C","ignoreList":[0]}}, + {"offset": {"line": 10569, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/add-path-suffix.ts"],"sourcesContent":["import { parsePath } from './parse-path'\n\n/**\n * Similarly to `addPathPrefix`, this function adds a suffix at the end on the\n * provided path. It also works only for paths ensuring the argument starts\n * with a slash.\n */\nexport function addPathSuffix(path: string, suffix?: string) {\n if (!path.startsWith('/') || !suffix) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n return `${pathname}${suffix}${query}${hash}`\n}\n"],"names":["parsePath","addPathSuffix","path","suffix","startsWith","pathname","query","hash"],"mappings":";;;;AAAA,SAASA,SAAS,QAAQ,eAAc;;AAOjC,SAASC,cAAcC,IAAY,EAAEC,MAAe;IACzD,IAAI,CAACD,KAAKE,UAAU,CAAC,QAAQ,CAACD,QAAQ;QACpC,OAAOD;IACT;IAEA,MAAM,EAAEG,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAE,OAAGP,uMAAAA,EAAUE;IAC5C,OAAO,GAAGG,WAAWF,SAASG,QAAQC,MAAM;AAC9C","ignoreList":[0]}}, + {"offset": {"line": 10586, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/app-paths.ts"],"sourcesContent":["import { ensureLeadingSlash } from '../../page-path/ensure-leading-slash'\nimport { isGroupSegment } from '../../segment'\n\n/**\n * Normalizes an app route so it represents the actual request path. Essentially\n * performing the following transformations:\n *\n * - `/(dashboard)/user/[id]/page` to `/user/[id]`\n * - `/(dashboard)/account/page` to `/account`\n * - `/user/[id]/page` to `/user/[id]`\n * - `/account/page` to `/account`\n * - `/page` to `/`\n * - `/(dashboard)/user/[id]/route` to `/user/[id]`\n * - `/(dashboard)/account/route` to `/account`\n * - `/user/[id]/route` to `/user/[id]`\n * - `/account/route` to `/account`\n * - `/route` to `/`\n * - `/` to `/`\n *\n * @param route the app route to normalize\n * @returns the normalized pathname\n */\nexport function normalizeAppPath(route: string) {\n return ensureLeadingSlash(\n route.split('/').reduce((pathname, segment, index, segments) => {\n // Empty segments are ignored.\n if (!segment) {\n return pathname\n }\n\n // Groups are ignored.\n if (isGroupSegment(segment)) {\n return pathname\n }\n\n // Parallel segments are ignored.\n if (segment[0] === '@') {\n return pathname\n }\n\n // The last segment (if it's a leaf) should be ignored.\n if (\n (segment === 'page' || segment === 'route') &&\n index === segments.length - 1\n ) {\n return pathname\n }\n\n return `${pathname}/${segment}`\n }, '')\n )\n}\n\n/**\n * Comparator for sorting app paths so that parallel slot paths (containing\n * `/@`) come before the children/root page path. This keeps the direct\n * children/root page last so it can be selected as the canonical entry.\n *\n * Without this, route group prefixes like `(group)` (char code 0x28) sort\n * before `@` (0x40), causing the children page to sort first instead of last\n * and leading to a manifest mismatch / 404 in webpack dev mode.\n */\nexport function compareAppPaths(a: string, b: string): number {\n const aHasSlot = a.includes('/@')\n const bHasSlot = b.includes('/@')\n if (aHasSlot && !bHasSlot) return -1\n if (!aHasSlot && bHasSlot) return 1\n return a.localeCompare(b)\n}\n\nfunction normalizeAppPageEntryPathname(appPath: string): string {\n // Webpack app entries preserve escaped underscore segments as `%5F`, while\n // normalized request pathnames expose the decoded `_` segment.\n return normalizeAppPath(appPath).replace(/%5F/g, '_')\n}\n\n/**\n * Selects the app path that owns the compiled entry for a normalized route.\n * Catch-all normalization can add app paths from other routes, so only direct\n * paths are candidates. Among those, compareAppPaths deterministically prefers\n * the children/root page, or a stable slot when the route only has slots.\n */\nexport function selectAppPageEntry(\n pathname: string,\n appPaths: readonly string[],\n normalizePathname: (appPath: string) => string = normalizeAppPageEntryPathname\n): string {\n let entry: string | undefined\n\n for (const appPath of appPaths) {\n if (normalizePathname(appPath) !== pathname) continue\n\n if (entry === undefined || compareAppPaths(entry, appPath) < 0) {\n entry = appPath\n }\n }\n\n if (entry === undefined) {\n throw new Error(`Invariant: no direct app page entry found for ${pathname}`)\n }\n\n return entry\n}\n\n/**\n * Strips the `.rsc` extension if it's in the pathname.\n * Since this function is used on full urls it checks `?` for searchParams handling.\n */\nexport function normalizeRscURL(url: string) {\n return url.replace(\n /\\.rsc($|\\?)/,\n // $1 ensures `?` is preserved\n '$1'\n )\n}\n"],"names":["ensureLeadingSlash","isGroupSegment","normalizeAppPath","route","split","reduce","pathname","segment","index","segments","length","compareAppPaths","a","b","aHasSlot","includes","bHasSlot","localeCompare","normalizeAppPageEntryPathname","appPath","replace","selectAppPageEntry","appPaths","normalizePathname","entry","undefined","Error","normalizeRscURL","url"],"mappings":";;;;;;;;;;AAAA,SAASA,kBAAkB,QAAQ,uCAAsC;AACzE,SAASC,cAAc,QAAQ,gBAAe;;;AAqBvC,SAASC,iBAAiBC,KAAa;IAC5C,WAAOH,0NAAAA,EACLG,MAAMC,KAAK,CAAC,KAAKC,MAAM,CAAC,CAACC,UAAUC,SAASC,OAAOC;QACjD,8BAA8B;QAC9B,IAAI,CAACF,SAAS;YACZ,OAAOD;QACT;QAEA,sBAAsB;QACtB,QAAIL,mLAAAA,EAAeM,UAAU;YAC3B,OAAOD;QACT;QAEA,iCAAiC;QACjC,IAAIC,OAAO,CAAC,EAAE,KAAK,KAAK;YACtB,OAAOD;QACT;QAEA,uDAAuD;QACvD,IACGC,CAAAA,YAAY,UAAUA,YAAY,OAAM,KACzCC,UAAUC,SAASC,MAAM,GAAG,GAC5B;YACA,OAAOJ;QACT;QAEA,OAAO,GAAGA,SAAS,CAAC,EAAEC,SAAS;IACjC,GAAG;AAEP;AAWO,SAASI,gBAAgBC,CAAS,EAAEC,CAAS;IAClD,MAAMC,WAAWF,EAAEG,QAAQ,CAAC;IAC5B,MAAMC,WAAWH,EAAEE,QAAQ,CAAC;IAC5B,IAAID,YAAY,CAACE,UAAU,OAAO,CAAC;IACnC,IAAI,CAACF,YAAYE,UAAU,OAAO;IAClC,OAAOJ,EAAEK,aAAa,CAACJ;AACzB;AAEA,SAASK,8BAA8BC,OAAe;IACpD,2EAA2E;IAC3E,+DAA+D;IAC/D,OAAOjB,iBAAiBiB,SAASC,OAAO,CAAC,QAAQ;AACnD;AAQO,SAASC,mBACdf,QAAgB,EAChBgB,QAA2B,EAC3BC,oBAAiDL,6BAA6B;IAE9E,IAAIM;IAEJ,KAAK,MAAML,WAAWG,SAAU;QAC9B,IAAIC,kBAAkBJ,aAAab,UAAU;QAE7C,IAAIkB,UAAUC,aAAad,gBAAgBa,OAAOL,WAAW,GAAG;YAC9DK,QAAQL;QACV;IACF;IAEA,IAAIK,UAAUC,WAAW;QACvB,MAAM,IAAIC,MAAM,CAAC,8CAA8C,EAAEpB,UAAU;IAC7E;IAEA,OAAOkB;AACT;AAMO,SAASG,gBAAgBC,GAAW;IACzC,OAAOA,IAAIR,OAAO,CAChB,eACA,AACA,8BAD8B;AAGlC","ignoreList":[0]}}, + {"offset": {"line": 10653, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/cache-busting-search-param.ts"],"sourcesContent":["import { hexHash } from '../../hash'\n\nconst CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES = 12\nconst textEncoder = new TextEncoder()\n\nfunction encodeCacheBustingSearchParam(bytes: Uint8Array): string {\n let binary = ''\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i])\n }\n\n return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '')\n}\n\nfunction normalizeCacheBustingInput(\n value: string | string[] | undefined\n): string {\n if (value === undefined) {\n return '0'\n }\n return Array.isArray(value) ? value.join(',') : value\n}\n\nfunction createCacheBustingSearchParamInput(\n prefetchHeader: '1' | '2' | '3' | '0' | undefined,\n segmentPrefetchHeader: string | string[] | undefined,\n stateTreeHeader: string | string[] | undefined,\n nextUrlHeader: string | string[] | undefined\n): string | null {\n if (\n (prefetchHeader === undefined || prefetchHeader === '0') &&\n segmentPrefetchHeader === undefined &&\n stateTreeHeader === undefined &&\n nextUrlHeader === undefined\n ) {\n return null\n }\n\n return [\n prefetchHeader ?? '0',\n normalizeCacheBustingInput(segmentPrefetchHeader),\n normalizeCacheBustingInput(stateTreeHeader),\n normalizeCacheBustingInput(nextUrlHeader),\n ].join(',')\n}\n\nasync function computeCacheBustingSearchParamFromInput(\n input: string\n): Promise {\n // Truncate SHA-256 to 96 bits to keep `_rsc` compact\n const digest = await globalThis.crypto.subtle.digest(\n 'SHA-256',\n textEncoder.encode(input)\n )\n return encodeCacheBustingSearchParam(\n new Uint8Array(digest).subarray(0, CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES)\n )\n}\n\nexport async function computeCacheBustingSearchParam(\n prefetchHeader: '1' | '2' | '3' | '0' | undefined,\n segmentPrefetchHeader: string | string[] | undefined,\n stateTreeHeader: string | string[] | undefined,\n nextUrlHeader: string | string[] | undefined\n): Promise {\n const input = createCacheBustingSearchParamInput(\n prefetchHeader,\n segmentPrefetchHeader,\n stateTreeHeader,\n nextUrlHeader\n )\n if (input === null) {\n return ''\n }\n\n return computeCacheBustingSearchParamFromInput(input)\n}\n\nexport function computeLegacyCacheBustingSearchParam(\n prefetchHeader: '1' | '2' | '3' | '0' | undefined,\n segmentPrefetchHeader: string | string[] | undefined,\n stateTreeHeader: string | string[] | undefined,\n nextUrlHeader: string | string[] | undefined\n): string {\n const input = createCacheBustingSearchParamInput(\n prefetchHeader,\n segmentPrefetchHeader,\n stateTreeHeader,\n nextUrlHeader\n )\n if (input === null) {\n return ''\n }\n\n return hexHash(input)\n}\n"],"names":["hexHash","CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES","textEncoder","TextEncoder","encodeCacheBustingSearchParam","bytes","binary","i","length","String","fromCharCode","btoa","replace","normalizeCacheBustingInput","value","undefined","Array","isArray","join","createCacheBustingSearchParamInput","prefetchHeader","segmentPrefetchHeader","stateTreeHeader","nextUrlHeader","computeCacheBustingSearchParamFromInput","input","digest","globalThis","crypto","subtle","encode","Uint8Array","subarray","computeCacheBustingSearchParam","computeLegacyCacheBustingSearchParam"],"mappings":";;;;;;AAAA,SAASA,OAAO,QAAQ,aAAY;;AAEpC,MAAMC,0CAA0C;AAChD,MAAMC,cAAc,IAAIC;AAExB,SAASC,8BAA8BC,KAAiB;IACtD,IAAIC,SAAS;IACb,IAAK,IAAIC,IAAI,GAAGA,IAAIF,MAAMG,MAAM,EAAED,IAAK;QACrCD,UAAUG,OAAOC,YAAY,CAACL,KAAK,CAACE,EAAE;IACxC;IAEA,OAAOI,KAAKL,QAAQM,OAAO,CAAC,OAAO,KAAKA,OAAO,CAAC,OAAO,KAAKA,OAAO,CAAC,OAAO;AAC7E;AAEA,SAASC,2BACPC,KAAoC;IAEpC,IAAIA,UAAUC,WAAW;QACvB,OAAO;IACT;IACA,OAAOC,MAAMC,OAAO,CAACH,SAASA,MAAMI,IAAI,CAAC,OAAOJ;AAClD;AAEA,SAASK,mCACPC,cAAiD,EACjDC,qBAAoD,EACpDC,eAA8C,EAC9CC,aAA4C;IAE5C,IACGH,CAAAA,mBAAmBL,aAAaK,mBAAmB,GAAE,KACtDC,0BAA0BN,aAC1BO,oBAAoBP,aACpBQ,kBAAkBR,WAClB;QACA,OAAO;IACT;IAEA,OAAO;QACLK,kBAAkB;QAClBP,2BAA2BQ;QAC3BR,2BAA2BS;QAC3BT,2BAA2BU;KAC5B,CAACL,IAAI,CAAC;AACT;AAEA,eAAeM,wCACbC,KAAa;IAEb,qDAAqD;IACrD,MAAMC,SAAS,MAAMC,WAAWC,MAAM,CAACC,MAAM,CAACH,MAAM,CAClD,WACAxB,YAAY4B,MAAM,CAACL;IAErB,OAAOrB,8BACL,IAAI2B,WAAWL,QAAQM,QAAQ,CAAC,GAAG/B;AAEvC;AAEO,eAAegC,+BACpBb,cAAiD,EACjDC,qBAAoD,EACpDC,eAA8C,EAC9CC,aAA4C;IAE5C,MAAME,QAAQN,mCACZC,gBACAC,uBACAC,iBACAC;IAEF,IAAIE,UAAU,MAAM;QAClB,OAAO;IACT;IAEA,OAAOD,wCAAwCC;AACjD;AAEO,SAASS,qCACdd,cAAiD,EACjDC,qBAAoD,EACpDC,eAA8C,EAC9CC,aAA4C;IAE5C,MAAME,QAAQN,mCACZC,gBACAC,uBACAC,iBACAC;IAEF,IAAIE,UAAU,MAAM;QAClB,OAAO;IACT;IAEA,WAAOzB,yKAAAA,EAAQyB;AACjB","ignoreList":[0]}}, + {"offset": {"line": 10710, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/format-next-pathname-info.ts"],"sourcesContent":["import type { NextPathnameInfo } from './get-next-pathname-info'\nimport { removeTrailingSlash } from './remove-trailing-slash'\nimport { addPathPrefix } from './add-path-prefix'\nimport { addPathSuffix } from './add-path-suffix'\nimport { addLocale } from './add-locale'\n\ninterface ExtendedInfo extends NextPathnameInfo {\n defaultLocale?: string\n ignorePrefix?: boolean\n}\n\nexport function formatNextPathnameInfo(info: ExtendedInfo) {\n let pathname = addLocale(\n info.pathname,\n info.locale,\n info.buildId ? undefined : info.defaultLocale,\n info.ignorePrefix\n )\n\n if (info.buildId || !info.trailingSlash) {\n pathname = removeTrailingSlash(pathname)\n }\n\n if (info.buildId) {\n pathname = addPathSuffix(\n addPathPrefix(pathname, `/_next/data/${info.buildId}`),\n info.pathname === '/' ? 'index.json' : '.json'\n )\n }\n\n pathname = addPathPrefix(pathname, info.basePath)\n return !info.buildId && info.trailingSlash\n ? !pathname.endsWith('/')\n ? addPathSuffix(pathname, '/')\n : pathname\n : removeTrailingSlash(pathname)\n}\n"],"names":["removeTrailingSlash","addPathPrefix","addPathSuffix","addLocale","formatNextPathnameInfo","info","pathname","locale","buildId","undefined","defaultLocale","ignorePrefix","trailingSlash","basePath","endsWith"],"mappings":";;;;AACA,SAASA,mBAAmB,QAAQ,0BAAyB;AAC7D,SAASC,aAAa,QAAQ,oBAAmB;AACjD,SAASC,aAAa,QAAQ,oBAAmB;AACjD,SAASC,SAAS,QAAQ,eAAc;;;;;AAOjC,SAASC,uBAAuBC,IAAkB;IACvD,IAAIC,eAAWH,uMAAAA,EACbE,KAAKC,QAAQ,EACbD,KAAKE,MAAM,EACXF,KAAKG,OAAO,GAAGC,YAAYJ,KAAKK,aAAa,EAC7CL,KAAKM,YAAY;IAGnB,IAAIN,KAAKG,OAAO,IAAI,CAACH,KAAKO,aAAa,EAAE;QACvCN,eAAWN,+NAAAA,EAAoBM;IACjC;IAEA,IAAID,KAAKG,OAAO,EAAE;QAChBF,eAAWJ,mNAAAA,MACTD,mNAAAA,EAAcK,UAAU,CAAC,YAAY,EAAED,KAAKG,OAAO,EAAE,GACrDH,KAAKC,QAAQ,KAAK,MAAM,eAAe;IAE3C;IAEAA,eAAWL,mNAAAA,EAAcK,UAAUD,KAAKQ,QAAQ;IAChD,OAAO,CAACR,KAAKG,OAAO,IAAIH,KAAKO,aAAa,GACtC,CAACN,SAASQ,QAAQ,CAAC,WACjBZ,mNAAAA,EAAcI,UAAU,OACxBA,eACFN,+NAAAA,EAAoBM;AAC1B","ignoreList":[0]}}, + {"offset": {"line": 10737, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/get-next-pathname-info.ts"],"sourcesContent":["import { normalizeLocalePath } from '../../i18n/normalize-locale-path'\nimport { removePathPrefix } from './remove-path-prefix'\nimport { pathHasPrefix } from './path-has-prefix'\nimport type { I18NProvider } from '../../../../server/lib/i18n-provider'\n\nexport interface NextPathnameInfo {\n /**\n * The base path in case the pathname included it.\n */\n basePath?: string\n /**\n * The buildId for when the parsed URL is a data URL. Parsing it can be\n * disabled with the `parseData` option.\n */\n buildId?: string\n /**\n * If there was a locale in the pathname, this will hold its value.\n */\n locale?: string\n /**\n * The processed pathname without a base path, locale, or data URL elements\n * when parsing it is enabled.\n */\n pathname: string\n /**\n * A boolean telling if the pathname had a trailingSlash. This can be only\n * true if trailingSlash is enabled.\n */\n trailingSlash?: boolean\n}\n\ninterface Options {\n /**\n * When passed to true, this function will also parse Nextjs data URLs.\n */\n parseData?: boolean\n /**\n * A partial of the Next.js configuration to parse the URL.\n */\n nextConfig?: {\n basePath?: string\n i18n?: { locales?: readonly string[] } | null\n trailingSlash?: boolean\n }\n\n /**\n * If provided, this normalizer will be used to detect the locale instead of\n * the default locale detection.\n */\n i18nProvider?: I18NProvider\n}\n\nexport function getNextPathnameInfo(\n pathname: string,\n options: Options\n): NextPathnameInfo {\n const { basePath, i18n, trailingSlash } = options.nextConfig ?? {}\n const info: NextPathnameInfo = {\n pathname,\n trailingSlash: pathname !== '/' ? pathname.endsWith('/') : trailingSlash,\n }\n\n if (basePath && pathHasPrefix(info.pathname, basePath)) {\n info.pathname = removePathPrefix(info.pathname, basePath)\n info.basePath = basePath\n }\n let pathnameNoDataPrefix = info.pathname\n\n if (\n info.pathname.startsWith('/_next/data/') &&\n info.pathname.endsWith('.json')\n ) {\n const paths = info.pathname\n .replace(/^\\/_next\\/data\\//, '')\n .replace(/\\.json$/, '')\n .split('/')\n\n const buildId = paths[0]\n info.buildId = buildId\n pathnameNoDataPrefix =\n paths[1] !== 'index' ? `/${paths.slice(1).join('/')}` : '/'\n\n // update pathname with normalized if enabled although\n // we use normalized to populate locale info still\n if (options.parseData === true) {\n info.pathname = pathnameNoDataPrefix\n }\n }\n\n // If provided, use the locale route normalizer to detect the locale instead\n // of the function below.\n if (i18n) {\n let result = options.i18nProvider\n ? options.i18nProvider.analyze(info.pathname)\n : normalizeLocalePath(info.pathname, i18n.locales)\n\n info.locale = result.detectedLocale\n info.pathname = result.pathname ?? info.pathname\n\n if (!result.detectedLocale && info.buildId) {\n result = options.i18nProvider\n ? options.i18nProvider.analyze(pathnameNoDataPrefix)\n : normalizeLocalePath(pathnameNoDataPrefix, i18n.locales)\n\n if (result.detectedLocale) {\n info.locale = result.detectedLocale\n }\n }\n }\n return info\n}\n"],"names":["normalizeLocalePath","removePathPrefix","pathHasPrefix","getNextPathnameInfo","pathname","options","basePath","i18n","trailingSlash","nextConfig","info","endsWith","pathnameNoDataPrefix","startsWith","paths","replace","split","buildId","slice","join","parseData","result","i18nProvider","analyze","locales","locale","detectedLocale"],"mappings":";;;;AAAA,SAASA,mBAAmB,QAAQ,mCAAkC;AACtE,SAASC,gBAAgB,QAAQ,uBAAsB;AACvD,SAASC,aAAa,QAAQ,oBAAmB;;;;AAkD1C,SAASC,oBACdC,QAAgB,EAChBC,OAAgB;IAEhB,MAAM,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,aAAa,EAAE,GAAGH,QAAQI,UAAU,IAAI,CAAC;IACjE,MAAMC,OAAyB;QAC7BN;QACAI,eAAeJ,aAAa,MAAMA,SAASO,QAAQ,CAAC,OAAOH;IAC7D;IAEA,IAAIF,gBAAYJ,mNAAAA,EAAcQ,KAAKN,QAAQ,EAAEE,WAAW;QACtDI,KAAKN,QAAQ,OAAGH,yNAAAA,EAAiBS,KAAKN,QAAQ,EAAEE;QAChDI,KAAKJ,QAAQ,GAAGA;IAClB;IACA,IAAIM,uBAAuBF,KAAKN,QAAQ;IAExC,IACEM,KAAKN,QAAQ,CAACS,UAAU,CAAC,mBACzBH,KAAKN,QAAQ,CAACO,QAAQ,CAAC,UACvB;QACA,MAAMG,QAAQJ,KAAKN,QAAQ,CACxBW,OAAO,CAAC,oBAAoB,IAC5BA,OAAO,CAAC,WAAW,IACnBC,KAAK,CAAC;QAET,MAAMC,UAAUH,KAAK,CAAC,EAAE;QACxBJ,KAAKO,OAAO,GAAGA;QACfL,uBACEE,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC,EAAEA,MAAMI,KAAK,CAAC,GAAGC,IAAI,CAAC,MAAM,GAAG;QAE1D,sDAAsD;QACtD,kDAAkD;QAClD,IAAId,QAAQe,SAAS,KAAK,MAAM;YAC9BV,KAAKN,QAAQ,GAAGQ;QAClB;IACF;IAEA,4EAA4E;IAC5E,yBAAyB;IACzB,IAAIL,MAAM;QACR,IAAIc,SAAShB,QAAQiB,YAAY,GAC7BjB,QAAQiB,YAAY,CAACC,OAAO,CAACb,KAAKN,QAAQ,QAC1CJ,oNAAAA,EAAoBU,KAAKN,QAAQ,EAAEG,KAAKiB,OAAO;QAEnDd,KAAKe,MAAM,GAAGJ,OAAOK,cAAc;QACnChB,KAAKN,QAAQ,GAAGiB,OAAOjB,QAAQ,IAAIM,KAAKN,QAAQ;QAEhD,IAAI,CAACiB,OAAOK,cAAc,IAAIhB,KAAKO,OAAO,EAAE;YAC1CI,SAAShB,QAAQiB,YAAY,GACzBjB,QAAQiB,YAAY,CAACC,OAAO,CAACX,4BAC7BZ,oNAAAA,EAAoBY,sBAAsBL,KAAKiB,OAAO;YAE1D,IAAIH,OAAOK,cAAc,EAAE;gBACzBhB,KAAKe,MAAM,GAAGJ,OAAOK,cAAc;YACrC;QACF;IACF;IACA,OAAOhB;AACT","ignoreList":[0]}}, + {"offset": {"line": 10788, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/index.ts"],"sourcesContent":["export { getSortedRoutes, getSortedRouteObjects } from './sorted-routes'\nexport { isDynamicRoute } from './is-dynamic'\n"],"names":["getSortedRoutes","getSortedRouteObjects","isDynamicRoute"],"mappings":";AACA,SAASE,cAAc,QAAQ,eAAc","ignoreList":[0]}}, + {"offset": {"line": 10796, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/interception-routes.ts"],"sourcesContent":["import { normalizeAppPath } from './app-paths'\n\n// order matters here, the first match will be used\nexport const INTERCEPTION_ROUTE_MARKERS = [\n '(..)(..)',\n '(.)',\n '(..)',\n '(...)',\n] as const\n\nexport type InterceptionMarker = (typeof INTERCEPTION_ROUTE_MARKERS)[number]\n\nexport type MissingCanonicalInterceptionRoute = {\n interceptionRoute: string\n canonicalRoute: string\n}\n\ntype RoutePattern = {\n prefix: Array\n minLength: number\n unbounded: boolean\n}\n\nfunction parseRoutePattern(route: string): RoutePattern {\n const segments = route.split('/').filter(Boolean)\n const tail = segments.at(-1)\n const isOptionalCatchAll =\n tail !== undefined && tail.startsWith('[[...') && tail.endsWith(']]')\n const isCatchAll =\n tail !== undefined && tail.startsWith('[...') && tail.endsWith(']')\n const unbounded = isOptionalCatchAll || isCatchAll\n const prefixSegments = unbounded ? segments.slice(0, -1) : segments\n\n return {\n prefix: prefixSegments.map((segment) =>\n segment.startsWith('[') && segment.endsWith(']') ? null : segment\n ),\n minLength:\n prefixSegments.length + (isCatchAll && !isOptionalCatchAll ? 1 : 0),\n unbounded,\n }\n}\n\nfunction acceptsLength(pattern: RoutePattern, length: number): boolean {\n return pattern.unbounded\n ? length >= pattern.minLength\n : length === pattern.minLength\n}\n\nfunction prefixCovers(\n canonical: RoutePattern,\n intercepted: RoutePattern\n): boolean {\n return canonical.prefix.every((canonicalSegment, index) => {\n if (canonicalSegment === null) return true\n\n const interceptedSegment = intercepted.prefix[index]\n return (\n interceptedSegment !== undefined &&\n interceptedSegment !== null &&\n canonicalSegment === interceptedSegment\n )\n })\n}\n\nfunction patternCoversAtLength(\n canonical: RoutePattern,\n intercepted: RoutePattern,\n length: number\n): boolean {\n return (\n acceptsLength(canonical, length) &&\n acceptsLength(intercepted, length) &&\n prefixCovers(canonical, intercepted)\n )\n}\n\n/** Returns whether ordinary route patterns cover every URL in `route`. */\nfunction isRoutePatternCovered(route: string, ordinaryRoutes: RoutePattern[]) {\n const intercepted = parseRoutePattern(route)\n\n if (!intercepted.unbounded) {\n return ordinaryRoutes.some((pattern) =>\n patternCoversAtLength(pattern, intercepted, intercepted.minLength)\n )\n }\n\n let unboundedCoverageStart = Infinity\n for (const pattern of ordinaryRoutes) {\n if (pattern.unbounded && prefixCovers(pattern, intercepted)) {\n unboundedCoverageStart = Math.min(\n unboundedCoverageStart,\n Math.max(intercepted.minLength, pattern.minLength)\n )\n }\n }\n\n if (unboundedCoverageStart === Infinity) return false\n\n // An optional or required catchall can have its shorter paths covered by\n // fixed routes before another catchall takes over the remaining suffix.\n for (\n let length = intercepted.minLength;\n length < unboundedCoverageStart;\n length++\n ) {\n if (\n !ordinaryRoutes.some((pattern) =>\n patternCoversAtLength(pattern, intercepted, length)\n )\n ) {\n return false\n }\n }\n\n return true\n}\n\nexport function isInterceptionRouteAppPath(path: string): boolean {\n // TODO-APP: add more serious validation\n return (\n path\n .split('/')\n .find((segment) =>\n INTERCEPTION_ROUTE_MARKERS.find((m) => segment.startsWith(m))\n ) !== undefined\n )\n}\n\ntype InterceptionRouteInformation = {\n /**\n * The intercepting route. This is the route that is being intercepted or the\n * route that the user was coming from. This is matched by the Next-Url\n * header.\n */\n interceptingRoute: string\n\n /**\n * The intercepted route. This is the route that is being intercepted or the\n * route that the user is going to. This is matched by the request pathname.\n */\n interceptedRoute: string\n}\n\nexport function extractInterceptionRouteInformation(\n path: string\n): InterceptionRouteInformation {\n let interceptingRoute: string | undefined\n let marker: (typeof INTERCEPTION_ROUTE_MARKERS)[number] | undefined\n let interceptedRoute: string | undefined\n\n for (const segment of path.split('/')) {\n marker = INTERCEPTION_ROUTE_MARKERS.find((m) => segment.startsWith(m))\n if (marker) {\n ;[interceptingRoute, interceptedRoute] = path.split(marker, 2)\n break\n }\n }\n\n if (!interceptingRoute || !marker || !interceptedRoute) {\n throw new Error(\n `Invalid interception route: ${path}. Must be in the format //(..|...|..)(..)/`\n )\n }\n\n interceptingRoute = normalizeAppPath(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed\n\n switch (marker) {\n case '(.)':\n // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route\n if (interceptingRoute === '/') {\n interceptedRoute = `/${interceptedRoute}`\n } else {\n interceptedRoute = interceptingRoute + '/' + interceptedRoute\n }\n break\n case '(..)':\n // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route\n if (interceptingRoute === '/') {\n throw new Error(\n `Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`\n )\n }\n interceptedRoute = interceptingRoute\n .split('/')\n .slice(0, -1)\n .concat(interceptedRoute)\n .join('/')\n break\n case '(...)':\n // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route\n interceptedRoute = '/' + interceptedRoute\n break\n case '(..)(..)':\n // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route\n\n const splitInterceptingRoute = interceptingRoute.split('/')\n if (splitInterceptingRoute.length <= 2) {\n throw new Error(\n `Invalid interception route: ${path}. Cannot use (..)(..) marker at the root level or one level up.`\n )\n }\n\n interceptedRoute = splitInterceptingRoute\n .slice(0, -2)\n .concat(interceptedRoute)\n .join('/')\n break\n default:\n throw new Error('Invariant: unexpected marker')\n }\n\n return { interceptingRoute, interceptedRoute }\n}\n\n/**\n * Finds interception matchers that cannot be loaded as an ordinary request.\n *\n * This must run after catch-all normalization and pruning so `appPaths`\n * contains the final matcher set rather than every possible matcher candidate.\n */\nexport function findMissingCanonicalInterceptionRoutes(\n appPaths: Record\n): MissingCanonicalInterceptionRoute[] {\n const canonicalRoutes = Object.keys(appPaths).filter(\n (route) => !isInterceptionRouteAppPath(route)\n )\n const canonicalRoutePatterns = canonicalRoutes.map(parseRoutePattern)\n\n return Object.keys(appPaths)\n .filter(isInterceptionRouteAppPath)\n .map((interceptionRoute) => ({\n interceptionRoute,\n canonicalRoute:\n extractInterceptionRouteInformation(interceptionRoute).interceptedRoute,\n }))\n .filter(\n ({ canonicalRoute }) =>\n !isRoutePatternCovered(canonicalRoute, canonicalRoutePatterns)\n )\n .sort((a, b) => a.interceptionRoute.localeCompare(b.interceptionRoute))\n}\n"],"names":["normalizeAppPath","INTERCEPTION_ROUTE_MARKERS","parseRoutePattern","route","segments","split","filter","Boolean","tail","at","isOptionalCatchAll","undefined","startsWith","endsWith","isCatchAll","unbounded","prefixSegments","slice","prefix","map","segment","minLength","length","acceptsLength","pattern","prefixCovers","canonical","intercepted","every","canonicalSegment","index","interceptedSegment","patternCoversAtLength","isRoutePatternCovered","ordinaryRoutes","some","unboundedCoverageStart","Infinity","Math","min","max","isInterceptionRouteAppPath","path","find","m","extractInterceptionRouteInformation","interceptingRoute","marker","interceptedRoute","Error","concat","join","splitInterceptingRoute","findMissingCanonicalInterceptionRoutes","appPaths","canonicalRoutes","Object","keys","canonicalRoutePatterns","interceptionRoute","canonicalRoute","sort","a","b","localeCompare"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 10930, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/is-dynamic.ts"],"sourcesContent":["import {\n extractInterceptionRouteInformation,\n isInterceptionRouteAppPath,\n} from './interception-routes'\n\n// Identify /.*[param].*/ in route string\nconst TEST_ROUTE = /\\/[^/]*\\[[^/]+\\][^/]*(?=\\/|$)/\n\n// Identify /[param]/ in route string\nconst TEST_STRICT_ROUTE = /\\/\\[[^/]+\\](?=\\/|$)/\n\n/**\n * Check if a route is dynamic.\n *\n * @param route - The route to check.\n * @param strict - Whether to use strict mode which prohibits segments with prefixes/suffixes (default: true).\n * @returns Whether the route is dynamic.\n */\nexport function isDynamicRoute(route: string, strict: boolean = true): boolean {\n if (isInterceptionRouteAppPath(route)) {\n route = extractInterceptionRouteInformation(route).interceptedRoute\n }\n\n if (strict) {\n return TEST_STRICT_ROUTE.test(route)\n }\n\n return TEST_ROUTE.test(route)\n}\n"],"names":["extractInterceptionRouteInformation","isInterceptionRouteAppPath","TEST_ROUTE","TEST_STRICT_ROUTE","isDynamicRoute","route","strict","interceptedRoute","test"],"mappings":";;;;AAAA,SACEA,mCAAmC,EACnCC,0BAA0B,QACrB,wBAAuB;;AAE9B,yCAAyC;AACzC,MAAMC,aAAa;AAEnB,qCAAqC;AACrC,MAAMC,oBAAoB;AASnB,SAASC,eAAeC,KAAa,EAAEC,SAAkB,IAAI;IAClE,QAAIL,iOAAAA,EAA2BI,QAAQ;QACrCA,YAAQL,0OAAAA,EAAoCK,OAAOE,gBAAgB;IACrE;IAEA,IAAID,QAAQ;QACV,OAAOH,kBAAkBK,IAAI,CAACH;IAChC;IAEA,OAAOH,WAAWM,IAAI,CAACH;AACzB","ignoreList":[0]}}, + {"offset": {"line": 10953, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/parse-loader-tree.ts"],"sourcesContent":["import { DEFAULT_SEGMENT_KEY } from '../../segment'\nimport type { LoaderTree } from '../../../../server/lib/app-dir-module'\n\nexport function parseLoaderTree(tree: LoaderTree) {\n const [segment, parallelRoutes, modules, staticSiblings] = tree\n const { layout, template } = modules\n let { page } = modules\n // a __DEFAULT__ segment means that this route didn't match any of the\n // segments in the route, so we should use the default page\n page = segment === DEFAULT_SEGMENT_KEY ? modules.defaultPage : page\n\n const conventionPath = layout?.[1] || template?.[1] || page?.[1]\n\n return {\n page,\n segment,\n modules,\n /* it can be either layout / template / page */\n conventionPath,\n parallelRoutes,\n staticSiblings,\n }\n}\n"],"names":["DEFAULT_SEGMENT_KEY","parseLoaderTree","tree","segment","parallelRoutes","modules","staticSiblings","layout","template","page","defaultPage","conventionPath"],"mappings":";;;;AAAA,SAASA,mBAAmB,QAAQ,gBAAe;;AAG5C,SAASC,gBAAgBC,IAAgB;IAC9C,MAAM,CAACC,SAASC,gBAAgBC,SAASC,eAAe,GAAGJ;IAC3D,MAAM,EAAEK,MAAM,EAAEC,QAAQ,EAAE,GAAGH;IAC7B,IAAI,EAAEI,IAAI,EAAE,GAAGJ;IACf,sEAAsE;IACtE,2DAA2D;IAC3DI,OAAON,YAAYH,wLAAAA,GAAsBK,QAAQK,WAAW,GAAGD;IAE/D,MAAME,iBAAiBJ,QAAQ,CAAC,EAAE,IAAIC,UAAU,CAAC,EAAE,IAAIC,MAAM,CAAC,EAAE;IAEhE,OAAO;QACLA;QACAN;QACAE;QACA,6CAA6C,GAC7CM;QACAP;QACAE;IACF;AACF","ignoreList":[0]}}, + {"offset": {"line": 10980, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/parse-path.ts"],"sourcesContent":["/**\n * Given a path this function will find the pathname, query and hash and return\n * them. This is useful to parse full paths on the client side.\n * @param path A path to parse e.g. /foo/bar?id=1#hash\n */\nexport function parsePath(path: string) {\n const hashIndex = path.indexOf('#')\n const queryIndex = path.indexOf('?')\n const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex)\n\n if (hasQuery || hashIndex > -1) {\n return {\n pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),\n query: hasQuery\n ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined)\n : '',\n hash: hashIndex > -1 ? path.slice(hashIndex) : '',\n }\n }\n\n return { pathname: path, query: '', hash: '' }\n}\n"],"names":["parsePath","path","hashIndex","indexOf","queryIndex","hasQuery","pathname","substring","query","undefined","hash","slice"],"mappings":"AAAA;;;;CAIC,GACD;;;;AAAO,SAASA,UAAUC,IAAY;IACpC,MAAMC,YAAYD,KAAKE,OAAO,CAAC;IAC/B,MAAMC,aAAaH,KAAKE,OAAO,CAAC;IAChC,MAAME,WAAWD,aAAa,CAAC,KAAMF,CAAAA,YAAY,KAAKE,aAAaF,SAAQ;IAE3E,IAAIG,YAAYH,YAAY,CAAC,GAAG;QAC9B,OAAO;YACLI,UAAUL,KAAKM,SAAS,CAAC,GAAGF,WAAWD,aAAaF;YACpDM,OAAOH,WACHJ,KAAKM,SAAS,CAACH,YAAYF,YAAY,CAAC,IAAIA,YAAYO,aACxD;YACJC,MAAMR,YAAY,CAAC,IAAID,KAAKU,KAAK,CAACT,aAAa;QACjD;IACF;IAEA,OAAO;QAAEI,UAAUL;QAAMO,OAAO;QAAIE,MAAM;IAAG;AAC/C","ignoreList":[0]}}, + {"offset": {"line": 11009, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/path-has-prefix.ts"],"sourcesContent":["import { parsePath } from './parse-path'\n\n/**\n * Checks if a given path starts with a given prefix. It ensures it matches\n * exactly without containing extra chars. e.g. prefix /docs should replace\n * for /docs, /docs/, /docs/a but not /docsss\n * @param path The path to check.\n * @param prefix The prefix to check against.\n */\nexport function pathHasPrefix(path: string, prefix: string) {\n if (typeof path !== 'string') {\n return false\n }\n\n const { pathname } = parsePath(path)\n return pathname === prefix || pathname.startsWith(prefix + '/')\n}\n"],"names":["parsePath","pathHasPrefix","path","prefix","pathname","startsWith"],"mappings":";;;;AAAA,SAASA,SAAS,QAAQ,eAAc;;AASjC,SAASC,cAAcC,IAAY,EAAEC,MAAc;IACxD,IAAI,OAAOD,SAAS,UAAU;QAC5B,OAAO;IACT;IAEA,MAAM,EAAEE,QAAQ,EAAE,OAAGJ,uMAAAA,EAAUE;IAC/B,OAAOE,aAAaD,UAAUC,SAASC,UAAU,CAACF,SAAS;AAC7D","ignoreList":[0]}}, + {"offset": {"line": 11026, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/remove-path-prefix.ts"],"sourcesContent":["import { pathHasPrefix } from './path-has-prefix'\n\n/**\n * Given a path and a prefix it will remove the prefix when it exists in the\n * given path. It ensures it matches exactly without containing extra chars\n * and if the prefix is not there it will be noop.\n *\n * @param path The path to remove the prefix from.\n * @param prefix The prefix to be removed.\n */\nexport function removePathPrefix(path: string, prefix: string): string {\n // If the path doesn't start with the prefix we can return it as is. This\n // protects us from situations where the prefix is a substring of the path\n // prefix such as:\n //\n // For prefix: /blog\n //\n // /blog -> true\n // /blog/ -> true\n // /blog/1 -> true\n // /blogging -> false\n // /blogging/ -> false\n // /blogging/1 -> false\n if (!pathHasPrefix(path, prefix)) {\n return path\n }\n\n // Remove the prefix from the path via slicing.\n const withoutPrefix = path.slice(prefix.length)\n\n // If the path without the prefix starts with a `/` we can return it as is.\n if (withoutPrefix.startsWith('/')) {\n return withoutPrefix\n }\n\n // If the path without the prefix doesn't start with a `/` we need to add it\n // back to the path to make sure it's a valid path.\n return `/${withoutPrefix}`\n}\n"],"names":["pathHasPrefix","removePathPrefix","path","prefix","withoutPrefix","slice","length","startsWith"],"mappings":";;;;AAAA,SAASA,aAAa,QAAQ,oBAAmB;;AAU1C,SAASC,iBAAiBC,IAAY,EAAEC,MAAc;IAC3D,yEAAyE;IACzE,0EAA0E;IAC1E,kBAAkB;IAClB,EAAE;IACF,oBAAoB;IACpB,EAAE;IACF,kBAAkB;IAClB,mBAAmB;IACnB,oBAAoB;IACpB,uBAAuB;IACvB,wBAAwB;IACxB,yBAAyB;IACzB,IAAI,KAACH,mNAAAA,EAAcE,MAAMC,SAAS;QAChC,OAAOD;IACT;IAEA,+CAA+C;IAC/C,MAAME,gBAAgBF,KAAKG,KAAK,CAACF,OAAOG,MAAM;IAE9C,2EAA2E;IAC3E,IAAIF,cAAcG,UAAU,CAAC,MAAM;QACjC,OAAOH;IACT;IAEA,4EAA4E;IAC5E,mDAAmD;IACnD,OAAO,CAAC,CAAC,EAAEA,eAAe;AAC5B","ignoreList":[0]}}, + {"offset": {"line": 11062, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/remove-trailing-slash.ts"],"sourcesContent":["/**\n * Removes the trailing slash for a given route or page path. Examples:\n * - `/foo/bar/` -> `/foo/bar`\n * - `/foo/bar` -> `/foo/bar`\n *\n * Uses charCodeAt (47 === '/') instead of regex to avoid the overhead of\n * compiling and executing a RegExp on every call (~3-5x faster).\n */\nexport function removeTrailingSlash(route: string) {\n return route.charCodeAt(route.length - 1) === 47 && route.length > 1\n ? route.slice(0, -1)\n : route\n}\n"],"names":["removeTrailingSlash","route","charCodeAt","length","slice"],"mappings":"AAAA;;;;;;;CAOC,GACD;;;;AAAO,SAASA,oBAAoBC,KAAa;IAC/C,OAAOA,MAAMC,UAAU,CAACD,MAAME,MAAM,GAAG,OAAO,MAAMF,MAAME,MAAM,GAAG,IAC/DF,MAAMG,KAAK,CAAC,GAAG,CAAC,KAChBH;AACN","ignoreList":[0]}}, + {"offset": {"line": 11080, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/segment.ts"],"sourcesContent":["import type { FlightRouterState, Segment } from './app-router-types'\n\nexport function getSegmentValue(segment: Segment) {\n return Array.isArray(segment) ? segment[1] : segment\n}\n\nexport function isGroupSegment(segment: string) {\n // Use array[0] for performant purpose\n return segment[0] === '(' && segment.endsWith(')')\n}\n\nexport function isParallelRouteSegment(segment: string) {\n return segment.startsWith('@') && segment !== '@children'\n}\n\nexport function computeSelectedLayoutSegment(\n segments: string[] | null,\n parallelRouteKey: string\n): string | null {\n if (!segments || segments.length === 0) {\n return null\n }\n\n // For 'children', use first segment; for other parallel routes, use last segment\n const rawSegment =\n parallelRouteKey === 'children'\n ? segments[0]\n : segments[segments.length - 1]\n\n // If the default slot is showing, return null since it's not technically \"selected\" (it's a fallback)\n // Returning an internal value like `__DEFAULT__` would be confusing\n return rawSegment === DEFAULT_SEGMENT_KEY ? null : rawSegment\n}\n\n/** Get the canonical parameters from the current level to the leaf node. */\nexport function getSelectedLayoutSegmentPath(\n tree: FlightRouterState,\n parallelRouteKey: string,\n first = true,\n segmentPath: string[] = []\n): string[] {\n let node: FlightRouterState\n if (first) {\n // Use the provided parallel route key on the first parallel route\n node = tree[1][parallelRouteKey]\n } else {\n // After first parallel route prefer children, if there's no children pick the first parallel route.\n const parallelRoutes = tree[1]\n node = parallelRoutes.children ?? Object.values(parallelRoutes)[0]\n }\n\n if (!node) return segmentPath\n const segment = node[0]\n\n let segmentValue = getSegmentValue(segment)\n\n if (!segmentValue || segmentValue === PAGE_SEGMENT_KEY) {\n return segmentPath\n }\n\n segmentPath.push(segmentValue)\n\n return getSelectedLayoutSegmentPath(\n node,\n parallelRouteKey,\n false,\n segmentPath\n )\n}\n\nexport const PAGE_SEGMENT_KEY = '__PAGE__'\nexport const DEFAULT_SEGMENT_KEY = '__DEFAULT__'\nexport const NOT_FOUND_SEGMENT_KEY = '/_not-found'\n"],"names":["getSegmentValue","segment","Array","isArray","isGroupSegment","endsWith","isParallelRouteSegment","startsWith","computeSelectedLayoutSegment","segments","parallelRouteKey","length","rawSegment","DEFAULT_SEGMENT_KEY","getSelectedLayoutSegmentPath","tree","first","segmentPath","node","parallelRoutes","children","Object","values","segmentValue","PAGE_SEGMENT_KEY","push","NOT_FOUND_SEGMENT_KEY"],"mappings":";;;;;;;;;;;;;;;;;;AAEO,SAASA,gBAAgBC,OAAgB;IAC9C,OAAOC,MAAMC,OAAO,CAACF,WAAWA,OAAO,CAAC,EAAE,GAAGA;AAC/C;AAEO,SAASG,eAAeH,OAAe;IAC5C,sCAAsC;IACtC,OAAOA,OAAO,CAAC,EAAE,KAAK,OAAOA,QAAQI,QAAQ,CAAC;AAChD;AAEO,SAASC,uBAAuBL,OAAe;IACpD,OAAOA,QAAQM,UAAU,CAAC,QAAQN,YAAY;AAChD;AAEO,SAASO,6BACdC,QAAyB,EACzBC,gBAAwB;IAExB,IAAI,CAACD,YAAYA,SAASE,MAAM,KAAK,GAAG;QACtC,OAAO;IACT;IAEA,iFAAiF;IACjF,MAAMC,aACJF,qBAAqB,aACjBD,QAAQ,CAAC,EAAE,GACXA,QAAQ,CAACA,SAASE,MAAM,GAAG,EAAE;IAEnC,sGAAsG;IACtG,oEAAoE;IACpE,OAAOC,eAAeC,sBAAsB,OAAOD;AACrD;AAGO,SAASE,6BACdC,IAAuB,EACvBL,gBAAwB,EACxBM,QAAQ,IAAI,EACZC,cAAwB,EAAE;IAE1B,IAAIC;IACJ,IAAIF,OAAO;QACT,kEAAkE;QAClEE,OAAOH,IAAI,CAAC,EAAE,CAACL,iBAAiB;IAClC,OAAO;QACL,oGAAoG;QACpG,MAAMS,iBAAiBJ,IAAI,CAAC,EAAE;QAC9BG,OAAOC,eAAeC,QAAQ,IAAIC,OAAOC,MAAM,CAACH,eAAe,CAAC,EAAE;IACpE;IAEA,IAAI,CAACD,MAAM,OAAOD;IAClB,MAAMhB,UAAUiB,IAAI,CAAC,EAAE;IAEvB,IAAIK,eAAevB,gBAAgBC;IAEnC,IAAI,CAACsB,gBAAgBA,iBAAiBC,kBAAkB;QACtD,OAAOP;IACT;IAEAA,YAAYQ,IAAI,CAACF;IAEjB,OAAOT,6BACLI,MACAR,kBACA,OACAO;AAEJ;AAEO,MAAMO,mBAAmB,WAAU;AACnC,MAAMX,sBAAsB,cAAa;AACzC,MAAMa,wBAAwB,cAAa","ignoreList":[0]}}, + {"offset": {"line": 11144, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/server-reference-info.ts"],"sourcesContent":["export interface ServerReferenceInfo {\n type: 'server-action' | 'use-cache'\n usedArgs: [boolean, boolean, boolean, boolean, boolean, boolean]\n hasRestArgs: boolean\n}\n\nexport const SERVER_REFERENCE_ID_LENGTH = 42\n\nexport function mightBeServerReferenceId(id: string): boolean {\n return id.length === SERVER_REFERENCE_ID_LENGTH\n}\n\n/**\n * Extracts info about the server reference for the given server reference ID by\n * parsing the first byte of the hex-encoded ID.\n *\n * ```\n * Bit positions: [7] [6] [5] [4] [3] [2] [1] [0]\n * Bits: typeBit argMask restArgs\n * ```\n *\n * If the `typeBit` is `1` the server reference represents a `\"use cache\"`\n * function, otherwise a server action.\n *\n * The `argMask` encodes whether the function uses the argument at the\n * respective position.\n *\n * The `restArgs` bit indicates whether the function uses a rest parameter. It's\n * also set to 1 if the function has more than 6 args.\n *\n * @param id hex-encoded server reference ID\n */\nexport function extractInfoFromServerReferenceId(\n id: string\n): ServerReferenceInfo {\n const infoByte = parseInt(id.slice(0, 2), 16)\n const typeBit = (infoByte >> 7) & 0x1\n const argMask = (infoByte >> 1) & 0x3f\n const restArgs = infoByte & 0x1\n const usedArgs = Array(6)\n\n for (let index = 0; index < 6; index++) {\n const bitPosition = 5 - index\n const bit = (argMask >> bitPosition) & 0x1\n usedArgs[index] = bit === 1\n }\n\n return {\n type: typeBit === 1 ? 'use-cache' : 'server-action',\n usedArgs: usedArgs as [\n boolean,\n boolean,\n boolean,\n boolean,\n boolean,\n boolean,\n ],\n hasRestArgs: restArgs === 1,\n }\n}\n\n/**\n * Creates a sparse array containing only the used arguments based on the\n * provided action info.\n */\nexport function omitUnusedArgs(\n args: unknown[],\n info: ServerReferenceInfo\n): unknown[] {\n const filteredArgs = new Array(args.length)\n let length = 0\n\n for (let index = 0; index < args.length; index++) {\n if (\n (index < 6 && info.usedArgs[index]) ||\n // This assumes that the server reference info byte has the restArgs bit\n // set to 1 if there are more than 6 args.\n (index >= 6 && info.hasRestArgs)\n ) {\n filteredArgs[index] = args[index]\n length = index + 1\n }\n }\n\n // Trim trailing unused args from the array.\n filteredArgs.length = length\n\n return filteredArgs\n}\n"],"names":["SERVER_REFERENCE_ID_LENGTH","mightBeServerReferenceId","id","length","extractInfoFromServerReferenceId","infoByte","parseInt","slice","typeBit","argMask","restArgs","usedArgs","Array","index","bitPosition","bit","type","hasRestArgs","omitUnusedArgs","args","info","filteredArgs"],"mappings":";;;;;;;;;;AAMO,MAAMA,6BAA6B,GAAE;AAErC,SAASC,yBAAyBC,EAAU;IACjD,OAAOA,GAAGC,MAAM,KAAKH;AACvB;AAsBO,SAASI,iCACdF,EAAU;IAEV,MAAMG,WAAWC,SAASJ,GAAGK,KAAK,CAAC,GAAG,IAAI;IAC1C,MAAMC,UAAWH,YAAY,IAAK;IAClC,MAAMI,UAAWJ,YAAY,IAAK;IAClC,MAAMK,WAAWL,WAAW;IAC5B,MAAMM,WAAWC,MAAM;IAEvB,IAAK,IAAIC,QAAQ,GAAGA,QAAQ,GAAGA,QAAS;QACtC,MAAMC,cAAc,IAAID;QACxB,MAAME,MAAON,WAAWK,cAAe;QACvCH,QAAQ,CAACE,MAAM,GAAGE,QAAQ;IAC5B;IAEA,OAAO;QACLC,MAAMR,YAAY,IAAI,cAAc;QACpCG,UAAUA;QAQVM,aAAaP,aAAa;IAC5B;AACF;AAMO,SAASQ,eACdC,IAAe,EACfC,IAAyB;IAEzB,MAAMC,eAAe,IAAIT,MAAMO,KAAKhB,MAAM;IAC1C,IAAIA,SAAS;IAEb,IAAK,IAAIU,QAAQ,GAAGA,QAAQM,KAAKhB,MAAM,EAAEU,QAAS;QAChD,IACGA,QAAQ,KAAKO,KAAKT,QAAQ,CAACE,MAAM,IAClC,wEAAwE;QACxE,0CAA0C;QACzCA,SAAS,KAAKO,KAAKH,WAAW,EAC/B;YACAI,YAAY,CAACR,MAAM,GAAGM,IAAI,CAACN,MAAM;YACjCV,SAASU,QAAQ;QACnB;IACF;IAEA,4CAA4C;IAC5CQ,aAAalB,MAAM,GAAGA;IAEtB,OAAOkB;AACT","ignoreList":[0]}}, + {"offset": {"line": 11194, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/utils.ts"],"sourcesContent":["import type { HtmlProps } from './html-context.shared-runtime'\nimport type { ComponentType, JSX } from 'react'\nimport type { DomainLocale } from '../../server/config'\nimport type { Env } from '@next/env'\nimport type { IncomingMessage, ServerResponse } from 'http'\nimport type { NextRouter } from './router/router'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { PreviewData } from '../../types'\nimport type { COMPILER_NAMES } from './constants'\nimport type fs from 'fs'\n\nexport type NextComponentType<\n Context extends BaseContext = NextPageContext,\n InitialProps = {},\n Props = {},\n> = ComponentType & {\n /**\n * Used for initial page load data population. Data returned from `getInitialProps` is serialized when server rendered.\n * Make sure to return plain `Object` without using `Date`, `Map`, `Set`.\n * @param context Context of `page`\n */\n getInitialProps?(context: Context): InitialProps | Promise\n}\n\nexport type DocumentType = NextComponentType<\n DocumentContext,\n DocumentInitialProps,\n DocumentProps\n>\n\nexport type AppType

= NextComponentType<\n AppContextType,\n P,\n AppPropsType\n>\n\nexport type AppTreeType = ComponentType<\n AppInitialProps & { [name: string]: any }\n>\n\n/**\n * Web vitals provided to _app.reportWebVitals by Core Web Vitals plugin developed by Google Chrome team.\n * https://nextjs.org/blog/next-9-4#integrated-web-vitals-reporting\n */\nexport const WEB_VITALS = ['CLS', 'FCP', 'INP', 'LCP', 'TTFB'] as const\nexport type NextWebVitalsMetric = {\n id: string\n startTime: number\n value: number\n attribution?: { [key: string]: unknown }\n} & (\n | {\n label: 'web-vital'\n name: (typeof WEB_VITALS)[number]\n }\n | {\n label: 'custom'\n name:\n | 'Next.js-hydration'\n | 'Next.js-route-change-to-render'\n | 'Next.js-render'\n }\n)\n\nexport type Enhancer = (Component: C) => C\n\nexport type ComponentsEnhancer =\n | {\n enhanceApp?: Enhancer\n enhanceComponent?: Enhancer\n }\n | Enhancer\n\nexport type RenderPageResult = {\n html: string\n head?: Array\n}\n\nexport type RenderPage = (\n options?: ComponentsEnhancer\n) => DocumentInitialProps | Promise\n\nexport type BaseContext = {\n res?: ServerResponse\n [k: string]: any\n}\n\nexport type NEXT_DATA = {\n props: Record\n page: string\n query: ParsedUrlQuery\n buildId: string\n assetPrefix?: string\n nextExport?: boolean\n autoExport?: boolean\n isFallback?: boolean\n isExperimentalCompile?: boolean\n dynamicIds?: (string | number)[]\n err?: Error & {\n statusCode?: number\n source?: typeof COMPILER_NAMES.server | typeof COMPILER_NAMES.edgeServer\n }\n gsp?: boolean\n gssp?: boolean\n customServer?: boolean\n gip?: boolean\n appGip?: boolean\n locale?: string\n locales?: readonly string[]\n defaultLocale?: string\n domainLocales?: readonly DomainLocale[]\n scriptLoader?: any[]\n isPreview?: boolean\n notFoundSrcPage?: string\n}\n\n/**\n * `Next` context\n */\nexport interface NextPageContext {\n /**\n * Error object if encountered during rendering\n */\n err?: (Error & { statusCode?: number }) | null\n /**\n * `HTTP` request object.\n */\n req?: IncomingMessage\n /**\n * `HTTP` response object.\n */\n res?: ServerResponse\n /**\n * Path section of `URL`.\n */\n pathname: string\n /**\n * Query string section of `URL` parsed as an object.\n */\n query: ParsedUrlQuery\n /**\n * `String` of the actual path including query.\n */\n asPath?: string\n /**\n * The currently active locale\n */\n locale?: string\n /**\n * All configured locales\n */\n locales?: readonly string[]\n /**\n * The configured default locale\n */\n defaultLocale?: string\n /**\n * `Component` the tree of the App to use if needing to render separately\n */\n AppTree: AppTreeType\n}\n\nexport type AppContextType = {\n Component: NextComponentType\n AppTree: AppTreeType\n ctx: NextPageContext\n router: Router\n}\n\nexport type AppInitialProps = {\n pageProps: PageProps\n}\n\nexport type AppPropsType<\n Router extends NextRouter = NextRouter,\n PageProps = {},\n> = AppInitialProps & {\n Component: NextComponentType\n router: Router\n __N_SSG?: boolean\n __N_SSP?: boolean\n}\n\nexport type DocumentContext = NextPageContext & {\n renderPage: RenderPage\n defaultGetInitialProps(\n ctx: DocumentContext,\n options?: { nonce?: string }\n ): Promise\n}\n\nexport type DocumentInitialProps = RenderPageResult & {\n styles?: React.ReactElement[] | Iterable | JSX.Element\n}\n\nexport type DocumentProps = DocumentInitialProps & HtmlProps\n\n/**\n * Next `API` route request\n */\nexport interface NextApiRequest extends IncomingMessage {\n /**\n * Object of `query` values from url\n */\n query: Partial<{\n [key: string]: string | string[]\n }>\n /**\n * Object of `cookies` from header\n */\n cookies: Partial<{\n [key: string]: string\n }>\n\n body: any\n\n env: Env\n\n draftMode?: boolean\n\n preview?: boolean\n /**\n * Preview data set on the request, if any\n * */\n previewData?: PreviewData\n}\n\n/**\n * Send body of response\n */\ntype Send = (body: T) => void\n\n/**\n * Next `API` route response\n */\nexport type NextApiResponse = ServerResponse & {\n /**\n * Send data `any` data in response\n */\n send: Send\n /**\n * Send data `json` data in response\n */\n json: Send\n status: (statusCode: number) => NextApiResponse\n redirect(url: string): NextApiResponse\n redirect(status: number, url: string): NextApiResponse\n\n /**\n * Set draft mode\n */\n setDraftMode: (options: { enable: boolean }) => NextApiResponse\n\n /**\n * Set preview data for Next.js' prerender mode\n */\n setPreviewData: (\n data: object | string,\n options?: {\n /**\n * Specifies the number (in seconds) for the preview session to last for.\n * The given number will be converted to an integer by rounding down.\n * By default, no maximum age is set and the preview session finishes\n * when the client shuts down (browser is closed).\n */\n maxAge?: number\n /**\n * Specifies the path for the preview session to work under. By default,\n * the path is considered the \"default path\", i.e., any pages under \"/\".\n */\n path?: string\n }\n ) => NextApiResponse\n\n /**\n * Clear preview data for Next.js' prerender mode\n */\n clearPreviewData: (options?: { path?: string }) => NextApiResponse\n\n /**\n * Revalidate a specific page and regenerate it using On-Demand Incremental\n * Static Regeneration.\n * The path should be an actual path, not a rewritten path. E.g. for\n * \"/blog/[slug]\" this should be \"/blog/post-1\".\n * @link https://nextjs.org/docs/app/building-your-application/data-fetching/incremental-static-regeneration#on-demand-revalidation-with-revalidatepath\n */\n revalidate: (\n urlPath: string,\n opts?: {\n unstable_onlyGenerated?: boolean\n }\n ) => Promise\n}\n\n/**\n * Next `API` route handler\n */\nexport type NextApiHandler = (\n req: NextApiRequest,\n res: NextApiResponse\n) => unknown | Promise\n\n/**\n * Utils\n */\nexport function execOnce ReturnType>(\n fn: T\n): T {\n let used = false\n let result: ReturnType\n\n return ((...args: any[]) => {\n if (!used) {\n used = true\n result = fn(...args)\n }\n return result\n }) as T\n}\n\n// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1\n// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\nconst ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/\nexport const isAbsoluteUrl = (url: string) => {\n // Fast path: an absolute URL must start with a letter (the scheme).\n // Check for a-z and A-Z without the cost of the regex.\n const c = url.charCodeAt(0)\n const isLetter =\n (c >= 65 /* A */ && c <= 90) /* Z */ ||\n (c >= 97 /* a */ && c <= 122) /* z */\n if (!isLetter) {\n return false\n }\n\n return ABSOLUTE_URL_REGEX.test(url)\n}\n\nexport function getLocationOrigin() {\n const { protocol, hostname, port } = window.location\n return `${protocol}//${hostname}${port ? ':' + port : ''}`\n}\n\nexport function getURL() {\n const { href } = window.location\n const origin = getLocationOrigin()\n return href.substring(origin.length)\n}\n\nexport function getDisplayName

(Component: ComponentType

) {\n return typeof Component === 'string'\n ? Component\n : Component.displayName || Component.name || 'Unknown'\n}\n\nexport function isResSent(res: ServerResponse) {\n return res.finished || res.headersSent\n}\n\nexport function normalizeRepeatedSlashes(url: string) {\n const urlParts = url.split('?')\n const urlNoQuery = urlParts[0]\n\n return (\n urlNoQuery\n // first we replace any non-encoded backslashes with forward\n // then normalize repeated forward slashes\n .replace(/\\\\/g, '/')\n .replace(/\\/\\/+/g, '/') +\n (urlParts[1] ? `?${urlParts.slice(1).join('?')}` : '')\n )\n}\n\nexport async function loadGetInitialProps<\n C extends BaseContext,\n IP = {},\n P = {},\n>(App: NextComponentType, ctx: C): Promise {\n if (process.env.NODE_ENV !== 'production') {\n if (App.prototype?.getInitialProps) {\n const message = `\"${getDisplayName(\n App\n )}.getInitialProps()\" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.`\n throw new Error(message)\n }\n }\n // when called from _app `ctx` is nested in `ctx`\n const res = ctx.res || (ctx.ctx && ctx.ctx.res)\n\n if (!App.getInitialProps) {\n if (ctx.ctx && ctx.Component) {\n // @ts-ignore pageProps default\n return {\n pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx),\n }\n }\n return {} as IP\n }\n\n const props = await App.getInitialProps(ctx)\n\n if (res && isResSent(res)) {\n return props\n }\n\n if (!props) {\n const message = `\"${getDisplayName(\n App\n )}.getInitialProps()\" should resolve to an object. But found \"${props}\" instead.`\n throw new Error(message)\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (Object.keys(props).length === 0 && !ctx.ctx) {\n console.warn(\n `${getDisplayName(\n App\n )} returned an empty object from \\`getInitialProps\\`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps`\n )\n }\n }\n\n return props\n}\n\nexport const SP = typeof performance !== 'undefined'\nexport const ST =\n SP &&\n (['mark', 'measure', 'getEntriesByName'] as const).every(\n (method) => typeof performance[method] === 'function'\n )\n\nexport class DecodeError extends Error {}\nexport class NormalizeError extends Error {}\nexport class PageNotFoundError extends Error {\n code: string\n\n constructor(page: string) {\n super()\n this.code = 'ENOENT'\n this.name = 'PageNotFoundError'\n this.message = `Cannot find module for page: ${page}`\n }\n}\n\nexport class MissingStaticPage extends Error {\n constructor(page: string, message: string) {\n super()\n this.message = `Failed to load static file for page: ${page} ${message}`\n }\n}\n\nexport class MiddlewareNotFoundError extends Error {\n code: string\n constructor() {\n super()\n this.code = 'ENOENT'\n this.message = `Cannot find the middleware module`\n }\n}\n\nexport interface CacheFs {\n existsSync: typeof fs.existsSync\n readFile: typeof fs.promises.readFile\n readFileSync: typeof fs.readFileSync\n writeFile(f: string, d: any): Promise\n /** Publish a complete file without replacing an existing destination. */\n writeFileAtomic?(f: string, d: any): Promise\n mkdir(dir: string): Promise\n stat(f: string): Promise<{ mtime: Date }>\n}\n\nexport function stringifyError(error: Error) {\n return JSON.stringify({ message: error.message, stack: error.stack })\n}\n"],"names":["WEB_VITALS","execOnce","fn","used","result","args","ABSOLUTE_URL_REGEX","isAbsoluteUrl","url","c","charCodeAt","isLetter","test","getLocationOrigin","protocol","hostname","port","window","location","getURL","href","origin","substring","length","getDisplayName","Component","displayName","name","isResSent","res","finished","headersSent","normalizeRepeatedSlashes","urlParts","split","urlNoQuery","replace","slice","join","loadGetInitialProps","App","ctx","process","env","NODE_ENV","prototype","getInitialProps","message","Error","pageProps","props","Object","keys","console","warn","SP","performance","ST","every","method","DecodeError","NormalizeError","PageNotFoundError","constructor","page","code","MissingStaticPage","MiddlewareNotFoundError","stringifyError","error","JSON","stringify","stack"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 11360, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/utils/reflect-utils.ts"],"sourcesContent":["// This regex will have fast negatives meaning valid identifiers may not pass\n// this test. However this is only used during static generation to provide hints\n// about why a page bailed out of some or all prerendering and we can use bracket notation\n// for example while `ಠ_ಠ` is a valid identifier it's ok to print `searchParams['ಠ_ಠ']`\n// even if this would have been fine too `searchParams.ಠ_ಠ`\nconst isDefinitelyAValidIdentifier = /^[A-Za-z_$][A-Za-z0-9_$]*$/\n\nexport function describeStringPropertyAccess(target: string, prop: string) {\n if (isDefinitelyAValidIdentifier.test(prop)) {\n return `\\`${target}.${prop}\\``\n }\n return `\\`${target}[${JSON.stringify(prop)}]\\``\n}\n\nexport function describeHasCheckingStringProperty(\n target: string,\n prop: string\n) {\n const stringifiedProp = JSON.stringify(prop)\n return `\\`Reflect.has(${target}, ${stringifiedProp})\\`, \\`${stringifiedProp} in ${target}\\`, or similar`\n}\n\nexport const wellKnownProperties = new Set([\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toString',\n 'valueOf',\n 'toLocaleString',\n\n // Promise prototype\n 'then',\n 'catch',\n 'finally',\n\n // React Promise extension\n 'status',\n // 'value',\n // 'error',\n\n // React introspection\n 'displayName',\n '_debugInfo',\n\n // Common tested properties\n 'toJSON',\n '$$typeof',\n '__esModule',\n\n // Tested by flight when checking for iterables\n '@@iterator',\n])\n"],"names":["isDefinitelyAValidIdentifier","describeStringPropertyAccess","target","prop","test","JSON","stringify","describeHasCheckingStringProperty","stringifiedProp","wellKnownProperties","Set"],"mappings":";;;;;;;;AAAA,6EAA6E;AAC7E,iFAAiF;AACjF,0FAA0F;AAC1F,uFAAuF;AACvF,2DAA2D;AAC3D,MAAMA,+BAA+B;AAE9B,SAASC,6BAA6BC,MAAc,EAAEC,IAAY;IACvE,IAAIH,6BAA6BI,IAAI,CAACD,OAAO;QAC3C,OAAO,CAAC,EAAE,EAAED,OAAO,CAAC,EAAEC,KAAK,EAAE,CAAC;IAChC;IACA,OAAO,CAAC,EAAE,EAAED,OAAO,CAAC,EAAEG,KAAKC,SAAS,CAACH,MAAM,GAAG,CAAC;AACjD;AAEO,SAASI,kCACdL,MAAc,EACdC,IAAY;IAEZ,MAAMK,kBAAkBH,KAAKC,SAAS,CAACH;IACvC,OAAO,CAAC,cAAc,EAAED,OAAO,EAAE,EAAEM,gBAAgB,OAAO,EAAEA,gBAAgB,IAAI,EAAEN,OAAO,cAAc,CAAC;AAC1G;AAEO,MAAMO,sBAAsB,IAAIC,IAAI;IACzC;IACA;IACA;IACA;IACA;IACA;IAEA,oBAAoB;IACpB;IACA;IACA;IAEA,0BAA0B;IAC1B;IACA,WAAW;IACX,WAAW;IAEX,sBAAsB;IACtB;IACA;IAEA,2BAA2B;IAC3B;IACA;IACA;IAEA,+CAA+C;IAC/C;CACD,EAAC","ignoreList":[0]}}, + {"offset": {"line": 11413, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/route-modules/app-page/module.compiled.js"],"sourcesContent":["if (process.env.NEXT_RUNTIME === 'edge') {\n module.exports = require('next/dist/server/route-modules/app-page/module.js')\n} else {\n if (process.env.__NEXT_EXPERIMENTAL_REACT) {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.prod.js')\n }\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.prod.js')\n }\n }\n }\n}\n"],"names":["process","env","NEXT_RUNTIME","module","exports","require","__NEXT_EXPERIMENTAL_REACT","NODE_ENV","TURBOPACK"],"mappings":"AAAA,IAAIA,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;KAElC;IACL,IAAIF,QAAQC,GAAG,CAACK,yBAAyB,EAAE;;SAcpC;QACL,IAAIN,QAAQC,GAAG,CAACM,QAAQ,KAAK,WAAe;YAC1C,IAAIP,QAAQC,GAAG,CAACO,SAAS,eAAE;gBACzBL,OAAOC,OAAO,GAAGC,QAAQ;YAC3B,OAAO;;QAGT,OAAO;;IAOT;AACF","ignoreList":[0]}}, + {"offset": {"line": 11432, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/route-modules/app-page/vendored/rsc/react.ts"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-rsc']!.React\n"],"names":["module","exports","require","vendored","React"],"mappings":"AAAAA,OAAOC,OAAO,GACZC,QAAQ,8HACRC,QAAQ,CAAC,YAAY,CAAEC,KAAK","ignoreList":[0]}}, + {"offset": {"line": 11437, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/dist/compiled/@opentelemetry/api/index.js"],"sourcesContent":["(()=>{\"use strict\";var e={912:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ContextAPI=void 0;const n=r(108);const a=r(221);const o=r(44);const i=\"context\";const c=new n.NoopContextManager;class ContextAPI{constructor(){}static getInstance(){if(!this._instance){this._instance=new ContextAPI}return this._instance}setGlobalContextManager(e){return(0,a.registerGlobal)(i,e,o.DiagAPI.instance())}active(){return this._getContextManager().active()}with(e,t,r,...n){return this._getContextManager().with(e,t,r,...n)}bind(e,t){return this._getContextManager().bind(e,t)}_getContextManager(){return(0,a.getGlobal)(i)||c}disable(){this._getContextManager().disable();(0,a.unregisterGlobal)(i,o.DiagAPI.instance())}}t.ContextAPI=ContextAPI},44:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.DiagAPI=void 0;const n=r(757);const a=r(412);const o=r(711);const i=r(221);const c=\"diag\";class DiagAPI{constructor(){function _logProxy(e){return function(...t){const r=(0,i.getGlobal)(\"diag\");if(!r)return;return r[e](...t)}}const e=this;const setLogger=(t,r={logLevel:o.DiagLogLevel.INFO})=>{var n,c,s;if(t===e){const t=new Error(\"Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation\");e.error((n=t.stack)!==null&&n!==void 0?n:t.message);return false}if(typeof r===\"number\"){r={logLevel:r}}const u=(0,i.getGlobal)(\"diag\");const l=(0,a.createLogLevelDiagLogger)((c=r.logLevel)!==null&&c!==void 0?c:o.DiagLogLevel.INFO,t);if(u&&!r.suppressOverrideMessage){const e=(s=(new Error).stack)!==null&&s!==void 0?s:\"\";u.warn(`Current logger will be overwritten from ${e}`);l.warn(`Current logger will overwrite one already registered from ${e}`)}return(0,i.registerGlobal)(\"diag\",l,e,true)};e.setLogger=setLogger;e.disable=()=>{(0,i.unregisterGlobal)(c,e)};e.createComponentLogger=e=>new n.DiagComponentLogger(e);e.verbose=_logProxy(\"verbose\");e.debug=_logProxy(\"debug\");e.info=_logProxy(\"info\");e.warn=_logProxy(\"warn\");e.error=_logProxy(\"error\")}static instance(){if(!this._instance){this._instance=new DiagAPI}return this._instance}}t.DiagAPI=DiagAPI},262:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.MetricsAPI=void 0;const n=r(586);const a=r(221);const o=r(44);const i=\"metrics\";class MetricsAPI{constructor(){}static getInstance(){if(!this._instance){this._instance=new MetricsAPI}return this._instance}setGlobalMeterProvider(e){return(0,a.registerGlobal)(i,e,o.DiagAPI.instance())}getMeterProvider(){return(0,a.getGlobal)(i)||n.NOOP_METER_PROVIDER}getMeter(e,t,r){return this.getMeterProvider().getMeter(e,t,r)}disable(){(0,a.unregisterGlobal)(i,o.DiagAPI.instance())}}t.MetricsAPI=MetricsAPI},25:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.PropagationAPI=void 0;const n=r(221);const a=r(19);const o=r(92);const i=r(398);const c=r(504);const s=r(44);const u=\"propagation\";const l=new a.NoopTextMapPropagator;class PropagationAPI{constructor(){this.createBaggage=c.createBaggage;this.getBaggage=i.getBaggage;this.getActiveBaggage=i.getActiveBaggage;this.setBaggage=i.setBaggage;this.deleteBaggage=i.deleteBaggage}static getInstance(){if(!this._instance){this._instance=new PropagationAPI}return this._instance}setGlobalPropagator(e){return(0,n.registerGlobal)(u,e,s.DiagAPI.instance())}inject(e,t,r=o.defaultTextMapSetter){return this._getGlobalPropagator().inject(e,t,r)}extract(e,t,r=o.defaultTextMapGetter){return this._getGlobalPropagator().extract(e,t,r)}fields(){return this._getGlobalPropagator().fields()}disable(){(0,n.unregisterGlobal)(u,s.DiagAPI.instance())}_getGlobalPropagator(){return(0,n.getGlobal)(u)||l}}t.PropagationAPI=PropagationAPI},397:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.TraceAPI=void 0;const n=r(221);const a=r(498);const o=r(477);const i=r(793);const c=r(44);const s=\"trace\";class TraceAPI{constructor(){this._proxyTracerProvider=new a.ProxyTracerProvider;this.wrapSpanContext=o.wrapSpanContext;this.isSpanContextValid=o.isSpanContextValid;this.deleteSpan=i.deleteSpan;this.getSpan=i.getSpan;this.getActiveSpan=i.getActiveSpan;this.getSpanContext=i.getSpanContext;this.setSpan=i.setSpan;this.setSpanContext=i.setSpanContext}static getInstance(){if(!this._instance){this._instance=new TraceAPI}return this._instance}setGlobalTracerProvider(e){const t=(0,n.registerGlobal)(s,this._proxyTracerProvider,c.DiagAPI.instance());if(t){this._proxyTracerProvider.setDelegate(e)}return t}getTracerProvider(){return(0,n.getGlobal)(s)||this._proxyTracerProvider}getTracer(e,t){return this.getTracerProvider().getTracer(e,t)}disable(){(0,n.unregisterGlobal)(s,c.DiagAPI.instance());this._proxyTracerProvider=new a.ProxyTracerProvider}}t.TraceAPI=TraceAPI},398:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.deleteBaggage=t.setBaggage=t.getActiveBaggage=t.getBaggage=void 0;const n=r(912);const a=r(23);const o=(0,a.createContextKey)(\"OpenTelemetry Baggage Key\");function getBaggage(e){return e.getValue(o)||undefined}t.getBaggage=getBaggage;function getActiveBaggage(){return getBaggage(n.ContextAPI.getInstance().active())}t.getActiveBaggage=getActiveBaggage;function setBaggage(e,t){return e.setValue(o,t)}t.setBaggage=setBaggage;function deleteBaggage(e){return e.deleteValue(o)}t.deleteBaggage=deleteBaggage},152:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.BaggageImpl=void 0;class BaggageImpl{constructor(e){this._entries=e?new Map(e):new Map}getEntry(e){const t=this._entries.get(e);if(!t){return undefined}return Object.assign({},t)}getAllEntries(){return Array.from(this._entries.entries()).map((([e,t])=>[e,t]))}setEntry(e,t){const r=new BaggageImpl(this._entries);r._entries.set(e,t);return r}removeEntry(e){const t=new BaggageImpl(this._entries);t._entries.delete(e);return t}removeEntries(...e){const t=new BaggageImpl(this._entries);for(const r of e){t._entries.delete(r)}return t}clear(){return new BaggageImpl}}t.BaggageImpl=BaggageImpl},647:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.baggageEntryMetadataSymbol=void 0;t.baggageEntryMetadataSymbol=Symbol(\"BaggageEntryMetadata\")},504:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.baggageEntryMetadataFromString=t.createBaggage=void 0;const n=r(44);const a=r(152);const o=r(647);const i=n.DiagAPI.instance();function createBaggage(e={}){return new a.BaggageImpl(new Map(Object.entries(e)))}t.createBaggage=createBaggage;function baggageEntryMetadataFromString(e){if(typeof e!==\"string\"){i.error(`Cannot create baggage metadata from unknown type: ${typeof e}`);e=\"\"}return{__TYPE__:o.baggageEntryMetadataSymbol,toString(){return e}}}t.baggageEntryMetadataFromString=baggageEntryMetadataFromString},778:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.context=void 0;const n=r(912);t.context=n.ContextAPI.getInstance()},108:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NoopContextManager=void 0;const n=r(23);class NoopContextManager{active(){return n.ROOT_CONTEXT}with(e,t,r,...n){return t.call(r,...n)}bind(e,t){return t}enable(){return this}disable(){return this}}t.NoopContextManager=NoopContextManager},23:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ROOT_CONTEXT=t.createContextKey=void 0;function createContextKey(e){return Symbol.for(e)}t.createContextKey=createContextKey;class BaseContext{constructor(e){const t=this;t._currentContext=e?new Map(e):new Map;t.getValue=e=>t._currentContext.get(e);t.setValue=(e,r)=>{const n=new BaseContext(t._currentContext);n._currentContext.set(e,r);return n};t.deleteValue=e=>{const r=new BaseContext(t._currentContext);r._currentContext.delete(e);return r}}}t.ROOT_CONTEXT=new BaseContext},304:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.diag=void 0;const n=r(44);t.diag=n.DiagAPI.instance()},757:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.DiagComponentLogger=void 0;const n=r(221);class DiagComponentLogger{constructor(e){this._namespace=e.namespace||\"DiagComponentLogger\"}debug(...e){return logProxy(\"debug\",this._namespace,e)}error(...e){return logProxy(\"error\",this._namespace,e)}info(...e){return logProxy(\"info\",this._namespace,e)}warn(...e){return logProxy(\"warn\",this._namespace,e)}verbose(...e){return logProxy(\"verbose\",this._namespace,e)}}t.DiagComponentLogger=DiagComponentLogger;function logProxy(e,t,r){const a=(0,n.getGlobal)(\"diag\");if(!a){return}r.unshift(t);return a[e](...r)}},83:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.DiagConsoleLogger=void 0;const r=[{n:\"error\",c:\"error\"},{n:\"warn\",c:\"warn\"},{n:\"info\",c:\"info\"},{n:\"debug\",c:\"debug\"},{n:\"verbose\",c:\"trace\"}];class DiagConsoleLogger{constructor(){function _consoleFunc(e){return function(...t){if(console){let r=console[e];if(typeof r!==\"function\"){r=console.log}if(typeof r===\"function\"){return r.apply(console,t)}}}}for(let e=0;e{Object.defineProperty(t,\"__esModule\",{value:true});t.createLogLevelDiagLogger=void 0;const n=r(711);function createLogLevelDiagLogger(e,t){if(en.DiagLogLevel.ALL){e=n.DiagLogLevel.ALL}t=t||{};function _filterFunc(r,n){const a=t[r];if(typeof a===\"function\"&&e>=n){return a.bind(t)}return function(){}}return{error:_filterFunc(\"error\",n.DiagLogLevel.ERROR),warn:_filterFunc(\"warn\",n.DiagLogLevel.WARN),info:_filterFunc(\"info\",n.DiagLogLevel.INFO),debug:_filterFunc(\"debug\",n.DiagLogLevel.DEBUG),verbose:_filterFunc(\"verbose\",n.DiagLogLevel.VERBOSE)}}t.createLogLevelDiagLogger=createLogLevelDiagLogger},711:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.DiagLogLevel=void 0;var r;(function(e){e[e[\"NONE\"]=0]=\"NONE\";e[e[\"ERROR\"]=30]=\"ERROR\";e[e[\"WARN\"]=50]=\"WARN\";e[e[\"INFO\"]=60]=\"INFO\";e[e[\"DEBUG\"]=70]=\"DEBUG\";e[e[\"VERBOSE\"]=80]=\"VERBOSE\";e[e[\"ALL\"]=9999]=\"ALL\"})(r=t.DiagLogLevel||(t.DiagLogLevel={}))},221:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.unregisterGlobal=t.getGlobal=t.registerGlobal=void 0;const n=r(678);const a=r(652);const o=r(662);const i=a.VERSION.split(\".\")[0];const c=Symbol.for(`opentelemetry.js.api.${i}`);const s=n._globalThis;function registerGlobal(e,t,r,n=false){var o;const i=s[c]=(o=s[c])!==null&&o!==void 0?o:{version:a.VERSION};if(!n&&i[e]){const t=new Error(`@opentelemetry/api: Attempted duplicate registration of API: ${e}`);r.error(t.stack||t.message);return false}if(i.version!==a.VERSION){const t=new Error(`@opentelemetry/api: Registration of version v${i.version} for ${e} does not match previously registered API v${a.VERSION}`);r.error(t.stack||t.message);return false}i[e]=t;r.debug(`@opentelemetry/api: Registered a global for ${e} v${a.VERSION}.`);return true}t.registerGlobal=registerGlobal;function getGlobal(e){var t,r;const n=(t=s[c])===null||t===void 0?void 0:t.version;if(!n||!(0,o.isCompatible)(n)){return}return(r=s[c])===null||r===void 0?void 0:r[e]}t.getGlobal=getGlobal;function unregisterGlobal(e,t){t.debug(`@opentelemetry/api: Unregistering a global for ${e} v${a.VERSION}.`);const r=s[c];if(r){delete r[e]}}t.unregisterGlobal=unregisterGlobal},662:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.isCompatible=t._makeCompatibilityCheck=void 0;const n=r(652);const a=/^(\\d+)\\.(\\d+)\\.(\\d+)(-(.+))?$/;function _makeCompatibilityCheck(e){const t=new Set([e]);const r=new Set;const n=e.match(a);if(!n){return()=>false}const o={major:+n[1],minor:+n[2],patch:+n[3],prerelease:n[4]};if(o.prerelease!=null){return function isExactmatch(t){return t===e}}function _reject(e){r.add(e);return false}function _accept(e){t.add(e);return true}return function isCompatible(e){if(t.has(e)){return true}if(r.has(e)){return false}const n=e.match(a);if(!n){return _reject(e)}const i={major:+n[1],minor:+n[2],patch:+n[3],prerelease:n[4]};if(i.prerelease!=null){return _reject(e)}if(o.major!==i.major){return _reject(e)}if(o.major===0){if(o.minor===i.minor&&o.patch<=i.patch){return _accept(e)}return _reject(e)}if(o.minor<=i.minor){return _accept(e)}return _reject(e)}}t._makeCompatibilityCheck=_makeCompatibilityCheck;t.isCompatible=_makeCompatibilityCheck(n.VERSION)},120:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.metrics=void 0;const n=r(262);t.metrics=n.MetricsAPI.getInstance()},532:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ValueType=void 0;var r;(function(e){e[e[\"INT\"]=0]=\"INT\";e[e[\"DOUBLE\"]=1]=\"DOUBLE\"})(r=t.ValueType||(t.ValueType={}))},440:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.createNoopMeter=t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC=t.NOOP_OBSERVABLE_GAUGE_METRIC=t.NOOP_OBSERVABLE_COUNTER_METRIC=t.NOOP_UP_DOWN_COUNTER_METRIC=t.NOOP_HISTOGRAM_METRIC=t.NOOP_COUNTER_METRIC=t.NOOP_METER=t.NoopObservableUpDownCounterMetric=t.NoopObservableGaugeMetric=t.NoopObservableCounterMetric=t.NoopObservableMetric=t.NoopHistogramMetric=t.NoopUpDownCounterMetric=t.NoopCounterMetric=t.NoopMetric=t.NoopMeter=void 0;class NoopMeter{constructor(){}createHistogram(e,r){return t.NOOP_HISTOGRAM_METRIC}createCounter(e,r){return t.NOOP_COUNTER_METRIC}createUpDownCounter(e,r){return t.NOOP_UP_DOWN_COUNTER_METRIC}createObservableGauge(e,r){return t.NOOP_OBSERVABLE_GAUGE_METRIC}createObservableCounter(e,r){return t.NOOP_OBSERVABLE_COUNTER_METRIC}createObservableUpDownCounter(e,r){return t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC}addBatchObservableCallback(e,t){}removeBatchObservableCallback(e){}}t.NoopMeter=NoopMeter;class NoopMetric{}t.NoopMetric=NoopMetric;class NoopCounterMetric extends NoopMetric{add(e,t){}}t.NoopCounterMetric=NoopCounterMetric;class NoopUpDownCounterMetric extends NoopMetric{add(e,t){}}t.NoopUpDownCounterMetric=NoopUpDownCounterMetric;class NoopHistogramMetric extends NoopMetric{record(e,t){}}t.NoopHistogramMetric=NoopHistogramMetric;class NoopObservableMetric{addCallback(e){}removeCallback(e){}}t.NoopObservableMetric=NoopObservableMetric;class NoopObservableCounterMetric extends NoopObservableMetric{}t.NoopObservableCounterMetric=NoopObservableCounterMetric;class NoopObservableGaugeMetric extends NoopObservableMetric{}t.NoopObservableGaugeMetric=NoopObservableGaugeMetric;class NoopObservableUpDownCounterMetric extends NoopObservableMetric{}t.NoopObservableUpDownCounterMetric=NoopObservableUpDownCounterMetric;t.NOOP_METER=new NoopMeter;t.NOOP_COUNTER_METRIC=new NoopCounterMetric;t.NOOP_HISTOGRAM_METRIC=new NoopHistogramMetric;t.NOOP_UP_DOWN_COUNTER_METRIC=new NoopUpDownCounterMetric;t.NOOP_OBSERVABLE_COUNTER_METRIC=new NoopObservableCounterMetric;t.NOOP_OBSERVABLE_GAUGE_METRIC=new NoopObservableGaugeMetric;t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC=new NoopObservableUpDownCounterMetric;function createNoopMeter(){return t.NOOP_METER}t.createNoopMeter=createNoopMeter},586:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NOOP_METER_PROVIDER=t.NoopMeterProvider=void 0;const n=r(440);class NoopMeterProvider{getMeter(e,t,r){return n.NOOP_METER}}t.NoopMeterProvider=NoopMeterProvider;t.NOOP_METER_PROVIDER=new NoopMeterProvider},678:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var a=this&&this.__exportStar||function(e,t){for(var r in e)if(r!==\"default\"&&!Object.prototype.hasOwnProperty.call(t,r))n(t,e,r)};Object.defineProperty(t,\"__esModule\",{value:true});a(r(59),t)},460:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t._globalThis=void 0;t._globalThis=typeof globalThis===\"object\"?globalThis:global},59:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var a=this&&this.__exportStar||function(e,t){for(var r in e)if(r!==\"default\"&&!Object.prototype.hasOwnProperty.call(t,r))n(t,e,r)};Object.defineProperty(t,\"__esModule\",{value:true});a(r(460),t)},27:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.propagation=void 0;const n=r(25);t.propagation=n.PropagationAPI.getInstance()},19:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NoopTextMapPropagator=void 0;class NoopTextMapPropagator{inject(e,t){}extract(e,t){return e}fields(){return[]}}t.NoopTextMapPropagator=NoopTextMapPropagator},92:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.defaultTextMapSetter=t.defaultTextMapGetter=void 0;t.defaultTextMapGetter={get(e,t){if(e==null){return undefined}return e[t]},keys(e){if(e==null){return[]}return Object.keys(e)}};t.defaultTextMapSetter={set(e,t,r){if(e==null){return}e[t]=r}}},816:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.trace=void 0;const n=r(397);t.trace=n.TraceAPI.getInstance()},374:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NonRecordingSpan=void 0;const n=r(546);class NonRecordingSpan{constructor(e=n.INVALID_SPAN_CONTEXT){this._spanContext=e}spanContext(){return this._spanContext}setAttribute(e,t){return this}setAttributes(e){return this}addEvent(e,t){return this}setStatus(e){return this}updateName(e){return this}end(e){}isRecording(){return false}recordException(e,t){}}t.NonRecordingSpan=NonRecordingSpan},637:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NoopTracer=void 0;const n=r(912);const a=r(793);const o=r(374);const i=r(477);const c=n.ContextAPI.getInstance();class NoopTracer{startSpan(e,t,r=c.active()){const n=Boolean(t===null||t===void 0?void 0:t.root);if(n){return new o.NonRecordingSpan}const s=r&&(0,a.getSpanContext)(r);if(isSpanContext(s)&&(0,i.isSpanContextValid)(s)){return new o.NonRecordingSpan(s)}else{return new o.NonRecordingSpan}}startActiveSpan(e,t,r,n){let o;let i;let s;if(arguments.length<2){return}else if(arguments.length===2){s=t}else if(arguments.length===3){o=t;s=r}else{o=t;i=r;s=n}const u=i!==null&&i!==void 0?i:c.active();const l=this.startSpan(e,o,u);const g=(0,a.setSpan)(u,l);return c.with(g,s,undefined,l)}}t.NoopTracer=NoopTracer;function isSpanContext(e){return typeof e===\"object\"&&typeof e[\"spanId\"]===\"string\"&&typeof e[\"traceId\"]===\"string\"&&typeof e[\"traceFlags\"]===\"number\"}},76:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NoopTracerProvider=void 0;const n=r(637);class NoopTracerProvider{getTracer(e,t,r){return new n.NoopTracer}}t.NoopTracerProvider=NoopTracerProvider},779:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ProxyTracer=void 0;const n=r(637);const a=new n.NoopTracer;class ProxyTracer{constructor(e,t,r,n){this._provider=e;this.name=t;this.version=r;this.options=n}startSpan(e,t,r){return this._getTracer().startSpan(e,t,r)}startActiveSpan(e,t,r,n){const a=this._getTracer();return Reflect.apply(a.startActiveSpan,a,arguments)}_getTracer(){if(this._delegate){return this._delegate}const e=this._provider.getDelegateTracer(this.name,this.version,this.options);if(!e){return a}this._delegate=e;return this._delegate}}t.ProxyTracer=ProxyTracer},498:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ProxyTracerProvider=void 0;const n=r(779);const a=r(76);const o=new a.NoopTracerProvider;class ProxyTracerProvider{getTracer(e,t,r){var a;return(a=this.getDelegateTracer(e,t,r))!==null&&a!==void 0?a:new n.ProxyTracer(this,e,t,r)}getDelegate(){var e;return(e=this._delegate)!==null&&e!==void 0?e:o}setDelegate(e){this._delegate=e}getDelegateTracer(e,t,r){var n;return(n=this._delegate)===null||n===void 0?void 0:n.getTracer(e,t,r)}}t.ProxyTracerProvider=ProxyTracerProvider},312:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.SamplingDecision=void 0;var r;(function(e){e[e[\"NOT_RECORD\"]=0]=\"NOT_RECORD\";e[e[\"RECORD\"]=1]=\"RECORD\";e[e[\"RECORD_AND_SAMPLED\"]=2]=\"RECORD_AND_SAMPLED\"})(r=t.SamplingDecision||(t.SamplingDecision={}))},793:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.getSpanContext=t.setSpanContext=t.deleteSpan=t.setSpan=t.getActiveSpan=t.getSpan=void 0;const n=r(23);const a=r(374);const o=r(912);const i=(0,n.createContextKey)(\"OpenTelemetry Context Key SPAN\");function getSpan(e){return e.getValue(i)||undefined}t.getSpan=getSpan;function getActiveSpan(){return getSpan(o.ContextAPI.getInstance().active())}t.getActiveSpan=getActiveSpan;function setSpan(e,t){return e.setValue(i,t)}t.setSpan=setSpan;function deleteSpan(e){return e.deleteValue(i)}t.deleteSpan=deleteSpan;function setSpanContext(e,t){return setSpan(e,new a.NonRecordingSpan(t))}t.setSpanContext=setSpanContext;function getSpanContext(e){var t;return(t=getSpan(e))===null||t===void 0?void 0:t.spanContext()}t.getSpanContext=getSpanContext},285:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.TraceStateImpl=void 0;const n=r(240);const a=32;const o=512;const i=\",\";const c=\"=\";class TraceStateImpl{constructor(e){this._internalState=new Map;if(e)this._parse(e)}set(e,t){const r=this._clone();if(r._internalState.has(e)){r._internalState.delete(e)}r._internalState.set(e,t);return r}unset(e){const t=this._clone();t._internalState.delete(e);return t}get(e){return this._internalState.get(e)}serialize(){return this._keys().reduce(((e,t)=>{e.push(t+c+this.get(t));return e}),[]).join(i)}_parse(e){if(e.length>o)return;this._internalState=e.split(i).reverse().reduce(((e,t)=>{const r=t.trim();const a=r.indexOf(c);if(a!==-1){const o=r.slice(0,a);const i=r.slice(a+1,t.length);if((0,n.validateKey)(o)&&(0,n.validateValue)(i)){e.set(o,i)}else{}}return e}),new Map);if(this._internalState.size>a){this._internalState=new Map(Array.from(this._internalState.entries()).reverse().slice(0,a))}}_keys(){return Array.from(this._internalState.keys()).reverse()}_clone(){const e=new TraceStateImpl;e._internalState=new Map(this._internalState);return e}}t.TraceStateImpl=TraceStateImpl},240:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.validateValue=t.validateKey=void 0;const r=\"[_0-9a-z-*/]\";const n=`[a-z]${r}{0,255}`;const a=`[a-z0-9]${r}{0,240}@[a-z]${r}{0,13}`;const o=new RegExp(`^(?:${n}|${a})$`);const i=/^[ -~]{0,255}[!-~]$/;const c=/,|=/;function validateKey(e){return o.test(e)}t.validateKey=validateKey;function validateValue(e){return i.test(e)&&!c.test(e)}t.validateValue=validateValue},87:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.createTraceState=void 0;const n=r(285);function createTraceState(e){return new n.TraceStateImpl(e)}t.createTraceState=createTraceState},546:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.INVALID_SPAN_CONTEXT=t.INVALID_TRACEID=t.INVALID_SPANID=void 0;const n=r(731);t.INVALID_SPANID=\"0000000000000000\";t.INVALID_TRACEID=\"00000000000000000000000000000000\";t.INVALID_SPAN_CONTEXT={traceId:t.INVALID_TRACEID,spanId:t.INVALID_SPANID,traceFlags:n.TraceFlags.NONE}},613:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.SpanKind=void 0;var r;(function(e){e[e[\"INTERNAL\"]=0]=\"INTERNAL\";e[e[\"SERVER\"]=1]=\"SERVER\";e[e[\"CLIENT\"]=2]=\"CLIENT\";e[e[\"PRODUCER\"]=3]=\"PRODUCER\";e[e[\"CONSUMER\"]=4]=\"CONSUMER\"})(r=t.SpanKind||(t.SpanKind={}))},477:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.wrapSpanContext=t.isSpanContextValid=t.isValidSpanId=t.isValidTraceId=void 0;const n=r(546);const a=r(374);const o=/^([0-9a-f]{32})$/i;const i=/^[0-9a-f]{16}$/i;function isValidTraceId(e){return o.test(e)&&e!==n.INVALID_TRACEID}t.isValidTraceId=isValidTraceId;function isValidSpanId(e){return i.test(e)&&e!==n.INVALID_SPANID}t.isValidSpanId=isValidSpanId;function isSpanContextValid(e){return isValidTraceId(e.traceId)&&isValidSpanId(e.spanId)}t.isSpanContextValid=isSpanContextValid;function wrapSpanContext(e){return new a.NonRecordingSpan(e)}t.wrapSpanContext=wrapSpanContext},854:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.SpanStatusCode=void 0;var r;(function(e){e[e[\"UNSET\"]=0]=\"UNSET\";e[e[\"OK\"]=1]=\"OK\";e[e[\"ERROR\"]=2]=\"ERROR\"})(r=t.SpanStatusCode||(t.SpanStatusCode={}))},731:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.TraceFlags=void 0;var r;(function(e){e[e[\"NONE\"]=0]=\"NONE\";e[e[\"SAMPLED\"]=1]=\"SAMPLED\"})(r=t.TraceFlags||(t.TraceFlags={}))},652:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.VERSION=void 0;t.VERSION=\"1.6.0\"}};var t={};function __nccwpck_require__(r){var n=t[r];if(n!==undefined){return n.exports}var a=t[r]={exports:{}};var o=true;try{e[r].call(a.exports,a,a.exports,__nccwpck_require__);o=false}finally{if(o)delete t[r]}return a.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var r={};(()=>{var e=r;Object.defineProperty(e,\"__esModule\",{value:true});e.trace=e.propagation=e.metrics=e.diag=e.context=e.INVALID_SPAN_CONTEXT=e.INVALID_TRACEID=e.INVALID_SPANID=e.isValidSpanId=e.isValidTraceId=e.isSpanContextValid=e.createTraceState=e.TraceFlags=e.SpanStatusCode=e.SpanKind=e.SamplingDecision=e.ProxyTracerProvider=e.ProxyTracer=e.defaultTextMapSetter=e.defaultTextMapGetter=e.ValueType=e.createNoopMeter=e.DiagLogLevel=e.DiagConsoleLogger=e.ROOT_CONTEXT=e.createContextKey=e.baggageEntryMetadataFromString=void 0;var t=__nccwpck_require__(504);Object.defineProperty(e,\"baggageEntryMetadataFromString\",{enumerable:true,get:function(){return t.baggageEntryMetadataFromString}});var n=__nccwpck_require__(23);Object.defineProperty(e,\"createContextKey\",{enumerable:true,get:function(){return n.createContextKey}});Object.defineProperty(e,\"ROOT_CONTEXT\",{enumerable:true,get:function(){return n.ROOT_CONTEXT}});var a=__nccwpck_require__(83);Object.defineProperty(e,\"DiagConsoleLogger\",{enumerable:true,get:function(){return a.DiagConsoleLogger}});var o=__nccwpck_require__(711);Object.defineProperty(e,\"DiagLogLevel\",{enumerable:true,get:function(){return o.DiagLogLevel}});var i=__nccwpck_require__(440);Object.defineProperty(e,\"createNoopMeter\",{enumerable:true,get:function(){return i.createNoopMeter}});var c=__nccwpck_require__(532);Object.defineProperty(e,\"ValueType\",{enumerable:true,get:function(){return c.ValueType}});var s=__nccwpck_require__(92);Object.defineProperty(e,\"defaultTextMapGetter\",{enumerable:true,get:function(){return s.defaultTextMapGetter}});Object.defineProperty(e,\"defaultTextMapSetter\",{enumerable:true,get:function(){return s.defaultTextMapSetter}});var u=__nccwpck_require__(779);Object.defineProperty(e,\"ProxyTracer\",{enumerable:true,get:function(){return u.ProxyTracer}});var l=__nccwpck_require__(498);Object.defineProperty(e,\"ProxyTracerProvider\",{enumerable:true,get:function(){return l.ProxyTracerProvider}});var g=__nccwpck_require__(312);Object.defineProperty(e,\"SamplingDecision\",{enumerable:true,get:function(){return g.SamplingDecision}});var p=__nccwpck_require__(613);Object.defineProperty(e,\"SpanKind\",{enumerable:true,get:function(){return p.SpanKind}});var d=__nccwpck_require__(854);Object.defineProperty(e,\"SpanStatusCode\",{enumerable:true,get:function(){return d.SpanStatusCode}});var _=__nccwpck_require__(731);Object.defineProperty(e,\"TraceFlags\",{enumerable:true,get:function(){return _.TraceFlags}});var f=__nccwpck_require__(87);Object.defineProperty(e,\"createTraceState\",{enumerable:true,get:function(){return f.createTraceState}});var b=__nccwpck_require__(477);Object.defineProperty(e,\"isSpanContextValid\",{enumerable:true,get:function(){return b.isSpanContextValid}});Object.defineProperty(e,\"isValidTraceId\",{enumerable:true,get:function(){return b.isValidTraceId}});Object.defineProperty(e,\"isValidSpanId\",{enumerable:true,get:function(){return b.isValidSpanId}});var v=__nccwpck_require__(546);Object.defineProperty(e,\"INVALID_SPANID\",{enumerable:true,get:function(){return v.INVALID_SPANID}});Object.defineProperty(e,\"INVALID_TRACEID\",{enumerable:true,get:function(){return v.INVALID_TRACEID}});Object.defineProperty(e,\"INVALID_SPAN_CONTEXT\",{enumerable:true,get:function(){return v.INVALID_SPAN_CONTEXT}});const O=__nccwpck_require__(778);Object.defineProperty(e,\"context\",{enumerable:true,get:function(){return O.context}});const P=__nccwpck_require__(304);Object.defineProperty(e,\"diag\",{enumerable:true,get:function(){return P.diag}});const N=__nccwpck_require__(120);Object.defineProperty(e,\"metrics\",{enumerable:true,get:function(){return N.metrics}});const S=__nccwpck_require__(27);Object.defineProperty(e,\"propagation\",{enumerable:true,get:function(){return S.propagation}});const C=__nccwpck_require__(816);Object.defineProperty(e,\"trace\",{enumerable:true,get:function(){return C.trace}});e[\"default\"]={context:O.context,diag:P.diag,metrics:N.metrics,propagation:S.propagation,trace:C.trace}})();module.exports=r})();"],"names":["e","t","r","Object","defineProperty","value","ContextAPI","n","a","o","i","c","NoopContextManager","getInstance","_instance","setGlobalContextManager","registerGlobal","DiagAPI","instance","active","_getContextManager","with","bind","getGlobal","disable","unregisterGlobal","_logProxy","setLogger","logLevel","DiagLogLevel","INFO","s","Error","error","stack","message","u","l","createLogLevelDiagLogger","suppressOverrideMessage","warn","createComponentLogger","DiagComponentLogger","verbose","debug","info","MetricsAPI","setGlobalMeterProvider","getMeterProvider","NOOP_METER_PROVIDER","getMeter","PropagationAPI","NoopTextMapPropagator","createBaggage","getBaggage","getActiveBaggage","setBaggage","deleteBaggage","setGlobalPropagator","inject","defaultTextMapSetter","_getGlobalPropagator","extract","defaultTextMapGetter","fields","TraceAPI","_proxyTracerProvider","ProxyTracerProvider","wrapSpanContext","isSpanContextValid","deleteSpan","getSpan","getActiveSpan","getSpanContext","setSpan","setSpanContext","setGlobalTracerProvider","setDelegate","getTracerProvider","getTracer","createContextKey","getValue","undefined","setValue","deleteValue","BaggageImpl","_entries","Map","getEntry","get","assign","getAllEntries","Array","from","entries","map","setEntry","set","removeEntry","delete","removeEntries","clear","baggageEntryMetadataSymbol","Symbol","baggageEntryMetadataFromString","__TYPE__","toString","context","ROOT_CONTEXT","call","enable","for","BaseContext","_currentContext","diag","_namespace","namespace","logProxy","unshift","DiagConsoleLogger","_consoleFunc","console","log","apply","length","NONE","ALL","_filterFunc","ERROR","WARN","DEBUG","VERBOSE","VERSION","split","_globalThis","version","isCompatible","_makeCompatibilityCheck","Set","match","major","minor","patch","prerelease","isExactmatch","_reject","add","_accept","has","metrics","ValueType","createNoopMeter","NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC","NOOP_OBSERVABLE_GAUGE_METRIC","NOOP_OBSERVABLE_COUNTER_METRIC","NOOP_UP_DOWN_COUNTER_METRIC","NOOP_HISTOGRAM_METRIC","NOOP_COUNTER_METRIC","NOOP_METER","NoopObservableUpDownCounterMetric","NoopObservableGaugeMetric","NoopObservableCounterMetric","NoopObservableMetric","NoopHistogramMetric","NoopUpDownCounterMetric","NoopCounterMetric","NoopMetric","NoopMeter","createHistogram","createCounter","createUpDownCounter","createObservableGauge","createObservableCounter","createObservableUpDownCounter","addBatchObservableCallback","removeBatchObservableCallback","record","addCallback","removeCallback","NoopMeterProvider","__createBinding","create","enumerable","__exportStar","prototype","hasOwnProperty","globalThis","propagation","keys","trace","NonRecordingSpan","INVALID_SPAN_CONTEXT","_spanContext","spanContext","setAttribute","setAttributes","addEvent","setStatus","updateName","end","isRecording","recordException","NoopTracer","startSpan","Boolean","root","isSpanContext","startActiveSpan","arguments","g","NoopTracerProvider","ProxyTracer","_provider","name","options","_getTracer","Reflect","_delegate","getDelegateTracer","getDelegate","SamplingDecision","TraceStateImpl","_internalState","_parse","_clone","unset","serialize","_keys","reduce","push","join","reverse","trim","indexOf","slice","validateKey","validateValue","size","RegExp","test","createTraceState","INVALID_TRACEID","INVALID_SPANID","traceId","spanId","traceFlags","TraceFlags","SpanKind","isValidSpanId","isValidTraceId","SpanStatusCode","__nccwpck_require__","exports","ab","p","d","_","f","b","v","O","P","N","S","C","module"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 12922, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/dist/compiled/cookie/index.js"],"sourcesContent":["(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var r=e;\n/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */r.parse=parse;r.serialize=serialize;var i=decodeURIComponent;var t=encodeURIComponent;var a=/; */;var n=/^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;function parse(e,r){if(typeof e!==\"string\"){throw new TypeError(\"argument str must be a string\")}var t={};var n=r||{};var o=e.split(a);var s=n.decode||i;for(var p=0;p{"use strict";return[ +"[project]/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all)=>{ + for(var name in all)__defProp(target, name, { + get: all[name], + enumerable: true + }); +}; +var __copyProps = (to, from, except, desc)=>{ + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from))if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { + get: ()=>from[key], + enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable + }); + } + return to; +}; +var __toCommonJS = (mod)=>__copyProps(__defProp({}, "__esModule", { + value: true + }), mod); +// src/index.ts +var src_exports = {}; +__export(src_exports, { + RequestCookies: ()=>RequestCookies, + ResponseCookies: ()=>ResponseCookies, + parseCookie: ()=>parseCookie, + parseSetCookie: ()=>parseSetCookie, + stringifyCookie: ()=>stringifyCookie +}); +module.exports = __toCommonJS(src_exports); +// src/serialize.ts +function stringifyCookie(c) { + var _a; + const attrs = [ + "path" in c && c.path && `Path=${c.path}`, + "expires" in c && (c.expires || c.expires === 0) && `Expires=${(typeof c.expires === "number" ? new Date(c.expires) : c.expires).toUTCString()}`, + "maxAge" in c && typeof c.maxAge === "number" && `Max-Age=${c.maxAge}`, + "domain" in c && c.domain && `Domain=${c.domain}`, + "secure" in c && c.secure && "Secure", + "httpOnly" in c && c.httpOnly && "HttpOnly", + "sameSite" in c && c.sameSite && `SameSite=${c.sameSite}`, + "partitioned" in c && c.partitioned && "Partitioned", + "priority" in c && c.priority && `Priority=${c.priority}` + ].filter(Boolean); + const stringified = `${c.name}=${encodeURIComponent((_a = c.value) != null ? _a : "")}`; + return attrs.length === 0 ? stringified : `${stringified}; ${attrs.join("; ")}`; +} +function parseCookie(cookie) { + const map = /* @__PURE__ */ new Map(); + for (const pair of cookie.split(/; */)){ + if (!pair) continue; + const splitAt = pair.indexOf("="); + if (splitAt === -1) { + map.set(pair, "true"); + continue; + } + const [key, value] = [ + pair.slice(0, splitAt), + pair.slice(splitAt + 1) + ]; + try { + map.set(key, decodeURIComponent(value != null ? value : "true")); + } catch {} + } + return map; +} +function parseSetCookie(setCookie) { + if (!setCookie) { + return void 0; + } + const [[name, value], ...attributes] = parseCookie(setCookie); + const { domain, expires, httponly, maxage, path, samesite, secure, partitioned, priority } = Object.fromEntries(attributes.map(([key, value2])=>[ + key.toLowerCase().replace(/-/g, ""), + value2 + ])); + const cookie = { + name, + value: decodeURIComponent(value), + domain, + ...expires && { + expires: new Date(expires) + }, + ...httponly && { + httpOnly: true + }, + ...typeof maxage === "string" && { + maxAge: Number(maxage) + }, + path, + ...samesite && { + sameSite: parseSameSite(samesite) + }, + ...secure && { + secure: true + }, + ...priority && { + priority: parsePriority(priority) + }, + ...partitioned && { + partitioned: true + } + }; + return compact(cookie); +} +function compact(t) { + const newT = {}; + for(const key in t){ + if (t[key]) { + newT[key] = t[key]; + } + } + return newT; +} +var SAME_SITE = [ + "strict", + "lax", + "none" +]; +function parseSameSite(string) { + string = string.toLowerCase(); + return SAME_SITE.includes(string) ? string : void 0; +} +var PRIORITY = [ + "low", + "medium", + "high" +]; +function parsePriority(string) { + string = string.toLowerCase(); + return PRIORITY.includes(string) ? string : void 0; +} +function splitCookiesString(cookiesString) { + if (!cookiesString) return []; + var cookiesStrings = []; + var pos = 0; + var start; + var ch; + var lastComma; + var nextStart; + var cookiesSeparatorFound; + function skipWhitespace() { + while(pos < cookiesString.length && /\s/.test(cookiesString.charAt(pos))){ + pos += 1; + } + return pos < cookiesString.length; + } + function notSpecialChar() { + ch = cookiesString.charAt(pos); + return ch !== "=" && ch !== ";" && ch !== ","; + } + while(pos < cookiesString.length){ + start = pos; + cookiesSeparatorFound = false; + while(skipWhitespace()){ + ch = cookiesString.charAt(pos); + if (ch === ",") { + lastComma = pos; + pos += 1; + skipWhitespace(); + nextStart = pos; + while(pos < cookiesString.length && notSpecialChar()){ + pos += 1; + } + if (pos < cookiesString.length && cookiesString.charAt(pos) === "=") { + cookiesSeparatorFound = true; + pos = nextStart; + cookiesStrings.push(cookiesString.substring(start, lastComma)); + start = pos; + } else { + pos = lastComma + 1; + } + } else { + pos += 1; + } + } + if (!cookiesSeparatorFound || pos >= cookiesString.length) { + cookiesStrings.push(cookiesString.substring(start, cookiesString.length)); + } + } + return cookiesStrings; +} +// src/request-cookies.ts +var RequestCookies = class { + constructor(requestHeaders){ + /** @internal */ this._parsed = /* @__PURE__ */ new Map(); + this._headers = requestHeaders; + const header = requestHeaders.get("cookie"); + if (header) { + const parsed = parseCookie(header); + for (const [name, value] of parsed){ + this._parsed.set(name, { + name, + value + }); + } + } + } + [Symbol.iterator]() { + return this._parsed[Symbol.iterator](); + } + /** + * The amount of cookies received from the client + */ get size() { + return this._parsed.size; + } + get(...args) { + const name = typeof args[0] === "string" ? args[0] : args[0].name; + return this._parsed.get(name); + } + getAll(...args) { + var _a; + const all = Array.from(this._parsed); + if (!args.length) { + return all.map(([_, value])=>value); + } + const name = typeof args[0] === "string" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name; + return all.filter(([n])=>n === name).map(([_, value])=>value); + } + has(name) { + return this._parsed.has(name); + } + set(...args) { + const [name, value] = args.length === 1 ? [ + args[0].name, + args[0].value + ] : args; + const map = this._parsed; + map.set(name, { + name, + value + }); + this._headers.set("cookie", Array.from(map).map(([_, value2])=>stringifyCookie(value2)).join("; ")); + return this; + } + /** + * Delete the cookies matching the passed name or names in the request. + */ delete(names) { + const map = this._parsed; + const result = !Array.isArray(names) ? map.delete(names) : names.map((name)=>map.delete(name)); + this._headers.set("cookie", Array.from(map).map(([_, value])=>stringifyCookie(value)).join("; ")); + return result; + } + /** + * Delete all the cookies in the cookies in the request. + */ clear() { + this.delete(Array.from(this._parsed.keys())); + return this; + } + /** + * Format the cookies in the request as a string for logging + */ [Symbol.for("edge-runtime.inspect.custom")]() { + return `RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`; + } + toString() { + return [ + ...this._parsed.values() + ].map((v)=>`${v.name}=${encodeURIComponent(v.value)}`).join("; "); + } +}; +// src/response-cookies.ts +var ResponseCookies = class { + constructor(responseHeaders){ + /** @internal */ this._parsed = /* @__PURE__ */ new Map(); + var _a, _b, _c; + this._headers = responseHeaders; + const setCookie = (_c = (_b = (_a = responseHeaders.getSetCookie) == null ? void 0 : _a.call(responseHeaders)) != null ? _b : responseHeaders.get("set-cookie")) != null ? _c : []; + const cookieStrings = Array.isArray(setCookie) ? setCookie : splitCookiesString(setCookie); + for (const cookieString of cookieStrings){ + const parsed = parseSetCookie(cookieString); + if (parsed) this._parsed.set(parsed.name, parsed); + } + } + /** + * {@link https://wicg.github.io/cookie-store/#CookieStore-get CookieStore#get} without the Promise. + */ get(...args) { + const key = typeof args[0] === "string" ? args[0] : args[0].name; + return this._parsed.get(key); + } + /** + * {@link https://wicg.github.io/cookie-store/#CookieStore-getAll CookieStore#getAll} without the Promise. + */ getAll(...args) { + var _a; + const all = Array.from(this._parsed.values()); + if (!args.length) { + return all; + } + const key = typeof args[0] === "string" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name; + return all.filter((c)=>c.name === key); + } + has(name) { + return this._parsed.has(name); + } + /** + * {@link https://wicg.github.io/cookie-store/#CookieStore-set CookieStore#set} without the Promise. + */ set(...args) { + const [name, value, cookie] = args.length === 1 ? [ + args[0].name, + args[0].value, + args[0] + ] : args; + const map = this._parsed; + map.set(name, normalizeCookie({ + name, + value, + ...cookie + })); + replace(map, this._headers); + return this; + } + /** + * {@link https://wicg.github.io/cookie-store/#CookieStore-delete CookieStore#delete} without the Promise. + */ delete(...args) { + const [name, options] = typeof args[0] === "string" ? [ + args[0] + ] : [ + args[0].name, + args[0] + ]; + return this.set({ + ...options, + name, + value: "", + expires: /* @__PURE__ */ new Date(0) + }); + } + [Symbol.for("edge-runtime.inspect.custom")]() { + return `ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`; + } + toString() { + return [ + ...this._parsed.values() + ].map(stringifyCookie).join("; "); + } +}; +function replace(bag, headers) { + headers.delete("set-cookie"); + for (const [, value] of bag){ + const serialized = stringifyCookie(value); + headers.append("set-cookie", serialized); + } +} +function normalizeCookie(cookie = { + name: "", + value: "" +}) { + if (typeof cookie.expires === "number") { + cookie.expires = new Date(cookie.expires); + } + if (cookie.maxAge) { + cookie.expires = new Date(Date.now() + cookie.maxAge * 1e3); + } + if (cookie.path === null || cookie.path === void 0) { + cookie.path = "/"; + } + return cookie; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + RequestCookies, + ResponseCookies, + parseCookie, + parseSetCookie, + stringifyCookie +}); +}), +"[project]/node_modules/next/dist/esm/build/output/log.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "bootstrap", + ()=>bootstrap, + "error", + ()=>error, + "errorOnce", + ()=>errorOnce, + "event", + ()=>event, + "info", + ()=>info, + "prefixes", + ()=>prefixes, + "ready", + ()=>ready, + "trace", + ()=>trace, + "wait", + ()=>wait, + "warn", + ()=>warn, + "warnOnce", + ()=>warnOnce +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/picocolors.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/lru-cache.js [app-route] (ecmascript)"); +; +; +const prefixes = { + wait: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["white"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["bold"])('○')), + error: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["red"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["bold"])('⨯')), + warn: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["yellow"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["bold"])('⚠')), + ready: '▲', + info: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["white"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["bold"])(' ')), + event: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["green"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["bold"])('✓')), + trace: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["magenta"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["bold"])('»')) +}; +const LOGGING_METHOD = { + log: 'log', + warn: 'warn', + error: 'error' +}; +function prefixedLog(prefixType, ...message) { + if ((message[0] === '' || message[0] === undefined) && message.length === 1) { + message.shift(); + } + const consoleMethod = prefixType in LOGGING_METHOD ? LOGGING_METHOD[prefixType] : 'log'; + const prefix = prefixes[prefixType]; + // If there's no message, don't print the prefix but a new line + if (message.length === 0) { + console[consoleMethod](''); + } else { + // Ensure if there's ANSI escape codes it's concatenated into one string. + // Chrome DevTool can only handle color if it's in one string. + if (message.length === 1 && typeof message[0] === 'string') { + console[consoleMethod](prefix + ' ' + message[0]); + } else { + console[consoleMethod](prefix, ...message); + } + } +} +function bootstrap(message) { + console.log(message); +} +function wait(...message) { + prefixedLog('wait', ...message); +} +function error(...message) { + prefixedLog('error', ...message); +} +function warn(...message) { + prefixedLog('warn', ...message); +} +function ready(...message) { + prefixedLog('ready', ...message); +} +function info(...message) { + prefixedLog('info', ...message); +} +function event(...message) { + prefixedLog('event', ...message); +} +function trace(...message) { + prefixedLog('trace', ...message); +} +const warnOnceCache = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["LRUCache"](10000, (value)=>value.length); +function warnOnce(...message) { + const key = message.join(' '); + if (!warnOnceCache.has(key)) { + warnOnceCache.set(key, key); + warn(...message); + } +} +const errorOnceCache = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["LRUCache"](10000, (value)=>value.length); +function errorOnce(...message) { + const key = message.join(' '); + if (!errorOnceCache.has(key)) { + errorOnceCache.set(key, key); + error(...message); + } +} +}), +"[project]/node_modules/next/dist/esm/build/templates/app-route.js { INNER_APP_ROUTE => \"[project]/src/app/h5/m3u8/[...path]/route.ts [app-route] (ecmascript)\" } [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "handler", + ()=>handler, + "patchFetch", + ()=>patchFetch, + "routeModule", + ()=>routeModule, + "serverHooks", + ()=>serverHooks, + "workAsyncStorage", + ()=>workAsyncStorage, + "workUnitAsyncStorage", + ()=>workUnitAsyncStorage +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$modules$2f$app$2d$route$2f$module$2e$compiled$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/route-modules/app-route/module.compiled.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/route-kind.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$patch$2d$fetch$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/patch-fetch.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/request-meta.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$manifests$2d$singleton$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/manifests-singleton.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$node$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/base-http/node.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/next-request.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$instrumentation$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/instrumentation/utils.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/send-response.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/utils.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$cache$2d$control$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/cache-control.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/shared/lib/no-fallback-error.external.js [external] (next/dist/shared/lib/no-fallback-error.external.js, cjs)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$route$2d$cache$2d$key$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/route-cache-key.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/index.js [app-route] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/types.js [app-route] (ecmascript)"); +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +// We inject the nextConfigOutput here so that we can use them in the route +// module. +const nextConfigOutput = "standalone"; +const routeModule = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$modules$2f$app$2d$route$2f$module$2e$compiled$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["AppRouteRouteModule"]({ + definition: { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].APP_ROUTE, + page: "/h5/m3u8/[...path]/route", + pathname: "/h5/m3u8/[...path]", + filename: "route", + bundlePath: "" + }, + distDir: ("TURBOPACK compile-time value", ".next-dev/dev") || '', + relativeProjectDir: ("TURBOPACK compile-time value", "") || '', + resolvedPagePath: "[project]/src/app/h5/m3u8/[...path]/route.ts", + nextConfigOutput, + // The lazy require factory ensures that: + // - In dev: devRequestTimingInternalsEnd is set before userland executes, + // correctly attributing module load time to application-code rather than + // framework internals. + // - In all modes: async modules (route files with top-level await) are + // handled correctly — require() returns a Promise for such modules, which + // ensureUserland() awaits before the first request is handled. + userland: ()=>__turbopack_context__.r("[project]/src/app/h5/m3u8/[...path]/route.ts [app-route] (ecmascript)"), + // In Turbopack dev mode, also provide a synchronous per-request getter so + // server HMR updates are picked up without re-executing the entry chunk. + // Using require() (synchronous) avoids adding async overhead that would be + // incorrectly attributed to application-code time in devRequestTiming. + ...("TURBOPACK compile-time truthy", 1) ? { + getUserland: ()=>__turbopack_context__.r("[project]/src/app/h5/m3u8/[...path]/route.ts [app-route] (ecmascript)") + } : "TURBOPACK unreachable" +}); +// Pull out the exports that we need to expose from the module. This should +// be eliminated when we've moved the other routes to the new format. These +// are used to hook into the route. +const { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule; +function patchFetch() { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$patch$2d$fetch$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["patchFetch"])({ + workAsyncStorage, + workUnitAsyncStorage + }); +} +; +async function handler(req, res, ctx) { + if (ctx.requestMeta) { + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["setRequestMeta"])(req, ctx.requestMeta); + } + if (routeModule.isDev) { + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["addRequestMeta"])(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint()); + } + let srcPage = "/h5/m3u8/[...path]/route"; + // turbopack doesn't normalize `/index` in the page name + // so we need to to process dynamic routes properly + // TODO: fix turbopack providing differing value from webpack + if ("TURBOPACK compile-time truthy", 1) { + srcPage = srcPage.replace(/\/index$/, '') || '/'; + } else if (srcPage === '/index') { + // we always normalize /index specifically + srcPage = '/'; + } + const multiZoneDraftMode = ("TURBOPACK compile-time value", false); + const prepareResult = await routeModule.prepare(req, res, { + srcPage, + multiZoneDraftMode + }); + if (!prepareResult) { + res.statusCode = 400; + res.end('Bad Request'); + ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve()); + return null; + } + const { buildId, deploymentId, params, nextConfig, parsedUrl, isDraftMode, prerenderManifest, routerServerContext, isOnDemandRevalidate, revalidateOnlyGenerated, resolvedPathname, clientReferenceManifest, serverActionsManifest, previewProps } = prepareResult; + const normalizedSrcPage = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeAppPath"])(srcPage); + // Only this route's prerenders can establish ISR or admit generated params. + const isPrerendered = Boolean(prerenderManifest.routes[resolvedPathname]) && (routeModule.isDev || (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$route$2d$cache$2d$key$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isRouteCacheOwner"])(resolvedPathname, routeModule.cacheOwner, prerenderManifest.routes[resolvedPathname])); + let isIsr = Boolean(prerenderManifest.dynamicRoutes[normalizedSrcPage] || isPrerendered); + const render404 = async ()=>{ + // TODO: should route-module itself handle rendering the 404 + if (routerServerContext == null ? void 0 : routerServerContext.render404) { + await routerServerContext.render404(req, res, parsedUrl, false); + } else { + res.end('This page could not be found'); + } + return null; + }; + if (isIsr && !isDraftMode) { + const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage]; + if (prerenderInfo) { + if (prerenderInfo.fallback === false && !isPrerendered) { + if (nextConfig.adapterPath) { + return await render404(); + } + throw new __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js$2c$__cjs$29$__["NoFallbackError"](); + } + } + } + let cacheKey = null; + if (isIsr && !routeModule.isDev && !isDraftMode) { + cacheKey = resolvedPathname; + // ensure /index and / is normalized to one key + cacheKey = cacheKey === '/index' ? '/' : cacheKey; + } + // Before rendering (which initializes component tree modules), we have to + // set the reference manifests to our global store so Server Action's + // encryption util can access to them at the top level of the page module. + if (serverActionsManifest && clientReferenceManifest) { + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$manifests$2d$singleton$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["setManifestsSingleton"])({ + page: srcPage, + clientReferenceManifest, + serverActionsManifest + }); + } + const method = req.method || 'GET'; + const tracer = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])(); + const activeSpan = tracer.getActiveScopeSpan(); + const isWrappedByNextServer = Boolean(routerServerContext == null ? void 0 : routerServerContext.isWrappedByNextServer); + const isMinimalMode = Boolean((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'minimalMode')); + const incrementalCache = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'incrementalCache') || await routeModule.getIncrementalCache(req, nextConfig, previewProps, prerenderManifest, isMinimalMode); + incrementalCache == null ? void 0 : incrementalCache.resetRequestCache(); + globalThis.__incrementalCache = incrementalCache; + const context = { + params, + previewProps, + renderOpts: { + experimental: { + authInterrupts: Boolean(nextConfig.experimental.authInterrupts), + useCacheTimeout: nextConfig.experimental.useCacheTimeout, + durableUseCacheEntries: Boolean(nextConfig.experimental.durableUseCacheEntries) + }, + cacheComponents: Boolean(nextConfig.cacheComponents), + validationLevel: nextConfig.experimental.instantInsights.validationLevel, + isDraftMode, + incrementalCache, + hmrRefreshHash: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'hmrRefreshHash'), + cacheLifeProfiles: nextConfig.cacheLife, + staticPageGenerationTimeout: nextConfig.staticPageGenerationTimeout, + waitUntil: ctx.waitUntil, + onClose: (cb)=>{ + res.on('close', cb); + }, + onAfterTaskError: undefined + }, + sharedContext: { + buildId, + deploymentId + } + }; + const nodeNextReq = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$node$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NodeNextRequest"](req); + const nodeNextRes = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$node$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NodeNextResponse"](res); + const nextReq = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextRequestAdapter"].fromNodeNextRequest(nodeNextReq, (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["signalFromNodeResponse"])(res)); + const responseGenerator = async ({ previousCacheEntry })=>{ + try { + if (!isMinimalMode && isOnDemandRevalidate && revalidateOnlyGenerated && !previousCacheEntry) { + res.statusCode = 404; + // on-demand revalidate always sets this header + res.setHeader('x-nextjs-cache', 'REVALIDATED'); + res.end('This page could not be found'); + return null; + } + const response = cacheKey === null ? await routeModule.handle(nextReq, context) : await routeModule.prerender(nextReq, context); + req.fetchMetrics = context.renderOpts.fetchMetrics; + let pendingWaitUntil = context.renderOpts.pendingWaitUntil; + // Attempt using provided waitUntil if available + // if it's not we fallback to sendResponse's handling + if (pendingWaitUntil) { + if (ctx.waitUntil) { + ctx.waitUntil(pendingWaitUntil); + pendingWaitUntil = undefined; + } + } + const cacheTags = context.renderOpts.collectedTags; + // If the request is for a static response, we can cache it so long + // as it's not edge. + if (isIsr) { + const blob = await response.blob(); + // Copy the headers from the response. + const headers = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["toNodeOutgoingHttpHeaders"])(response.headers); + if (cacheTags) { + headers[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAGS_HEADER"]] = cacheTags; + } + if (!headers['content-type'] && blob.type) { + headers['content-type'] = blob.type; + } + const revalidate = typeof context.renderOpts.collectedRevalidate === 'undefined' || context.renderOpts.collectedRevalidate >= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"] ? false : context.renderOpts.collectedRevalidate; + const expire = typeof context.renderOpts.collectedExpire === 'undefined' || context.renderOpts.collectedExpire >= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"] ? // explicit `expire` (e.g. via `cacheLife`). This mirrors the + // build-time fallback in `build/index.ts` so cache entries + // and the response Cache-Control header agree on the route's + // effective expire. Routes that opt out of revalidation + // (`revalidate: false`) or that are dynamic (`revalidate: 0`) + // keep `expire: undefined`. + revalidate !== false && revalidate > 0 ? nextConfig.expireTime : undefined : context.renderOpts.collectedExpire; + // Create the cache entry for the response. + const cacheEntry = { + value: { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_ROUTE, + status: response.status, + body: Buffer.from(await blob.arrayBuffer()), + headers + }, + cacheControl: { + revalidate, + expire + } + }; + return cacheEntry; + } else { + // send response without caching if not ISR + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["sendResponse"])(nodeNextReq, nodeNextRes, response, pendingWaitUntil); + return null; + } + } catch (err) { + // if this is a background revalidate we need to report + // the request error here as it won't be bubbled + if (previousCacheEntry == null ? void 0 : previousCacheEntry.isStale) { + const silenceLog = false; + await routeModule.onRequestError(req, err, { + routerKind: 'App Router', + routePath: srcPage, + routeType: 'route', + revalidateReason: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$instrumentation$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRevalidateReason"])({ + isStaticGeneration: cacheKey !== null, + isOnDemandRevalidate + }) + }, silenceLog, routerServerContext); + } + throw err; + } + }; + const handleResponse = async (currentSpan, parentSpan)=>{ + try { + var _cacheEntry_value; + const cacheEntry = await routeModule.handleResponse({ + req, + nextConfig, + cacheKey, + routeKind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].APP_ROUTE, + isFallback: false, + previewProps, + prerenderManifest, + isRoutePPREnabled: false, + isOnDemandRevalidate, + revalidateOnlyGenerated, + responseGenerator, + waitUntil: ctx.waitUntil, + isMinimalMode + }); + if (cacheEntry !== null && 'error' in cacheEntry) { + throw cacheEntry.error; + } + // we don't create a cacheEntry for ISR + if (!isIsr) { + return; + } + if ((cacheEntry == null ? void 0 : (_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_ROUTE) { + var _cacheEntry_value1; + throw new Error(`Invariant: app-route received invalid cache entry ${cacheEntry == null ? void 0 : (_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`); + } + if (!isMinimalMode) { + res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT'); + } + // Draft mode should never be cached + if (isDraftMode) { + res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate'); + } + const headers = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["fromNodeOutgoingHttpHeaders"])(cacheEntry.value.headers); + if (!(isMinimalMode && isIsr)) { + headers.delete(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAGS_HEADER"]); + } + // If cache control is already set on the response we don't + // override it to allow users to customize it via next.config + if (cacheEntry.cacheControl && !res.getHeader('Cache-Control') && !headers.get('Cache-Control')) { + headers.set('Cache-Control', (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$cache$2d$control$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getCacheControlHeader"])(cacheEntry.cacheControl)); + } + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["sendResponse"])(nodeNextReq, nodeNextRes, new Response(cacheEntry.value.body, { + headers, + status: cacheEntry.value.status || 200 + })); + return; + } catch (err) { + if (!(err instanceof __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js$2c$__cjs$29$__["NoFallbackError"])) { + const silenceLog = false; + await routeModule.onRequestError(req, err, { + routerKind: 'App Router', + routePath: normalizedSrcPage, + routeType: 'route', + revalidateReason: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$instrumentation$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRevalidateReason"])({ + isStaticGeneration: cacheKey !== null, + isOnDemandRevalidate + }) + }, silenceLog, routerServerContext); + } + // rethrow so that we can handle serving error page + // If this is during static generation, throw the error again. + if (isIsr) throw err; + // Otherwise, send a 500 response unless the original response has + // already committed. In that case, preserve its status code for + // telemetry while still recording the failure and terminating a response + // that the failed pipeline left open. + if (res.headersSent) { + if (currentSpan) { + const error = err instanceof Error ? err : new Error('Unknown app route error'); + currentSpan.recordException(error); + currentSpan.setStatus({ + code: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SpanStatusCode"].ERROR, + message: error.message + }); + currentSpan.setAttribute('error.type', error.name); + } + if (!res.writableEnded && !res.destroyed) { + res.end(); + } + } else { + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["sendResponse"])(nodeNextReq, nodeNextRes, new Response(null, { + status: 500 + })); + } + return; + } finally{ + ; + (()=>{ + if (!currentSpan) { + return; + } + let statusCode = res.statusCode; + currentSpan.setAttributes({ + 'http.status_code': statusCode, + 'next.rsc': false + }); + if (statusCode && statusCode >= 500) { + // For 5xx status codes: SHOULD be set to 'Error' span status. + // x-ref: https://opentelemetry.io/docs/specs/semconv/http/http-spans/#status + currentSpan.setStatus({ + code: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SpanStatusCode"].ERROR + }); + // For span status 'Error', SHOULD set 'error.type' attribute. + currentSpan.setAttribute('error.type', statusCode.toString()); + } + const rootSpanAttributes = tracer.getRootSpanAttributes(); + // We were unable to get attributes, probably OTEL is not enabled + if (!rootSpanAttributes) { + return; + } + if (rootSpanAttributes.get('next.span_type') !== __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["BaseServerSpan"].handleRequest) { + console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`); + return; + } + const route = rootSpanAttributes.get('next.route') || normalizedSrcPage; + const name = `${method} ${route}`; + currentSpan.setAttributes({ + 'next.route': route, + 'http.route': route, + 'next.span_name': name + }); + currentSpan.updateName(name); + // Propagate http.route to the parent span if one exists (e.g. + // a platform-created HTTP span in adapter deployments). + if (parentSpan && parentSpan !== currentSpan) { + parentSpan.setAttribute('http.route', route); + parentSpan.updateName(name); + } + })(); + } + }; + // TODO: activeSpan code path is for when wrapped by + // next-server can be removed when this is no longer used + if (isWrappedByNextServer && activeSpan) { + await handleResponse(activeSpan, undefined); + } else { + let parentSpan = tracer.getActiveScopeSpan(); + await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["BaseServerSpan"].handleRequest, { + spanName: `${method} ${srcPage}`, + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SpanKind"].SERVER, + attributes: { + 'http.method': method, + 'http.target': req.url + } + }, (span)=>handleResponse(span, parentSpan)), undefined, !isWrappedByNextServer); + } +} +}), +"[project]/node_modules/next/dist/esm/client/components/app-router-headers.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ACTION_HEADER", + ()=>ACTION_HEADER, + "FLIGHT_HEADERS", + ()=>FLIGHT_HEADERS, + "NEXT_ACTION_NOT_FOUND_HEADER", + ()=>NEXT_ACTION_NOT_FOUND_HEADER, + "NEXT_ACTION_REVALIDATED_HEADER", + ()=>NEXT_ACTION_REVALIDATED_HEADER, + "NEXT_DID_POSTPONE_HEADER", + ()=>NEXT_DID_POSTPONE_HEADER, + "NEXT_HMR_REFRESH_HEADER", + ()=>NEXT_HMR_REFRESH_HEADER, + "NEXT_HTML_REQUEST_ID_HEADER", + ()=>NEXT_HTML_REQUEST_ID_HEADER, + "NEXT_INSTANT_TEST_COOKIE", + ()=>NEXT_INSTANT_TEST_COOKIE, + "NEXT_IS_PRERENDER_HEADER", + ()=>NEXT_IS_PRERENDER_HEADER, + "NEXT_REQUEST_ID_HEADER", + ()=>NEXT_REQUEST_ID_HEADER, + "NEXT_REWRITTEN_PATH_HEADER", + ()=>NEXT_REWRITTEN_PATH_HEADER, + "NEXT_REWRITTEN_QUERY_HEADER", + ()=>NEXT_REWRITTEN_QUERY_HEADER, + "NEXT_ROUTER_PREFETCH_HEADER", + ()=>NEXT_ROUTER_PREFETCH_HEADER, + "NEXT_ROUTER_SEGMENT_PREFETCH_HEADER", + ()=>NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, + "NEXT_ROUTER_STALE_TIME_HEADER", + ()=>NEXT_ROUTER_STALE_TIME_HEADER, + "NEXT_ROUTER_STATE_TREE_HEADER", + ()=>NEXT_ROUTER_STATE_TREE_HEADER, + "NEXT_RSC_UNION_QUERY", + ()=>NEXT_RSC_UNION_QUERY, + "NEXT_URL", + ()=>NEXT_URL, + "RSC_CONTENT_TYPE_HEADER", + ()=>RSC_CONTENT_TYPE_HEADER, + "RSC_HEADER", + ()=>RSC_HEADER +]); +const RSC_HEADER = 'rsc'; +const ACTION_HEADER = 'next-action'; +const NEXT_ROUTER_STATE_TREE_HEADER = 'next-router-state-tree'; +const NEXT_ROUTER_PREFETCH_HEADER = 'next-router-prefetch'; +const NEXT_ROUTER_SEGMENT_PREFETCH_HEADER = 'next-router-segment-prefetch'; +const NEXT_HMR_REFRESH_HEADER = 'next-hmr-refresh'; +const NEXT_URL = 'next-url'; +const RSC_CONTENT_TYPE_HEADER = 'text/x-component'; +const NEXT_INSTANT_TEST_COOKIE = 'next-instant-navigation-testing'; +const FLIGHT_HEADERS = [ + RSC_HEADER, + NEXT_ROUTER_STATE_TREE_HEADER, + NEXT_ROUTER_PREFETCH_HEADER, + NEXT_HMR_REFRESH_HEADER, + NEXT_ROUTER_SEGMENT_PREFETCH_HEADER +]; +const NEXT_RSC_UNION_QUERY = '_rsc'; +const NEXT_ROUTER_STALE_TIME_HEADER = 'x-nextjs-stale-time'; +const NEXT_DID_POSTPONE_HEADER = 'x-nextjs-postponed'; +const NEXT_REWRITTEN_PATH_HEADER = 'x-nextjs-rewritten-path'; +const NEXT_REWRITTEN_QUERY_HEADER = 'x-nextjs-rewritten-query'; +const NEXT_IS_PRERENDER_HEADER = 'x-nextjs-prerender'; +const NEXT_ACTION_NOT_FOUND_HEADER = 'x-nextjs-action-not-found'; +const NEXT_REQUEST_ID_HEADER = 'x-nextjs-request-id'; +const NEXT_HTML_REQUEST_ID_HEADER = 'x-nextjs-html-request-id'; +const NEXT_ACTION_REVALIDATED_HEADER = 'x-action-revalidated'; +}), +"[project]/node_modules/next/dist/esm/client/components/hooks-server-context.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "DynamicServerError", + ()=>DynamicServerError, + "isDynamicServerError", + ()=>isDynamicServerError +]); +const DYNAMIC_ERROR_CODE = 'DYNAMIC_SERVER_USAGE'; +class DynamicServerError extends Error { + constructor(description){ + super(`Dynamic server usage: ${description}`), this.description = description, this.digest = DYNAMIC_ERROR_CODE; + } +} +function isDynamicServerError(err) { + if (typeof err !== 'object' || err === null || !('digest' in err) || typeof err.digest !== 'string') { + return false; + } + return err.digest === DYNAMIC_ERROR_CODE; +} +}), +"[project]/node_modules/next/dist/esm/client/components/redirect-status-code.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "RedirectStatusCode", + ()=>RedirectStatusCode +]); +var RedirectStatusCode = /*#__PURE__*/ function(RedirectStatusCode) { + RedirectStatusCode[RedirectStatusCode["SeeOther"] = 303] = "SeeOther"; + RedirectStatusCode[RedirectStatusCode["TemporaryRedirect"] = 307] = "TemporaryRedirect"; + RedirectStatusCode[RedirectStatusCode["PermanentRedirect"] = 308] = "PermanentRedirect"; + return RedirectStatusCode; +}({}); +}), +"[project]/node_modules/next/dist/esm/client/components/static-generation-bailout.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "StaticGenBailoutError", + ()=>StaticGenBailoutError, + "isStaticGenBailoutError", + ()=>isStaticGenBailoutError +]); +const NEXT_STATIC_GEN_BAILOUT = 'NEXT_STATIC_GEN_BAILOUT'; +class StaticGenBailoutError extends Error { + constructor(...args){ + super(...args), this.code = NEXT_STATIC_GEN_BAILOUT; + } +} +function isStaticGenBailoutError(error) { + if (typeof error !== 'object' || error === null || !('code' in error)) { + return false; + } + return error.code === NEXT_STATIC_GEN_BAILOUT; +} +}), +"[project]/node_modules/next/dist/esm/lib/batcher.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "Batcher", + ()=>Batcher +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)"); +; +class Batcher { + constructor(cacheKeyFn, /** + * A function that will be called to schedule the wrapped function to be + * executed. This defaults to a function that will execute the function + * immediately. + */ schedulerFn = (fn)=>fn()){ + this.cacheKeyFn = cacheKeyFn; + this.schedulerFn = schedulerFn; + this.pending = new Map(); + } + static create(options) { + return new Batcher(options == null ? void 0 : options.cacheKeyFn, options == null ? void 0 : options.schedulerFn); + } + /** + * Wraps a function in a promise that will be resolved or rejected only once + * for a given key. This will allow multiple calls to the function to be + * made, but only one will be executed at a time. The result of the first + * call will be returned to all callers. + * + * @param key the key to use for the cache + * @param fn the function to wrap + * @returns a promise that resolves to the result of the function + */ async batch(key, fn) { + const cacheKey = this.cacheKeyFn ? await this.cacheKeyFn(key) : key; + if (cacheKey === null) { + return fn({ + resolve: (value)=>Promise.resolve(value), + key + }); + } + const pending = this.pending.get(cacheKey); + if (pending) return pending; + const { promise, resolve, reject } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + this.pending.set(cacheKey, promise); + this.schedulerFn(async ()=>{ + try { + const result = await fn({ + resolve, + key + }); + // Resolving a promise multiple times is a no-op, so we can safely + // resolve all pending promises with the same result. + resolve(result); + } catch (err) { + reject(err); + } finally{ + this.pending.delete(cacheKey); + } + }); + return promise; + } +} +}), +"[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ACTION_SUFFIX", + ()=>ACTION_SUFFIX, + "APP_DIR_ALIAS", + ()=>APP_DIR_ALIAS, + "CACHE_ONE_YEAR_SECONDS", + ()=>CACHE_ONE_YEAR_SECONDS, + "DOT_NEXT_ALIAS", + ()=>DOT_NEXT_ALIAS, + "ESLINT_DEFAULT_DIRS", + ()=>ESLINT_DEFAULT_DIRS, + "GSP_NO_RETURNED_VALUE", + ()=>GSP_NO_RETURNED_VALUE, + "GSSP_COMPONENT_MEMBER_ERROR", + ()=>GSSP_COMPONENT_MEMBER_ERROR, + "GSSP_NO_RETURNED_VALUE", + ()=>GSSP_NO_RETURNED_VALUE, + "HTML_CONTENT_TYPE_HEADER", + ()=>HTML_CONTENT_TYPE_HEADER, + "INFINITE_CACHE", + ()=>INFINITE_CACHE, + "INSTRUMENTATION_HOOK_FILENAME", + ()=>INSTRUMENTATION_HOOK_FILENAME, + "JSON_CONTENT_TYPE_HEADER", + ()=>JSON_CONTENT_TYPE_HEADER, + "MATCHED_PATH_HEADER", + ()=>MATCHED_PATH_HEADER, + "MIDDLEWARE_FILENAME", + ()=>MIDDLEWARE_FILENAME, + "MIDDLEWARE_LOCATION_REGEXP", + ()=>MIDDLEWARE_LOCATION_REGEXP, + "NEXT_BODY_SUFFIX", + ()=>NEXT_BODY_SUFFIX, + "NEXT_CACHE_IMPLICIT_TAG_ID", + ()=>NEXT_CACHE_IMPLICIT_TAG_ID, + "NEXT_CACHE_REVALIDATED_TAGS_HEADER", + ()=>NEXT_CACHE_REVALIDATED_TAGS_HEADER, + "NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER", + ()=>NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER, + "NEXT_CACHE_ROOT_PARAM_TAG_ID", + ()=>NEXT_CACHE_ROOT_PARAM_TAG_ID, + "NEXT_CACHE_SOFT_TAG_MAX_LENGTH", + ()=>NEXT_CACHE_SOFT_TAG_MAX_LENGTH, + "NEXT_CACHE_TAGS_HEADER", + ()=>NEXT_CACHE_TAGS_HEADER, + "NEXT_CACHE_TAG_MAX_ITEMS", + ()=>NEXT_CACHE_TAG_MAX_ITEMS, + "NEXT_CACHE_TAG_MAX_LENGTH", + ()=>NEXT_CACHE_TAG_MAX_LENGTH, + "NEXT_DATA_SUFFIX", + ()=>NEXT_DATA_SUFFIX, + "NEXT_INTERCEPTION_MARKER_PREFIX", + ()=>NEXT_INTERCEPTION_MARKER_PREFIX, + "NEXT_META_SUFFIX", + ()=>NEXT_META_SUFFIX, + "NEXT_NAV_DEPLOYMENT_ID_HEADER", + ()=>NEXT_NAV_DEPLOYMENT_ID_HEADER, + "NEXT_QUERY_PARAM_PREFIX", + ()=>NEXT_QUERY_PARAM_PREFIX, + "NEXT_RESUME_HEADER", + ()=>NEXT_RESUME_HEADER, + "NEXT_RESUME_STATE_LENGTH_HEADER", + ()=>NEXT_RESUME_STATE_LENGTH_HEADER, + "NON_STANDARD_NODE_ENV", + ()=>NON_STANDARD_NODE_ENV, + "PAGES_DIR_ALIAS", + ()=>PAGES_DIR_ALIAS, + "PRERENDER_REVALIDATE_HEADER", + ()=>PRERENDER_REVALIDATE_HEADER, + "PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER", + ()=>PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER, + "PROXY_FILENAME", + ()=>PROXY_FILENAME, + "PROXY_LOCATION_REGEXP", + ()=>PROXY_LOCATION_REGEXP, + "PUBLIC_DIR_MIDDLEWARE_CONFLICT", + ()=>PUBLIC_DIR_MIDDLEWARE_CONFLICT, + "ROOT_DIR_ALIAS", + ()=>ROOT_DIR_ALIAS, + "RSC_ACTION_CLIENT_WRAPPER_ALIAS", + ()=>RSC_ACTION_CLIENT_WRAPPER_ALIAS, + "RSC_ACTION_ENCRYPTION_ALIAS", + ()=>RSC_ACTION_ENCRYPTION_ALIAS, + "RSC_ACTION_PROXY_ALIAS", + ()=>RSC_ACTION_PROXY_ALIAS, + "RSC_ACTION_VALIDATE_ALIAS", + ()=>RSC_ACTION_VALIDATE_ALIAS, + "RSC_CACHE_WRAPPER_ALIAS", + ()=>RSC_CACHE_WRAPPER_ALIAS, + "RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS", + ()=>RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS, + "RSC_MOD_REF_PROXY_ALIAS", + ()=>RSC_MOD_REF_PROXY_ALIAS, + "RSC_SEGMENTS_DIR_SUFFIX", + ()=>RSC_SEGMENTS_DIR_SUFFIX, + "RSC_SEGMENT_SUFFIX", + ()=>RSC_SEGMENT_SUFFIX, + "RSC_SUFFIX", + ()=>RSC_SUFFIX, + "SERVER_PROPS_EXPORT_ERROR", + ()=>SERVER_PROPS_EXPORT_ERROR, + "SERVER_PROPS_GET_INIT_PROPS_CONFLICT", + ()=>SERVER_PROPS_GET_INIT_PROPS_CONFLICT, + "SERVER_PROPS_SSG_CONFLICT", + ()=>SERVER_PROPS_SSG_CONFLICT, + "SERVER_RUNTIME", + ()=>SERVER_RUNTIME, + "SSG_FALLBACK_EXPORT_ERROR", + ()=>SSG_FALLBACK_EXPORT_ERROR, + "SSG_GET_INITIAL_PROPS_CONFLICT", + ()=>SSG_GET_INITIAL_PROPS_CONFLICT, + "STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR", + ()=>STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR, + "TEXT_PLAIN_CONTENT_TYPE_HEADER", + ()=>TEXT_PLAIN_CONTENT_TYPE_HEADER, + "UNSTABLE_REVALIDATE_RENAME_ERROR", + ()=>UNSTABLE_REVALIDATE_RENAME_ERROR, + "WEBPACK_LAYERS", + ()=>WEBPACK_LAYERS, + "WEBPACK_RESOURCE_QUERIES", + ()=>WEBPACK_RESOURCE_QUERIES, + "WEB_SOCKET_MAX_RECONNECTIONS", + ()=>WEB_SOCKET_MAX_RECONNECTIONS +]); +const TEXT_PLAIN_CONTENT_TYPE_HEADER = 'text/plain'; +const HTML_CONTENT_TYPE_HEADER = 'text/html; charset=utf-8'; +const JSON_CONTENT_TYPE_HEADER = 'application/json; charset=utf-8'; +const NEXT_QUERY_PARAM_PREFIX = 'nxtP'; +const NEXT_INTERCEPTION_MARKER_PREFIX = 'nxtI'; +const MATCHED_PATH_HEADER = 'x-matched-path'; +const PRERENDER_REVALIDATE_HEADER = 'x-prerender-revalidate'; +const PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER = 'x-prerender-revalidate-if-generated'; +const RSC_SEGMENTS_DIR_SUFFIX = '.segments'; +const RSC_SEGMENT_SUFFIX = '.segment.rsc'; +const RSC_SUFFIX = '.rsc'; +const ACTION_SUFFIX = '.action'; +const NEXT_DATA_SUFFIX = '.json'; +const NEXT_META_SUFFIX = '.meta'; +const NEXT_BODY_SUFFIX = '.body'; +const NEXT_NAV_DEPLOYMENT_ID_HEADER = 'x-nextjs-deployment-id'; +const NEXT_CACHE_TAGS_HEADER = 'x-next-cache-tags'; +const NEXT_CACHE_REVALIDATED_TAGS_HEADER = 'x-next-revalidated-tags'; +const NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER = 'x-next-revalidate-tag-token'; +const NEXT_RESUME_HEADER = 'next-resume'; +const NEXT_RESUME_STATE_LENGTH_HEADER = 'x-next-resume-state-length'; +const NEXT_CACHE_TAG_MAX_ITEMS = 128; +const NEXT_CACHE_TAG_MAX_LENGTH = 256; +const NEXT_CACHE_SOFT_TAG_MAX_LENGTH = 1024; +const NEXT_CACHE_IMPLICIT_TAG_ID = '_N_T_'; +const NEXT_CACHE_ROOT_PARAM_TAG_ID = '_N_RP_'; +const CACHE_ONE_YEAR_SECONDS = 31536000; +const INFINITE_CACHE = 0xfffffffe; +const MIDDLEWARE_FILENAME = 'middleware'; +const MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}`; +const PROXY_FILENAME = 'proxy'; +const PROXY_LOCATION_REGEXP = `(?:src/)?${PROXY_FILENAME}`; +const INSTRUMENTATION_HOOK_FILENAME = 'instrumentation'; +const PAGES_DIR_ALIAS = 'private-next-pages'; +const DOT_NEXT_ALIAS = 'private-dot-next'; +const ROOT_DIR_ALIAS = 'private-next-root-dir'; +const APP_DIR_ALIAS = 'private-next-app-dir'; +const RSC_MOD_REF_PROXY_ALIAS = 'private-next-rsc-mod-ref-proxy'; +const RSC_ACTION_VALIDATE_ALIAS = 'private-next-rsc-action-validate'; +const RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-server-reference'; +const RSC_CACHE_WRAPPER_ALIAS = 'private-next-rsc-cache-wrapper'; +const RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS = 'private-next-rsc-track-dynamic-import'; +const RSC_ACTION_ENCRYPTION_ALIAS = 'private-next-rsc-action-encryption'; +const RSC_ACTION_CLIENT_WRAPPER_ALIAS = 'private-next-rsc-action-client-wrapper'; +const PUBLIC_DIR_MIDDLEWARE_CONFLICT = `You can not have a '_next' folder inside of your public folder. This conflicts with the internal '/_next' route. https://nextjs.org/docs/messages/public-next-folder-conflict`; +const SSG_GET_INITIAL_PROPS_CONFLICT = `You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps`; +const SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.`; +const SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps`; +const STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR = `can not have getInitialProps/getServerSideProps, https://nextjs.org/docs/messages/404-get-initial-props`; +const SERVER_PROPS_EXPORT_ERROR = `pages with \`getServerSideProps\` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export`; +const GSP_NO_RETURNED_VALUE = 'Your `getStaticProps` function did not return an object. Did you forget to add a `return`?'; +const GSSP_NO_RETURNED_VALUE = 'Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?'; +const UNSTABLE_REVALIDATE_RENAME_ERROR = 'The `unstable_revalidate` property is available for general use.\n' + 'Please use `revalidate` instead.'; +const GSSP_COMPONENT_MEMBER_ERROR = `can not be attached to a page's component and must be exported from the page. See more info here: https://nextjs.org/docs/messages/gssp-component-member`; +const NON_STANDARD_NODE_ENV = `You are using a non-standard "NODE_ENV" value in your environment. This creates inconsistencies in the project and is strongly advised against. Read more: https://nextjs.org/docs/messages/non-standard-node-env`; +const SSG_FALLBACK_EXPORT_ERROR = `Pages with \`fallback\` enabled in \`getStaticPaths\` can not be exported. See more info here: https://nextjs.org/docs/messages/ssg-fallback-true-export`; +const ESLINT_DEFAULT_DIRS = [ + 'app', + 'pages', + 'components', + 'lib', + 'src' +]; +const SERVER_RUNTIME = { + edge: 'edge', + experimentalEdge: 'experimental-edge', + nodejs: 'nodejs' +}; +const WEB_SOCKET_MAX_RECONNECTIONS = 12; +/** + * The names of the webpack layers. These layers are the primitives for the + * webpack chunks. + */ const WEBPACK_LAYERS_NAMES = { + /** + * The layer for the shared code between the client and server bundles. + */ shared: 'shared', + /** + * The layer for server-only runtime and picking up `react-server` export conditions. + * Including app router RSC pages and app router custom routes and metadata routes. + */ reactServerComponents: 'rsc', + /** + * Server Side Rendering layer for app (ssr). + */ serverSideRendering: 'ssr', + /** + * The browser client bundle layer for actions. + */ actionBrowser: 'action-browser', + /** + * The Node.js bundle layer for the API routes. + */ apiNode: 'api-node', + /** + * The Edge Lite bundle layer for the API routes. + */ apiEdge: 'api-edge', + /** + * The layer for the middleware code. + */ middleware: 'middleware', + /** + * The layer for the instrumentation hooks. + */ instrument: 'instrument', + /** + * The layer for assets on the edge. + */ edgeAsset: 'edge-asset', + /** + * The browser client bundle layer for App directory. + */ appPagesBrowser: 'app-pages-browser', + /** + * The browser client bundle layer for Pages directory. + */ pagesDirBrowser: 'pages-dir-browser', + /** + * The Edge Lite bundle layer for Pages directory. + */ pagesDirEdge: 'pages-dir-edge', + /** + * The Node.js bundle layer for Pages directory. + */ pagesDirNode: 'pages-dir-node' +}; +const WEBPACK_LAYERS = { + ...WEBPACK_LAYERS_NAMES, + GROUP: { + builtinReact: [ + WEBPACK_LAYERS_NAMES.reactServerComponents, + WEBPACK_LAYERS_NAMES.actionBrowser + ], + serverOnly: [ + WEBPACK_LAYERS_NAMES.reactServerComponents, + WEBPACK_LAYERS_NAMES.actionBrowser, + WEBPACK_LAYERS_NAMES.instrument, + WEBPACK_LAYERS_NAMES.middleware + ], + neutralTarget: [ + // pages api + WEBPACK_LAYERS_NAMES.apiNode, + WEBPACK_LAYERS_NAMES.apiEdge + ], + clientOnly: [ + WEBPACK_LAYERS_NAMES.serverSideRendering, + WEBPACK_LAYERS_NAMES.appPagesBrowser + ], + bundled: [ + WEBPACK_LAYERS_NAMES.reactServerComponents, + WEBPACK_LAYERS_NAMES.actionBrowser, + WEBPACK_LAYERS_NAMES.serverSideRendering, + WEBPACK_LAYERS_NAMES.appPagesBrowser, + WEBPACK_LAYERS_NAMES.shared, + WEBPACK_LAYERS_NAMES.instrument, + WEBPACK_LAYERS_NAMES.middleware + ], + appPages: [ + // app router pages and layouts + WEBPACK_LAYERS_NAMES.reactServerComponents, + WEBPACK_LAYERS_NAMES.serverSideRendering, + WEBPACK_LAYERS_NAMES.appPagesBrowser, + WEBPACK_LAYERS_NAMES.actionBrowser + ] + } +}; +const WEBPACK_RESOURCE_QUERIES = { + edgeSSREntry: '__next_edge_ssr_entry__', + metadata: '__next_metadata__', + metadataRoute: '__next_metadata_route__', + metadataImageMeta: '__next_metadata_image_meta__' +}; +; +}), +"[project]/node_modules/next/dist/esm/lib/framework/boundary-constants.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "METADATA_BOUNDARY_NAME", + ()=>METADATA_BOUNDARY_NAME, + "OUTLET_BOUNDARY_NAME", + ()=>OUTLET_BOUNDARY_NAME, + "ROOT_LAYOUT_BOUNDARY_NAME", + ()=>ROOT_LAYOUT_BOUNDARY_NAME, + "VIEWPORT_BOUNDARY_NAME", + ()=>VIEWPORT_BOUNDARY_NAME +]); +const METADATA_BOUNDARY_NAME = '__next_metadata_boundary__'; +const VIEWPORT_BOUNDARY_NAME = '__next_viewport_boundary__'; +const OUTLET_BOUNDARY_NAME = '__next_outlet_boundary__'; +const ROOT_LAYOUT_BOUNDARY_NAME = '__next_root_layout_boundary__'; +}), +"[project]/node_modules/next/dist/esm/lib/picocolors.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "bgBlack", + ()=>bgBlack, + "bgBlue", + ()=>bgBlue, + "bgCyan", + ()=>bgCyan, + "bgGreen", + ()=>bgGreen, + "bgMagenta", + ()=>bgMagenta, + "bgRed", + ()=>bgRed, + "bgWhite", + ()=>bgWhite, + "bgYellow", + ()=>bgYellow, + "black", + ()=>black, + "blue", + ()=>blue, + "bold", + ()=>bold, + "cyan", + ()=>cyan, + "dim", + ()=>dim, + "gray", + ()=>gray, + "green", + ()=>green, + "hidden", + ()=>hidden, + "inverse", + ()=>inverse, + "isColorSupported", + ()=>isColorSupported, + "italic", + ()=>italic, + "magenta", + ()=>magenta, + "purple", + ()=>purple, + "red", + ()=>red, + "reset", + ()=>reset, + "stdoutIsTerminal", + ()=>stdoutIsTerminal, + "strikethrough", + ()=>strikethrough, + "underline", + ()=>underline, + "white", + ()=>white, + "yellow", + ()=>yellow +]); +// ISC License +// Copyright (c) 2021 Alexey Raspopov, Kostiantyn Denysov, Anton Verinov +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// +// https://github.com/alexeyraspopov/picocolors/blob/b6261487e7b81aaab2440e397a356732cad9e342/picocolors.js#L1 +var _globalThis; +const { env, stdout } = ((_globalThis = globalThis) == null ? void 0 : _globalThis.process) ?? {}; +const enabled = env && !env.NO_COLOR && (env.FORCE_COLOR || (stdout == null ? void 0 : stdout.isTTY) && !env.CI && env.TERM !== 'dumb'); +const isColorSupported = Boolean(enabled); +const stdoutIsTerminal = Boolean(stdout == null ? void 0 : stdout.isTTY) || env.NEXT_PRIVATE_PROMPT_OUTPUT === '1'; +const replaceClose = (str, close, replace, index)=>{ + const start = str.substring(0, index) + replace; + const end = str.substring(index + close.length); + const nextIndex = end.indexOf(close); + return ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end; +}; +const formatter = (open, close, replace = open)=>{ + if (!enabled) return String; + return (input)=>{ + const string = '' + input; + const index = string.indexOf(close, open.length); + return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close; + }; +}; +const reset = enabled ? (s)=>`\x1b[0m${s}\x1b[0m` : String; +const bold = formatter('\x1b[1m', '\x1b[22m', '\x1b[22m\x1b[1m'); +const dim = formatter('\x1b[2m', '\x1b[22m', '\x1b[22m\x1b[2m'); +const italic = formatter('\x1b[3m', '\x1b[23m'); +const underline = formatter('\x1b[4m', '\x1b[24m'); +const inverse = formatter('\x1b[7m', '\x1b[27m'); +const hidden = formatter('\x1b[8m', '\x1b[28m'); +const strikethrough = formatter('\x1b[9m', '\x1b[29m'); +const black = formatter('\x1b[30m', '\x1b[39m'); +const red = formatter('\x1b[31m', '\x1b[39m'); +const green = formatter('\x1b[32m', '\x1b[39m'); +const yellow = formatter('\x1b[33m', '\x1b[39m'); +const blue = formatter('\x1b[34m', '\x1b[39m'); +const magenta = formatter('\x1b[35m', '\x1b[39m'); +const purple = formatter('\x1b[38;2;173;127;168m', '\x1b[39m'); +const cyan = formatter('\x1b[36m', '\x1b[39m'); +const white = formatter('\x1b[37m', '\x1b[39m'); +const gray = formatter('\x1b[90m', '\x1b[39m'); +const bgBlack = formatter('\x1b[40m', '\x1b[49m'); +const bgRed = formatter('\x1b[41m', '\x1b[49m'); +const bgGreen = formatter('\x1b[42m', '\x1b[49m'); +const bgYellow = formatter('\x1b[43m', '\x1b[49m'); +const bgBlue = formatter('\x1b[44m', '\x1b[49m'); +const bgMagenta = formatter('\x1b[45m', '\x1b[49m'); +const bgCyan = formatter('\x1b[46m', '\x1b[49m'); +const bgWhite = formatter('\x1b[47m', '\x1b[49m'); +}), +"[project]/node_modules/next/dist/esm/lib/scheduler.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Schedules a function to be called on the next tick after the other promises + * have been resolved. + * + * @param cb the function to schedule + */ __turbopack_context__.s([ + "atLeastOneTask", + ()=>atLeastOneTask, + "scheduleImmediate", + ()=>scheduleImmediate, + "scheduleOnNextTick", + ()=>scheduleOnNextTick, + "waitAtLeastOneReactRenderTask", + ()=>waitAtLeastOneReactRenderTask +]); +const scheduleOnNextTick = (cb)=>{ + // We use Promise.resolve().then() here so that the operation is scheduled at + // the end of the promise job queue, we then add it to the next process tick + // to ensure it's evaluated afterwards. + // + // This was inspired by the implementation of the DataLoader interface: https://github.com/graphql/dataloader/blob/d336bd15282664e0be4b4a657cb796f09bafbc6b/src/index.js#L213-L255 + // + Promise.resolve().then(()=>{ + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + process.nextTick(cb); + } + }); +}; +const scheduleImmediate = (cb)=>{ + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + setImmediate(cb); + } +}; +function atLeastOneTask() { + return new Promise((resolve)=>scheduleImmediate(resolve)); +} +function waitAtLeastOneReactRenderTask() { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + return new Promise((r)=>setImmediate(r)); + } +} +}), +"[project]/node_modules/next/dist/esm/server/api-utils/get-cookie-parser.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Parse cookies from the `headers` of request + * @param req request object + */ __turbopack_context__.s([ + "getCookieParser", + ()=>getCookieParser +]); +function getCookieParser(headers) { + return function parseCookie() { + const { cookie } = headers; + if (!cookie) { + return {}; + } + const { parse: parseCookieFn } = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/cookie/index.js [app-route] (ecmascript)"); + return parseCookieFn(Array.isArray(cookie) ? cookie.join('; ') : cookie); + }; +} +}), +"[project]/node_modules/next/dist/esm/server/api-utils/index.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ApiError", + ()=>ApiError, + "COOKIE_NAME_PRERENDER_BYPASS", + ()=>COOKIE_NAME_PRERENDER_BYPASS, + "COOKIE_NAME_PRERENDER_DATA", + ()=>COOKIE_NAME_PRERENDER_DATA, + "RESPONSE_LIMIT_DEFAULT", + ()=>RESPONSE_LIMIT_DEFAULT, + "SYMBOL_CLEARED_COOKIES", + ()=>SYMBOL_CLEARED_COOKIES, + "SYMBOL_PREVIEW_DATA", + ()=>SYMBOL_PREVIEW_DATA, + "checkIsOnDemandRevalidate", + ()=>checkIsOnDemandRevalidate, + "clearPreviewData", + ()=>clearPreviewData, + "redirect", + ()=>redirect, + "sendError", + ()=>sendError, + "sendStatusCode", + ()=>sendStatusCode, + "setLazyProp", + ()=>setLazyProp, + "wrapApiHandler", + ()=>wrapApiHandler +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$headers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/headers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)"); +; +; +; +; +function wrapApiHandler(page, handler) { + return (...args)=>{ + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])().setRootSpanAttribute('next.route', page); + // Call API route method + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])().trace(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NodeSpan"].runHandler, { + spanName: `executing api route (pages) ${page}` + }, ()=>handler(...args)); + }; +} +function sendStatusCode(res, statusCode) { + res.statusCode = statusCode; + return res; +} +function redirect(res, statusOrUrl, url) { + if (typeof statusOrUrl === 'string') { + url = statusOrUrl; + statusOrUrl = 307; + } + if (typeof statusOrUrl !== 'number' || typeof url !== 'string') { + throw new Error(`Invalid redirect arguments. Please use a single argument URL, e.g. res.redirect('/destination') or use a status code and URL, e.g. res.redirect(307, '/destination').`); + } + res.writeHead(statusOrUrl, { + Location: url + }); + res.write(url); + res.end(); + return res; +} +function checkIsOnDemandRevalidate(rawHeaders, previewProps) { + // Headers is a plain object for Node.js, Headers object in Edge runtime + if (typeof rawHeaders.get === 'function') { + const headers = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$headers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["HeadersAdapter"].from(rawHeaders); + const previewModeId = headers.get(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["PRERENDER_REVALIDATE_HEADER"]); + const isOnDemandRevalidate = previewModeId === previewProps.previewModeId; + const revalidateOnlyGenerated = headers.has(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER"]); + return { + isOnDemandRevalidate, + revalidateOnlyGenerated + }; + } + const headers = rawHeaders; + const previewModeId = headers[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["PRERENDER_REVALIDATE_HEADER"]]; + const isOnDemandRevalidate = previewModeId === previewProps.previewModeId; + const revalidateOnlyGenerated = headers.hasOwnProperty(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER"]); + return { + isOnDemandRevalidate, + revalidateOnlyGenerated + }; +} +const COOKIE_NAME_PRERENDER_BYPASS = `__prerender_bypass`; +const COOKIE_NAME_PRERENDER_DATA = `__next_preview_data`; +const RESPONSE_LIMIT_DEFAULT = 4 * 1024 * 1024; +const SYMBOL_PREVIEW_DATA = Symbol(COOKIE_NAME_PRERENDER_DATA); +const SYMBOL_CLEARED_COOKIES = Symbol(COOKIE_NAME_PRERENDER_BYPASS); +function clearPreviewData(res, options = {}) { + if (SYMBOL_CLEARED_COOKIES in res) { + return res; + } + const { serialize } = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/cookie/index.js [app-route] (ecmascript)"); + const previous = res.getHeader('Set-Cookie'); + res.setHeader(`Set-Cookie`, [ + ...typeof previous === 'string' ? [ + previous + ] : Array.isArray(previous) ? previous : [], + serialize(COOKIE_NAME_PRERENDER_BYPASS, '', { + // To delete a cookie, set `expires` to a date in the past: + // https://tools.ietf.org/html/rfc6265#section-4.1.1 + // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted. + expires: new Date(0), + httpOnly: true, + sameSite: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'lax', + secure: ("TURBOPACK compile-time value", "development") !== 'development', + path: '/', + ...options.path !== undefined ? { + path: options.path + } : undefined + }), + serialize(COOKIE_NAME_PRERENDER_DATA, '', { + // To delete a cookie, set `expires` to a date in the past: + // https://tools.ietf.org/html/rfc6265#section-4.1.1 + // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted. + expires: new Date(0), + httpOnly: true, + sameSite: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'lax', + secure: ("TURBOPACK compile-time value", "development") !== 'development', + path: '/', + ...options.path !== undefined ? { + path: options.path + } : undefined + }) + ]); + Object.defineProperty(res, SYMBOL_CLEARED_COOKIES, { + value: true, + enumerable: false + }); + return res; +} +class ApiError extends Error { + constructor(statusCode, message){ + super(message); + this.statusCode = statusCode; + } +} +function sendError(res, statusCode, message) { + res.statusCode = statusCode; + res.statusMessage = message; + res.end(message); +} +function setLazyProp({ req }, prop, getter) { + const opts = { + configurable: true, + enumerable: true + }; + const optsReset = { + ...opts, + writable: true + }; + Object.defineProperty(req, prop, { + ...opts, + get: ()=>{ + const value = getter(); + // we set the property on the object to avoid recalculating it + Object.defineProperty(req, prop, { + ...optsReset, + value + }); + return value; + }, + set: (value)=>{ + Object.defineProperty(req, prop, { + ...optsReset, + value + }); + } + }); +} +}), +"[project]/node_modules/next/dist/esm/server/app-render/async-local-storage.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "bindSnapshot", + ()=>bindSnapshot, + "createAsyncLocalStorage", + ()=>createAsyncLocalStorage, + "createSnapshot", + ()=>createSnapshot, + "getOrCreateGlobalAsyncLocalStorage", + ()=>getOrCreateGlobalAsyncLocalStorage +]); +const sharedAsyncLocalStorageNotAvailableError = new Error('Invariant: AsyncLocalStorage accessed in runtime where it is not available'); +class FakeAsyncLocalStorage { + disable() { + throw sharedAsyncLocalStorageNotAvailableError; + } + getStore() { + // This fake implementation of AsyncLocalStorage always returns `undefined`. + return undefined; + } + run() { + throw sharedAsyncLocalStorageNotAvailableError; + } + exit() { + throw sharedAsyncLocalStorageNotAvailableError; + } + enterWith() { + throw sharedAsyncLocalStorageNotAvailableError; + } + static bind(fn) { + return fn; + } +} +const maybeGlobalAsyncLocalStorage = typeof globalThis !== 'undefined' && globalThis.AsyncLocalStorage; +function createAsyncLocalStorage() { + if (maybeGlobalAsyncLocalStorage) { + return new maybeGlobalAsyncLocalStorage(); + } + return new FakeAsyncLocalStorage(); +} +function getOrCreateGlobalAsyncLocalStorage(name) { + const key = Symbol.for(`@next/${name}@${"16.4.1"}`); + const globalStore = globalThis; + return globalStore[key] ??= createAsyncLocalStorage(); +} +function bindSnapshot(fn) { + if (maybeGlobalAsyncLocalStorage) { + return maybeGlobalAsyncLocalStorage.bind(fn); + } + return FakeAsyncLocalStorage.bind(fn); +} +function createSnapshot() { + if (maybeGlobalAsyncLocalStorage) { + return maybeGlobalAsyncLocalStorage.snapshot(); + } + return function(fn, ...args) { + return fn(...args); + }; +} +}), +"[project]/node_modules/next/dist/esm/server/app-render/blocking-route-messages.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "createDynamicBodyError", + ()=>createDynamicBodyError, + "createDynamicBodyErrorInNavigation", + ()=>createDynamicBodyErrorInNavigation, + "createDynamicBodyErrorInStaticRoute", + ()=>createDynamicBodyErrorInStaticRoute, + "createDynamicMetadataError", + ()=>createDynamicMetadataError, + "createDynamicMetadataErrorInStaticRoute", + ()=>createDynamicMetadataErrorInStaticRoute, + "createDynamicOrRuntimeBodyError", + ()=>createDynamicOrRuntimeBodyError, + "createDynamicOrRuntimeMetadataError", + ()=>createDynamicOrRuntimeMetadataError, + "createDynamicOrRuntimeViewportError", + ()=>createDynamicOrRuntimeViewportError, + "createDynamicViewportError", + ()=>createDynamicViewportError, + "createDynamicViewportErrorInStaticRoute", + ()=>createDynamicViewportErrorInStaticRoute, + "createLinkBodyErrorInNavigation", + ()=>createLinkBodyErrorInNavigation, + "createLinkMetadataError", + ()=>createLinkMetadataError, + "createLinkViewportError", + ()=>createLinkViewportError, + "createNavigationBodyErrorInNavigation", + ()=>createNavigationBodyErrorInNavigation, + "createNavigationMetadataError", + ()=>createNavigationMetadataError, + "createNavigationViewportError", + ()=>createNavigationViewportError, + "createNonPrerenderableBodyErrorInStaticRoute", + ()=>createNonPrerenderableBodyErrorInStaticRoute, + "createNonPrerenderableMetadataErrorInStaticRoute", + ()=>createNonPrerenderableMetadataErrorInStaticRoute, + "createNonPrerenderableViewportErrorInStaticRoute", + ()=>createNonPrerenderableViewportErrorInStaticRoute, + "createPrefetchBodyErrorInNavigation", + ()=>createPrefetchBodyErrorInNavigation, + "createPrefetchMetadataError", + ()=>createPrefetchMetadataError, + "createPrefetchViewportError", + ()=>createPrefetchViewportError, + "createRuntimeBodyError", + ()=>createRuntimeBodyError, + "createRuntimeBodyErrorInNavigation", + ()=>createRuntimeBodyErrorInNavigation, + "createRuntimeBodyErrorInStaticRoute", + ()=>createRuntimeBodyErrorInStaticRoute, + "createRuntimeMetadataError", + ()=>createRuntimeMetadataError, + "createRuntimeMetadataErrorInStaticRoute", + ()=>createRuntimeMetadataErrorInStaticRoute, + "createRuntimeViewportError", + ()=>createRuntimeViewportError, + "createRuntimeViewportErrorInStaticRoute", + ()=>createRuntimeViewportErrorInStaticRoute, + "logBuildDebugHint", + ()=>logBuildDebugHint +]); +function createRuntimeBodyError(route) { + return new Error(`Route "${route}": Next.js encountered runtime data during prerendering.\n\n` + `\`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` accessed outside of \`\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-runtime`); +} +function createDynamicBodyError(route) { + return new Error(`Route "${route}": Next.js encountered uncached data during prerendering.\n\n` + `\`fetch(...)\` or \`connection()\` accessed outside of \`\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [cache] Cache the data access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`); +} +function createRuntimeBodyErrorInNavigation(route) { + return new Error(`Route "${route}": Next.js encountered runtime data during prerendering or a navigation.\n\n` + `\`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` accessed outside of \`\` prevents the route from being prerendered or the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-runtime`); +} +function createLinkBodyErrorInNavigation(route) { + return new Error(`Route "${route}": Next.js encountered URL data during prerendering or a navigation.\n\n` + `\`params\` or \`searchParams\` accessed outside of \`\` may prevent the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-shell-url-data`); +} +function createNavigationBodyErrorInNavigation(route) { + return new Error(`Route "${route}": Next.js encountered \`navigation()\` during prerendering or a navigation.\n\n` + `\`navigation()\` called outside of \`\` may prevent the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the component that calls \`navigation()\`\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage`); +} +function createPrefetchBodyErrorInNavigation(route) { + return new Error(`Route "${route}": Next.js encountered \`prefetch()\` during prerendering or a navigation.\n\n` + `\`prefetch()\` called outside of \`\` may prevent the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the component that calls \`prefetch()\`\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage`); +} +function createDynamicBodyErrorInNavigation(route) { + return new Error(`Route "${route}": Next.js encountered uncached data during prerendering or a navigation.\n\n` + `\`fetch(...)\` or \`connection()\` accessed outside of \`\` prevents the route from being prerendered or the navigation from being instant, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [cache] Cache the data access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`); +} +function createDynamicOrRuntimeBodyError(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data during prerendering.\n\n` + `\`fetch(...)\`, \`cookies()\`, \`headers()\`, \`params\`, \`searchParams\`, or \`connection()\` accessed outside of \`\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [stream] Provide a placeholder with \`\` around the data access\n` + ` - [cache] For uncached data (\`fetch\`, database calls): cache the access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`); +} +function createLinkMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered URL data in \`generateMetadata()\`.\n\n` + `This route's metadata is blocked, but the rest of its content can be prefetched. \`params\` or \`searchParams\` accessed in \`generateMetadata()\` prevent it from being prefetched.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static metadata export instead of \`generateMetadata()\`\n` + ` - [dynamic] Render a marker component that calls \`await connection()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`); +} +function createRuntimeMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered runtime data in \`generateMetadata()\`.\n\n` + `This route's metadata is blocked, but the rest of its content can be prerendered. \`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` accessed in \`generateMetadata()\` cause it to run dynamically.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static metadata export instead of \`generateMetadata()\`\n` + ` - [dynamic] Render a marker component that calls \`await connection()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`); +} +function createNavigationMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered \`navigation()\` in \`generateMetadata()\`.\n\n` + `Metadata can already stream without blocking the route's UI, so delaying it until navigation may be unintentional.\n\n` + `Ways to fix this:\n` + ` - [remove] Remove \`navigation()\` from \`generateMetadata()\`\n` + ` - [mark] Render a marker component that calls \`await navigation()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-metadata`); +} +function createPrefetchMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered \`prefetch()\` in \`generateMetadata()\`.\n\n` + `Metadata can already stream without blocking the route's UI, so delaying it until a per-link prefetch or navigation may be unintentional.\n\n` + `Ways to fix this:\n` + ` - [remove] Remove \`prefetch()\` from \`generateMetadata()\`\n` + ` - [mark] Render a marker component that calls \`await prefetch()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-metadata`); +} +function createDynamicMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered uncached data in \`generateMetadata()\`.\n\n` + `This route's metadata is blocked, but the rest of its content can be prerendered. \`fetch(...)\` or \`connection()\` accessed in \`generateMetadata()\` cause it to run dynamically.\n\n` + `Ways to fix this:\n` + ` - [cache] Cache the metadata with \`"use cache"\` in \`generateMetadata()\` (does not apply to \`connection()\`)\n` + ` - [dynamic] Render a marker component that calls \`await connection()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-dynamic`); +} +function createLinkViewportError(route) { + return new Error(`Route "${route}": Next.js encountered URL data in \`generateViewport()\`.\n\n` + `\`params\` or \`searchParams\` in \`generateViewport()\` prevents the page from being prerendered, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static viewport export instead of \`generateViewport()\`\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`); +} +function createRuntimeViewportError(route) { + return new Error(`Route "${route}": Next.js encountered runtime data in \`generateViewport()\`.\n\n` + `\`cookies()\`, \`headers()\`, \`params\`, or \`searchParams\` in \`generateViewport()\` prevents the page from being prerendered, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static viewport export instead of \`generateViewport()\`\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`); +} +function createNavigationViewportError(route) { + return new Error(`Route "${route}": Next.js encountered \`navigation()\` in \`generateViewport()\`.\n\n` + `This prevents Next.js from creating the App Shell, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [remove] Remove \`navigation()\` from \`generateViewport()\`\n` + ` - [ignore] Set \`export const instant = false\` to disable validation for this segment\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-viewport`); +} +function createPrefetchViewportError(route) { + return new Error(`Route "${route}": Next.js encountered \`prefetch()\` in \`generateViewport()\`.\n\n` + `This prevents Next.js from creating the App Shell, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [remove] Remove \`prefetch()\` from \`generateViewport()\`\n` + ` - [ignore] Set \`export const instant = false\` to disable validation for this segment\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-viewport`); +} +function createDynamicViewportError(route) { + return new Error(`Route "${route}": Next.js encountered uncached data in \`generateViewport()\`.\n\n` + `\`fetch(...)\` or \`connection()\` in \`generateViewport()\` prevents the page from being prerendered, leading to a slower user experience.\n\n` + `Ways to fix this:\n` + ` - [cache] Cache the viewport data with \`"use cache"\` in \`generateViewport()\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-dynamic`); +} +function createDynamicOrRuntimeViewportError(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data in \`generateViewport()\`.\n\n` + `This prevents the page from being prerendered, leading to a slower user experience. Unlike metadata, viewport cannot be streamed behind \`\` because it affects the initial page load.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static viewport export instead of \`generateViewport()\`\n` + ` - [cache] For uncached data (\`fetch\`, database calls): cache the viewport with \`"use cache"\` in \`generateViewport()\` (does not apply to \`connection()\`)\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`); +} +function createDynamicOrRuntimeMetadataError(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data in \`generateMetadata()\`.\n\n` + `This route's metadata is blocked, but the rest of its content can be prerendered.\n\n` + `Ways to fix this:\n` + ` - [static] Use a static metadata export instead of \`generateMetadata()\`\n` + ` - [cache] Cache the metadata with \`"use cache"\` in \`generateMetadata()\` (does not apply to \`connection()\`)\n` + ` - [dynamic] Render a marker component that calls \`await connection()\` inside \`\` on the page\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`); +} +function createRuntimeBodyErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered runtime data on a route that must be fully static.\n\n` + `This route is configured to be fully static, but runtime data from \`cookies()\`, \`headers()\`, \`params\`, \`searchParams\`, or a short-lived cache requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [remove] Remove the data access\n` + ` - [client] Read the data on the client\n\n` + `Learn more: https://nextjs.org/docs/messages/static-route-runtime`); +} +function createDynamicBodyErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached data on a route that must be fully static.\n\n` + `This route is configured to be fully static, but an uncached \`fetch(...)\`, database call, or \`connection()\` requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] Cache the data access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [remove] Remove the data access\n` + ` - [client] Read the data on the client\n\n` + `Learn more: https://nextjs.org/docs/messages/static-route-dynamic`); +} +function createNonPrerenderableBodyErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data on a route that must be fully static.\n\n` + `This route is configured to be fully static, but some data requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] For uncached data (\`fetch\`, database calls): cache the access with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [remove] Remove the data access\n` + ` - [client] Read the data on the client\n\n` + `Learn more: https://nextjs.org/docs/messages/static-route-dynamic`); +} +function createRuntimeMetadataErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered runtime data in \`generateMetadata()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but runtime data from \`cookies()\`, \`headers()\`, \`params\`, \`searchParams\`, or a short-lived cache requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [static] Replace the dynamic data used by \`generateMetadata()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-metadata-runtime`); +} +function createDynamicMetadataErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached data in \`generateMetadata()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but an uncached \`fetch(...)\`, database call, or \`connection()\` requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] Cache the data used by \`generateMetadata()\` with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [static] Replace the dynamic data used by \`generateMetadata()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-metadata-dynamic`); +} +function createNonPrerenderableMetadataErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data in \`generateMetadata()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but some data requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] For uncached data: cache the data used by \`generateMetadata()\` with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [static] Replace the dynamic data used by \`generateMetadata()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-metadata-dynamic`); +} +function createRuntimeViewportErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered runtime data in \`generateViewport()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but runtime data from \`cookies()\`, \`headers()\`, \`params\`, \`searchParams\`, or a short-lived cache requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [static] Replace the dynamic data used by \`generateViewport()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-viewport-runtime`); +} +function createDynamicViewportErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached data in \`generateViewport()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but an uncached \`fetch(...)\`, database call, or \`connection()\` requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] Cache the data used by \`generateViewport()\` with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [static] Replace the dynamic data used by \`generateViewport()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-viewport-dynamic`); +} +function createNonPrerenderableViewportErrorInStaticRoute(route) { + return new Error(`Route "${route}": Next.js encountered uncached or runtime data in \`generateViewport()\` on a route that must be fully static.\n\n` + `This route is configured to be fully static, but some data requires rendering at request time.\n\n` + `Ways to fix this:\n` + ` - [cache] For uncached data: cache the data used by \`generateViewport()\` with \`"use cache"\` (does not apply to \`connection()\`)\n` + ` - [static] Replace the dynamic data used by \`generateViewport()\` with static data\n\n` + `Learn more: https://nextjs.org/docs/messages/static-viewport-dynamic`); +} +function logBuildDebugHint(route) { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; +} +}), +"[project]/node_modules/next/dist/esm/server/app-render/dynamic-rendering.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "DynamicHoleKind", + ()=>DynamicHoleKind, + "PreludeState", + ()=>PreludeState, + "abortAndThrowOnSynchronousRequestDataAccess", + ()=>abortAndThrowOnSynchronousRequestDataAccess, + "abortOnSynchronousPlatformIOAccess", + ()=>abortOnSynchronousPlatformIOAccess, + "accessedDynamicData", + ()=>accessedDynamicData, + "annotateDynamicAccess", + ()=>annotateDynamicAccess, + "consumeDynamicAccess", + ()=>consumeDynamicAccess, + "createDynamicTrackingState", + ()=>createDynamicTrackingState, + "createDynamicValidationState", + ()=>createDynamicValidationState, + "createHangingInputAbortSignal", + ()=>createHangingInputAbortSignal, + "createInstantValidationState", + ()=>createInstantValidationState, + "formatDynamicAPIAccesses", + ()=>formatDynamicAPIAccesses, + "getDisallowedReasonsInStaticRoute", + ()=>getDisallowedReasonsInStaticRoute, + "getFirstDynamicReason", + ()=>getFirstDynamicReason, + "getNavigationDisallowedDynamicReasons", + ()=>getNavigationDisallowedDynamicReasons, + "getStaticShellDisallowedDynamicReasons", + ()=>getStaticShellDisallowedDynamicReasons, + "isPrerenderInterruptedError", + ()=>isPrerenderInterruptedError, + "logDisallowedDynamicError", + ()=>logDisallowedDynamicError, + "markCurrentScopeAsDynamic", + ()=>markCurrentScopeAsDynamic, + "throwIfDisallowedDynamic", + ()=>throwIfDisallowedDynamic, + "throwIfDisallowedDynamicInStaticRoute", + ()=>throwIfDisallowedDynamicInStaticRoute, + "throwIfSyncIOUsed", + ()=>throwIfSyncIOUsed, + "throwToInterruptStaticGeneration", + ()=>throwToInterruptStaticGeneration, + "trackAllowedDynamicAccess", + ()=>trackAllowedDynamicAccess, + "trackDynamicAccessInStaticRoute", + ()=>trackDynamicAccessInStaticRoute, + "trackDynamicDataInDynamicRender", + ()=>trackDynamicDataInDynamicRender, + "trackDynamicHoleInNavigation", + ()=>trackDynamicHoleInNavigation, + "trackDynamicHoleInStaticShell", + ()=>trackDynamicHoleInStaticShell, + "trackThrownErrorInNavigation", + ()=>trackThrownErrorInNavigation +]); +/** + * The functions provided by this module are used to communicate certain properties + * about the currently running code so that Next.js can make decisions on how to handle + * the current execution in different rendering modes such as pre-rendering, resuming, and SSR. + * + * Today Next.js treats all code as potentially static. Certain APIs may only make sense when dynamically rendering. + * Traditionally this meant deopting the entire render to dynamic however with PPR we can now deopt parts + * of a React tree as dynamic while still keeping other parts static. There are really two different kinds of + * Dynamic indications. + * + * The first is simply an intention to be dynamic. unstable_noStore is an example of this where + * the currently executing code simply declares that the current scope is dynamic but if you use it + * inside unstable_cache it can still be cached. This type of indication can be removed if we ever + * make the default dynamic to begin with because the only way you would ever be static is inside + * a cache scope which this indication does not affect. + * + * The second is an indication that a dynamic data source was read. This is a stronger form of dynamic + * because it means that it is inappropriate to cache this at all. using a dynamic data source inside + * unstable_cache should error. If you want to use some dynamic data inside unstable_cache you should + * read that data outside the cache and pass it in as an argument to the cached function. + */ // Once postpone is in stable we should switch to importing the postpone export directly +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$hooks$2d$server$2d$context$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/hooks-server-context.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/static-generation-bailout.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/dynamic-rendering-utils.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$framework$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/framework/boundary-constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/scheduler.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/blocking-route-messages.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/instant-validation/boundary-constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$tracking$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/instant-validation/boundary-tracking.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$instant$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/instant-messages.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$lazy$2d$dynamic$2f$react$2d$browser$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/lazy-dynamic/react-browser-bailout.js [app-route] (ecmascript)"); +; +; +; +; +; +; +; +; +; +; +; +; +; +function createDynamicTrackingState(isDebugDynamicAccesses) { + return { + isDebugDynamicAccesses, + dynamicAccesses: [], + syncDynamicErrorWithStack: null, + syncDynamicErrorWithStackPostMicrotask: false + }; +} +function createDynamicValidationState() { + return { + hasSuspenseAboveBody: false, + hasDynamicMetadata: false, + dynamicMetadata: null, + hasDynamicViewport: false, + hasAllowedDynamic: false, + dynamicErrors: [] + }; +} +function getPendingClientSyncDynamicError(clientDynamic) { + return clientDynamic.syncDynamicErrorWithStackPostMicrotask ? null : clientDynamic.syncDynamicErrorWithStack; +} +function getFirstDynamicReason(trackingState) { + var _trackingState_dynamicAccesses_; + return (_trackingState_dynamicAccesses_ = trackingState.dynamicAccesses[0]) == null ? void 0 : _trackingState_dynamicAccesses_.expression; +} +function markCurrentScopeAsDynamic(store, workUnitStore, expression) { + if (workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + case 'unstable-cache': + // Inside cache scopes, marking a scope as dynamic has no effect, + // because the outer cache scope creates a cache boundary. This is + // subtly different from reading a dynamic data source, which is + // forbidden inside a cache scope. + return; + case 'private-cache': + // A private cache scope is already dynamic by definition. + return; + case 'prerender-legacy': + case 'request': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + // If we're forcing dynamic rendering or we're forcing static rendering, we + // don't need to do anything here because the entire page is already dynamic + // or it's static and it should not throw or postpone here. + if (store.forceDynamic || store.forceStatic) return; + if (store.dynamicShouldError) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"](`Route ${store.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`); + } + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender-legacy': + workUnitStore.revalidate = 0; + // We aren't prerendering, but we are generating a static page. We need + // to bail out of static generation. + const err = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$hooks$2d$server$2d$context$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["DynamicServerError"](`Route ${store.route} couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`); + store.dynamicUsageDescription = expression; + store.dynamicUsageStack = err.stack; + throw err; + case 'request': + markRequestStoreAsDynamic(workUnitStore); + break; + case 'build-time-generator': + break; + default: + workUnitStore; + } + } +} +function throwToInterruptStaticGeneration(expression, store, prerenderStore) { + // We aren't prerendering but we are generating a static page. We need to bail out of static generation + const err = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$hooks$2d$server$2d$context$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["DynamicServerError"](`Route ${store.route} couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`); + prerenderStore.revalidate = 0; + store.dynamicUsageDescription = expression; + store.dynamicUsageStack = err.stack; + throw err; +} +function trackDynamicDataInDynamicRender(workUnitStore) { + switch(workUnitStore.type){ + case 'cache': + case 'unstable-cache': + // Inside cache scopes, marking a scope as dynamic has no effect, + // because the outer cache scope creates a cache boundary. This is + // subtly different from reading a dynamic data source, which is + // forbidden inside a cache scope. + return; + case 'private-cache': + // A private cache scope is already dynamic by definition. + return; + case 'prerender': + case 'prerender-runtime': + case 'prerender-legacy': + case 'prerender-client': + case 'validation-client': + case 'build-time-generator': + break; + case 'request': + markRequestStoreAsDynamic(workUnitStore); + break; + default: + workUnitStore; + } +} +function markRequestStoreAsDynamic(requestStore) { + if (("TURBOPACK compile-time value", "1") && requestStore.phase === 'render') { + requestStore.usedDynamic = true; + } +} +function abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore) { + const reason = `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`; + const error = createPrerenderInterruptedError(reason); + prerenderStore.controller.abort(error); + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking) { + dynamicTracking.dynamicAccesses.push({ + // When we aren't debugging, we don't need to create another error for the + // stack trace. + stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined, + expression + }); + } +} +function abortOnSynchronousPlatformIOAccess(route, expression, errorWithStack, prerenderStore) { + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking && dynamicTracking.syncDynamicErrorWithStack === null) { + dynamicTracking.syncDynamicErrorWithStack = errorWithStack; + // React completes the task that is currently rendering before scheduled + // abort cleanup. Client tracking can attribute the sync IO only during + // that current task; server tracking keeps the error regardless. + queueMicrotask(()=>{ + dynamicTracking.syncDynamicErrorWithStackPostMicrotask = true; + }); + } + abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore); +} +function abortAndThrowOnSynchronousRequestDataAccess(route, expression, errorWithStack, prerenderStore) { + const prerenderSignal = prerenderStore.controller.signal; + if (prerenderSignal.aborted === false) { + // TODO it would be better to move this aborted check into the callsite so we can avoid making + // the error object when it isn't relevant to the aborting of the prerender however + // since we need the throw semantics regardless of whether we abort it is easier to land + // this way. See how this was handled with `abortOnSynchronousPlatformIOAccess` for a closer + // to ideal implementation + abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore); + // Preserve the exact server-side dynamic access for final validation after + // interrupting this render. + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking) { + if (dynamicTracking.syncDynamicErrorWithStack === null) { + dynamicTracking.syncDynamicErrorWithStack = errorWithStack; + } + } + } + throw createPrerenderInterruptedError(`Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`); +} +const NEXT_PRERENDER_INTERRUPTED = 'NEXT_PRERENDER_INTERRUPTED'; +function createPrerenderInterruptedError(message) { + const error = new Error(message); + error.digest = NEXT_PRERENDER_INTERRUPTED; + return error; +} +function isPrerenderInterruptedError(error) { + return typeof error === 'object' && error !== null && error.digest === NEXT_PRERENDER_INTERRUPTED && 'name' in error && 'message' in error && error instanceof Error; +} +function accessedDynamicData(dynamicAccesses) { + return dynamicAccesses.length > 0; +} +function consumeDynamicAccess(serverDynamic, clientDynamic) { + // We mutate because we only call this once we are no longer writing + // to the dynamicTrackingState and it's more efficient than creating a new + // array. + serverDynamic.dynamicAccesses.push(...clientDynamic.dynamicAccesses); + return serverDynamic.dynamicAccesses; +} +function formatDynamicAPIAccesses(dynamicAccesses) { + return dynamicAccesses.filter((access)=>typeof access.stack === 'string' && access.stack.length > 0).map(({ expression, stack })=>{ + stack = stack.split('\n') // Remove the "Error: " prefix from the first line of the stack trace as + // well as the first 4 lines of the stack trace which is the distance + // from the user code and the `new Error().stack` call. + .slice(4).filter((line)=>{ + // Exclude Next.js internals from the stack trace. + if (line.includes('node_modules/next/')) { + return false; + } + // Exclude anonymous functions from the stack trace. + if (line.includes(' ()')) { + return false; + } + // Exclude Node.js internals from the stack trace. + if (line.includes(' (node:')) { + return false; + } + return true; + }).join('\n'); + return `Dynamic API Usage Debug - ${expression}:\n${stack}`; + }); +} +function createHangingInputAbortSignal(workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + const controller = new AbortController(); + if (workUnitStore.cacheSignal) { + // If we have a cacheSignal it means we're in a prospective render. If + // the input we're waiting on is coming from another cache, we do want + // to wait for it so that we can resolve this cache entry too. + workUnitStore.cacheSignal.inputReady().then(()=>{ + controller.abort(); + }); + } else { + // Otherwise we're in the final render and we should already have all + // our caches filled. + // If the prerender uses stages, we have wait until the final stage. + // if an input didn't resolve at that point, then we can assume it never will. + // + // We might still be waiting on some microtasks so we + // wait one tick before giving up. When we give up, we still want to + // render the content of this cache as deeply as we can so that we can + // suspend as deeply as possible in the tree or not at all if we don't + // end up waiting for the input. + const stagedRendering = (0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["getStagedRenderingController"])(workUnitStore); + if (stagedRendering && stagedRendering.finalStage !== null) { + stagedRendering.waitForStage(stagedRendering.finalStage).then(()=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["scheduleOnNextTick"])(()=>controller.abort()), noop); + } else { + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["scheduleOnNextTick"])(()=>controller.abort()); + } + } + return controller.signal; + case 'prerender-client': + case 'validation-client': + case 'prerender-legacy': + case 'request': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + return undefined; + default: + workUnitStore; + } +} +function noop() {} +function annotateDynamicAccess(expression, prerenderStore) { + const dynamicTracking = prerenderStore.dynamicTracking; + if (dynamicTracking) { + dynamicTracking.dynamicAccesses.push({ + stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined, + expression + }); + } +} +const hasSuspenseRegex = /\n\s+at Suspense \(\)/; +// Common implicit body tags that React will treat as body when placed directly in html +const bodyAndImplicitTags = 'body|div|main|section|article|aside|header|footer|nav|form|p|span|h1|h2|h3|h4|h5|h6'; +// Detects when RootLayoutBoundary (our framework marker component) appears +// after Suspense in the component stack, indicating the root layout is wrapped +// within a Suspense boundary. Ensures no body/html/implicit-body components are in between. +// +// Example matches: +// at Suspense () +// at __next_root_layout_boundary__ () +// +// Or with other components in between (but not body/html/implicit-body): +// at Suspense () +// at SomeComponent () +// at __next_root_layout_boundary__ () +const hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex = new RegExp(`\\n\\s+at Suspense \\(\\)(?:(?!\\n\\s+at (?:${bodyAndImplicitTags}) \\(\\))[\\s\\S])*?\\n\\s+at ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$framework$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ROOT_LAYOUT_BOUNDARY_NAME"]} \\([^\\n]*\\)`); +const hasMetadataRegex = new RegExp(`\\n\\s+at ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$framework$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["METADATA_BOUNDARY_NAME"]}[\\n\\s]`); +const hasViewportRegex = new RegExp(`\\n\\s+at ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$framework$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["VIEWPORT_BOUNDARY_NAME"]}[\\n\\s]`); +const hasOutletRegex = new RegExp(`\\n\\s+at ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$framework$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["OUTLET_BOUNDARY_NAME"]}[\\n\\s]`); +const hasInstantValidationBoundaryRegex = new RegExp(`\\n\\s+at ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INSTANT_VALIDATION_BOUNDARY_NAME"]}[\\n\\s]`); +const slotMarkerRegex = new RegExp(`\\n\\s+at ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INSTANT_SLOT_MARKER_PREFIX"]}(\\d+)${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INSTANT_SLOT_MARKER_SUFFIX"]}[\\n\\s]`); +/** Look up the config factory for the slot this error belongs to. + * Checks the component stack for a slot marker (__next_instant_slot_N__) + * and returns the config at that index. Falls back to index 0 (root + * config) when no slot marker is found or the slot has no config. */ function resolveInstantStack(componentStack, dynamicValidation) { + const { slotStacks } = dynamicValidation; + if (slotStacks.length > 1) { + const match = slotMarkerRegex.exec(componentStack); + if (match) { + // Slot markers are 0-indexed in the component name but + // slotStacks is 1-indexed (index 0 is the root config). + const slotIndex = parseInt(match[1], 10) + 1; + const slotStack = slotStacks[slotIndex]; + if (slotStack != null) { + return slotStack; + } + } + } + // Fall back to root config (index 0) + return slotStacks[0] ?? null; +} +/** + * Inspects the component stack of an outlet boundary to discover whether the + * user placed a Suspense boundary above the document body, and records the + * opt-in on `dynamicValidation.hasSuspenseAboveBody` if so. + * + * The outlet itself isn't a meaningful source of dynamic — it only resolves + * when metadata/viewport are dynamic, which we track via their own boundaries. + * However, the outlet renders alongside the page content, so its stack passes + * through the user's layout chain (typically reaching into `` via the + * root layout). That makes the outlet stack our best opportunity to spot a + * Suspense boundary above the body, even when no real body content is dynamic. + * Without this, a route whose only dynamic source is `generateViewport()` would + * miss the Suspense-above-body opt-in, because the viewport's stack lives in + * the head and never sees the user's root layout. + * + * We deliberately only set `hasSuspenseAboveBody`, not `hasAllowedDynamic`. The + * latter tracks whether the body has dynamic content that's been wrapped in + * Suspense (i.e., the page is partially dynamic). The outlet rendering tells us + * about the structural opt-in for an empty shell, not about the body being + * partially dynamic. The distinction matters because dynamic metadata is only + * acceptable when the page is partially dynamic (via real body holes), and we + * don't want this outlet-based detection to mask that case. + */ function trackOutletSuspenseAboveBody(componentStack, dynamicValidation) { + if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + dynamicValidation.hasSuspenseAboveBody = true; + } +} +function trackDynamicAccessInStaticRoute(dynamicReason, workStore, componentStack, dynamicValidation, clientDynamic, isServerPartial, kind) { + const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic); + if (hasOutletRegex.test(componentStack)) { + trackOutletSuspenseAboveBody(componentStack, dynamicValidation); + return; + } + if (hasMetadataRegex.test(componentStack)) { + dynamicValidation.dynamicErrors.push(addErrorContext(createMetadataErrorInStaticRoute(kind, workStore.route), componentStack, null)); + return; + } + if (hasViewportRegex.test(componentStack)) { + dynamicValidation.dynamicErrors.push(addErrorContext(createViewportErrorInStaticRoute(kind, workStore.route), componentStack, null)); + return; + } + let hasSuspense = false; + if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + // this error had a Suspense boundary above it, and it's above the body as well. + dynamicValidation.hasSuspenseAboveBody = true; + hasSuspense = true; + } else if (hasSuspenseRegex.test(componentStack)) { + // this error had a Suspense boundary above it. + hasSuspense = true; + } + if (hasSuspense) { + if (!isServerPartial) { + // If we don't have holes caused by server data, then any holes must be caused + // by client-only code, which is allowed. + dynamicValidation.hasAllowedDynamic = true; + return; + } + // We have holes that may be caused by server data. + if (syncDynamicError || (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isClientHookDynamicError"])(dynamicReason)) { + // We know this hole wasn't caused by server data, so it's allowed + // (because it's wrapped in a Suspense) + dynamicValidation.hasAllowedDynamic = true; + return; + } + // Any remaining hole may be caused by a server hole. + // These are not allowed even with Suspense. + // (NOTE: this may misreport valid client dynamic holes as server holes) + dynamicValidation.dynamicErrors.push(addErrorContext(createBodyErrorInStaticRoute(kind, workStore.route), componentStack, null)); + return; + } + if (syncDynamicError) { + dynamicValidation.dynamicErrors.push(syncDynamicError); + return; + } + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isClientHookDynamicError"])(dynamicReason)) { + dynamicValidation.dynamicErrors.push(addErrorContext(dynamicReason, componentStack, null)); + return; + } + const error = addErrorContext(isServerPartial ? createBodyErrorInStaticRoute(kind, workStore.route) : createBodyError(kind, workStore.route), componentStack, null); + dynamicValidation.dynamicErrors.push(error); +} +function trackAllowedDynamicAccess(dynamicReason, workStore, componentStack, dynamicValidation, clientDynamic) { + const dynamicHoleKind = 6; + const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic); + if (hasOutletRegex.test(componentStack)) { + trackOutletSuspenseAboveBody(componentStack, dynamicValidation); + return; + } else if (hasMetadataRegex.test(componentStack)) { + dynamicValidation.hasDynamicMetadata = true; + return; + } else if (hasViewportRegex.test(componentStack)) { + dynamicValidation.hasDynamicViewport = true; + return; + } else if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule. + // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense + // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering. + dynamicValidation.hasAllowedDynamic = true; + dynamicValidation.hasSuspenseAboveBody = true; + return; + } else if (hasSuspenseRegex.test(componentStack)) { + // this error had a Suspense boundary above it so we don't need to report it as a source + // of disallowed + dynamicValidation.hasAllowedDynamic = true; + return; + } else if (syncDynamicError) { + dynamicValidation.dynamicErrors.push(syncDynamicError); + return; + } + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isClientHookDynamicError"])(dynamicReason)) { + dynamicValidation.dynamicErrors.push(addErrorContext(dynamicReason, componentStack, null)); + return; + } + const error = addErrorContext(createBodyError(dynamicHoleKind, workStore.route), componentStack, null); + dynamicValidation.dynamicErrors.push(error); + return; +} +var DynamicHoleKind = /*#__PURE__*/ function(DynamicHoleKind) { + /** We know that this hole is caused by runtime data. */ DynamicHoleKind[DynamicHoleKind["Runtime"] = 1] = "Runtime"; + /** We know that this hole is caused by link data. */ DynamicHoleKind[DynamicHoleKind["Link"] = 2] = "Link"; + /** We know that this hole is caused by navigation(). */ DynamicHoleKind[DynamicHoleKind["Navigation"] = 3] = "Navigation"; + /** We know that this hole is caused by prefetch(). */ DynamicHoleKind[DynamicHoleKind["Prefetch"] = 4] = "Prefetch"; + /** We know that this hole is caused by dynamic data. */ DynamicHoleKind[DynamicHoleKind["Dynamic"] = 5] = "Dynamic"; + /** We know that this hole is caused by runtime or dynamic data, but don't know which. */ DynamicHoleKind[DynamicHoleKind["RuntimeOrDynamic"] = 6] = "RuntimeOrDynamic"; + return DynamicHoleKind; +}({}); +function createInstantValidationState(slotStacks) { + return { + hasDynamicMetadata: false, + hasAllowedClientDynamicAboveBoundary: false, + dynamicMetadata: null, + hasDynamicViewport: false, + hasAllowedDynamic: false, + dynamicErrors: [], + validationPreventingErrors: [], + thrownErrorsOutsideBoundary: [], + slotStacks + }; +} +function trackDynamicHoleInNavigation(dynamicReason, workStore, componentStack, dynamicValidation, clientDynamic, kind, boundaryState) { + const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic); + if (hasOutletRegex.test(componentStack)) { + // We don't need to track that this is dynamic. It is only so when something else is also dynamic. + return; + } + // Resolve the config stack for this specific error. If the error + // is inside a slot marker, use that slot's config. Otherwise fall + // back to the default. + const effectiveCreateInstantStack = resolveInstantStack(componentStack, dynamicValidation); + if (hasMetadataRegex.test(componentStack)) { + const error = addErrorContext(createMetadataError(kind, workStore.route), componentStack, effectiveCreateInstantStack); + dynamicValidation.dynamicMetadata = error; + return; + } + if (hasViewportRegex.test(componentStack)) { + const error = addErrorContext(createViewportError(kind, workStore.route), componentStack, effectiveCreateInstantStack); + dynamicValidation.dynamicErrors.push(error); + return; + } + const boundaryLocation = hasInstantValidationBoundaryRegex.exec(componentStack); + if (!boundaryLocation) { + // We don't see the validation boundary in the component stack, + // so this hole must be coming from a shared parent. + // Shared parents are fully resolved and don't have RSC holes, + // but they can still suspend in a client component during SSR. + // If we managed to render all the validation boundaries, that means + // that the client holes aren't blocking validation and we can disregard them. + // Note that we don't even care whether they have suspense or not. + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$tracking$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["allRequiredBoundariesRendered"])(boundaryState)) { + dynamicValidation.hasAllowedClientDynamicAboveBoundary = true; + dynamicValidation.hasAllowedDynamic = true // Holes outside the boundary contribute to allowing dynamic metadata + ; + return; + } else { + // TODO(instant-validation) TODO(NAR-787) + // If shared parents blocked us from validating, we should only log + // the errors from the innermost (segments), i.e. omit layouts whose + // slots managed to render (because clearly they didn't block validation) + const message = `Route "${workStore.route}": Could not validate \`instant\` because a Client Component in a parent segment prevented the page from rendering.`; + const error = addErrorContext(new Error(message), componentStack, effectiveCreateInstantStack); + dynamicValidation.validationPreventingErrors.push(error); + return; + } + } else { + // The hole originates inside the validation boundary. + // + // Check if we have a Suspense above the hole, but below the validation boundary. + // If we do, then this dynamic usage wouldn't block a navigation to this subtree. + // Conversely, if the nearest suspense is above the validation boundary, then this subtree would block. + // + // Note that in the component stack, children come before parents. + // + // Valid: + // ... + // at Suspense + // ... + // at __next_prefetch_validation_boundary__ + // + // Invalid: + // ... + // at __next_prefetch_validation_boundary__ + // ... + // at Suspense + // + const suspenseLocation = hasSuspenseRegex.exec(componentStack); + if (suspenseLocation) { + if (suspenseLocation.index < boundaryLocation.index) { + dynamicValidation.hasAllowedDynamic = true; + return; + } else { + // invalid - fallthrough + } + } + } + if (syncDynamicError) { + if (effectiveCreateInstantStack !== null && syncDynamicError.cause === undefined) { + syncDynamicError.cause = effectiveCreateInstantStack(); + } + dynamicValidation.dynamicErrors.push(syncDynamicError); + return; + } + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isClientHookDynamicError"])(dynamicReason)) { + dynamicValidation.dynamicErrors.push(addErrorContext(dynamicReason, componentStack, effectiveCreateInstantStack)); + return; + } + const error = addErrorContext(createBodyErrorInNavigation(kind, workStore.route), componentStack, effectiveCreateInstantStack); + dynamicValidation.dynamicErrors.push(error); + return; +} +function createBodyError(kind, route) { + switch(kind){ + case 1: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeBodyError"])(route); + case 5: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicBodyError"])(route); + case 6: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicOrRuntimeBodyError"])(route); + } +} +function createBodyErrorInNavigation(kind, route) { + switch(kind){ + case 1: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeBodyErrorInNavigation"])(route); + case 2: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createLinkBodyErrorInNavigation"])(route); + case 3: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createNavigationBodyErrorInNavigation"])(route); + case 4: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPrefetchBodyErrorInNavigation"])(route); + case 5: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicBodyErrorInNavigation"])(route); + } +} +function createMetadataError(kind, route) { + switch(kind){ + case 1: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeMetadataError"])(route); + case 2: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createLinkMetadataError"])(route); + case 3: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createNavigationMetadataError"])(route); + case 4: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPrefetchMetadataError"])(route); + case 5: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicMetadataError"])(route); + case 6: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicOrRuntimeMetadataError"])(route); + } +} +function createViewportError(kind, route) { + switch(kind){ + case 1: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeViewportError"])(route); + case 2: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createLinkViewportError"])(route); + case 3: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createNavigationViewportError"])(route); + case 4: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPrefetchViewportError"])(route); + case 5: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicViewportError"])(route); + case 6: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicOrRuntimeViewportError"])(route); + } +} +function createBodyErrorInStaticRoute(kind, route) { + switch(kind){ + case 1: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeBodyErrorInStaticRoute"])(route); + case 5: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicBodyErrorInStaticRoute"])(route); + case 6: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createNonPrerenderableBodyErrorInStaticRoute"])(route); + } +} +function createMetadataErrorInStaticRoute(kind, route) { + switch(kind){ + case 1: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeMetadataErrorInStaticRoute"])(route); + case 5: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicMetadataErrorInStaticRoute"])(route); + case 6: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createNonPrerenderableMetadataErrorInStaticRoute"])(route); + } +} +function createViewportErrorInStaticRoute(kind, route) { + switch(kind){ + case 1: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeViewportErrorInStaticRoute"])(route); + case 5: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicViewportErrorInStaticRoute"])(route); + case 6: + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createNonPrerenderableViewportErrorInStaticRoute"])(route); + } +} +function trackThrownErrorInNavigation(workStore, dynamicValidation, thrownValue, componentStack, reactBrowserBailout) { + const boundaryLocation = hasInstantValidationBoundaryRegex.exec(componentStack); + if (!boundaryLocation) { + // There's no validation boundary on the component stack. + // This error may have blocked a boundary from rendering. + // Wrap the error to provide component context. + // This helps for errors from node_modules which would otherwise + // have no useful stack information due to ignore-listing, + // e.g. next/dynamic with `ssr: false`. + if (reactBrowserBailout) { + // React preserves Next's branded bailout reason as the error cause. + // Replace the internal wrapper before storing the user-facing diagnostic. + const browserBailoutReason = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$lazy$2d$dynamic$2f$react$2d$browser$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getReactBrowserBailoutReason"])(thrownValue); + if (browserBailoutReason !== undefined) { + const browserBailoutError = thrownValue; + browserBailoutError.cause = browserBailoutReason; + } + } + const error = addErrorContext(new Error('An error occurred while attempting to validate instant UI. This error may be preventing the validation from completing.', { + cause: thrownValue + }), componentStack, null); + dynamicValidation.thrownErrorsOutsideBoundary.push(error); + } else { + // There's validation boundary on the component stack, + // so we know this error didn't block a validation boundary from rendering. + // However, this error might be hiding be hiding dynamic content that would + // cause validation to fail. + const suspenseLocation = hasSuspenseRegex.exec(componentStack); + if (suspenseLocation) { + if (suspenseLocation.index < boundaryLocation.index) { + // There's a Suspense below the validation boundary but above this error's location. + // This subtree can't fail instant validation because any potential + // dynamic holes would be guarded by the Suspense anyway, + // so we can allow this. + return; + } else { + // invalid - fallthrough + } + } + if (reactBrowserBailout) { + // React preserves Next's branded bailout reason as the error cause. + // Replace the internal wrapper before storing the user-facing diagnostic. + const browserBailoutReason = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$lazy$2d$dynamic$2f$react$2d$browser$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getReactBrowserBailoutReason"])(thrownValue); + if (browserBailoutReason !== undefined) { + const browserBailoutError = thrownValue; + browserBailoutError.cause = browserBailoutReason; + } + } + const message = `Route "${workStore.route}": Could not validate \`instant\` because an error prevented the target segment from rendering.`; + const error = addErrorContext(new Error(message, { + cause: thrownValue + }), componentStack, null // TODO(instant-validation-build): conflicting use of cause + ); + dynamicValidation.validationPreventingErrors.push(error); + } +} +function trackDynamicHoleInStaticShell(dynamicReason, workStore, componentStack, dynamicValidation, clientDynamic, kind) { + const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic); + if (hasOutletRegex.test(componentStack)) { + trackOutletSuspenseAboveBody(componentStack, dynamicValidation); + return; + } else if (hasMetadataRegex.test(componentStack)) { + const error = addErrorContext(createMetadataError(kind, workStore.route), componentStack, null); + dynamicValidation.dynamicMetadata = error; + return; + } else if (hasViewportRegex.test(componentStack)) { + const error = addErrorContext(createViewportError(kind, workStore.route), componentStack, null); + dynamicValidation.dynamicErrors.push(error); + return; + } else if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) { + // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule. + // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense + // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering. + dynamicValidation.hasAllowedDynamic = true; + dynamicValidation.hasSuspenseAboveBody = true; + return; + } else if (hasSuspenseRegex.test(componentStack)) { + // this error had a Suspense boundary above it so we don't need to report it as a source + // of disallowed + dynamicValidation.hasAllowedDynamic = true; + return; + } else if (syncDynamicError) { + dynamicValidation.dynamicErrors.push(syncDynamicError); + return; + } + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isClientHookDynamicError"])(dynamicReason)) { + dynamicValidation.dynamicErrors.push(addErrorContext(dynamicReason, componentStack, null)); + return; + } + const error = addErrorContext(kind === 1 ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createRuntimeBodyError"])(workStore.route) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDynamicBodyError"])(workStore.route), componentStack, null); + dynamicValidation.dynamicErrors.push(error); + return; +} +/** + * In dev mode, we prefer using the owner stack, otherwise the provided + * component stack is used. + */ function addErrorContext(error, componentStack, createInstantStack) { + const ownerStack = ("TURBOPACK compile-time value", "development") !== 'production' && __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].captureOwnerStack ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].captureOwnerStack() : null; + if (createInstantStack !== null) { + error.cause = createInstantStack(); + } + // TODO go back to owner stack here if available. This is temporarily using componentStack to get the right + // + error.stack = error.name + ': ' + error.message + (ownerStack || componentStack); + return error; +} +var PreludeState = /*#__PURE__*/ function(PreludeState) { + PreludeState[PreludeState["Full"] = 0] = "Full"; + PreludeState[PreludeState["Empty"] = 1] = "Empty"; + PreludeState[PreludeState["Errored"] = 2] = "Errored"; + return PreludeState; +}({}); +function logDisallowedDynamicError(workStore, error) { + console.error(error); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$blocking$2d$route$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["logBuildDebugHint"])(workStore.route); +} +function throwIfSyncIOUsed(workStore, serverDynamic) { + if (serverDynamic.syncDynamicErrorWithStack) { + logDisallowedDynamicError(workStore, serverDynamic.syncDynamicErrorWithStack); + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"](); + } +} +function throwIfDisallowedDynamic(workStore, prelude, dynamicValidation, serverDynamic, allowEmptyStaticShell) { + const dynamicHoleKind = 6; + throwIfSyncIOUsed(workStore, serverDynamic); + // The dynamic metadata error is a mistake-detection signal. It fires when the + // rest of the shell is otherwise fully static apart from metadata, suggesting + // the dynamic data access in `generateMetadata` was probably unintentional. + // That condition is independent of whether the user or build phase accepted + // an empty shell, so we surface it before any opt-in bypass. + if (prelude === 0 && dynamicValidation.hasAllowedDynamic === false && dynamicValidation.hasDynamicMetadata) { + console.error(createMetadataError(dynamicHoleKind, workStore.route).message); + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"](); + } + // Either flag expresses "this shell is allowed to be empty/blocking": + // - `allowEmptyStaticShell` covers `instant = false` (user opt-in) + // and the build-phase fallback-shell case. + // - `hasSuspenseAboveBody` is the structural opt-in inside the user's root + // layout. + // Treat them as synonyms for the purpose of bypassing shell-failure errors. + if (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody) { + return; + } + if (prelude !== 0) { + // We didn't have any sync bailouts but there may be user code which + // blocked the root. We would have captured these during the prerender + // and can log them here and then terminate the build/validating render + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + for(let i = 0; i < dynamicErrors.length; i++){ + logDisallowedDynamicError(workStore, dynamicErrors[i]); + } + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"](); + } + // If we got this far then the only other thing that could be blocking + // the root is dynamic Viewport. If this is dynamic then + // you need to opt into that by adding a Suspense boundary above the body + // to indicate your are ok with fully dynamic rendering. + if (dynamicValidation.hasDynamicViewport) { + console.error(createViewportError(dynamicHoleKind, workStore.route).message); + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"](); + } + if (prelude === 1) { + // If we ever get this far then we messed up the tracking of invalid dynamic. + // We still adhere to the constraint that you must produce a shell but invite the + // user to report this as a bug in Next.js. + console.error(`Route "${workStore.route}" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`); + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"](); + } + } +} +function throwIfDisallowedDynamicInStaticRoute(workStore, prelude, dynamicValidation, serverDynamic, isFallbackShell, allowEmptyStaticShell, isServerPartial) { + const reasons = getDisallowedReasonsInStaticRoute(workStore, prelude, dynamicValidation, serverDynamic, isFallbackShell, allowEmptyStaticShell, isServerPartial); + if (reasons.length > 0) { + for (const reason of reasons){ + logDisallowedDynamicError(workStore, reason); + } + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"](); + } +} +function getDisallowedReasonsInStaticRoute(workStore, prelude, dynamicValidation, serverDynamic, isFallbackShell, allowEmptyStaticShell, isServerPartial) { + if (serverDynamic && serverDynamic.syncDynamicErrorWithStack) { + return [ + serverDynamic.syncDynamicErrorWithStack + ]; + } + // We do a fallback shell prerender, but it's not meant to be validated -- + // we just need it to create the relevant prerender outputs. + if (isFallbackShell) { + return []; + } + // Suspense-above-body and `instant = false` bypass reporting + // that the shell is blocked. However, if we have non-prerenderable server + // data, we still have to error, regardless of those two. + if (!isServerPartial && (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody)) { + return []; + } + const { dynamicErrors } = dynamicValidation; + if (dynamicErrors.length > 0) { + return dynamicErrors; + } + // Dynamic data may have been passed into a client component without calling `use()`, + // in which case we wouldn't see it during the prerender, but still need to error. + // Fall back to a generic error message. + if (isServerPartial) { + return [ + new Error(`Route "${workStore.route}": Next.js encountered data that is not available during a static prerender, but is unable to provide a location.`) + ]; + } + if (prelude === 1 || prelude === 2) { + // We've somehow ended up with an empty prelude but no dynamic errors. + // We must've messed up the tracking somehow. + return [ + new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`Route "${workStore.route}" did not produce a static shell and Next.js was unable to determine a reason.`) + ]; + } + return []; +} +function getStaticShellDisallowedDynamicReasons(workStore, prelude, dynamicValidation, allowEmptyStaticShell) { + // The dynamic metadata error is a mistake-detection signal. It fires when the + // rest of the shell is otherwise fully static apart from metadata, suggesting + // the dynamic data access in `generateMetadata` was probably unintentional. + // That condition is independent of whether the user or build phase accepted + // an empty shell, so we surface it before any opt-in bypass. + if (prelude === 0 && dynamicValidation.hasAllowedDynamic === false && dynamicValidation.dynamicErrors.length === 0 && dynamicValidation.dynamicMetadata) { + return [ + dynamicValidation.dynamicMetadata + ]; + } + // Either flag expresses "this shell is allowed to be empty/blocking": + // - `allowEmptyStaticShell` covers `instant = false` (user opt-in) + // and the build-phase fallback-shell case. + // - `hasSuspenseAboveBody` is the structural opt-in inside the user's root + // layout. + // Treat them as synonyms for the purpose of bypassing shell-failure errors. + if (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody) { + return []; + } + if (prelude !== 0) { + // We didn't have any sync bailouts but there may be user code which + // blocked the root. We would have captured these during the prerender + // and can log them here and then terminate the build/validating render + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + return dynamicErrors; + } + if (prelude === 1) { + // If we ever get this far then we messed up the tracking of invalid dynamic. + // We still adhere to the constraint that you must produce a shell but invite the + // user to report this as a bug in Next.js. + return [ + new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`Route "${workStore.route}" did not produce a static shell and Next.js was unable to determine a reason.`) + ]; + } + } + // We had a non-empty prelude and there are no dynamic holes + return []; +} +function getNavigationDisallowedDynamicReasons(workStore, prelude, dynamicValidation, validationSampleTracking, boundaryState, devRenderDidError) { + // If we have errors related to missing samples, those should take precedence over everything else. + if (validationSampleTracking) { + const { missingSampleErrors } = validationSampleTracking; + if (missingSampleErrors.length > 0) { + return missingSampleErrors; + } + } + const { validationPreventingErrors } = dynamicValidation; + if (validationPreventingErrors.length > 0) { + if (("TURBOPACK compile-time value", "1") && devRenderDidError) { + // The dev render already surfaced server errors to the user. + // The same errors likely caused validation to be inconclusive, + // so reporting them again as validation failures would be noisy. + return []; + } + return validationPreventingErrors; + } + // NOTE: We don't care about Suspense above body here, + // we're only concerned with the validation boundary + if (prelude !== 0) { + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + return dynamicErrors; + } + if (prelude === 1 && !dynamicValidation.hasAllowedClientDynamicAboveBoundary && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$tracking$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["allRequiredBoundariesRendered"])(boundaryState)) { + // If we ever get this far then we messed up the tracking of invalid + // dynamic. (When boundaries are missing the deferred fallback below + // will surface a more useful error.) + return new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`Route "${workStore.route}" failed to render during instant validation and Next.js was unable to determine a reason.`); + } + } else { + const dynamicErrors = dynamicValidation.dynamicErrors; + if (dynamicErrors.length > 0) { + return dynamicErrors; + } + if (dynamicValidation.hasAllowedDynamic === false && dynamicValidation.dynamicMetadata) { + return [ + dynamicValidation.dynamicMetadata + ]; + } + } + // Missing boundaries on their own aren't a strong signal — a parent + // layout may legitimately omit a slot. Defer this so the caller can + // try shallower validation depths first; if every depth comes up + // empty we still want to surface this so the user is made aware that + // validation didn't complete. When we add a markers API, the + // marker-based variant of this check can become strict again. + if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$instant$2d$validation$2f$boundary$2d$tracking$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["allRequiredBoundariesRendered"])(boundaryState)) { + const { thrownErrorsOutsideBoundary } = dynamicValidation; + const rootInstantStack = dynamicValidation.slotStacks[0]; + if (thrownErrorsOutsideBoundary.length === 0) { + const missingFiles = []; + for (const [id, filePaths] of boundaryState.requiredIds){ + if (!boundaryState.renderedIds.has(id)) { + for (const filePath of filePaths){ + let normalized = filePath.replace(/^\[project\][\\/]?/, '').replace(process.cwd() + '/', '').replace(process.cwd() + '\\', ''); + missingFiles.push(normalized); + } + } + } + missingFiles.sort(); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$instant$2d$messages$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createUnrenderedSegmentError"])(workStore.route, missingFiles); + } else if (("TURBOPACK compile-time value", "1") && devRenderDidError) { + // Errors outside the boundary likely blocked it from rendering, + // but they're already being reported to the user via the dev + // render. Suppress the validation failure to avoid noise. + return []; + } else if (thrownErrorsOutsideBoundary.length === 1) { + const message = `Route "${workStore.route}": Could not validate \`instant\` because the target segment was prevented from rendering, likely due to the following error.`; + const error = rootInstantStack !== null ? rootInstantStack() : new Error(); + error.name = 'Error'; + error.message = message; + return new AggregateError([ + error, + thrownErrorsOutsideBoundary[0] + ]); + } else { + const message = `Route "${workStore.route}": Could not validate \`instant\` because the target segment was prevented from rendering, likely due to one of the following errors.`; + const error = rootInstantStack !== null ? rootInstantStack() : new Error(); + error.name = 'Error'; + error.message = message; + return new AggregateError([ + error, + ...thrownErrorsOutsideBoundary + ]); + } + } + // We had a non-empty prelude and there are no dynamic holes + return []; +} +}), +"[project]/node_modules/next/dist/esm/server/app-render/instant-validation/boundary-constants.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "INSTANT_SLOT_MARKER_PREFIX", + ()=>INSTANT_SLOT_MARKER_PREFIX, + "INSTANT_SLOT_MARKER_SUFFIX", + ()=>INSTANT_SLOT_MARKER_SUFFIX, + "INSTANT_VALIDATION_BOUNDARY_NAME", + ()=>INSTANT_VALIDATION_BOUNDARY_NAME +]); +const INSTANT_VALIDATION_BOUNDARY_NAME = '__next_instant_validation_boundary__'; +const INSTANT_SLOT_MARKER_PREFIX = '__next_instant_slot_'; +const INSTANT_SLOT_MARKER_SUFFIX = '__'; +}), +"[project]/node_modules/next/dist/esm/server/app-render/instant-validation/boundary-tracking.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "allRequiredBoundariesRendered", + ()=>allRequiredBoundariesRendered, + "createValidationBoundaryTracking", + ()=>createValidationBoundaryTracking +]); +function createValidationBoundaryTracking(/** Pass if the render is expected to render the same IDs as a previous one. */ matchPrevious) { + return { + requiredIds: matchPrevious ? new Map(matchPrevious.requiredIds) : new Map(), + renderedIds: new Set() + }; +} +function allRequiredBoundariesRendered(state) { + for (const id of state.requiredIds.keys()){ + if (!state.renderedIds.has(id)) { + return false; + } + } + return true; +} +}), +"[project]/node_modules/next/dist/esm/server/app-render/manifests-singleton.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getActionNotFoundError", + ()=>getActionNotFoundError, + "getClientReferenceManifest", + ()=>getClientReferenceManifest, + "getInvalidServerReferenceIdError", + ()=>getInvalidServerReferenceIdError, + "getRscModuleMappingForUseCache", + ()=>getRscModuleMappingForUseCache, + "getServerActionsManifest", + ()=>getServerActionsManifest, + "getServerModuleMap", + ()=>getServerModuleMap, + "normalizeWorkerPageName", + ()=>normalizeWorkerPageName, + "selectWorkerForForwarding", + ()=>selectWorkerForForwarding, + "setManifestsSingleton", + ()=>setManifestsSingleton +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$server$2d$reference$2d$info$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/server-reference-info.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2f$reflect$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/utils/reflect-utils.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)"); +; +; +; +; +; +; +; +; +function getActionNotFoundError(actionId) { + return new Error(`Failed to find Server Action${actionId ? ` "${actionId}"` : ''}. This request might be from an older or newer deployment.\nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action`); +} +function getInvalidServerReferenceIdError(id) { + // `id` is arbitrary client-provided input. Unlike the not-found case, it has + // not passed the length gate and can reach this error via a malformed server + // reference in an action payload, so it may be of any length and contain + // control characters. `JSON.stringify` escapes newlines and quotes so it + // can't forge log lines, and truncating overly long ids prevents log + // flooding. Ids at or below the cap are logged in full so that we only add an + // ellipsis to ids that are meaningfully longer than the truncated length. + const encoded = JSON.stringify(id.length > MAX_LOGGED_SERVER_REFERENCE_ID_LENGTH ? id.slice(0, TRUNCATED_SERVER_REFERENCE_ID_LENGTH) + '…' : id); + return new Error(`The Server Reference ID did not match the expected format. Received ${encoded}.\nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action`); +} +// Ids at or below the cap are logged in full. Longer ids are truncated to the +// shorter length and marked with an ellipsis, so the cap leaves headroom over +// the truncated length rather than ellipsizing ids that are barely too long. +const MAX_LOGGED_SERVER_REFERENCE_ID_LENGTH = 100; +const TRUNCATED_SERVER_REFERENCE_ID_LENGTH = 90; +// This is a global singleton that is, among other things, also used to +// encode/decode bound args of server function closures. This can't be using a +// AsyncLocalStorage as it might happen at the module level. +const MANIFESTS_SINGLETON = Symbol.for('next.server.manifests'); +const globalThisWithManifests = globalThis; +function isUseCacheStore(workUnitStore) { + if (!workUnitStore) { + return false; + } + switch(workUnitStore.type){ + case 'cache': + case 'private-cache': + return true; + case 'request': + case 'unstable-cache': + case 'prerender': + case 'prerender-client': + case 'prerender-legacy': + case 'prerender-runtime': + case 'validation-client': + case 'build-time-generator': + return false; + default: + return workUnitStore; + } +} +function createProxiedClientReferenceManifest(clientReferenceManifestsPerRoute) { + const createMappingProxy = (prop)=>{ + return new Proxy({}, { + get (_, id) { + const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + if (workStore) { + var _clientReferenceManifestsPerRoute_get; + const currentManifest = (_clientReferenceManifestsPerRoute_get = clientReferenceManifestsPerRoute.get(workStore.route)) == null ? void 0 : _clientReferenceManifestsPerRoute_get.clientReferenceManifest; + if (currentManifest == null ? void 0 : currentManifest[prop][id]) { + if (workStore.durableUseCacheEntries && prop === 'clientModules') { + const workUnitStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workUnitAsyncStorage"].getStore(); + if (isUseCacheStore(workUnitStore)) { + // This creates a mapping so that a given client references with name + // `app/foo/client.tsx` is serialized as + // ``` + // { id: `app/foo/client.tsx`, name: `*`, chunks: ["stub"], async: false } + // ``` + // instead of the actual + // ``` + // { id: 19132, name: `*`, chunks: ["/_next/static/chunks/..."], async: true } + // ``` + // + // This means that not the unstable client module id is used for the cache entry, + // but the stable client reference name. The stable client reference name is + // resolved against the current manifest via rscModuleMappingForUseCache when the + // entry is read. + const clientReferenceManifestEntry = currentManifest.clientModules[id]; + return { + // Return `id` instead of `clientReferenceManifestEntry.id` here. + id, + name: clientReferenceManifestEntry.name, + // Set a sentinel value just in case this does ends up being read at some point + // in the future, then at least we'll get "Failed to load chunk stub (404)" + // instead of "Failed to load module 1234". + chunks: [ + 'stub' + ], + async: false + }; + } + } + return currentManifest[prop][id]; + } + // In development, we also check all other manifests to see if the + // module exists there. This is to support a scenario where React's + // I/O tracking (dev-only) creates a connection from one page to + // another through an emitted async I/O node that references client + // components from the other page, e.g. in owner props. + // TODO: Maybe we need to add a `debugBundlerConfig` option to React + // to avoid this workaround. The current workaround has the + // disadvantage that one might accidentally or intentionally share + // client references across pages (e.g. by storing them in a global + // variable), which would then only be caught in production. + if ("TURBOPACK compile-time truthy", 1) { + for (const [route, { page, clientReferenceManifest }] of clientReferenceManifestsPerRoute){ + if (route === workStore.route) { + continue; + } + const entry = clientReferenceManifest[prop][id]; + if (entry !== undefined) { + if ("TURBOPACK compile-time truthy", 1) { + // The dev validation worker rebuilds this registry in its + // own thread, seeded with only the route it validates, so + // it has to be told which other manifests it needs. + workStore.additionalClientReferenceManifestPages ??= new Set(); + workStore.additionalClientReferenceManifestPages.add(page); + } + return entry; + } + } + } + } else { + // If there's no work store defined, we can assume that a client + // reference manifest is needed during module evaluation, e.g. to + // create a server function using a higher-order function. This + // might also use client components which need to be serialized by + // Flight, and therefore client references need to be resolvable. In + // that case we search all page manifests to find the module. + for (const { clientReferenceManifest } of clientReferenceManifestsPerRoute.values()){ + const entry = clientReferenceManifest[prop][id]; + if (entry !== undefined) { + return entry; + } + } + } + return undefined; + } + }); + }; + const mappingProxies = new Map(); + const proxiedClientReferenceManifest = new Proxy({}, { + get (_, prop) { + const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + switch(prop){ + case 'moduleLoading': + case 'entryCSSFiles': + case 'entryJSFiles': + { + if (!workStore) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`Cannot access "${prop}" without a work store.`); + } + const registeredManifest = clientReferenceManifestsPerRoute.get(workStore.route); + if (!registeredManifest) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`The client reference manifest for route "${workStore.route}" does not exist.`); + } + return registeredManifest.clientReferenceManifest[prop]; + } + case 'clientModules': + case 'rscModuleMapping': + case 'edgeRscModuleMapping': + case 'ssrModuleMapping': + case 'edgeSSRModuleMapping': + { + let proxy = mappingProxies.get(prop); + if (!proxy) { + proxy = createMappingProxy(prop); + mappingProxies.set(prop, proxy); + } + return proxy; + } + default: + { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`This is a proxied client reference manifest. The property "${String(prop)}" is not handled.`); + } + } + } + }); + // Performs the inverse of the clientModules isUseCacheStore(workUnitStore) special case above: + // + // For cache functions, don't do the usual rscModuleMapping lookup by module ID, but instead look + // up by the stable client reference name. This is because cache entries must not depend on + // build-local module IDs or chunks. So we need a second layer of indirection here to do client + // reference name -> client module id -> rsc module mapping lookup. + // + // This one is created separately (not inside proxiedClientReferenceManifest.rscModuleMapping) as + // we don't necessarily are inside a workUnitStore when we need to access this mapping (as opposed + // to the clientModules mapping, which always has the ALS set). + const rscModuleMappingForUseCache = new Proxy({}, { + get (_, key) { + const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + if (workStore && workStore.durableUseCacheEntries) { + var _clientReferenceManifestsPerRoute_get; + const currentManifest = (_clientReferenceManifestsPerRoute_get = clientReferenceManifestsPerRoute.get(workStore.route)) == null ? void 0 : _clientReferenceManifestsPerRoute_get.clientReferenceManifest; + const clientReferenceName = key; + const clientReferenceManifestEntry = currentManifest == null ? void 0 : currentManifest.clientModules[clientReferenceName]; + if (clientReferenceManifestEntry === undefined) { + return undefined; + } + const clientModuleId = clientReferenceManifestEntry.id; + return currentManifest == null ? void 0 : currentManifest.rscModuleMapping[clientModuleId]; + } else { + return proxiedClientReferenceManifest.rscModuleMapping[key]; + } + } + }); + return { + proxiedClientReferenceManifest, + rscModuleMappingForUseCache + }; +} +/** + * This function creates a Flight-acceptable server module map proxy from our + * Server Reference Manifest similar to our client module map. This is because + * our manifest contains a lot of internal Next.js data that are relevant to the + * runtime, workers, etc. that React doesn't need to know. + */ function createServerModuleMap() { + return new Proxy(Object.create(null), { + get: (target, id, receiver)=>{ + var _getServerActionsManifest__id, _getServerActionsManifest_; + // React's debug serialization can probe the module map like a plain object. + // These probes are not server reference lookups. + if (typeof id !== 'string') { + return Reflect.get(target, id, receiver); + } + if (__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2f$reflect$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["wellKnownProperties"].has(id)) { + return Reflect.get(target, id, receiver); + } + if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$server$2d$reference$2d$info$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["mightBeServerReferenceId"])(id)) { + throw getInvalidServerReferenceIdError(id); + } + const workers = (_getServerActionsManifest_ = getServerActionsManifest()[("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'node']) == null ? void 0 : (_getServerActionsManifest__id = _getServerActionsManifest_[id]) == null ? void 0 : _getServerActionsManifest__id.workers; + if (!workers) { + throw getActionNotFoundError(id); + } + const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + let workerEntry; + if (workStore) { + workerEntry = workers[normalizeWorkerPageName(workStore.page)]; + } else { + // If there's no work store defined, we can assume that a server + // module map is needed during module evaluation, e.g. to create a + // server action using a higher-order function. Therefore it should be + // safe to return any entry from the manifest that matches the action + // ID. They all refer to the same module ID, which must also exist in + // the current page bundle. TODO: This is currently not guaranteed in + // Turbopack, and needs to be fixed. + workerEntry = Object.values(workers).at(0); + } + if (!workerEntry) { + throw getActionNotFoundError(id); + } + const { moduleId, async, durability } = workerEntry; + return { + id: moduleId, + name: id, + chunks: [], + async, + durability + }; + } + }); +} +function normalizeWorkerPageName(pageName) { + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pathHasPrefix"])(pageName, 'app')) { + return pageName; + } + return 'app' + pageName; +} +/** + * Converts a bundlePath (relative path to the entrypoint) to a routable page + * name. + */ function denormalizeWorkerPageName(bundlePath) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeAppPath"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["removePathPrefix"])(bundlePath, 'app')); +} +function selectWorkerForForwarding(actionId, pageName) { + var _serverActionsManifest__actionId; + const serverActionsManifest = getServerActionsManifest(); + const workers = (_serverActionsManifest__actionId = serverActionsManifest[("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'node'][actionId]) == null ? void 0 : _serverActionsManifest__actionId.workers; + // There are no workers to handle this action, nothing to forward to. + if (!workers) { + return; + } + // If there is an entry for the current page, we don't need to forward. + if (workers[normalizeWorkerPageName(pageName)]) { + return; + } + // Otherwise, grab the first worker that has a handler for this action id. + return denormalizeWorkerPageName(Object.keys(workers)[0]); +} +function setManifestsSingleton({ page, clientReferenceManifest, serverActionsManifest: rawServerActionsManifest }) { + const existingSingleton = globalThisWithManifests[MANIFESTS_SINGLETON]; + const route = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeAppPath"])(page); + const serverActionsManifest = { + encryptionKey: rawServerActionsManifest.encryptionKey, + // Use null-prototypes for the action objects to prevent prototype pollution + // from affecting action ID lookups. + node: Object.assign(Object.create(null), rawServerActionsManifest.node), + edge: Object.assign(Object.create(null), rawServerActionsManifest.edge) + }; + if (existingSingleton) { + existingSingleton.clientReferenceManifestsPerRoute.set(route, { + page, + clientReferenceManifest + }); + existingSingleton.serverActionsManifest = serverActionsManifest; + } else { + const clientReferenceManifestsPerRoute = new Map([ + [ + route, + { + page, + clientReferenceManifest + } + ] + ]); + const { proxiedClientReferenceManifest, rscModuleMappingForUseCache } = createProxiedClientReferenceManifest(clientReferenceManifestsPerRoute); + globalThisWithManifests[MANIFESTS_SINGLETON] = { + clientReferenceManifestsPerRoute, + proxiedClientReferenceManifest, + rscModuleMappingForUseCache, + serverActionsManifest, + serverModuleMap: createServerModuleMap() + }; + } +} +function getManifestsSingleton() { + const manifestSingleton = globalThisWithManifests[MANIFESTS_SINGLETON]; + if (!manifestSingleton) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('The manifests singleton was not initialized.'); + } + return manifestSingleton; +} +function getClientReferenceManifest() { + return getManifestsSingleton().proxiedClientReferenceManifest; +} +function getRscModuleMappingForUseCache() { + return getManifestsSingleton().rscModuleMappingForUseCache; +} +function getServerActionsManifest() { + return getManifestsSingleton().serverActionsManifest; +} +function getServerModuleMap() { + return getManifestsSingleton().serverModuleMap; +} +}), +"[project]/node_modules/next/dist/esm/server/app-render/segment-config/ensure-static.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "EnsureStaticLevel", + ()=>EnsureStaticLevel, + "resolveEnsureStaticConfig", + ()=>resolveEnsureStaticConfig, + "resolveEnsureStaticLevel", + ()=>resolveEnsureStaticLevel +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$loader$2d$tree$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-loader-tree.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$app$2d$dir$2d$module$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/app-dir-module.js [app-route] (ecmascript)"); +; +; +var EnsureStaticLevel = /*#__PURE__*/ function(EnsureStaticLevel) { + /** The route follows standard Partial Prefetching semantics. */ EnsureStaticLevel[EnsureStaticLevel["None"] = 0] = "None"; + /** The route requires that app shells must be statically prerendered. */ EnsureStaticLevel[EnsureStaticLevel["Shell"] = 1] = "Shell"; + /** The route requires that app shells and prefetches must be statically prerendered. */ EnsureStaticLevel[EnsureStaticLevel["Prefetch"] = 2] = "Prefetch"; + /** The route requires that app shells, prefetches, and the whole page must be statically prerendered. */ EnsureStaticLevel[EnsureStaticLevel["Navigation"] = 3] = "Navigation"; + return EnsureStaticLevel; +}({}); +function getEnsureStaticLevel(ensureStatic) { + switch(ensureStatic){ + case 'auto': + case false: + { + return 0; + } + case 'shell': + { + return 1; + } + case 'prefetch': + { + return 2; + } + case 'navigation': + { + return 3; + } + } +} +async function resolveEnsureStaticLevel(tree, partialPrefetching) { + return getEnsureStaticLevel(await resolveEnsureStaticConfig(tree, partialPrefetching)); +} +async function resolveEnsureStaticConfig(tree, partialPrefetching) { + let { config, filePath } = await resolveEnsureStaticConfigImpl(tree); + if (!partialPrefetching) { + // If Partial Prefetching is not enabled for this route, we only support + // a subset of `ensureStatic` values. + // (We error in `getAppPageStaticInfo` if `ensureStatic` is used without enabling + // Cache Components, so we don't have to assert that here) + switch(config){ + case 'auto': + { + // Default to the equivalent of Cache Components prefetching behavior. + config = 'prefetch'; + break; + } + case false: + case 'shell': + { + // Not meaningful in Cache Components without Partial Prefetching + const originalConfig = config; + config = 'prefetch'; + console.warn(`${formatEnsureStaticExport(originalConfig)} has no effect unless the route is using Partial Prefetching.` + `\n (from: ${filePath})`); + break; + } + case 'prefetch': + break; + case 'navigation': + break; + default: + config; + } + } + if (config === false) { + // `false` and "auto" are equivalent once resolved. + return 'auto'; + } else { + return config; + } +} +async function resolveEnsureStaticConfigImpl(tree) { + const { mod: layoutOrPageMod, filePath } = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$app$2d$dir$2d$module$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getLayoutOrPageModule"])(tree); + const config = getEnsureStaticConfigForModule(layoutOrPageMod); + const parentResult = { + config, + filePath: filePath ?? null + }; + // Walk the slots if any and validate that they don't have incompatible configs + // with each other. If compatible, pick the most constrained value from the slots. + let slotsResult = null; + let slotResultKey = null; + const { parallelRoutes } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$loader$2d$tree$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["parseLoaderTree"])(tree); + for(const parallelRouteKey in parallelRoutes){ + const parallelRoute = parallelRoutes[parallelRouteKey]; + const childResult = await resolveEnsureStaticConfigImpl(parallelRoute); + if (!slotsResult) { + slotsResult = childResult; + slotResultKey = parallelRouteKey; + } else { + // Check if the child is compatible with the current result for the slots. + switch(compareEnsureStatic(childResult.config, slotsResult.config)){ + case 2: + { + // 'auto' is compatible with anything, but if the current result is 'auto' and the new one isn't, + // we want to use the more specific result. + if (slotsResult.config === 'auto' && childResult.config !== 'auto') { + slotsResult = childResult; + slotResultKey = parallelRouteKey; + } + break; + } + case 4: + case 1: + case 3: + { + throw new Error(`Parallel slots cannot have incompatible \`ensureStatic\`.` + `\n ${formatParallelSlot(slotResultKey)}: ` + `\n ${formatEnsureStaticExport(slotsResult.config)}` + `\n (from: ${slotsResult.filePath})` + `\n` + `\n ${formatParallelSlot(parallelRouteKey)}: ` + `\n ${formatEnsureStaticExport(childResult.config)}` + `\n (from: ${childResult.filePath})` + `\n` + `\n Possible fixes:` + `\n - Remove one of the \`ensureStatic\` exports` + `\n - Change one of the \`ensureStatic\` exports to match the other`); + } + } + } + } + // Child segments can override the config from the parent with a more constrained value, + // but they cannot have a less constrained value. + if (!slotsResult) { + return parentResult; + } else { + const comparison = compareEnsureStatic(slotsResult.config, parentResult.config); + switch(comparison){ + case 2: + { + // 'auto' is compatible with anything, but if the parent result is 'auto' and the slots one isn't, + // we want to use the more constrained result. + if (parentResult.config === 'auto' && slotsResult.config !== 'auto') { + return slotsResult; + } else { + return parentResult; + } + } + case 3: + { + return slotsResult; + } + case 1: + case 4: + { + throw new Error((comparison === 1 ? `A child segment cannot override a parent segment with a less-constrained \`ensureStatic\`.` : `A child segment cannot override a parent segment with an incompatible \`ensureStatic\`.`) + `\n Parent has: ` + `\n ${formatEnsureStaticExport(parentResult.config)}` + `\n (from: ${parentResult.filePath})` + `\n Child has: ` + `\n ${formatEnsureStaticExport(slotsResult.config)}` + `\n (from: ${slotsResult.filePath})` + `\n` + `\n Possible fixes:` + `\n - Remove one of the \`ensureStatic\` exports` + `\n - Change one of the \`ensureStatic\` exports to match the other`); + } + } + } +} +function formatParallelSlot(slot) { + return slot === 'children' ? slot : `@${slot}`; +} +function formatEnsureStaticExport(config) { + return `export const ensureStatic = ${JSON.stringify(config)}`; +} +var Comparison = /*#__PURE__*/ function(Comparison) { + Comparison[Comparison["LessConstrained"] = 1] = "LessConstrained"; + Comparison[Comparison["Compatible"] = 2] = "Compatible"; + Comparison[Comparison["MoreConstrained"] = 3] = "MoreConstrained"; + Comparison[Comparison["Incompatible"] = 4] = "Incompatible"; + return Comparison; +}(Comparison || {}); +const ENSURE_STATIC_ORDER = [ + 'shell', + 'prefetch', + 'navigation' +]; +function compareEnsureStatic(left, right) { + // 'auto' is compatible with everything. + if (left === 'auto' || right === 'auto') { + return 2; + } + // `false` is compatible with false. + if (left === false && right === false) { + return 2; + } + // If only one of the values is `false` (we know it's not both), it's incompatible. + if (left === false || right === false) { + return 4; + } + const leftSort = ENSURE_STATIC_ORDER.indexOf(left); + const rightSort = ENSURE_STATIC_ORDER.indexOf(right); + return leftSort < rightSort ? 1 : leftSort === rightSort ? 2 : 3; +} +function getEnsureStaticConfigForModule(mod) { + return (mod ? mod.ensureStatic : undefined) ?? 'auto'; +} +}), +"[project]/node_modules/next/dist/esm/server/app-render/staged-rendering.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "RENDER_STAGE_ADVANCE_ORDER", + ()=>RENDER_STAGE_ADVANCE_ORDER, + "RenderStage", + ()=>RenderStage, + "StagedRenderingController", + ()=>StagedRenderingController, + "SyncIOMode", + ()=>SyncIOMode, + "getNextStage", + ()=>getNextStage, + "isAdvanceableRenderStage", + ()=>isAdvanceableRenderStage +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)"); +; +; +var RenderStage = /*#__PURE__*/ function(RenderStage) { + RenderStage[RenderStage["Before"] = 1] = "Before"; + // + RenderStage[RenderStage["ShellStatic"] = 10] = "ShellStatic"; + /** Discrimination-only stage: `prefetch()` in validation renders (static) */ RenderStage[RenderStage["PrefetchStatic_prefetchApi"] = 11] = "PrefetchStatic_prefetchApi"; + RenderStage[RenderStage["PrefetchStatic"] = 12] = "PrefetchStatic"; + RenderStage[RenderStage["NavigationStatic"] = 13] = "NavigationStatic"; + RenderStage[RenderStage["Static"] = 14] = "Static"; + // + RenderStage[RenderStage["ShellRuntime"] = 20] = "ShellRuntime"; + /** Discrimination-only stage: `prefetch()` in validation renders (runtime) */ RenderStage[RenderStage["PrefetchRuntime_prefetchApi"] = 21] = "PrefetchRuntime_prefetchApi"; + RenderStage[RenderStage["PrefetchRuntime"] = 22] = "PrefetchRuntime"; + RenderStage[RenderStage["NavigationRuntime"] = 23] = "NavigationRuntime"; + // + RenderStage[RenderStage["Dynamic"] = 30] = "Dynamic"; + RenderStage[RenderStage["Abandoned"] = 40] = "Abandoned"; + return RenderStage; +}({}); +const RENDER_STAGE_ADVANCE_ORDER = [ + 10, + 11, + 12, + 13, + 14, + 20, + 21, + 22, + 23, + 30 +]; +function getNextStage(stage) { + return RENDER_STAGE_ADVANCE_ORDER[RENDER_STAGE_ADVANCE_ORDER.indexOf(stage) + 1]; +} +function isAdvanceableRenderStage(stage) { + return 1 < stage && stage <= 30; +} +var SyncIOMode = /*#__PURE__*/ function(SyncIOMode) { + /** Sync IO does not error in any stage. */ SyncIOMode[SyncIOMode["Untracked"] = 1] = "Untracked"; + /** Before `partialPrefetching`: Sync IO errors in static stages, and is allowed otherwise. */ SyncIOMode[SyncIOMode["AllowedInRuntimeOrDynamic"] = 2] = "AllowedInRuntimeOrDynamic"; + /** After `partialPrefetching`: Sync IO errors in all stages other than dynamic. */ SyncIOMode[SyncIOMode["AllowedInDynamic"] = 3] = "AllowedInDynamic"; + return SyncIOMode; +}({}); +class StagedRenderingController { + constructor({ abortSignal, abandonController, syncIO, finalStage }){ + this.currentStage = 1; + this.syncInterruptReason = null; + this.triggers = createAdvanceableStageTriggers(); + this.abortSignal = abortSignal; + this.abandonController = abandonController; + this.syncIOMode = syncIO; + this.finalStage = finalStage; + if (abortSignal) { + abortSignal.addEventListener('abort', ()=>{ + // Reject all stage promises that haven't already been resolved. + // `cancelStageTrigger` is a noop if the trigger already resolved. + const { reason } = abortSignal; + for (const trigger of Object.values(this.triggers)){ + cancelStageTrigger(trigger, reason); + } + }, { + once: true + }); + } + if (abandonController) { + abandonController.signal.addEventListener('abort', ()=>{ + this.abandonRender(); + }, { + once: true + }); + } + } + /** + * Schedules a callback that will execute synchronously when the controller is advanced + * to `stage` or past it, before any promises for that stage are resolved. + * If the controller is already past `stage`, the callback is executed immediately. + * */ onStage(stage, callback) { + addSyncTriggerListener(this.triggers[stage], callback); + } + shouldTrackSyncInterrupt() { + const { syncIOMode, currentStage } = this; + switch(syncIOMode){ + case 1: + { + return false; + } + case 2: + { + // Legacy: track Sync IO only in static stages. + // Do not track it before the render, or in runtime/dynamic stages. + return currentStage > 1 && currentStage <= 14; + } + case 3: + { + // Track sync IO in all cacheable stages. + // This means all stages except: + // - before the render + // - in the dynamic stage + return currentStage > 1 && currentStage < 30; + } + } + } + /** Note: only call this if `shouldTrackSyncInterrupt()` returned true */ syncInterruptCurrentStageWithReason(reason) { + const { currentStage } = this; + if (currentStage === 1 || currentStage === 30 || currentStage === 40) { + // Not interruptible. Defensive noop. + return; + } + // If Sync IO occurs during an abandonable render, we trigger the abandon. + // The abandon listener will call abandonRender which advances through + // stages to let caches fill before marking as Abandoned. + if (this.abandonController) { + this.abandonController.abort(); + return; + } + if (this.abortSignal) { + // If this is an abortable render, we capture the interruption reason and stop advancing. + // We don't release any more promises. + // The caller is expected to abort the signal. + this.syncInterruptReason = reason; + this.currentStage = 40; + return; + } + // If we're in a non-abandonable & non-abortable render, + // we need to advance to the Dynamic stage and capture the interruption reason. + // (in dev, this will be the restarted render) + this.syncInterruptReason = reason; + this.advanceStage(30); + } + getSyncInterruptReason() { + return this.syncInterruptReason; + } + getStageEndTime(stage) { + return this.triggers[getNextStage(stage)].triggeredAt ?? Infinity; + } + abandonRender() { + // In staged rendering, only the initial render is abandonable. + // We can abandon the initial render if + // 1. We notice a cache miss, and need to wait for caches to fill + // 2. A sync IO error occurs, and the render should be interrupted + // (this might be a lazy intitialization of a module, + // so we still want to restart in this case and see if it still occurs) + // In either case, we'll be doing another render after this one, + // so we only want to unblock the next stage, not Dynamic, because + // unblocking the dynamic stage would likely lead to wasted (uncached) IO. + const { currentStage } = this; + if (currentStage === 1) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]("A render that hasn't started yet cannot be abandoned"); + } + if (currentStage === 30 || currentStage === 40) { + // We shouldn't ever trigger an abandon in these. Defensive noop. + return; + } + // Resolve all stages after the current one, up to runtime (excluding dynamic) + const nextStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(currentStage) + 1; + const dynamicStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(30); + for(let i = nextStageIx; i < dynamicStageIx; i++){ + this.resolveStage(RENDER_STAGE_ADVANCE_ORDER[i]); + } + this.currentStage = 40; + } + advanceStage(targetStage) { + if (this.finalStage !== null && targetStage > this.finalStage) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`Attempted to advance to stage ${RenderStage[targetStage]} but the render is limited to ${RenderStage[this.finalStage]}`); + } + const { currentStage } = this; + if (currentStage === 30 || currentStage === 40) { + // Terminal stages, nowhere left to advance. + return; + } + // If we're already at the target stage or beyond, do nothing. + if (targetStage <= currentStage) { + return; + } + this.currentStage = targetStage; + // Resolve all stages between the current stage and the target. + const nextStageIx = currentStage === 1 ? 0 : RENDER_STAGE_ADVANCE_ORDER.indexOf(currentStage) + 1; + const targetStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(targetStage); + for(let i = nextStageIx; i <= targetStageIx; i++){ + this.resolveStage(RENDER_STAGE_ADVANCE_ORDER[i]); + } + } + resolveStage(stage) { + fireStageTrigger(this.triggers[stage]); + } + getStagePromise(stage) { + return this.triggers[stage].promise; + } + waitForStage(stage) { + return this.getStagePromise(stage); + } + delayUntilStage(stage, displayName, resolvedValue) { + const stagePromise = this.getStagePromise(stage); + const promise = ("TURBOPACK compile-time truthy", 1) ? makeDevtoolsIOPromiseFromIOTrigger(stagePromise, displayName, resolvedValue) : "TURBOPACK unreachable"; + // Analogously to `makeDynamicHangingPromise`, we might reject this promise if the signal is invoked. + // (e.g. in the case where we don't want want the render to proceed to the dynamic stage and abort it). + // We shouldn't consider this an unhandled rejection, so we attach a noop catch handler here to suppress this warning. + if (this.abortSignal) { + promise.catch(ignoreReject); + } + return promise; + } +} +function createAdvanceableStageTriggers() { + const triggers = {}; + for (const stage of RENDER_STAGE_ADVANCE_ORDER){ + triggers[stage] = createStageTrigger(); + } + return triggers; +} +function ignoreReject() {} +// TODO(restart-on-cache-miss): the layering of `delayUntilStage`, +// `makeDevtoolsIOPromiseFromIOTrigger` and and `makeDevtoolsIOAwarePromise` +// is confusing, we should clean it up. +function makeDevtoolsIOPromiseFromIOTrigger(ioTrigger, displayName, resolvedValue) { + // If we create a `new Promise` and give it a displayName + // (with no userspace code above us in the stack) + // React Devtools will use it as the IO cause when determining "suspended by". + // In particular, it should shadow any inner IO that resolved/rejected the promise + // (in case of staged rendering, this will be the `setTimeout` that triggers the relevant stage) + const promise = new Promise((resolve, reject)=>{ + ioTrigger.then(resolve.bind(null, resolvedValue), reject); + }); + if (displayName !== undefined) { + // @ts-expect-error + promise.displayName = displayName; + } + return promise; +} +function addSyncTriggerListener(trigger, listener) { + if (trigger.state === 'pending') { + trigger._listeners.push(listener); + } else { + listener(); + } +} +function createStageTrigger() { + const { promise, resolve, reject } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + return { + state: 'pending', + triggeredAt: null, + promise, + _listeners: [], + _resolvePromise: resolve, + _rejectPromise: reject + }; +} +function fireStageTrigger(trigger) { + if (trigger.state !== 'pending') { + return; + } + trigger.state = 'triggered'; + trigger.triggeredAt = performance.now() + performance.timeOrigin; + try { + const { _listeners: listeners } = trigger; + for(let i = 0; i < listeners.length; i++){ + listeners[i](); + } + listeners.length = 0; + } finally{ + trigger._resolvePromise(); + } +} +function cancelStageTrigger(trigger, reason) { + if (trigger.state !== 'pending') { + return; + } + trigger.state = 'cancelled'; + // we didn't trigger, so don't save `triggeredAt`. + // We're not gonna fire the listeners, we may as well free them. + trigger._listeners.length = 0; + // Suppress unhandled rejection warnings for promises that no one is awaiting. + trigger.promise.catch(ignoreReject); + trigger._rejectPromise(reason); +} +}), +"[project]/node_modules/next/dist/esm/server/base-http/helpers.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * This file provides some helpers that should be used in conjunction with + * explicit environment checks. When combined with the environment checks, it + * will ensure that the correct typings are used as well as enable code + * elimination. + */ /** + * Type guard to determine if a request is a WebNextRequest. This does not + * actually check the type of the request, but rather the runtime environment. + * It's expected that when the runtime environment is the edge runtime, that any + * base request is a WebNextRequest. + */ __turbopack_context__.s([ + "isNodeNextRequest", + ()=>isNodeNextRequest, + "isNodeNextResponse", + ()=>isNodeNextResponse, + "isWebNextRequest", + ()=>isWebNextRequest, + "isWebNextResponse", + ()=>isWebNextResponse +]); +const isWebNextRequest = (req)=>("TURBOPACK compile-time value", "nodejs") === 'edge'; +const isWebNextResponse = (res)=>("TURBOPACK compile-time value", "nodejs") === 'edge'; +const isNodeNextRequest = (req)=>("TURBOPACK compile-time value", "nodejs") !== 'edge'; +const isNodeNextResponse = (res)=>("TURBOPACK compile-time value", "nodejs") !== 'edge'; +}), +"[project]/node_modules/next/dist/esm/server/base-http/index.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "BaseNextRequest", + ()=>BaseNextRequest, + "BaseNextResponse", + ()=>BaseNextResponse +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$redirect$2d$status$2d$code$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/redirect-status-code.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$get$2d$cookie$2d$parser$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/api-utils/get-cookie-parser.js [app-route] (ecmascript)"); +; +; +class BaseNextRequest { + constructor(method, url, body){ + this.method = method; + this.url = url; + this.body = body; + } + // Utils implemented using the abstract methods above + get cookies() { + if (this._cookies) return this._cookies; + return this._cookies = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$get$2d$cookie$2d$parser$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getCookieParser"])(this.headers)(); + } +} +class BaseNextResponse { + constructor(destination){ + this.destination = destination; + } + // Utils implemented using the abstract methods above + redirect(destination, statusCode) { + this.setHeader('Location', destination); + this.statusCode = statusCode; + // Since IE11 doesn't support the 308 header add backwards + // compatibility using refresh header + if (statusCode === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$redirect$2d$status$2d$code$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RedirectStatusCode"].PermanentRedirect) { + this.setHeader('Refresh', `0;url=${destination}`); + } + return this; + } +} +}), +"[project]/node_modules/next/dist/esm/server/base-http/node.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "NodeNextRequest", + ()=>NodeNextRequest, + "NodeNextResponse", + ()=>NodeNextResponse +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/api-utils/index.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/request-meta.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/base-http/index.js [app-route] (ecmascript)"); +; +; +; +let prop; +class NodeNextRequest extends __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["BaseNextRequest"] { + static #_ = prop = _NEXT_REQUEST_META = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_REQUEST_META"]; + constructor(_req){ + var _this__req; + super(_req.method.toUpperCase(), _req.url, _req), this._req = _req, this.headers = this._req.headers, this.fetchMetrics = (_this__req = this._req) == null ? void 0 : _this__req.fetchMetrics, this[_NEXT_REQUEST_META] = this._req[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_REQUEST_META"]] || {}, this.streaming = false; + } + get originalRequest() { + // Need to mimic these changes to the original req object for places where we use it: + // render.tsx, api/ssg requests + this._req[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_REQUEST_META"]] = this[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_REQUEST_META"]]; + this._req.url = this.url; + this._req.cookies = this.cookies; + return this._req; + } + set originalRequest(value) { + this._req = value; + } + /** + * Returns the request body as a Web Readable Stream. The body here can only + * be read once as the body will start flowing as soon as the data handler + * is attached. + * + * @internal + */ stream() { + if (this.streaming) { + throw new Error('Invariant: NodeNextRequest.stream() can only be called once'); + } + this.streaming = true; + return new ReadableStream({ + start: (controller)=>{ + this._req.on('data', (chunk)=>{ + controller.enqueue(new Uint8Array(chunk)); + }); + this._req.on('end', ()=>{ + controller.close(); + }); + this._req.on('error', (err)=>{ + controller.error(err); + }); + } + }); + } +} +class NodeNextResponse extends __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["BaseNextResponse"] { + get originalResponse() { + if (__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SYMBOL_CLEARED_COOKIES"] in this) { + this._res[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SYMBOL_CLEARED_COOKIES"]] = this[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SYMBOL_CLEARED_COOKIES"]]; + } + return this._res; + } + constructor(_res){ + super(_res), this._res = _res, this.textBody = undefined; + } + get sent() { + return this._res.finished || this._res.headersSent; + } + get statusCode() { + return this._res.statusCode; + } + set statusCode(value) { + this._res.statusCode = value; + } + get statusMessage() { + return this._res.statusMessage; + } + set statusMessage(value) { + this._res.statusMessage = value; + } + setHeader(name, value) { + this._res.setHeader(name, value); + return this; + } + removeHeader(name) { + this._res.removeHeader(name); + return this; + } + getHeaderValues(name) { + const values = this._res.getHeader(name); + if (values === undefined) return undefined; + return (Array.isArray(values) ? values : [ + values + ]).map((value)=>value.toString()); + } + hasHeader(name) { + return this._res.hasHeader(name); + } + getHeader(name) { + const values = this.getHeaderValues(name); + return Array.isArray(values) ? values.join(',') : undefined; + } + getHeaders() { + return this._res.getHeaders(); + } + appendHeader(name, value) { + const currentValues = this.getHeaderValues(name) ?? []; + if (!currentValues.includes(value)) { + this._res.setHeader(name, [ + ...currentValues, + value + ]); + } + return this; + } + body(value) { + this.textBody = value; + return this; + } + send() { + this._res.end(this.textBody); + } + onClose(callback) { + this.originalResponse.on('close', callback); + } +} +var _NEXT_REQUEST_META; +}), +"[project]/node_modules/next/dist/esm/server/dynamic-rendering-utils.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ClientHookDynamicError", + ()=>ClientHookDynamicError, + "RENDER_STAGES_BY_DATA_KIND", + ()=>RENDER_STAGES_BY_DATA_KIND, + "applyOwnerStack", + ()=>applyOwnerStack, + "createPrerenderDataTracking", + ()=>createPrerenderDataTracking, + "finishPrerenderDataTracking", + ()=>finishPrerenderDataTracking, + "isClientHookDynamicError", + ()=>isClientHookDynamicError, + "isHangingPromiseRejectionError", + ()=>isHangingPromiseRejectionError, + "makeClientHookHangingPromise", + ()=>makeClientHookHangingPromise, + "makeDevtoolsIOAwarePromise", + ()=>makeDevtoolsIOAwarePromise, + "makeDynamicHangingPromise", + ()=>makeDynamicHangingPromise, + "makeFallbackParamsHangingPromise", + ()=>makeFallbackParamsHangingPromise, + "makePrefetchHangingPromise", + ()=>makePrefetchHangingPromise, + "makePromiseFromTrigger", + ()=>makePromiseFromTrigger, + "makeSessionDataHangingPromise", + ()=>makeSessionDataHangingPromise, + "makeURLDataHangingPromise", + ()=>makeURLDataHangingPromise, + "makeUnknownRuntimeDataHangingPromise", + ()=>makeUnknownRuntimeDataHangingPromise, + "makeUntrackedHangingPromise", + ()=>makeUntrackedHangingPromise, + "trackFallbackParamsAccessed", + ()=>trackFallbackParamsAccessed, + "trackIncompatibleShellContent", + ()=>trackIncompatibleShellContent, + "trackPromiseUsed", + ()=>trackPromiseUsed, + "trackURLDataAccessed", + ()=>trackURLDataAccessed +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$segment$2d$config$2f$ensure$2d$static$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/segment-config/ensure-static.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/staged-rendering.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$runtime$2d$reacts$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$runtime$2d$reacts$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/runtime-reacts.external.js [external] (next/dist/server/runtime-reacts.external.js, cjs)"); +; +; +; +; +; +; +; +function isHangingPromiseRejectionError(err) { + if (typeof err !== 'object' || err === null || !('digest' in err)) { + return false; + } + return err.digest === HANGING_PROMISE_REJECTION; +} +const HANGING_PROMISE_REJECTION = 'HANGING_PROMISE_REJECTION'; +class HangingPromiseRejectionError extends Error { + constructor(route, expression){ + super(`During prerendering, ${expression} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${expression} to a different context by using \`setTimeout\`, \`after\`, or similar functions you may observe this error and you should handle it in that context. This occurred at route "${route}".`), this.route = route, this.expression = expression, this.digest = HANGING_PROMISE_REJECTION; + } +} +const CLIENT_HOOK_DYNAMIC = 'CLIENT_HOOK_DYNAMIC'; +class ClientHookDynamicError extends Error { + constructor(route, expression){ + super(`Route "${route}": Next.js encountered URL data \`${expression}\` in a Client Component outside of \`\`.\n\n` + `This blocks prerendering because the value is only available at runtime.\n\n` + `Ways to fix this:\n` + ` - [stream] Wrap the component in \`\` so the hook value streams in after prerendering\n` + ` - [block] Set \`export const instant = false\` to allow a blocking route\n\n` + `Learn more: https://nextjs.org/docs/messages/blocking-prerender-client-hook`), this.digest = CLIENT_HOOK_DYNAMIC; + } +} +function isClientHookDynamicError(err) { + if (typeof err !== 'object' || err === null || !('digest' in err)) { + return false; + } + return err.digest === CLIENT_HOOK_DYNAMIC; +} +const abortListenersBySignal = new WeakMap(); +function makeDynamicHangingPromise(signal, route, expression) { + return makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); +} +function makeUntrackedHangingPromise(signal, route, expression) { + return makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); +} +function makeSessionDataHangingPromise(signal, route, expression, workUnitStore) { + const promise = makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); + return trackPromiseUsed(promise, trackSessionDataAccessed.bind(null, workUnitStore, expression)); +} +function makeURLDataHangingPromise(signal, route, expression, workUnitStore) { + const promise = makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); + if (workUnitStore === null) { + return promise; + } + return trackPromiseUsed(promise, trackURLDataAccessed.bind(null, workUnitStore, expression)); +} +function makeUnknownRuntimeDataHangingPromise(signal, route, expression, workUnitStore) { + // We don't know if this is session or URL data, i.e. if it should affect the shell + // or only the prefetch. Track it conservatively as affecting both. + return makeSessionDataHangingPromise(signal, route, expression, workUnitStore); +} +function makePrefetchHangingPromise(signal, route, expression) { + return makeUntrackedHangingPromise(signal, route, expression); +} +function makeFallbackParamsHangingPromise(signal, route, expression, workUnitStore) { + const promise = makeHangingPromiseWithError(signal, new HangingPromiseRejectionError(route, expression)); + if (workUnitStore === null) { + return promise; + } + return trackPromiseUsed(promise, trackFallbackParamsAccessed.bind(null, workUnitStore, expression)); +} +function createPrerenderDataTracking() { + return { + runtimeDataAccessed: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(), + shouldAttemptStaticShell: true, + shouldAttemptStaticPrefetch: true + }; +} +function finishPrerenderDataTracking(prerenderDataTracking) { + // If a runtime data access already resolved this promise, this is a no-op. + prerenderDataTracking.runtimeDataAccessed.resolve(false); +} +/** + * Records on a static prerender store that the render accessed a data source + * which would have resolved in a runtime shell (or runtime prefetch). + * No-op for all other store types. + * + * Prefer `makeRuntimeHangingPromise`. Use this function only when implementing + * similar tracking and that one is not enough. + */ function trackSessionDataAccessed(workUnitStore, expression) { + trackRuntimeDataAccessed(workUnitStore, 1, expression); +} +function trackURLDataAccessed(workUnitStore, expression) { + trackRuntimeDataAccessed(workUnitStore, 2, expression); +} +function trackFallbackParamsAccessed(workUnitStore, expression) { + trackRuntimeDataAccessed(workUnitStore, 3, expression); +} +function trackRuntimeDataAccessed(workUnitStore, dataKind, expression) { + switch(workUnitStore.type){ + case 'prerender': + { + const { prerenderDataTracking, stagedRendering } = workUnitStore; + if (!prerenderDataTracking || !stagedRendering) { + return; + } + const { currentStage } = stagedRendering; + if (currentStage === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Before) { + console.error(new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('Unexpected trackRuntimeDataAccessed in the Before stage.')); + return; + } + if (currentStage >= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].NavigationStatic) { + // Ignore any accesses that happen after `navigation()` resolves. + // The purpose of this tracking is to judge whether a runtime prefetch + // would give us a more complete result than a static one. + // But `navigation()` wouldn't have resolved in a runtime prefetch, + // so e.g. `await navigation(); await cookies()` wouldn't have more content + // in those, and we shouldn't count it. + return; + } + const ensureStaticLevel = workUnitStore.ensureStaticLevel ?? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$segment$2d$config$2f$ensure$2d$static$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["EnsureStaticLevel"].None; + // NOTE: In general, we keep hints in sync with `needsRuntimeRequest`, but they + // don't have to always match. The client re-uses hints for the entire route, + // while `needsRuntimeRequest` can vary across individual prerendered param values + // (e.g. if cookies are accessed depending on a param value). + // Hints can also become outdated if a route only starts using runtime data + // after a revalidation, so we have to expect this and be resilient to it. + // Also see the upgradeable fallback params case below, which deliberately + // puts them out of sync. + switch(dataKind){ + case 1: + { + // Potentially deopt both the shell and the prefetch, + // because if the shell accessed runtime data, so does the prefetch. + // However, if we're already past the shell stage, the shell is not affected. + // (which makes e.g. `await prefetch(); await cookies()` only affect the prefetch) + let firstAffectedStage = null; + if (currentStage <= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].ShellStatic && // Only track if we're not forcing the shell to be static. + ensureStaticLevel < __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$segment$2d$config$2f$ensure$2d$static$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["EnsureStaticLevel"].Shell) { + prerenderDataTracking.shouldAttemptStaticShell = false; + firstAffectedStage ??= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].ShellStatic; + logRuntimeDeopt == null ? void 0 : logRuntimeDeopt(expression, 'shell'); + } + if (currentStage <= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchStatic && // Only track if we're not forcing the prefetch to be static. + ensureStaticLevel < __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$segment$2d$config$2f$ensure$2d$static$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["EnsureStaticLevel"].Prefetch) { + prerenderDataTracking.shouldAttemptStaticPrefetch = false; + // NOTE: if the shell is affected, don't override it. + firstAffectedStage ??= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchStatic; + logRuntimeDeopt == null ? void 0 : logRuntimeDeopt(expression, 'prefetch'); + } + if (firstAffectedStage !== null) { + markRuntimeDataAccessWhenStageReached(prerenderDataTracking, stagedRendering, firstAffectedStage); + } + break; + } + case 3: + { + if (workUnitStore.isFallbackUpgradeable) { + // An fallback-param access is transient when the route is + // fallback-upgradeable (i.e. ISR later produces the concrete prerender a + // static prefetch would hit) so it does not indicate the need for a runtime + // request and thus does not affect the static hints. + // + // If runtime prefetches are not disallowed by `ensureStatic`, then we still + // set `runtimeDataAccessed` (while keeping the hints static). This means that + // if the concrete prerender isn't ready yet and we served the fallback, then + // the client knows it can use a *runtime* prefetch for speculative links -- + // a runtime prefetch can provide the same content (or more) as the concrete + // prerender would. + if (ensureStaticLevel < __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$segment$2d$config$2f$ensure$2d$static$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["EnsureStaticLevel"].Prefetch) { + markRuntimeDataAccessWhenStageReached(prerenderDataTracking, stagedRendering, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchStatic); + logRuntimeUpgradeableFallback == null ? void 0 : logRuntimeUpgradeableFallback(); + } + break; + } + // not an upgradeable fallback param access, so we treat it as URL data. + // intentional fallthrough + } + case 2: + { + // Only deopt the prefetch, not the shell, which cannot access URL data anyway. + if (currentStage <= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchStatic && ensureStaticLevel < __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$segment$2d$config$2f$ensure$2d$static$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["EnsureStaticLevel"].Prefetch) { + prerenderDataTracking.shouldAttemptStaticPrefetch = false; + logRuntimeDeopt == null ? void 0 : logRuntimeDeopt(expression, 'prefetch'); + markRuntimeDataAccessWhenStageReached(prerenderDataTracking, stagedRendering, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchStatic); + } + break; + } + } + break; + } + case 'prerender-client': + case 'prerender-legacy': + case 'prerender-runtime': + case 'validation-client': + case 'request': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } +} +/** + * Tracks a runtime data access on the `runtimeDataAccessed` promise, + * but with a delay until `targetStage`. + * + * When we encounter a URL data access like `await params`, we need to mark the + * *prefetch* as needing runtime data, but the *shell* should remain unaffected + * (because it cannot access params anyway). + * + * However, the shell and the prefetch share one `runtimeDataAccessed` promise, + * and it needs to be accurately rewindable by the client + * In other words, we need to make sure that it reads as `false` when rewound + * to a shell, but as `true` in the final response (the prefetch). + * + * This means that if the `await params` is encountered during the shell stage, we + * cannot resolve `runtimeDataAccessed` immediately. + * Instead, we delay the resolution until the PrefetchStatic stage, so the promise + * will remain unresolved when rewound to the shell stage (which reads as `false`). + */ function markRuntimeDataAccessWhenStageReached(prerenderDataTracking, stageController, targetStage) { + const { runtimeDataAccessed } = prerenderDataTracking; + // NOTE: If we're already in or past the target stage, we can avoid allocating a closure, + // because `onStage` would've executed the callback immediately anyway. + if (stageController.currentStage >= targetStage) { + runtimeDataAccessed.resolve(true); + } else { + stageController.onStage(targetStage, runtimeDataAccessed.resolve.bind(null, true)); + } +} +const logRuntimeDeopt = process.env.NEXT_PRIVATE_DEBUG_RUNTIME_DATA ? (expression, kind)=>{ + const { route } = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + console.log(`Route '${route}': deopting to a runtime ${kind} because it used ${expression}`); +} : undefined; +const logRuntimeUpgradeableFallback = process.env.NEXT_PRIVATE_DEBUG_RUNTIME_DATA ? ()=>{ + const { route } = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + console.log(`Route '${route}': marking upgradeable fallback as runtime prefetchable`); +} : undefined; +function trackIncompatibleShellContent(workUnitStore, reason) { + const { stagedRendering } = workUnitStore; + if (!stagedRendering) { + return; + } + // TODO(app-shells): optimize this to only consider stages that are relevant for validation. + // We should only track incompatible content when it can affect them. + // For now, we simply exclude everything that happens in the dynamic stage. + // (Note that we also need to account for cache misses that move things to a + // different stage -- those should also preemptively set `hasIncompatibleShellContent` + // because there's a chance that a render with warm caches would set it) + const { currentStage } = stagedRendering; + if (currentStage === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic || currentStage === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Abandoned) { + return; + } + if (process.env.NEXT_PRIVATE_DEBUG_VALIDATION) { + const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore(); + console.log(`Route ${workStore.route}: Incompatible shell content: ${reason}`); + } + workUnitStore.hasIncompatibleShellContent = true; +} +function makeClientHookHangingPromise(signal, error) { + return makeHangingPromiseWithError(signal, error); +} +function makeHangingPromiseWithError(signal, error) { + if (signal.aborted) { + return Promise.reject(error); + } else { + const hangingPromise = new Promise((_, reject)=>{ + const boundRejection = reject.bind(null, error); + let currentListeners = abortListenersBySignal.get(signal); + if (currentListeners) { + currentListeners.push(boundRejection); + } else { + const listeners = [ + boundRejection + ]; + abortListenersBySignal.set(signal, listeners); + signal.addEventListener('abort', ()=>{ + for(let i = 0; i < listeners.length; i++){ + listeners[i](); + } + }, { + once: true + }); + } + }); + // We are fine if no one actually awaits this promise. We shouldn't consider this an unhandled rejection so + // we attach a noop catch handler here to suppress this warning. If you actually await somewhere or construct + // your own promise out of it you'll need to ensure you handle the error when it rejects. + hangingPromise.catch(ignoreReject); + return hangingPromise; + } +} +function ignoreReject() {} +function makePromiseFromTrigger(trigger, value) { + const promise = trigger.then(()=>value); + promise.catch(ignoreReject); + return promise; +} +function makeDevtoolsIOAwarePromise(underlying, requestStore, stage) { + if (requestStore.stagedRendering) { + // We resolve each stage in a timeout, so React DevTools will pick this up as IO. + return requestStore.stagedRendering.delayUntilStage(stage, undefined, underlying); + } + // in React DevTools if we resolve in a setTimeout we will observe + // the promise resolution as something that can suspend a boundary or root. + return new Promise((resolve)=>{ + // Must use setTimeout to be considered IO React DevTools. setImmediate will not work. + setTimeout(()=>{ + resolve(underlying); + }, 0); + }); +} +function trackPromiseUsed(promise, onUse) { + // We can instrument `.then()/.catch()/.finally()` in one go by using a Promise subclass + // that implements a custom `.then()`, because `catch` and `finally` delegate to it. + // + // Alternative implementation ideas that were tried and rejected: + // + // 1. Patching the methods directly via `promise.then = (..args) => { ... }`: + // doesn't work, because Node does not call the monkeypatched methods for native `await`: + // > Native Promise [...]: The promise is directly used and awaited natively, without calling `then()`. + // > https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await#description + // + // 2. Wrapping in a proxy that returns a custom `then/catch/finally`: + // breaks async stacks in React's IO tracking (stack becomes `Promise.then`) + return TrackedPromise.from(promise, onUse); +} +class TrackedPromise extends Promise { + #onUse; + // We don't need derived promises to also be a TrackedPromise. + // We only care about the first level of `.then()`. + static get [Symbol.species]() { + return Promise; + } + static from(promise, onUse) { + // Whenever the promise we're tracking resolves/rejects, we should follow. + const tracked = new TrackedPromise(promise.then.bind(promise)); + tracked.#onUse = onUse; + // Hanging promises catch rejections when created. Tracked promises are generally derived + // from promises that may hang & reject, so we need to do the same. + // However, we have to bypass the tracking we do in `TrackedPromise.then`. + // (we're using `then` directly, because `catch` ends up delegating `TrackedPromise.then`) + Promise.prototype.then.call(tracked, undefined, ignoreReject); + return tracked; + } + then(onFulfilled, onRejected) { + const onUse = this.#onUse; + if (onUse) { + try { + onUse(); + } catch (err) { + // We don't want to break the method even if our tracking errored. + console.error(err); + } + } + return Promise.prototype.then.call(this, onFulfilled, onRejected); + } + constructor(...args){ + super(...args), this.#onUse = null; + } +} +const RENDER_STAGES_BY_DATA_KIND = { + sessionData: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].ShellRuntime, + /** + * Statically-prerenderable URL data, like static `params`. + * It may need to be pushed to a runtime stage in a runtime prerender, + * but it's semantically distinct from `runtimeUrlData` like `searchParams`, + * which is always excluded from static prerenders. + * */ staticUrlData: { + /** + * From that app's point of view, `prefetch()` is semantically the same as + * `staticUrlData`, because it does not resolve in a shell but resolves in + * a prefetch (even a static one). + * We handle it separately to provide a specialized error in validation renders. + */ prefetchApi: { + static: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchStatic_prefetchApi, + runtime: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchRuntime_prefetchApi + }, + static: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchStatic, + runtime: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchRuntime + }, + /** + * URL data that is never statically-prerenderable, like static `searchParams`. + * */ runtimeUrlData: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].PrefetchRuntime +}; +function applyOwnerStack(error) { + if ("TURBOPACK compile-time truthy", 1) { + var _getClientReact_captureOwnerStack, _getClientReact, _getServerReact_captureOwnerStack, _getServerReact; + let ownerStack; + const workUnitStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workUnitAsyncStorage"].getStore(); + // captureOwnerStack() returns the owner stack for the current React + // rendering context. Inside a cache scope this only includes the inner + // component tree. The outer owner stack (captured before entering the + // cache boundary in use-cache-wrapper.ts) is stored on the cache store. + // We concatenate both to get the full component tree. + const innerOwnerStack = ((_getClientReact = (0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$runtime$2d$reacts$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$runtime$2d$reacts$2e$external$2e$js$2c$__cjs$29$__["getClientReact"])()) == null ? void 0 : (_getClientReact_captureOwnerStack = _getClientReact.captureOwnerStack) == null ? void 0 : _getClientReact_captureOwnerStack.call(_getClientReact)) ?? ((_getServerReact = (0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$runtime$2d$reacts$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$runtime$2d$reacts$2e$external$2e$js$2c$__cjs$29$__["getServerReact"])()) == null ? void 0 : (_getServerReact_captureOwnerStack = _getServerReact.captureOwnerStack) == null ? void 0 : _getServerReact_captureOwnerStack.call(_getServerReact)); + switch(workUnitStore == null ? void 0 : workUnitStore.type){ + case 'cache': + case 'private-cache': + ownerStack = (innerOwnerStack || '') + (workUnitStore.outerOwnerStack || '') || undefined; + break; + case 'unstable-cache': + case 'request': + case 'prerender': + case 'prerender-legacy': + case 'prerender-runtime': + case 'prerender-client': + case 'validation-client': + case 'build-time-generator': + case undefined: + ownerStack = innerOwnerStack; + break; + default: + workUnitStore; + } + if (ownerStack) { + let stack = ownerStack; + if (error.stack) { + const frames = []; + for (const frame of error.stack.split('\n').slice(1)){ + if (frame.includes('react_stack_bottom_frame')) { + break; + } + frames.push(frame); + } + stack = '\n' + frames.join('\n') + stack; + } + error.stack = error.name + ': ' + error.message + stack; + } + } + return error; +} +}), +"[project]/node_modules/next/dist/esm/server/instrumentation/utils.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getRevalidateReason", + ()=>getRevalidateReason +]); +function getRevalidateReason(params) { + if (params.isOnDemandRevalidate) { + return 'on-demand'; + } + if (params.isStaticGeneration) { + return 'stale'; + } + return undefined; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/app-dir-module.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getComponentTypeModule", + ()=>getComponentTypeModule, + "getLayoutOrPageModule", + ()=>getLayoutOrPageModule +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/segment.js [app-route] (ecmascript)"); +; +async function getLayoutOrPageModule(loaderTree) { + const { layout, page, defaultPage } = loaderTree[2]; + const isLayout = typeof layout !== 'undefined'; + const isPage = typeof page !== 'undefined'; + const isDefaultPage = typeof defaultPage !== 'undefined' && loaderTree[0] === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["DEFAULT_SEGMENT_KEY"]; + let mod = undefined; + let modType = undefined; + let filePath = undefined; + if (isLayout) { + mod = await layout[0](); + modType = 'layout'; + filePath = layout[1]; + } else if (isPage) { + mod = await page[0](); + modType = 'page'; + filePath = page[1]; + } else if (isDefaultPage) { + mod = await defaultPage[0](); + modType = 'page'; + filePath = defaultPage[1]; + } + return { + mod, + modType, + filePath + }; +} +async function getComponentTypeModule(loaderTree, moduleType) { + const { [moduleType]: module } = loaderTree[2]; + if (typeof module !== 'undefined') { + return await module[0](); + } + return undefined; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/cache-control.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getCacheControlHeader", + ()=>getCacheControlHeader +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)"); +; +function getCacheControlHeader({ revalidate, expire }) { + const swrHeader = typeof revalidate === 'number' && expire !== undefined && revalidate < expire ? `, stale-while-revalidate=${expire - revalidate}` : ''; + if (revalidate === 0) { + return 'private, no-cache, no-store, max-age=0, must-revalidate'; + } else if (typeof revalidate === 'number') { + return `s-maxage=${revalidate}${swrHeader}`; + } + return `s-maxage=${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CACHE_ONE_YEAR_SECONDS"]}${swrHeader}`; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/clone-response.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "cloneResponse", + ()=>cloneResponse +]); +const noop = ()=>{}; +let registry; +if (globalThis.FinalizationRegistry) { + registry = new FinalizationRegistry((weakRef)=>{ + const stream = weakRef.deref(); + if (stream && !stream.locked) { + stream.cancel('Response object has been garbage collected').then(noop); + } + }); +} +function cloneResponse(original) { + // If the response has no body, then we can just return the original response + // twice because it's immutable. + if (!original.body) { + return [ + original, + original + ]; + } + const [body1, body2] = original.body.tee(); + const cloned1 = new Response(body1, { + status: original.status, + statusText: original.statusText, + headers: original.headers + }); + Object.defineProperty(cloned1, 'url', { + value: original.url, + // How the original response.url behaves + configurable: true, + enumerable: true, + writable: false + }); + const cloned2 = new Response(body2, { + status: original.status, + statusText: original.statusText, + headers: original.headers + }); + Object.defineProperty(cloned2, 'url', { + value: original.url, + // How the original response.url behaves + configurable: true, + enumerable: true, + writable: false + }); + // The Fetch Standard allows users to skip consuming the response body by + // relying on garbage collection to release connection resources. + // https://github.com/nodejs/undici?tab=readme-ov-file#garbage-collection + // + // To cancel the stream you then need to cancel both resulting branches. + // Teeing a stream will generally lock it for the duration, preventing other + // readers from locking it. + // https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/tee + if (registry) { + if (cloned1.body) { + registry.register(cloned1, new WeakRef(cloned1.body)); + } + if (cloned2.body) { + registry.register(cloned2, new WeakRef(cloned2.body)); + } + } + return [ + cloned1, + cloned2 + ]; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/dedupe-fetch.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "createDedupeFetch", + ()=>createDedupeFetch +]); +/** + * Based on https://github.com/facebook/react/blob/d4e78c42a94be027b4dc7ed2659a5fddfbf9bd4e/packages/react/src/ReactFetch.js + */ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/clone-response.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +; +; +; +const simpleCacheKey = '["GET",[],null,"follow",null,null,null,null]' // generateCacheKey(new Request('https://blank')); +; +// Headers that should not affect deduplication +// traceparent and tracestate are used for distributed tracing and should not affect cache keys +const headersToExcludeInCacheKey = new Set([ + 'traceparent', + 'tracestate' +]); +function generateCacheKey(request) { + // We pick the fields that goes into the key used to dedupe requests. + // We don't include the `cache` field, because we end up using whatever + // caching resulted from the first request. + // Notably we currently don't consider non-standard (or future) options. + // This might not be safe. TODO: warn for non-standard extensions differing. + // IF YOU CHANGE THIS UPDATE THE simpleCacheKey ABOVE. + const filteredHeaders = Array.from(request.headers.entries()).filter(([key])=>!headersToExcludeInCacheKey.has(key.toLowerCase())); + return JSON.stringify([ + request.method, + filteredHeaders, + request.mode, + request.redirect, + request.credentials, + request.referrer, + request.referrerPolicy, + request.integrity + ]); +} +function createDedupeFetch(originalFetch) { + const getCacheEntries = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["cache"]((url)=>[]); + return function dedupeFetch(resource, options) { + if (options && options.signal) { + // If we're passed a signal, then we assume that + // someone else controls the lifetime of this object and opts out of + // caching. It's effectively the opt-out mechanism. + // Ideally we should be able to check this on the Request but + // it always gets initialized with its own signal so we don't + // know if it's supposed to override - unless we also override the + // Request constructor. + return originalFetch(resource, options); + } + // Normalize the Request + let url; + let cacheKey; + if (typeof resource === 'string' && !options) { + // Fast path. + cacheKey = simpleCacheKey; + url = resource; + } else { + // Normalize the request. + // if resource is not a string or a URL (its an instance of Request) + // then do not instantiate a new Request but instead + // reuse the request as to not disturb the body in the event it's a ReadableStream. + const request = typeof resource === 'string' || resource instanceof URL ? new Request(resource, options) : resource; + if (request.method !== 'GET' && request.method !== 'HEAD' || request.keepalive) { + // We currently don't dedupe requests that might have side-effects. Those + // have to be explicitly cached. We assume that the request doesn't have a + // body if it's GET or HEAD. + // keepalive gets treated the same as if you passed a custom cache signal. + return originalFetch(resource, options); + } + cacheKey = generateCacheKey(request); + url = request.url; + } + const cacheEntries = getCacheEntries(url); + for(let i = 0, j = cacheEntries.length; i < j; i += 1){ + const [key, promise] = cacheEntries[i]; + if (key === cacheKey) { + return promise.then(()=>{ + const response = cacheEntries[i][2]; + if (!response) throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('No cached response'); + // We're cloning the response using this utility because there exists + // a bug in the undici library around response cloning. See the + // following pull request for more details: + // https://github.com/vercel/next.js/pull/73274 + const [cloned1, cloned2] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["cloneResponse"])(response); + cacheEntries[i][2] = cloned2; + return cloned1; + }); + } + } + // We pass the original arguments here in case normalizing the Request + // doesn't include all the options in this environment. + const promise = originalFetch(resource, options); + const entry = [ + cacheKey, + promise, + null + ]; + cacheEntries.push(entry); + return promise.then((response)=>{ + // We're cloning the response using this utility because there exists + // a bug in the undici library around response cloning. See the + // following pull request for more details: + // https://github.com/vercel/next.js/pull/73274 + const [cloned1, cloned2] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["cloneResponse"])(response); + entry[2] = cloned2; + return cloned1; + }); + }; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/encode-header-safe.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "encodeHeaderSafe", + ()=>encodeHeaderSafe +]); +/** + * Percent-encode every character other than horizontal tab and printable ASCII + * so a value can be safely serialized into an HTTP header. + * + * Node's `validateHeaderValue` and `fetch`'s ByteString conversion accept + * different character ranges. Restricting values to `\t\x20-\x7e` produces a + * conservative representation that both can serialize. Characters outside a + * transport's accepted range (Hebrew, Arabic, Chinese, emoji, …) would + * otherwise throw `ERR_INVALID_CHAR` or a `TypeError`, which crashes ISR or + * fails a cache read on every affected request. + * + * Cache tags are encoded at the public boundaries — tag construction + * (`getImplicitTags`, `validateTags`) and invalidation input + * (`revalidatePath`, `revalidateTag`, `updateTag`) — so storage, comparison, + * and the wire all see the same canonical form. + * + * The class is narrower than either transport accepts. Everything inside it + * passes through byte-for-byte, including `,`, `/`, `%`, `[`, `]`, `_`, `-` and + * `\t`, which preserves the comma-separated header format and the + * dynamic-segment markers in derived tags (`_N_T_/[slug]/page`). + * + * Properties: + * - Fast-path: input that already fits the class is returned unchanged. This + * makes the encoder idempotent on already-encoded `%xx` sequences. + * - Matches *runs* of out-of-class code units so surrogate pairs (e.g. an + * emoji) are handed to `encodeURIComponent` as a complete code point — a + * per-code-unit regex would split the pair and throw `URIError`. + */ const OUT_OF_CLASS_CHAR = /[^\t\x20-\x7e]/; +const OUT_OF_CLASS_RUN = /[^\t\x20-\x7e]+/g; +function encodeHeaderSafe(value) { + return OUT_OF_CLASS_CHAR.test(value) ? value.replace(OUT_OF_CLASS_RUN, (run)=>encodeURIComponent(run)) : value; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/lru-cache.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "LRUCache", + ()=>LRUCache +]); +/** + * Node in the doubly-linked list used for LRU tracking. + * Each node represents a cache entry with bidirectional pointers. + */ class LRUNode { + constructor(key, data, size){ + this.prev = null; + this.next = null; + this.key = key; + this.data = data; + this.size = size; + } +} +/** + * Sentinel node used for head/tail boundaries. + * These nodes don't contain actual cache data but simplify list operations. + */ class SentinelNode { + constructor(){ + this.prev = null; + this.next = null; + } +} +class LRUCache { + constructor(maxSize, calculateSize, onEvict){ + this.cache = new Map(); + this.totalSize = 0; + this.maxSize = maxSize; + this.calculateSize = calculateSize; + this.onEvict = onEvict; + // Create sentinel nodes to simplify doubly-linked list operations + // HEAD <-> TAIL (empty list) + this.head = new SentinelNode(); + this.tail = new SentinelNode(); + this.head.next = this.tail; + this.tail.prev = this.head; + } + /** + * Adds a node immediately after the head (marks as most recently used). + * Used when inserting new items or when an item is accessed. + * PRECONDITION: node must be disconnected (prev/next should be null) + */ addToHead(node) { + node.prev = this.head; + node.next = this.head.next; + // head.next is always non-null (points to tail or another node) + this.head.next.prev = node; + this.head.next = node; + } + /** + * Removes a node from its current position in the doubly-linked list. + * Updates the prev/next pointers of adjacent nodes to maintain list integrity. + * PRECONDITION: node must be connected (prev/next are non-null) + */ removeNode(node) { + // Connected nodes always have non-null prev/next + node.prev.next = node.next; + node.next.prev = node.prev; + } + /** + * Moves an existing node to the head position (marks as most recently used). + * This is the core LRU operation - accessed items become most recent. + */ moveToHead(node) { + this.removeNode(node); + this.addToHead(node); + } + /** + * Removes and returns the least recently used node (the one before tail). + * This is called during eviction when the cache exceeds capacity. + * PRECONDITION: cache is not empty (ensured by caller) + */ removeTail() { + const lastNode = this.tail.prev; + // tail.prev is always non-null and always LRUNode when cache is not empty + this.removeNode(lastNode); + return lastNode; + } + /** + * Sets a key-value pair in the cache. + * If the key exists, updates the value and moves to head. + * If new, adds at head and evicts from tail if necessary. + * + * Time Complexity: + * - O(1) for uniform item sizes + * - O(k) where k is the number of items evicted (can be O(N) for variable sizes) + */ set(key, value) { + const size = (this.calculateSize == null ? void 0 : this.calculateSize.call(this, value, key)) ?? 1; + if (size <= 0) { + throw new Error(`LRUCache: calculateSize returned ${size}, but size must be > 0. ` + `Items with size 0 would never be evicted, causing unbounded cache growth.`); + } + if (size > this.maxSize) { + console.warn('Single item size exceeds maxSize'); + return false; + } + const existing = this.cache.get(key); + if (existing) { + // Update existing node: adjust size and move to head (most recent) + existing.data = value; + this.totalSize = this.totalSize - existing.size + size; + existing.size = size; + this.moveToHead(existing); + } else { + // Add new node at head (most recent position) + const newNode = new LRUNode(key, value, size); + this.cache.set(key, newNode); + this.addToHead(newNode); + this.totalSize += size; + } + // Evict least recently used items until under capacity + while(this.totalSize > this.maxSize && this.cache.size > 0){ + const tail = this.removeTail(); + this.cache.delete(tail.key); + this.totalSize -= tail.size; + this.onEvict == null ? void 0 : this.onEvict.call(this, tail.key, tail.data); + } + return true; + } + /** + * Checks if a key exists in the cache. + * This is a pure query operation - does NOT update LRU order. + * + * Time Complexity: O(1) + */ has(key) { + return this.cache.has(key); + } + /** + * Retrieves a value by key and marks it as most recently used. + * Moving to head maintains the LRU property for future evictions. + * + * Time Complexity: O(1) + */ get(key) { + const node = this.cache.get(key); + if (!node) return undefined; + // Mark as most recently used by moving to head + this.moveToHead(node); + return node.data; + } + /** + * Returns an iterator over the cache entries. The order is outputted in the + * order of most recently used to least recently used. + */ *[Symbol.iterator]() { + let current = this.head.next; + while(current && current !== this.tail){ + // Between head and tail, current is always LRUNode + const node = current; + yield [ + node.key, + node.data + ]; + current = current.next; + } + } + /** + * Removes a specific key from the cache. + * Updates both the hash map and doubly-linked list. + * + * Note: This is an explicit removal and does NOT trigger the `onEvict` + * callback. Use this for intentional deletions where eviction tracking + * is not needed. + * + * Time Complexity: O(1) + */ remove(key) { + const node = this.cache.get(key); + if (!node) return; + this.removeNode(node); + this.cache.delete(key); + this.totalSize -= node.size; + } + /** + * Returns the number of items in the cache. + */ get size() { + return this.cache.size; + } + /** + * Returns the current total size of all cached items. + * This uses the custom size calculation if provided. + */ get currentSize() { + return this.totalSize; + } +} +}), +"[project]/node_modules/next/dist/esm/server/lib/patch-fetch.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "NEXT_PATCH_SYMBOL", + ()=>NEXT_PATCH_SYMBOL, + "createPatchedFetcher", + ()=>createPatchedFetcher, + "patchFetch", + ()=>patchFetch, + "validateRevalidate", + ()=>validateRevalidate, + "validateTags", + ()=>validateTags +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$request$2d$insights$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/request-insights.js [app-route] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$span$2d$store$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/span-store.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$request$2d$insights$2d$identity$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/request-insights-identity.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$dynamic$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/dynamic-rendering.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/dynamic-rendering-utils.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$dedupe$2d$fetch$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/dedupe-fetch.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/index.js [app-route] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/types.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/clone-response.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/staged-rendering.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$encode$2d$header$2d$safe$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/encode-header-safe.js [app-route] (ecmascript)"); +; +; +; +; +; +; +; +; +; +; +; +; +; +const isEdgeRuntime = ("TURBOPACK compile-time value", "nodejs") === 'edge'; +/** + * Whether fetch cache configuration needs to be processed for the current work + * unit before an origin fetch. Static prerender stores use it for dynamic + * access tracking. Cache scopes apply it to their own cache policy, regardless + * of which outer work unit created them. Development staged renders additionally + * coordinate dynamic fetches with the dynamic render stage. + */ function shouldProcessFetchConfigForWorkUnit(workUnitStore) { + if (!workUnitStore) { + return false; + } + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + return true; + case 'request': + return Boolean(("TURBOPACK compile-time value", "development") === 'development' && ("TURBOPACK compile-time value", true) && workUnitStore.stagedRendering); + case 'prerender-runtime': + case 'validation-client': + case 'build-time-generator': + return false; + default: + return workUnitStore; + } +} +const NEXT_PATCH_SYMBOL = Symbol.for('next-patch'); +function isFetchPatched() { + return globalThis[NEXT_PATCH_SYMBOL] === true; +} +function validateRevalidate(revalidateVal, route) { + try { + let normalizedRevalidate = undefined; + if (revalidateVal === false || revalidateVal === Infinity) { + // Unlike Infinity, INFINITE_CACHE survives JSON serialization (e.g. in + // the fetch cache). + normalizedRevalidate = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"]; + } else if (typeof revalidateVal === 'number' && !isNaN(revalidateVal) && revalidateVal > -1) { + normalizedRevalidate = revalidateVal; + } else if (typeof revalidateVal !== 'undefined') { + throw new Error(`Invalid revalidate value "${revalidateVal}" on "${route}", must be a non-negative number or false`); + } + return normalizedRevalidate; + } catch (err) { + // handle client component error from attempting to check revalidate value + if (err instanceof Error && err.message.includes('Invalid revalidate')) { + throw err; + } + return undefined; + } +} +function validateTags(tags, description) { + const validTags = []; + const invalidTags = []; + for(let i = 0; i < tags.length; i++){ + const tag = tags[i]; + if (typeof tag !== 'string') { + invalidTags.push({ + tag, + reason: 'invalid type, must be a string' + }); + } else if (tag.length > __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAG_MAX_LENGTH"]) { + invalidTags.push({ + tag, + reason: `exceeded max length of ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAG_MAX_LENGTH"]}` + }); + } else { + // Encode so a non-ASCII tag can be safely serialized into the + // `x-next-cache-tags` HTTP header without tripping Node's header + // validation. Length is checked on the raw input above. + validTags.push((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$encode$2d$header$2d$safe$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["encodeHeaderSafe"])(tag)); + } + if (validTags.length > __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAG_MAX_ITEMS"]) { + console.warn(`Warning: exceeded max tag count for ${description}, dropped tags:`, tags.slice(i).join(', ')); + break; + } + } + if (invalidTags.length > 0) { + console.warn(`Warning: invalid tags passed to ${description}: `); + for (const { tag, reason } of invalidTags){ + console.log(`tag: "${tag}" ${reason}`); + } + } + return validTags; +} +function trackFetchMetric(workStore, span, ctx) { + const metric = { + ...ctx, + end: performance.timeOrigin + performance.now(), + idx: workStore.nextFetchId || 0 + }; + span == null ? void 0 : span.setAttributes({ + 'http.status_code': metric.status, + 'next.fetch.idx': metric.idx, + 'next.fetch.cache_status': metric.cacheStatus, + 'next.fetch.cache_reason': metric.cacheReason + }); + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$span$2d$store$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isRequestInsightsEnabled"])()) { + const requestInsightsIdentity = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$request$2d$insights$2d$identity$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestInsightsIdentity"])(); + const requestInsightsRequestId = (requestInsightsIdentity == null ? void 0 : requestInsightsIdentity.requestId) ?? workStore.requestId; + if (requestInsightsRequestId) { + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$request$2d$insights$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__["recordRequestInsightFetch"])({ + requestId: requestInsightsRequestId, + kind: requestInsightsIdentity == null ? void 0 : requestInsightsIdentity.kind, + htmlRequestId: (requestInsightsIdentity == null ? void 0 : requestInsightsIdentity.htmlRequestId) ?? workStore.htmlRequestId, + route: workStore.route + }, { + url: metric.url, + method: metric.method, + statusCode: metric.status, + startTime: metric.start, + durationMs: metric.end - metric.start, + cacheStatus: metric.cacheStatus, + cacheReason: metric.cacheReason, + index: metric.idx + }); + } + } + if (!workStore.shouldTrackFetchMetrics) { + return; + } + workStore.fetchMetrics ??= []; + workStore.fetchMetrics.push(metric); +} +async function createCachedPrerenderResponse(res, cacheKey, incrementalCacheContext, incrementalCache, revalidate, handleUnlock) { + // We are prerendering at build time or revalidate time with cacheComponents so we + // need to buffer the response so we can guarantee it can be read in a + // microtask. + const bodyBuffer = await res.arrayBuffer(); + const fetchedData = { + headers: Object.fromEntries(res.headers.entries()), + body: Buffer.from(bodyBuffer).toString('base64'), + status: res.status, + url: res.url + }; + // We can skip setting the serverComponentsHmrCache because we aren't in dev + // mode. + if (incrementalCacheContext) { + await incrementalCache.set(cacheKey, { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].FETCH, + data: fetchedData, + revalidate + }, incrementalCacheContext); + } + await handleUnlock(); + // We return a new Response to the caller. + return new Response(bodyBuffer, { + headers: res.headers, + status: res.status, + statusText: res.statusText + }); +} +async function createCachedDynamicResponse(workStore, res, cacheKey, incrementalCacheContext, incrementalCache, serverComponentsHmrCache, revalidate, input, handleUnlock, signal) { + // We're cloning the response using this utility because there exists a bug in + // the undici library around response cloning. See the following pull request + // for more details: https://github.com/vercel/next.js/pull/73274 + const [cloned1, cloned2] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["cloneResponse"])(res); + // We are dynamically rendering including dev mode. We want to return the + // response to the caller as soon as possible because it might stream over a + // very long time. + const cacheSetPromise = cloned1.arrayBuffer().then(async (arrayBuffer)=>{ + const bodyBuffer = Buffer.from(arrayBuffer); + const fetchedData = { + headers: Object.fromEntries(cloned1.headers.entries()), + body: bodyBuffer.toString('base64'), + status: cloned1.status, + url: cloned1.url + }; + serverComponentsHmrCache == null ? void 0 : serverComponentsHmrCache.set(cacheKey, fetchedData); + if (incrementalCacheContext) { + await incrementalCache.set(cacheKey, { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].FETCH, + data: fetchedData, + revalidate + }, incrementalCacheContext); + } + }).catch((error)=>{ + // Don't warn if the request was aborted intentionally. + if (!(signal == null ? void 0 : signal.aborted)) { + console.warn(`Failed to set fetch cache`, input, error); + } + }).finally(handleUnlock); + const pendingRevalidateKey = `cache-set-${cacheKey}`; + const pendingRevalidates = workStore.pendingRevalidates ??= {}; + let pendingRevalidatePromise = Promise.resolve(); + if (pendingRevalidateKey in pendingRevalidates) { + // There is already a pending revalidate entry that we need to await to + // avoid race conditions. + pendingRevalidatePromise = pendingRevalidates[pendingRevalidateKey]; + } + pendingRevalidates[pendingRevalidateKey] = pendingRevalidatePromise.then(()=>cacheSetPromise).finally(()=>{ + // If the pending revalidate is not present in the store, then we have + // nothing to delete. + if (!(pendingRevalidates == null ? void 0 : pendingRevalidates[pendingRevalidateKey])) { + return; + } + delete pendingRevalidates[pendingRevalidateKey]; + }); + return cloned2; +} +function createPatchedFetcher(originFetch, { workAsyncStorage, workUnitAsyncStorage }) { + // Create the patched fetch function. + const patched = async function fetch(input, init) { + var _init_method, _init_next; + let url; + try { + url = new URL(input instanceof Request ? input.url : input); + url.username = ''; + url.password = ''; + } catch { + // Error caused by malformed URL should be handled by native fetch + url = undefined; + } + const fetchUrl = (url == null ? void 0 : url.href) ?? ''; + const method = (init == null ? void 0 : (_init_method = init.method) == null ? void 0 : _init_method.toUpperCase()) || 'GET'; + // Do create a new span trace for internal fetches in the + // non-verbose mode. + const isInternal = (init == null ? void 0 : (_init_next = init.next) == null ? void 0 : _init_next.internal) === true; + const hideSpan = process.env.NEXT_OTEL_FETCH_DISABLED === '1'; + // We don't track fetch metrics for internal fetches + // so it's not critical that we have a start time, as it won't be recorded. + // This is to workaround a flaky issue where performance APIs might + // not be available and will require follow-up investigation. + const fetchStart = isInternal ? undefined : performance.timeOrigin + performance.now(); + const workStore = workAsyncStorage.getStore(); + const workUnitStore = workUnitAsyncStorage.getStore(); + let cacheSignal = workUnitStore ? (0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["getCacheSignal"])(workUnitStore) : null; + if (cacheSignal) { + cacheSignal.beginRead(); + } + const result = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])().trace(isInternal ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextNodeServerSpan"].internalFetch : __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["AppRenderSpan"].fetch, { + hideSpan, + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SpanKind"].CLIENT, + spanName: [ + 'fetch', + method, + fetchUrl + ].filter(Boolean).join(' '), + attributes: { + 'http.url': fetchUrl, + 'http.method': method, + 'net.peer.name': url == null ? void 0 : url.hostname, + 'net.peer.port': (url == null ? void 0 : url.port) || undefined + } + }, async (span)=>{ + var _getRequestMeta; + // If this is an internal fetch, we should not do any special treatment. + if (isInternal) { + return originFetch(input, init); + } + // If the workStore is not available, we can't do any + // special treatment of fetch, therefore fallback to the original + // fetch implementation. + if (!workStore) { + return originFetch(input, init); + } + // We should also fallback to the original fetch implementation if we + // are in draft mode, it does not constitute a static generation. + if (workStore.isDraftMode) { + return originFetch(input, init); + } + const isRequestInput = input && typeof input === 'object' && typeof input.method === 'string'; + // With `fetch(new Request(url), init)`, native fetch lets `init` + // override the base Request. Merge them into a single effective Request + // so cacheability, the cache key, and the upstream request all describe + // the same thing. + if (isRequestInput && init) { + // `next` (revalidate/tags) is Next-specific and dropped by + // `new Request`, so keep it on `init` and move the rest onto input. + const { next, ...overrides } = init; + input = new Request(input, overrides); + init = next ? { + next + } : undefined; + } + const getRequestMeta = (field)=>{ + // If request input is present but init is not, retrieve from input first. + const value = init == null ? void 0 : init[field]; + return value || (isRequestInput ? input[field] : null); + }; + let finalRevalidate = undefined; + const getNextField = (field)=>{ + var _init_next, _init_next1, _input_next; + return typeof (init == null ? void 0 : (_init_next = init.next) == null ? void 0 : _init_next[field]) !== 'undefined' ? init == null ? void 0 : (_init_next1 = init.next) == null ? void 0 : _init_next1[field] : isRequestInput ? (_input_next = input.next) == null ? void 0 : _input_next[field] : undefined; + }; + // RequestInit doesn't keep extra fields e.g. next so it's + // only available if init is used separate + const originalFetchRevalidate = getNextField('revalidate'); + let currentFetchRevalidate = originalFetchRevalidate; + const tags = validateTags(getNextField('tags') || [], `fetch ${input.toString()}`); + let revalidateStore; + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + // TODO: Stop accumulating tags in client prerender. (fallthrough) + case 'prerender-client': + case 'validation-client': + case 'prerender-legacy': + case 'cache': + case 'private-cache': + revalidateStore = workUnitStore; + break; + case 'request': + case 'unstable-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + if (revalidateStore) { + if (Array.isArray(tags)) { + // Collect tags onto parent caches or parent prerenders. + const collectedTags = revalidateStore.tags ?? (revalidateStore.tags = []); + for (const tag of tags){ + if (!collectedTags.includes(tag)) { + collectedTags.push(tag); + } + } + } + } + const implicitTags = workUnitStore == null ? void 0 : workUnitStore.implicitTags; + let pageFetchCacheMode = workStore.fetchCache; + if (workUnitStore) { + switch(workUnitStore.type){ + case 'unstable-cache': + // Inside unstable-cache we treat it the same as force-no-store on + // the page. + pageFetchCacheMode = 'force-no-store'; + break; + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + case 'prerender-legacy': + case 'request': + case 'cache': + case 'private-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + const isUsingNoStore = !!workStore.isUnstableNoStore; + let currentFetchCacheConfig = getRequestMeta('cache'); + let cacheReason = ''; + let cacheWarning; + if (typeof currentFetchCacheConfig === 'string' && typeof currentFetchRevalidate !== 'undefined') { + // If the revalidate value conflicts with the cache value, we should warn the user and unset the conflicting values. + const isConflictingRevalidate = currentFetchCacheConfig === 'force-cache' && currentFetchRevalidate === 0 || // revalidate: >0 or revalidate: false and cache: no-store + currentFetchCacheConfig === 'no-store' && (currentFetchRevalidate > 0 || currentFetchRevalidate === false); + if (isConflictingRevalidate) { + cacheWarning = `Specified "cache: ${currentFetchCacheConfig}" and "revalidate: ${currentFetchRevalidate}", only one should be specified.`; + currentFetchCacheConfig = undefined; + currentFetchRevalidate = undefined; + } + } + const hasExplicitFetchCacheOptOut = currentFetchCacheConfig === 'no-cache' || currentFetchCacheConfig === 'no-store' || // the fetch isn't explicitly caching and the segment level cache config signals not to cache + // note: `pageFetchCacheMode` is also set by being in an unstable_cache context. + pageFetchCacheMode === 'force-no-store' || pageFetchCacheMode === 'only-no-store'; + // If no explicit fetch cache mode is set, but dynamic = `force-dynamic` is set, + // we shouldn't consider caching the fetch. This is because the `dynamic` cache + // is considered a "top-level" cache mode, whereas something like `fetchCache` is more + // fine-grained. Top-level modes are responsible for setting reasonable defaults for the + // other configurations. + const noFetchConfigAndForceDynamic = !pageFetchCacheMode && !currentFetchCacheConfig && !currentFetchRevalidate && workStore.forceDynamic; + if (// which will signal the cache to not revalidate + currentFetchCacheConfig === 'force-cache' && typeof currentFetchRevalidate === 'undefined') { + currentFetchRevalidate = false; + } else if (hasExplicitFetchCacheOptOut || noFetchConfigAndForceDynamic) { + currentFetchRevalidate = 0; + } + if (currentFetchCacheConfig === 'no-cache' || currentFetchCacheConfig === 'no-store') { + cacheReason = `cache: ${currentFetchCacheConfig}`; + } + finalRevalidate = validateRevalidate(currentFetchRevalidate, workStore.route); + const _headers = getRequestMeta('headers'); + const initHeaders = typeof (_headers == null ? void 0 : _headers.get) === 'function' ? _headers : new Headers(_headers || {}); + const hasUnCacheableHeader = initHeaders.get('authorization') || initHeaders.get('cookie'); + const isUnCacheableMethod = ![ + 'get', + 'head' + ].includes(((_getRequestMeta = getRequestMeta('method')) == null ? void 0 : _getRequestMeta.toLowerCase()) || 'get'); + /** + * We automatically disable fetch caching under the following conditions: + * - Fetch cache configs are not set. Specifically: + * - A page fetch cache mode is not set (export const fetchCache=...) + * - A fetch cache mode is not set in the fetch call (fetch(url, { cache: ... })) + * or the fetch cache mode is set to 'default' + * - A fetch revalidate value is not set in the fetch call (fetch(url, { revalidate: ... })) + * - OR the fetch comes after a configuration that triggered dynamic rendering (e.g., reading cookies()) + * and the fetch was considered uncacheable (e.g., POST method or has authorization headers) + */ const hasNoExplicitCacheConfig = pageFetchCacheMode == undefined && // eslint-disable-next-line eqeqeq + (currentFetchCacheConfig == undefined || // when considering whether to opt into the default "no-cache" fetch semantics, + // a "default" cache config should be treated the same as no cache config + currentFetchCacheConfig === 'default') && // eslint-disable-next-line eqeqeq + currentFetchRevalidate == undefined; + let autoNoCache = Boolean((hasUnCacheableHeader || isUnCacheableMethod) && (revalidateStore == null ? void 0 : revalidateStore.revalidate) === 0); + let isImplicitBuildTimeCache = false; + if (!autoNoCache && hasNoExplicitCacheConfig) { + // We don't enable automatic no-cache behavior during build-time + // prerendering so that we can still leverage the fetch cache between + // export workers. + if (workStore.isBuildTimePrerendering) { + isImplicitBuildTimeCache = true; + } else { + autoNoCache = true; + } + } + // If we have no cache config, and we're in Dynamic I/O prerendering, + // it'll be a dynamic call. We don't have to issue that dynamic call. + if (hasNoExplicitCacheConfig && workUnitStore !== undefined) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-runtime': + // While we don't want to do caching in the client scope we know the + // fetch will be dynamic for cacheComponents so we may as well avoid the + // call here. (fallthrough) + case 'prerender-client': + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["makeDynamicHangingPromise"])(workUnitStore.renderSignal, workStore.route, 'fetch()'); + case 'validation-client': + break; + case 'request': + if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering) { + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + await workUnitStore.stagedRendering.waitForStage(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic); + } + break; + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + switch(pageFetchCacheMode){ + case 'force-no-store': + { + cacheReason = 'fetchCache = force-no-store'; + break; + } + case 'only-no-store': + { + if (currentFetchCacheConfig === 'force-cache' || typeof finalRevalidate !== 'undefined' && finalRevalidate > 0) { + throw new Error(`cache: 'force-cache' used on fetch for ${fetchUrl} with 'export const fetchCache = 'only-no-store'`); + } + cacheReason = 'fetchCache = only-no-store'; + break; + } + case 'only-cache': + { + if (currentFetchCacheConfig === 'no-store') { + throw new Error(`cache: 'no-store' used on fetch for ${fetchUrl} with 'export const fetchCache = 'only-cache'`); + } + break; + } + case 'force-cache': + { + if (typeof currentFetchRevalidate === 'undefined' || currentFetchRevalidate === 0) { + cacheReason = 'fetchCache = force-cache'; + finalRevalidate = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"]; + } + break; + } + case 'default-cache': + case 'default-no-store': + case 'auto': + case undefined: + break; + default: + pageFetchCacheMode; + } + if (typeof finalRevalidate === 'undefined') { + if (pageFetchCacheMode === 'default-cache' && !isUsingNoStore) { + finalRevalidate = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"]; + cacheReason = 'fetchCache = default-cache'; + } else if (pageFetchCacheMode === 'default-no-store') { + finalRevalidate = 0; + cacheReason = 'fetchCache = default-no-store'; + } else if (isUsingNoStore) { + finalRevalidate = 0; + cacheReason = 'noStore call'; + } else if (autoNoCache) { + finalRevalidate = 0; + cacheReason = 'auto no cache'; + } else { + // TODO: should we consider this case an invariant? + cacheReason = 'auto cache'; + finalRevalidate = revalidateStore ? revalidateStore.revalidate : __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"]; + } + } else if (!cacheReason) { + cacheReason = `revalidate: ${finalRevalidate}`; + } + if (// `revalidate: 0` values + !(workStore.forceStatic && finalRevalidate === 0) && // we don't consider autoNoCache to switch to dynamic for ISR + !autoNoCache && // If the revalidate value isn't currently set or the value is less + // than the current revalidate value, we should update the revalidate + // value. + revalidateStore && finalRevalidate < revalidateStore.revalidate) { + // If we were setting the revalidate value to 0, we should try to + // postpone instead first. + if (finalRevalidate === 0) { + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'prerender-runtime': + // If we're in an instant validation, a dynamic fetch won't + // have time to resolve during the validation prerender anyway, + // so we leave it hanging. This can cause false negatives in shared parents, + // but we accept that for now, because client data fetching is non-idiomatic. + // eslint-disable-next-line no-fallthrough + case 'validation-client': + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["makeDynamicHangingPromise"])(workUnitStore.renderSignal, workStore.route, 'fetch()'); + case 'request': + if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering) { + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + await workUnitStore.stagedRendering.waitForStage(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic); + } + break; + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$dynamic$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["markCurrentScopeAsDynamic"])(workStore, workUnitStore, `revalidate: 0 fetch ${input} ${workStore.route}`); + } + // We only want to set the revalidate store's revalidate time if it + // was explicitly set for the fetch call, i.e. + // originalFetchRevalidate. + if (revalidateStore && originalFetchRevalidate === finalRevalidate) { + revalidateStore.revalidate = finalRevalidate; + } + } + const isCacheableRevalidate = typeof finalRevalidate === 'number' && finalRevalidate > 0; + let cacheKey; + const { incrementalCache } = workStore; + let isHmrRefresh = false; + let serverComponentsHmrCache; + if (workUnitStore) { + switch(workUnitStore.type){ + case 'request': + case 'cache': + case 'private-cache': + isHmrRefresh = workUnitStore.isHmrRefresh ?? false; + serverComponentsHmrCache = workUnitStore.serverComponentsHmrCache; + break; + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + case 'prerender-legacy': + case 'unstable-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + if (incrementalCache && (isCacheableRevalidate || serverComponentsHmrCache)) { + try { + cacheKey = await incrementalCache.generateCacheKey(fetchUrl, isRequestInput ? input : init); + } catch (cause) { + console.error(`Failed to generate cache key for`, input, cause); + } + } + const fetchIdx = workStore.nextFetchId ?? 1; + workStore.nextFetchId = fetchIdx + 1; + let handleUnlock = ()=>{}; + const doOriginalFetch = async (isStale, cacheReasonOverride)=>{ + const requestInputFields = [ + 'cache', + 'credentials', + 'headers', + 'integrity', + 'keepalive', + 'method', + 'mode', + 'redirect', + 'referrer', + 'referrerPolicy', + 'window', + 'duplex', + // don't pass through signal when revalidating + ...isStale ? [] : [ + 'signal' + ] + ]; + if (isRequestInput) { + const reqInput = input; + const reqOptions = { + body: reqInput._ogBody || reqInput.body + }; + for (const field of requestInputFields){ + // @ts-expect-error custom fields + reqOptions[field] = reqInput[field]; + } + input = new Request(reqInput.url, reqOptions); + } else if (init) { + const { _ogBody, body, signal, ...otherInput } = init; + init = { + ...otherInput, + body: _ogBody || body, + signal: isStale ? undefined : signal + }; + } + // add metadata to init without editing the original + const clonedInit = { + ...init, + next: { + ...init == null ? void 0 : init.next, + fetchType: 'origin', + fetchIdx + } + }; + return originFetch(input, clonedInit).then(async (res)=>{ + if (!isStale && fetchStart) { + trackFetchMetric(workStore, span, { + start: fetchStart, + url: fetchUrl, + cacheReason: cacheReasonOverride || cacheReason, + cacheStatus: finalRevalidate === 0 || cacheReasonOverride ? 'skip' : 'miss', + cacheWarning, + status: res.status, + method: clonedInit.method || 'GET' + }); + } + if (res.status === 200 && incrementalCache && cacheKey && (isCacheableRevalidate || serverComponentsHmrCache)) { + const normalizedRevalidate = finalRevalidate >= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"] ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CACHE_ONE_YEAR_SECONDS"] : finalRevalidate; + const incrementalCacheConfig = isCacheableRevalidate ? { + fetchCache: true, + fetchUrl, + fetchIdx, + tags, + isImplicitBuildTimeCache + } : undefined; + switch(workUnitStore == null ? void 0 : workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + return createCachedPrerenderResponse(res, cacheKey, incrementalCacheConfig, incrementalCache, normalizedRevalidate, handleUnlock); + case 'request': + if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering && workUnitStore.cacheSignal && isCacheableRevalidate) { + // We're filling caches for a staged render with an + // explicit cache config, so we need to wait for the + // response to finish instead of streaming. For HMR-only + // caching (no explicit revalidate), we fall through to + // createCachedDynamicResponse which handles streaming + // and abort gracefully. + return createCachedPrerenderResponse(res, cacheKey, incrementalCacheConfig, incrementalCache, normalizedRevalidate, handleUnlock); + } + // fallthrough + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + case undefined: + return createCachedDynamicResponse(workStore, res, cacheKey, incrementalCacheConfig, incrementalCache, serverComponentsHmrCache, normalizedRevalidate, input, handleUnlock, getRequestMeta('signal')); + default: + workUnitStore; + } + } + // we had response that we determined shouldn't be cached so we return it + // and don't cache it. This also needs to unlock the cache lock we acquired. + await handleUnlock(); + return res; + }).catch((error)=>{ + handleUnlock(); + throw error; + }); + }; + let cacheReasonOverride; + let isForegroundRevalidate = false; + let isHmrRefreshCache = false; + if (cacheKey && incrementalCache) { + let cachedFetchData; + if (isHmrRefresh && serverComponentsHmrCache) { + cachedFetchData = serverComponentsHmrCache.get(cacheKey); + isHmrRefreshCache = true; + } + if (isCacheableRevalidate && !cachedFetchData) { + handleUnlock = await incrementalCache.lock(cacheKey); + const entry = workStore.isOnDemandRevalidate ? null : await incrementalCache.get(cacheKey, { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].FETCH, + revalidate: finalRevalidate, + fetchUrl, + fetchIdx, + tags, + softTags: implicitTags == null ? void 0 : implicitTags.tags + }); + if (hasNoExplicitCacheConfig && workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'validation-client': + case 'prerender-runtime': + // We sometimes use the cache to dedupe fetches that do not + // specify a cache configuration. In these cases we want to + // make sure we still exclude them from prerenders if + // cacheComponents is on so we introduce an artificial task boundary + // here. + await getTimeoutBoundary(); + break; + case 'request': + if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering) { + await workUnitStore.stagedRendering.waitForStage(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic); + } + break; + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + if (entry) { + await handleUnlock(); + } else { + // in dev, incremental cache response will be null in case the browser adds `cache-control: no-cache` in the request headers + // TODO: it seems like we also hit this after revalidates in dev? + cacheReasonOverride = 'cache-control: no-cache (hard refresh)'; + } + if ((entry == null ? void 0 : entry.value) && entry.value.kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].FETCH) { + // If the consumer will persist this result in a server cache, + // wait for fresh data so it doesn't persist a stale value. + if ((0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["willConsumerServerCache"])(workUnitStore) && entry.isStale) { + isForegroundRevalidate = true; + } else { + if (entry.isStale) { + workStore.pendingRevalidates ??= {}; + if (!workStore.pendingRevalidates[cacheKey]) { + const pendingRevalidate = doOriginalFetch(true).then(async (response)=>({ + body: await response.arrayBuffer(), + headers: response.headers, + status: response.status, + statusText: response.statusText + })).finally(()=>{ + workStore.pendingRevalidates ??= {}; + delete workStore.pendingRevalidates[cacheKey || '']; + }); + // Attach the empty catch here so we don't get a "unhandled + // promise rejection" warning. + pendingRevalidate.catch(console.error); + workStore.pendingRevalidates[cacheKey] = pendingRevalidate; + } + } + cachedFetchData = entry.value.data; + } + } + } + if (cachedFetchData) { + if (fetchStart) { + trackFetchMetric(workStore, span, { + start: fetchStart, + url: fetchUrl, + cacheReason, + cacheStatus: isHmrRefreshCache ? 'hmr' : 'hit', + cacheWarning, + status: cachedFetchData.status || 200, + method: (init == null ? void 0 : init.method) || 'GET' + }); + } + const response = new Response(Buffer.from(cachedFetchData.body, 'base64'), { + headers: cachedFetchData.headers, + status: cachedFetchData.status + }); + Object.defineProperty(response, 'url', { + value: cachedFetchData.url + }); + return response; + } + } + if (init && typeof init === 'object' && shouldProcessFetchConfigForWorkUnit(workUnitStore)) { + const { cache } = init; + // Delete `cache` property as Cloudflare Workers will throw an error + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + if (cache === 'no-store') { + // If enabled, we should bail out of static generation. + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'prerender-runtime': + case 'validation-client': + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["makeDynamicHangingPromise"])(workUnitStore.renderSignal, workStore.route, 'fetch()'); + case 'request': + if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering) { + if (cacheSignal) { + cacheSignal.endRead(); + cacheSignal = null; + } + await workUnitStore.stagedRendering.waitForStage(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic); + } + break; + case 'prerender-legacy': + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$dynamic$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["markCurrentScopeAsDynamic"])(workStore, workUnitStore, `no-store fetch ${input} ${workStore.route}`); + } + const hasNextConfig = 'next' in init; + const { next = {} } = init; + if (typeof next.revalidate === 'number' && revalidateStore && next.revalidate < revalidateStore.revalidate) { + if (next.revalidate === 0) { + // If enabled, we should bail out of static generation. + if (workUnitStore) { + switch(workUnitStore.type){ + case 'prerender': + case 'prerender-client': + case 'prerender-runtime': + case 'validation-client': + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["makeDynamicHangingPromise"])(workUnitStore.renderSignal, workStore.route, 'fetch()'); + case 'request': + if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering) { + await workUnitStore.stagedRendering.waitForStage(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic); + } + break; + case 'cache': + case 'private-cache': + case 'unstable-cache': + case 'prerender-legacy': + case 'build-time-generator': + break; + default: + workUnitStore; + } + } + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$dynamic$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["markCurrentScopeAsDynamic"])(workStore, workUnitStore, `revalidate: 0 fetch ${input} ${workStore.route}`); + } + if (!workStore.forceStatic || next.revalidate !== 0) { + revalidateStore.revalidate = next.revalidate; + } + } + if (hasNextConfig) delete init.next; + } + // if we are revalidating the whole page via time or on-demand and + // the fetch cache entry is stale we should still de-dupe the + // origin hit if it's a cache-able entry + if (cacheKey && isForegroundRevalidate) { + const pendingRevalidateKey = cacheKey; + workStore.pendingRevalidates ??= {}; + let pendingRevalidate = workStore.pendingRevalidates[pendingRevalidateKey]; + if (pendingRevalidate) { + const revalidatedResult = await pendingRevalidate; + return new Response(revalidatedResult.body, { + headers: revalidatedResult.headers, + status: revalidatedResult.status, + statusText: revalidatedResult.statusText + }); + } + // We used to just resolve the Response and clone it however for + // static generation with cacheComponents we need the response to be able to + // be resolved in a microtask and cloning the response will never have + // a body that can resolve in a microtask in node (as observed through + // experimentation) So instead we await the body and then when it is + // available we construct manually cloned Response objects with the + // body as an ArrayBuffer. This will be resolvable in a microtask + // making it compatible with cacheComponents. + const pendingResponse = doOriginalFetch(true, cacheReasonOverride) // We're cloning the response using this utility because there + // exists a bug in the undici library around response cloning. + // See the following pull request for more details: + // https://github.com/vercel/next.js/pull/73274 + .then(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["cloneResponse"]); + pendingRevalidate = pendingResponse.then(async (responses)=>{ + const response = responses[0]; + return { + body: await response.arrayBuffer(), + headers: response.headers, + status: response.status, + statusText: response.statusText + }; + }).finally(()=>{ + var _workStore_pendingRevalidates; + // If the pending revalidate is not present in the store, then + // we have nothing to delete. + if (!((_workStore_pendingRevalidates = workStore.pendingRevalidates) == null ? void 0 : _workStore_pendingRevalidates[pendingRevalidateKey])) { + return; + } + delete workStore.pendingRevalidates[pendingRevalidateKey]; + }); + // Attach the empty catch here so we don't get a "unhandled promise + // rejection" warning + pendingRevalidate.catch(()=>{}); + workStore.pendingRevalidates[pendingRevalidateKey] = pendingRevalidate; + return pendingResponse.then((responses)=>responses[1]); + } else { + return doOriginalFetch(false, cacheReasonOverride); + } + }); + if (cacheSignal) { + try { + return await result; + } finally{ + if (cacheSignal) { + cacheSignal.endRead(); + } + } + } + return result; + }; + // Attach the necessary properties to the patched fetch function. + // We don't use this to determine if the fetch function has been patched, + // but for external consumers to determine if the fetch function has been + // patched. + patched.__nextPatched = true; + patched.__nextGetStaticStore = ()=>workAsyncStorage; + patched._nextOriginalFetch = originFetch; + globalThis[NEXT_PATCH_SYMBOL] = true; + // Assign the function name also as a name property, so that it's preserved + // even when mangling is enabled. + Object.defineProperty(patched, 'name', { + value: 'fetch', + writable: false + }); + return patched; +} +function patchFetch(options) { + // If we've already patched fetch, we should not patch it again. + if (isFetchPatched()) return; + // Grab the original fetch function. We'll attach this so we can use it in + // the patched fetch function. + const original = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$dedupe$2d$fetch$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDedupeFetch"])(globalThis.fetch); + // Set the global fetch to the patched fetch. + globalThis.fetch = createPatchedFetcher(original, options); +} +let currentTimeoutBoundary = null; +function getTimeoutBoundary() { + if (!currentTimeoutBoundary) { + currentTimeoutBoundary = new Promise((r)=>{ + setTimeout(()=>{ + currentTimeoutBoundary = null; + r(); + }, 0); + }); + } + return currentTimeoutBoundary; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/route-cache-key.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ROUTE_CACHE_DIRECTORY", + ()=>ROUTE_CACHE_DIRECTORY, + "getResponseCacheOwner", + ()=>getResponseCacheOwner, + "getRouteCacheKey", + ()=>getRouteCacheKey, + "isRouteCacheOwner", + ()=>isRouteCacheOwner +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$normalize$2d$page$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/page-path/normalize-page-path.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$normalize$2d$locale$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$built$2f$app$2f$app$2d$pathname$2d$normalizer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/normalizers/built/app/app-pathname-normalizer.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/route-kind.js [app-route] (ecmascript)"); +; +; +; +; +; +const ROUTE_CACHE_DIRECTORY = 'route-cache'; +const appPathnameNormalizer = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$built$2f$app$2f$app$2d$pathname$2d$normalizer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["AppPathnameNormalizer"](); +function getResponseCacheOwner(definition) { + return { + kind: definition.kind, + // Pages module names can include a trailing /index in Turbopack. Their + // pathname matches the manifest's source in both bundlers. App modules + // retain groups and parallel slots in their cache identity. + sourceRoute: definition.kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].PAGES ? definition.pathname : definition.page + }; +} +function isRouteCacheOwner(pathname, owner, prerender, locales) { + if (!prerender) { + return false; + } + // Pages have JSON data routes, App Pages have RSC data routes, and App + // Route Handlers have no separate data route. + const kind = prerender.dataRoute === null ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].APP_ROUTE : prerender.dataRoute.endsWith('.json') ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].PAGES : prerender.dataRoute.endsWith('.rsc') ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].APP_PAGE : undefined; + if (kind !== owner.kind) { + return false; + } + const source = 'srcRoute' in prerender ? prerender.srcRoute : prerender.fallbackSourceRoute; + const prerenderOwner = source ?? (kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].PAGES ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$normalize$2d$locale$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeLocalePath"])(pathname, locales).pathname : pathname); + return prerenderOwner === (kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].PAGES ? owner.sourceRoute : appPathnameNormalizer.normalize(owner.sourceRoute)); +} +function getRouteCacheKey(pathname, owner) { + if (!owner) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('Response cache requires a source route'); + } + const { sourceRoute } = owner; + let source; + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + const { createHash } = __turbopack_context__.r("[externals]/crypto [external] (crypto, cjs)"); + source = createHash('sha256').update(sourceRoute).digest('hex'); + } + return `/${ROUTE_CACHE_DIRECTORY}/${owner.kind}/${source}/$${(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$normalize$2d$page$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizePagePath"])(pathname)}`; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "AppRenderSpan", + ()=>AppRenderSpan, + "AppRouteRouteHandlersSpan", + ()=>AppRouteRouteHandlersSpan, + "AppRouteRouteModuleSpan", + ()=>AppRouteRouteModuleSpan, + "BaseServerSpan", + ()=>BaseServerSpan, + "DevBundlerServiceSpan", + ()=>DevBundlerServiceSpan, + "InstrumentationSpan", + ()=>InstrumentationSpan, + "LoadComponentsSpan", + ()=>LoadComponentsSpan, + "LogSpanAllowList", + ()=>LogSpanAllowList, + "MiddlewareSpan", + ()=>MiddlewareSpan, + "NextNodeServerSpan", + ()=>NextNodeServerSpan, + "NextServerSpan", + ()=>NextServerSpan, + "NextVanillaSpanAllowlist", + ()=>NextVanillaSpanAllowlist, + "NodeSpan", + ()=>NodeSpan, + "RenderSpan", + ()=>RenderSpan, + "ResolveMetadataSpan", + ()=>ResolveMetadataSpan, + "RouteModuleSpan", + ()=>RouteModuleSpan, + "RouterSpan", + ()=>RouterSpan, + "StartServerSpan", + ()=>StartServerSpan +]); +/** + * Contains predefined constants for the trace span name in next/server. + * + * Currently, next/server/tracer is internal implementation only for tracking + * next.js's implementation only with known span names defined here. + **/ // eslint typescript has a bug with TS enums +var BaseServerSpan = /*#__PURE__*/ function(BaseServerSpan) { + BaseServerSpan["handleRequest"] = "BaseServer.handleRequest"; + BaseServerSpan["run"] = "BaseServer.run"; + BaseServerSpan["pipe"] = "BaseServer.pipe"; + BaseServerSpan["getStaticHTML"] = "BaseServer.getStaticHTML"; + BaseServerSpan["render"] = "BaseServer.render"; + BaseServerSpan["renderToResponseWithComponents"] = "BaseServer.renderToResponseWithComponents"; + BaseServerSpan["renderToResponse"] = "BaseServer.renderToResponse"; + BaseServerSpan["renderToHTML"] = "BaseServer.renderToHTML"; + BaseServerSpan["renderError"] = "BaseServer.renderError"; + BaseServerSpan["renderErrorToResponse"] = "BaseServer.renderErrorToResponse"; + BaseServerSpan["renderErrorToHTML"] = "BaseServer.renderErrorToHTML"; + BaseServerSpan["render404"] = "BaseServer.render404"; + return BaseServerSpan; +}(BaseServerSpan || {}); +var LoadComponentsSpan = /*#__PURE__*/ function(LoadComponentsSpan) { + LoadComponentsSpan["loadDefaultErrorComponents"] = "LoadComponents.loadDefaultErrorComponents"; + LoadComponentsSpan["loadComponents"] = "LoadComponents.loadComponents"; + LoadComponentsSpan["loadRouteModule"] = "LoadComponents.loadRouteModule"; + return LoadComponentsSpan; +}(LoadComponentsSpan || {}); +var InstrumentationSpan = /*#__PURE__*/ function(InstrumentationSpan) { + InstrumentationSpan["loadModule"] = "Instrumentation.loadModule"; + InstrumentationSpan["register"] = "Instrumentation.register"; + return InstrumentationSpan; +}(InstrumentationSpan || {}); +var NextServerSpan = /*#__PURE__*/ function(NextServerSpan) { + NextServerSpan["getRequestHandler"] = "NextServer.getRequestHandler"; + NextServerSpan["getRequestHandlerWithMetadata"] = "NextServer.getRequestHandlerWithMetadata"; + NextServerSpan["getServer"] = "NextServer.getServer"; + NextServerSpan["getServerRequestHandler"] = "NextServer.getServerRequestHandler"; + NextServerSpan["createServer"] = "createServer.createServer"; + return NextServerSpan; +}(NextServerSpan || {}); +var NextNodeServerSpan = /*#__PURE__*/ function(NextNodeServerSpan) { + NextNodeServerSpan["compression"] = "NextNodeServer.compression"; + NextNodeServerSpan["getBuildId"] = "NextNodeServer.getBuildId"; + NextNodeServerSpan["createComponentTree"] = "NextNodeServer.createComponentTree"; + NextNodeServerSpan["clientComponentLoading"] = "NextNodeServer.clientComponentLoading"; + NextNodeServerSpan["getLayoutOrPageModule"] = "NextNodeServer.getLayoutOrPageModule"; + NextNodeServerSpan["generateStaticRoutes"] = "NextNodeServer.generateStaticRoutes"; + NextNodeServerSpan["generateFsStaticRoutes"] = "NextNodeServer.generateFsStaticRoutes"; + NextNodeServerSpan["generatePublicRoutes"] = "NextNodeServer.generatePublicRoutes"; + NextNodeServerSpan["generateImageRoutes"] = "NextNodeServer.generateImageRoutes.route"; + NextNodeServerSpan["sendRenderResult"] = "NextNodeServer.sendRenderResult"; + NextNodeServerSpan["proxyRequest"] = "NextNodeServer.proxyRequest"; + NextNodeServerSpan["runApi"] = "NextNodeServer.runApi"; + NextNodeServerSpan["render"] = "NextNodeServer.render"; + NextNodeServerSpan["renderHTML"] = "NextNodeServer.renderHTML"; + NextNodeServerSpan["imageOptimizer"] = "NextNodeServer.imageOptimizer"; + NextNodeServerSpan["getPagePath"] = "NextNodeServer.getPagePath"; + NextNodeServerSpan["getRoutesManifest"] = "NextNodeServer.getRoutesManifest"; + NextNodeServerSpan["findPageComponents"] = "NextNodeServer.findPageComponents"; + NextNodeServerSpan["getFontManifest"] = "NextNodeServer.getFontManifest"; + NextNodeServerSpan["getServerComponentManifest"] = "NextNodeServer.getServerComponentManifest"; + NextNodeServerSpan["getRequestHandler"] = "NextNodeServer.getRequestHandler"; + NextNodeServerSpan["renderToHTML"] = "NextNodeServer.renderToHTML"; + NextNodeServerSpan["renderError"] = "NextNodeServer.renderError"; + NextNodeServerSpan["renderErrorToHTML"] = "NextNodeServer.renderErrorToHTML"; + NextNodeServerSpan["render404"] = "NextNodeServer.render404"; + NextNodeServerSpan["startResponse"] = "NextNodeServer.startResponse"; + // nested inner span, does not require parent scope name + NextNodeServerSpan["route"] = "route"; + NextNodeServerSpan["onProxyReq"] = "onProxyReq"; + NextNodeServerSpan["apiResolver"] = "apiResolver"; + NextNodeServerSpan["internalFetch"] = "internalFetch"; + return NextNodeServerSpan; +}(NextNodeServerSpan || {}); +var StartServerSpan = /*#__PURE__*/ function(StartServerSpan) { + StartServerSpan["startServer"] = "startServer.startServer"; + return StartServerSpan; +}(StartServerSpan || {}); +var RenderSpan = /*#__PURE__*/ function(RenderSpan) { + RenderSpan["getServerSideProps"] = "Render.getServerSideProps"; + RenderSpan["getStaticProps"] = "Render.getStaticProps"; + RenderSpan["renderToString"] = "Render.renderToString"; + RenderSpan["renderDocument"] = "Render.renderDocument"; + RenderSpan["createBodyResult"] = "Render.createBodyResult"; + return RenderSpan; +}(RenderSpan || {}); +var AppRenderSpan = /*#__PURE__*/ function(AppRenderSpan) { + AppRenderSpan["renderToString"] = "AppRender.renderToString"; + AppRenderSpan["renderToReadableStream"] = "AppRender.renderToReadableStream"; + AppRenderSpan["getBodyResult"] = "AppRender.getBodyResult"; + AppRenderSpan["fetch"] = "AppRender.fetch"; + AppRenderSpan["waitShellReady"] = "AppRender.waitShellReady"; + AppRenderSpan["renderToNodeFizzStream"] = "AppRender.renderToNodeFizzStream"; + AppRenderSpan["instantInsights"] = "AppRender.instantInsights"; + AppRenderSpan["instantInsightsPrepareValidation"] = "AppRender.instantInsights.prepareValidation"; + AppRenderSpan["instantInsightsRunValidation"] = "AppRender.instantInsights.runValidation"; + return AppRenderSpan; +}(AppRenderSpan || {}); +var DevBundlerServiceSpan = /*#__PURE__*/ function(DevBundlerServiceSpan) { + DevBundlerServiceSpan["ensurePage"] = "DevBundlerService.ensurePage"; + return DevBundlerServiceSpan; +}(DevBundlerServiceSpan || {}); +var RouterSpan = /*#__PURE__*/ function(RouterSpan) { + RouterSpan["executeRoute"] = "Router.executeRoute"; + return RouterSpan; +}(RouterSpan || {}); +var NodeSpan = /*#__PURE__*/ function(NodeSpan) { + NodeSpan["runHandler"] = "Node.runHandler"; + return NodeSpan; +}(NodeSpan || {}); +var AppRouteRouteHandlersSpan = /*#__PURE__*/ function(AppRouteRouteHandlersSpan) { + AppRouteRouteHandlersSpan["runHandler"] = "AppRouteRouteHandlers.runHandler"; + return AppRouteRouteHandlersSpan; +}(AppRouteRouteHandlersSpan || {}); +var AppRouteRouteModuleSpan = /*#__PURE__*/ function(AppRouteRouteModuleSpan) { + AppRouteRouteModuleSpan["loadUserland"] = "AppRouteRouteModule.loadUserland"; + return AppRouteRouteModuleSpan; +}(AppRouteRouteModuleSpan || {}); +var RouteModuleSpan = /*#__PURE__*/ function(RouteModuleSpan) { + RouteModuleSpan["prepare"] = "RouteModule.prepare"; + RouteModuleSpan["loadManifests"] = "RouteModule.loadManifests"; + return RouteModuleSpan; +}(RouteModuleSpan || {}); +var ResolveMetadataSpan = /*#__PURE__*/ function(ResolveMetadataSpan) { + ResolveMetadataSpan["generateMetadata"] = "ResolveMetadata.generateMetadata"; + ResolveMetadataSpan["generateViewport"] = "ResolveMetadata.generateViewport"; + return ResolveMetadataSpan; +}(ResolveMetadataSpan || {}); +var MiddlewareSpan = /*#__PURE__*/ function(MiddlewareSpan) { + MiddlewareSpan["execute"] = "Middleware.execute"; + return MiddlewareSpan; +}(MiddlewareSpan || {}); +const NextVanillaSpanAllowlist = new Set([ + "Middleware.execute", + "BaseServer.handleRequest", + "Render.getServerSideProps", + "Render.getStaticProps", + "AppRender.fetch", + "AppRender.getBodyResult", + "LoadComponents.loadRouteModule", + "Render.renderDocument", + "Node.runHandler", + "AppRouteRouteHandlers.runHandler", + "AppRouteRouteModule.loadUserland", + "RouteModule.prepare", + "Instrumentation.loadModule", + "Instrumentation.register", + "ResolveMetadata.generateMetadata", + "ResolveMetadata.generateViewport", + "NextNodeServer.createComponentTree", + "NextNodeServer.findPageComponents", + "NextNodeServer.getLayoutOrPageModule", + "NextNodeServer.startResponse", + "NextNodeServer.clientComponentLoading" +]); +const LogSpanAllowList = new Set([ + "NextNodeServer.findPageComponents", + "NextNodeServer.createComponentTree", + "NextNodeServer.clientComponentLoading" +]); +; +}), +"[project]/node_modules/next/dist/esm/server/lib/trace/request-insights-identity.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getRequestInsightsIdentity", + ()=>getRequestInsightsIdentity, + "runWithRequestInsightsIdentity", + ()=>runWithRequestInsightsIdentity +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$async$2d$local$2d$storage$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/async-local-storage.js [app-route] (ecmascript)"); +; +// This storage covers the part of BaseServer request handling that runs before +// App Render creates workAsyncStorage. Once available, workStore remains the +// primary identity source for locally recorded spans. +function getRequestInsightsIdentityStorage() { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$async$2d$local$2d$storage$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getOrCreateGlobalAsyncLocalStorage"])('request-insights-identity-storage'); +} +function runWithRequestInsightsIdentity(identity, fn) { + return getRequestInsightsIdentityStorage().run(identity, fn); +} +function getRequestInsightsIdentity() { + return getRequestInsightsIdentityStorage().getStore(); +} +}), +"[project]/node_modules/next/dist/esm/server/lib/trace/request-insights.js [app-route] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "clearRequestInsightsForTest", + ()=>clearRequestInsightsForTest, + "getRequestInsightsSnapshot", + ()=>getRequestInsightsSnapshot, + "recordRequestInsightFetch", + ()=>recordRequestInsightFetch, + "recordRequestInsightSpan", + ()=>recordRequestInsightSpan, + "subscribeRequestInsights", + ()=>subscribeRequestInsights +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$request$2d$insights$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/request-insights.js [app-route] (ecmascript)"); +; +; +const MAX_REQUEST_INSIGHTS = 100; +const REQUEST_INSIGHTS_STORE_KEY = Symbol.for('@next/request-insights-store'); +const CLIENT_COMPONENT_LOADING_SPAN_TYPE = 'NextNodeServer.clientComponentLoading'; +const REDACTED_VALUE = 'redacted'; +const SAFE_SPAN_ATTRIBUTE_KEYS = new Set([ + 'http.method', + 'http.route', + 'http.status_code', + 'http.url', + 'net.peer.name', + 'net.peer.port', + 'next.fetch.cache_reason', + 'next.fetch.cache_status', + 'next.fetch.idx', + 'next.route', + 'next.rsc', + 'next.segment', + 'next.span_category', + 'next.span_name', + 'next.span_type' +]); +const SENSITIVE_PARAM_NAME_RE = /(?:^|[_-])(?:access[_-]?token|api[_-]?key|auth|authorization|code|cookie|credential|id[_-]?token|jwt|key|password|secret|session|signature|sig|token)(?:$|[_-])/i; +class InMemoryRequestInsightsStore { + recordSpan(span) { + var _span_attributes; + if (!span.requestId) { + return; + } + const insight = this.getOrCreateRequest({ + requestId: span.requestId, + kind: span.requestInsightKind, + htmlRequestId: span.htmlRequestId, + route: span.route, + url: span.url + }, span.startTime ?? span.timestamp); + const spanStartTime = span.startTime ?? span.timestamp; + insight.htmlRequestId = span.htmlRequestId ?? insight.htmlRequestId; + insight.route = insight.route ?? span.route; + insight.url = insight.url ?? sanitizeUrl(span.url); + this.updateTiming(insight, spanStartTime, span.durationMs, ((_span_attributes = span.attributes) == null ? void 0 : _span_attributes['next.span_type']) === 'BaseServer.handleRequest'); + insight.status = insight.status === 'error' || span.status === 'error' ? 'error' : span.status === 'ok' ? 'ok' : insight.status; + insight.spans.push({ + name: span.name, + startTime: spanStartTime, + durationMs: span.durationMs, + status: span.status, + traceId: span.traceId, + spanId: span.spanId, + parentSpanId: span.parentSpanId, + attributes: sanitizeSpanAttributes(span.attributes), + links: sanitizeSpanLinks(span.links), + events: sanitizeSpanEvents(span.events), + error: span.error + }); + const fetch = getFetchInsight(span); + if (fetch) { + this.recordFetchForInsight(insight, fetch); + } + this.notify(insight); + } + recordFetch(identity, fetch) { + if (!identity.requestId) { + return; + } + const fetchStartTime = fetch.startTime ?? getCurrentTimestamp(); + const insight = this.getOrCreateRequest(identity, fetchStartTime); + this.updateTiming(insight, fetchStartTime, fetch.durationMs, false); + this.recordFetchForInsight(insight, sanitizeFetchInsight(fetch)); + this.notify(insight); + } + getSnapshot() { + return { + requests: this.requestOrder.map((insightKey)=>this.requests.get(insightKey)).filter((request)=>request !== undefined) + }; + } + subscribe(listener) { + this.listeners.add(listener); + return ()=>{ + this.listeners.delete(listener); + }; + } + clear() { + this.requests.clear(); + this.requestTimings.clear(); + this.requestOrder.length = 0; + } + updateTiming(insight, startTime, durationMs, isRequestSpan) { + const insightKey = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$request$2d$insights$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestInsightKey"])(insight); + if (isRequestSpan && durationMs !== undefined) { + const requestTiming = { + startTime, + durationMs + }; + this.requestTimings.set(insightKey, requestTiming); + insight.startTime = requestTiming.startTime; + insight.durationMs = requestTiming.durationMs; + return; + } + const requestTiming = this.requestTimings.get(insightKey); + if (requestTiming) { + insight.startTime = requestTiming.startTime; + insight.durationMs = requestTiming.durationMs; + return; + } + const endTime = startTime + (durationMs ?? 0); + const requestEndTime = insight.startTime + (insight.durationMs ?? 0); + insight.startTime = Math.min(insight.startTime, startTime); + insight.durationMs = Math.max(requestEndTime, endTime) - insight.startTime; + } + notify(insight) { + for (const listener of this.listeners){ + listener(insight); + } + } + getOrCreateRequest(identity, startTime) { + const requestId = identity.requestId; + const insightKey = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$request$2d$insights$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestInsightKey"])({ + requestId, + kind: identity.kind + }); + let insight = this.requests.get(insightKey); + if (!insight) { + insight = { + requestId, + kind: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$request$2d$insights$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestInsightKind"])(identity), + htmlRequestId: identity.htmlRequestId ?? requestId, + route: identity.route, + url: sanitizeUrl(identity.url), + startTime, + status: 'pending', + spans: [], + fetches: [] + }; + this.requests.set(insightKey, insight); + this.requestOrder.push(insightKey); + this.trim(); + } + insight.htmlRequestId = identity.htmlRequestId ?? insight.htmlRequestId; + insight.route = insight.route ?? identity.route; + insight.url = insight.url ?? sanitizeUrl(identity.url); + insight.startTime = Math.min(insight.startTime, startTime); + return insight; + } + recordFetchForInsight(insight, fetch) { + if (insight.fetches.some((existingFetch)=>existingFetch.url === fetch.url && (existingFetch.index !== undefined && fetch.index !== undefined ? existingFetch.index === fetch.index : existingFetch.startTime === fetch.startTime))) { + return; + } + insight.fetches.push(sanitizeFetchInsight(fetch)); + } + trim() { + while(this.requestOrder.length > MAX_REQUEST_INSIGHTS){ + const insightKey = this.requestOrder.shift(); + if (insightKey) { + this.requests.delete(insightKey); + this.requestTimings.delete(insightKey); + } + } + } + constructor(){ + this.requests = new Map(); + this.requestTimings = new Map(); + this.requestOrder = []; + this.listeners = new Set(); + } +} +function recordRequestInsightSpan(span) { + var _span_attributes; + if (((_span_attributes = span.attributes) == null ? void 0 : _span_attributes['next.span_type']) === CLIENT_COMPONENT_LOADING_SPAN_TYPE) { + return; + } + getRequestInsightsStore().recordSpan(span); +} +function recordRequestInsightFetch(identity, fetch) { + getRequestInsightsStore().recordFetch(identity, fetch); +} +function getRequestInsightsSnapshot() { + return getRequestInsightsStore().getSnapshot(); +} +function subscribeRequestInsights(listener) { + return getRequestInsightsStore().subscribe(listener); +} +function clearRequestInsightsForTest() { + getRequestInsightsStore().clear(); +} +function getRequestInsightsStore() { + const globalStore = globalThis; + return globalStore[REQUEST_INSIGHTS_STORE_KEY] ??= new InMemoryRequestInsightsStore(); +} +function getFetchInsight(span) { + const attributes = span.attributes; + if (!attributes || attributes['next.span_type'] !== 'AppRender.fetch') { + return null; + } + return { + url: sanitizeUrl(getStringAttribute(attributes['http.url']) ?? span.url), + method: getStringAttribute(attributes['http.method']), + statusCode: getNumberAttribute(attributes['http.status_code']), + startTime: span.startTime ?? span.timestamp, + durationMs: span.durationMs, + cacheStatus: getStringAttribute(attributes['next.fetch.cache_status']), + cacheReason: getStringAttribute(attributes['next.fetch.cache_reason']), + index: getNumberAttribute(attributes['next.fetch.idx']) + }; +} +function sanitizeFetchInsight(fetch) { + return { + ...fetch, + url: sanitizeUrl(fetch.url) + }; +} +function getCurrentTimestamp() { + return performance.timeOrigin + performance.now(); +} +function sanitizeSpanAttributes(attributes) { + if (!attributes) { + return undefined; + } + const sanitized = {}; + for (const [key, value] of Object.entries(attributes)){ + if (!SAFE_SPAN_ATTRIBUTE_KEYS.has(key)) { + continue; + } + sanitized[key] = key === 'http.url' ? sanitizeUrlAttribute(value) : value; + } + return Object.keys(sanitized).length > 0 ? sanitized : undefined; +} +function sanitizeSpanEvents(events) { + return events == null ? void 0 : events.map((event)=>({ + ...event, + attributes: sanitizeSpanAttributes(event.attributes) + })); +} +function sanitizeSpanLinks(links) { + return links == null ? void 0 : links.map((link)=>({ + ...link, + attributes: sanitizeSpanAttributes(link.attributes) + })); +} +function sanitizeUrlAttribute(value) { + return typeof value === 'string' ? sanitizeUrl(value) ?? '' : value; +} +function sanitizeUrl(value) { + if (!value) { + return value; + } + const isRelativeUrl = value.startsWith('/'); + try { + const url = isRelativeUrl ? new URL(value, 'http://n') : new URL(value); + url.username = ''; + url.password = ''; + for (const name of Array.from(url.searchParams.keys())){ + if (SENSITIVE_PARAM_NAME_RE.test(name)) { + url.searchParams.set(name, REDACTED_VALUE); + } + } + return isRelativeUrl ? `${url.pathname}${url.search}${url.hash}` : url.href; + } catch { + return value; + } +} +function getStringAttribute(value) { + return typeof value === 'string' ? value : undefined; +} +function getNumberAttribute(value) { + return typeof value === 'number' ? value : undefined; +} +}), +"[project]/node_modules/next/dist/esm/server/lib/trace/span-store.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "isLocalSpanRecordingEnabled", + ()=>isLocalSpanRecordingEnabled, + "isRequestInsightsEnabled", + ()=>isRequestInsightsEnabled, + "recordSpan", + ()=>recordSpan, + "setSpanRecorderForTest", + ()=>setSpanRecorderForTest +]); +let spanRecorderForTest; +function recordSpan(record) { + if (!isLocalSpanRecordingEnabled()) { + return; + } + const spanRecord = { + timestamp: getCurrentTimestamp(), + ...record + }; + spanRecorderForTest == null ? void 0 : spanRecorderForTest(spanRecord); + if (isRequestInsightsEnabled() && spanRecord.requestId) //TURBOPACK unreachable + ; +} +function setSpanRecorderForTest(recorder) { + spanRecorderForTest = recorder; +} +function isLocalSpanRecordingEnabled() { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + return spanRecorderForTest !== undefined || isRequestInsightsEnabled(); +} +function isRequestInsightsEnabled() { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + const value = ("TURBOPACK compile-time value", false); + return isEnabledEnvValue(value); +} +function isEnabledEnvValue(value) { + return value === '1' || value === 'true' || value === true; +} +function getCurrentTimestamp() { + return performance.timeOrigin + performance.now(); +} +}), +"[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "BubbledError", + ()=>BubbledError, + "SpanKind", + ()=>SpanKind, + "SpanStatusCode", + ()=>SpanStatusCode, + "getTracer", + ()=>getTracer, + "isBubbledError", + ()=>isBubbledError +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$is$2d$thenable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/is-thenable.js [app-route] (ecmascript)"); +; +; +const NEXT_OTEL_PERFORMANCE_PREFIX = process.env.NEXT_OTEL_PERFORMANCE_PREFIX; +const LOCAL_SPAN_RECORDER_KEY = Symbol.for('@next/local-span-recorder'); +let api; +function getLocalSpanRecorder() { + if ("TURBOPACK compile-time truthy", 1) { + return globalThis[LOCAL_SPAN_RECORDER_KEY]; + } else //TURBOPACK unreachable + ; +} +// we want to allow users to use their own version of @opentelemetry/api if they +// want to, so we try to require it first, and if it fails we fall back to the +// version that is bundled with Next.js +// this is because @opentelemetry/api has to be synced with the version of +// @opentelemetry/tracing that is used, and we don't want to force users to use +// the version that is bundled with Next.js. +// the API is ~stable, so this should be fine +if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable +; +else { + try { + api = __turbopack_context__.r("[externals]/next/dist/compiled/@opentelemetry/api [external] (next/dist/compiled/@opentelemetry/api, cjs)"); + } catch (err) { + api = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/@opentelemetry/api/index.js [app-route] (ecmascript)"); + } +} +const { context, propagation, trace, SpanStatusCode, SpanKind, ROOT_CONTEXT } = api; +class BubbledError extends Error { + constructor(bubble, result){ + super(), this.bubble = bubble, this.result = result; + } +} +function isBubbledError(error) { + if (typeof error !== 'object' || error === null) return false; + return error instanceof BubbledError; +} +const closeSpanWithError = (span, error, endTime)=>{ + if (isBubbledError(error) && error.bubble) { + span.setAttribute('next.bubble', true); + } else { + if (error) { + span.recordException(error); + span.setAttribute('error.type', error.name); + } + span.setStatus({ + code: SpanStatusCode.ERROR, + message: error == null ? void 0 : error.message + }); + } + span.end(endTime); +}; +/** we use this map to propagate attributes from nested spans to the top span */ const rootSpanAttributesStore = new Map(); +const rootSpanIdKey = api.createContextKey('next.rootSpanId'); +let lastSpanId = 0; +const getSpanId = ()=>lastSpanId++; +const clientTraceDataSetter = { + set (carrier, key, value) { + carrier.push({ + key, + value + }); + } +}; +class NextTracerImpl { + /** + * Returns an instance to the trace with configured name. + * Since wrap / trace can be defined in any place prior to actual trace subscriber initialization, + * This should be lazily evaluated. + */ getTracerInstance() { + return trace.getTracer('next.js', "16.4.1"); + } + isOpenTelemetryEnabled() { + var _tracerProvider_getDelegate_constructor, _tracerProvider_getDelegate; + const activeSpan = trace.getSpan(context.active()); + if (activeSpan == null ? void 0 : activeSpan.isRecording()) { + return true; + } + const tracerProvider = trace.getTracerProvider(); + if (!('getDelegate' in tracerProvider)) { + return true; + } + return (tracerProvider.getDelegate == null ? void 0 : (_tracerProvider_getDelegate = tracerProvider.getDelegate.call(tracerProvider)) == null ? void 0 : (_tracerProvider_getDelegate_constructor = _tracerProvider_getDelegate.constructor) == null ? void 0 : _tracerProvider_getDelegate_constructor.name) !== 'NoopTracerProvider'; + } + getContext() { + return context; + } + getTracePropagationData() { + const activeContext = context.active(); + const entries = []; + propagation.inject(activeContext, entries, clientTraceDataSetter); + return entries; + } + getActiveScopeSpan() { + const localSpanRecorder = getLocalSpanRecorder(); + const activeLocalSpan = localSpanRecorder == null ? void 0 : localSpanRecorder.getActiveLocalSpan(); + if (activeLocalSpan && (localSpanRecorder == null ? void 0 : localSpanRecorder.isOpenTelemetryIsolatedSpan(activeLocalSpan))) { + return activeLocalSpan; + } + const activeSpan = trace.getSpan(context.active()); + if (activeSpan || !("TURBOPACK compile-time value", "1")) { + return activeSpan; + } + return activeLocalSpan; + } + /** + * Run `fn` with the active span cleared, so spans created inside become new + * roots (or parent to incoming propagated context). Used for in-process + * Node.js middleware so its span is a sibling of the request span, matching + * edge middleware which runs in a detached sandbox. + */ runWithDetachedContext(fn) { + if (!NEXT_OTEL_PERFORMANCE_PREFIX && !this.isOpenTelemetryEnabled()) { + return fn(); + } + return context.with(ROOT_CONTEXT, fn); + } + withPropagatedContext(carrier, fn, getter, force = false) { + const activeContext = context.active(); + if (!NEXT_OTEL_PERFORMANCE_PREFIX && !this.isOpenTelemetryEnabled() && !trace.getSpanContext(activeContext)) { + return fn(); + } + if (force) { + const remoteContext = propagation.extract(ROOT_CONTEXT, carrier, getter); + if (trace.getSpanContext(remoteContext)) { + return context.with(remoteContext, fn); + } + // Preserve the current active span while still merging any extracted + // baggage/context values from the carrier. + const mergedContext = propagation.extract(activeContext, carrier, getter); + return context.with(mergedContext, fn); + } + if (trace.getSpanContext(activeContext)) { + // Active span is already set, too late to propagate. + return fn(); + } + const remoteContext = propagation.extract(activeContext, carrier, getter); + return context.with(remoteContext, fn); + } + trace(...args) { + const [type, fnOrOptions, fnOrEmpty] = args; + const tracingEnabled = Boolean(NEXT_OTEL_PERFORMANCE_PREFIX) || this.isOpenTelemetryEnabled(); + const localSpanRecorder = getLocalSpanRecorder(); + const localSpanRecordingEnabled = (localSpanRecorder == null ? void 0 : localSpanRecorder.isLocalSpanRecordingEnabled()) ?? false; + if (!tracingEnabled && !localSpanRecordingEnabled) { + return typeof fnOrOptions === 'function' ? fnOrOptions() : fnOrEmpty(); + } + // coerce options form overload + const { fn, options } = typeof fnOrOptions === 'function' ? { + fn: fnOrOptions, + options: {} + } : { + fn: fnOrEmpty, + options: { + ...fnOrOptions + } + }; + const spanName = options.spanName ?? type; + const parentSpan = options.parentSpan ?? this.getActiveScopeSpan(); + const isolatedParentSpan = parentSpan && (localSpanRecorder == null ? void 0 : localSpanRecorder.isOpenTelemetryIsolatedSpan(parentSpan)) ? parentSpan : undefined; + const shouldDelegateSpan = !isolatedParentSpan && (__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextVanillaSpanAllowlist"].has(type) || process.env.NEXT_OTEL_VERBOSE === '1'); + const shouldTraceSpan = shouldDelegateSpan || ((localSpanRecorder == null ? void 0 : localSpanRecorder.isRequestInsightsEnabled()) ?? false); + if (!shouldTraceSpan || options.hideSpan) { + return fn(); + } + // Trying to get active scoped span to assign parent. If option specifies parent span manually, will try to use it. + let spanContext = isolatedParentSpan ? context.active() : this.getSpanContext(parentSpan); + if (!spanContext) { + spanContext = (context == null ? void 0 : context.active()) ?? ROOT_CONTEXT; + } + // Check if there's already a root span in the store for this trace + // We are intentionally not checking whether there is an active context + // from outside of nextjs to ensure that we can provide the same level + // of telemetry when using a custom server + const existingRootSpanId = spanContext.getValue(rootSpanIdKey); + const isRootSpan = typeof existingRootSpanId !== 'number' || !rootSpanAttributesStore.has(existingRootSpanId); + const spanId = getSpanId(); + options.attributes = { + 'next.span_category': 'nextjs', + 'next.span_name': spanName, + 'next.span_type': type, + ...options.attributes + }; + return context.with(spanContext.setValue(rootSpanIdKey, spanId), ()=>this.runWithActiveSpan(spanName, options, spanContext, tracingEnabled && shouldDelegateSpan, localSpanRecordingEnabled, isolatedParentSpan, (span)=>{ + let startTime; + if (NEXT_OTEL_PERFORMANCE_PREFIX && type && __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["LogSpanAllowList"].has(type)) { + startTime = 'performance' in globalThis && 'measure' in performance ? globalThis.performance.now() : undefined; + } + let cleanedUp = false; + const onCleanup = ()=>{ + if (cleanedUp) return; + cleanedUp = true; + rootSpanAttributesStore.delete(spanId); + if (startTime) { + performance.measure(`${NEXT_OTEL_PERFORMANCE_PREFIX}:next-${(type.split('.').pop() || '').replace(/[A-Z]/g, (match)=>'-' + match.toLowerCase())}`, { + start: startTime, + end: performance.now() + }); + } + }; + if (isRootSpan) { + rootSpanAttributesStore.set(spanId, new Map(Object.entries(options.attributes ?? {}))); + } + if (fn.length > 1) { + try { + return fn(span, (err)=>{ + if (err) { + closeSpanWithError(span, err, options.endTime); + } else { + span.end(options.endTime); + } + }); + } catch (err) { + closeSpanWithError(span, err, options.endTime); + throw err; + } finally{ + onCleanup(); + } + } + try { + const result = fn(span); + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$is$2d$thenable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isThenable"])(result)) { + // If there's error make sure it throws + return result.then((res)=>{ + span.end(options.endTime); + // Need to pass down the promise result, + // it could be react stream response with error { error, stream } + return res; + }).catch((err)=>{ + closeSpanWithError(span, err, options.endTime); + throw err; + }).finally(onCleanup); + } else { + span.end(options.endTime); + onCleanup(); + } + return result; + } catch (err) { + closeSpanWithError(span, err, options.endTime); + onCleanup(); + throw err; + } + })); + } + runWithActiveSpan(spanName, options, parentContext, tracingEnabled, localSpanRecordingEnabled, isolatedParentSpan, fn) { + if (tracingEnabled) { + return this.getTracerInstance().startActiveSpan(spanName, options, (span)=>fn(localSpanRecordingEnabled ? this.createLocalRecordingSpan(spanName, options, parentContext, span, isolatedParentSpan) : span)); + } + const span = this.createLocalRecordingSpan(spanName, options, parentContext, undefined, isolatedParentSpan); + const localSpanRecorder = getLocalSpanRecorder(); + return localSpanRecorder.withLocalSpan(span, ()=>localSpanRecorder.isOpenTelemetryIsolatedSpan(span) ? fn(span) : context.with(trace.setSpan(context.active(), span), fn, undefined, span)); + } + createLocalRecordingSpan(name, options, parentContext, delegateSpan, isolatedParentSpan) { + const parentSpanContext = (isolatedParentSpan == null ? void 0 : isolatedParentSpan.spanContext()) ?? trace.getSpanContext(parentContext); + const delegateSpanContext = delegateSpan == null ? void 0 : delegateSpan.spanContext(); + return getLocalSpanRecorder().createLocalSpan({ + name, + attributes: options.attributes, + links: options.links, + startTime: options.startTime, + delegateSpan, + traceId: (delegateSpanContext == null ? void 0 : delegateSpanContext.traceId) ?? (parentSpanContext == null ? void 0 : parentSpanContext.traceId), + spanId: delegateSpanContext == null ? void 0 : delegateSpanContext.spanId, + parentSpanId: parentSpanContext == null ? void 0 : parentSpanContext.spanId, + isolateOpenTelemetry: isolatedParentSpan !== undefined + }); + } + wrap(...args) { + const tracer = this; + const [name, options, fn] = args.length === 3 ? args : [ + args[0], + {}, + args[1] + ]; + if (!__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextVanillaSpanAllowlist"].has(name) && process.env.NEXT_OTEL_VERBOSE !== '1' && !("TURBOPACK compile-time value", "1")) //TURBOPACK unreachable + ; + return function() { + let optionsObj = options; + if (typeof optionsObj === 'function' && typeof fn === 'function') { + optionsObj = optionsObj.apply(this, arguments); + } + const lastArgId = arguments.length - 1; + const cb = arguments[lastArgId]; + if (typeof cb === 'function') { + const scopeBoundCb = tracer.getContext().bind(context.active(), cb); + return tracer.trace(name, optionsObj, (_span, done)=>{ + arguments[lastArgId] = function(err) { + done == null ? void 0 : done(err); + return scopeBoundCb.apply(this, arguments); + }; + return fn.apply(this, arguments); + }); + } else { + return tracer.trace(name, optionsObj, ()=>fn.apply(this, arguments)); + } + }; + } + startSpan(...args) { + const [type, passedOptions] = args; + const options = passedOptions ? { + ...passedOptions, + attributes: { + 'next.span_category': 'nextjs', + ...passedOptions.attributes + } + } : { + attributes: { + 'next.span_category': 'nextjs' + } + }; + const localSpanRecorder = getLocalSpanRecorder(); + const parentSpan = options.parentSpan ?? this.getActiveScopeSpan(); + const isolatedParentSpan = parentSpan && (localSpanRecorder == null ? void 0 : localSpanRecorder.isOpenTelemetryIsolatedSpan(parentSpan)) ? parentSpan : undefined; + const parentContext = (isolatedParentSpan ? undefined : this.getSpanContext(parentSpan)) ?? context.active(); + const localSpanRecordingEnabled = (localSpanRecorder == null ? void 0 : localSpanRecorder.isLocalSpanRecordingEnabled()) ?? false; + if (!localSpanRecordingEnabled) { + return this.getTracerInstance().startSpan(type, options, parentContext); + } + const delegateSpan = !isolatedParentSpan && this.isOpenTelemetryEnabled() ? this.getTracerInstance().startSpan(type, options, parentContext) : undefined; + return this.createLocalRecordingSpan(type, options, parentContext, delegateSpan, isolatedParentSpan); + } + getSpanContext(parentSpan) { + const spanContext = parentSpan ? trace.setSpan(context.active(), parentSpan) : undefined; + return spanContext; + } + getRootSpanAttributes() { + const spanId = context.active().getValue(rootSpanIdKey); + return rootSpanAttributesStore.get(spanId); + } + setRootSpanAttribute(key, value) { + const spanId = context.active().getValue(rootSpanIdKey); + const attributes = rootSpanAttributesStore.get(spanId); + if (attributes && !attributes.has(key)) { + attributes.set(key, value); + } + if ("TURBOPACK compile-time truthy", 1) { + var _getLocalSpanRecorder; + const localSpan = (_getLocalSpanRecorder = getLocalSpanRecorder()) == null ? void 0 : _getLocalSpanRecorder.getActiveLocalSpan(); + if (localSpan) { + localSpan.setAttribute(key, value); + } + } + } + withSpan(span, fn) { + const recorder = getLocalSpanRecorder(); + if (recorder == null ? void 0 : recorder.isLocalRecordingSpan(span)) { + return recorder.withLocalSpan(span, ()=>recorder.isOpenTelemetryIsolatedSpan(span) ? fn() : context.with(trace.setSpan(context.active(), span), fn)); + } + return context.with(trace.setSpan(context.active(), span), fn); + } +} +const getTracer = (()=>{ + const tracer = new NextTracerImpl(); + return ()=>tracer; +})(); +; +}), +"[project]/node_modules/next/dist/esm/server/normalizers/built/app/app-pathname-normalizer.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "AppPathnameNormalizer", + ()=>AppPathnameNormalizer, + "DevAppPathnameNormalizer", + ()=>DevAppPathnameNormalizer +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$normalizers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/normalizers/normalizers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$wrap$2d$normalizer$2d$fn$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/normalizers/wrap-normalizer-fn.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$underscore$2d$normalizer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/normalizers/underscore-normalizer.js [app-route] (ecmascript)"); +; +; +; +; +class AppPathnameNormalizer extends __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$normalizers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["Normalizers"] { + constructor(){ + super([ + // The pathname to match should have the trailing `/page` and other route + // group information stripped from it. + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$wrap$2d$normalizer$2d$fn$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["wrapNormalizerFn"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeAppPath"]), + // The page should have the `%5F` characters replaced with `_` characters. + new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$underscore$2d$normalizer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["UnderscoreNormalizer"]() + ]); + } + normalize(page) { + return super.normalize(page); + } +} +class DevAppPathnameNormalizer extends __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$normalizers$2f$normalizers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["Normalizers"] { + constructor(pageNormalizer){ + super([ + // This should normalize the filename to a page. + pageNormalizer, + // Normalize the app page to a pathname. + new AppPathnameNormalizer() + ]); + } + normalize(filename) { + return super.normalize(filename); + } +} +}), +"[project]/node_modules/next/dist/esm/server/normalizers/normalizers.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Normalizers combines many normalizers into a single normalizer interface that + * will normalize the inputted pathname with each normalizer in order. + */ __turbopack_context__.s([ + "Normalizers", + ()=>Normalizers +]); +class Normalizers { + constructor(normalizers = []){ + this.normalizers = normalizers; + } + push(normalizer) { + this.normalizers.push(normalizer); + } + normalize(pathname) { + return this.normalizers.reduce((normalized, normalizer)=>normalizer.normalize(normalized), pathname); + } +} +}), +"[project]/node_modules/next/dist/esm/server/normalizers/underscore-normalizer.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * UnderscoreNormalizer replaces all instances of %5F with _. + */ __turbopack_context__.s([ + "UnderscoreNormalizer", + ()=>UnderscoreNormalizer +]); +class UnderscoreNormalizer { + normalize(pathname) { + return pathname.replace(/%5F/g, '_'); + } +} +}), +"[project]/node_modules/next/dist/esm/server/normalizers/wrap-normalizer-fn.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "wrapNormalizerFn", + ()=>wrapNormalizerFn +]); +function wrapNormalizerFn(fn) { + return { + normalize: fn + }; +} +}), +"[project]/node_modules/next/dist/esm/server/pipe-readable.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "isAbortError", + ()=>isAbortError, + "pipeNodeReadableToNodeResponse", + ()=>pipeNodeReadableToNodeResponse, + "pipeToNodeResponse", + ()=>pipeToNodeResponse +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/next-request.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)"); +; +; +; +; +function isAbortError(e) { + return (e == null ? void 0 : e.name) === 'AbortError' || (e == null ? void 0 : e.name) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ResponseAbortedName"]; +} +const HAS_CLIENT_COMPONENT_METRICS_ENABLED = 'performance' in globalThis && process.env.NEXT_OTEL_PERFORMANCE_PREFIX; +function createWriterFromResponse(res, waitUntilForEnd, clientComponentLoadTracker) { + let started = false; + // Create a promise that will resolve once the response has drained. See + // https://nodejs.org/api/stream.html#stream_event_drain + let drained = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + function onDrain() { + drained.resolve(); + } + res.on('drain', onDrain); + // If the finish event fires, it means we shouldn't block and wait for the + // drain event. + res.once('close', ()=>{ + res.off('drain', onDrain); + drained.resolve(); + }); + // Create a promise that will resolve once the response has finished. See + // https://nodejs.org/api/http.html#event-finish_1 + const finished = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + res.once('finish', ()=>{ + finished.resolve(); + }); + // Create a writable stream that will write to the response. + return new WritableStream({ + write: async (chunk)=>{ + // You'd think we'd want to use `start` instead of placing this in `write` + // but this ensures that we don't actually flush the headers until we've + // started writing chunks. + if (!started) { + started = true; + if (HAS_CLIENT_COMPONENT_METRICS_ENABLED) { + const metrics = clientComponentLoadTracker == null ? void 0 : clientComponentLoadTracker.snapshot(); + if (metrics) { + performance.measure(`${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`, { + start: metrics.clientComponentLoadStart, + end: metrics.clientComponentLoadStart + metrics.clientComponentLoadTimes + }); + } + } + res.flushHeaders(); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])().trace(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextNodeServerSpan"].startResponse, { + spanName: 'start response' + }, ()=>undefined); + } + try { + const ok = res.write(chunk); + // Added by the `compression` middleware, this is a function that will + // flush the partially-compressed response to the client. + if ('flush' in res && typeof res.flush === 'function') { + res.flush(); + } + // If the write returns false, it means there's some backpressure, so + // wait until it's streamed before continuing. + if (!ok) { + await drained.promise; + // Reset the drained promise so that we can wait for the next drain event. + drained = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + } + } catch (err) { + res.end(); + throw new Error('failed to write chunk to response', { + cause: err + }); + } + }, + abort: (err)=>{ + if (res.writableFinished) return; + res.destroy(err); + }, + close: async ()=>{ + // if a waitUntil promise was passed, wait for it to resolve before + // ending the response. + if (waitUntilForEnd) { + await waitUntilForEnd; + } + if (res.writableFinished) return; + res.end(); + return finished.promise; + } + }); +} +async function pipeToNodeResponse(readable, res, waitUntilForEnd, clientComponentLoadTracker) { + try { + // If the response has already errored, then just return now. + const { errored, destroyed } = res; + if (errored || destroyed) return; + // Create a new AbortController so that we can abort the readable if the + // client disconnects. + const controller = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createAbortController"])(res); + const writer = createWriterFromResponse(res, waitUntilForEnd, clientComponentLoadTracker); + await readable.pipeTo(writer, { + signal: controller.signal + }); + } catch (err) { + // If this isn't related to an abort error, re-throw it. + if (isAbortError(err)) return; + throw new Error('failed to pipe response', { + cause: err + }); + } +} +async function pipeNodeReadableToNodeResponse(readable, res, waitUntilForEnd, clientComponentLoadTracker) { + try { + const { errored, destroyed } = res; + if (errored || destroyed) return; + let started = false; + const finished = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + // One `drain` listener for the whole response, as in + // `createWriterFromResponse` above. It must not be `res.once('drain')` per + // backpressured write: the `compression` middleware forwards `res.on` to + // its zlib stream but leaves `removeListener` pointing at the response, so + // a `once` listener is never removed from the stream it was added to. Each + // backpressured write would leak one, and past ten Node reports the stream + // as a probable leak via `MaxListenersExceededWarning`. + // + // TODO: the upstream fix for that asymmetry is + // https://github.com/expressjs/compression/pull/153, which intercepts + // `removeListener` so it reaches the zlib stream. It has been open since + // 2019 and is not in upstream 1.8.1; we vendor 1.7.4. If it ever lands and + // we upgrade, `res.off('drain', onDrain)` below would start working with + // compression active and the caveat on the `close` handler could go away. + let paused = false; + const onDrain = ()=>{ + // The listener outlives the readable: `off` below cannot reach the zlib + // stream either, so a late drain can arrive after teardown. + if (!paused || readable.destroyed) return; + paused = false; + readable.resume(); + }; + res.on('drain', onDrain); + res.once('close', ()=>{ + // Only removes the listener when compression is inactive, which is the + // case where it was added to the response itself. Otherwise it lives on + // the zlib stream, which is released with the response. + res.off('drain', onDrain); + readable.destroy(); + finished.resolve(); + }); + readable.on('data', (chunk)=>{ + if (!started) { + started = true; + if ('performance' in globalThis && process.env.NEXT_OTEL_PERFORMANCE_PREFIX) { + const metrics = clientComponentLoadTracker == null ? void 0 : clientComponentLoadTracker.snapshot(); + if (metrics) { + performance.measure(`${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`, { + start: metrics.clientComponentLoadStart, + end: metrics.clientComponentLoadStart + metrics.clientComponentLoadTimes + }); + } + } + res.flushHeaders(); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])().trace(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextNodeServerSpan"].startResponse, { + spanName: 'start response' + }, ()=>undefined); + } + const ok = res.write(chunk); + if ('flush' in res && typeof res.flush === 'function') { + res.flush(); + } + if (!ok) { + paused = true; + readable.pause(); + } + }); + readable.on('end', async ()=>{ + if (waitUntilForEnd) { + await waitUntilForEnd; + } + if (!res.writableFinished) { + res.end(); + } + finished.resolve(); + }); + readable.on('error', (err)=>{ + if (isAbortError(err)) { + finished.resolve(); + return; + } + res.destroy(err); + finished.resolve(); + }); + await finished.promise; + } catch (err) { + if (isAbortError(err)) return; + throw new Error('failed to pipe response', { + cause: err + }); + } +} +}), +"[project]/node_modules/next/dist/esm/server/render-result.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "default", + ()=>RenderResult +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/stream-utils/node-web-streams-helper.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/pipe-readable.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +; +; +; +function isNodeReadable(value) { + return value !== null && typeof value === 'object' && typeof value.pipe === 'function' && typeof value.on === 'function' && !(value instanceof ReadableStream); +} +class RenderResult { + static #_ = /** + * A render result that represents an empty response. This is used to + * represent a response that was not found or was already sent. + */ this.EMPTY = new RenderResult(null, { + metadata: {}, + contentType: null + }); + /** + * Creates a new RenderResult instance from a static response. + * + * @param value the static response value + * @param contentType the content type of the response + * @returns a new RenderResult instance + */ static fromStatic(value, contentType) { + return new RenderResult(value, { + metadata: {}, + contentType + }); + } + constructor(response, { contentType, waitUntil, metadata }){ + this.response = response; + this.contentType = contentType; + this.metadata = metadata; + this.waitUntil = waitUntil; + } + assignMetadata(metadata) { + Object.assign(this.metadata, metadata); + } + /** + * Returns true if the response is null. It can be null if the response was + * not found or was already sent. + */ get isNull() { + return this.response === null; + } + /** + * Returns false if the response is a string. It can be a string if the page + * was prerendered. If it's not, then it was generated dynamically. + */ get isDynamic() { + return typeof this.response !== 'string'; + } + toUnchunkedString(stream = false) { + if (this.response === null) { + // If the response is null, return an empty string. This behavior is + // intentional as we're now providing the `RenderResult.EMPTY` value. + return ''; + } + if (typeof this.response !== 'string') { + if (!stream) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('dynamic responses cannot be unchunked. This is a bug in Next.js'); + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["streamToString"])(this.readable); + } + return this.response; + } + /** + * Returns a readable stream of the response. + */ get readable() { + if (this.response === null) { + // If the response is null, return an empty stream. This behavior is + // intentional as we're now providing the `RenderResult.EMPTY` value. + return new ReadableStream({ + start (controller) { + controller.close(); + } + }); + } + if (typeof this.response === 'string') { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["streamFromString"])(this.response); + } + if (Buffer.isBuffer(this.response)) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["streamFromBuffer"])(this.response); + } + // If the response is an array of streams, then chain them together. + if (Array.isArray(this.response)) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["chainStreams"])(...this.response); + } + if (isNodeReadable(this.response)) { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + let Readable; + if ("TURBOPACK compile-time truthy", 1) { + Readable = __turbopack_context__.r("[externals]/node:stream [external] (node:stream, cjs)").Readable; + } else //TURBOPACK unreachable + ; + return Readable.toWeb(this.response); + } + } + return this.response; + } + /** + * Coerces the response to an array of streams. This will convert the response + * to an array of streams if it is not already one. + * + * @returns An array of streams + */ coerce() { + if (this.response === null) { + // If the response is null, return an empty stream. This behavior is + // intentional as we're now providing the `RenderResult.EMPTY` value. + return []; + } + if (typeof this.response === 'string') { + return [ + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["streamFromString"])(this.response) + ]; + } else if (Array.isArray(this.response)) { + return this.response; + } else if (Buffer.isBuffer(this.response)) { + return [ + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["streamFromBuffer"])(this.response) + ]; + } else if (isNodeReadable(this.response)) { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + let Readable; + if ("TURBOPACK compile-time truthy", 1) { + Readable = __turbopack_context__.r("[externals]/node:stream [external] (node:stream, cjs)").Readable; + } else //TURBOPACK unreachable + ; + return [ + Readable.toWeb(this.response) + ]; + } + } else { + return [ + this.response + ]; + } + } + /** + * Pipes the response through a transform stream. This converts the response + * to a single readable stream (chaining if needed) and pipes it through the + * provided transform. + * + * @param transform The transform stream to pipe through + */ pipeThrough(transform) { + this.response = this.readable.pipeThrough(transform); + } + /** + * Unshifts a new stream to the response. This will convert the response to an + * array of streams if it is not already one and will add the new stream to + * the start of the array. When this response is piped, all of the streams + * will be piped one after the other. + * + * @param readable The new stream to unshift + */ unshift(readable) { + // Coerce the response to an array of streams. + this.response = this.coerce(); + // Add the new stream to the start of the array. + this.response.unshift(readable); + } + /** + * Chains a new stream to the response. This will convert the response to an + * array of streams if it is not already one and will add the new stream to + * the end. When this response is piped, all of the streams will be piped + * one after the other. + * + * @param readable The new stream to chain + */ push(readable) { + // Coerce the response to an array of streams. + this.response = this.coerce(); + // Add the new stream to the end of the array. + this.response.push(readable); + } + /** + * Pipes the response to a writable stream. This will close/cancel the + * writable stream if an error is encountered. If this doesn't throw, then + * the writable stream will be closed or aborted. + * + * @param writable Writable stream to pipe the response to + */ async pipeTo(writable) { + try { + await this.readable.pipeTo(writable, { + // We want to close the writable stream ourselves so that we can wait + // for the waitUntil promise to resolve before closing it. If an error + // is encountered, we'll abort the writable stream if we swallowed the + // error. + preventClose: true + }); + // If there is a waitUntil promise, wait for it to resolve before + // closing the writable stream. + if (this.waitUntil) await this.waitUntil; + // Close the writable stream. + await writable.close(); + } catch (err) { + // If this is an abort error, we should abort the writable stream (as we + // took ownership of it when we started piping). We don't need to re-throw + // because we handled the error. + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isAbortError"])(err)) { + // Abort the writable stream if an error is encountered. + await writable.abort(err); + return; + } + // We're not aborting the writer here as when this method throws it's not + // clear as to how so the caller should assume it's their responsibility + // to clean up the writer. + throw err; + } + } + /** + * Pipes the response to a node response. This will close/cancel the node + * response if an error is encountered. + * + * @param res + */ async pipeToNodeResponse(res) { + if (this.response !== null && typeof this.response !== 'string' && !Buffer.isBuffer(this.response) && !Array.isArray(this.response) && isNodeReadable(this.response)) { + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pipeNodeReadableToNodeResponse"])(this.response, res, this.waitUntil, this.metadata.clientComponentLoadTracker); + return; + } + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pipeToNodeResponse"])(this.readable, res, this.waitUntil, this.metadata.clientComponentLoadTracker); + } +} +}), +"[project]/node_modules/next/dist/esm/server/request-meta.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +// FIXME: (wyattjoh) this is a temporary solution to allow us to pass data between bundled modules +__turbopack_context__.s([ + "NEXT_REQUEST_META", + ()=>NEXT_REQUEST_META, + "addRequestMeta", + ()=>addRequestMeta, + "getRequestMeta", + ()=>getRequestMeta, + "removeRequestMeta", + ()=>removeRequestMeta, + "setRequestMeta", + ()=>setRequestMeta +]); +const NEXT_REQUEST_META = Symbol.for('NextInternalRequestMeta'); +function getRequestMeta(req, key) { + const meta = req[NEXT_REQUEST_META] || {}; + return typeof key === 'string' ? meta[key] : meta; +} +function setRequestMeta(req, meta) { + req[NEXT_REQUEST_META] = meta; + return meta; +} +function addRequestMeta(request, key, value) { + const meta = getRequestMeta(request); + meta[key] = value; + return setRequestMeta(request, meta); +} +function removeRequestMeta(request, key) { + const meta = getRequestMeta(request); + delete meta[key]; + return setRequestMeta(request, meta); +} +}), +"[project]/node_modules/next/dist/esm/server/response-cache/index.js [app-route] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "default", + ()=>ResponseCache +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/types.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$batcher$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/batcher.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/lru-cache.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$output$2f$log$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/build/output/log.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/scheduler.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/utils.js [app-route] (ecmascript)"); +; +; +; +; +; +; +; +/** + * Parses an environment variable as a positive integer, returning the fallback + * if the value is missing, not a number, or not positive. + */ function parsePositiveInt(envValue, fallback) { + if (!envValue) return fallback; + const parsed = parseInt(envValue, 10); + return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback; +} +/** + * Default TTL (in milliseconds) for minimal mode response cache entries. + * Used for cache hit validation as a fallback for providers that don't + * send the x-invocation-id header yet. + * + * 10 seconds chosen because: + * - Long enough to dedupe rapid successive requests (e.g., page + data) + * - Short enough to not serve stale data across unrelated requests + * + * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_TTL` environment variable. + */ const DEFAULT_TTL_MS = parsePositiveInt(process.env.NEXT_PRIVATE_RESPONSE_CACHE_TTL, 10000); +/** + * Default maximum number of entries in the response cache. + * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE` environment variable. + */ const DEFAULT_MAX_SIZE = parsePositiveInt(process.env.NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE, 150); +/** + * Separator used in compound cache keys to join pathname and invocationID. + * Using null byte (\0) since it cannot appear in valid URL paths or UUIDs. + */ const KEY_SEPARATOR = '\0'; +/** + * Sentinel value used for TTL-based cache entries (when invocationID is undefined). + * Chosen to be a clearly reserved marker for internal cache keys. + */ const TTL_SENTINEL = '__ttl_sentinel__'; +/** + * Creates a compound cache key from pathname and invocationID. + */ function createCacheKey(pathname, invocationID) { + return `${pathname}${KEY_SEPARATOR}${invocationID ?? TTL_SENTINEL}`; +} +/** + * Extracts the invocationID from a compound cache key. + * Returns undefined if the key used TTL_SENTINEL. + */ function extractInvocationID(compoundKey) { + const separatorIndex = compoundKey.lastIndexOf(KEY_SEPARATOR); + if (separatorIndex === -1) return undefined; + const invocationID = compoundKey.slice(separatorIndex + 1); + return invocationID === TTL_SENTINEL ? undefined : invocationID; +} +; +class ResponseCache { + constructor({ minimalMode, route, maxSize = DEFAULT_MAX_SIZE, ttl = DEFAULT_TTL_MS }){ + // The get and revalidate batchers share pending renders across invocation + // IDs, including failures. Invocation IDs scope reuse of completed results in + // the LRU below. + this.getBatcher = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$batcher$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["Batcher"].create({ + // Ensure on-demand revalidate doesn't block normal requests, it should be + // safe to run an on-demand revalidate for the same key as a normal request. + cacheKeyFn: ({ key, isOnDemandRevalidate })=>`${key}-${isOnDemandRevalidate ? '1' : '0'}`, + // We wait to do any async work until after we've added our promise to + // `pendingResponses` to ensure that any any other calls will reuse the + // same promise until we've fully finished our work. + schedulerFn: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["scheduleOnNextTick"] + }); + this.revalidateBatcher = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$batcher$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["Batcher"].create({ + // We wait to do any async work until after we've added our promise to + // `pendingResponses` to ensure that any any other calls will reuse the + // same promise until we've fully finished our work. + schedulerFn: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["scheduleOnNextTick"] + }); + /** + * Set of invocation IDs that have had cache entries evicted. + * Used to detect when the cache size may be too small. + * Bounded to prevent memory growth. + */ this.evictedInvocationIDs = new Set(); + if (!route) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('Response cache requires a source route'); + } + this.route = route; + this.minimal_mode = minimalMode; + this.maxSize = maxSize; + this.ttl = ttl; + // Create the LRU cache with eviction tracking + this.cache = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["LRUCache"](maxSize, undefined, (compoundKey)=>{ + const invocationID = extractInvocationID(compoundKey); + if (invocationID) { + // Bound to 100 entries to prevent unbounded memory growth. + // FIFO eviction is acceptable here because: + // 1. Invocations are short-lived (single request lifecycle), so older + // invocations are unlikely to still be active after 100 newer ones + // 2. This warning mechanism is best-effort for developer guidance— + // missing occasional eviction warnings doesn't affect correctness + // 3. If a long-running invocation is somehow evicted and then has + // another cache entry evicted, it will simply be re-added + if (this.evictedInvocationIDs.size >= 100) { + const first = this.evictedInvocationIDs.values().next().value; + if (first) this.evictedInvocationIDs.delete(first); + } + this.evictedInvocationIDs.add(invocationID); + } + }); + } + /** + * Gets the response cache entry for the given key. + * + * @param key - The key to get the response cache entry for. + * @param responseGenerator - The response generator to use to generate the response cache entry. + * @param context - The context for the get request. + * @returns The response cache entry. + */ async get(key, responseGenerator, context) { + // If there is no key for the cache, we can't possibly look this up in the + // cache so just return the result of the response generator. + if (!key) { + return responseGenerator({ + hasResolved: false, + previousCacheEntry: null + }); + } + // Check minimal mode cache before doing any other work. + if (this.minimal_mode) { + const cacheKey = createCacheKey(key, context.invocationID); + const cachedItem = this.cache.get(cacheKey); + if (cachedItem) { + // With invocationID: exact match found - always a hit + // With TTL mode: must check expiration + if (context.invocationID !== undefined) { + return cachedItem.entry !== null && 'error' in cachedItem.entry ? cachedItem.entry : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["toResponseCacheEntry"])(cachedItem.entry); + } + // TTL entries can be reused by unrelated requests. Exclude failures so + // those requests can retry instead of receiving a cached error. + const now = Date.now(); + if ((cachedItem.entry === null || !('error' in cachedItem.entry)) && cachedItem.expiresAt > now) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["toResponseCacheEntry"])(cachedItem.entry); + } + // TTL expired - clean up + this.cache.remove(cacheKey); + } + // Warn if this invocation had entries evicted - indicates cache may be too small. + if (context.invocationID && this.evictedInvocationIDs.has(context.invocationID)) { + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$output$2f$log$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["warnOnce"])(`Response cache entry was evicted for invocation ${context.invocationID}. ` + `Consider increasing NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE (current: ${this.maxSize}).`); + } + } + const { incrementalCache, isOnDemandRevalidate = false, isFallback = false, isRoutePPREnabled = false, isPrefetch = false, waitUntil, invocationID } = context; + const response = await this.getBatcher.batch({ + key, + isOnDemandRevalidate + }, ({ resolve })=>{ + const promise = this.handleGet(key, responseGenerator, { + incrementalCache, + isOnDemandRevalidate, + isFallback, + isRoutePPREnabled, + isPrefetch, + invocationID + }, resolve); + // We need to ensure background revalidates are passed to waitUntil. + if (waitUntil) waitUntil(promise); + return promise; + }); + // In minimal mode, each caller with an invocation ID stores the shared + // failure under its own ID for reuse by related requests. Callers without + // an invocation ID receive the failure but do not store it in the LRU. + if (this.minimal_mode && response && ('error' in response ? invocationID !== undefined : response.cacheControl)) { + const cacheKey = createCacheKey(key, invocationID); + this.cache.set(cacheKey, { + entry: response, + expiresAt: Date.now() + this.ttl + }); + } + return response !== null && 'error' in response ? response : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["toResponseCacheEntry"])(response); + } + /** + * Handles the get request for the response cache. + * + * @param key - The key to get the response cache entry for. + * @param responseGenerator - The response generator to use to generate the response cache entry. + * @param context - The context for the get request. + * @param resolve - The resolve function to use to resolve the response cache entry. + * @returns The response cache entry. + */ async handleGet(key, responseGenerator, context, resolve) { + let previousIncrementalCacheEntry = null; + let resolved = false; + try { + // Get the previous cache entry if not in minimal mode + previousIncrementalCacheEntry = !this.minimal_mode ? await context.incrementalCache.get(key, this.getCacheContext(context.isRoutePPREnabled, context.isFallback)) : null; + // `isStale === -1` signals that the entry is past its `expire` (either + // via an expired tag or, with `cacheLife({ expire })`, past the route's + // expire time in the prerender manifest). In that case we must NOT + // early-resolve with the stale value — instead we fall through to a + // blocking revalidation so the response returned to the user is fresh. + if (previousIncrementalCacheEntry && !context.isOnDemandRevalidate && previousIncrementalCacheEntry.isStale !== -1) { + resolve(previousIncrementalCacheEntry); + resolved = true; + if (!previousIncrementalCacheEntry.isStale || context.isPrefetch) { + // The cached value is still valid, so we don't need to update it yet. + return previousIncrementalCacheEntry; + } + } + // Revalidate the cache entry. + // + // A prefetch request that missed must run its own response generator + // rather than joining an in-flight revalidation through the batcher. A + // background revalidation may be regenerating the concrete (non-fallback) + // entry for this route — e.g. an ISR fallback-shell upgrade scheduled by + // an earlier prefetch sub-request. Joining it would serve that concrete + // result to the prefetch instead of the fallback shell, and which segment + // wins would depend purely on request timing. Running the generator + // directly lets every prefetch segment take the same fallback-shell path, + // independent of any concurrent background upgrade. + const incrementalResponseCacheEntry = context.isPrefetch && previousIncrementalCacheEntry === null ? await this.handleRevalidate(key, context.incrementalCache, context.isRoutePPREnabled, context.isFallback, responseGenerator, previousIncrementalCacheEntry, resolved) : await this.revalidate(key, context.incrementalCache, context.isRoutePPREnabled, context.isFallback, responseGenerator, previousIncrementalCacheEntry, resolved); + if (incrementalResponseCacheEntry !== null && 'error' in incrementalResponseCacheEntry && resolved) { + // The caller already received the stale entry. Report the background + // failure here, as the catch below does for a thrown error. + console.error(incrementalResponseCacheEntry.error); + return null; + } + // Handle null response + if (!incrementalResponseCacheEntry) { + // Remove the cache item if it was set so we don't use it again. + if (this.minimal_mode) { + const cacheKey = createCacheKey(key, context.invocationID); + this.cache.remove(cacheKey); + } + return null; + } + // Resolve for on-demand revalidation or if not already resolved + if (context.isOnDemandRevalidate && !resolved) { + return incrementalResponseCacheEntry; + } + return incrementalResponseCacheEntry; + } catch (err) { + // If we've already resolved the cache entry, we can't reject as we + // already resolved the cache entry so log the error here. + if (resolved) { + console.error(err); + return null; + } + throw err; + } + } + /** + * Revalidates the cache entry for the given key. + * + * @param key - The key to revalidate the cache entry for. + * @param incrementalCache - The incremental cache to use to revalidate the cache entry. + * @param isRoutePPREnabled - Whether the route is PPR enabled. + * @param isFallback - Whether the route is a fallback. + * @param responseGenerator - The response generator to use to generate the response cache entry. + * @param previousIncrementalCacheEntry - The previous cache entry to use to revalidate the cache entry. + * @param hasResolved - Whether the response has been resolved. + * @param waitUntil - Optional function to register background work. + * @param invocationID - The invocation ID for cache key scoping. + * @returns The revalidated cache entry. + */ async revalidate(key, incrementalCache, isRoutePPREnabled, isFallback, responseGenerator, previousIncrementalCacheEntry, hasResolved, waitUntil) { + return this.revalidateBatcher.batch(key, ()=>{ + const promise = this.handleRevalidate(key, incrementalCache, isRoutePPREnabled, isFallback, responseGenerator, previousIncrementalCacheEntry, hasResolved); + // We need to ensure background revalidates are passed to waitUntil. + if (waitUntil) waitUntil(promise); + return promise; + }); + } + async handleRevalidate(key, incrementalCache, isRoutePPREnabled, isFallback, responseGenerator, previousIncrementalCacheEntry, hasResolved) { + let failure; + try { + // Generate the response cache entry using the response generator. + const responseCacheEntry = await responseGenerator({ + hasResolved, + previousCacheEntry: previousIncrementalCacheEntry, + isRevalidating: true + }); + if (!responseCacheEntry) { + return null; + } + if ('error' in responseCacheEntry) { + failure = responseCacheEntry; + } else { + // Convert the response cache entry to an incremental response cache entry. + const incrementalResponseCacheEntry = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["fromResponseCacheEntry"])({ + ...responseCacheEntry, + isMiss: !previousIncrementalCacheEntry + }); + // We want to persist the result only if it has a cache control value + // defined. The minimal mode LRU write is handled in get() so that every + // caller, including batched invocations, populates the cache. + if (incrementalResponseCacheEntry.cacheControl && !this.minimal_mode) { + await incrementalCache.set(key, incrementalResponseCacheEntry.value, { + ...this.getCacheContext(isRoutePPREnabled, isFallback), + cacheControl: incrementalResponseCacheEntry.cacheControl + }); + } + return incrementalResponseCacheEntry; + } + } catch (err) { + await this.retainPreviousCacheEntry(key, incrementalCache, isRoutePPREnabled, isFallback, previousIncrementalCacheEntry); + throw err; + } + await this.retainPreviousCacheEntry(key, incrementalCache, isRoutePPREnabled, isFallback, previousIncrementalCacheEntry); + return failure; + } + // Retain the previous successful value and delay retries after revalidation + // fails. + async retainPreviousCacheEntry(key, incrementalCache, isRoutePPREnabled, isFallback, previousIncrementalCacheEntry) { + if (previousIncrementalCacheEntry == null ? void 0 : previousIncrementalCacheEntry.cacheControl) { + const revalidate = Math.min(Math.max(previousIncrementalCacheEntry.cacheControl.revalidate || 3, 3), 30); + const expire = previousIncrementalCacheEntry.cacheControl.expire === undefined ? undefined : Math.max(revalidate + 3, previousIncrementalCacheEntry.cacheControl.expire); + await incrementalCache.set(key, previousIncrementalCacheEntry.value, { + ...this.getCacheContext(isRoutePPREnabled, isFallback), + cacheControl: { + revalidate: revalidate, + expire: expire + } + }); + } + } + getCacheContext(isRoutePPREnabled, isFallback) { + if (this.route === 'image') { + return { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].IMAGE, + isFallback: false + }; + } + const kind = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["routeKindToIncrementalCacheKind"])(this.route.kind); + if (kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].IMAGE) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('Images must use the image response cache'); + } + return { + route: this.route, + kind, + isRoutePPREnabled, + isFallback + }; + } +} +}), +"[project]/node_modules/next/dist/esm/server/response-cache/types.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "CachedRouteKind", + ()=>CachedRouteKind, + "IncrementalCacheKind", + ()=>IncrementalCacheKind +]); +var CachedRouteKind = /*#__PURE__*/ function(CachedRouteKind) { + CachedRouteKind["APP_PAGE"] = "APP_PAGE"; + CachedRouteKind["APP_ROUTE"] = "APP_ROUTE"; + CachedRouteKind["PAGES"] = "PAGES"; + CachedRouteKind["FETCH"] = "FETCH"; + CachedRouteKind["REDIRECT"] = "REDIRECT"; + CachedRouteKind["IMAGE"] = "IMAGE"; + return CachedRouteKind; +}({}); +var IncrementalCacheKind = /*#__PURE__*/ function(IncrementalCacheKind) { + IncrementalCacheKind["APP_PAGE"] = "APP_PAGE"; + IncrementalCacheKind["APP_ROUTE"] = "APP_ROUTE"; + IncrementalCacheKind["PAGES"] = "PAGES"; + IncrementalCacheKind["FETCH"] = "FETCH"; + IncrementalCacheKind["IMAGE"] = "IMAGE"; + return IncrementalCacheKind; +}({}); +}), +"[project]/node_modules/next/dist/esm/server/response-cache/utils.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "fromResponseCacheEntry", + ()=>fromResponseCacheEntry, + "routeKindToIncrementalCacheKind", + ()=>routeKindToIncrementalCacheKind, + "toResponseCacheEntry", + ()=>toResponseCacheEntry +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/types.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/render-result.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/route-kind.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)"); +; +; +; +; +async function fromResponseCacheEntry(cacheEntry) { + var _cacheEntry_value, _cacheEntry_value1; + return { + ...cacheEntry, + value: ((_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES ? { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES, + html: await cacheEntry.value.html.toUnchunkedString(true), + pageData: cacheEntry.value.pageData, + headers: cacheEntry.value.headers, + status: cacheEntry.value.status + } : ((_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE ? { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE, + html: await cacheEntry.value.html.toUnchunkedString(true), + postponed: cacheEntry.value.postponed, + rscData: cacheEntry.value.rscData, + headers: cacheEntry.value.headers, + status: cacheEntry.value.status, + segmentData: cacheEntry.value.segmentData + } : cacheEntry.value + }; +} +async function toResponseCacheEntry(response) { + var _response_value, _response_value1; + if (!response) return null; + return { + isMiss: response.isMiss, + isStale: response.isStale, + cacheControl: response.cacheControl, + isFallback: response.isFallback, + value: ((_response_value = response.value) == null ? void 0 : _response_value.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES ? { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES, + html: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].fromStatic(response.value.html, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["HTML_CONTENT_TYPE_HEADER"]), + pageData: response.value.pageData, + headers: response.value.headers, + status: response.value.status + } : ((_response_value1 = response.value) == null ? void 0 : _response_value1.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE ? { + kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE, + html: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].fromStatic(response.value.html, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["HTML_CONTENT_TYPE_HEADER"]), + rscData: response.value.rscData, + headers: response.value.headers, + status: response.value.status, + postponed: response.value.postponed, + segmentData: response.value.segmentData + } : response.value + }; +} +function routeKindToIncrementalCacheKind(routeKind) { + switch(routeKind){ + case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].PAGES: + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].PAGES; + case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].APP_PAGE: + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].APP_PAGE; + case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].IMAGE: + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].IMAGE; + case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].APP_ROUTE: + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].APP_ROUTE; + case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].PAGES_API: + // Pages Router API routes are not cached in the incremental cache. + throw new Error(`Unexpected route kind ${routeKind}`); + default: + return routeKind; + } +} +}), +"[project]/node_modules/next/dist/esm/server/route-kind.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "RouteKind", + ()=>RouteKind +]); +var RouteKind = /*#__PURE__*/ function(RouteKind) { + /** + * `PAGES` represents all the React pages that are under `pages/`. + */ RouteKind["PAGES"] = "PAGES"; + /** + * `PAGES_API` represents all the API routes under `pages/api/`. + */ RouteKind["PAGES_API"] = "PAGES_API"; + /** + * `APP_PAGE` represents all the React pages that are under `app/` with the + * filename of `page.{j,t}s{,x}`. + */ RouteKind["APP_PAGE"] = "APP_PAGE"; + /** + * `APP_ROUTE` represents all the API routes and metadata routes that are under `app/` with the + * filename of `route.{j,t}s{,x}`. + */ RouteKind["APP_ROUTE"] = "APP_ROUTE"; + /** + * `IMAGE` represents all the images that are generated by `next/image`. + */ RouteKind["IMAGE"] = "IMAGE"; + return RouteKind; +}({}); +}), +"[project]/node_modules/next/dist/esm/server/send-response.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "sendResponse", + ()=>sendResponse +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/base-http/helpers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/pipe-readable.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/utils.js [app-route] (ecmascript)"); +; +; +; +async function sendResponse(req, res, response, waitUntil) { + if (// environment variable check provides dead code elimination. + ("TURBOPACK compile-time value", "nodejs") !== 'edge' && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isNodeNextResponse"])(res)) { + var _response_headers; + // Copy over the response status. + res.statusCode = response.status; + res.statusMessage = response.statusText; + // TODO: this is not spec-compliant behavior and we should not restrict + // headers that are allowed to appear many times. + // + // See: + // https://github.com/vercel/next.js/pull/70127 + const headersWithMultipleValuesAllowed = [ + // can add more headers to this list if needed + 'set-cookie', + 'www-authenticate', + 'proxy-authenticate', + 'vary' + ]; + (_response_headers = response.headers) == null ? void 0 : _response_headers.forEach((value, name)=>{ + // `x-middleware-set-cookie` is an internal header not needed for the response + if (name.toLowerCase() === 'x-middleware-set-cookie') { + return; + } + // The append handling is special cased for `set-cookie`. + if (name.toLowerCase() === 'set-cookie') { + // TODO: (wyattjoh) replace with native response iteration when we can upgrade undici + for (const cookie of (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["splitCookiesString"])(value)){ + res.appendHeader(name, cookie); + } + } else { + // only append the header if it is either not present in the outbound response + // or if the header supports multiple values + const isHeaderPresent = typeof res.getHeader(name) !== 'undefined'; + if (headersWithMultipleValuesAllowed.includes(name.toLowerCase()) || !isHeaderPresent) { + res.appendHeader(name, value); + } + } + }); + /** + * The response can't be directly piped to the underlying response. The + * following is duplicated from the edge runtime handler. + * + * See packages/next/server/next-server.ts + */ const { originalResponse } = res; + // A response body must not be sent for HEAD requests. See https://httpwg.org/specs/rfc9110.html#HEAD + if (response.body && req.method !== 'HEAD') { + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pipeToNodeResponse"])(response.body, originalResponse, waitUntil); + } else { + originalResponse.end(); + } + } +} +}), +"[project]/node_modules/next/dist/esm/server/stream-utils/encoded-tags.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ENCODED_TAGS", + ()=>ENCODED_TAGS +]); +const ENCODED_TAGS = { + // opening tags do not have the closing `>` since they can contain other attributes such as `` + OPENING: { + // + HEAD: new Uint8Array([ + 60, + 47, + 104, + 101, + 97, + 100, + 62 + ]), + // + BODY: new Uint8Array([ + 60, + 47, + 98, + 111, + 100, + 121, + 62 + ]), + // + HTML: new Uint8Array([ + 60, + 47, + 104, + 116, + 109, + 108, + 62 + ]), + // + BODY_AND_HTML: new Uint8Array([ + 60, + 47, + 98, + 111, + 100, + 121, + 62, + 60, + 47, + 104, + 116, + 109, + 108, + 62 + ]) + }, + META: { + // Only the match the prefix cause the suffix can be different whether it's xml compatible or not ">" or "/>" + // { +"use strict"; + +__turbopack_context__.s([ + "CLOSE_TAG", + ()=>CLOSE_TAG, + "chainStreams", + ()=>chainStreams, + "chainTransformers", + ()=>chainTransformers, + "continueDynamicHTMLResume", + ()=>continueDynamicHTMLResume, + "continueDynamicPrerender", + ()=>continueDynamicPrerender, + "continueFizzStream", + ()=>continueFizzStream, + "continueStaticFallbackPrerender", + ()=>continueStaticFallbackPrerender, + "continueStaticPrerender", + ()=>continueStaticPrerender, + "createBufferedTransformStream", + ()=>createBufferedTransformStream, + "createDeferredSuffixStream", + ()=>createDeferredSuffixStream, + "createDocumentClosingStream", + ()=>createDocumentClosingStream, + "createFlightDataInjectionTransformStream", + ()=>createFlightDataInjectionTransformStream, + "createHeadInsertionTransformStream", + ()=>createHeadInsertionTransformStream, + "createHtmlDataDplIdTransformStream", + ()=>createHtmlDataDplIdTransformStream, + "createMetadataTransformStream", + ()=>createMetadataTransformStream, + "createMoveSuffixStream", + ()=>createMoveSuffixStream, + "createRootLayoutValidatorStream", + ()=>createRootLayoutValidatorStream, + "createRuntimePrefetchTransformStream", + ()=>createRuntimePrefetchTransformStream, + "nodestreamToUint8Array", + ()=>nodestreamToUint8Array, + "renderToInitialFizzStream", + ()=>renderToInitialFizzStream, + "streamFromBuffer", + ()=>streamFromBuffer, + "streamFromString", + ()=>streamFromString, + "streamToBuffer", + ()=>streamToBuffer, + "streamToString", + ()=>streamToString, + "streamToUint8Array", + ()=>streamToUint8Array, + "webstreamToUint8Array", + ()=>webstreamToUint8Array +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/scheduler.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/stream-utils/encoded-tags.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/stream-utils/uint8array-helpers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$errors$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/errors/constants.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/app-router-headers.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$cache$2d$busting$2d$search$2d$param$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/cache-busting-search-param.js [app-route] (ecmascript)"); +; +; +; +; +; +; +; +; +; +function voidCatch() { +// this catcher is designed to be used with pipeTo where we expect the underlying +// pipe implementation to forward errors but we don't want the pipeTo promise to reject +// and be unhandled +} +// We can share the same encoder instance everywhere +// Notably we cannot do the same for TextDecoder because it is stateful +// when handling streaming data +const encoder = new TextEncoder(); +function chainStreams(...streams) { + // If we have no streams, return an empty stream. This behavior is + // intentional as we're now providing the `RenderResult.EMPTY` value. + if (streams.length === 0) { + return new ReadableStream({ + start (controller) { + controller.close(); + } + }); + } + // If we only have 1 stream we fast path it by returning just this stream + if (streams.length === 1) { + return streams[0]; + } + const { readable, writable } = new TransformStream(); + // We always initiate pipeTo immediately. We know we have at least 2 streams + // so we need to avoid closing the writable when this one finishes. + let promise = streams[0].pipeTo(writable, { + preventClose: true + }); + let i = 1; + for(; i < streams.length - 1; i++){ + const nextStream = streams[i]; + promise = promise.then(()=>nextStream.pipeTo(writable, { + preventClose: true + })); + } + // We can omit the length check because we halted before the last stream and there + // is at least two streams so the lastStream here will always be defined + const lastStream = streams[i]; + promise = promise.then(()=>lastStream.pipeTo(writable)); + // Catch any errors from the streams and ignore them, they will be handled + // by whatever is consuming the readable stream. + promise.catch(voidCatch); + return readable; +} +function streamFromString(str) { + return new ReadableStream({ + start (controller) { + controller.enqueue(encoder.encode(str)); + controller.close(); + } + }); +} +function streamFromBuffer(chunk) { + return new ReadableStream({ + start (controller) { + controller.enqueue(chunk); + controller.close(); + } + }); +} +async function streamToChunks(stream) { + const reader = stream.getReader(); + const chunks = []; + while(true){ + const { done, value } = await reader.read(); + if (done) { + break; + } + chunks.push(value); + } + return chunks; +} +function concatUint8Arrays(chunks) { + const totalLength = chunks.reduce((sum, chunk)=>sum + chunk.length, 0); + const result = new Uint8Array(totalLength); + let offset = 0; + for (const chunk of chunks){ + result.set(chunk, offset); + offset += chunk.length; + } + return result; +} +async function webstreamToUint8Array(stream) { + return concatUint8Arrays(await streamToChunks(stream)); +} +function webToReadable(stream) { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + let Readable; + if ("TURBOPACK compile-time truthy", 1) { + Readable = __turbopack_context__.r("[externals]/node:stream [external] (node:stream, cjs)").Readable; + } else //TURBOPACK unreachable + ; + if (stream instanceof Readable) { + return stream; + } + return Readable.fromWeb(stream); + } +} +async function nodestreamToUint8Array(stream) { + const chunks = []; + for await (const chunk of webToReadable(stream)){ + chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk); + } + return Buffer.concat(chunks); +} +async function streamToUint8Array(stream) { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + let Readable; + if ("TURBOPACK compile-time truthy", 1) { + Readable = __turbopack_context__.r("[externals]/node:stream [external] (node:stream, cjs)").Readable; + } else //TURBOPACK unreachable + ; + if (stream instanceof Readable) { + return nodestreamToUint8Array(stream); + } + return webstreamToUint8Array(stream); + } +} +async function streamToBuffer(stream) { + return Buffer.concat(await streamToChunks(stream)); +} +async function streamToString(stream, signal) { + const decoder = new TextDecoder('utf-8', { + fatal: true + }); + let string = ''; + for await (const chunk of stream){ + if (signal == null ? void 0 : signal.aborted) { + return string; + } + string += decoder.decode(chunk, { + stream: true + }); + } + string += decoder.decode(); + return string; +} +function createBufferedTransformStream(options = {}) { + const { maxBufferByteLength = Infinity } = options; + let bufferedChunks = []; + let bufferByteLength = 0; + let pending; + const flush = (controller)=>{ + try { + if (bufferedChunks.length === 0) { + return; + } + const chunk = new Uint8Array(bufferByteLength); + let copiedBytes = 0; + for(let i = 0; i < bufferedChunks.length; i++){ + const bufferedChunk = bufferedChunks[i]; + chunk.set(bufferedChunk, copiedBytes); + copiedBytes += bufferedChunk.byteLength; + } + // We just wrote all the buffered chunks so we need to reset the bufferedChunks array + // and our bufferByteLength to prepare for the next round of buffered chunks + bufferedChunks.length = 0; + bufferByteLength = 0; + controller.enqueue(chunk); + } catch { + // If an error occurs while enqueuing, it can't be due to this + // transformer. It's most likely caused by the controller having been + // errored (for example, if the stream was cancelled). + } + }; + const scheduleFlush = (controller)=>{ + if (pending) { + return; + } + const detached = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + pending = detached; + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["scheduleImmediate"])(()=>{ + try { + flush(controller); + } finally{ + pending = undefined; + detached.resolve(); + } + }); + }; + return new TransformStream({ + transform (chunk, controller) { + // Combine the previous buffer with the new chunk. + bufferedChunks.push(chunk); + bufferByteLength += chunk.byteLength; + if (bufferByteLength >= maxBufferByteLength) { + flush(controller); + } else { + scheduleFlush(controller); + } + }, + flush () { + return pending == null ? void 0 : pending.promise; + } + }); +} +function renderToInitialFizzStream({ ReactDOMServer, element, streamOptions }) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])().trace(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["AppRenderSpan"].renderToReadableStream, async ()=>ReactDOMServer.renderToReadableStream(element, streamOptions)); +} +function createMetadataTransformStream(insert) { + let chunkIndex = -1; + let isMarkRemoved = false; + return new TransformStream({ + async transform (chunk, controller) { + let iconMarkIndex = -1; + let closedHeadIndex = -1; + chunkIndex++; + if (isMarkRemoved) { + controller.enqueue(chunk); + return; + } + let iconMarkLength = 0; + // Only search for the closed head tag once + if (iconMarkIndex === -1) { + iconMarkIndex = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].META.ICON_MARK); + if (iconMarkIndex === -1) { + controller.enqueue(chunk); + return; + } else { + // When we found the `` or `>`, checking the next char to ensure we cover both cases. + iconMarkLength = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].META.ICON_MARK.length; + // Check if next char is /, this is for xml mode. + if (chunk[iconMarkIndex + iconMarkLength] === 47) { + iconMarkLength += 2; + } else { + // The last char is `>` + iconMarkLength++; + } + } + } + // Check if icon mark is inside tag in the first chunk. + if (chunkIndex === 0) { + closedHeadIndex = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HEAD); + if (iconMarkIndex !== -1) { + // The mark icon is located in the 1st chunk before the head tag. + // We do not need to insert the script tag in this case because it's in the head. + // Just remove the icon mark from the chunk. + if (iconMarkIndex < closedHeadIndex) { + const replaced = new Uint8Array(chunk.length - iconMarkLength); + // Remove the icon mark from the chunk. + replaced.set(chunk.subarray(0, iconMarkIndex)); + replaced.set(chunk.subarray(iconMarkIndex + iconMarkLength), iconMarkIndex); + chunk = replaced; + } else { + // The icon mark is after the head tag, replace and insert the script tag at that position. + const insertion = await insert(); + const encodedInsertion = encoder.encode(insertion); + const insertionLength = encodedInsertion.length; + const replaced = new Uint8Array(chunk.length - iconMarkLength + insertionLength); + replaced.set(chunk.subarray(0, iconMarkIndex)); + replaced.set(encodedInsertion, iconMarkIndex); + replaced.set(chunk.subarray(iconMarkIndex + iconMarkLength), iconMarkIndex + insertionLength); + chunk = replaced; + } + isMarkRemoved = true; + } + // If there's no icon mark located, it will be handled later when if present in the following chunks. + } else { + // When it's appeared in the following chunks, we'll need to + // remove the mark and then insert the script tag at that position. + const insertion = await insert(); + const encodedInsertion = encoder.encode(insertion); + const insertionLength = encodedInsertion.length; + // Replace the icon mark with the hoist script or empty string. + const replaced = new Uint8Array(chunk.length - iconMarkLength + insertionLength); + // Set the first part of the chunk, before the icon mark. + replaced.set(chunk.subarray(0, iconMarkIndex)); + // Set the insertion after the icon mark. + replaced.set(encodedInsertion, iconMarkIndex); + // Set the rest of the chunk after the icon mark. + replaced.set(chunk.subarray(iconMarkIndex + iconMarkLength), iconMarkIndex + insertionLength); + chunk = replaced; + isMarkRemoved = true; + } + controller.enqueue(chunk); + } + }); +} +function createHeadInsertionTransformStream(insert) { + let inserted = false; + // We need to track if this transform saw any bytes because if it didn't + // we won't want to insert any server HTML at all + let hasBytes = false; + return new TransformStream({ + async transform (chunk, controller) { + hasBytes = true; + const insertion = await insert(); + if (inserted) { + if (insertion) { + const encodedInsertion = encoder.encode(insertion); + controller.enqueue(encodedInsertion); + } + controller.enqueue(chunk); + } else { + // TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for. + const index = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HEAD); + // In fully static rendering or non PPR rendering cases: + // `/head>` will always be found in the chunk in first chunk rendering. + if (index !== -1) { + if (insertion) { + const encodedInsertion = encoder.encode(insertion); + // Get the total count of the bytes in the chunk and the insertion + // e.g. + // chunk = + // insertion = + // output = [ ] + const insertedHeadContent = new Uint8Array(chunk.length + encodedInsertion.length); + // Append the first part of the chunk, before the head tag + insertedHeadContent.set(chunk.slice(0, index)); + // Append the server inserted content + insertedHeadContent.set(encodedInsertion, index); + // Append the rest of the chunk + insertedHeadContent.set(chunk.slice(index), index + encodedInsertion.length); + controller.enqueue(insertedHeadContent); + } else { + controller.enqueue(chunk); + } + inserted = true; + } else { + // This will happens in PPR rendering during next start, when the page is partially rendered. + // When the page resumes, the head tag will be found in the middle of the chunk. + // Where we just need to append the insertion and chunk to the current stream. + // e.g. + // PPR-static: ... [ resume content ] + // PPR-resume: [ insertion ] [ rest content ] + if (insertion) { + controller.enqueue(encoder.encode(insertion)); + } + controller.enqueue(chunk); + inserted = true; + } + } + }, + async flush (controller) { + // Check before closing if there's anything remaining to insert. + if (hasBytes) { + const insertion = await insert(); + if (insertion) { + controller.enqueue(encoder.encode(insertion)); + } + } + } + }); +} +async function createClientResumeScriptInsertionTransformStream() { + const segmentPath = '/_full'; + const cacheBustingHeader = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$cache$2d$busting$2d$search$2d$param$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["computeCacheBustingSearchParam"])('1', '/_full', undefined, undefined // headers[NEXT_URL] + ); + const searchStr = `${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_RSC_UNION_QUERY"]}=${cacheBustingHeader}`; + const NEXT_CLIENT_RESUME_SCRIPT = ``; + let didAlreadyInsert = false; + return new TransformStream({ + transform (chunk, controller) { + if (didAlreadyInsert) { + // Already inserted the script into the head. Pass through. + controller.enqueue(chunk); + return; + } + // TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for. + const headClosingTagIndex = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HEAD); + if (headClosingTagIndex === -1) { + // In fully static rendering or non PPR rendering cases: + // `/head>` will always be found in the chunk in first chunk rendering. + controller.enqueue(chunk); + return; + } + const encodedInsertion = encoder.encode(NEXT_CLIENT_RESUME_SCRIPT); + // Get the total count of the bytes in the chunk and the insertion + // e.g. + // chunk = + // insertion = + // output = [ ] + const insertedHeadContent = new Uint8Array(chunk.length + encodedInsertion.length); + // Append the first part of the chunk, before the head tag + insertedHeadContent.set(chunk.slice(0, headClosingTagIndex)); + // Append the server inserted content + insertedHeadContent.set(encodedInsertion, headClosingTagIndex); + // Append the rest of the chunk + insertedHeadContent.set(chunk.slice(headClosingTagIndex), headClosingTagIndex + encodedInsertion.length); + controller.enqueue(insertedHeadContent); + didAlreadyInsert = true; + } + }); +} +function createDeferredSuffixStream(suffix) { + let flushed = false; + let pending; + const flush = (controller)=>{ + const detached = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])(); + pending = detached; + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["scheduleImmediate"])(()=>{ + try { + controller.enqueue(encoder.encode(suffix)); + } catch { + // If an error occurs while enqueuing it can't be due to this + // transformers fault. It's likely due to the controller being + // errored due to the stream being cancelled. + } finally{ + pending = undefined; + detached.resolve(); + } + }); + }; + return new TransformStream({ + transform (chunk, controller) { + controller.enqueue(chunk); + // If we've already flushed, we're done. + if (flushed) return; + // Schedule the flush to happen. + flushed = true; + flush(controller); + }, + flush (controller) { + if (pending) return pending.promise; + if (flushed) return; + // Flush now. + controller.enqueue(encoder.encode(suffix)); + } + }); +} +function createFlightDataInjectionTransformStream(stream, delayDataUntilFirstHtmlChunk) { + let htmlStreamFinished = false; + let pull = null; + let donePulling = false; + function startOrContinuePulling(controller) { + if (!pull) { + pull = startPulling(controller); + } + return pull; + } + async function startPulling(controller) { + const reader = stream.getReader(); + if (delayDataUntilFirstHtmlChunk) { + // NOTE: streaming flush + // We are buffering here for the inlined data stream because the + // "shell" stream might be chunkenized again by the underlying stream + // implementation, e.g. with a specific high-water mark. To ensure it's + // the safe timing to pipe the data stream, this extra tick is + // necessary. + // We don't start reading until we've left the current Task to ensure + // that it's inserted after flushing the shell. Note that this implementation + // might get stale if impl details of Fizz change in the future. + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["atLeastOneTask"])(); + } + try { + while(true){ + const { done, value } = await reader.read(); + if (done) { + donePulling = true; + return; + } + // We want to prioritize HTML over RSC data. + // The SSR render is based on the same RSC stream, so when we get a new RSC chunk, + // we're likely to produce an HTML chunk as well, so give it a chance to flush first. + if (!delayDataUntilFirstHtmlChunk && !htmlStreamFinished) { + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["atLeastOneTask"])(); + } + controller.enqueue(value); + } + } catch (err) { + controller.error(err); + } + } + return new TransformStream({ + start (controller) { + if (!delayDataUntilFirstHtmlChunk) { + startOrContinuePulling(controller); + } + }, + transform (chunk, controller) { + controller.enqueue(chunk); + // Start the streaming if it hasn't already been started yet. + if (delayDataUntilFirstHtmlChunk) { + startOrContinuePulling(controller); + } + }, + flush (controller) { + htmlStreamFinished = true; + if (donePulling) { + return; + } + return startOrContinuePulling(controller); + } + }); +} +const CLOSE_TAG = ''; +function createMoveSuffixStream() { + let foundSuffix = false; + return new TransformStream({ + transform (chunk, controller) { + if (foundSuffix) { + return controller.enqueue(chunk); + } + const index = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML); + if (index > -1) { + foundSuffix = true; + // If the whole chunk is the suffix, then don't write anything, it will + // be written in the flush. + if (chunk.length === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML.length) { + return; + } + // Write out the part before the suffix. + const before = chunk.slice(0, index); + controller.enqueue(before); + // In the case where the suffix is in the middle of the chunk, we need + // to split the chunk into two parts. + if (chunk.length > __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML.length + index) { + // Write out the part after the suffix. + const after = chunk.slice(index + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML.length); + controller.enqueue(after); + } + } else { + controller.enqueue(chunk); + } + }, + flush (controller) { + // Even if we didn't find the suffix, the HTML is not valid if we don't + // add it, so insert it at the end. + controller.enqueue(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML); + } + }); +} +function createStripDocumentClosingTagsTransform() { + return new TransformStream({ + transform (chunk, controller) { + // We rely on the assumption that chunks will never break across a code unit. + // This is reasonable because we currently concat all of React's output from a single + // flush into one chunk before streaming it forward which means the chunk will represent + // a single coherent utf-8 string. This is not safe to use if we change our streaming to no + // longer do this large buffered chunk + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isEquivalentUint8Arrays"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML) || (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isEquivalentUint8Arrays"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY) || (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isEquivalentUint8Arrays"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HTML)) { + // the entire chunk is the closing tags; return without enqueueing anything. + return; + } + // We assume these tags will go at together at the end of the document and that + // they won't appear anywhere else in the document. This is not really a safe assumption + // but until we revamp our streaming infra this is a performant way to string the tags + chunk = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["removeFromUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY); + chunk = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["removeFromUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HTML); + controller.enqueue(chunk); + } + }); +} +function createHtmlDataDplIdTransformStream(dplId) { + let didTransform = false; + return new TransformStream({ + transform (chunk, controller) { + if (didTransform) { + controller.enqueue(chunk); + return; + } + const htmlTagIndex = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].OPENING.HTML); + if (htmlTagIndex === -1) { + controller.enqueue(chunk); + return; + } + // Insert the data-dpl-id attribute right after " -1) { + foundHtml = true; + } + if (!foundBody && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].OPENING.BODY) > -1) { + foundBody = true; + } + controller.enqueue(chunk); + }, + flush (controller) { + const missingTags = []; + if (!foundHtml) missingTags.push('html'); + if (!foundBody) missingTags.push('body'); + if (!missingTags.length) return; + controller.enqueue(encoder.encode(` + + `)); + } + }); +} +function chainTransformers(readable, transformers) { + let stream = readable; + for (const transformer of transformers){ + if (!transformer) continue; + stream = stream.pipeThrough(transformer); + } + return stream; +} +async function continueFizzStream(renderStream, { suffix, inlinedDataStream, waitForAllReady, deploymentId, getServerInsertedHTML, getServerInsertedMetadata, validateRootLayout }) { + // Suffix itself might contain close tags at the end, so we need to split it. + const suffixUnclosed = suffix ? suffix.split(CLOSE_TAG, 1)[0] : null; + if (waitForAllReady) { + // Wait for all Suspense boundaries to resolve before continuing. + await renderStream.allReady; + } else { + // Otherwise, we want to make sure Fizz is done with all microtasky work + // before we start pulling the stream and cause a flush. + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["waitAtLeastOneReactRenderTask"])(); + } + return chainTransformers(renderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata), + // Insert suffix content + suffixUnclosed != null && suffixUnclosed.length > 0 ? createDeferredSuffixStream(suffixUnclosed) : null, + // Insert the inlined data (Flight data, form state, etc.) stream into the HTML + inlinedDataStream ? createFlightDataInjectionTransformStream(inlinedDataStream, true) : null, + // Validate the root layout for missing html or body tags + validateRootLayout ? createRootLayoutValidatorStream() : null, + // Close tags should always be deferred to the end + createMoveSuffixStream(), + // Special head insertions + // TODO-APP: Insert server side html to end of head in app layout rendering, to avoid + // hydration errors. Remove this once it's ready to be handled by react itself. + createHeadInsertionTransformStream(getServerInsertedHTML) + ]); +} +async function continueDynamicPrerender(prerenderStream, { getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) { + return chainTransformers(prerenderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + createStripDocumentClosingTagsTransform(), + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Insert generated tags to head + createHeadInsertionTransformStream(getServerInsertedHTML), + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata) + ]); +} +async function continueStaticPrerender(prerenderStream, { inlinedDataStream, getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) { + return chainTransformers(prerenderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + // Add build id comment to start of the HTML document (in export mode) + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Insert generated tags to head + createHeadInsertionTransformStream(getServerInsertedHTML), + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata), + // Insert the inlined data (Flight data, form state, etc.) stream into the HTML + createFlightDataInjectionTransformStream(inlinedDataStream, true), + // Close tags should always be deferred to the end + createMoveSuffixStream() + ]); +} +async function continueStaticFallbackPrerender(prerenderStream, { inlinedDataStream, getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) { + // Same as `continueStaticPrerender`, but also inserts an additional script + // to instruct the client to start fetching the hydration data as early + // as possible. + return chainTransformers(prerenderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Insert generated tags to head + createHeadInsertionTransformStream(getServerInsertedHTML), + // Insert the client resume script into the head + await createClientResumeScriptInsertionTransformStream(), + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata), + // Insert the inlined data (Flight data, form state, etc.) stream into the HTML + createFlightDataInjectionTransformStream(inlinedDataStream, true), + // Close tags should always be deferred to the end + createMoveSuffixStream() + ]); +} +async function continueDynamicHTMLResume(renderStream, { delayDataUntilFirstHtmlChunk, inlinedDataStream, getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) { + return chainTransformers(renderStream, [ + // Buffer everything to avoid flushing too frequently + createBufferedTransformStream(), + // Insert data-dpl-id attribute on the html tag + deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null, + // Insert generated tags to head + createHeadInsertionTransformStream(getServerInsertedHTML), + // Transform metadata + createMetadataTransformStream(getServerInsertedMetadata), + // Insert the inlined data (Flight data, form state, etc.) stream into the HTML + createFlightDataInjectionTransformStream(inlinedDataStream, delayDataUntilFirstHtmlChunk), + // Close tags should always be deferred to the end + createMoveSuffixStream() + ]); +} +function createDocumentClosingStream() { + return streamFromString(CLOSE_TAG); +} +function createRuntimePrefetchTransformStream(sentinel, isPartial, staleTime) { + const enc = new TextEncoder(); + // Search for: [] + // Replace with: [,] + const search = enc.encode(`[${sentinel}]`); + const first = search[0]; + const replace = enc.encode(`[${isPartial},${staleTime}]`); + const searchLen = search.length; + let currentChunk = null; + let found = false; + function processChunk(controller, nextChunk) { + if (found) { + if (nextChunk) { + controller.enqueue(nextChunk); + } + return; + } + if (currentChunk) { + // We can't search past the index that can contain a full match + let exclusiveUpperBound = currentChunk.length - (searchLen - 1); + if (nextChunk) { + // If we have any overflow bytes we can search up to the chunk's final byte + exclusiveUpperBound += Math.min(nextChunk.length, searchLen - 1); + } + if (exclusiveUpperBound < 1) { + // we can't match the current chunk. + controller.enqueue(currentChunk); + currentChunk = nextChunk // advance so we don't process this chunk again + ; + return; + } + let currentIndex = currentChunk.indexOf(first); + // check the current candidate match if it is within the bounds of our search space for the currentChunk + candidateLoop: while(-1 < currentIndex && currentIndex < exclusiveUpperBound){ + // We already know index 0 matches because we used indexOf to find the candidateIndex so we start at index 1 + let matchIndex = 1; + while(matchIndex < searchLen){ + const candidateIndex = currentIndex + matchIndex; + const candidateValue = candidateIndex < currentChunk.length ? currentChunk[candidateIndex] : nextChunk[candidateIndex - currentChunk.length]; + if (candidateValue !== search[matchIndex]) { + // No match, reset and continue the search from the next position + currentIndex = currentChunk.indexOf(first, currentIndex + 1); + continue candidateLoop; + } + matchIndex++; + } + // We found a complete match. currentIndex is our starting point to replace the value. + found = true; + // enqueue everything up to the match + controller.enqueue(currentChunk.subarray(0, currentIndex)); + // enqueue the replacement value + controller.enqueue(replace); + // If there are bytes in the currentChunk after the match enqueue them + if (currentIndex + searchLen < currentChunk.length) { + controller.enqueue(currentChunk.slice(currentIndex + searchLen)); + } + // If we have a next chunk we enqueue it now + if (nextChunk) { + // if replacement spills over to the next chunk we first exclude the replaced bytes + const overflowBytes = currentIndex + searchLen - currentChunk.length; + const truncatedChunk = overflowBytes > 0 ? nextChunk.subarray(overflowBytes) : nextChunk; + controller.enqueue(truncatedChunk); + } + // We are now in found mode and don't need to track currentChunk anymore + currentChunk = null; + return; + } + // No match found in this chunk, emit it and wait for the next one + controller.enqueue(currentChunk); + } + // Advance to the next chunk + currentChunk = nextChunk; + } + return new TransformStream({ + transform (chunk, controller) { + processChunk(controller, chunk); + }, + flush (controller) { + processChunk(controller, null); + } + }); +} +}), +"[project]/node_modules/next/dist/esm/server/stream-utils/uint8array-helpers.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Find the starting index of Uint8Array `b` within Uint8Array `a`. + */ __turbopack_context__.s([ + "indexOfUint8Array", + ()=>indexOfUint8Array, + "isEquivalentUint8Arrays", + ()=>isEquivalentUint8Arrays, + "removeFromUint8Array", + ()=>removeFromUint8Array +]); +function indexOfUint8Array(a, b) { + if (b.length === 0) return 0; + if (a.length === 0 || b.length > a.length) return -1; + // Use Node's native implementation when available. + if (typeof Buffer !== 'undefined') { + const haystack = Buffer.isBuffer(a) ? a : Buffer.from(a.buffer, a.byteOffset, a.byteLength); + return haystack.indexOf(b); + } + // start iterating through `a` + for(let i = 0; i <= a.length - b.length; i++){ + let completeMatch = true; + // from index `i`, iterate through `b` and check for mismatch + for(let j = 0; j < b.length; j++){ + // if the values do not match, then this isn't a complete match, exit `b` iteration early and iterate to next index of `a`. + if (a[i + j] !== b[j]) { + completeMatch = false; + break; + } + } + if (completeMatch) { + return i; + } + } + return -1; +} +function isEquivalentUint8Arrays(a, b) { + if (a.length !== b.length) return false; + for(let i = 0; i < a.length; i++){ + if (a[i] !== b[i]) return false; + } + return true; +} +function removeFromUint8Array(a, b) { + const tagIndex = indexOfUint8Array(a, b); + if (tagIndex === 0) return a.subarray(b.length); + if (tagIndex > -1) { + const removed = new Uint8Array(a.length - b.length); + removed.set(a.subarray(0, tagIndex)); + removed.set(a.subarray(tagIndex + b.length), tagIndex); + return removed; + } else { + return a; + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/error.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "PageSignatureError", + ()=>PageSignatureError, + "RemovedPageError", + ()=>RemovedPageError, + "RemovedUAError", + ()=>RemovedUAError +]); +class PageSignatureError extends Error { + constructor({ page }){ + super(`The middleware "${page}" accepts an async API directly with the form: + + export function middleware(request, event) { + return NextResponse.redirect('/new-location') + } + + Read more: https://nextjs.org/docs/messages/middleware-new-signature + `); + } +} +class RemovedPageError extends Error { + constructor(){ + super(`The request.page has been deprecated in favour of \`URLPattern\`. + Read more: https://nextjs.org/docs/messages/middleware-request-page + `); + } +} +class RemovedUAError extends Error { + constructor(){ + super(`The request.ua has been removed in favour of \`userAgent\` function. + Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent + `); + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/next-url.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "NextURL", + ()=>NextURL +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$detect$2d$domain$2d$locale$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/i18n/detect-domain-locale.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$format$2d$next$2d$pathname$2d$info$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/format-next-pathname-info.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$get$2d$hostname$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/get-hostname.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$next$2d$pathname$2d$info$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/get-next-pathname-info.js [app-route] (ecmascript)"); +; +; +; +; +const REGEX_LOCALHOST_HOSTNAME = /^(?:127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\[::1\]|localhost)$/; +function parseURL(url, base) { + const parsed = new URL(String(url), base && String(base)); + if (REGEX_LOCALHOST_HOSTNAME.test(parsed.hostname)) { + parsed.hostname = 'localhost'; + } + return parsed; +} +const Internal = Symbol('NextURLInternal'); +class NextURL { + constructor(input, baseOrOpts, opts){ + let base; + let options; + if (typeof baseOrOpts === 'object' && 'pathname' in baseOrOpts || typeof baseOrOpts === 'string') { + base = baseOrOpts; + options = opts || {}; + } else { + options = opts || baseOrOpts || {}; + } + this[Internal] = { + url: parseURL(input, base ?? options.base), + options: options, + basePath: '' + }; + this.analyze(); + } + analyze() { + var _this_Internal_options_nextConfig_i18n, _this_Internal_options_nextConfig, _this_Internal_domainLocale, _this_Internal_options_nextConfig_i18n1, _this_Internal_options_nextConfig1; + const info = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$next$2d$pathname$2d$info$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getNextPathnameInfo"])(this[Internal].url.pathname, { + nextConfig: this[Internal].options.nextConfig, + parseData: !("TURBOPACK compile-time value", void 0), + i18nProvider: this[Internal].options.i18nProvider + }); + const hostname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$get$2d$hostname$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getHostname"])(this[Internal].url, this[Internal].options.headers); + this[Internal].domainLocale = this[Internal].options.i18nProvider ? this[Internal].options.i18nProvider.detectDomainLocale(hostname) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$detect$2d$domain$2d$locale$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["detectDomainLocale"])((_this_Internal_options_nextConfig = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n = _this_Internal_options_nextConfig.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n.domains, hostname); + const defaultLocale = ((_this_Internal_domainLocale = this[Internal].domainLocale) == null ? void 0 : _this_Internal_domainLocale.defaultLocale) || ((_this_Internal_options_nextConfig1 = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n1 = _this_Internal_options_nextConfig1.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n1.defaultLocale); + this[Internal].url.pathname = info.pathname; + this[Internal].defaultLocale = defaultLocale; + this[Internal].basePath = info.basePath ?? ''; + this[Internal].buildId = info.buildId; + this[Internal].locale = info.locale ?? defaultLocale; + this[Internal].trailingSlash = info.trailingSlash; + } + formatPathname() { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$format$2d$next$2d$pathname$2d$info$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["formatNextPathnameInfo"])({ + basePath: this[Internal].basePath, + buildId: this[Internal].buildId, + defaultLocale: !this[Internal].options.forceLocale ? this[Internal].defaultLocale : undefined, + locale: this[Internal].locale, + pathname: this[Internal].url.pathname, + trailingSlash: this[Internal].trailingSlash + }); + } + formatSearch() { + return this[Internal].url.search; + } + get buildId() { + return this[Internal].buildId; + } + set buildId(buildId) { + this[Internal].buildId = buildId; + } + get locale() { + return this[Internal].locale ?? ''; + } + set locale(locale) { + var _this_Internal_options_nextConfig_i18n, _this_Internal_options_nextConfig; + if (!this[Internal].locale || !((_this_Internal_options_nextConfig = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n = _this_Internal_options_nextConfig.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n.locales.includes(locale))) { + throw new TypeError(`The NextURL configuration includes no locale "${locale}"`); + } + this[Internal].locale = locale; + } + get defaultLocale() { + return this[Internal].defaultLocale; + } + get domainLocale() { + return this[Internal].domainLocale; + } + get searchParams() { + return this[Internal].url.searchParams; + } + get host() { + return this[Internal].url.host; + } + set host(value) { + this[Internal].url.host = value; + } + get hostname() { + return this[Internal].url.hostname; + } + set hostname(value) { + this[Internal].url.hostname = value; + } + get port() { + return this[Internal].url.port; + } + set port(value) { + this[Internal].url.port = value; + } + get protocol() { + return this[Internal].url.protocol; + } + set protocol(value) { + this[Internal].url.protocol = value; + } + get href() { + const pathname = this.formatPathname(); + const search = this.formatSearch(); + return `${this.protocol}//${this.host}${pathname}${search}${this.hash}`; + } + set href(url) { + this[Internal].url = parseURL(url); + this.analyze(); + } + get origin() { + return this[Internal].url.origin; + } + get pathname() { + return this[Internal].url.pathname; + } + set pathname(value) { + this[Internal].url.pathname = value; + } + get hash() { + return this[Internal].url.hash; + } + set hash(value) { + this[Internal].url.hash = value; + } + get search() { + return this[Internal].url.search; + } + set search(value) { + this[Internal].url.search = value; + } + get password() { + return this[Internal].url.password; + } + set password(value) { + this[Internal].url.password = value; + } + get username() { + return this[Internal].url.username; + } + set username(value) { + this[Internal].url.username = value; + } + get basePath() { + return this[Internal].basePath; + } + set basePath(value) { + this[Internal].basePath = value.startsWith('/') ? value : `/${value}`; + } + toString() { + return this.href; + } + toJSON() { + return this.href; + } + [Symbol.for('edge-runtime.inspect.custom')]() { + return { + href: this.href, + origin: this.origin, + protocol: this.protocol, + username: this.username, + password: this.password, + host: this.host, + hostname: this.hostname, + port: this.port, + pathname: this.pathname, + search: this.search, + searchParams: this.searchParams, + hash: this.hash + }; + } + clone() { + return new NextURL(String(this), this[Internal].options); + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/headers.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "HeadersAdapter", + ()=>HeadersAdapter, + "ReadonlyHeadersError", + ()=>ReadonlyHeadersError +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/reflect.js [app-route] (ecmascript)"); +; +class ReadonlyHeadersError extends Error { + constructor(){ + super('Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers'); + } + static callable() { + throw new ReadonlyHeadersError(); + } +} +/** + * Builds the read methods for a sealed view that exposes all of `target`. + */ function createPassThroughMethods(target, sealed) { + return { + get: target.get.bind(target), + has: target.has.bind(target), + getSetCookie: target.getSetCookie.bind(target), + keys: target.keys.bind(target), + values: target.values.bind(target), + entries: target.entries.bind(target), + [Symbol.iterator]: target[Symbol.iterator].bind(target), + // The native method passes the unsealed target as the callback's `parent` + // argument. That is a mutable handle on the underlying headers. Pass the + // sealed view instead. + forEach (callbackfn, thisArg) { + for (const [name, value] of target.entries()){ + callbackfn.call(thisArg, value, name, sealed); + } + } + }; +} +/** + * Builds the read methods for a sealed view that omits the header names matched + * by `isHidden`. + */ function createHidingMethods(target, sealed, isHidden) { + function* entries() { + for (const entry of target.entries()){ + if (!isHidden(entry[0])) { + yield entry; + } + } + } + return { + entries, + [Symbol.iterator]: entries, + get: (name)=>isHidden(name) ? null : target.get(name), + has: (name)=>isHidden(name) ? false : target.has(name), + getSetCookie: ()=>isHidden('set-cookie') ? [] : target.getSetCookie(), + *keys () { + for (const name of target.keys()){ + if (!isHidden(name)) { + yield name; + } + } + }, + *values () { + for (const [, value] of entries()){ + yield value; + } + }, + // The native method passes the unsealed target as the callback's `parent` + // argument. That is a mutable handle on the underlying headers. Pass the + // sealed view instead. + forEach (callbackfn, thisArg) { + for (const [name, value] of entries()){ + callbackfn.call(thisArg, value, name, sealed); + } + } + }; +} +class HeadersAdapter extends Headers { + constructor(headers){ + // We've already overridden the methods that would be called, so we're just + // calling the super constructor to ensure that the instanceof check works. + super(); + this.headers = new Proxy(headers, { + get (target, prop, receiver) { + // Because this is just an object, we expect that all "get" operations + // are for properties. If it's a "get" for a symbol, we'll just return + // the symbol. + if (typeof prop === 'symbol') { + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, prop, receiver); + } + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, return undefined. + if (typeof original === 'undefined') return; + // If the original casing exists, return the value. + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, original, receiver); + }, + set (target, prop, value, receiver) { + if (typeof prop === 'symbol') { + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].set(target, prop, value, receiver); + } + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, use the prop as the key. + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].set(target, original ?? prop, value, receiver); + }, + has (target, prop) { + if (typeof prop === 'symbol') return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].has(target, prop); + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, return false. + if (typeof original === 'undefined') return false; + // If the original casing exists, return true. + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].has(target, original); + }, + deleteProperty (target, prop) { + if (typeof prop === 'symbol') return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].deleteProperty(target, prop); + const lowercased = prop.toLowerCase(); + // Let's find the original casing of the key. This assumes that there is + // no mixed case keys (e.g. "Content-Type" and "content-type") in the + // headers object. + const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased); + // If the original casing doesn't exist, return true. + if (typeof original === 'undefined') return true; + // If the original casing exists, delete the property. + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].deleteProperty(target, original); + } + }); + } + /** + * Seals a Headers instance to prevent modification by throwing an error when + * any mutating method is called. + * + * The sealed view stays live. Later writes to `headers` remain visible + * through it. + * + * `hidden` omits the given header names from every read operation (`get`, + * `has`, `getSetCookie`, `forEach`, and iteration). The names must be + * lowercase. The underlying headers are neither copied nor mutated, so hidden + * headers remain available to the framework. + */ static seal(headers, hidden) { + const isHidden = hidden && hidden.size > 0 ? (name)=>hidden.has(name.toLowerCase()) : null; + // The methods are built once per sealed view and reused, so repeated access + // returns the same function instead of a fresh closure. They are assigned + // after the proxy exists because `forEach` hands the proxy to its callback. + // Creating the proxy runs no trap, so nothing can read them before then. + let methods; + const sealed = new Proxy(headers, { + get (target, prop, receiver) { + switch(prop){ + case 'append': + case 'delete': + case 'set': + return ReadonlyHeadersError.callable; + case Symbol.iterator: + return methods[Symbol.iterator]; + case 'get': + case 'has': + case 'getSetCookie': + case 'keys': + case 'values': + case 'entries': + case 'forEach': + return methods[prop]; + default: + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, prop, receiver); + } + } + }); + methods = isHidden ? createHidingMethods(headers, sealed, isHidden) : createPassThroughMethods(headers, sealed); + return sealed; + } + /** + * @param headers + * @returns A fresh object identity backed by the original value + */ static fresh(headers) { + return new Proxy(headers, { + get (target, prop, receiver) { + return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, prop, receiver); + } + }); + } + /** + * Merges a header value into a string. This stores multiple values as an + * array, so we need to merge them into a string. + * + * @param value a header value + * @returns a merged header value (a string) + */ merge(value) { + if (Array.isArray(value)) return value.join(', '); + return value; + } + /** + * Creates a Headers instance from a plain object or a Headers instance. + * + * @param headers a plain object or a Headers instance + * @returns a headers instance + */ static from(headers) { + if (headers instanceof Headers) return headers; + return new HeadersAdapter(headers); + } + append(name, value) { + const existing = this.headers[name]; + if (typeof existing === 'string') { + this.headers[name] = [ + existing, + value + ]; + } else if (Array.isArray(existing)) { + existing.push(value); + } else { + this.headers[name] = value; + } + } + delete(name) { + delete this.headers[name]; + } + get(name) { + const value = this.headers[name]; + if (typeof value !== 'undefined') return this.merge(value); + return null; + } + has(name) { + return typeof this.headers[name] !== 'undefined'; + } + set(name, value) { + this.headers[name] = value; + } + forEach(callbackfn, thisArg) { + for (const [name, value] of this.entries()){ + callbackfn.call(thisArg, value, name, this); + } + } + *entries() { + for (const key of Object.keys(this.headers)){ + const name = key.toLowerCase(); + // We assert here that this is a string because we got it from the + // Object.keys() call above. + const value = this.get(name); + yield [ + name, + value + ]; + } + } + *keys() { + for (const key of Object.keys(this.headers)){ + const name = key.toLowerCase(); + yield name; + } + } + *values() { + for (const key of Object.keys(this.headers)){ + // We assert here that this is a string because we got it from the + // Object.keys() call above. + const value = this.get(key); + yield value; + } + } + [Symbol.iterator]() { + return this.entries(); + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/next-request.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "NextRequestAdapter", + ()=>NextRequestAdapter, + "ResponseAborted", + ()=>ResponseAborted, + "ResponseAbortedName", + ()=>ResponseAbortedName, + "createAbortController", + ()=>createAbortController, + "signalFromNodeResponse", + ()=>signalFromNodeResponse +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/request-meta.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/utils.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/request.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/base-http/helpers.js [app-route] (ecmascript)"); +; +; +; +; +const ResponseAbortedName = 'ResponseAborted'; +class ResponseAborted extends Error { + constructor(...args){ + super(...args), this.name = ResponseAbortedName; + } +} +function createAbortController(response) { + const controller = new AbortController(); + // If `finish` fires first, then `res.end()` has been called and the close is + // just us finishing the stream on our side. If `close` fires first, then we + // know the client disconnected before we finished. + response.once('close', ()=>{ + if (response.writableFinished) return; + controller.abort(new ResponseAborted()); + }); + return controller; +} +function signalFromNodeResponse(response) { + const { errored, destroyed } = response; + if (errored || destroyed) { + return AbortSignal.abort(errored ?? new ResponseAborted()); + } + const { signal } = createAbortController(response); + return signal; +} +class NextRequestAdapter { + static fromBaseNextRequest(request, signal) { + if (// environment variable check provides dead code elimination. + ("TURBOPACK compile-time value", "nodejs") === 'edge' && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isWebNextRequest"])(request)) //TURBOPACK unreachable + ; + else if (// environment variable check provides dead code elimination. + ("TURBOPACK compile-time value", "nodejs") !== 'edge' && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$helpers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isNodeNextRequest"])(request)) { + return NextRequestAdapter.fromNodeNextRequest(request, signal); + } else { + throw new Error('Invariant: Unsupported NextRequest type'); + } + } + static fromNodeNextRequest(request, signal) { + // HEAD and GET requests can not have a body. + let body = null; + if (request.method !== 'GET' && request.method !== 'HEAD' && request.body) { + // @ts-expect-error - this is handled by undici, when streams/web land use it instead + body = request.body; + } + let url; + if (request.url.startsWith('http')) { + url = new URL(request.url); + } else { + // Grab the full URL from the request metadata. + const base = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestMeta"])(request, 'initURL'); + if (!base || !base.startsWith('http')) { + // Because the URL construction relies on the fact that the URL provided + // is absolute, we need to provide a base URL. We can't use the request + // URL because it's relative, so we use a dummy URL instead. + url = new URL(request.url, 'http://n'); + } else { + url = new URL(request.url, base); + } + } + return new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextRequest"](url, { + method: request.method, + headers: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["fromNodeOutgoingHttpHeaders"])(request.headers), + duplex: 'half', + signal, + // geo + // ip + // nextConfig + // body can not be passed if request was aborted + // or we get a Request body was disturbed error + ...signal.aborted ? {} : { + body + } + }); + } + static fromWebNextRequest(request) { + // HEAD and GET requests can not have a body. + let body = null; + if (request.method !== 'GET' && request.method !== 'HEAD') { + body = request.body; + } + return new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextRequest"](request.url, { + method: request.method, + headers: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["fromNodeOutgoingHttpHeaders"])(request.headers), + duplex: 'half', + signal: request.request.signal, + // geo + // ip + // nextConfig + // body can not be passed if request was aborted + // or we get a Request body was disturbed error + ...request.request.signal.aborted ? {} : { + body + } + }); + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/reflect.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ReflectAdapter", + ()=>ReflectAdapter +]); +class ReflectAdapter { + static get(target, prop, receiver) { + const value = Reflect.get(target, prop, receiver); + if (typeof value === 'function') { + return value.bind(target); + } + return value; + } + static set(target, prop, value, receiver) { + return Reflect.set(target, prop, value, receiver); + } + static has(target, prop) { + return Reflect.has(target, prop); + } + static deleteProperty(target, prop) { + return Reflect.deleteProperty(target, prop); + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/cookies.js [app-route] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f40$edge$2d$runtime$2f$cookies$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js [app-route] (ecmascript)"); +; +}), +"[project]/node_modules/next/dist/esm/server/web/spec-extension/request.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "INTERNALS", + ()=>INTERNALS, + "NextRequest", + ()=>NextRequest +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$next$2d$url$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/next-url.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/utils.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/error.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$cookies$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/cookies.js [app-route] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f40$edge$2d$runtime$2f$cookies$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js [app-route] (ecmascript)"); +; +; +; +; +const INTERNALS = Symbol('internal request'); +class NextRequest extends Request { + constructor(input, init = {}){ + const url = typeof input !== 'string' && 'url' in input ? input.url : String(input); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["validateURL"])(url); + // node Request instance requires duplex option when a body + // is present or it errors, we don't handle this for + // Request being passed in since it would have already + // errored if this wasn't configured + if ("TURBOPACK compile-time truthy", 1) { + if (init.body && init.duplex !== 'half') { + init.duplex = 'half'; + } + } + if (input instanceof Request) super(input, init); + else super(url, init); + const nextUrl = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$next$2d$url$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextURL"](url, { + headers: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["toNodeOutgoingHttpHeaders"])(this.headers), + nextConfig: init.nextConfig + }); + this[INTERNALS] = { + cookies: new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f40$edge$2d$runtime$2f$cookies$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RequestCookies"](this.headers), + nextUrl, + url: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : nextUrl.toString() + }; + } + [Symbol.for('edge-runtime.inspect.custom')]() { + return { + cookies: this.cookies, + nextUrl: this.nextUrl, + url: this.url, + // rest of props come from Request + bodyUsed: this.bodyUsed, + cache: this.cache, + credentials: this.credentials, + destination: this.destination, + headers: Object.fromEntries(this.headers), + integrity: this.integrity, + keepalive: this.keepalive, + method: this.method, + mode: this.mode, + redirect: this.redirect, + referrer: this.referrer, + referrerPolicy: this.referrerPolicy, + signal: this.signal + }; + } + get cookies() { + return this[INTERNALS].cookies; + } + get nextUrl() { + return this[INTERNALS].nextUrl; + } + /** + * @deprecated + * `page` has been deprecated in favour of `URLPattern`. + * Read more: https://nextjs.org/docs/messages/middleware-request-page + */ get page() { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RemovedPageError"](); + } + /** + * @deprecated + * `ua` has been removed in favour of \`userAgent\` function. + * Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent + */ get ua() { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$error$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RemovedUAError"](); + } + get url() { + return this[INTERNALS].url; + } +} +}), +"[project]/node_modules/next/dist/esm/server/web/utils.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "fromNodeOutgoingHttpHeaders", + ()=>fromNodeOutgoingHttpHeaders, + "normalizeNextQueryParam", + ()=>normalizeNextQueryParam, + "splitCookiesString", + ()=>splitCookiesString, + "toNodeOutgoingHttpHeaders", + ()=>toNodeOutgoingHttpHeaders, + "validateURL", + ()=>validateURL +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)"); +; +function fromNodeOutgoingHttpHeaders(nodeHeaders) { + const headers = new Headers(); + for (let [key, value] of Object.entries(nodeHeaders)){ + const values = Array.isArray(value) ? value : [ + value + ]; + for (let v of values){ + if (typeof v === 'undefined') continue; + if (typeof v === 'number') { + v = v.toString(); + } + headers.append(key, v); + } + } + return headers; +} +function splitCookiesString(cookiesString) { + var cookiesStrings = []; + var pos = 0; + var start; + var ch; + var lastComma; + var nextStart; + var cookiesSeparatorFound; + function skipWhitespace() { + while(pos < cookiesString.length && /\s/.test(cookiesString.charAt(pos))){ + pos += 1; + } + return pos < cookiesString.length; + } + function notSpecialChar() { + ch = cookiesString.charAt(pos); + return ch !== '=' && ch !== ';' && ch !== ','; + } + while(pos < cookiesString.length){ + start = pos; + cookiesSeparatorFound = false; + while(skipWhitespace()){ + ch = cookiesString.charAt(pos); + if (ch === ',') { + // ',' is a cookie separator if we have later first '=', not ';' or ',' + lastComma = pos; + pos += 1; + skipWhitespace(); + nextStart = pos; + while(pos < cookiesString.length && notSpecialChar()){ + pos += 1; + } + // currently special character + if (pos < cookiesString.length && cookiesString.charAt(pos) === '=') { + // we found cookies separator + cookiesSeparatorFound = true; + // pos is inside the next cookie, so back up and return it. + pos = nextStart; + cookiesStrings.push(cookiesString.substring(start, lastComma)); + start = pos; + } else { + // in param ',' or param separator ';', + // we continue from that comma + pos = lastComma + 1; + } + } else { + pos += 1; + } + } + if (!cookiesSeparatorFound || pos >= cookiesString.length) { + cookiesStrings.push(cookiesString.substring(start, cookiesString.length)); + } + } + return cookiesStrings; +} +function toNodeOutgoingHttpHeaders(headers) { + const nodeHeaders = {}; + const cookies = []; + if (headers) { + for (const [key, value] of headers.entries()){ + if (key.toLowerCase() === 'set-cookie') { + // We may have gotten a comma joined string of cookies, or multiple + // set-cookie headers. We need to merge them into one header array + // to represent all the cookies. + cookies.push(...splitCookiesString(value)); + nodeHeaders[key] = cookies.length === 1 ? cookies[0] : cookies; + } else { + nodeHeaders[key] = value; + } + } + } + return nodeHeaders; +} +function validateURL(url) { + try { + return String(new URL(String(url))); + } catch (error) { + throw new Error(`URL is malformed "${String(url)}". Please use only absolute URLs - https://nextjs.org/docs/messages/middleware-relative-urls`, { + cause: error + }); + } +} +function normalizeNextQueryParam(key) { + const prefixes = [ + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_QUERY_PARAM_PREFIX"], + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_INTERCEPTION_MARKER_PREFIX"] + ]; + for (const prefix of prefixes){ + if (key !== prefix && key.startsWith(prefix)) { + return key.substring(prefix.length); + } + } + return null; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/errors/constants.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "MISSING_ROOT_TAGS_ERROR", + ()=>MISSING_ROOT_TAGS_ERROR +]); +const MISSING_ROOT_TAGS_ERROR = 'NEXT_MISSING_ROOT_TAGS'; +}), +"[project]/node_modules/next/dist/esm/shared/lib/get-hostname.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Takes an object with a hostname property (like a parsed URL) and some + * headers that may contain Host and returns the preferred hostname. + * @param parsed An object containing a hostname property. + * @param headers A dictionary with headers containing a `host`. + */ __turbopack_context__.s([ + "getHostname", + ()=>getHostname +]); +function getHostname(parsed, headers) { + // Get the hostname from the headers if it exists, otherwise use the parsed + // hostname. + let hostname; + if (headers?.host && !Array.isArray(headers.host)) { + hostname = headers.host.toString().split(':', 1)[0]; + } else if (parsed.hostname) { + hostname = parsed.hostname; + } else return; + return hostname.toLowerCase(); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/hash.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +// http://www.cse.yorku.ca/~oz/hash.html +// More specifically, 32-bit hash via djbxor +// (ref: https://gist.github.com/eplawless/52813b1d8ad9af510d85?permalink_comment_id=3367765#gistcomment-3367765) +// This is due to number type differences between rust for turbopack to js number types, +// where rust does not have easy way to repreesnt js's 53-bit float number type for the matching +// overflow behavior. This is more `correct` in terms of having canonical hash across different runtime / implementation +// as can gaurantee determinstic output from 32bit hash. +__turbopack_context__.s([ + "djb2Hash", + ()=>djb2Hash, + "hexHash", + ()=>hexHash +]); +function djb2Hash(str) { + let hash = 5381; + for(let i = 0; i < str.length; i++){ + const char = str.charCodeAt(i); + hash = (hash << 5) + hash + char & 0xffffffff; + } + return hash >>> 0; +} +function hexHash(str) { + return djb2Hash(str).toString(36).slice(0, 5); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/i18n/detect-domain-locale.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "detectDomainLocale", + ()=>detectDomainLocale +]); +function detectDomainLocale(domainItems, hostname, detectedLocale) { + if (!domainItems) return; + if (detectedLocale) { + detectedLocale = detectedLocale.toLowerCase(); + } + for (const item of domainItems){ + // remove port if present + const domainHostname = item.domain?.split(':', 1)[0].toLowerCase(); + if (hostname === domainHostname || detectedLocale === item.defaultLocale.toLowerCase() || item.locales?.some((locale)=>locale.toLowerCase() === detectedLocale)) { + return item; + } + } +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "normalizeLocalePath", + ()=>normalizeLocalePath +]); +/** + * A cache of lowercased locales for each list of locales. This is stored as a + * WeakMap so if the locales are garbage collected, the cache entry will be + * removed as well. + */ const cache = new WeakMap(); +function normalizeLocalePath(pathname, locales) { + // If locales is undefined, return the pathname as is. + if (!locales) return { + pathname + }; + // Get the cached lowercased locales or create a new cache entry. + let lowercasedLocales = cache.get(locales); + if (!lowercasedLocales) { + lowercasedLocales = locales.map((locale)=>locale.toLowerCase()); + cache.set(locales, lowercasedLocales); + } + let detectedLocale; + // The first segment will be empty, because it has a leading `/`. If + // there is no further segment, there is no locale (or it's the default). + const segments = pathname.split('/', 2); + // If there's no second segment (ie, the pathname is just `/`), there's no + // locale. + if (!segments[1]) return { + pathname + }; + // The second segment will contain the locale part if any. + const segment = segments[1].toLowerCase(); + // See if the segment matches one of the locales. If it doesn't, there is + // no locale (or it's the default). + const index = lowercasedLocales.indexOf(segment); + if (index < 0) return { + pathname + }; + // Return the case-sensitive locale. + detectedLocale = locales[index]; + // Remove the `/${locale}` part of the pathname. + pathname = pathname.slice(detectedLocale.length + 1) || '/'; + return { + pathname, + detectedLocale + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/instant-messages.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "createLinkPrefetchPartialError", + ()=>createLinkPrefetchPartialError, + "createUnrenderedSegmentError", + ()=>createUnrenderedSegmentError +]); +function createUnrenderedSegmentError(route, missingFiles) { + let message = `Route "${route}": Could not validate that a segment in your UI has instant navigation.`; + if (missingFiles.length > 0) { + const label = missingFiles.length === 1 ? 'Dropped segment' : 'Dropped segments'; + message += `\n\nThis segment was dropped from rendering. Issues that would prevent instant navigation will go undetected.` + `\n\n${label}:\n${missingFiles.map((p)=>` ${p}`).join('\n')}` + `\n\nWays to fix this:` + `\n - [render] Render the dropped segment` + `\n - [ignore] Set \`export const instant = false\` to opt the dropped segment out of instant-navigation validation` + `\n\nLearn more: https://nextjs.org/docs/messages/instant-unrendered-segment`; + } + return new Error(message); +} +function createLinkPrefetchPartialError(pathname) { + return new Error(`Next.js encountered dynamic data during prefetching for "${pathname}".\n\n` + `This will lead to slower, more expensive prefetches.\n\n` + `Ways to fix this:\n` + ` - [upgrade] Opt into Partial Prefetching by exporting \`const prefetch = 'partial'\` from the page or layout, or by setting \`partialPrefetching: true\` in next.config to opt the whole app in\n` + ` - [disable] Remove \`prefetch={true}\` from the to use the default prefetch\n` + ` - [ignore] Set \`export const instant = false\` to opt the route out of instant-navigation validation\n\n` + `Learn more: https://nextjs.org/docs/messages/instant-link-prefetch-partial`); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "InvariantError", + ()=>InvariantError +]); +class InvariantError extends Error { + constructor(message, options){ + super(`Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`, options); + this.name = 'InvariantError'; + } +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/is-thenable.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Check to see if a value is Thenable. + * + * @param promise the maybe-thenable value + * @returns true if the value is thenable + */ __turbopack_context__.s([ + "isThenable", + ()=>isThenable +]); +function isThenable(promise) { + return promise !== null && typeof promise === 'object' && 'then' in promise && typeof promise.then === 'function'; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/lazy-dynamic/react-browser-bailout.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "createReactBrowserBailoutReason", + ()=>createReactBrowserBailoutReason, + "getReactBrowserBailoutReason", + ()=>getReactBrowserBailoutReason, + "isNextBrowserBailoutError", + ()=>isNextBrowserBailoutError +]); +// This module is bundled separately into user code and the precompiled App +// Router runtime. Use the global symbol registry so both copies recognize the +// same browser bailout reason. +const REACT_BROWSER_BAILOUT_REASON = Symbol.for('next.browser-bailout-reason'); +function createReactBrowserBailoutReason(reason) { + return { + $$typeof: REACT_BROWSER_BAILOUT_REASON, + reason + }; +} +function getReactBrowserBailoutReason(error) { + const cause = error?.cause; + return cause?.$$typeof === REACT_BROWSER_BAILOUT_REASON ? cause.reason : undefined; +} +function isNextBrowserBailoutError(error) { + return getReactBrowserBailoutReason(error) !== undefined; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/page-path/ensure-leading-slash.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * For a given page path, this function ensures that there is a leading slash. + * If there is not a leading slash, one is added, otherwise it is noop. + */ __turbopack_context__.s([ + "ensureLeadingSlash", + ()=>ensureLeadingSlash +]); +function ensureLeadingSlash(path) { + return path.startsWith('/') ? path : `/${path}`; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/page-path/normalize-page-path.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "normalizePagePath", + ()=>normalizePagePath +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$ensure$2d$leading$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/page-path/ensure-leading-slash.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/index.js [app-route] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$is$2d$dynamic$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/is-dynamic.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/utils.js [app-route] (ecmascript)"); +; +; +; +function normalizePagePath(page) { + const normalized = /^\/index(\/|$)/.test(page) && !(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$is$2d$dynamic$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isDynamicRoute"])(page) ? `/index${page}` : page === '/' ? '/index' : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$ensure$2d$leading$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ensureLeadingSlash"])(page); + if ("TURBOPACK compile-time truthy", 1) { + const { posix } = __turbopack_context__.r("[externals]/path [external] (path, cjs)"); + const resolvedPage = posix.normalize(normalized); + if (resolvedPage !== normalized) { + throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NormalizeError"](`Requested and resolved page mismatch: ${normalized} ${resolvedPage}`); + } + } + return normalized; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "createPromiseWithResolvers", + ()=>createPromiseWithResolvers +]); +function createPromiseWithResolvers() { + // Shim of Stage 4 Promise.withResolvers proposal + let resolve; + let reject; + const promise = new Promise((res, rej)=>{ + resolve = res; + reject = rej; + }); + return { + resolve: resolve, + reject: reject, + promise + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/request-insights.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getRequestInsightKey", + ()=>getRequestInsightKey, + "getRequestInsightKind", + ()=>getRequestInsightKind +]); +function getRequestInsightKind(insight) { + return insight.kind ?? 'request'; +} +function getRequestInsightKey(insight) { + return `${getRequestInsightKind(insight)}:${insight.requestId}`; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-locale.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "addLocale", + ()=>addLocale +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [app-route] (ecmascript)"); +; +; +function addLocale(path, locale, defaultLocale, ignorePrefix) { + // If no locale was given or the locale is the default locale, we don't need + // to prefix the path. + if (!locale || locale === defaultLocale) return path; + const lower = path.toLowerCase(); + // If the path is an API path or the path already has the locale prefix, we + // don't need to prefix the path. + if (!ignorePrefix) { + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pathHasPrefix"])(lower, '/api')) return path; + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pathHasPrefix"])(lower, `/${locale.toLowerCase()}`)) return path; + } + // Add the locale prefix to the path. + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["addPathPrefix"])(path, `/${locale}`); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "addPathPrefix", + ()=>addPathPrefix +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [app-route] (ecmascript)"); +; +function addPathPrefix(path, prefix) { + if (!path.startsWith('/') || !prefix) { + return path; + } + const { pathname, query, hash } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["parsePath"])(path); + return `${prefix}${pathname}${query}${hash}`; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-suffix.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "addPathSuffix", + ()=>addPathSuffix +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [app-route] (ecmascript)"); +; +function addPathSuffix(path, suffix) { + if (!path.startsWith('/') || !suffix) { + return path; + } + const { pathname, query, hash } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["parsePath"])(path); + return `${pathname}${suffix}${query}${hash}`; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "compareAppPaths", + ()=>compareAppPaths, + "normalizeAppPath", + ()=>normalizeAppPath, + "normalizeRscURL", + ()=>normalizeRscURL, + "selectAppPageEntry", + ()=>selectAppPageEntry +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$ensure$2d$leading$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/page-path/ensure-leading-slash.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/segment.js [app-route] (ecmascript)"); +; +; +function normalizeAppPath(route) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$ensure$2d$leading$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ensureLeadingSlash"])(route.split('/').reduce((pathname, segment, index, segments)=>{ + // Empty segments are ignored. + if (!segment) { + return pathname; + } + // Groups are ignored. + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isGroupSegment"])(segment)) { + return pathname; + } + // Parallel segments are ignored. + if (segment[0] === '@') { + return pathname; + } + // The last segment (if it's a leaf) should be ignored. + if ((segment === 'page' || segment === 'route') && index === segments.length - 1) { + return pathname; + } + return `${pathname}/${segment}`; + }, '')); +} +function compareAppPaths(a, b) { + const aHasSlot = a.includes('/@'); + const bHasSlot = b.includes('/@'); + if (aHasSlot && !bHasSlot) return -1; + if (!aHasSlot && bHasSlot) return 1; + return a.localeCompare(b); +} +function normalizeAppPageEntryPathname(appPath) { + // Webpack app entries preserve escaped underscore segments as `%5F`, while + // normalized request pathnames expose the decoded `_` segment. + return normalizeAppPath(appPath).replace(/%5F/g, '_'); +} +function selectAppPageEntry(pathname, appPaths, normalizePathname = normalizeAppPageEntryPathname) { + let entry; + for (const appPath of appPaths){ + if (normalizePathname(appPath) !== pathname) continue; + if (entry === undefined || compareAppPaths(entry, appPath) < 0) { + entry = appPath; + } + } + if (entry === undefined) { + throw new Error(`Invariant: no direct app page entry found for ${pathname}`); + } + return entry; +} +function normalizeRscURL(url) { + return url.replace(/\.rsc($|\?)/, '$1'); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/cache-busting-search-param.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "computeCacheBustingSearchParam", + ()=>computeCacheBustingSearchParam, + "computeLegacyCacheBustingSearchParam", + ()=>computeLegacyCacheBustingSearchParam +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$hash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/hash.js [app-route] (ecmascript)"); +; +const CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES = 12; +const textEncoder = new TextEncoder(); +function encodeCacheBustingSearchParam(bytes) { + let binary = ''; + for(let i = 0; i < bytes.length; i++){ + binary += String.fromCharCode(bytes[i]); + } + return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); +} +function normalizeCacheBustingInput(value) { + if (value === undefined) { + return '0'; + } + return Array.isArray(value) ? value.join(',') : value; +} +function createCacheBustingSearchParamInput(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader) { + if ((prefetchHeader === undefined || prefetchHeader === '0') && segmentPrefetchHeader === undefined && stateTreeHeader === undefined && nextUrlHeader === undefined) { + return null; + } + return [ + prefetchHeader ?? '0', + normalizeCacheBustingInput(segmentPrefetchHeader), + normalizeCacheBustingInput(stateTreeHeader), + normalizeCacheBustingInput(nextUrlHeader) + ].join(','); +} +async function computeCacheBustingSearchParamFromInput(input) { + // Truncate SHA-256 to 96 bits to keep `_rsc` compact + const digest = await globalThis.crypto.subtle.digest('SHA-256', textEncoder.encode(input)); + return encodeCacheBustingSearchParam(new Uint8Array(digest).subarray(0, CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES)); +} +async function computeCacheBustingSearchParam(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader) { + const input = createCacheBustingSearchParamInput(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader); + if (input === null) { + return ''; + } + return computeCacheBustingSearchParamFromInput(input); +} +function computeLegacyCacheBustingSearchParam(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader) { + const input = createCacheBustingSearchParamInput(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader); + if (input === null) { + return ''; + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$hash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["hexHash"])(input); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/format-next-pathname-info.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "formatNextPathnameInfo", + ()=>formatNextPathnameInfo +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$trailing$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-trailing-slash.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$suffix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-suffix.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$locale$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-locale.js [app-route] (ecmascript)"); +; +; +; +; +function formatNextPathnameInfo(info) { + let pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$locale$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["addLocale"])(info.pathname, info.locale, info.buildId ? undefined : info.defaultLocale, info.ignorePrefix); + if (info.buildId || !info.trailingSlash) { + pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$trailing$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["removeTrailingSlash"])(pathname); + } + if (info.buildId) { + pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$suffix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["addPathSuffix"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["addPathPrefix"])(pathname, `/_next/data/${info.buildId}`), info.pathname === '/' ? 'index.json' : '.json'); + } + pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["addPathPrefix"])(pathname, info.basePath); + return !info.buildId && info.trailingSlash ? !pathname.endsWith('/') ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$suffix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["addPathSuffix"])(pathname, '/') : pathname : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$trailing$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["removeTrailingSlash"])(pathname); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/get-next-pathname-info.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getNextPathnameInfo", + ()=>getNextPathnameInfo +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$normalize$2d$locale$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js [app-route] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [app-route] (ecmascript)"); +; +; +; +function getNextPathnameInfo(pathname, options) { + const { basePath, i18n, trailingSlash } = options.nextConfig ?? {}; + const info = { + pathname, + trailingSlash: pathname !== '/' ? pathname.endsWith('/') : trailingSlash + }; + if (basePath && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pathHasPrefix"])(info.pathname, basePath)) { + info.pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$path$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["removePathPrefix"])(info.pathname, basePath); + info.basePath = basePath; + } + let pathnameNoDataPrefix = info.pathname; + if (info.pathname.startsWith('/_next/data/') && info.pathname.endsWith('.json')) { + const paths = info.pathname.replace(/^\/_next\/data\//, '').replace(/\.json$/, '').split('/'); + const buildId = paths[0]; + info.buildId = buildId; + pathnameNoDataPrefix = paths[1] !== 'index' ? `/${paths.slice(1).join('/')}` : '/'; + // update pathname with normalized if enabled although + // we use normalized to populate locale info still + if (options.parseData === true) { + info.pathname = pathnameNoDataPrefix; + } + } + // If provided, use the locale route normalizer to detect the locale instead + // of the function below. + if (i18n) { + let result = options.i18nProvider ? options.i18nProvider.analyze(info.pathname) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$normalize$2d$locale$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeLocalePath"])(info.pathname, i18n.locales); + info.locale = result.detectedLocale; + info.pathname = result.pathname ?? info.pathname; + if (!result.detectedLocale && info.buildId) { + result = options.i18nProvider ? options.i18nProvider.analyze(pathnameNoDataPrefix) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$normalize$2d$locale$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeLocalePath"])(pathnameNoDataPrefix, i18n.locales); + if (result.detectedLocale) { + info.locale = result.detectedLocale; + } + } + } + return info; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/index.js [app-route] (ecmascript) ", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$is$2d$dynamic$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/is-dynamic.js [app-route] (ecmascript)"); +; +; +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/interception-routes.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "INTERCEPTION_ROUTE_MARKERS", + ()=>INTERCEPTION_ROUTE_MARKERS, + "extractInterceptionRouteInformation", + ()=>extractInterceptionRouteInformation, + "findMissingCanonicalInterceptionRoutes", + ()=>findMissingCanonicalInterceptionRoutes, + "isInterceptionRouteAppPath", + ()=>isInterceptionRouteAppPath +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-route] (ecmascript)"); +; +const INTERCEPTION_ROUTE_MARKERS = [ + '(..)(..)', + '(.)', + '(..)', + '(...)' +]; +function parseRoutePattern(route) { + const segments = route.split('/').filter(Boolean); + const tail = segments.at(-1); + const isOptionalCatchAll = tail !== undefined && tail.startsWith('[[...') && tail.endsWith(']]'); + const isCatchAll = tail !== undefined && tail.startsWith('[...') && tail.endsWith(']'); + const unbounded = isOptionalCatchAll || isCatchAll; + const prefixSegments = unbounded ? segments.slice(0, -1) : segments; + return { + prefix: prefixSegments.map((segment)=>segment.startsWith('[') && segment.endsWith(']') ? null : segment), + minLength: prefixSegments.length + (isCatchAll && !isOptionalCatchAll ? 1 : 0), + unbounded + }; +} +function acceptsLength(pattern, length) { + return pattern.unbounded ? length >= pattern.minLength : length === pattern.minLength; +} +function prefixCovers(canonical, intercepted) { + return canonical.prefix.every((canonicalSegment, index)=>{ + if (canonicalSegment === null) return true; + const interceptedSegment = intercepted.prefix[index]; + return interceptedSegment !== undefined && interceptedSegment !== null && canonicalSegment === interceptedSegment; + }); +} +function patternCoversAtLength(canonical, intercepted, length) { + return acceptsLength(canonical, length) && acceptsLength(intercepted, length) && prefixCovers(canonical, intercepted); +} +/** Returns whether ordinary route patterns cover every URL in `route`. */ function isRoutePatternCovered(route, ordinaryRoutes) { + const intercepted = parseRoutePattern(route); + if (!intercepted.unbounded) { + return ordinaryRoutes.some((pattern)=>patternCoversAtLength(pattern, intercepted, intercepted.minLength)); + } + let unboundedCoverageStart = Infinity; + for (const pattern of ordinaryRoutes){ + if (pattern.unbounded && prefixCovers(pattern, intercepted)) { + unboundedCoverageStart = Math.min(unboundedCoverageStart, Math.max(intercepted.minLength, pattern.minLength)); + } + } + if (unboundedCoverageStart === Infinity) return false; + // An optional or required catchall can have its shorter paths covered by + // fixed routes before another catchall takes over the remaining suffix. + for(let length = intercepted.minLength; length < unboundedCoverageStart; length++){ + if (!ordinaryRoutes.some((pattern)=>patternCoversAtLength(pattern, intercepted, length))) { + return false; + } + } + return true; +} +function isInterceptionRouteAppPath(path) { + // TODO-APP: add more serious validation + return path.split('/').find((segment)=>INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m))) !== undefined; +} +function extractInterceptionRouteInformation(path) { + let interceptingRoute; + let marker; + let interceptedRoute; + for (const segment of path.split('/')){ + marker = INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m)); + if (marker) { + ; + [interceptingRoute, interceptedRoute] = path.split(marker, 2); + break; + } + } + if (!interceptingRoute || !marker || !interceptedRoute) { + throw new Error(`Invalid interception route: ${path}. Must be in the format //(..|...|..)(..)/`); + } + interceptingRoute = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeAppPath"])(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed + ; + switch(marker){ + case '(.)': + // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route + if (interceptingRoute === '/') { + interceptedRoute = `/${interceptedRoute}`; + } else { + interceptedRoute = interceptingRoute + '/' + interceptedRoute; + } + break; + case '(..)': + // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route + if (interceptingRoute === '/') { + throw new Error(`Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`); + } + interceptedRoute = interceptingRoute.split('/').slice(0, -1).concat(interceptedRoute).join('/'); + break; + case '(...)': + // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route + interceptedRoute = '/' + interceptedRoute; + break; + case '(..)(..)': + // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route + const splitInterceptingRoute = interceptingRoute.split('/'); + if (splitInterceptingRoute.length <= 2) { + throw new Error(`Invalid interception route: ${path}. Cannot use (..)(..) marker at the root level or one level up.`); + } + interceptedRoute = splitInterceptingRoute.slice(0, -2).concat(interceptedRoute).join('/'); + break; + default: + throw new Error('Invariant: unexpected marker'); + } + return { + interceptingRoute, + interceptedRoute + }; +} +function findMissingCanonicalInterceptionRoutes(appPaths) { + const canonicalRoutes = Object.keys(appPaths).filter((route)=>!isInterceptionRouteAppPath(route)); + const canonicalRoutePatterns = canonicalRoutes.map(parseRoutePattern); + return Object.keys(appPaths).filter(isInterceptionRouteAppPath).map((interceptionRoute)=>({ + interceptionRoute, + canonicalRoute: extractInterceptionRouteInformation(interceptionRoute).interceptedRoute + })).filter(({ canonicalRoute })=>!isRoutePatternCovered(canonicalRoute, canonicalRoutePatterns)).sort((a, b)=>a.interceptionRoute.localeCompare(b.interceptionRoute)); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/is-dynamic.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "isDynamicRoute", + ()=>isDynamicRoute +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/interception-routes.js [app-route] (ecmascript)"); +; +// Identify /.*[param].*/ in route string +const TEST_ROUTE = /\/[^/]*\[[^/]+\][^/]*(?=\/|$)/; +// Identify /[param]/ in route string +const TEST_STRICT_ROUTE = /\/\[[^/]+\](?=\/|$)/; +function isDynamicRoute(route, strict = true) { + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isInterceptionRouteAppPath"])(route)) { + route = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$interception$2d$routes$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["extractInterceptionRouteInformation"])(route).interceptedRoute; + } + if (strict) { + return TEST_STRICT_ROUTE.test(route); + } + return TEST_ROUTE.test(route); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-loader-tree.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "parseLoaderTree", + ()=>parseLoaderTree +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/segment.js [app-route] (ecmascript)"); +; +function parseLoaderTree(tree) { + const [segment, parallelRoutes, modules, staticSiblings] = tree; + const { layout, template } = modules; + let { page } = modules; + // a __DEFAULT__ segment means that this route didn't match any of the + // segments in the route, so we should use the default page + page = segment === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["DEFAULT_SEGMENT_KEY"] ? modules.defaultPage : page; + const conventionPath = layout?.[1] || template?.[1] || page?.[1]; + return { + page, + segment, + modules, + /* it can be either layout / template / page */ conventionPath, + parallelRoutes, + staticSiblings + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Given a path this function will find the pathname, query and hash and return + * them. This is useful to parse full paths on the client side. + * @param path A path to parse e.g. /foo/bar?id=1#hash + */ __turbopack_context__.s([ + "parsePath", + ()=>parsePath +]); +function parsePath(path) { + const hashIndex = path.indexOf('#'); + const queryIndex = path.indexOf('?'); + const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex); + if (hasQuery || hashIndex > -1) { + return { + pathname: path.substring(0, hasQuery ? queryIndex : hashIndex), + query: hasQuery ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined) : '', + hash: hashIndex > -1 ? path.slice(hashIndex) : '' + }; + } + return { + pathname: path, + query: '', + hash: '' + }; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "pathHasPrefix", + ()=>pathHasPrefix +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [app-route] (ecmascript)"); +; +function pathHasPrefix(path, prefix) { + if (typeof path !== 'string') { + return false; + } + const { pathname } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["parsePath"])(path); + return pathname === prefix || pathname.startsWith(prefix + '/'); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "removePathPrefix", + ()=>removePathPrefix +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [app-route] (ecmascript)"); +; +function removePathPrefix(path, prefix) { + // If the path doesn't start with the prefix we can return it as is. This + // protects us from situations where the prefix is a substring of the path + // prefix such as: + // + // For prefix: /blog + // + // /blog -> true + // /blog/ -> true + // /blog/1 -> true + // /blogging -> false + // /blogging/ -> false + // /blogging/1 -> false + if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["pathHasPrefix"])(path, prefix)) { + return path; + } + // Remove the prefix from the path via slicing. + const withoutPrefix = path.slice(prefix.length); + // If the path without the prefix starts with a `/` we can return it as is. + if (withoutPrefix.startsWith('/')) { + return withoutPrefix; + } + // If the path without the prefix doesn't start with a `/` we need to add it + // back to the path to make sure it's a valid path. + return `/${withoutPrefix}`; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-trailing-slash.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Removes the trailing slash for a given route or page path. Examples: + * - `/foo/bar/` -> `/foo/bar` + * - `/foo/bar` -> `/foo/bar` + * + * Uses charCodeAt (47 === '/') instead of regex to avoid the overhead of + * compiling and executing a RegExp on every call (~3-5x faster). + */ __turbopack_context__.s([ + "removeTrailingSlash", + ()=>removeTrailingSlash +]); +function removeTrailingSlash(route) { + return route.charCodeAt(route.length - 1) === 47 && route.length > 1 ? route.slice(0, -1) : route; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/segment.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "DEFAULT_SEGMENT_KEY", + ()=>DEFAULT_SEGMENT_KEY, + "NOT_FOUND_SEGMENT_KEY", + ()=>NOT_FOUND_SEGMENT_KEY, + "PAGE_SEGMENT_KEY", + ()=>PAGE_SEGMENT_KEY, + "computeSelectedLayoutSegment", + ()=>computeSelectedLayoutSegment, + "getSegmentValue", + ()=>getSegmentValue, + "getSelectedLayoutSegmentPath", + ()=>getSelectedLayoutSegmentPath, + "isGroupSegment", + ()=>isGroupSegment, + "isParallelRouteSegment", + ()=>isParallelRouteSegment +]); +function getSegmentValue(segment) { + return Array.isArray(segment) ? segment[1] : segment; +} +function isGroupSegment(segment) { + // Use array[0] for performant purpose + return segment[0] === '(' && segment.endsWith(')'); +} +function isParallelRouteSegment(segment) { + return segment.startsWith('@') && segment !== '@children'; +} +function computeSelectedLayoutSegment(segments, parallelRouteKey) { + if (!segments || segments.length === 0) { + return null; + } + // For 'children', use first segment; for other parallel routes, use last segment + const rawSegment = parallelRouteKey === 'children' ? segments[0] : segments[segments.length - 1]; + // If the default slot is showing, return null since it's not technically "selected" (it's a fallback) + // Returning an internal value like `__DEFAULT__` would be confusing + return rawSegment === DEFAULT_SEGMENT_KEY ? null : rawSegment; +} +function getSelectedLayoutSegmentPath(tree, parallelRouteKey, first = true, segmentPath = []) { + let node; + if (first) { + // Use the provided parallel route key on the first parallel route + node = tree[1][parallelRouteKey]; + } else { + // After first parallel route prefer children, if there's no children pick the first parallel route. + const parallelRoutes = tree[1]; + node = parallelRoutes.children ?? Object.values(parallelRoutes)[0]; + } + if (!node) return segmentPath; + const segment = node[0]; + let segmentValue = getSegmentValue(segment); + if (!segmentValue || segmentValue === PAGE_SEGMENT_KEY) { + return segmentPath; + } + segmentPath.push(segmentValue); + return getSelectedLayoutSegmentPath(node, parallelRouteKey, false, segmentPath); +} +const PAGE_SEGMENT_KEY = '__PAGE__'; +const DEFAULT_SEGMENT_KEY = '__DEFAULT__'; +const NOT_FOUND_SEGMENT_KEY = '/_not-found'; +}), +"[project]/node_modules/next/dist/esm/shared/lib/server-reference-info.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "SERVER_REFERENCE_ID_LENGTH", + ()=>SERVER_REFERENCE_ID_LENGTH, + "extractInfoFromServerReferenceId", + ()=>extractInfoFromServerReferenceId, + "mightBeServerReferenceId", + ()=>mightBeServerReferenceId, + "omitUnusedArgs", + ()=>omitUnusedArgs +]); +const SERVER_REFERENCE_ID_LENGTH = 42; +function mightBeServerReferenceId(id) { + return id.length === SERVER_REFERENCE_ID_LENGTH; +} +function extractInfoFromServerReferenceId(id) { + const infoByte = parseInt(id.slice(0, 2), 16); + const typeBit = infoByte >> 7 & 0x1; + const argMask = infoByte >> 1 & 0x3f; + const restArgs = infoByte & 0x1; + const usedArgs = Array(6); + for(let index = 0; index < 6; index++){ + const bitPosition = 5 - index; + const bit = argMask >> bitPosition & 0x1; + usedArgs[index] = bit === 1; + } + return { + type: typeBit === 1 ? 'use-cache' : 'server-action', + usedArgs: usedArgs, + hasRestArgs: restArgs === 1 + }; +} +function omitUnusedArgs(args, info) { + const filteredArgs = new Array(args.length); + let length = 0; + for(let index = 0; index < args.length; index++){ + if (index < 6 && info.usedArgs[index] || // This assumes that the server reference info byte has the restArgs bit + // set to 1 if there are more than 6 args. + index >= 6 && info.hasRestArgs) { + filteredArgs[index] = args[index]; + length = index + 1; + } + } + // Trim trailing unused args from the array. + filteredArgs.length = length; + return filteredArgs; +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/utils.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** + * Web vitals provided to _app.reportWebVitals by Core Web Vitals plugin developed by Google Chrome team. + * https://nextjs.org/blog/next-9-4#integrated-web-vitals-reporting + */ __turbopack_context__.s([ + "DecodeError", + ()=>DecodeError, + "MiddlewareNotFoundError", + ()=>MiddlewareNotFoundError, + "MissingStaticPage", + ()=>MissingStaticPage, + "NormalizeError", + ()=>NormalizeError, + "PageNotFoundError", + ()=>PageNotFoundError, + "SP", + ()=>SP, + "ST", + ()=>ST, + "WEB_VITALS", + ()=>WEB_VITALS, + "execOnce", + ()=>execOnce, + "getDisplayName", + ()=>getDisplayName, + "getLocationOrigin", + ()=>getLocationOrigin, + "getURL", + ()=>getURL, + "isAbsoluteUrl", + ()=>isAbsoluteUrl, + "isResSent", + ()=>isResSent, + "loadGetInitialProps", + ()=>loadGetInitialProps, + "normalizeRepeatedSlashes", + ()=>normalizeRepeatedSlashes, + "stringifyError", + ()=>stringifyError +]); +const WEB_VITALS = [ + 'CLS', + 'FCP', + 'INP', + 'LCP', + 'TTFB' +]; +function execOnce(fn) { + let used = false; + let result; + return (...args)=>{ + if (!used) { + used = true; + result = fn(...args); + } + return result; + }; +} +// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1 +// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3 +const ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\d+\-.]*?:/; +const isAbsoluteUrl = (url)=>{ + // Fast path: an absolute URL must start with a letter (the scheme). + // Check for a-z and A-Z without the cost of the regex. + const c = url.charCodeAt(0); + const isLetter = c >= 65 /* A */ && c <= 90 || c >= 97 /* a */ && c <= 122; + /* z */ if (!isLetter) { + return false; + } + return ABSOLUTE_URL_REGEX.test(url); +}; +function getLocationOrigin() { + const { protocol, hostname, port } = window.location; + return `${protocol}//${hostname}${port ? ':' + port : ''}`; +} +function getURL() { + const { href } = window.location; + const origin = getLocationOrigin(); + return href.substring(origin.length); +} +function getDisplayName(Component) { + return typeof Component === 'string' ? Component : Component.displayName || Component.name || 'Unknown'; +} +function isResSent(res) { + return res.finished || res.headersSent; +} +function normalizeRepeatedSlashes(url) { + const urlParts = url.split('?'); + const urlNoQuery = urlParts[0]; + return urlNoQuery // first we replace any non-encoded backslashes with forward + // then normalize repeated forward slashes + .replace(/\\/g, '/').replace(/\/\/+/g, '/') + (urlParts[1] ? `?${urlParts.slice(1).join('?')}` : ''); +} +async function loadGetInitialProps(App, ctx) { + if ("TURBOPACK compile-time truthy", 1) { + if (App.prototype?.getInitialProps) { + const message = `"${getDisplayName(App)}.getInitialProps()" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.`; + throw new Error(message); + } + } + // when called from _app `ctx` is nested in `ctx` + const res = ctx.res || ctx.ctx && ctx.ctx.res; + if (!App.getInitialProps) { + if (ctx.ctx && ctx.Component) { + // @ts-ignore pageProps default + return { + pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx) + }; + } + return {}; + } + const props = await App.getInitialProps(ctx); + if (res && isResSent(res)) { + return props; + } + if (!props) { + const message = `"${getDisplayName(App)}.getInitialProps()" should resolve to an object. But found "${props}" instead.`; + throw new Error(message); + } + if ("TURBOPACK compile-time truthy", 1) { + if (Object.keys(props).length === 0 && !ctx.ctx) { + console.warn(`${getDisplayName(App)} returned an empty object from \`getInitialProps\`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps`); + } + } + return props; +} +const SP = typeof performance !== 'undefined'; +const ST = SP && [ + 'mark', + 'measure', + 'getEntriesByName' +].every((method)=>typeof performance[method] === 'function'); +class DecodeError extends Error { +} +class NormalizeError extends Error { +} +class PageNotFoundError extends Error { + constructor(page){ + super(); + this.code = 'ENOENT'; + this.name = 'PageNotFoundError'; + this.message = `Cannot find module for page: ${page}`; + } +} +class MissingStaticPage extends Error { + constructor(page, message){ + super(); + this.message = `Failed to load static file for page: ${page} ${message}`; + } +} +class MiddlewareNotFoundError extends Error { + constructor(){ + super(); + this.code = 'ENOENT'; + this.message = `Cannot find the middleware module`; + } +} +function stringifyError(error) { + return JSON.stringify({ + message: error.message, + stack: error.stack + }); +} +}), +"[project]/node_modules/next/dist/esm/shared/lib/utils/reflect-utils.js [app-route] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "describeHasCheckingStringProperty", + ()=>describeHasCheckingStringProperty, + "describeStringPropertyAccess", + ()=>describeStringPropertyAccess, + "wellKnownProperties", + ()=>wellKnownProperties +]); +// This regex will have fast negatives meaning valid identifiers may not pass +// this test. However this is only used during static generation to provide hints +// about why a page bailed out of some or all prerendering and we can use bracket notation +// for example while `ಠ_ಠ` is a valid identifier it's ok to print `searchParams['ಠ_ಠ']` +// even if this would have been fine too `searchParams.ಠ_ಠ` +const isDefinitelyAValidIdentifier = /^[A-Za-z_$][A-Za-z0-9_$]*$/; +function describeStringPropertyAccess(target, prop) { + if (isDefinitelyAValidIdentifier.test(prop)) { + return `\`${target}.${prop}\``; + } + return `\`${target}[${JSON.stringify(prop)}]\``; +} +function describeHasCheckingStringProperty(target, prop) { + const stringifiedProp = JSON.stringify(prop); + return `\`Reflect.has(${target}, ${stringifiedProp})\`, \`${stringifiedProp} in ${target}\`, or similar`; +} +const wellKnownProperties = new Set([ + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toString', + 'valueOf', + 'toLocaleString', + // Promise prototype + 'then', + 'catch', + 'finally', + // React Promise extension + 'status', + // 'value', + // 'error', + // React introspection + 'displayName', + '_debugInfo', + // Common tested properties + 'toJSON', + '$$typeof', + '__esModule', + // Tested by flight when checking for iterables + '@@iterator' +]); +}), +"[project]/node_modules/next/dist/server/route-modules/app-page/module.compiled.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable +; +else { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + if ("TURBOPACK compile-time truthy", 1) { + if ("TURBOPACK compile-time truthy", 1) { + module.exports = __turbopack_context__.r("[externals]/next/dist/compiled/next-server/app-page-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-page-turbo.runtime.dev.js, cjs)"); + } else //TURBOPACK unreachable + ; + } else //TURBOPACK unreachable + ; + } +} +}), +"[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { +"use strict"; + +module.exports = __turbopack_context__.r("[project]/node_modules/next/dist/server/route-modules/app-page/module.compiled.js [app-route] (ecmascript)").vendored['react-rsc'].React; +}), +]})(), +"[project]/node_modules/next/dist/compiled/@opentelemetry/api/index.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { + +(()=>{ + "use strict"; + var e = { + 912: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.ContextAPI = void 0; + const n = r(108); + const a = r(221); + const o = r(44); + const i = "context"; + const c = new n.NoopContextManager; + class ContextAPI { + constructor(){} + static getInstance() { + if (!this._instance) { + this._instance = new ContextAPI; + } + return this._instance; + } + setGlobalContextManager(e) { + return (0, a.registerGlobal)(i, e, o.DiagAPI.instance()); + } + active() { + return this._getContextManager().active(); + } + with(e, t, r, ...n) { + return this._getContextManager().with(e, t, r, ...n); + } + bind(e, t) { + return this._getContextManager().bind(e, t); + } + _getContextManager() { + return (0, a.getGlobal)(i) || c; + } + disable() { + this._getContextManager().disable(); + (0, a.unregisterGlobal)(i, o.DiagAPI.instance()); + } + } + t.ContextAPI = ContextAPI; + }, + 44: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.DiagAPI = void 0; + const n = r(757); + const a = r(412); + const o = r(711); + const i = r(221); + const c = "diag"; + class DiagAPI { + constructor(){ + function _logProxy(e) { + return function(...t) { + const r = (0, i.getGlobal)("diag"); + if (!r) return; + return r[e](...t); + }; + } + const e = this; + const setLogger = (t, r = { + logLevel: o.DiagLogLevel.INFO + })=>{ + var n, c, s; + if (t === e) { + const t = new Error("Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation"); + e.error((n = t.stack) !== null && n !== void 0 ? n : t.message); + return false; + } + if (typeof r === "number") { + r = { + logLevel: r + }; + } + const u = (0, i.getGlobal)("diag"); + const l = (0, a.createLogLevelDiagLogger)((c = r.logLevel) !== null && c !== void 0 ? c : o.DiagLogLevel.INFO, t); + if (u && !r.suppressOverrideMessage) { + const e = (s = (new Error).stack) !== null && s !== void 0 ? s : ""; + u.warn(`Current logger will be overwritten from ${e}`); + l.warn(`Current logger will overwrite one already registered from ${e}`); + } + return (0, i.registerGlobal)("diag", l, e, true); + }; + e.setLogger = setLogger; + e.disable = ()=>{ + (0, i.unregisterGlobal)(c, e); + }; + e.createComponentLogger = (e)=>new n.DiagComponentLogger(e); + e.verbose = _logProxy("verbose"); + e.debug = _logProxy("debug"); + e.info = _logProxy("info"); + e.warn = _logProxy("warn"); + e.error = _logProxy("error"); + } + static instance() { + if (!this._instance) { + this._instance = new DiagAPI; + } + return this._instance; + } + } + t.DiagAPI = DiagAPI; + }, + 262: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.MetricsAPI = void 0; + const n = r(586); + const a = r(221); + const o = r(44); + const i = "metrics"; + class MetricsAPI { + constructor(){} + static getInstance() { + if (!this._instance) { + this._instance = new MetricsAPI; + } + return this._instance; + } + setGlobalMeterProvider(e) { + return (0, a.registerGlobal)(i, e, o.DiagAPI.instance()); + } + getMeterProvider() { + return (0, a.getGlobal)(i) || n.NOOP_METER_PROVIDER; + } + getMeter(e, t, r) { + return this.getMeterProvider().getMeter(e, t, r); + } + disable() { + (0, a.unregisterGlobal)(i, o.DiagAPI.instance()); + } + } + t.MetricsAPI = MetricsAPI; + }, + 25: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.PropagationAPI = void 0; + const n = r(221); + const a = r(19); + const o = r(92); + const i = r(398); + const c = r(504); + const s = r(44); + const u = "propagation"; + const l = new a.NoopTextMapPropagator; + class PropagationAPI { + constructor(){ + this.createBaggage = c.createBaggage; + this.getBaggage = i.getBaggage; + this.getActiveBaggage = i.getActiveBaggage; + this.setBaggage = i.setBaggage; + this.deleteBaggage = i.deleteBaggage; + } + static getInstance() { + if (!this._instance) { + this._instance = new PropagationAPI; + } + return this._instance; + } + setGlobalPropagator(e) { + return (0, n.registerGlobal)(u, e, s.DiagAPI.instance()); + } + inject(e, t, r = o.defaultTextMapSetter) { + return this._getGlobalPropagator().inject(e, t, r); + } + extract(e, t, r = o.defaultTextMapGetter) { + return this._getGlobalPropagator().extract(e, t, r); + } + fields() { + return this._getGlobalPropagator().fields(); + } + disable() { + (0, n.unregisterGlobal)(u, s.DiagAPI.instance()); + } + _getGlobalPropagator() { + return (0, n.getGlobal)(u) || l; + } + } + t.PropagationAPI = PropagationAPI; + }, + 397: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.TraceAPI = void 0; + const n = r(221); + const a = r(498); + const o = r(477); + const i = r(793); + const c = r(44); + const s = "trace"; + class TraceAPI { + constructor(){ + this._proxyTracerProvider = new a.ProxyTracerProvider; + this.wrapSpanContext = o.wrapSpanContext; + this.isSpanContextValid = o.isSpanContextValid; + this.deleteSpan = i.deleteSpan; + this.getSpan = i.getSpan; + this.getActiveSpan = i.getActiveSpan; + this.getSpanContext = i.getSpanContext; + this.setSpan = i.setSpan; + this.setSpanContext = i.setSpanContext; + } + static getInstance() { + if (!this._instance) { + this._instance = new TraceAPI; + } + return this._instance; + } + setGlobalTracerProvider(e) { + const t = (0, n.registerGlobal)(s, this._proxyTracerProvider, c.DiagAPI.instance()); + if (t) { + this._proxyTracerProvider.setDelegate(e); + } + return t; + } + getTracerProvider() { + return (0, n.getGlobal)(s) || this._proxyTracerProvider; + } + getTracer(e, t) { + return this.getTracerProvider().getTracer(e, t); + } + disable() { + (0, n.unregisterGlobal)(s, c.DiagAPI.instance()); + this._proxyTracerProvider = new a.ProxyTracerProvider; + } + } + t.TraceAPI = TraceAPI; + }, + 398: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.deleteBaggage = t.setBaggage = t.getActiveBaggage = t.getBaggage = void 0; + const n = r(912); + const a = r(23); + const o = (0, a.createContextKey)("OpenTelemetry Baggage Key"); + function getBaggage(e) { + return e.getValue(o) || undefined; + } + t.getBaggage = getBaggage; + function getActiveBaggage() { + return getBaggage(n.ContextAPI.getInstance().active()); + } + t.getActiveBaggage = getActiveBaggage; + function setBaggage(e, t) { + return e.setValue(o, t); + } + t.setBaggage = setBaggage; + function deleteBaggage(e) { + return e.deleteValue(o); + } + t.deleteBaggage = deleteBaggage; + }, + 152: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.BaggageImpl = void 0; + class BaggageImpl { + constructor(e){ + this._entries = e ? new Map(e) : new Map; + } + getEntry(e) { + const t = this._entries.get(e); + if (!t) { + return undefined; + } + return Object.assign({}, t); + } + getAllEntries() { + return Array.from(this._entries.entries()).map(([e, t])=>[ + e, + t + ]); + } + setEntry(e, t) { + const r = new BaggageImpl(this._entries); + r._entries.set(e, t); + return r; + } + removeEntry(e) { + const t = new BaggageImpl(this._entries); + t._entries.delete(e); + return t; + } + removeEntries(...e) { + const t = new BaggageImpl(this._entries); + for (const r of e){ + t._entries.delete(r); + } + return t; + } + clear() { + return new BaggageImpl; + } + } + t.BaggageImpl = BaggageImpl; + }, + 647: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.baggageEntryMetadataSymbol = void 0; + t.baggageEntryMetadataSymbol = Symbol("BaggageEntryMetadata"); + }, + 504: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.baggageEntryMetadataFromString = t.createBaggage = void 0; + const n = r(44); + const a = r(152); + const o = r(647); + const i = n.DiagAPI.instance(); + function createBaggage(e = {}) { + return new a.BaggageImpl(new Map(Object.entries(e))); + } + t.createBaggage = createBaggage; + function baggageEntryMetadataFromString(e) { + if (typeof e !== "string") { + i.error(`Cannot create baggage metadata from unknown type: ${typeof e}`); + e = ""; + } + return { + __TYPE__: o.baggageEntryMetadataSymbol, + toString () { + return e; + } + }; + } + t.baggageEntryMetadataFromString = baggageEntryMetadataFromString; + }, + 778: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.context = void 0; + const n = r(912); + t.context = n.ContextAPI.getInstance(); + }, + 108: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.NoopContextManager = void 0; + const n = r(23); + class NoopContextManager { + active() { + return n.ROOT_CONTEXT; + } + with(e, t, r, ...n) { + return t.call(r, ...n); + } + bind(e, t) { + return t; + } + enable() { + return this; + } + disable() { + return this; + } + } + t.NoopContextManager = NoopContextManager; + }, + 23: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.ROOT_CONTEXT = t.createContextKey = void 0; + function createContextKey(e) { + return Symbol.for(e); + } + t.createContextKey = createContextKey; + class BaseContext { + constructor(e){ + const t = this; + t._currentContext = e ? new Map(e) : new Map; + t.getValue = (e)=>t._currentContext.get(e); + t.setValue = (e, r)=>{ + const n = new BaseContext(t._currentContext); + n._currentContext.set(e, r); + return n; + }; + t.deleteValue = (e)=>{ + const r = new BaseContext(t._currentContext); + r._currentContext.delete(e); + return r; + }; + } + } + t.ROOT_CONTEXT = new BaseContext; + }, + 304: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.diag = void 0; + const n = r(44); + t.diag = n.DiagAPI.instance(); + }, + 757: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.DiagComponentLogger = void 0; + const n = r(221); + class DiagComponentLogger { + constructor(e){ + this._namespace = e.namespace || "DiagComponentLogger"; + } + debug(...e) { + return logProxy("debug", this._namespace, e); + } + error(...e) { + return logProxy("error", this._namespace, e); + } + info(...e) { + return logProxy("info", this._namespace, e); + } + warn(...e) { + return logProxy("warn", this._namespace, e); + } + verbose(...e) { + return logProxy("verbose", this._namespace, e); + } + } + t.DiagComponentLogger = DiagComponentLogger; + function logProxy(e, t, r) { + const a = (0, n.getGlobal)("diag"); + if (!a) { + return; + } + r.unshift(t); + return a[e](...r); + } + }, + 83: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.DiagConsoleLogger = void 0; + const r = [ + { + n: "error", + c: "error" + }, + { + n: "warn", + c: "warn" + }, + { + n: "info", + c: "info" + }, + { + n: "debug", + c: "debug" + }, + { + n: "verbose", + c: "trace" + } + ]; + class DiagConsoleLogger { + constructor(){ + function _consoleFunc(e) { + return function(...t) { + if (console) { + let r = console[e]; + if (typeof r !== "function") { + r = console.log; + } + if (typeof r === "function") { + return r.apply(console, t); + } + } + }; + } + for(let e = 0; e < r.length; e++){ + this[r[e].n] = _consoleFunc(r[e].c); + } + } + } + t.DiagConsoleLogger = DiagConsoleLogger; + }, + 412: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.createLogLevelDiagLogger = void 0; + const n = r(711); + function createLogLevelDiagLogger(e, t) { + if (e < n.DiagLogLevel.NONE) { + e = n.DiagLogLevel.NONE; + } else if (e > n.DiagLogLevel.ALL) { + e = n.DiagLogLevel.ALL; + } + t = t || {}; + function _filterFunc(r, n) { + const a = t[r]; + if (typeof a === "function" && e >= n) { + return a.bind(t); + } + return function() {}; + } + return { + error: _filterFunc("error", n.DiagLogLevel.ERROR), + warn: _filterFunc("warn", n.DiagLogLevel.WARN), + info: _filterFunc("info", n.DiagLogLevel.INFO), + debug: _filterFunc("debug", n.DiagLogLevel.DEBUG), + verbose: _filterFunc("verbose", n.DiagLogLevel.VERBOSE) + }; + } + t.createLogLevelDiagLogger = createLogLevelDiagLogger; + }, + 711: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.DiagLogLevel = void 0; + var r; + (function(e) { + e[e["NONE"] = 0] = "NONE"; + e[e["ERROR"] = 30] = "ERROR"; + e[e["WARN"] = 50] = "WARN"; + e[e["INFO"] = 60] = "INFO"; + e[e["DEBUG"] = 70] = "DEBUG"; + e[e["VERBOSE"] = 80] = "VERBOSE"; + e[e["ALL"] = 9999] = "ALL"; + })(r = t.DiagLogLevel || (t.DiagLogLevel = {})); + }, + 221: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.unregisterGlobal = t.getGlobal = t.registerGlobal = void 0; + const n = r(678); + const a = r(652); + const o = r(662); + const i = a.VERSION.split(".")[0]; + const c = Symbol.for(`opentelemetry.js.api.${i}`); + const s = n._globalThis; + function registerGlobal(e, t, r, n = false) { + var o; + const i = s[c] = (o = s[c]) !== null && o !== void 0 ? o : { + version: a.VERSION + }; + if (!n && i[e]) { + const t = new Error(`@opentelemetry/api: Attempted duplicate registration of API: ${e}`); + r.error(t.stack || t.message); + return false; + } + if (i.version !== a.VERSION) { + const t = new Error(`@opentelemetry/api: Registration of version v${i.version} for ${e} does not match previously registered API v${a.VERSION}`); + r.error(t.stack || t.message); + return false; + } + i[e] = t; + r.debug(`@opentelemetry/api: Registered a global for ${e} v${a.VERSION}.`); + return true; + } + t.registerGlobal = registerGlobal; + function getGlobal(e) { + var t, r; + const n = (t = s[c]) === null || t === void 0 ? void 0 : t.version; + if (!n || !(0, o.isCompatible)(n)) { + return; + } + return (r = s[c]) === null || r === void 0 ? void 0 : r[e]; + } + t.getGlobal = getGlobal; + function unregisterGlobal(e, t) { + t.debug(`@opentelemetry/api: Unregistering a global for ${e} v${a.VERSION}.`); + const r = s[c]; + if (r) { + delete r[e]; + } + } + t.unregisterGlobal = unregisterGlobal; + }, + 662: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.isCompatible = t._makeCompatibilityCheck = void 0; + const n = r(652); + const a = /^(\d+)\.(\d+)\.(\d+)(-(.+))?$/; + function _makeCompatibilityCheck(e) { + const t = new Set([ + e + ]); + const r = new Set; + const n = e.match(a); + if (!n) { + return ()=>false; + } + const o = { + major: +n[1], + minor: +n[2], + patch: +n[3], + prerelease: n[4] + }; + if (o.prerelease != null) { + return function isExactmatch(t) { + return t === e; + }; + } + function _reject(e) { + r.add(e); + return false; + } + function _accept(e) { + t.add(e); + return true; + } + return function isCompatible(e) { + if (t.has(e)) { + return true; + } + if (r.has(e)) { + return false; + } + const n = e.match(a); + if (!n) { + return _reject(e); + } + const i = { + major: +n[1], + minor: +n[2], + patch: +n[3], + prerelease: n[4] + }; + if (i.prerelease != null) { + return _reject(e); + } + if (o.major !== i.major) { + return _reject(e); + } + if (o.major === 0) { + if (o.minor === i.minor && o.patch <= i.patch) { + return _accept(e); + } + return _reject(e); + } + if (o.minor <= i.minor) { + return _accept(e); + } + return _reject(e); + }; + } + t._makeCompatibilityCheck = _makeCompatibilityCheck; + t.isCompatible = _makeCompatibilityCheck(n.VERSION); + }, + 120: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.metrics = void 0; + const n = r(262); + t.metrics = n.MetricsAPI.getInstance(); + }, + 532: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.ValueType = void 0; + var r; + (function(e) { + e[e["INT"] = 0] = "INT"; + e[e["DOUBLE"] = 1] = "DOUBLE"; + })(r = t.ValueType || (t.ValueType = {})); + }, + 440: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.createNoopMeter = t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC = t.NOOP_OBSERVABLE_GAUGE_METRIC = t.NOOP_OBSERVABLE_COUNTER_METRIC = t.NOOP_UP_DOWN_COUNTER_METRIC = t.NOOP_HISTOGRAM_METRIC = t.NOOP_COUNTER_METRIC = t.NOOP_METER = t.NoopObservableUpDownCounterMetric = t.NoopObservableGaugeMetric = t.NoopObservableCounterMetric = t.NoopObservableMetric = t.NoopHistogramMetric = t.NoopUpDownCounterMetric = t.NoopCounterMetric = t.NoopMetric = t.NoopMeter = void 0; + class NoopMeter { + constructor(){} + createHistogram(e, r) { + return t.NOOP_HISTOGRAM_METRIC; + } + createCounter(e, r) { + return t.NOOP_COUNTER_METRIC; + } + createUpDownCounter(e, r) { + return t.NOOP_UP_DOWN_COUNTER_METRIC; + } + createObservableGauge(e, r) { + return t.NOOP_OBSERVABLE_GAUGE_METRIC; + } + createObservableCounter(e, r) { + return t.NOOP_OBSERVABLE_COUNTER_METRIC; + } + createObservableUpDownCounter(e, r) { + return t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC; + } + addBatchObservableCallback(e, t) {} + removeBatchObservableCallback(e) {} + } + t.NoopMeter = NoopMeter; + class NoopMetric { + } + t.NoopMetric = NoopMetric; + class NoopCounterMetric extends NoopMetric { + add(e, t) {} + } + t.NoopCounterMetric = NoopCounterMetric; + class NoopUpDownCounterMetric extends NoopMetric { + add(e, t) {} + } + t.NoopUpDownCounterMetric = NoopUpDownCounterMetric; + class NoopHistogramMetric extends NoopMetric { + record(e, t) {} + } + t.NoopHistogramMetric = NoopHistogramMetric; + class NoopObservableMetric { + addCallback(e) {} + removeCallback(e) {} + } + t.NoopObservableMetric = NoopObservableMetric; + class NoopObservableCounterMetric extends NoopObservableMetric { + } + t.NoopObservableCounterMetric = NoopObservableCounterMetric; + class NoopObservableGaugeMetric extends NoopObservableMetric { + } + t.NoopObservableGaugeMetric = NoopObservableGaugeMetric; + class NoopObservableUpDownCounterMetric extends NoopObservableMetric { + } + t.NoopObservableUpDownCounterMetric = NoopObservableUpDownCounterMetric; + t.NOOP_METER = new NoopMeter; + t.NOOP_COUNTER_METRIC = new NoopCounterMetric; + t.NOOP_HISTOGRAM_METRIC = new NoopHistogramMetric; + t.NOOP_UP_DOWN_COUNTER_METRIC = new NoopUpDownCounterMetric; + t.NOOP_OBSERVABLE_COUNTER_METRIC = new NoopObservableCounterMetric; + t.NOOP_OBSERVABLE_GAUGE_METRIC = new NoopObservableGaugeMetric; + t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC = new NoopObservableUpDownCounterMetric; + function createNoopMeter() { + return t.NOOP_METER; + } + t.createNoopMeter = createNoopMeter; + }, + 586: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.NOOP_METER_PROVIDER = t.NoopMeterProvider = void 0; + const n = r(440); + class NoopMeterProvider { + getMeter(e, t, r) { + return n.NOOP_METER; + } + } + t.NoopMeterProvider = NoopMeterProvider; + t.NOOP_METER_PROVIDER = new NoopMeterProvider; + }, + 678: function(e, t, r) { + var n = this && this.__createBinding || (Object.create ? function(e, t, r, n) { + if (n === undefined) n = r; + Object.defineProperty(e, n, { + enumerable: true, + get: function() { + return t[r]; + } + }); + } : function(e, t, r, n) { + if (n === undefined) n = r; + e[n] = t[r]; + }); + var a = this && this.__exportStar || function(e, t) { + for(var r in e)if (r !== "default" && !Object.prototype.hasOwnProperty.call(t, r)) n(t, e, r); + }; + Object.defineProperty(t, "__esModule", { + value: true + }); + a(r(59), t); + }, + 460: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t._globalThis = void 0; + t._globalThis = typeof globalThis === "object" ? globalThis : /*TURBOPACK member replacement*/ __turbopack_context__.g; + }, + 59: function(e, t, r) { + var n = this && this.__createBinding || (Object.create ? function(e, t, r, n) { + if (n === undefined) n = r; + Object.defineProperty(e, n, { + enumerable: true, + get: function() { + return t[r]; + } + }); + } : function(e, t, r, n) { + if (n === undefined) n = r; + e[n] = t[r]; + }); + var a = this && this.__exportStar || function(e, t) { + for(var r in e)if (r !== "default" && !Object.prototype.hasOwnProperty.call(t, r)) n(t, e, r); + }; + Object.defineProperty(t, "__esModule", { + value: true + }); + a(r(460), t); + }, + 27: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.propagation = void 0; + const n = r(25); + t.propagation = n.PropagationAPI.getInstance(); + }, + 19: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.NoopTextMapPropagator = void 0; + class NoopTextMapPropagator { + inject(e, t) {} + extract(e, t) { + return e; + } + fields() { + return []; + } + } + t.NoopTextMapPropagator = NoopTextMapPropagator; + }, + 92: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.defaultTextMapSetter = t.defaultTextMapGetter = void 0; + t.defaultTextMapGetter = { + get (e, t) { + if (e == null) { + return undefined; + } + return e[t]; + }, + keys (e) { + if (e == null) { + return []; + } + return Object.keys(e); + } + }; + t.defaultTextMapSetter = { + set (e, t, r) { + if (e == null) { + return; + } + e[t] = r; + } + }; + }, + 816: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.trace = void 0; + const n = r(397); + t.trace = n.TraceAPI.getInstance(); + }, + 374: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.NonRecordingSpan = void 0; + const n = r(546); + class NonRecordingSpan { + constructor(e = n.INVALID_SPAN_CONTEXT){ + this._spanContext = e; + } + spanContext() { + return this._spanContext; + } + setAttribute(e, t) { + return this; + } + setAttributes(e) { + return this; + } + addEvent(e, t) { + return this; + } + setStatus(e) { + return this; + } + updateName(e) { + return this; + } + end(e) {} + isRecording() { + return false; + } + recordException(e, t) {} + } + t.NonRecordingSpan = NonRecordingSpan; + }, + 637: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.NoopTracer = void 0; + const n = r(912); + const a = r(793); + const o = r(374); + const i = r(477); + const c = n.ContextAPI.getInstance(); + class NoopTracer { + startSpan(e, t, r = c.active()) { + const n = Boolean(t === null || t === void 0 ? void 0 : t.root); + if (n) { + return new o.NonRecordingSpan; + } + const s = r && (0, a.getSpanContext)(r); + if (isSpanContext(s) && (0, i.isSpanContextValid)(s)) { + return new o.NonRecordingSpan(s); + } else { + return new o.NonRecordingSpan; + } + } + startActiveSpan(e, t, r, n) { + let o; + let i; + let s; + if (arguments.length < 2) { + return; + } else if (arguments.length === 2) { + s = t; + } else if (arguments.length === 3) { + o = t; + s = r; + } else { + o = t; + i = r; + s = n; + } + const u = i !== null && i !== void 0 ? i : c.active(); + const l = this.startSpan(e, o, u); + const g = (0, a.setSpan)(u, l); + return c.with(g, s, undefined, l); + } + } + t.NoopTracer = NoopTracer; + function isSpanContext(e) { + return typeof e === "object" && typeof e["spanId"] === "string" && typeof e["traceId"] === "string" && typeof e["traceFlags"] === "number"; + } + }, + 76: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.NoopTracerProvider = void 0; + const n = r(637); + class NoopTracerProvider { + getTracer(e, t, r) { + return new n.NoopTracer; + } + } + t.NoopTracerProvider = NoopTracerProvider; + }, + 779: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.ProxyTracer = void 0; + const n = r(637); + const a = new n.NoopTracer; + class ProxyTracer { + constructor(e, t, r, n){ + this._provider = e; + this.name = t; + this.version = r; + this.options = n; + } + startSpan(e, t, r) { + return this._getTracer().startSpan(e, t, r); + } + startActiveSpan(e, t, r, n) { + const a = this._getTracer(); + return Reflect.apply(a.startActiveSpan, a, arguments); + } + _getTracer() { + if (this._delegate) { + return this._delegate; + } + const e = this._provider.getDelegateTracer(this.name, this.version, this.options); + if (!e) { + return a; + } + this._delegate = e; + return this._delegate; + } + } + t.ProxyTracer = ProxyTracer; + }, + 498: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.ProxyTracerProvider = void 0; + const n = r(779); + const a = r(76); + const o = new a.NoopTracerProvider; + class ProxyTracerProvider { + getTracer(e, t, r) { + var a; + return (a = this.getDelegateTracer(e, t, r)) !== null && a !== void 0 ? a : new n.ProxyTracer(this, e, t, r); + } + getDelegate() { + var e; + return (e = this._delegate) !== null && e !== void 0 ? e : o; + } + setDelegate(e) { + this._delegate = e; + } + getDelegateTracer(e, t, r) { + var n; + return (n = this._delegate) === null || n === void 0 ? void 0 : n.getTracer(e, t, r); + } + } + t.ProxyTracerProvider = ProxyTracerProvider; + }, + 312: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.SamplingDecision = void 0; + var r; + (function(e) { + e[e["NOT_RECORD"] = 0] = "NOT_RECORD"; + e[e["RECORD"] = 1] = "RECORD"; + e[e["RECORD_AND_SAMPLED"] = 2] = "RECORD_AND_SAMPLED"; + })(r = t.SamplingDecision || (t.SamplingDecision = {})); + }, + 793: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.getSpanContext = t.setSpanContext = t.deleteSpan = t.setSpan = t.getActiveSpan = t.getSpan = void 0; + const n = r(23); + const a = r(374); + const o = r(912); + const i = (0, n.createContextKey)("OpenTelemetry Context Key SPAN"); + function getSpan(e) { + return e.getValue(i) || undefined; + } + t.getSpan = getSpan; + function getActiveSpan() { + return getSpan(o.ContextAPI.getInstance().active()); + } + t.getActiveSpan = getActiveSpan; + function setSpan(e, t) { + return e.setValue(i, t); + } + t.setSpan = setSpan; + function deleteSpan(e) { + return e.deleteValue(i); + } + t.deleteSpan = deleteSpan; + function setSpanContext(e, t) { + return setSpan(e, new a.NonRecordingSpan(t)); + } + t.setSpanContext = setSpanContext; + function getSpanContext(e) { + var t; + return (t = getSpan(e)) === null || t === void 0 ? void 0 : t.spanContext(); + } + t.getSpanContext = getSpanContext; + }, + 285: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.TraceStateImpl = void 0; + const n = r(240); + const a = 32; + const o = 512; + const i = ","; + const c = "="; + class TraceStateImpl { + constructor(e){ + this._internalState = new Map; + if (e) this._parse(e); + } + set(e, t) { + const r = this._clone(); + if (r._internalState.has(e)) { + r._internalState.delete(e); + } + r._internalState.set(e, t); + return r; + } + unset(e) { + const t = this._clone(); + t._internalState.delete(e); + return t; + } + get(e) { + return this._internalState.get(e); + } + serialize() { + return this._keys().reduce((e, t)=>{ + e.push(t + c + this.get(t)); + return e; + }, []).join(i); + } + _parse(e) { + if (e.length > o) return; + this._internalState = e.split(i).reverse().reduce((e, t)=>{ + const r = t.trim(); + const a = r.indexOf(c); + if (a !== -1) { + const o = r.slice(0, a); + const i = r.slice(a + 1, t.length); + if ((0, n.validateKey)(o) && (0, n.validateValue)(i)) { + e.set(o, i); + } else {} + } + return e; + }, new Map); + if (this._internalState.size > a) { + this._internalState = new Map(Array.from(this._internalState.entries()).reverse().slice(0, a)); + } + } + _keys() { + return Array.from(this._internalState.keys()).reverse(); + } + _clone() { + const e = new TraceStateImpl; + e._internalState = new Map(this._internalState); + return e; + } + } + t.TraceStateImpl = TraceStateImpl; + }, + 240: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.validateValue = t.validateKey = void 0; + const r = "[_0-9a-z-*/]"; + const n = `[a-z]${r}{0,255}`; + const a = `[a-z0-9]${r}{0,240}@[a-z]${r}{0,13}`; + const o = new RegExp(`^(?:${n}|${a})$`); + const i = /^[ -~]{0,255}[!-~]$/; + const c = /,|=/; + function validateKey(e) { + return o.test(e); + } + t.validateKey = validateKey; + function validateValue(e) { + return i.test(e) && !c.test(e); + } + t.validateValue = validateValue; + }, + 87: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.createTraceState = void 0; + const n = r(285); + function createTraceState(e) { + return new n.TraceStateImpl(e); + } + t.createTraceState = createTraceState; + }, + 546: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.INVALID_SPAN_CONTEXT = t.INVALID_TRACEID = t.INVALID_SPANID = void 0; + const n = r(731); + t.INVALID_SPANID = "0000000000000000"; + t.INVALID_TRACEID = "00000000000000000000000000000000"; + t.INVALID_SPAN_CONTEXT = { + traceId: t.INVALID_TRACEID, + spanId: t.INVALID_SPANID, + traceFlags: n.TraceFlags.NONE + }; + }, + 613: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.SpanKind = void 0; + var r; + (function(e) { + e[e["INTERNAL"] = 0] = "INTERNAL"; + e[e["SERVER"] = 1] = "SERVER"; + e[e["CLIENT"] = 2] = "CLIENT"; + e[e["PRODUCER"] = 3] = "PRODUCER"; + e[e["CONSUMER"] = 4] = "CONSUMER"; + })(r = t.SpanKind || (t.SpanKind = {})); + }, + 477: (e, t, r)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.wrapSpanContext = t.isSpanContextValid = t.isValidSpanId = t.isValidTraceId = void 0; + const n = r(546); + const a = r(374); + const o = /^([0-9a-f]{32})$/i; + const i = /^[0-9a-f]{16}$/i; + function isValidTraceId(e) { + return o.test(e) && e !== n.INVALID_TRACEID; + } + t.isValidTraceId = isValidTraceId; + function isValidSpanId(e) { + return i.test(e) && e !== n.INVALID_SPANID; + } + t.isValidSpanId = isValidSpanId; + function isSpanContextValid(e) { + return isValidTraceId(e.traceId) && isValidSpanId(e.spanId); + } + t.isSpanContextValid = isSpanContextValid; + function wrapSpanContext(e) { + return new a.NonRecordingSpan(e); + } + t.wrapSpanContext = wrapSpanContext; + }, + 854: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.SpanStatusCode = void 0; + var r; + (function(e) { + e[e["UNSET"] = 0] = "UNSET"; + e[e["OK"] = 1] = "OK"; + e[e["ERROR"] = 2] = "ERROR"; + })(r = t.SpanStatusCode || (t.SpanStatusCode = {})); + }, + 731: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.TraceFlags = void 0; + var r; + (function(e) { + e[e["NONE"] = 0] = "NONE"; + e[e["SAMPLED"] = 1] = "SAMPLED"; + })(r = t.TraceFlags || (t.TraceFlags = {})); + }, + 652: (e, t)=>{ + Object.defineProperty(t, "__esModule", { + value: true + }); + t.VERSION = void 0; + t.VERSION = "1.6.0"; + } + }; + var t = {}; + function __nccwpck_require__(r) { + var n = t[r]; + if (n !== undefined) { + return n.exports; + } + var a = t[r] = { + exports: {} + }; + var o = true; + try { + e[r].call(a.exports, a, a.exports, __nccwpck_require__); + o = false; + } finally{ + if (o) delete t[r]; + } + return a.exports; + } + if (typeof __nccwpck_require__ !== "undefined") __nccwpck_require__.ab = ("TURBOPACK compile-time value", "/ROOT/node_modules/next/dist/compiled/@opentelemetry/api") + "/"; + var r = {}; + (()=>{ + var e = r; + Object.defineProperty(e, "__esModule", { + value: true + }); + e.trace = e.propagation = e.metrics = e.diag = e.context = e.INVALID_SPAN_CONTEXT = e.INVALID_TRACEID = e.INVALID_SPANID = e.isValidSpanId = e.isValidTraceId = e.isSpanContextValid = e.createTraceState = e.TraceFlags = e.SpanStatusCode = e.SpanKind = e.SamplingDecision = e.ProxyTracerProvider = e.ProxyTracer = e.defaultTextMapSetter = e.defaultTextMapGetter = e.ValueType = e.createNoopMeter = e.DiagLogLevel = e.DiagConsoleLogger = e.ROOT_CONTEXT = e.createContextKey = e.baggageEntryMetadataFromString = void 0; + var t = __nccwpck_require__(504); + Object.defineProperty(e, "baggageEntryMetadataFromString", { + enumerable: true, + get: function() { + return t.baggageEntryMetadataFromString; + } + }); + var n = __nccwpck_require__(23); + Object.defineProperty(e, "createContextKey", { + enumerable: true, + get: function() { + return n.createContextKey; + } + }); + Object.defineProperty(e, "ROOT_CONTEXT", { + enumerable: true, + get: function() { + return n.ROOT_CONTEXT; + } + }); + var a = __nccwpck_require__(83); + Object.defineProperty(e, "DiagConsoleLogger", { + enumerable: true, + get: function() { + return a.DiagConsoleLogger; + } + }); + var o = __nccwpck_require__(711); + Object.defineProperty(e, "DiagLogLevel", { + enumerable: true, + get: function() { + return o.DiagLogLevel; + } + }); + var i = __nccwpck_require__(440); + Object.defineProperty(e, "createNoopMeter", { + enumerable: true, + get: function() { + return i.createNoopMeter; + } + }); + var c = __nccwpck_require__(532); + Object.defineProperty(e, "ValueType", { + enumerable: true, + get: function() { + return c.ValueType; + } + }); + var s = __nccwpck_require__(92); + Object.defineProperty(e, "defaultTextMapGetter", { + enumerable: true, + get: function() { + return s.defaultTextMapGetter; + } + }); + Object.defineProperty(e, "defaultTextMapSetter", { + enumerable: true, + get: function() { + return s.defaultTextMapSetter; + } + }); + var u = __nccwpck_require__(779); + Object.defineProperty(e, "ProxyTracer", { + enumerable: true, + get: function() { + return u.ProxyTracer; + } + }); + var l = __nccwpck_require__(498); + Object.defineProperty(e, "ProxyTracerProvider", { + enumerable: true, + get: function() { + return l.ProxyTracerProvider; + } + }); + var g = __nccwpck_require__(312); + Object.defineProperty(e, "SamplingDecision", { + enumerable: true, + get: function() { + return g.SamplingDecision; + } + }); + var p = __nccwpck_require__(613); + Object.defineProperty(e, "SpanKind", { + enumerable: true, + get: function() { + return p.SpanKind; + } + }); + var d = __nccwpck_require__(854); + Object.defineProperty(e, "SpanStatusCode", { + enumerable: true, + get: function() { + return d.SpanStatusCode; + } + }); + var _ = __nccwpck_require__(731); + Object.defineProperty(e, "TraceFlags", { + enumerable: true, + get: function() { + return _.TraceFlags; + } + }); + var f = __nccwpck_require__(87); + Object.defineProperty(e, "createTraceState", { + enumerable: true, + get: function() { + return f.createTraceState; + } + }); + var b = __nccwpck_require__(477); + Object.defineProperty(e, "isSpanContextValid", { + enumerable: true, + get: function() { + return b.isSpanContextValid; + } + }); + Object.defineProperty(e, "isValidTraceId", { + enumerable: true, + get: function() { + return b.isValidTraceId; + } + }); + Object.defineProperty(e, "isValidSpanId", { + enumerable: true, + get: function() { + return b.isValidSpanId; + } + }); + var v = __nccwpck_require__(546); + Object.defineProperty(e, "INVALID_SPANID", { + enumerable: true, + get: function() { + return v.INVALID_SPANID; + } + }); + Object.defineProperty(e, "INVALID_TRACEID", { + enumerable: true, + get: function() { + return v.INVALID_TRACEID; + } + }); + Object.defineProperty(e, "INVALID_SPAN_CONTEXT", { + enumerable: true, + get: function() { + return v.INVALID_SPAN_CONTEXT; + } + }); + const O = __nccwpck_require__(778); + Object.defineProperty(e, "context", { + enumerable: true, + get: function() { + return O.context; + } + }); + const P = __nccwpck_require__(304); + Object.defineProperty(e, "diag", { + enumerable: true, + get: function() { + return P.diag; + } + }); + const N = __nccwpck_require__(120); + Object.defineProperty(e, "metrics", { + enumerable: true, + get: function() { + return N.metrics; + } + }); + const S = __nccwpck_require__(27); + Object.defineProperty(e, "propagation", { + enumerable: true, + get: function() { + return S.propagation; + } + }); + const C = __nccwpck_require__(816); + Object.defineProperty(e, "trace", { + enumerable: true, + get: function() { + return C.trace; + } + }); + e["default"] = { + context: O.context, + diag: P.diag, + metrics: N.metrics, + propagation: S.propagation, + trace: C.trace + }; + })(); + module.exports = r; +})(); +}), +"[project]/node_modules/next/dist/compiled/cookie/index.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { + +(()=>{ + "use strict"; + if (typeof __nccwpck_require__ !== "undefined") __nccwpck_require__.ab = ("TURBOPACK compile-time value", "/ROOT/node_modules/next/dist/compiled/cookie") + "/"; + var e = {}; + (()=>{ + var r = e; + /*! + * cookie + * Copyright(c) 2012-2014 Roman Shtylman + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ r.parse = parse; + r.serialize = serialize; + var i = decodeURIComponent; + var t = encodeURIComponent; + var a = /; */; + var n = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/; + function parse(e, r) { + if (typeof e !== "string") { + throw new TypeError("argument str must be a string"); + } + var t = {}; + var n = r || {}; + var o = e.split(a); + var s = n.decode || i; + for(var p = 0; p < o.length; p++){ + var f = o[p]; + var u = f.indexOf("="); + if (u < 0) { + continue; + } + var v = f.substr(0, u).trim(); + var c = f.substr(++u, f.length).trim(); + if ('"' == c[0]) { + c = c.slice(1, -1); + } + if (undefined == t[v]) { + t[v] = tryDecode(c, s); + } + } + return t; + } + function serialize(e, r, i) { + var a = i || {}; + var o = a.encode || t; + if (typeof o !== "function") { + throw new TypeError("option encode is invalid"); + } + if (!n.test(e)) { + throw new TypeError("argument name is invalid"); + } + var s = o(r); + if (s && !n.test(s)) { + throw new TypeError("argument val is invalid"); + } + var p = e + "=" + s; + if (null != a.maxAge) { + var f = a.maxAge - 0; + if (isNaN(f) || !isFinite(f)) { + throw new TypeError("option maxAge is invalid"); + } + p += "; Max-Age=" + Math.floor(f); + } + if (a.domain) { + if (!n.test(a.domain)) { + throw new TypeError("option domain is invalid"); + } + p += "; Domain=" + a.domain; + } + if (a.path) { + if (!n.test(a.path)) { + throw new TypeError("option path is invalid"); + } + p += "; Path=" + a.path; + } + if (a.expires) { + if (typeof a.expires.toUTCString !== "function") { + throw new TypeError("option expires is invalid"); + } + p += "; Expires=" + a.expires.toUTCString(); + } + if (a.httpOnly) { + p += "; HttpOnly"; + } + if (a.secure) { + p += "; Secure"; + } + if (a.sameSite) { + var u = typeof a.sameSite === "string" ? a.sameSite.toLowerCase() : a.sameSite; + switch(u){ + case true: + p += "; SameSite=Strict"; + break; + case "lax": + p += "; SameSite=Lax"; + break; + case "strict": + p += "; SameSite=Strict"; + break; + case "none": + p += "; SameSite=None"; + break; + default: + throw new TypeError("option sameSite is invalid"); + } + } + return p; + } + function tryDecode(e, r) { + try { + return r(e); + } catch (r) { + return e; + } + } + })(); + module.exports = e; +})(); +}), +"[project]/node_modules/next/dist/esm/server/route-modules/app-route/module.compiled.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => { + +if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable +; +else { + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + else { + if ("TURBOPACK compile-time truthy", 1) { + if ("TURBOPACK compile-time truthy", 1) { + module.exports = __turbopack_context__.r("[externals]/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-route-turbo.runtime.dev.js, cjs)"); + } else //TURBOPACK unreachable + ; + } else //TURBOPACK unreachable + ; + } +} +}), +]; + +//# sourceMappingURL=node_modules_next_dist_1ogzfy-d5327p._.js.map \ No newline at end of file diff --git a/.next-dev/dev/server/chunks/node_modules_next_dist_1ogzfy-d5327p._.js.map b/.next-dev/dev/server/chunks/node_modules_next_dist_1ogzfy-d5327p._.js.map new file mode 100644 index 0000000..bebd611 --- /dev/null +++ b/.next-dev/dev/server/chunks/node_modules_next_dist_1ogzfy-d5327p._.js.map @@ -0,0 +1,105 @@ +{ + "version": 3, + "sources": [], + "sections": [ + {"offset": {"line": 5, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/index.ts\nvar src_exports = {};\n__export(src_exports, {\n RequestCookies: () => RequestCookies,\n ResponseCookies: () => ResponseCookies,\n parseCookie: () => parseCookie,\n parseSetCookie: () => parseSetCookie,\n stringifyCookie: () => stringifyCookie\n});\nmodule.exports = __toCommonJS(src_exports);\n\n// src/serialize.ts\nfunction stringifyCookie(c) {\n var _a;\n const attrs = [\n \"path\" in c && c.path && `Path=${c.path}`,\n \"expires\" in c && (c.expires || c.expires === 0) && `Expires=${(typeof c.expires === \"number\" ? new Date(c.expires) : c.expires).toUTCString()}`,\n \"maxAge\" in c && typeof c.maxAge === \"number\" && `Max-Age=${c.maxAge}`,\n \"domain\" in c && c.domain && `Domain=${c.domain}`,\n \"secure\" in c && c.secure && \"Secure\",\n \"httpOnly\" in c && c.httpOnly && \"HttpOnly\",\n \"sameSite\" in c && c.sameSite && `SameSite=${c.sameSite}`,\n \"partitioned\" in c && c.partitioned && \"Partitioned\",\n \"priority\" in c && c.priority && `Priority=${c.priority}`\n ].filter(Boolean);\n const stringified = `${c.name}=${encodeURIComponent((_a = c.value) != null ? _a : \"\")}`;\n return attrs.length === 0 ? stringified : `${stringified}; ${attrs.join(\"; \")}`;\n}\nfunction parseCookie(cookie) {\n const map = /* @__PURE__ */ new Map();\n for (const pair of cookie.split(/; */)) {\n if (!pair)\n continue;\n const splitAt = pair.indexOf(\"=\");\n if (splitAt === -1) {\n map.set(pair, \"true\");\n continue;\n }\n const [key, value] = [pair.slice(0, splitAt), pair.slice(splitAt + 1)];\n try {\n map.set(key, decodeURIComponent(value != null ? value : \"true\"));\n } catch {\n }\n }\n return map;\n}\nfunction parseSetCookie(setCookie) {\n if (!setCookie) {\n return void 0;\n }\n const [[name, value], ...attributes] = parseCookie(setCookie);\n const {\n domain,\n expires,\n httponly,\n maxage,\n path,\n samesite,\n secure,\n partitioned,\n priority\n } = Object.fromEntries(\n attributes.map(([key, value2]) => [\n key.toLowerCase().replace(/-/g, \"\"),\n value2\n ])\n );\n const cookie = {\n name,\n value: decodeURIComponent(value),\n domain,\n ...expires && { expires: new Date(expires) },\n ...httponly && { httpOnly: true },\n ...typeof maxage === \"string\" && { maxAge: Number(maxage) },\n path,\n ...samesite && { sameSite: parseSameSite(samesite) },\n ...secure && { secure: true },\n ...priority && { priority: parsePriority(priority) },\n ...partitioned && { partitioned: true }\n };\n return compact(cookie);\n}\nfunction compact(t) {\n const newT = {};\n for (const key in t) {\n if (t[key]) {\n newT[key] = t[key];\n }\n }\n return newT;\n}\nvar SAME_SITE = [\"strict\", \"lax\", \"none\"];\nfunction parseSameSite(string) {\n string = string.toLowerCase();\n return SAME_SITE.includes(string) ? string : void 0;\n}\nvar PRIORITY = [\"low\", \"medium\", \"high\"];\nfunction parsePriority(string) {\n string = string.toLowerCase();\n return PRIORITY.includes(string) ? string : void 0;\n}\nfunction splitCookiesString(cookiesString) {\n if (!cookiesString)\n return [];\n var cookiesStrings = [];\n var pos = 0;\n var start;\n var ch;\n var lastComma;\n var nextStart;\n var cookiesSeparatorFound;\n function skipWhitespace() {\n while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n pos += 1;\n }\n return pos < cookiesString.length;\n }\n function notSpecialChar() {\n ch = cookiesString.charAt(pos);\n return ch !== \"=\" && ch !== \";\" && ch !== \",\";\n }\n while (pos < cookiesString.length) {\n start = pos;\n cookiesSeparatorFound = false;\n while (skipWhitespace()) {\n ch = cookiesString.charAt(pos);\n if (ch === \",\") {\n lastComma = pos;\n pos += 1;\n skipWhitespace();\n nextStart = pos;\n while (pos < cookiesString.length && notSpecialChar()) {\n pos += 1;\n }\n if (pos < cookiesString.length && cookiesString.charAt(pos) === \"=\") {\n cookiesSeparatorFound = true;\n pos = nextStart;\n cookiesStrings.push(cookiesString.substring(start, lastComma));\n start = pos;\n } else {\n pos = lastComma + 1;\n }\n } else {\n pos += 1;\n }\n }\n if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n cookiesStrings.push(cookiesString.substring(start, cookiesString.length));\n }\n }\n return cookiesStrings;\n}\n\n// src/request-cookies.ts\nvar RequestCookies = class {\n constructor(requestHeaders) {\n /** @internal */\n this._parsed = /* @__PURE__ */ new Map();\n this._headers = requestHeaders;\n const header = requestHeaders.get(\"cookie\");\n if (header) {\n const parsed = parseCookie(header);\n for (const [name, value] of parsed) {\n this._parsed.set(name, { name, value });\n }\n }\n }\n [Symbol.iterator]() {\n return this._parsed[Symbol.iterator]();\n }\n /**\n * The amount of cookies received from the client\n */\n get size() {\n return this._parsed.size;\n }\n get(...args) {\n const name = typeof args[0] === \"string\" ? args[0] : args[0].name;\n return this._parsed.get(name);\n }\n getAll(...args) {\n var _a;\n const all = Array.from(this._parsed);\n if (!args.length) {\n return all.map(([_, value]) => value);\n }\n const name = typeof args[0] === \"string\" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name;\n return all.filter(([n]) => n === name).map(([_, value]) => value);\n }\n has(name) {\n return this._parsed.has(name);\n }\n set(...args) {\n const [name, value] = args.length === 1 ? [args[0].name, args[0].value] : args;\n const map = this._parsed;\n map.set(name, { name, value });\n this._headers.set(\n \"cookie\",\n Array.from(map).map(([_, value2]) => stringifyCookie(value2)).join(\"; \")\n );\n return this;\n }\n /**\n * Delete the cookies matching the passed name or names in the request.\n */\n delete(names) {\n const map = this._parsed;\n const result = !Array.isArray(names) ? map.delete(names) : names.map((name) => map.delete(name));\n this._headers.set(\n \"cookie\",\n Array.from(map).map(([_, value]) => stringifyCookie(value)).join(\"; \")\n );\n return result;\n }\n /**\n * Delete all the cookies in the cookies in the request.\n */\n clear() {\n this.delete(Array.from(this._parsed.keys()));\n return this;\n }\n /**\n * Format the cookies in the request as a string for logging\n */\n [Symbol.for(\"edge-runtime.inspect.custom\")]() {\n return `RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`;\n }\n toString() {\n return [...this._parsed.values()].map((v) => `${v.name}=${encodeURIComponent(v.value)}`).join(\"; \");\n }\n};\n\n// src/response-cookies.ts\nvar ResponseCookies = class {\n constructor(responseHeaders) {\n /** @internal */\n this._parsed = /* @__PURE__ */ new Map();\n var _a, _b, _c;\n this._headers = responseHeaders;\n const setCookie = (_c = (_b = (_a = responseHeaders.getSetCookie) == null ? void 0 : _a.call(responseHeaders)) != null ? _b : responseHeaders.get(\"set-cookie\")) != null ? _c : [];\n const cookieStrings = Array.isArray(setCookie) ? setCookie : splitCookiesString(setCookie);\n for (const cookieString of cookieStrings) {\n const parsed = parseSetCookie(cookieString);\n if (parsed)\n this._parsed.set(parsed.name, parsed);\n }\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-get CookieStore#get} without the Promise.\n */\n get(...args) {\n const key = typeof args[0] === \"string\" ? args[0] : args[0].name;\n return this._parsed.get(key);\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-getAll CookieStore#getAll} without the Promise.\n */\n getAll(...args) {\n var _a;\n const all = Array.from(this._parsed.values());\n if (!args.length) {\n return all;\n }\n const key = typeof args[0] === \"string\" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name;\n return all.filter((c) => c.name === key);\n }\n has(name) {\n return this._parsed.has(name);\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-set CookieStore#set} without the Promise.\n */\n set(...args) {\n const [name, value, cookie] = args.length === 1 ? [args[0].name, args[0].value, args[0]] : args;\n const map = this._parsed;\n map.set(name, normalizeCookie({ name, value, ...cookie }));\n replace(map, this._headers);\n return this;\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-delete CookieStore#delete} without the Promise.\n */\n delete(...args) {\n const [name, options] = typeof args[0] === \"string\" ? [args[0]] : [args[0].name, args[0]];\n return this.set({ ...options, name, value: \"\", expires: /* @__PURE__ */ new Date(0) });\n }\n [Symbol.for(\"edge-runtime.inspect.custom\")]() {\n return `ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`;\n }\n toString() {\n return [...this._parsed.values()].map(stringifyCookie).join(\"; \");\n }\n};\nfunction replace(bag, headers) {\n headers.delete(\"set-cookie\");\n for (const [, value] of bag) {\n const serialized = stringifyCookie(value);\n headers.append(\"set-cookie\", serialized);\n }\n}\nfunction normalizeCookie(cookie = { name: \"\", value: \"\" }) {\n if (typeof cookie.expires === \"number\") {\n cookie.expires = new Date(cookie.expires);\n }\n if (cookie.maxAge) {\n cookie.expires = new Date(Date.now() + cookie.maxAge * 1e3);\n }\n if (cookie.path === null || cookie.path === void 0) {\n cookie.path = \"/\";\n }\n return cookie;\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n RequestCookies,\n ResponseCookies,\n parseCookie,\n parseSetCookie,\n stringifyCookie\n});\n"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","src_exports","RequestCookies","ResponseCookies","parseCookie","parseSetCookie","stringifyCookie","module","exports","c","_a","attrs","path","expires","Date","toUTCString","maxAge","domain","secure","httpOnly","sameSite","partitioned","priority","filter","Boolean","stringified","encodeURIComponent","length","join","cookie","map","Map","pair","split","splitAt","indexOf","set","slice","decodeURIComponent","setCookie","attributes","httponly","maxage","samesite","fromEntries","value2","toLowerCase","replace","Number","parseSameSite","parsePriority","compact","t","newT","SAME_SITE","string","includes","PRIORITY","splitCookiesString","cookiesString","cookiesStrings","pos","start","ch","lastComma","nextStart","cookiesSeparatorFound","skipWhitespace","test","charAt","notSpecialChar","push","substring","requestHeaders","_parsed","_headers","header","parsed","Symbol","iterator","size","args","getAll","Array","_","n","has","delete","names","result","isArray","clear","keys","for","JSON","stringify","toString","values","v","responseHeaders","_b","_c","getSetCookie","cookieStrings","cookieString","normalizeCookie","options","bag","headers","serialized","append","now"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 375, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/build/output/log.ts"],"sourcesContent":["import { bold, green, magenta, red, yellow, white } from '../../lib/picocolors'\nimport { LRUCache } from '../../server/lib/lru-cache'\n\nexport const prefixes = {\n wait: white(bold('○')),\n error: red(bold('⨯')),\n warn: yellow(bold('⚠')),\n ready: '▲', // no color\n info: white(bold(' ')),\n event: green(bold('✓')),\n trace: magenta(bold('»')),\n} as const\n\nconst LOGGING_METHOD = {\n log: 'log',\n warn: 'warn',\n error: 'error',\n} as const\n\nfunction prefixedLog(prefixType: keyof typeof prefixes, ...message: any[]) {\n if ((message[0] === '' || message[0] === undefined) && message.length === 1) {\n message.shift()\n }\n\n const consoleMethod: keyof typeof LOGGING_METHOD =\n prefixType in LOGGING_METHOD\n ? LOGGING_METHOD[prefixType as keyof typeof LOGGING_METHOD]\n : 'log'\n\n const prefix = prefixes[prefixType]\n // If there's no message, don't print the prefix but a new line\n if (message.length === 0) {\n console[consoleMethod]('')\n } else {\n // Ensure if there's ANSI escape codes it's concatenated into one string.\n // Chrome DevTool can only handle color if it's in one string.\n if (message.length === 1 && typeof message[0] === 'string') {\n console[consoleMethod](prefix + ' ' + message[0])\n } else {\n console[consoleMethod](prefix, ...message)\n }\n }\n}\n\nexport function bootstrap(message: string) {\n console.log(message)\n}\n\nexport function wait(...message: any[]) {\n prefixedLog('wait', ...message)\n}\n\nexport function error(...message: any[]) {\n prefixedLog('error', ...message)\n}\n\nexport function warn(...message: any[]) {\n prefixedLog('warn', ...message)\n}\n\nexport function ready(...message: any[]) {\n prefixedLog('ready', ...message)\n}\n\nexport function info(...message: any[]) {\n prefixedLog('info', ...message)\n}\n\nexport function event(...message: any[]) {\n prefixedLog('event', ...message)\n}\n\nexport function trace(...message: any[]) {\n prefixedLog('trace', ...message)\n}\n\nconst warnOnceCache = new LRUCache(10_000, (value) => value.length)\nexport function warnOnce(...message: any[]) {\n const key = message.join(' ')\n if (!warnOnceCache.has(key)) {\n warnOnceCache.set(key, key)\n warn(...message)\n }\n}\n\nconst errorOnceCache = new LRUCache(10_000, (value) => value.length)\nexport function errorOnce(...message: any[]) {\n const key = message.join(' ')\n if (!errorOnceCache.has(key)) {\n errorOnceCache.set(key, key)\n error(...message)\n }\n}\n"],"names":["bold","green","magenta","red","yellow","white","LRUCache","prefixes","wait","error","warn","ready","info","event","trace","LOGGING_METHOD","log","prefixedLog","prefixType","message","undefined","length","shift","consoleMethod","prefix","console","bootstrap","warnOnceCache","value","warnOnce","key","join","has","set","errorOnceCache","errorOnce"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAASA,IAAI,EAAEC,KAAK,EAAEC,OAAO,EAAEC,GAAG,EAAEC,MAAM,EAAEC,KAAK,QAAQ,uBAAsB;AAC/E,SAASC,QAAQ,QAAQ,6BAA4B;;;AAE9C,MAAMC,WAAW;IACtBC,UAAMH,mKAAAA,MAAML,kKAAAA,EAAK;IACjBS,WAAON,iKAAAA,MAAIH,kKAAAA,EAAK;IAChBU,UAAMN,oKAAAA,MAAOJ,kKAAAA,EAAK;IAClBW,OAAO;IACPC,UAAMP,mKAAAA,MAAML,kKAAAA,EAAK;IACjBa,WAAOZ,mKAAAA,MAAMD,kKAAAA,EAAK;IAClBc,WAAOZ,qKAAAA,MAAQF,kKAAAA,EAAK;AACtB,EAAU;AAEV,MAAMe,iBAAiB;IACrBC,KAAK;IACLN,MAAM;IACND,OAAO;AACT;AAEA,SAASQ,YAAYC,UAAiC,EAAE,GAAGC,OAAc;IACvE,IAAKA,CAAAA,OAAO,CAAC,EAAE,KAAK,MAAMA,OAAO,CAAC,EAAE,KAAKC,SAAQ,KAAMD,QAAQE,MAAM,KAAK,GAAG;QAC3EF,QAAQG,KAAK;IACf;IAEA,MAAMC,gBACJL,cAAcH,iBACVA,cAAc,CAACG,WAA0C,GACzD;IAEN,MAAMM,SAASjB,QAAQ,CAACW,WAAW;IACnC,+DAA+D;IAC/D,IAAIC,QAAQE,MAAM,KAAK,GAAG;QACxBI,OAAO,CAACF,cAAc,CAAC;IACzB,OAAO;QACL,yEAAyE;QACzE,8DAA8D;QAC9D,IAAIJ,QAAQE,MAAM,KAAK,KAAK,OAAOF,OAAO,CAAC,EAAE,KAAK,UAAU;YAC1DM,OAAO,CAACF,cAAc,CAACC,SAAS,MAAML,OAAO,CAAC,EAAE;QAClD,OAAO;YACLM,OAAO,CAACF,cAAc,CAACC,WAAWL;QACpC;IACF;AACF;AAEO,SAASO,UAAUP,OAAe;IACvCM,QAAQT,GAAG,CAACG;AACd;AAEO,SAASX,KAAK,GAAGW,OAAc;IACpCF,YAAY,WAAWE;AACzB;AAEO,SAASV,MAAM,GAAGU,OAAc;IACrCF,YAAY,YAAYE;AAC1B;AAEO,SAAST,KAAK,GAAGS,OAAc;IACpCF,YAAY,WAAWE;AACzB;AAEO,SAASR,MAAM,GAAGQ,OAAc;IACrCF,YAAY,YAAYE;AAC1B;AAEO,SAASP,KAAK,GAAGO,OAAc;IACpCF,YAAY,WAAWE;AACzB;AAEO,SAASN,MAAM,GAAGM,OAAc;IACrCF,YAAY,YAAYE;AAC1B;AAEO,SAASL,MAAM,GAAGK,OAAc;IACrCF,YAAY,YAAYE;AAC1B;AAEA,MAAMQ,gBAAgB,IAAIrB,kLAAAA,CAAiB,OAAQ,CAACsB,QAAUA,MAAMP,MAAM;AACnE,SAASQ,SAAS,GAAGV,OAAc;IACxC,MAAMW,MAAMX,QAAQY,IAAI,CAAC;IACzB,IAAI,CAACJ,cAAcK,GAAG,CAACF,MAAM;QAC3BH,cAAcM,GAAG,CAACH,KAAKA;QACvBpB,QAAQS;IACV;AACF;AAEA,MAAMe,iBAAiB,IAAI5B,kLAAAA,CAAiB,OAAQ,CAACsB,QAAUA,MAAMP,MAAM;AACpE,SAASc,UAAU,GAAGhB,OAAc;IACzC,MAAMW,MAAMX,QAAQY,IAAI,CAAC;IACzB,IAAI,CAACG,eAAeF,GAAG,CAACF,MAAM;QAC5BI,eAAeD,GAAG,CAACH,KAAKA;QACxBrB,SAASU;IACX;AACF","ignoreList":[0]}}, + {"offset": {"line": 480, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/build/templates/app-route.ts"],"sourcesContent":["import {\n AppRouteRouteModule,\n type AppRouteRouteHandlerContext,\n type AppRouteRouteModuleOptions,\n} from '../../server/route-modules/app-route/module.compiled'\nimport { RouteKind } from '../../server/route-kind'\nimport { patchFetch as _patchFetch } from '../../server/lib/patch-fetch'\nimport type { IncomingMessage, ServerResponse } from 'node:http'\nimport {\n addRequestMeta,\n getRequestMeta,\n setRequestMeta,\n type RequestMeta,\n} from '../../server/request-meta'\nimport {\n getTracer,\n type Span,\n SpanKind,\n SpanStatusCode,\n} from '../../server/lib/trace/tracer'\nimport { setManifestsSingleton } from '../../server/app-render/manifests-singleton'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport { NodeNextRequest, NodeNextResponse } from '../../server/base-http/node'\nimport {\n NextRequestAdapter,\n signalFromNodeResponse,\n} from '../../server/web/spec-extension/adapters/next-request'\nimport { BaseServerSpan } from '../../server/lib/trace/constants'\nimport { getRevalidateReason } from '../../server/instrumentation/utils'\nimport { sendResponse } from '../../server/send-response'\nimport {\n fromNodeOutgoingHttpHeaders,\n toNodeOutgoingHttpHeaders,\n} from '../../server/web/utils'\nimport { getCacheControlHeader } from '../../server/lib/cache-control'\nimport { INFINITE_CACHE, NEXT_CACHE_TAGS_HEADER } from '../../lib/constants'\nimport { NoFallbackError } from '../../shared/lib/no-fallback-error.external'\nimport { isRouteCacheOwner } from '../../server/lib/route-cache-key'\nimport {\n CachedRouteKind,\n type ResponseCacheEntry,\n type ResponseGenerator,\n} from '../../server/response-cache'\n\n// These are injected by the loader afterwards. This is injected as a variable\n// instead of a replacement because this could also be `undefined` instead of\n// an empty string.\ndeclare const nextConfigOutput: AppRouteRouteModuleOptions['nextConfigOutput']\n\n// We inject the nextConfigOutput here so that we can use them in the route\n// module.\n// INJECT:nextConfigOutput\n\nconst routeModule = new AppRouteRouteModule({\n definition: {\n kind: RouteKind.APP_ROUTE,\n page: 'VAR_DEFINITION_PAGE',\n pathname: 'VAR_DEFINITION_PATHNAME',\n filename: 'VAR_DEFINITION_FILENAME',\n bundlePath: 'VAR_DEFINITION_BUNDLE_PATH',\n },\n distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',\n relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || '',\n resolvedPagePath: 'VAR_RESOLVED_PAGE_PATH',\n nextConfigOutput,\n // The lazy require factory ensures that:\n // - In dev: devRequestTimingInternalsEnd is set before userland executes,\n // correctly attributing module load time to application-code rather than\n // framework internals.\n // - In all modes: async modules (route files with top-level await) are\n // handled correctly — require() returns a Promise for such modules, which\n // ensureUserland() awaits before the first request is handled.\n userland: () => require('VAR_USERLAND') as typeof import('VAR_USERLAND'),\n // In Turbopack dev mode, also provide a synchronous per-request getter so\n // server HMR updates are picked up without re-executing the entry chunk.\n // Using require() (synchronous) avoids adding async overhead that would be\n // incorrectly attributed to application-code time in devRequestTiming.\n ...(process.env.TURBOPACK && process.env.__NEXT_DEV_SERVER\n ? {\n getUserland: () =>\n require('VAR_USERLAND') as typeof import('VAR_USERLAND'),\n }\n : {}),\n})\n\n// Pull out the exports that we need to expose from the module. This should\n// be eliminated when we've moved the other routes to the new format. These\n// are used to hook into the route.\nconst { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule\n\nfunction patchFetch() {\n return _patchFetch({\n workAsyncStorage,\n workUnitAsyncStorage,\n })\n}\n\nexport {\n routeModule,\n workAsyncStorage,\n workUnitAsyncStorage,\n serverHooks,\n patchFetch,\n}\n\nexport async function handler(\n req: IncomingMessage,\n res: ServerResponse,\n ctx: {\n waitUntil?: (prom: Promise) => void\n requestMeta?: RequestMeta\n }\n) {\n if (ctx.requestMeta) {\n setRequestMeta(req, ctx.requestMeta)\n }\n if (routeModule.isDev) {\n addRequestMeta(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint())\n }\n let srcPage = 'VAR_DEFINITION_PAGE'\n\n // turbopack doesn't normalize `/index` in the page name\n // so we need to to process dynamic routes properly\n // TODO: fix turbopack providing differing value from webpack\n if (process.env.TURBOPACK) {\n srcPage = srcPage.replace(/\\/index$/, '') || '/'\n } else if (srcPage === '/index') {\n // we always normalize /index specifically\n srcPage = '/'\n }\n const multiZoneDraftMode = process.env\n .__NEXT_MULTI_ZONE_DRAFT_MODE as any as boolean\n\n const prepareResult = await routeModule.prepare(req, res, {\n srcPage,\n multiZoneDraftMode,\n })\n\n if (!prepareResult) {\n res.statusCode = 400\n res.end('Bad Request')\n ctx.waitUntil?.(Promise.resolve())\n return null\n }\n\n const {\n buildId,\n deploymentId,\n params,\n nextConfig,\n parsedUrl,\n isDraftMode,\n prerenderManifest,\n routerServerContext,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n resolvedPathname,\n clientReferenceManifest,\n serverActionsManifest,\n previewProps,\n } = prepareResult\n\n const normalizedSrcPage = normalizeAppPath(srcPage)\n\n // Only this route's prerenders can establish ISR or admit generated params.\n const isPrerendered =\n Boolean(prerenderManifest.routes[resolvedPathname]) &&\n (routeModule.isDev ||\n isRouteCacheOwner(\n resolvedPathname,\n routeModule.cacheOwner,\n prerenderManifest.routes[resolvedPathname]\n ))\n\n let isIsr = Boolean(\n prerenderManifest.dynamicRoutes[normalizedSrcPage] || isPrerendered\n )\n\n const render404 = async () => {\n // TODO: should route-module itself handle rendering the 404\n if (routerServerContext?.render404) {\n await routerServerContext.render404(req, res, parsedUrl, false)\n } else {\n res.end('This page could not be found')\n }\n return null\n }\n\n if (isIsr && !isDraftMode) {\n const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage]\n\n if (prerenderInfo) {\n if (prerenderInfo.fallback === false && !isPrerendered) {\n if (nextConfig.adapterPath) {\n return await render404()\n }\n throw new NoFallbackError()\n }\n }\n }\n\n let cacheKey: string | null = null\n\n if (isIsr && !routeModule.isDev && !isDraftMode) {\n cacheKey = resolvedPathname\n // ensure /index and / is normalized to one key\n cacheKey = cacheKey === '/index' ? '/' : cacheKey\n }\n\n // Before rendering (which initializes component tree modules), we have to\n // set the reference manifests to our global store so Server Action's\n // encryption util can access to them at the top level of the page module.\n if (serverActionsManifest && clientReferenceManifest) {\n setManifestsSingleton({\n page: srcPage,\n clientReferenceManifest,\n serverActionsManifest,\n })\n }\n\n const method = req.method || 'GET'\n const tracer = getTracer()\n const activeSpan = tracer.getActiveScopeSpan()\n const isWrappedByNextServer = Boolean(\n routerServerContext?.isWrappedByNextServer\n )\n const isMinimalMode = Boolean(getRequestMeta(req, 'minimalMode'))\n\n const incrementalCache =\n getRequestMeta(req, 'incrementalCache') ||\n (await routeModule.getIncrementalCache(\n req,\n nextConfig,\n previewProps,\n prerenderManifest,\n isMinimalMode\n ))\n\n incrementalCache?.resetRequestCache()\n ;(globalThis as any).__incrementalCache = incrementalCache\n\n const context: AppRouteRouteHandlerContext = {\n params,\n previewProps,\n renderOpts: {\n experimental: {\n authInterrupts: Boolean(nextConfig.experimental.authInterrupts),\n useCacheTimeout: nextConfig.experimental.useCacheTimeout,\n durableUseCacheEntries: Boolean(\n nextConfig.experimental.durableUseCacheEntries\n ),\n },\n cacheComponents: Boolean(nextConfig.cacheComponents),\n validationLevel: nextConfig.experimental.instantInsights.validationLevel,\n isDraftMode,\n incrementalCache,\n hmrRefreshHash: getRequestMeta(req, 'hmrRefreshHash'),\n cacheLifeProfiles: nextConfig.cacheLife,\n staticPageGenerationTimeout: nextConfig.staticPageGenerationTimeout,\n waitUntil: ctx.waitUntil,\n onClose: (cb) => {\n res.on('close', cb)\n },\n onAfterTaskError: undefined,\n },\n sharedContext: {\n buildId,\n deploymentId,\n },\n }\n const nodeNextReq = new NodeNextRequest(req)\n const nodeNextRes = new NodeNextResponse(res)\n\n const nextReq = NextRequestAdapter.fromNodeNextRequest(\n nodeNextReq,\n signalFromNodeResponse(res)\n )\n\n const responseGenerator: ResponseGenerator = async ({\n previousCacheEntry,\n }) => {\n try {\n if (\n !isMinimalMode &&\n isOnDemandRevalidate &&\n revalidateOnlyGenerated &&\n !previousCacheEntry\n ) {\n res.statusCode = 404\n // on-demand revalidate always sets this header\n res.setHeader('x-nextjs-cache', 'REVALIDATED')\n res.end('This page could not be found')\n return null\n }\n\n const response =\n cacheKey === null\n ? await routeModule.handle(nextReq, context)\n : await routeModule.prerender(nextReq, context)\n\n ;(req as any).fetchMetrics = (context.renderOpts as any).fetchMetrics\n let pendingWaitUntil = context.renderOpts.pendingWaitUntil\n\n // Attempt using provided waitUntil if available\n // if it's not we fallback to sendResponse's handling\n if (pendingWaitUntil) {\n if (ctx.waitUntil) {\n ctx.waitUntil(pendingWaitUntil)\n pendingWaitUntil = undefined\n }\n }\n const cacheTags = context.renderOpts.collectedTags\n\n // If the request is for a static response, we can cache it so long\n // as it's not edge.\n if (isIsr) {\n const blob = await response.blob()\n\n // Copy the headers from the response.\n const headers = toNodeOutgoingHttpHeaders(response.headers)\n\n if (cacheTags) {\n headers[NEXT_CACHE_TAGS_HEADER] = cacheTags\n }\n\n if (!headers['content-type'] && blob.type) {\n headers['content-type'] = blob.type\n }\n\n const revalidate =\n typeof context.renderOpts.collectedRevalidate === 'undefined' ||\n context.renderOpts.collectedRevalidate >= INFINITE_CACHE\n ? false\n : context.renderOpts.collectedRevalidate\n\n const expire =\n typeof context.renderOpts.collectedExpire === 'undefined' ||\n context.renderOpts.collectedExpire >= INFINITE_CACHE\n ? // Fall back to the global `expireTime` config when the\n // route has a numeric `revalidate` but didn't declare an\n // explicit `expire` (e.g. via `cacheLife`). This mirrors the\n // build-time fallback in `build/index.ts` so cache entries\n // and the response Cache-Control header agree on the route's\n // effective expire. Routes that opt out of revalidation\n // (`revalidate: false`) or that are dynamic (`revalidate: 0`)\n // keep `expire: undefined`.\n revalidate !== false && revalidate > 0\n ? nextConfig.expireTime\n : undefined\n : context.renderOpts.collectedExpire\n\n // Create the cache entry for the response.\n const cacheEntry: ResponseCacheEntry = {\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n status: response.status,\n body: Buffer.from(await blob.arrayBuffer()),\n headers,\n },\n cacheControl: { revalidate, expire },\n }\n\n return cacheEntry\n } else {\n // send response without caching if not ISR\n await sendResponse(nodeNextReq, nodeNextRes, response, pendingWaitUntil)\n return null\n }\n } catch (err) {\n // if this is a background revalidate we need to report\n // the request error here as it won't be bubbled\n if (previousCacheEntry?.isStale) {\n const silenceLog = false\n await routeModule.onRequestError(\n req,\n err,\n {\n routerKind: 'App Router',\n routePath: srcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration: cacheKey !== null,\n isOnDemandRevalidate,\n }),\n },\n silenceLog,\n routerServerContext\n )\n }\n throw err\n }\n }\n\n const handleResponse = async (\n currentSpan: Span | undefined,\n parentSpan: Span | undefined\n ) => {\n try {\n const cacheEntry = await routeModule.handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind: RouteKind.APP_ROUTE,\n isFallback: false,\n previewProps,\n prerenderManifest,\n isRoutePPREnabled: false,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil: ctx.waitUntil,\n isMinimalMode,\n })\n\n if (cacheEntry !== null && 'error' in cacheEntry) {\n throw cacheEntry.error\n }\n\n // we don't create a cacheEntry for ISR\n if (!isIsr) {\n return\n }\n\n if (cacheEntry?.value?.kind !== CachedRouteKind.APP_ROUTE) {\n throw new Error(\n `Invariant: app-route received invalid cache entry ${cacheEntry?.value?.kind}`\n )\n }\n\n if (!isMinimalMode) {\n res.setHeader(\n 'x-nextjs-cache',\n isOnDemandRevalidate\n ? 'REVALIDATED'\n : cacheEntry.isMiss\n ? 'MISS'\n : cacheEntry.isStale\n ? 'STALE'\n : 'HIT'\n )\n }\n\n // Draft mode should never be cached\n if (isDraftMode) {\n res.setHeader(\n 'Cache-Control',\n 'private, no-cache, no-store, max-age=0, must-revalidate'\n )\n }\n\n const headers = fromNodeOutgoingHttpHeaders(cacheEntry.value.headers)\n\n if (!(isMinimalMode && isIsr)) {\n headers.delete(NEXT_CACHE_TAGS_HEADER)\n }\n\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (\n cacheEntry.cacheControl &&\n !res.getHeader('Cache-Control') &&\n !headers.get('Cache-Control')\n ) {\n headers.set(\n 'Cache-Control',\n getCacheControlHeader(cacheEntry.cacheControl)\n )\n }\n\n await sendResponse(\n nodeNextReq,\n nodeNextRes,\n // @ts-expect-error - Argument of type 'Buffer' is not assignable to parameter of type 'BodyInit | null | undefined'.\n new Response(cacheEntry.value.body, {\n headers,\n status: cacheEntry.value.status || 200,\n })\n )\n return\n } catch (err) {\n if (!(err instanceof NoFallbackError)) {\n const silenceLog = false\n await routeModule.onRequestError(\n req,\n err,\n {\n routerKind: 'App Router',\n routePath: normalizedSrcPage,\n routeType: 'route',\n revalidateReason: getRevalidateReason({\n isStaticGeneration: cacheKey !== null,\n isOnDemandRevalidate,\n }),\n },\n silenceLog,\n routerServerContext\n )\n }\n\n // rethrow so that we can handle serving error page\n\n // If this is during static generation, throw the error again.\n if (isIsr) throw err\n\n // Otherwise, send a 500 response unless the original response has\n // already committed. In that case, preserve its status code for\n // telemetry while still recording the failure and terminating a response\n // that the failed pipeline left open.\n if (res.headersSent) {\n if (currentSpan) {\n const error =\n err instanceof Error ? err : new Error('Unknown app route error')\n currentSpan.recordException(error)\n currentSpan.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n })\n currentSpan.setAttribute('error.type', error.name)\n }\n if (!res.writableEnded && !res.destroyed) {\n res.end()\n }\n } else {\n await sendResponse(\n nodeNextReq,\n nodeNextRes,\n new Response(null, { status: 500 })\n )\n }\n return\n } finally {\n ;(() => {\n if (!currentSpan) {\n return\n }\n\n let statusCode = res.statusCode\n\n currentSpan.setAttributes({\n 'http.status_code': statusCode,\n 'next.rsc': false,\n })\n\n if (statusCode && statusCode >= 500) {\n // For 5xx status codes: SHOULD be set to 'Error' span status.\n // x-ref: https://opentelemetry.io/docs/specs/semconv/http/http-spans/#status\n currentSpan.setStatus({\n code: SpanStatusCode.ERROR,\n })\n // For span status 'Error', SHOULD set 'error.type' attribute.\n currentSpan.setAttribute('error.type', statusCode.toString())\n }\n\n const rootSpanAttributes = tracer.getRootSpanAttributes()\n // We were unable to get attributes, probably OTEL is not enabled\n if (!rootSpanAttributes) {\n return\n }\n\n if (\n rootSpanAttributes.get('next.span_type') !==\n BaseServerSpan.handleRequest\n ) {\n console.warn(\n `Unexpected root span type '${rootSpanAttributes.get(\n 'next.span_type'\n )}'. Please report this Next.js issue https://github.com/vercel/next.js`\n )\n return\n }\n\n const route = rootSpanAttributes.get('next.route') || normalizedSrcPage\n const name = `${method} ${route}`\n\n currentSpan.setAttributes({\n 'next.route': route,\n 'http.route': route,\n 'next.span_name': name,\n })\n currentSpan.updateName(name)\n\n // Propagate http.route to the parent span if one exists (e.g.\n // a platform-created HTTP span in adapter deployments).\n if (parentSpan && parentSpan !== currentSpan) {\n parentSpan.setAttribute('http.route', route)\n parentSpan.updateName(name)\n }\n })()\n }\n }\n\n // TODO: activeSpan code path is for when wrapped by\n // next-server can be removed when this is no longer used\n if (isWrappedByNextServer && activeSpan) {\n await handleResponse(activeSpan, undefined)\n } else {\n let parentSpan = tracer.getActiveScopeSpan()\n await tracer.withPropagatedContext(\n req.headers,\n () =>\n tracer.trace(\n BaseServerSpan.handleRequest,\n {\n spanName: `${method} ${srcPage}`,\n kind: SpanKind.SERVER,\n attributes: {\n 'http.method': method,\n 'http.target': req.url,\n },\n },\n (span) => handleResponse(span, parentSpan)\n ),\n undefined,\n !isWrappedByNextServer\n )\n }\n}\n"],"names":["AppRouteRouteModule","RouteKind","patchFetch","_patchFetch","addRequestMeta","getRequestMeta","setRequestMeta","getTracer","SpanKind","SpanStatusCode","setManifestsSingleton","normalizeAppPath","NodeNextRequest","NodeNextResponse","NextRequestAdapter","signalFromNodeResponse","BaseServerSpan","getRevalidateReason","sendResponse","fromNodeOutgoingHttpHeaders","toNodeOutgoingHttpHeaders","getCacheControlHeader","INFINITE_CACHE","NEXT_CACHE_TAGS_HEADER","NoFallbackError","isRouteCacheOwner","CachedRouteKind","routeModule","definition","kind","APP_ROUTE","page","pathname","filename","bundlePath","distDir","process","env","__NEXT_RELATIVE_DIST_DIR","relativeProjectDir","__NEXT_RELATIVE_PROJECT_DIR","resolvedPagePath","nextConfigOutput","userland","require","TURBOPACK","__NEXT_DEV_SERVER","getUserland","workAsyncStorage","workUnitAsyncStorage","serverHooks","handler","req","res","ctx","requestMeta","isDev","hrtime","bigint","srcPage","replace","multiZoneDraftMode","__NEXT_MULTI_ZONE_DRAFT_MODE","prepareResult","prepare","statusCode","end","waitUntil","Promise","resolve","buildId","deploymentId","params","nextConfig","parsedUrl","isDraftMode","prerenderManifest","routerServerContext","isOnDemandRevalidate","revalidateOnlyGenerated","resolvedPathname","clientReferenceManifest","serverActionsManifest","previewProps","normalizedSrcPage","isPrerendered","Boolean","routes","cacheOwner","isIsr","dynamicRoutes","render404","prerenderInfo","fallback","adapterPath","cacheKey","method","tracer","activeSpan","getActiveScopeSpan","isWrappedByNextServer","isMinimalMode","incrementalCache","getIncrementalCache","resetRequestCache","globalThis","__incrementalCache","context","renderOpts","experimental","authInterrupts","useCacheTimeout","durableUseCacheEntries","cacheComponents","validationLevel","instantInsights","hmrRefreshHash","cacheLifeProfiles","cacheLife","staticPageGenerationTimeout","onClose","cb","on","onAfterTaskError","undefined","sharedContext","nodeNextReq","nodeNextRes","nextReq","fromNodeNextRequest","responseGenerator","previousCacheEntry","setHeader","response","handle","prerender","fetchMetrics","pendingWaitUntil","cacheTags","collectedTags","blob","headers","type","revalidate","collectedRevalidate","expire","collectedExpire","expireTime","cacheEntry","value","status","body","Buffer","from","arrayBuffer","cacheControl","err","isStale","silenceLog","onRequestError","routerKind","routePath","routeType","revalidateReason","isStaticGeneration","handleResponse","currentSpan","parentSpan","routeKind","isFallback","isRoutePPREnabled","error","Error","isMiss","delete","getHeader","get","set","Response","headersSent","recordException","setStatus","code","ERROR","message","setAttribute","name","writableEnded","destroyed","setAttributes","toString","rootSpanAttributes","getRootSpanAttributes","handleRequest","console","warn","route","updateName","withPropagatedContext","trace","spanName","SERVER","attributes","url","span"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 913, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/client/components/app-router-headers.ts"],"sourcesContent":["export const RSC_HEADER = 'rsc' as const\nexport const ACTION_HEADER = 'next-action' as const\n// TODO: Instead of sending the full router state, we only need to send the\n// segment path. Saves bytes. Then we could also use this field for segment\n// prefetches, which also need to specify a particular segment.\nexport const NEXT_ROUTER_STATE_TREE_HEADER = 'next-router-state-tree' as const\nexport const NEXT_ROUTER_PREFETCH_HEADER = 'next-router-prefetch' as const\n// This contains the path to the segment being prefetched.\n// TODO: If we change next-router-state-tree to be a segment path, we can use\n// that instead. Then next-router-prefetch and next-router-segment-prefetch can\n// be merged into a single enum.\nexport const NEXT_ROUTER_SEGMENT_PREFETCH_HEADER =\n 'next-router-segment-prefetch' as const\nexport const NEXT_HMR_REFRESH_HEADER = 'next-hmr-refresh' as const\nexport const NEXT_URL = 'next-url' as const\nexport const RSC_CONTENT_TYPE_HEADER = 'text/x-component' as const\n\n// Cookie for the Instant Navigation Testing API. Sent automatically with all\n// requests while a navigation lock is held; the server uses its presence to\n// render only the shell. Not exposed in production builds by default.\nexport const NEXT_INSTANT_TEST_COOKIE =\n 'next-instant-navigation-testing' as const\n\nexport const FLIGHT_HEADERS = [\n RSC_HEADER,\n NEXT_ROUTER_STATE_TREE_HEADER,\n NEXT_ROUTER_PREFETCH_HEADER,\n NEXT_HMR_REFRESH_HEADER,\n NEXT_ROUTER_SEGMENT_PREFETCH_HEADER,\n] as const\n\nexport const NEXT_RSC_UNION_QUERY = '_rsc' as const\n\nexport const NEXT_ROUTER_STALE_TIME_HEADER = 'x-nextjs-stale-time' as const\nexport const NEXT_DID_POSTPONE_HEADER = 'x-nextjs-postponed' as const\nexport const NEXT_REWRITTEN_PATH_HEADER = 'x-nextjs-rewritten-path' as const\nexport const NEXT_REWRITTEN_QUERY_HEADER = 'x-nextjs-rewritten-query' as const\nexport const NEXT_IS_PRERENDER_HEADER = 'x-nextjs-prerender' as const\nexport const NEXT_ACTION_NOT_FOUND_HEADER = 'x-nextjs-action-not-found' as const\nexport const NEXT_REQUEST_ID_HEADER = 'x-nextjs-request-id' as const\nexport const NEXT_HTML_REQUEST_ID_HEADER = 'x-nextjs-html-request-id' as const\n\n// TODO: Should this include nextjs in the name, like the others?\nexport const NEXT_ACTION_REVALIDATED_HEADER = 'x-action-revalidated' as const\n"],"names":["RSC_HEADER","ACTION_HEADER","NEXT_ROUTER_STATE_TREE_HEADER","NEXT_ROUTER_PREFETCH_HEADER","NEXT_ROUTER_SEGMENT_PREFETCH_HEADER","NEXT_HMR_REFRESH_HEADER","NEXT_URL","RSC_CONTENT_TYPE_HEADER","NEXT_INSTANT_TEST_COOKIE","FLIGHT_HEADERS","NEXT_RSC_UNION_QUERY","NEXT_ROUTER_STALE_TIME_HEADER","NEXT_DID_POSTPONE_HEADER","NEXT_REWRITTEN_PATH_HEADER","NEXT_REWRITTEN_QUERY_HEADER","NEXT_IS_PRERENDER_HEADER","NEXT_ACTION_NOT_FOUND_HEADER","NEXT_REQUEST_ID_HEADER","NEXT_HTML_REQUEST_ID_HEADER","NEXT_ACTION_REVALIDATED_HEADER"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,MAAMA,aAAa,MAAc;AACjC,MAAMC,gBAAgB,cAAsB;AAI5C,MAAMC,gCAAgC,yBAAiC;AACvE,MAAMC,8BAA8B,uBAA+B;AAKnE,MAAMC,sCACX,+BAAuC;AAClC,MAAMC,0BAA0B,mBAA2B;AAC3D,MAAMC,WAAW,WAAmB;AACpC,MAAMC,0BAA0B,mBAA2B;AAK3D,MAAMC,2BACX,kCAA0C;AAErC,MAAMC,iBAAiB;IAC5BT;IACAE;IACAC;IACAE;IACAD;CACD,CAAS;AAEH,MAAMM,uBAAuB,OAAe;AAE5C,MAAMC,gCAAgC,sBAA8B;AACpE,MAAMC,2BAA2B,qBAA6B;AAC9D,MAAMC,6BAA6B,0BAAkC;AACrE,MAAMC,8BAA8B,2BAAmC;AACvE,MAAMC,2BAA2B,qBAA6B;AAC9D,MAAMC,+BAA+B,4BAAoC;AACzE,MAAMC,yBAAyB,sBAA8B;AAC7D,MAAMC,8BAA8B,2BAAmC;AAGvE,MAAMC,iCAAiC,uBAA+B","ignoreList":[0]}}, + {"offset": {"line": 985, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/client/components/hooks-server-context.ts"],"sourcesContent":["const DYNAMIC_ERROR_CODE = 'DYNAMIC_SERVER_USAGE'\n\nexport class DynamicServerError extends Error {\n digest: typeof DYNAMIC_ERROR_CODE = DYNAMIC_ERROR_CODE\n\n constructor(public readonly description: string) {\n super(`Dynamic server usage: ${description}`)\n }\n}\n\nexport function isDynamicServerError(err: unknown): err is DynamicServerError {\n if (\n typeof err !== 'object' ||\n err === null ||\n !('digest' in err) ||\n typeof err.digest !== 'string'\n ) {\n return false\n }\n\n return err.digest === DYNAMIC_ERROR_CODE\n}\n"],"names":["DYNAMIC_ERROR_CODE","DynamicServerError","Error","constructor","description","digest","isDynamicServerError","err"],"mappings":";;;;;;AAAA,MAAMA,qBAAqB;AAEpB,MAAMC,2BAA2BC;IAGtCC,YAA4BC,WAAmB,CAAE;QAC/C,KAAK,CAAC,CAAC,sBAAsB,EAAEA,aAAa,GAAA,IAAA,CADlBA,WAAAA,GAAAA,aAAAA,IAAAA,CAF5BC,MAAAA,GAAoCL;IAIpC;AACF;AAEO,SAASM,qBAAqBC,GAAY;IAC/C,IACE,OAAOA,QAAQ,YACfA,QAAQ,QACR,CAAE,CAAA,YAAYA,GAAE,KAChB,OAAOA,IAAIF,MAAM,KAAK,UACtB;QACA,OAAO;IACT;IAEA,OAAOE,IAAIF,MAAM,KAAKL;AACxB","ignoreList":[0]}}, + {"offset": {"line": 1007, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/client/components/redirect-status-code.ts"],"sourcesContent":["export enum RedirectStatusCode {\n SeeOther = 303,\n TemporaryRedirect = 307,\n PermanentRedirect = 308,\n}\n"],"names":["RedirectStatusCode"],"mappings":";;;;AAAO,IAAKA,qBAAAA,WAAAA,GAAAA,SAAAA,kBAAAA;;;;WAAAA;MAIX","ignoreList":[0]}}, + {"offset": {"line": 1021, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/client/components/static-generation-bailout.ts"],"sourcesContent":["const NEXT_STATIC_GEN_BAILOUT = 'NEXT_STATIC_GEN_BAILOUT'\n\nexport class StaticGenBailoutError extends Error {\n public readonly code = NEXT_STATIC_GEN_BAILOUT\n}\n\nexport function isStaticGenBailoutError(\n error: unknown\n): error is StaticGenBailoutError {\n if (typeof error !== 'object' || error === null || !('code' in error)) {\n return false\n }\n\n return error.code === NEXT_STATIC_GEN_BAILOUT\n}\n"],"names":["NEXT_STATIC_GEN_BAILOUT","StaticGenBailoutError","Error","code","isStaticGenBailoutError","error"],"mappings":";;;;;;AAAA,MAAMA,0BAA0B;AAEzB,MAAMC,8BAA8BC;;QAApC,KAAA,IAAA,OAAA,IAAA,CACWC,IAAAA,GAAOH;;AACzB;AAEO,SAASI,wBACdC,KAAc;IAEd,IAAI,OAAOA,UAAU,YAAYA,UAAU,QAAQ,CAAE,CAAA,UAAUA,KAAI,GAAI;QACrE,OAAO;IACT;IAEA,OAAOA,MAAMF,IAAI,KAAKH;AACxB","ignoreList":[0]}}, + {"offset": {"line": 1043, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/lib/batcher.ts"],"sourcesContent":["import type { SchedulerFn } from './scheduler'\n\nimport { createPromiseWithResolvers } from '../shared/lib/promise-with-resolvers'\n\ntype CacheKeyFn = (\n key: K\n) => PromiseLike | C\n\ntype BatcherOptions = {\n cacheKeyFn?: CacheKeyFn\n schedulerFn?: SchedulerFn\n}\n\ntype WorkFnContext = {\n resolve: (value: V | PromiseLike) => void\n key: K\n}\n\ntype WorkFn = (context: WorkFnContext) => Promise\n\n/**\n * A wrapper for a function that will only allow one call to the function to\n * execute at a time.\n */\nexport class Batcher {\n private readonly pending = new Map>()\n\n protected constructor(\n private readonly cacheKeyFn?: CacheKeyFn,\n /**\n * A function that will be called to schedule the wrapped function to be\n * executed. This defaults to a function that will execute the function\n * immediately.\n */\n private readonly schedulerFn: SchedulerFn = (fn) => fn()\n ) {}\n\n /**\n * Creates a new instance of PendingWrapper. If the key extends a string or\n * number, the key will be used as the cache key. If the key is an object, a\n * cache key function must be provided.\n */\n public static create(\n options?: BatcherOptions\n ): Batcher\n public static create(\n options: BatcherOptions &\n Required, 'cacheKeyFn'>>\n ): Batcher\n public static create(\n options?: BatcherOptions\n ): Batcher {\n return new Batcher(options?.cacheKeyFn, options?.schedulerFn)\n }\n\n /**\n * Wraps a function in a promise that will be resolved or rejected only once\n * for a given key. This will allow multiple calls to the function to be\n * made, but only one will be executed at a time. The result of the first\n * call will be returned to all callers.\n *\n * @param key the key to use for the cache\n * @param fn the function to wrap\n * @returns a promise that resolves to the result of the function\n */\n public async batch(key: K, fn: WorkFn): Promise {\n const cacheKey = (this.cacheKeyFn ? await this.cacheKeyFn(key) : key) as C\n if (cacheKey === null) {\n return fn({ resolve: (value) => Promise.resolve(value), key })\n }\n\n const pending = this.pending.get(cacheKey)\n if (pending) return pending\n\n const { promise, resolve, reject } = createPromiseWithResolvers()\n this.pending.set(cacheKey, promise)\n\n this.schedulerFn(async () => {\n try {\n const result = await fn({ resolve, key })\n\n // Resolving a promise multiple times is a no-op, so we can safely\n // resolve all pending promises with the same result.\n resolve(result)\n } catch (err) {\n reject(err)\n } finally {\n this.pending.delete(cacheKey)\n }\n })\n\n return promise\n }\n}\n"],"names":["createPromiseWithResolvers","Batcher","cacheKeyFn","schedulerFn","fn","pending","Map","create","options","batch","key","cacheKey","resolve","value","Promise","get","promise","reject","set","result","err","delete"],"mappings":";;;;AAEA,SAASA,0BAA0B,QAAQ,uCAAsC;;AAsB1E,MAAMC;IAGX,YACmBC,UAA6B,EAC9C;;;;KAIC,GACgBC,cAAiC,CAACC,KAAOA,IAAI,CAC9D;aAPiBF,UAAAA,GAAAA;aAMAC,WAAAA,GAAAA;aATFE,OAAAA,GAAU,IAAIC;IAU5B;IAcH,OAAcC,OACZC,OAA8B,EACZ;QAClB,OAAO,IAAIP,QAAiBO,WAAAA,OAAAA,KAAAA,IAAAA,QAASN,UAAU,EAAEM,WAAAA,OAAAA,KAAAA,IAAAA,QAASL,WAAW;IACvE;IAEA;;;;;;;;;GASC,GACD,MAAaM,MAAMC,GAAM,EAAEN,EAAgB,EAAc;QACvD,MAAMO,WAAY,IAAI,CAACT,UAAU,GAAG,MAAM,IAAI,CAACA,UAAU,CAACQ,OAAOA;QACjE,IAAIC,aAAa,MAAM;YACrB,OAAOP,GAAG;gBAAEQ,SAAS,CAACC,QAAUC,QAAQF,OAAO,CAACC;gBAAQH;YAAI;QAC9D;QAEA,MAAML,UAAU,IAAI,CAACA,OAAO,CAACU,GAAG,CAACJ;QACjC,IAAIN,SAAS,OAAOA;QAEpB,MAAM,EAAEW,OAAO,EAAEJ,OAAO,EAAEK,MAAM,EAAE,OAAGjB,oNAAAA;QACrC,IAAI,CAACK,OAAO,CAACa,GAAG,CAACP,UAAUK;QAE3B,IAAI,CAACb,WAAW,CAAC;YACf,IAAI;gBACF,MAAMgB,SAAS,MAAMf,GAAG;oBAAEQ;oBAASF;gBAAI;gBAEvC,kEAAkE;gBAClE,qDAAqD;gBACrDE,QAAQO;YACV,EAAE,OAAOC,KAAK;gBACZH,OAAOG;YACT,SAAU;gBACR,IAAI,CAACf,OAAO,CAACgB,MAAM,CAACV;YACtB;QACF;QAEA,OAAOK;IACT;AACF","ignoreList":[0]}}, + {"offset": {"line": 1105, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/lib/constants.ts"],"sourcesContent":["import type { ServerRuntime } from '../types'\n\nexport const TEXT_PLAIN_CONTENT_TYPE_HEADER = 'text/plain'\nexport const HTML_CONTENT_TYPE_HEADER = 'text/html; charset=utf-8'\nexport const JSON_CONTENT_TYPE_HEADER = 'application/json; charset=utf-8'\nexport const NEXT_QUERY_PARAM_PREFIX = 'nxtP'\nexport const NEXT_INTERCEPTION_MARKER_PREFIX = 'nxtI'\n\nexport const MATCHED_PATH_HEADER = 'x-matched-path'\nexport const PRERENDER_REVALIDATE_HEADER = 'x-prerender-revalidate'\nexport const PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER =\n 'x-prerender-revalidate-if-generated'\n\nexport const RSC_SEGMENTS_DIR_SUFFIX = '.segments'\nexport const RSC_SEGMENT_SUFFIX = '.segment.rsc'\nexport const RSC_SUFFIX = '.rsc'\nexport const ACTION_SUFFIX = '.action'\nexport const NEXT_DATA_SUFFIX = '.json'\nexport const NEXT_META_SUFFIX = '.meta'\nexport const NEXT_BODY_SUFFIX = '.body'\n\nexport const NEXT_NAV_DEPLOYMENT_ID_HEADER = 'x-nextjs-deployment-id'\n\nexport const NEXT_CACHE_TAGS_HEADER = 'x-next-cache-tags'\nexport const NEXT_CACHE_REVALIDATED_TAGS_HEADER = 'x-next-revalidated-tags'\nexport const NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER =\n 'x-next-revalidate-tag-token'\n\nexport const NEXT_RESUME_HEADER = 'next-resume'\nexport const NEXT_RESUME_STATE_LENGTH_HEADER = 'x-next-resume-state-length'\n\n// if these change make sure we update the related\n// documentation as well\nexport const NEXT_CACHE_TAG_MAX_ITEMS = 128\nexport const NEXT_CACHE_TAG_MAX_LENGTH = 256\nexport const NEXT_CACHE_SOFT_TAG_MAX_LENGTH = 1024\nexport const NEXT_CACHE_IMPLICIT_TAG_ID = '_N_T_'\nexport const NEXT_CACHE_ROOT_PARAM_TAG_ID = '_N_RP_'\n\n// in seconds\nexport const CACHE_ONE_YEAR_SECONDS = 31536000\n\n// in seconds, represents revalidate=false. I.e. never revaliate.\n// We use this value since it can be represented as a V8 SMI for optimal performance.\n// It can also be serialized as JSON if it ever leaks accidentally as an actual value.\nexport const INFINITE_CACHE = 0xfffffffe\n\n// Patterns to detect middleware files\nexport const MIDDLEWARE_FILENAME = 'middleware'\nexport const MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}`\n\n// Patterns to detect proxy files (replacement for middleware)\nexport const PROXY_FILENAME = 'proxy'\nexport const PROXY_LOCATION_REGEXP = `(?:src/)?${PROXY_FILENAME}`\n\n// Pattern to detect instrumentation hooks file\nexport const INSTRUMENTATION_HOOK_FILENAME = 'instrumentation'\n\n// Because on Windows absolute paths in the generated code can break because of numbers, eg 1 in the path,\n// we have to use a private alias\nexport const PAGES_DIR_ALIAS = 'private-next-pages'\nexport const DOT_NEXT_ALIAS = 'private-dot-next'\nexport const ROOT_DIR_ALIAS = 'private-next-root-dir'\nexport const APP_DIR_ALIAS = 'private-next-app-dir'\nexport const RSC_MOD_REF_PROXY_ALIAS = 'private-next-rsc-mod-ref-proxy'\nexport const RSC_ACTION_VALIDATE_ALIAS = 'private-next-rsc-action-validate'\nexport const RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-server-reference'\nexport const RSC_CACHE_WRAPPER_ALIAS = 'private-next-rsc-cache-wrapper'\nexport const RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS =\n 'private-next-rsc-track-dynamic-import'\nexport const RSC_ACTION_ENCRYPTION_ALIAS = 'private-next-rsc-action-encryption'\nexport const RSC_ACTION_CLIENT_WRAPPER_ALIAS =\n 'private-next-rsc-action-client-wrapper'\n\nexport const PUBLIC_DIR_MIDDLEWARE_CONFLICT = `You can not have a '_next' folder inside of your public folder. This conflicts with the internal '/_next' route. https://nextjs.org/docs/messages/public-next-folder-conflict`\n\nexport const SSG_GET_INITIAL_PROPS_CONFLICT = `You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps`\n\nexport const SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.`\n\nexport const SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps`\n\nexport const STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR = `can not have getInitialProps/getServerSideProps, https://nextjs.org/docs/messages/404-get-initial-props`\n\nexport const SERVER_PROPS_EXPORT_ERROR = `pages with \\`getServerSideProps\\` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export`\n\nexport const GSP_NO_RETURNED_VALUE =\n 'Your `getStaticProps` function did not return an object. Did you forget to add a `return`?'\nexport const GSSP_NO_RETURNED_VALUE =\n 'Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?'\n\nexport const UNSTABLE_REVALIDATE_RENAME_ERROR =\n 'The `unstable_revalidate` property is available for general use.\\n' +\n 'Please use `revalidate` instead.'\n\nexport const GSSP_COMPONENT_MEMBER_ERROR = `can not be attached to a page's component and must be exported from the page. See more info here: https://nextjs.org/docs/messages/gssp-component-member`\n\nexport const NON_STANDARD_NODE_ENV = `You are using a non-standard \"NODE_ENV\" value in your environment. This creates inconsistencies in the project and is strongly advised against. Read more: https://nextjs.org/docs/messages/non-standard-node-env`\n\nexport const SSG_FALLBACK_EXPORT_ERROR = `Pages with \\`fallback\\` enabled in \\`getStaticPaths\\` can not be exported. See more info here: https://nextjs.org/docs/messages/ssg-fallback-true-export`\n\nexport const ESLINT_DEFAULT_DIRS = ['app', 'pages', 'components', 'lib', 'src']\n\nexport const SERVER_RUNTIME: Record = {\n edge: 'edge',\n experimentalEdge: 'experimental-edge',\n nodejs: 'nodejs',\n}\n\nexport const WEB_SOCKET_MAX_RECONNECTIONS = 12\n\n/**\n * The names of the webpack layers. These layers are the primitives for the\n * webpack chunks.\n */\nconst WEBPACK_LAYERS_NAMES = {\n /**\n * The layer for the shared code between the client and server bundles.\n */\n shared: 'shared',\n /**\n * The layer for server-only runtime and picking up `react-server` export conditions.\n * Including app router RSC pages and app router custom routes and metadata routes.\n */\n reactServerComponents: 'rsc',\n /**\n * Server Side Rendering layer for app (ssr).\n */\n serverSideRendering: 'ssr',\n /**\n * The browser client bundle layer for actions.\n */\n actionBrowser: 'action-browser',\n /**\n * The Node.js bundle layer for the API routes.\n */\n apiNode: 'api-node',\n /**\n * The Edge Lite bundle layer for the API routes.\n */\n apiEdge: 'api-edge',\n /**\n * The layer for the middleware code.\n */\n middleware: 'middleware',\n /**\n * The layer for the instrumentation hooks.\n */\n instrument: 'instrument',\n /**\n * The layer for assets on the edge.\n */\n edgeAsset: 'edge-asset',\n /**\n * The browser client bundle layer for App directory.\n */\n appPagesBrowser: 'app-pages-browser',\n /**\n * The browser client bundle layer for Pages directory.\n */\n pagesDirBrowser: 'pages-dir-browser',\n /**\n * The Edge Lite bundle layer for Pages directory.\n */\n pagesDirEdge: 'pages-dir-edge',\n /**\n * The Node.js bundle layer for Pages directory.\n */\n pagesDirNode: 'pages-dir-node',\n} as const\n\nexport type WebpackLayerName =\n (typeof WEBPACK_LAYERS_NAMES)[keyof typeof WEBPACK_LAYERS_NAMES]\n\nconst WEBPACK_LAYERS = {\n ...WEBPACK_LAYERS_NAMES,\n GROUP: {\n builtinReact: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n ],\n serverOnly: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware,\n ],\n neutralTarget: [\n // pages api\n WEBPACK_LAYERS_NAMES.apiNode,\n WEBPACK_LAYERS_NAMES.apiEdge,\n ],\n clientOnly: [\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n ],\n bundled: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.shared,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware,\n ],\n appPages: [\n // app router pages and layouts\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n ],\n },\n}\n\nconst WEBPACK_RESOURCE_QUERIES = {\n edgeSSREntry: '__next_edge_ssr_entry__',\n metadata: '__next_metadata__',\n metadataRoute: '__next_metadata_route__',\n metadataImageMeta: '__next_metadata_image_meta__',\n}\n\nexport { WEBPACK_LAYERS, WEBPACK_RESOURCE_QUERIES }\n"],"names":["TEXT_PLAIN_CONTENT_TYPE_HEADER","HTML_CONTENT_TYPE_HEADER","JSON_CONTENT_TYPE_HEADER","NEXT_QUERY_PARAM_PREFIX","NEXT_INTERCEPTION_MARKER_PREFIX","MATCHED_PATH_HEADER","PRERENDER_REVALIDATE_HEADER","PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER","RSC_SEGMENTS_DIR_SUFFIX","RSC_SEGMENT_SUFFIX","RSC_SUFFIX","ACTION_SUFFIX","NEXT_DATA_SUFFIX","NEXT_META_SUFFIX","NEXT_BODY_SUFFIX","NEXT_NAV_DEPLOYMENT_ID_HEADER","NEXT_CACHE_TAGS_HEADER","NEXT_CACHE_REVALIDATED_TAGS_HEADER","NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER","NEXT_RESUME_HEADER","NEXT_RESUME_STATE_LENGTH_HEADER","NEXT_CACHE_TAG_MAX_ITEMS","NEXT_CACHE_TAG_MAX_LENGTH","NEXT_CACHE_SOFT_TAG_MAX_LENGTH","NEXT_CACHE_IMPLICIT_TAG_ID","NEXT_CACHE_ROOT_PARAM_TAG_ID","CACHE_ONE_YEAR_SECONDS","INFINITE_CACHE","MIDDLEWARE_FILENAME","MIDDLEWARE_LOCATION_REGEXP","PROXY_FILENAME","PROXY_LOCATION_REGEXP","INSTRUMENTATION_HOOK_FILENAME","PAGES_DIR_ALIAS","DOT_NEXT_ALIAS","ROOT_DIR_ALIAS","APP_DIR_ALIAS","RSC_MOD_REF_PROXY_ALIAS","RSC_ACTION_VALIDATE_ALIAS","RSC_ACTION_PROXY_ALIAS","RSC_CACHE_WRAPPER_ALIAS","RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS","RSC_ACTION_ENCRYPTION_ALIAS","RSC_ACTION_CLIENT_WRAPPER_ALIAS","PUBLIC_DIR_MIDDLEWARE_CONFLICT","SSG_GET_INITIAL_PROPS_CONFLICT","SERVER_PROPS_GET_INIT_PROPS_CONFLICT","SERVER_PROPS_SSG_CONFLICT","STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR","SERVER_PROPS_EXPORT_ERROR","GSP_NO_RETURNED_VALUE","GSSP_NO_RETURNED_VALUE","UNSTABLE_REVALIDATE_RENAME_ERROR","GSSP_COMPONENT_MEMBER_ERROR","NON_STANDARD_NODE_ENV","SSG_FALLBACK_EXPORT_ERROR","ESLINT_DEFAULT_DIRS","SERVER_RUNTIME","edge","experimentalEdge","nodejs","WEB_SOCKET_MAX_RECONNECTIONS","WEBPACK_LAYERS_NAMES","shared","reactServerComponents","serverSideRendering","actionBrowser","apiNode","apiEdge","middleware","instrument","edgeAsset","appPagesBrowser","pagesDirBrowser","pagesDirEdge","pagesDirNode","WEBPACK_LAYERS","GROUP","builtinReact","serverOnly","neutralTarget","clientOnly","bundled","appPages","WEBPACK_RESOURCE_QUERIES","edgeSSREntry","metadata","metadataRoute","metadataImageMeta"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 1394, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/lib/framework/boundary-constants.tsx"],"sourcesContent":["export const METADATA_BOUNDARY_NAME = '__next_metadata_boundary__'\nexport const VIEWPORT_BOUNDARY_NAME = '__next_viewport_boundary__'\nexport const OUTLET_BOUNDARY_NAME = '__next_outlet_boundary__'\nexport const ROOT_LAYOUT_BOUNDARY_NAME = '__next_root_layout_boundary__'\n"],"names":["METADATA_BOUNDARY_NAME","VIEWPORT_BOUNDARY_NAME","OUTLET_BOUNDARY_NAME","ROOT_LAYOUT_BOUNDARY_NAME"],"mappings":";;;;;;;;;;AAAO,MAAMA,yBAAyB,6BAA4B;AAC3D,MAAMC,yBAAyB,6BAA4B;AAC3D,MAAMC,uBAAuB,2BAA0B;AACvD,MAAMC,4BAA4B,gCAA+B","ignoreList":[0]}}, + {"offset": {"line": 1412, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/lib/picocolors.ts"],"sourcesContent":["// ISC License\n\n// Copyright (c) 2021 Alexey Raspopov, Kostiantyn Denysov, Anton Verinov\n\n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n//\n// https://github.com/alexeyraspopov/picocolors/blob/b6261487e7b81aaab2440e397a356732cad9e342/picocolors.js#L1\n\nconst { env, stdout } = globalThis?.process ?? {}\n\nconst enabled =\n env &&\n !env.NO_COLOR &&\n (env.FORCE_COLOR || (stdout?.isTTY && !env.CI && env.TERM !== 'dumb'))\n\nexport const isColorSupported = Boolean(enabled)\n\n// Whether stdout ends up on a terminal: directly, or through the CLI, which\n// pipes a child's output while the upgrade menu is open.\nexport const stdoutIsTerminal =\n Boolean(stdout?.isTTY) || env.NEXT_PRIVATE_PROMPT_OUTPUT === '1'\n\nconst replaceClose = (\n str: string,\n close: string,\n replace: string,\n index: number\n): string => {\n const start = str.substring(0, index) + replace\n const end = str.substring(index + close.length)\n const nextIndex = end.indexOf(close)\n return ~nextIndex\n ? start + replaceClose(end, close, replace, nextIndex)\n : start + end\n}\n\nconst formatter = (open: string, close: string, replace = open) => {\n if (!enabled) return String\n return (input: string) => {\n const string = '' + input\n const index = string.indexOf(close, open.length)\n return ~index\n ? open + replaceClose(string, close, replace, index) + close\n : open + string + close\n }\n}\n\nexport const reset = enabled ? (s: string) => `\\x1b[0m${s}\\x1b[0m` : String\nexport const bold = formatter('\\x1b[1m', '\\x1b[22m', '\\x1b[22m\\x1b[1m')\nexport const dim = formatter('\\x1b[2m', '\\x1b[22m', '\\x1b[22m\\x1b[2m')\nexport const italic = formatter('\\x1b[3m', '\\x1b[23m')\nexport const underline = formatter('\\x1b[4m', '\\x1b[24m')\nexport const inverse = formatter('\\x1b[7m', '\\x1b[27m')\nexport const hidden = formatter('\\x1b[8m', '\\x1b[28m')\nexport const strikethrough = formatter('\\x1b[9m', '\\x1b[29m')\nexport const black = formatter('\\x1b[30m', '\\x1b[39m')\nexport const red = formatter('\\x1b[31m', '\\x1b[39m')\nexport const green = formatter('\\x1b[32m', '\\x1b[39m')\nexport const yellow = formatter('\\x1b[33m', '\\x1b[39m')\nexport const blue = formatter('\\x1b[34m', '\\x1b[39m')\nexport const magenta = formatter('\\x1b[35m', '\\x1b[39m')\nexport const purple = formatter('\\x1b[38;2;173;127;168m', '\\x1b[39m')\nexport const cyan = formatter('\\x1b[36m', '\\x1b[39m')\nexport const white = formatter('\\x1b[37m', '\\x1b[39m')\nexport const gray = formatter('\\x1b[90m', '\\x1b[39m')\nexport const bgBlack = formatter('\\x1b[40m', '\\x1b[49m')\nexport const bgRed = formatter('\\x1b[41m', '\\x1b[49m')\nexport const bgGreen = formatter('\\x1b[42m', '\\x1b[49m')\nexport const bgYellow = formatter('\\x1b[43m', '\\x1b[49m')\nexport const bgBlue = formatter('\\x1b[44m', '\\x1b[49m')\nexport const bgMagenta = formatter('\\x1b[45m', '\\x1b[49m')\nexport const bgCyan = formatter('\\x1b[46m', '\\x1b[49m')\nexport const bgWhite = formatter('\\x1b[47m', '\\x1b[49m')\n"],"names":["globalThis","env","stdout","process","enabled","NO_COLOR","FORCE_COLOR","isTTY","CI","TERM","isColorSupported","Boolean","stdoutIsTerminal","NEXT_PRIVATE_PROMPT_OUTPUT","replaceClose","str","close","replace","index","start","substring","end","length","nextIndex","indexOf","formatter","open","String","input","string","reset","s","bold","dim","italic","underline","inverse","hidden","strikethrough","black","red","green","yellow","blue","magenta","purple","cyan","white","gray","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 1533, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/lib/scheduler.ts"],"sourcesContent":["export type ScheduledFn = () => T | PromiseLike\nexport type SchedulerFn = (cb: ScheduledFn) => void\n\n/**\n * Schedules a function to be called on the next tick after the other promises\n * have been resolved.\n *\n * @param cb the function to schedule\n */\nexport const scheduleOnNextTick = (cb: ScheduledFn) => {\n // We use Promise.resolve().then() here so that the operation is scheduled at\n // the end of the promise job queue, we then add it to the next process tick\n // to ensure it's evaluated afterwards.\n //\n // This was inspired by the implementation of the DataLoader interface: https://github.com/graphql/dataloader/blob/d336bd15282664e0be4b4a657cb796f09bafbc6b/src/index.js#L213-L255\n //\n Promise.resolve().then(() => {\n if (process.env.NEXT_RUNTIME === 'edge') {\n setTimeout(cb, 0)\n } else {\n process.nextTick(cb)\n }\n })\n}\n\n/**\n * Schedules a function to be called using `setImmediate` or `setTimeout` if\n * `setImmediate` is not available (like in the Edge runtime).\n *\n * @param cb the function to schedule\n */\nexport const scheduleImmediate = (cb: ScheduledFn): void => {\n if (process.env.NEXT_RUNTIME === 'edge') {\n setTimeout(cb, 0)\n } else {\n setImmediate(cb)\n }\n}\n\n/**\n * returns a promise than resolves in a future task. There is no guarantee that the task it resolves in\n * will be the next task but if you await it you can at least be sure that the current task is over and\n * most usefully that the entire microtask queue of the current task has been emptied.\n */\nexport function atLeastOneTask() {\n return new Promise((resolve) => scheduleImmediate(resolve))\n}\n\n/**\n * This utility function is extracted to make it easier to find places where we are doing\n * specific timing tricks to try to schedule work after React has rendered. This is especially\n * important at the moment because Next.js uses the edge builds of React which use setTimeout to\n * schedule work when you might expect that something like setImmediate would do the trick.\n *\n * Long term we should switch to the node versions of React rendering when possible and then\n * update this to use setImmediate rather than setTimeout\n */\nexport function waitAtLeastOneReactRenderTask(): Promise {\n if (process.env.NEXT_RUNTIME === 'edge') {\n return new Promise((r) => setTimeout(r, 0))\n } else {\n return new Promise((r) => setImmediate(r))\n }\n}\n"],"names":["scheduleOnNextTick","cb","Promise","resolve","then","process","env","NEXT_RUNTIME","setTimeout","nextTick","scheduleImmediate","setImmediate","atLeastOneTask","waitAtLeastOneReactRenderTask","r"],"mappings":"AAGA;;;;;CAKC,GACD;;;;;;;;;;AAAO,MAAMA,qBAAqB,CAACC;IACjC,6EAA6E;IAC7E,4EAA4E;IAC5E,uCAAuC;IACvC,EAAE;IACF,kLAAkL;IAClL,EAAE;IACFC,QAAQC,OAAO,GAAGC,IAAI,CAAC;QACrB,IAAIC,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;aAElC;YACLF,QAAQI,QAAQ,CAACR;QACnB;IACF;AACF,EAAC;AAQM,MAAMS,oBAAoB,CAACT;IAChC,IAAII,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;SAElC;QACLI,aAAaV;IACf;AACF,EAAC;AAOM,SAASW;IACd,OAAO,IAAIV,QAAc,CAACC,UAAYO,kBAAkBP;AAC1D;AAWO,SAASU;IACd,IAAIR,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;SAElC;QACL,OAAO,IAAIL,QAAQ,CAACY,IAAMH,aAAaG;IACzC;AACF","ignoreList":[0]}}, + {"offset": {"line": 1584, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/api-utils/get-cookie-parser.ts"],"sourcesContent":["import type { NextApiRequestCookies } from '.'\n\n/**\n * Parse cookies from the `headers` of request\n * @param req request object\n */\n\nexport function getCookieParser(headers: {\n [key: string]: string | string[] | null | undefined\n}): () => NextApiRequestCookies {\n return function parseCookie(): NextApiRequestCookies {\n const { cookie } = headers\n\n if (!cookie) {\n return {}\n }\n\n const { parse: parseCookieFn } =\n require('next/dist/compiled/cookie') as typeof import('next/dist/compiled/cookie')\n return parseCookieFn(Array.isArray(cookie) ? cookie.join('; ') : cookie)\n }\n}\n"],"names":["getCookieParser","headers","parseCookie","cookie","parse","parseCookieFn","require","Array","isArray","join"],"mappings":"AAEA;;;CAGC,GAED;;;;AAAO,SAASA,gBAAgBC,OAE/B;IACC,OAAO,SAASC;QACd,MAAM,EAAEC,MAAM,EAAE,GAAGF;QAEnB,IAAI,CAACE,QAAQ;YACX,OAAO,CAAC;QACV;QAEA,MAAM,EAAEC,OAAOC,aAAa,EAAE,GAC5BC,QAAQ;QACV,OAAOD,cAAcE,MAAMC,OAAO,CAACL,UAAUA,OAAOM,IAAI,CAAC,QAAQN;IACnE;AACF","ignoreList":[0]}}, + {"offset": {"line": 1605, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/api-utils/index.ts"],"sourcesContent":["import type { IncomingHttpHeaders, IncomingMessage } from 'http'\nimport type { CookieSerializeOptions } from 'next/dist/compiled/cookie'\nimport type { NextApiResponse } from '../../shared/lib/utils'\n\nimport { HeadersAdapter } from '../web/spec-extension/adapters/headers'\nimport {\n PRERENDER_REVALIDATE_HEADER,\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER,\n} from '../../lib/constants'\nimport { getTracer } from '../lib/trace/tracer'\nimport { NodeSpan } from '../lib/trace/constants'\n\nexport type NextApiRequestCookies = Partial<{ [key: string]: string }>\nexport type NextApiRequestQuery = Partial<{ [key: string]: string | string[] }>\n\nexport type __ApiPreviewProps = {\n previewModeId: string\n previewModeEncryptionKey: string\n previewModeSigningKey: string\n}\n\nexport function wrapApiHandler any>(\n page: string,\n handler: T\n): T {\n return ((...args) => {\n getTracer().setRootSpanAttribute('next.route', page)\n // Call API route method\n return getTracer().trace(\n NodeSpan.runHandler,\n {\n spanName: `executing api route (pages) ${page}`,\n },\n () => handler(...args)\n )\n }) as T\n}\n\n/**\n *\n * @param res response object\n * @param statusCode `HTTP` status code of response\n */\nexport function sendStatusCode(\n res: NextApiResponse,\n statusCode: number\n): NextApiResponse {\n res.statusCode = statusCode\n return res\n}\n\n/**\n *\n * @param res response object\n * @param [statusOrUrl] `HTTP` status code of redirect\n * @param url URL of redirect\n */\nexport function redirect(\n res: NextApiResponse,\n statusOrUrl: string | number,\n url?: string\n): NextApiResponse {\n if (typeof statusOrUrl === 'string') {\n url = statusOrUrl\n statusOrUrl = 307\n }\n if (typeof statusOrUrl !== 'number' || typeof url !== 'string') {\n throw new Error(\n `Invalid redirect arguments. Please use a single argument URL, e.g. res.redirect('/destination') or use a status code and URL, e.g. res.redirect(307, '/destination').`\n )\n }\n res.writeHead(statusOrUrl, { Location: url })\n res.write(url)\n res.end()\n return res\n}\n\nexport function checkIsOnDemandRevalidate(\n rawHeaders: Headers | IncomingHttpHeaders,\n previewProps: __ApiPreviewProps\n): {\n isOnDemandRevalidate: boolean\n revalidateOnlyGenerated: boolean\n} {\n // Headers is a plain object for Node.js, Headers object in Edge runtime\n if (typeof rawHeaders.get === 'function') {\n const headers = HeadersAdapter.from(rawHeaders)\n\n const previewModeId = headers.get(PRERENDER_REVALIDATE_HEADER)\n const isOnDemandRevalidate = previewModeId === previewProps.previewModeId\n\n const revalidateOnlyGenerated = headers.has(\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER\n )\n\n return { isOnDemandRevalidate, revalidateOnlyGenerated }\n }\n\n const headers = rawHeaders as IncomingHttpHeaders\n\n const previewModeId = headers[PRERENDER_REVALIDATE_HEADER]\n const isOnDemandRevalidate = previewModeId === previewProps.previewModeId\n\n const revalidateOnlyGenerated = headers.hasOwnProperty(\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER\n )\n\n return { isOnDemandRevalidate, revalidateOnlyGenerated }\n}\n\nexport const COOKIE_NAME_PRERENDER_BYPASS = `__prerender_bypass`\nexport const COOKIE_NAME_PRERENDER_DATA = `__next_preview_data`\n\nexport const RESPONSE_LIMIT_DEFAULT = 4 * 1024 * 1024\n\nexport const SYMBOL_PREVIEW_DATA = Symbol(COOKIE_NAME_PRERENDER_DATA)\nexport const SYMBOL_CLEARED_COOKIES = Symbol(COOKIE_NAME_PRERENDER_BYPASS)\n\nexport function clearPreviewData(\n res: NextApiResponse,\n options: {\n path?: string\n } = {}\n): NextApiResponse {\n if (SYMBOL_CLEARED_COOKIES in res) {\n return res\n }\n\n const { serialize } =\n require('next/dist/compiled/cookie') as typeof import('next/dist/compiled/cookie')\n const previous = res.getHeader('Set-Cookie')\n res.setHeader(`Set-Cookie`, [\n ...(typeof previous === 'string'\n ? [previous]\n : Array.isArray(previous)\n ? previous\n : []),\n serialize(COOKIE_NAME_PRERENDER_BYPASS, '', {\n // To delete a cookie, set `expires` to a date in the past:\n // https://tools.ietf.org/html/rfc6265#section-4.1.1\n // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.\n expires: new Date(0),\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n ...(options.path !== undefined\n ? ({ path: options.path } as CookieSerializeOptions)\n : undefined),\n }),\n serialize(COOKIE_NAME_PRERENDER_DATA, '', {\n // To delete a cookie, set `expires` to a date in the past:\n // https://tools.ietf.org/html/rfc6265#section-4.1.1\n // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.\n expires: new Date(0),\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n ...(options.path !== undefined\n ? ({ path: options.path } as CookieSerializeOptions)\n : undefined),\n }),\n ])\n\n Object.defineProperty(res, SYMBOL_CLEARED_COOKIES, {\n value: true,\n enumerable: false,\n })\n return res\n}\n\n/**\n * Custom error class\n */\nexport class ApiError extends Error {\n readonly statusCode: number\n\n constructor(statusCode: number, message: string) {\n super(message)\n this.statusCode = statusCode\n }\n}\n\n/**\n * Sends error in `response`\n * @param res response object\n * @param statusCode of response\n * @param message of response\n */\nexport function sendError(\n res: NextApiResponse,\n statusCode: number,\n message: string\n): void {\n res.statusCode = statusCode\n res.statusMessage = message\n res.end(message)\n}\n\ninterface LazyProps {\n req: IncomingMessage\n}\n\n/**\n * Execute getter function only if its needed\n * @param LazyProps `req` and `params` for lazyProp\n * @param prop name of property\n * @param getter function to get data\n */\nexport function setLazyProp(\n { req }: LazyProps,\n prop: string,\n getter: () => T\n): void {\n const opts = { configurable: true, enumerable: true }\n const optsReset = { ...opts, writable: true }\n\n Object.defineProperty(req, prop, {\n ...opts,\n get: () => {\n const value = getter()\n // we set the property on the object to avoid recalculating it\n Object.defineProperty(req, prop, { ...optsReset, value })\n return value\n },\n set: (value) => {\n Object.defineProperty(req, prop, { ...optsReset, value })\n },\n })\n}\n"],"names":["HeadersAdapter","PRERENDER_REVALIDATE_HEADER","PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER","getTracer","NodeSpan","wrapApiHandler","page","handler","args","setRootSpanAttribute","trace","runHandler","spanName","sendStatusCode","res","statusCode","redirect","statusOrUrl","url","Error","writeHead","Location","write","end","checkIsOnDemandRevalidate","rawHeaders","previewProps","get","headers","from","previewModeId","isOnDemandRevalidate","revalidateOnlyGenerated","has","hasOwnProperty","COOKIE_NAME_PRERENDER_BYPASS","COOKIE_NAME_PRERENDER_DATA","RESPONSE_LIMIT_DEFAULT","SYMBOL_PREVIEW_DATA","Symbol","SYMBOL_CLEARED_COOKIES","clearPreviewData","options","serialize","require","previous","getHeader","setHeader","Array","isArray","expires","Date","httpOnly","sameSite","process","env","NODE_ENV","secure","path","undefined","Object","defineProperty","value","enumerable","ApiError","constructor","message","sendError","statusMessage","setLazyProp","req","prop","getter","opts","configurable","optsReset","writable","set"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 1781, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/async-local-storage.ts"],"sourcesContent":["import type { AsyncLocalStorage } from 'async_hooks'\n\nconst sharedAsyncLocalStorageNotAvailableError = new Error(\n 'Invariant: AsyncLocalStorage accessed in runtime where it is not available'\n)\n\nclass FakeAsyncLocalStorage\n implements AsyncLocalStorage\n{\n disable(): void {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n getStore(): Store | undefined {\n // This fake implementation of AsyncLocalStorage always returns `undefined`.\n return undefined\n }\n\n run(): R {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n exit(): R {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n enterWith(): void {\n throw sharedAsyncLocalStorageNotAvailableError\n }\n\n static bind(fn: T): T {\n return fn\n }\n}\n\nconst maybeGlobalAsyncLocalStorage =\n typeof globalThis !== 'undefined' && (globalThis as any).AsyncLocalStorage\n\nexport function createAsyncLocalStorage<\n Store extends {},\n>(): AsyncLocalStorage {\n if (maybeGlobalAsyncLocalStorage) {\n return new maybeGlobalAsyncLocalStorage()\n }\n return new FakeAsyncLocalStorage()\n}\n\n/**\n * Returns the storage registered under `name`, and creates it on first use.\n *\n * These storages must be singletons within a realm. A store that is entered\n * through one reference to a storage must be readable through every other\n * reference to it. If it is not, code that runs inside the scope sees no store\n * at all. Module identity does not guarantee this. A realm can evaluate the\n * same `next` file more than once if the package is reachable through more than\n * one path, and then each evaluation creates a storage of its own. A global\n * symbol keeps the singleton intact for any number of copies. Worker threads\n * and edge sandboxes still get separate storages, because each of them has its\n * own `globalThis`.\n *\n * Module identity broke this way in `next dev`. A bug in Node's\n * `fs.realpathSync` can return a path with its symlinks unresolved, and the\n * module loader keys the module cache on that path. On a pnpm install it then\n * resolves `next/dist/...` through the `node_modules/next` symlink instead of\n * the real path, so the file is evaluated a second time. See\n * https://github.com/nodejs/node/pull/65113. Node versions without that fix\n * stay affected.\n *\n * The key includes the Next.js version, so two different versions of Next.js in\n * the same realm keep separate storages. Their store shapes might not be\n * compatible.\n */\nexport function getOrCreateGlobalAsyncLocalStorage(\n name: string\n): AsyncLocalStorage {\n const key = Symbol.for(`@next/${name}@${process.env.__NEXT_VERSION}`)\n\n const globalStore = globalThis as typeof globalThis & {\n [key: symbol]: AsyncLocalStorage | undefined\n }\n\n return (globalStore[key] ??= createAsyncLocalStorage())\n}\n\nexport function bindSnapshot(\n // WARNING: Don't pass a named function to this argument! See: https://github.com/facebook/react/pull/34911\n fn: T\n): T {\n if (maybeGlobalAsyncLocalStorage) {\n return maybeGlobalAsyncLocalStorage.bind(fn)\n }\n return FakeAsyncLocalStorage.bind(fn)\n}\n\nexport function createSnapshot(): (\n fn: (...args: TArgs) => R,\n ...args: TArgs\n) => R {\n if (maybeGlobalAsyncLocalStorage) {\n return maybeGlobalAsyncLocalStorage.snapshot()\n }\n return function (fn: any, ...args: any[]) {\n return fn(...args)\n }\n}\n"],"names":["sharedAsyncLocalStorageNotAvailableError","Error","FakeAsyncLocalStorage","disable","getStore","undefined","run","exit","enterWith","bind","fn","maybeGlobalAsyncLocalStorage","globalThis","AsyncLocalStorage","createAsyncLocalStorage","getOrCreateGlobalAsyncLocalStorage","name","key","Symbol","for","process","env","__NEXT_VERSION","globalStore","bindSnapshot","createSnapshot","snapshot","args"],"mappings":";;;;;;;;;;AAEA,MAAMA,2CAA2C,IAAIC,MACnD;AAGF,MAAMC;IAGJC,UAAgB;QACd,MAAMH;IACR;IAEAI,WAA8B;QAC5B,4EAA4E;QAC5E,OAAOC;IACT;IAEAC,MAAY;QACV,MAAMN;IACR;IAEAO,OAAa;QACX,MAAMP;IACR;IAEAQ,YAAkB;QAChB,MAAMR;IACR;IAEA,OAAOS,KAAQC,EAAK,EAAK;QACvB,OAAOA;IACT;AACF;AAEA,MAAMC,+BACJ,OAAOC,eAAe,eAAgBA,WAAmBC,iBAAiB;AAErE,SAASC;IAGd,IAAIH,8BAA8B;QAChC,OAAO,IAAIA;IACb;IACA,OAAO,IAAIT;AACb;AA2BO,SAASa,mCACdC,IAAY;IAEZ,MAAMC,MAAMC,OAAOC,GAAG,CAAC,CAAC,MAAM,EAAEH,KAAK,CAAC,EAAEI,QAAQC,EAAAA,CAAG,CAACC,cAAc,EAAE;IAEpE,MAAMC,cAAcX;IAIpB,OAAQW,WAAW,CAACN,IAAI,KAAKH;AAC/B;AAEO,SAASU,aACd,AACAd,EAAK,yGADsG;IAG3G,IAAIC,8BAA8B;QAChC,OAAOA,6BAA6BF,IAAI,CAACC;IAC3C;IACA,OAAOR,sBAAsBO,IAAI,CAACC;AACpC;AAEO,SAASe;IAId,IAAId,8BAA8B;QAChC,OAAOA,6BAA6Be,QAAQ;IAC9C;IACA,OAAO,SAAUhB,EAAO,EAAE,GAAGiB,IAAW;QACtC,OAAOjB,MAAMiB;IACf;AACF","ignoreList":[0]}}, + {"offset": {"line": 1843, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/blocking-route-messages.ts"],"sourcesContent":["export function createRuntimeBodyError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data during prerendering.\\n\\n` +\n `\\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` accessed outside of \\`\\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-runtime`\n )\n}\n\nexport function createDynamicBodyError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data during prerendering.\\n\\n` +\n `\\`fetch(...)\\` or \\`connection()\\` accessed outside of \\`\\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [cache] Cache the data access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`\n )\n}\n\nexport function createRuntimeBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data during prerendering or a navigation.\\n\\n` +\n `\\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` accessed outside of \\`\\` prevents the route from being prerendered or the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-runtime`\n )\n}\n\nexport function createLinkBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered URL data during prerendering or a navigation.\\n\\n` +\n `\\`params\\` or \\`searchParams\\` accessed outside of \\`\\` may prevent the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-shell-url-data`\n )\n}\n\nexport function createNavigationBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`navigation()\\` during prerendering or a navigation.\\n\\n` +\n `\\`navigation()\\` called outside of \\`\\` may prevent the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the component that calls \\`navigation()\\`\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage`\n )\n}\n\nexport function createPrefetchBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`prefetch()\\` during prerendering or a navigation.\\n\\n` +\n `\\`prefetch()\\` called outside of \\`\\` may prevent the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the component that calls \\`prefetch()\\`\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage`\n )\n}\n\nexport function createDynamicBodyErrorInNavigation(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data during prerendering or a navigation.\\n\\n` +\n `\\`fetch(...)\\` or \\`connection()\\` accessed outside of \\`\\` prevents the route from being prerendered or the navigation from being instant, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [cache] Cache the data access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`\n )\n}\n\n/**\n * NOTE: Prefer `createRuntimeBodyError` or `createDynamicBodyError`.\n * Only use this in situations like build-time static validation, where\n * we can't pinpoint a more specific reason.\n */\nexport function createDynamicOrRuntimeBodyError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data during prerendering.\\n\\n` +\n `\\`fetch(...)\\`, \\`cookies()\\`, \\`headers()\\`, \\`params\\`, \\`searchParams\\`, or \\`connection()\\` accessed outside of \\`\\` prevents the route from being prerendered, blocking the page load and leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Provide a placeholder with \\`\\` around the data access\\n` +\n ` - [cache] For uncached data (\\`fetch\\`, database calls): cache the access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-dynamic`\n )\n}\n\nexport function createLinkMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered URL data in \\`generateMetadata()\\`.\\n\\n` +\n `This route's metadata is blocked, but the rest of its content can be prefetched. \\`params\\` or \\`searchParams\\` accessed in \\`generateMetadata()\\` prevent it from being prefetched.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static metadata export instead of \\`generateMetadata()\\`\\n` +\n ` - [dynamic] Render a marker component that calls \\`await connection()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`\n )\n}\n\nexport function createRuntimeMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data in \\`generateMetadata()\\`.\\n\\n` +\n `This route's metadata is blocked, but the rest of its content can be prerendered. \\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` accessed in \\`generateMetadata()\\` cause it to run dynamically.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static metadata export instead of \\`generateMetadata()\\`\\n` +\n ` - [dynamic] Render a marker component that calls \\`await connection()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`\n )\n}\n\nexport function createNavigationMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`navigation()\\` in \\`generateMetadata()\\`.\\n\\n` +\n `Metadata can already stream without blocking the route's UI, so delaying it until navigation may be unintentional.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [remove] Remove \\`navigation()\\` from \\`generateMetadata()\\`\\n` +\n ` - [mark] Render a marker component that calls \\`await navigation()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-metadata`\n )\n}\n\nexport function createPrefetchMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`prefetch()\\` in \\`generateMetadata()\\`.\\n\\n` +\n `Metadata can already stream without blocking the route's UI, so delaying it until a per-link prefetch or navigation may be unintentional.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [remove] Remove \\`prefetch()\\` from \\`generateMetadata()\\`\\n` +\n ` - [mark] Render a marker component that calls \\`await prefetch()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-metadata`\n )\n}\n\nexport function createDynamicMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data in \\`generateMetadata()\\`.\\n\\n` +\n `This route's metadata is blocked, but the rest of its content can be prerendered. \\`fetch(...)\\` or \\`connection()\\` accessed in \\`generateMetadata()\\` cause it to run dynamically.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] Cache the metadata with \\`\"use cache\"\\` in \\`generateMetadata()\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [dynamic] Render a marker component that calls \\`await connection()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-dynamic`\n )\n}\n\nexport function createLinkViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered URL data in \\`generateViewport()\\`.\\n\\n` +\n `\\`params\\` or \\`searchParams\\` in \\`generateViewport()\\` prevents the page from being prerendered, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static viewport export instead of \\`generateViewport()\\`\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`\n )\n}\n\nexport function createRuntimeViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data in \\`generateViewport()\\`.\\n\\n` +\n `\\`cookies()\\`, \\`headers()\\`, \\`params\\`, or \\`searchParams\\` in \\`generateViewport()\\` prevents the page from being prerendered, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static viewport export instead of \\`generateViewport()\\`\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`\n )\n}\n\nexport function createNavigationViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`navigation()\\` in \\`generateViewport()\\`.\\n\\n` +\n `This prevents Next.js from creating the App Shell, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [remove] Remove \\`navigation()\\` from \\`generateViewport()\\`\\n` +\n ` - [ignore] Set \\`export const instant = false\\` to disable validation for this segment\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-viewport`\n )\n}\n\nexport function createPrefetchViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered \\`prefetch()\\` in \\`generateViewport()\\`.\\n\\n` +\n `This prevents Next.js from creating the App Shell, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [remove] Remove \\`prefetch()\\` from \\`generateViewport()\\`\\n` +\n ` - [ignore] Set \\`export const instant = false\\` to disable validation for this segment\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-navigation-stage-viewport`\n )\n}\n\nexport function createDynamicViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data in \\`generateViewport()\\`.\\n\\n` +\n `\\`fetch(...)\\` or \\`connection()\\` in \\`generateViewport()\\` prevents the page from being prerendered, leading to a slower user experience.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] Cache the viewport data with \\`\"use cache\"\\` in \\`generateViewport()\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-dynamic`\n )\n}\n\n/**\n * NOTE: Prefer `createRuntimeViewportError` or `createDynamicViewportError`.\n * Only use this in situations like build-time static validation, where\n * we can't pinpoint a more specific reason.\n */\nexport function createDynamicOrRuntimeViewportError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data in \\`generateViewport()\\`.\\n\\n` +\n `This prevents the page from being prerendered, leading to a slower user experience. Unlike metadata, viewport cannot be streamed behind \\`\\` because it affects the initial page load.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static viewport export instead of \\`generateViewport()\\`\\n` +\n ` - [cache] For uncached data (\\`fetch\\`, database calls): cache the viewport with \\`\"use cache\"\\` in \\`generateViewport()\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-viewport-runtime`\n )\n}\n\n/**\n * NOTE: Prefer `createRuntimeMetadataError` or `createDynamicMetadataError`.\n * Only use this in situations like build-time static validation, where\n * we can't pinpoint a more specific reason.\n */\nexport function createDynamicOrRuntimeMetadataError(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data in \\`generateMetadata()\\`.\\n\\n` +\n `This route's metadata is blocked, but the rest of its content can be prerendered.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Use a static metadata export instead of \\`generateMetadata()\\`\\n` +\n ` - [cache] Cache the metadata with \\`\"use cache\"\\` in \\`generateMetadata()\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [dynamic] Render a marker component that calls \\`await connection()\\` inside \\`\\` on the page\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-metadata-runtime`\n )\n}\n\n//====================================================\n// Static routes (with `ensureStatic = \"navigation\"`)\n//====================================================\n\nexport function createRuntimeBodyErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but runtime data from \\`cookies()\\`, \\`headers()\\`, \\`params\\`, \\`searchParams\\`, or a short-lived cache requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [remove] Remove the data access\\n` +\n ` - [client] Read the data on the client\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-route-runtime`\n )\n}\n\nexport function createDynamicBodyErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but an uncached \\`fetch(...)\\`, database call, or \\`connection()\\` requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] Cache the data access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [remove] Remove the data access\\n` +\n ` - [client] Read the data on the client\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-route-dynamic`\n )\n}\n\nexport function createNonPrerenderableBodyErrorInStaticRoute(\n route: string\n): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but some data requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] For uncached data (\\`fetch\\`, database calls): cache the access with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [remove] Remove the data access\\n` +\n ` - [client] Read the data on the client\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-route-dynamic`\n )\n}\n\nexport function createRuntimeMetadataErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data in \\`generateMetadata()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but runtime data from \\`cookies()\\`, \\`headers()\\`, \\`params\\`, \\`searchParams\\`, or a short-lived cache requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Replace the dynamic data used by \\`generateMetadata()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-metadata-runtime`\n )\n}\n\nexport function createDynamicMetadataErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data in \\`generateMetadata()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but an uncached \\`fetch(...)\\`, database call, or \\`connection()\\` requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] Cache the data used by \\`generateMetadata()\\` with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [static] Replace the dynamic data used by \\`generateMetadata()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-metadata-dynamic`\n )\n}\n\nexport function createNonPrerenderableMetadataErrorInStaticRoute(\n route: string\n): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data in \\`generateMetadata()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but some data requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] For uncached data: cache the data used by \\`generateMetadata()\\` with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [static] Replace the dynamic data used by \\`generateMetadata()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-metadata-dynamic`\n )\n}\n\nexport function createRuntimeViewportErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered runtime data in \\`generateViewport()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but runtime data from \\`cookies()\\`, \\`headers()\\`, \\`params\\`, \\`searchParams\\`, or a short-lived cache requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [static] Replace the dynamic data used by \\`generateViewport()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-viewport-runtime`\n )\n}\n\nexport function createDynamicViewportErrorInStaticRoute(route: string): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached data in \\`generateViewport()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but an uncached \\`fetch(...)\\`, database call, or \\`connection()\\` requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] Cache the data used by \\`generateViewport()\\` with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [static] Replace the dynamic data used by \\`generateViewport()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-viewport-dynamic`\n )\n}\n\nexport function createNonPrerenderableViewportErrorInStaticRoute(\n route: string\n): Error {\n return new Error(\n `Route \"${route}\": Next.js encountered uncached or runtime data in \\`generateViewport()\\` on a route that must be fully static.\\n\\n` +\n `This route is configured to be fully static, but some data requires rendering at request time.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [cache] For uncached data: cache the data used by \\`generateViewport()\\` with \\`\"use cache\"\\` (does not apply to \\`connection()\\`)\\n` +\n ` - [static] Replace the dynamic data used by \\`generateViewport()\\` with static data\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/static-viewport-dynamic`\n )\n}\n\nexport function logBuildDebugHint(route: string): void {\n if (process.env.NODE_ENV !== 'development') {\n console.error(\n `To get a more detailed stack trace and pinpoint the issue, try one of the following:\\n` +\n ` - Start the app in development mode by running \\`next dev\\`, then open \"${route}\" in your browser to investigate the error.\\n` +\n ` - Rerun the production build with \\`next build --debug-prerender\\` to generate better stack traces.`\n )\n } else if (!process.env.__NEXT_DEV_SERVER) {\n console.error(\n `To debug the issue, start the app in development mode by running \\`next dev\\`, then open \"${route}\" in your browser to investigate the error.`\n )\n }\n}\n"],"names":["createRuntimeBodyError","route","Error","createDynamicBodyError","createRuntimeBodyErrorInNavigation","createLinkBodyErrorInNavigation","createNavigationBodyErrorInNavigation","createPrefetchBodyErrorInNavigation","createDynamicBodyErrorInNavigation","createDynamicOrRuntimeBodyError","createLinkMetadataError","createRuntimeMetadataError","createNavigationMetadataError","createPrefetchMetadataError","createDynamicMetadataError","createLinkViewportError","createRuntimeViewportError","createNavigationViewportError","createPrefetchViewportError","createDynamicViewportError","createDynamicOrRuntimeViewportError","createDynamicOrRuntimeMetadataError","createRuntimeBodyErrorInStaticRoute","createDynamicBodyErrorInStaticRoute","createNonPrerenderableBodyErrorInStaticRoute","createRuntimeMetadataErrorInStaticRoute","createDynamicMetadataErrorInStaticRoute","createNonPrerenderableMetadataErrorInStaticRoute","createRuntimeViewportErrorInStaticRoute","createDynamicViewportErrorInStaticRoute","createNonPrerenderableViewportErrorInStaticRoute","logBuildDebugHint","process","env","NODE_ENV","console","error","__NEXT_DEV_SERVER"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 2002, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/dynamic-rendering.ts"],"sourcesContent":["/**\n * The functions provided by this module are used to communicate certain properties\n * about the currently running code so that Next.js can make decisions on how to handle\n * the current execution in different rendering modes such as pre-rendering, resuming, and SSR.\n *\n * Today Next.js treats all code as potentially static. Certain APIs may only make sense when dynamically rendering.\n * Traditionally this meant deopting the entire render to dynamic however with PPR we can now deopt parts\n * of a React tree as dynamic while still keeping other parts static. There are really two different kinds of\n * Dynamic indications.\n *\n * The first is simply an intention to be dynamic. unstable_noStore is an example of this where\n * the currently executing code simply declares that the current scope is dynamic but if you use it\n * inside unstable_cache it can still be cached. This type of indication can be removed if we ever\n * make the default dynamic to begin with because the only way you would ever be static is inside\n * a cache scope which this indication does not affect.\n *\n * The second is an indication that a dynamic data source was read. This is a stronger form of dynamic\n * because it means that it is inappropriate to cache this at all. using a dynamic data source inside\n * unstable_cache should error. If you want to use some dynamic data inside unstable_cache you should\n * read that data outside the cache and pass it in as an argument to the cached function.\n */\n\nimport type { WorkStore } from './work-async-storage.external'\nimport type {\n RequestStore,\n WorkUnitStore,\n PrerenderStoreLegacy,\n PrerenderStoreModern,\n ValidationStoreClient,\n PrerenderStoreModernServer,\n} from './work-unit-async-storage.external'\n\n// Once postpone is in stable we should switch to importing the postpone export directly\nimport React from 'react'\n\nimport { DynamicServerError } from '../../client/components/hooks-server-context'\nimport { StaticGenBailoutError } from '../../client/components/static-generation-bailout'\nimport { getStagedRenderingController } from './work-unit-async-storage.external'\nimport { isClientHookDynamicError } from '../dynamic-rendering-utils'\nimport {\n METADATA_BOUNDARY_NAME,\n VIEWPORT_BOUNDARY_NAME,\n OUTLET_BOUNDARY_NAME,\n ROOT_LAYOUT_BOUNDARY_NAME,\n} from '../../lib/framework/boundary-constants'\nimport { scheduleOnNextTick } from '../../lib/scheduler'\nimport {\n createRuntimeBodyError,\n createDynamicBodyError,\n createRuntimeBodyErrorInNavigation,\n createNavigationBodyErrorInNavigation,\n createPrefetchBodyErrorInNavigation,\n createDynamicBodyErrorInNavigation,\n createDynamicOrRuntimeBodyError,\n createRuntimeMetadataError,\n createDynamicMetadataError,\n createRuntimeViewportError,\n createNavigationViewportError,\n createPrefetchViewportError,\n createDynamicViewportError,\n createDynamicOrRuntimeViewportError,\n createDynamicOrRuntimeMetadataError,\n logBuildDebugHint,\n createLinkBodyErrorInNavigation,\n createLinkMetadataError,\n createLinkViewportError,\n createNavigationMetadataError,\n createPrefetchMetadataError,\n createNonPrerenderableMetadataErrorInStaticRoute,\n createNonPrerenderableViewportErrorInStaticRoute,\n createNonPrerenderableBodyErrorInStaticRoute,\n createRuntimeBodyErrorInStaticRoute,\n createDynamicBodyErrorInStaticRoute,\n createRuntimeMetadataErrorInStaticRoute,\n createDynamicMetadataErrorInStaticRoute,\n createRuntimeViewportErrorInStaticRoute,\n createDynamicViewportErrorInStaticRoute,\n} from './blocking-route-messages'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport {\n INSTANT_VALIDATION_BOUNDARY_NAME,\n INSTANT_SLOT_MARKER_PREFIX,\n INSTANT_SLOT_MARKER_SUFFIX,\n} from './instant-validation/boundary-constants'\nimport {\n type ValidationBoundaryTracking,\n allRequiredBoundariesRendered,\n} from './instant-validation/boundary-tracking'\nimport type { InstantValidationSampleTracking } from './instant-validation/instant-samples'\nimport { createUnrenderedSegmentError } from '../../shared/lib/instant-messages'\nimport { getReactBrowserBailoutReason } from '../../shared/lib/lazy-dynamic/react-browser-bailout'\n\nexport type DynamicAccess = {\n /**\n * If debugging, this will contain the stack trace of where the dynamic access\n * occurred. This is used to provide more information to the user about why\n * their page is being rendered dynamically.\n */\n stack?: string\n\n /**\n * The expression that was accessed dynamically.\n */\n expression: string\n}\n\n// Stores dynamic reasons used during an RSC render.\nexport type DynamicTrackingState = {\n /**\n * When true, stack information will also be tracked during dynamic access.\n */\n readonly isDebugDynamicAccesses: boolean | undefined\n\n /**\n * The dynamic accesses that occurred during the render.\n */\n readonly dynamicAccesses: Array\n\n syncDynamicErrorWithStack: null | Error\n syncDynamicErrorWithStackPostMicrotask: boolean\n}\n\n// Stores dynamic reasons used during an SSR render.\nexport type DynamicValidationState = {\n hasSuspenseAboveBody: boolean\n hasDynamicMetadata: boolean\n dynamicMetadata: null | Error\n hasDynamicViewport: boolean\n hasAllowedDynamic: boolean\n dynamicErrors: Array\n}\n\nexport function createDynamicTrackingState(\n isDebugDynamicAccesses: boolean | undefined\n): DynamicTrackingState {\n return {\n isDebugDynamicAccesses,\n dynamicAccesses: [],\n syncDynamicErrorWithStack: null,\n syncDynamicErrorWithStackPostMicrotask: false,\n }\n}\n\nexport function createDynamicValidationState(): DynamicValidationState {\n return {\n hasSuspenseAboveBody: false,\n hasDynamicMetadata: false,\n dynamicMetadata: null,\n hasDynamicViewport: false,\n hasAllowedDynamic: false,\n dynamicErrors: [],\n }\n}\n\nfunction getPendingClientSyncDynamicError(\n clientDynamic: DynamicTrackingState\n): null | Error {\n return clientDynamic.syncDynamicErrorWithStackPostMicrotask\n ? null\n : clientDynamic.syncDynamicErrorWithStack\n}\n\nexport function getFirstDynamicReason(\n trackingState: DynamicTrackingState\n): undefined | string {\n return trackingState.dynamicAccesses[0]?.expression\n}\n\n/**\n * This function communicates that the current scope should be treated as dynamic.\n *\n * In most cases this function is a no-op but if called during\n * a PPR prerender it will postpone the current sub-tree and calling\n * it during a normal prerender will cause the entire prerender to abort\n */\nexport function markCurrentScopeAsDynamic(\n store: WorkStore,\n workUnitStore: undefined | Exclude,\n expression: string\n): void {\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'cache':\n case 'unstable-cache':\n // Inside cache scopes, marking a scope as dynamic has no effect,\n // because the outer cache scope creates a cache boundary. This is\n // subtly different from reading a dynamic data source, which is\n // forbidden inside a cache scope.\n return\n case 'private-cache':\n // A private cache scope is already dynamic by definition.\n return\n case 'prerender-legacy':\n case 'request':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n // If we're forcing dynamic rendering or we're forcing static rendering, we\n // don't need to do anything here because the entire page is already dynamic\n // or it's static and it should not throw or postpone here.\n if (store.forceDynamic || store.forceStatic) return\n\n if (store.dynamicShouldError) {\n throw new StaticGenBailoutError(\n `Route ${store.route} with \\`dynamic = \"error\"\\` couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`\n )\n }\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender-legacy':\n workUnitStore.revalidate = 0\n\n // We aren't prerendering, but we are generating a static page. We need\n // to bail out of static generation.\n const err = new DynamicServerError(\n `Route ${store.route} couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n store.dynamicUsageDescription = expression\n store.dynamicUsageStack = err.stack\n\n throw err\n case 'request':\n markRequestStoreAsDynamic(workUnitStore)\n break\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n}\n\n/**\n * This function is meant to be used when prerendering without cacheComponents or PPR.\n * When called during a build it will cause Next.js to consider the route as dynamic.\n *\n * @internal\n */\nexport function throwToInterruptStaticGeneration(\n expression: string,\n store: WorkStore,\n prerenderStore: PrerenderStoreLegacy\n): never {\n // We aren't prerendering but we are generating a static page. We need to bail out of static generation\n const err = new DynamicServerError(\n `Route ${store.route} couldn't be rendered statically because it used \\`${expression}\\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`\n )\n\n prerenderStore.revalidate = 0\n\n store.dynamicUsageDescription = expression\n store.dynamicUsageStack = err.stack\n\n throw err\n}\n\n/**\n * This function should be used to track whether something dynamic happened even when\n * we are in a dynamic render. This is useful for Dev where all renders are dynamic but\n * we still track whether dynamic APIs were accessed for helpful messaging\n *\n * @internal\n */\nexport function trackDynamicDataInDynamicRender(workUnitStore: WorkUnitStore) {\n switch (workUnitStore.type) {\n case 'cache':\n case 'unstable-cache':\n // Inside cache scopes, marking a scope as dynamic has no effect,\n // because the outer cache scope creates a cache boundary. This is\n // subtly different from reading a dynamic data source, which is\n // forbidden inside a cache scope.\n return\n case 'private-cache':\n // A private cache scope is already dynamic by definition.\n return\n case 'prerender':\n case 'prerender-runtime':\n case 'prerender-legacy':\n case 'prerender-client':\n case 'validation-client':\n case 'build-time-generator':\n break\n case 'request':\n markRequestStoreAsDynamic(workUnitStore)\n break\n default:\n workUnitStore satisfies never\n }\n}\n\nfunction markRequestStoreAsDynamic(requestStore: RequestStore): void {\n if (process.env.__NEXT_DEV_SERVER && requestStore.phase === 'render') {\n requestStore.usedDynamic = true\n }\n}\n\nfunction abortOnSynchronousDynamicDataAccess(\n route: string,\n expression: string,\n prerenderStore: PrerenderStoreModern\n): void {\n const reason = `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`\n\n const error = createPrerenderInterruptedError(reason)\n\n prerenderStore.controller.abort(error)\n\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n // When we aren't debugging, we don't need to create another error for the\n // stack trace.\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n}\n\nexport function abortOnSynchronousPlatformIOAccess(\n route: string,\n expression: string,\n errorWithStack: Error,\n prerenderStore: PrerenderStoreModern\n): void {\n const dynamicTracking = prerenderStore.dynamicTracking\n\n if (dynamicTracking && dynamicTracking.syncDynamicErrorWithStack === null) {\n dynamicTracking.syncDynamicErrorWithStack = errorWithStack\n // React completes the task that is currently rendering before scheduled\n // abort cleanup. Client tracking can attribute the sync IO only during\n // that current task; server tracking keeps the error regardless.\n queueMicrotask(() => {\n dynamicTracking.syncDynamicErrorWithStackPostMicrotask = true\n })\n }\n\n abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore)\n}\n\n/**\n * use this function when prerendering with cacheComponents. If we are doing a\n * prospective prerender we don't actually abort because we want to discover\n * all caches for the shell. If this is the actual prerender we do abort.\n *\n * This function accepts a prerenderStore but the caller should ensure we're\n * actually running in cacheComponents mode.\n *\n * @internal\n */\nexport function abortAndThrowOnSynchronousRequestDataAccess(\n route: string,\n expression: string,\n errorWithStack: Error,\n prerenderStore: PrerenderStoreModern\n): never {\n const prerenderSignal = prerenderStore.controller.signal\n if (prerenderSignal.aborted === false) {\n // TODO it would be better to move this aborted check into the callsite so we can avoid making\n // the error object when it isn't relevant to the aborting of the prerender however\n // since we need the throw semantics regardless of whether we abort it is easier to land\n // this way. See how this was handled with `abortOnSynchronousPlatformIOAccess` for a closer\n // to ideal implementation\n abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore)\n // Preserve the exact server-side dynamic access for final validation after\n // interrupting this render.\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n if (dynamicTracking.syncDynamicErrorWithStack === null) {\n dynamicTracking.syncDynamicErrorWithStack = errorWithStack\n }\n }\n }\n throw createPrerenderInterruptedError(\n `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`\n )\n}\n\nconst NEXT_PRERENDER_INTERRUPTED = 'NEXT_PRERENDER_INTERRUPTED'\n\nfunction createPrerenderInterruptedError(message: string): Error {\n const error = new Error(message)\n ;(error as any).digest = NEXT_PRERENDER_INTERRUPTED\n return error\n}\n\ntype DigestError = Error & {\n digest: string\n}\n\nexport function isPrerenderInterruptedError(\n error: unknown\n): error is DigestError {\n return (\n typeof error === 'object' &&\n error !== null &&\n (error as any).digest === NEXT_PRERENDER_INTERRUPTED &&\n 'name' in error &&\n 'message' in error &&\n error instanceof Error\n )\n}\n\nexport function accessedDynamicData(\n dynamicAccesses: Array\n): boolean {\n return dynamicAccesses.length > 0\n}\n\nexport function consumeDynamicAccess(\n serverDynamic: DynamicTrackingState,\n clientDynamic: DynamicTrackingState\n): DynamicTrackingState['dynamicAccesses'] {\n // We mutate because we only call this once we are no longer writing\n // to the dynamicTrackingState and it's more efficient than creating a new\n // array.\n serverDynamic.dynamicAccesses.push(...clientDynamic.dynamicAccesses)\n return serverDynamic.dynamicAccesses\n}\n\nexport function formatDynamicAPIAccesses(\n dynamicAccesses: Array\n): string[] {\n return dynamicAccesses\n .filter(\n (access): access is Required =>\n typeof access.stack === 'string' && access.stack.length > 0\n )\n .map(({ expression, stack }) => {\n stack = stack\n .split('\\n')\n // Remove the \"Error: \" prefix from the first line of the stack trace as\n // well as the first 4 lines of the stack trace which is the distance\n // from the user code and the `new Error().stack` call.\n .slice(4)\n .filter((line) => {\n // Exclude Next.js internals from the stack trace.\n if (line.includes('node_modules/next/')) {\n return false\n }\n\n // Exclude anonymous functions from the stack trace.\n if (line.includes(' ()')) {\n return false\n }\n\n // Exclude Node.js internals from the stack trace.\n if (line.includes(' (node:')) {\n return false\n }\n\n return true\n })\n .join('\\n')\n return `Dynamic API Usage Debug - ${expression}:\\n${stack}`\n })\n}\n\n/**\n * In a prerender, we may end up with hanging Promises as inputs due them\n * stalling on connection() or because they're loading dynamic data. In that\n * case we need to abort the encoding of arguments since they'll never complete.\n */\nexport function createHangingInputAbortSignal(\n workUnitStore: PrerenderStoreModernServer\n): AbortSignal\nexport function createHangingInputAbortSignal(\n workUnitStore: WorkUnitStore\n): AbortSignal | undefined\nexport function createHangingInputAbortSignal(\n workUnitStore: WorkUnitStore\n): AbortSignal | undefined {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-runtime':\n const controller = new AbortController()\n\n if (workUnitStore.cacheSignal) {\n // If we have a cacheSignal it means we're in a prospective render. If\n // the input we're waiting on is coming from another cache, we do want\n // to wait for it so that we can resolve this cache entry too.\n workUnitStore.cacheSignal.inputReady().then(() => {\n controller.abort()\n })\n } else {\n // Otherwise we're in the final render and we should already have all\n // our caches filled.\n // If the prerender uses stages, we have wait until the final stage.\n // if an input didn't resolve at that point, then we can assume it never will.\n //\n // We might still be waiting on some microtasks so we\n // wait one tick before giving up. When we give up, we still want to\n // render the content of this cache as deeply as we can so that we can\n // suspend as deeply as possible in the tree or not at all if we don't\n // end up waiting for the input.\n\n const stagedRendering = getStagedRenderingController(workUnitStore)\n if (stagedRendering && stagedRendering.finalStage !== null) {\n stagedRendering\n .waitForStage(stagedRendering.finalStage)\n .then(() => scheduleOnNextTick(() => controller.abort()), noop)\n } else {\n scheduleOnNextTick(() => controller.abort())\n }\n }\n\n return controller.signal\n case 'prerender-client':\n case 'validation-client':\n case 'prerender-legacy':\n case 'request':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n return undefined\n default:\n workUnitStore satisfies never\n }\n}\n\nfunction noop() {}\n\nexport function annotateDynamicAccess(\n expression: string,\n prerenderStore: PrerenderStoreModern | ValidationStoreClient\n) {\n const dynamicTracking = prerenderStore.dynamicTracking\n if (dynamicTracking) {\n dynamicTracking.dynamicAccesses.push({\n stack: dynamicTracking.isDebugDynamicAccesses\n ? new Error().stack\n : undefined,\n expression,\n })\n }\n}\n\nconst hasSuspenseRegex = /\\n\\s+at Suspense \\(\\)/\n\n// Common implicit body tags that React will treat as body when placed directly in html\nconst bodyAndImplicitTags =\n 'body|div|main|section|article|aside|header|footer|nav|form|p|span|h1|h2|h3|h4|h5|h6'\n\n// Detects when RootLayoutBoundary (our framework marker component) appears\n// after Suspense in the component stack, indicating the root layout is wrapped\n// within a Suspense boundary. Ensures no body/html/implicit-body components are in between.\n//\n// Example matches:\n// at Suspense ()\n// at __next_root_layout_boundary__ ()\n//\n// Or with other components in between (but not body/html/implicit-body):\n// at Suspense ()\n// at SomeComponent ()\n// at __next_root_layout_boundary__ ()\nconst hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex = new RegExp(\n `\\\\n\\\\s+at Suspense \\\\(\\\\)(?:(?!\\\\n\\\\s+at (?:${bodyAndImplicitTags}) \\\\(\\\\))[\\\\s\\\\S])*?\\\\n\\\\s+at ${ROOT_LAYOUT_BOUNDARY_NAME} \\\\([^\\\\n]*\\\\)`\n)\n\nconst hasMetadataRegex = new RegExp(\n `\\\\n\\\\s+at ${METADATA_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst hasViewportRegex = new RegExp(\n `\\\\n\\\\s+at ${VIEWPORT_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst hasOutletRegex = new RegExp(`\\\\n\\\\s+at ${OUTLET_BOUNDARY_NAME}[\\\\n\\\\s]`)\n\nconst hasInstantValidationBoundaryRegex = new RegExp(\n `\\\\n\\\\s+at ${INSTANT_VALIDATION_BOUNDARY_NAME}[\\\\n\\\\s]`\n)\nconst slotMarkerRegex = new RegExp(\n `\\\\n\\\\s+at ${INSTANT_SLOT_MARKER_PREFIX}(\\\\d+)${INSTANT_SLOT_MARKER_SUFFIX}[\\\\n\\\\s]`\n)\n\n/** Look up the config factory for the slot this error belongs to.\n * Checks the component stack for a slot marker (__next_instant_slot_N__)\n * and returns the config at that index. Falls back to index 0 (root\n * config) when no slot marker is found or the slot has no config. */\nfunction resolveInstantStack(\n componentStack: string,\n dynamicValidation: InstantValidationState\n): (() => Error) | null {\n const { slotStacks } = dynamicValidation\n if (slotStacks.length > 1) {\n const match = slotMarkerRegex.exec(componentStack)\n if (match) {\n // Slot markers are 0-indexed in the component name but\n // slotStacks is 1-indexed (index 0 is the root config).\n const slotIndex = parseInt(match[1], 10) + 1\n const slotStack = slotStacks[slotIndex]\n if (slotStack != null) {\n return slotStack\n }\n }\n }\n // Fall back to root config (index 0)\n return slotStacks[0] ?? null\n}\n\n/**\n * Inspects the component stack of an outlet boundary to discover whether the\n * user placed a Suspense boundary above the document body, and records the\n * opt-in on `dynamicValidation.hasSuspenseAboveBody` if so.\n *\n * The outlet itself isn't a meaningful source of dynamic — it only resolves\n * when metadata/viewport are dynamic, which we track via their own boundaries.\n * However, the outlet renders alongside the page content, so its stack passes\n * through the user's layout chain (typically reaching into `` via the\n * root layout). That makes the outlet stack our best opportunity to spot a\n * Suspense boundary above the body, even when no real body content is dynamic.\n * Without this, a route whose only dynamic source is `generateViewport()` would\n * miss the Suspense-above-body opt-in, because the viewport's stack lives in\n * the head and never sees the user's root layout.\n *\n * We deliberately only set `hasSuspenseAboveBody`, not `hasAllowedDynamic`. The\n * latter tracks whether the body has dynamic content that's been wrapped in\n * Suspense (i.e., the page is partially dynamic). The outlet rendering tells us\n * about the structural opt-in for an empty shell, not about the body being\n * partially dynamic. The distinction matters because dynamic metadata is only\n * acceptable when the page is partially dynamic (via real body holes), and we\n * don't want this outlet-based detection to mask that case.\n */\nfunction trackOutletSuspenseAboveBody(\n componentStack: string,\n dynamicValidation: DynamicValidationState\n): void {\n if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n dynamicValidation.hasSuspenseAboveBody = true\n }\n}\n\nexport function trackDynamicAccessInStaticRoute(\n dynamicReason: unknown,\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n clientDynamic: DynamicTrackingState,\n isServerPartial: boolean,\n kind: StaticValidationHoleKind\n) {\n const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic)\n\n if (hasOutletRegex.test(componentStack)) {\n trackOutletSuspenseAboveBody(componentStack, dynamicValidation)\n return\n }\n if (hasMetadataRegex.test(componentStack)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(\n createMetadataErrorInStaticRoute(kind, workStore.route),\n componentStack,\n null\n )\n )\n return\n }\n if (hasViewportRegex.test(componentStack)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(\n createViewportErrorInStaticRoute(kind, workStore.route),\n componentStack,\n null\n )\n )\n return\n }\n\n let hasSuspense = false\n if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n // this error had a Suspense boundary above it, and it's above the body as well.\n dynamicValidation.hasSuspenseAboveBody = true\n hasSuspense = true\n } else if (hasSuspenseRegex.test(componentStack)) {\n // this error had a Suspense boundary above it.\n hasSuspense = true\n }\n\n if (hasSuspense) {\n if (!isServerPartial) {\n // If we don't have holes caused by server data, then any holes must be caused\n // by client-only code, which is allowed.\n dynamicValidation.hasAllowedDynamic = true\n return\n }\n\n // We have holes that may be caused by server data.\n if (syncDynamicError || isClientHookDynamicError(dynamicReason)) {\n // We know this hole wasn't caused by server data, so it's allowed\n // (because it's wrapped in a Suspense)\n dynamicValidation.hasAllowedDynamic = true\n return\n }\n\n // Any remaining hole may be caused by a server hole.\n // These are not allowed even with Suspense.\n // (NOTE: this may misreport valid client dynamic holes as server holes)\n dynamicValidation.dynamicErrors.push(\n addErrorContext(\n createBodyErrorInStaticRoute(kind, workStore.route),\n componentStack,\n null\n )\n )\n return\n }\n\n if (syncDynamicError) {\n dynamicValidation.dynamicErrors.push(syncDynamicError)\n return\n }\n\n if (isClientHookDynamicError(dynamicReason)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(dynamicReason, componentStack, null)\n )\n return\n }\n\n const error = addErrorContext(\n isServerPartial\n ? // This hole may be caused by server data.\n // (NOTE: this may misreport client dynamic holes as server holes)\n createBodyErrorInStaticRoute(kind, workStore.route)\n : // TODO(ensure-static): this could be something client-specific because we know\n // that server data is complete\n createBodyError(kind, workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicErrors.push(error)\n}\n\nexport function trackAllowedDynamicAccess(\n dynamicReason: unknown,\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n clientDynamic: DynamicTrackingState\n) {\n const dynamicHoleKind = DynamicHoleKind.RuntimeOrDynamic\n\n const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic)\n\n if (hasOutletRegex.test(componentStack)) {\n trackOutletSuspenseAboveBody(componentStack, dynamicValidation)\n return\n } else if (hasMetadataRegex.test(componentStack)) {\n dynamicValidation.hasDynamicMetadata = true\n return\n } else if (hasViewportRegex.test(componentStack)) {\n dynamicValidation.hasDynamicViewport = true\n return\n } else if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule.\n // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense\n // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering.\n dynamicValidation.hasAllowedDynamic = true\n dynamicValidation.hasSuspenseAboveBody = true\n return\n } else if (hasSuspenseRegex.test(componentStack)) {\n // this error had a Suspense boundary above it so we don't need to report it as a source\n // of disallowed\n dynamicValidation.hasAllowedDynamic = true\n return\n } else if (syncDynamicError) {\n dynamicValidation.dynamicErrors.push(syncDynamicError)\n return\n }\n\n if (isClientHookDynamicError(dynamicReason)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(dynamicReason, componentStack, null)\n )\n return\n }\n\n const error = addErrorContext(\n createBodyError(dynamicHoleKind, workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n}\n\nexport enum DynamicHoleKind {\n /** We know that this hole is caused by runtime data. */\n Runtime = 1,\n /** We know that this hole is caused by link data. */\n Link = 2,\n /** We know that this hole is caused by navigation(). */\n Navigation = 3,\n /** We know that this hole is caused by prefetch(). */\n Prefetch = 4,\n /** We know that this hole is caused by dynamic data. */\n Dynamic = 5,\n /** We know that this hole is caused by runtime or dynamic data, but don't know which. */\n RuntimeOrDynamic = 6,\n}\n\n// In Instant Validation we can always discriminate between runtime and dynamic.\nexport type InstantValidationHoleKind = Exclude<\n DynamicHoleKind,\n DynamicHoleKind.RuntimeOrDynamic\n>\n\nexport type StaticValidationHoleKind =\n // During dev-time static validation we can discriminate runtime and dynamic.\n | DynamicHoleKind.Runtime\n | DynamicHoleKind.Dynamic\n // During build-time static validation we can't discriminate runtime and dynamic.\n | DynamicHoleKind.RuntimeOrDynamic\n\n/** Stores dynamic reasons used during an SSR render in instant validation. */\nexport type InstantValidationState = {\n hasDynamicMetadata: boolean\n hasAllowedClientDynamicAboveBoundary: boolean\n dynamicMetadata: null | Error\n hasDynamicViewport: boolean\n hasAllowedDynamic: boolean\n dynamicErrors: Array\n validationPreventingErrors: Array\n thrownErrorsOutsideBoundary: Array\n /** Per-slot config factories. Index 0 is the root config (fallback).\n * Indices 1+ correspond to slot marker components in the tree. */\n slotStacks: Array<(() => Error) | null>\n}\n\nexport function createInstantValidationState(\n slotStacks: Array<(() => Error) | null>\n): InstantValidationState {\n return {\n hasDynamicMetadata: false,\n hasAllowedClientDynamicAboveBoundary: false,\n dynamicMetadata: null,\n hasDynamicViewport: false,\n hasAllowedDynamic: false,\n dynamicErrors: [],\n validationPreventingErrors: [],\n thrownErrorsOutsideBoundary: [],\n slotStacks,\n }\n}\n\nexport function trackDynamicHoleInNavigation(\n dynamicReason: unknown,\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: InstantValidationState,\n clientDynamic: DynamicTrackingState,\n kind: InstantValidationHoleKind,\n boundaryState: ValidationBoundaryTracking\n) {\n const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic)\n\n if (hasOutletRegex.test(componentStack)) {\n // We don't need to track that this is dynamic. It is only so when something else is also dynamic.\n return\n }\n // Resolve the config stack for this specific error. If the error\n // is inside a slot marker, use that slot's config. Otherwise fall\n // back to the default.\n const effectiveCreateInstantStack = resolveInstantStack(\n componentStack,\n dynamicValidation\n )\n\n if (hasMetadataRegex.test(componentStack)) {\n const error = addErrorContext(\n createMetadataError(kind, workStore.route),\n componentStack,\n effectiveCreateInstantStack\n )\n dynamicValidation.dynamicMetadata = error\n return\n }\n if (hasViewportRegex.test(componentStack)) {\n const error = addErrorContext(\n createViewportError(kind, workStore.route),\n componentStack,\n effectiveCreateInstantStack\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n }\n\n const boundaryLocation =\n hasInstantValidationBoundaryRegex.exec(componentStack)\n if (!boundaryLocation) {\n // We don't see the validation boundary in the component stack,\n // so this hole must be coming from a shared parent.\n // Shared parents are fully resolved and don't have RSC holes,\n // but they can still suspend in a client component during SSR.\n\n // If we managed to render all the validation boundaries, that means\n // that the client holes aren't blocking validation and we can disregard them.\n // Note that we don't even care whether they have suspense or not.\n if (allRequiredBoundariesRendered(boundaryState)) {\n dynamicValidation.hasAllowedClientDynamicAboveBoundary = true\n dynamicValidation.hasAllowedDynamic = true // Holes outside the boundary contribute to allowing dynamic metadata\n return\n } else {\n // TODO(instant-validation) TODO(NAR-787)\n // If shared parents blocked us from validating, we should only log\n // the errors from the innermost (segments), i.e. omit layouts whose\n // slots managed to render (because clearly they didn't block validation)\n const message = `Route \"${workStore.route}\": Could not validate \\`instant\\` because a Client Component in a parent segment prevented the page from rendering.`\n const error = addErrorContext(\n new Error(message),\n componentStack,\n effectiveCreateInstantStack\n )\n dynamicValidation.validationPreventingErrors.push(error)\n return\n }\n } else {\n // The hole originates inside the validation boundary.\n //\n // Check if we have a Suspense above the hole, but below the validation boundary.\n // If we do, then this dynamic usage wouldn't block a navigation to this subtree.\n // Conversely, if the nearest suspense is above the validation boundary, then this subtree would block.\n //\n // Note that in the component stack, children come before parents.\n //\n // Valid:\n // ...\n // at Suspense\n // ...\n // at __next_prefetch_validation_boundary__\n //\n // Invalid:\n // ...\n // at __next_prefetch_validation_boundary__\n // ...\n // at Suspense\n //\n const suspenseLocation = hasSuspenseRegex.exec(componentStack)\n if (suspenseLocation) {\n if (suspenseLocation.index < boundaryLocation.index) {\n dynamicValidation.hasAllowedDynamic = true\n return\n } else {\n // invalid - fallthrough\n }\n }\n }\n\n if (syncDynamicError) {\n if (\n effectiveCreateInstantStack !== null &&\n syncDynamicError.cause === undefined\n ) {\n syncDynamicError.cause = effectiveCreateInstantStack()\n }\n dynamicValidation.dynamicErrors.push(syncDynamicError)\n return\n }\n\n if (isClientHookDynamicError(dynamicReason)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(\n dynamicReason,\n componentStack,\n effectiveCreateInstantStack\n )\n )\n return\n }\n\n const error = addErrorContext(\n createBodyErrorInNavigation(kind, workStore.route),\n componentStack,\n effectiveCreateInstantStack\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n}\n\nfunction createBodyError(kind: StaticValidationHoleKind, route: string): Error {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeBodyError(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicBodyError(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createDynamicOrRuntimeBodyError(route)\n }\n}\n\nfunction createBodyErrorInNavigation(\n kind: InstantValidationHoleKind,\n route: string\n): Error {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeBodyErrorInNavigation(route)\n case DynamicHoleKind.Link:\n return createLinkBodyErrorInNavigation(route)\n case DynamicHoleKind.Navigation:\n return createNavigationBodyErrorInNavigation(route)\n case DynamicHoleKind.Prefetch:\n return createPrefetchBodyErrorInNavigation(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicBodyErrorInNavigation(route)\n }\n}\n\nfunction createMetadataError(kind: DynamicHoleKind, route: string): Error {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeMetadataError(route)\n case DynamicHoleKind.Link:\n return createLinkMetadataError(route)\n case DynamicHoleKind.Navigation:\n return createNavigationMetadataError(route)\n case DynamicHoleKind.Prefetch:\n return createPrefetchMetadataError(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicMetadataError(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createDynamicOrRuntimeMetadataError(route)\n }\n}\n\nfunction createViewportError(kind: DynamicHoleKind, route: string): Error {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeViewportError(route)\n case DynamicHoleKind.Link:\n return createLinkViewportError(route)\n case DynamicHoleKind.Navigation:\n return createNavigationViewportError(route)\n case DynamicHoleKind.Prefetch:\n return createPrefetchViewportError(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicViewportError(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createDynamicOrRuntimeViewportError(route)\n }\n}\n\nfunction createBodyErrorInStaticRoute(\n kind: StaticValidationHoleKind,\n route: string\n): Error {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeBodyErrorInStaticRoute(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicBodyErrorInStaticRoute(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createNonPrerenderableBodyErrorInStaticRoute(route)\n }\n}\n\nfunction createMetadataErrorInStaticRoute(\n kind: StaticValidationHoleKind,\n route: string\n) {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeMetadataErrorInStaticRoute(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicMetadataErrorInStaticRoute(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createNonPrerenderableMetadataErrorInStaticRoute(route)\n }\n}\n\nfunction createViewportErrorInStaticRoute(\n kind: StaticValidationHoleKind,\n route: string\n) {\n switch (kind) {\n case DynamicHoleKind.Runtime:\n return createRuntimeViewportErrorInStaticRoute(route)\n case DynamicHoleKind.Dynamic:\n return createDynamicViewportErrorInStaticRoute(route)\n case DynamicHoleKind.RuntimeOrDynamic:\n return createNonPrerenderableViewportErrorInStaticRoute(route)\n }\n}\n\nexport function trackThrownErrorInNavigation(\n workStore: WorkStore,\n dynamicValidation: InstantValidationState,\n thrownValue: unknown,\n componentStack: string,\n reactBrowserBailout: boolean\n) {\n const boundaryLocation =\n hasInstantValidationBoundaryRegex.exec(componentStack)\n if (!boundaryLocation) {\n // There's no validation boundary on the component stack.\n // This error may have blocked a boundary from rendering.\n\n // Wrap the error to provide component context.\n // This helps for errors from node_modules which would otherwise\n // have no useful stack information due to ignore-listing,\n // e.g. next/dynamic with `ssr: false`.\n if (reactBrowserBailout) {\n // React preserves Next's branded bailout reason as the error cause.\n // Replace the internal wrapper before storing the user-facing diagnostic.\n const browserBailoutReason = getReactBrowserBailoutReason(thrownValue)\n if (browserBailoutReason !== undefined) {\n const browserBailoutError = thrownValue as Error\n browserBailoutError.cause = browserBailoutReason\n }\n }\n\n const error = addErrorContext(\n new Error(\n 'An error occurred while attempting to validate instant UI. This error may be preventing the validation from completing.',\n { cause: thrownValue }\n ),\n componentStack,\n null\n )\n dynamicValidation.thrownErrorsOutsideBoundary.push(error)\n } else {\n // There's validation boundary on the component stack,\n // so we know this error didn't block a validation boundary from rendering.\n // However, this error might be hiding be hiding dynamic content that would\n // cause validation to fail.\n const suspenseLocation = hasSuspenseRegex.exec(componentStack)\n if (suspenseLocation) {\n if (suspenseLocation.index < boundaryLocation.index) {\n // There's a Suspense below the validation boundary but above this error's location.\n // This subtree can't fail instant validation because any potential\n // dynamic holes would be guarded by the Suspense anyway,\n // so we can allow this.\n return\n } else {\n // invalid - fallthrough\n }\n }\n if (reactBrowserBailout) {\n // React preserves Next's branded bailout reason as the error cause.\n // Replace the internal wrapper before storing the user-facing diagnostic.\n const browserBailoutReason = getReactBrowserBailoutReason(thrownValue)\n if (browserBailoutReason !== undefined) {\n const browserBailoutError = thrownValue as Error\n browserBailoutError.cause = browserBailoutReason\n }\n }\n\n const message = `Route \"${workStore.route}\": Could not validate \\`instant\\` because an error prevented the target segment from rendering.`\n const error = addErrorContext(\n new Error(message, { cause: thrownValue }),\n componentStack,\n null // TODO(instant-validation-build): conflicting use of cause\n )\n dynamicValidation.validationPreventingErrors.push(error)\n }\n}\n\nexport function trackDynamicHoleInStaticShell(\n dynamicReason: unknown,\n workStore: WorkStore,\n componentStack: string,\n dynamicValidation: DynamicValidationState,\n clientDynamic: DynamicTrackingState,\n kind: DynamicHoleKind.Runtime | DynamicHoleKind.Dynamic\n) {\n const syncDynamicError = getPendingClientSyncDynamicError(clientDynamic)\n\n if (hasOutletRegex.test(componentStack)) {\n trackOutletSuspenseAboveBody(componentStack, dynamicValidation)\n return\n } else if (hasMetadataRegex.test(componentStack)) {\n const error = addErrorContext(\n createMetadataError(kind, workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicMetadata = error\n return\n } else if (hasViewportRegex.test(componentStack)) {\n const error = addErrorContext(\n createViewportError(kind, workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n } else if (\n hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(\n componentStack\n )\n ) {\n // For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule.\n // But if you have Suspense above body, the prelude is empty but we allow that because having Suspense\n // is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering.\n dynamicValidation.hasAllowedDynamic = true\n dynamicValidation.hasSuspenseAboveBody = true\n return\n } else if (hasSuspenseRegex.test(componentStack)) {\n // this error had a Suspense boundary above it so we don't need to report it as a source\n // of disallowed\n dynamicValidation.hasAllowedDynamic = true\n return\n } else if (syncDynamicError) {\n dynamicValidation.dynamicErrors.push(syncDynamicError)\n return\n }\n\n if (isClientHookDynamicError(dynamicReason)) {\n dynamicValidation.dynamicErrors.push(\n addErrorContext(dynamicReason, componentStack, null)\n )\n return\n }\n\n const error = addErrorContext(\n kind === DynamicHoleKind.Runtime\n ? createRuntimeBodyError(workStore.route)\n : createDynamicBodyError(workStore.route),\n componentStack,\n null\n )\n dynamicValidation.dynamicErrors.push(error)\n return\n}\n\n/**\n * In dev mode, we prefer using the owner stack, otherwise the provided\n * component stack is used.\n */\nfunction addErrorContext(\n error: Error,\n componentStack: string,\n createInstantStack: (() => Error) | null\n) {\n const ownerStack =\n process.env.NODE_ENV !== 'production' && React.captureOwnerStack\n ? React.captureOwnerStack()\n : null\n\n if (createInstantStack !== null) {\n error.cause = createInstantStack()\n }\n // TODO go back to owner stack here if available. This is temporarily using componentStack to get the right\n //\n error.stack =\n error.name + ': ' + error.message + (ownerStack || componentStack)\n return error\n}\n\nexport enum PreludeState {\n Full = 0,\n Empty = 1,\n Errored = 2,\n}\n\nexport function logDisallowedDynamicError(\n workStore: WorkStore,\n error: Error\n): void {\n console.error(error)\n logBuildDebugHint(workStore.route)\n}\n\nexport function throwIfSyncIOUsed(\n workStore: WorkStore,\n serverDynamic: DynamicTrackingState\n) {\n if (serverDynamic.syncDynamicErrorWithStack) {\n logDisallowedDynamicError(\n workStore,\n serverDynamic.syncDynamicErrorWithStack\n )\n throw new StaticGenBailoutError()\n }\n}\n\nexport function throwIfDisallowedDynamic(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: DynamicValidationState,\n serverDynamic: DynamicTrackingState,\n allowEmptyStaticShell: boolean\n): void {\n const dynamicHoleKind = DynamicHoleKind.RuntimeOrDynamic\n\n throwIfSyncIOUsed(workStore, serverDynamic)\n\n // The dynamic metadata error is a mistake-detection signal. It fires when the\n // rest of the shell is otherwise fully static apart from metadata, suggesting\n // the dynamic data access in `generateMetadata` was probably unintentional.\n // That condition is independent of whether the user or build phase accepted\n // an empty shell, so we surface it before any opt-in bypass.\n if (\n prelude === PreludeState.Full &&\n dynamicValidation.hasAllowedDynamic === false &&\n dynamicValidation.hasDynamicMetadata\n ) {\n console.error(createMetadataError(dynamicHoleKind, workStore.route).message)\n throw new StaticGenBailoutError()\n }\n\n // Either flag expresses \"this shell is allowed to be empty/blocking\":\n // - `allowEmptyStaticShell` covers `instant = false` (user opt-in)\n // and the build-phase fallback-shell case.\n // - `hasSuspenseAboveBody` is the structural opt-in inside the user's root\n // layout.\n // Treat them as synonyms for the purpose of bypassing shell-failure errors.\n if (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody) {\n return\n }\n\n if (prelude !== PreludeState.Full) {\n // We didn't have any sync bailouts but there may be user code which\n // blocked the root. We would have captured these during the prerender\n // and can log them here and then terminate the build/validating render\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n for (let i = 0; i < dynamicErrors.length; i++) {\n logDisallowedDynamicError(workStore, dynamicErrors[i])\n }\n\n throw new StaticGenBailoutError()\n }\n\n // If we got this far then the only other thing that could be blocking\n // the root is dynamic Viewport. If this is dynamic then\n // you need to opt into that by adding a Suspense boundary above the body\n // to indicate your are ok with fully dynamic rendering.\n if (dynamicValidation.hasDynamicViewport) {\n console.error(\n createViewportError(dynamicHoleKind, workStore.route).message\n )\n throw new StaticGenBailoutError()\n }\n\n if (prelude === PreludeState.Empty) {\n // If we ever get this far then we messed up the tracking of invalid dynamic.\n // We still adhere to the constraint that you must produce a shell but invite the\n // user to report this as a bug in Next.js.\n console.error(\n `Route \"${workStore.route}\" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`\n )\n throw new StaticGenBailoutError()\n }\n }\n}\n\nexport function throwIfDisallowedDynamicInStaticRoute(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: DynamicValidationState,\n serverDynamic: DynamicTrackingState,\n isFallbackShell: boolean,\n allowEmptyStaticShell: boolean,\n isServerPartial: boolean\n): void {\n const reasons = getDisallowedReasonsInStaticRoute(\n workStore,\n prelude,\n dynamicValidation,\n serverDynamic,\n isFallbackShell,\n allowEmptyStaticShell,\n isServerPartial\n )\n if (reasons.length > 0) {\n for (const reason of reasons) {\n logDisallowedDynamicError(workStore, reason)\n }\n throw new StaticGenBailoutError()\n }\n}\n\nexport function getDisallowedReasonsInStaticRoute(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: DynamicValidationState,\n serverDynamic: DynamicTrackingState | null,\n isFallbackShell: boolean,\n allowEmptyStaticShell: boolean,\n isServerPartial: boolean\n): Error[] {\n if (serverDynamic && serverDynamic.syncDynamicErrorWithStack) {\n return [serverDynamic.syncDynamicErrorWithStack]\n }\n\n // We do a fallback shell prerender, but it's not meant to be validated --\n // we just need it to create the relevant prerender outputs.\n if (isFallbackShell) {\n return []\n }\n\n // Suspense-above-body and `instant = false` bypass reporting\n // that the shell is blocked. However, if we have non-prerenderable server\n // data, we still have to error, regardless of those two.\n if (\n !isServerPartial &&\n (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody)\n ) {\n return []\n }\n\n const { dynamicErrors } = dynamicValidation\n if (dynamicErrors.length > 0) {\n return dynamicErrors\n }\n\n // Dynamic data may have been passed into a client component without calling `use()`,\n // in which case we wouldn't see it during the prerender, but still need to error.\n // Fall back to a generic error message.\n if (isServerPartial) {\n return [\n new Error(\n `Route \"${workStore.route}\": Next.js encountered data that is not available during a static prerender, but is unable to provide a location.`\n ),\n ]\n }\n\n if (prelude === PreludeState.Empty || prelude === PreludeState.Errored) {\n // We've somehow ended up with an empty prelude but no dynamic errors.\n // We must've messed up the tracking somehow.\n return [\n new InvariantError(\n `Route \"${workStore.route}\" did not produce a static shell and Next.js was unable to determine a reason.`\n ),\n ]\n }\n return []\n}\n\nexport function getStaticShellDisallowedDynamicReasons(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: DynamicValidationState,\n allowEmptyStaticShell: boolean\n): Array {\n // The dynamic metadata error is a mistake-detection signal. It fires when the\n // rest of the shell is otherwise fully static apart from metadata, suggesting\n // the dynamic data access in `generateMetadata` was probably unintentional.\n // That condition is independent of whether the user or build phase accepted\n // an empty shell, so we surface it before any opt-in bypass.\n if (\n prelude === PreludeState.Full &&\n dynamicValidation.hasAllowedDynamic === false &&\n dynamicValidation.dynamicErrors.length === 0 &&\n dynamicValidation.dynamicMetadata\n ) {\n return [dynamicValidation.dynamicMetadata]\n }\n\n // Either flag expresses \"this shell is allowed to be empty/blocking\":\n // - `allowEmptyStaticShell` covers `instant = false` (user opt-in)\n // and the build-phase fallback-shell case.\n // - `hasSuspenseAboveBody` is the structural opt-in inside the user's root\n // layout.\n // Treat them as synonyms for the purpose of bypassing shell-failure errors.\n if (allowEmptyStaticShell || dynamicValidation.hasSuspenseAboveBody) {\n return []\n }\n\n if (prelude !== PreludeState.Full) {\n // We didn't have any sync bailouts but there may be user code which\n // blocked the root. We would have captured these during the prerender\n // and can log them here and then terminate the build/validating render\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n return dynamicErrors\n }\n\n if (prelude === PreludeState.Empty) {\n // If we ever get this far then we messed up the tracking of invalid dynamic.\n // We still adhere to the constraint that you must produce a shell but invite the\n // user to report this as a bug in Next.js.\n return [\n new InvariantError(\n `Route \"${workStore.route}\" did not produce a static shell and Next.js was unable to determine a reason.`\n ),\n ]\n }\n }\n // We had a non-empty prelude and there are no dynamic holes\n return []\n}\n\n/**\n * `errors` are validation failures that should be surfaced immediately.\n * `deferredFallback` carries a missing-boundary explanation that the caller\n * should hold back until *every* validation depth has been tried — a missing\n * boundary often just means a parent layout intentionally omitted a slot, and\n * a different depth's validation may surface a more meaningful error.\n */\nexport type NavigationValidationResult =\n // instances that block instant navigation\n | Array\n // validation was blocked with zero or more reasons\n | Error\n | AggregateError\n\nexport function getNavigationDisallowedDynamicReasons(\n workStore: WorkStore,\n prelude: PreludeState,\n dynamicValidation: InstantValidationState,\n validationSampleTracking: InstantValidationSampleTracking | null,\n boundaryState: ValidationBoundaryTracking,\n devRenderDidError: boolean\n): NavigationValidationResult {\n // If we have errors related to missing samples, those should take precedence over everything else.\n if (validationSampleTracking) {\n const { missingSampleErrors } = validationSampleTracking\n if (missingSampleErrors.length > 0) {\n return missingSampleErrors\n }\n }\n\n const { validationPreventingErrors } = dynamicValidation\n if (validationPreventingErrors.length > 0) {\n if (process.env.__NEXT_DEV_SERVER && devRenderDidError) {\n // The dev render already surfaced server errors to the user.\n // The same errors likely caused validation to be inconclusive,\n // so reporting them again as validation failures would be noisy.\n return []\n }\n return validationPreventingErrors\n }\n\n // NOTE: We don't care about Suspense above body here,\n // we're only concerned with the validation boundary\n if (prelude !== PreludeState.Full) {\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n return dynamicErrors\n }\n\n if (\n prelude === PreludeState.Empty &&\n !dynamicValidation.hasAllowedClientDynamicAboveBoundary &&\n allRequiredBoundariesRendered(boundaryState)\n ) {\n // If we ever get this far then we messed up the tracking of invalid\n // dynamic. (When boundaries are missing the deferred fallback below\n // will surface a more useful error.)\n return new InvariantError(\n `Route \"${workStore.route}\" failed to render during instant validation and Next.js was unable to determine a reason.`\n )\n }\n } else {\n const dynamicErrors = dynamicValidation.dynamicErrors\n if (dynamicErrors.length > 0) {\n return dynamicErrors\n }\n\n if (\n dynamicValidation.hasAllowedDynamic === false &&\n dynamicValidation.dynamicMetadata\n ) {\n return [dynamicValidation.dynamicMetadata]\n }\n }\n\n // Missing boundaries on their own aren't a strong signal — a parent\n // layout may legitimately omit a slot. Defer this so the caller can\n // try shallower validation depths first; if every depth comes up\n // empty we still want to surface this so the user is made aware that\n // validation didn't complete. When we add a markers API, the\n // marker-based variant of this check can become strict again.\n if (!allRequiredBoundariesRendered(boundaryState)) {\n const { thrownErrorsOutsideBoundary } = dynamicValidation\n const rootInstantStack = dynamicValidation.slotStacks[0]\n if (thrownErrorsOutsideBoundary.length === 0) {\n const missingFiles: string[] = []\n for (const [id, filePaths] of boundaryState.requiredIds) {\n if (!boundaryState.renderedIds.has(id)) {\n for (const filePath of filePaths) {\n let normalized = filePath\n .replace(/^\\[project\\][\\\\/]?/, '')\n .replace(process.cwd() + '/', '')\n .replace(process.cwd() + '\\\\', '')\n missingFiles.push(normalized)\n }\n }\n }\n missingFiles.sort()\n return createUnrenderedSegmentError(workStore.route, missingFiles)\n } else if (process.env.__NEXT_DEV_SERVER && devRenderDidError) {\n // Errors outside the boundary likely blocked it from rendering,\n // but they're already being reported to the user via the dev\n // render. Suppress the validation failure to avoid noise.\n return []\n } else if (thrownErrorsOutsideBoundary.length === 1) {\n const message = `Route \"${workStore.route}\": Could not validate \\`instant\\` because the target segment was prevented from rendering, likely due to the following error.`\n const error = rootInstantStack !== null ? rootInstantStack() : new Error()\n error.name = 'Error'\n error.message = message\n return new AggregateError([\n error,\n thrownErrorsOutsideBoundary[0] as Error,\n ])\n } else {\n const message = `Route \"${workStore.route}\": Could not validate \\`instant\\` because the target segment was prevented from rendering, likely due to one of the following errors.`\n const error = rootInstantStack !== null ? rootInstantStack() : new Error()\n error.name = 'Error'\n error.message = message\n return new AggregateError([\n error,\n ...(thrownErrorsOutsideBoundary as Error[]),\n ])\n }\n }\n\n // We had a non-empty prelude and there are no dynamic holes\n return []\n}\n"],"names":["React","DynamicServerError","StaticGenBailoutError","getStagedRenderingController","isClientHookDynamicError","METADATA_BOUNDARY_NAME","VIEWPORT_BOUNDARY_NAME","OUTLET_BOUNDARY_NAME","ROOT_LAYOUT_BOUNDARY_NAME","scheduleOnNextTick","createRuntimeBodyError","createDynamicBodyError","createRuntimeBodyErrorInNavigation","createNavigationBodyErrorInNavigation","createPrefetchBodyErrorInNavigation","createDynamicBodyErrorInNavigation","createDynamicOrRuntimeBodyError","createRuntimeMetadataError","createDynamicMetadataError","createRuntimeViewportError","createNavigationViewportError","createPrefetchViewportError","createDynamicViewportError","createDynamicOrRuntimeViewportError","createDynamicOrRuntimeMetadataError","logBuildDebugHint","createLinkBodyErrorInNavigation","createLinkMetadataError","createLinkViewportError","createNavigationMetadataError","createPrefetchMetadataError","createNonPrerenderableMetadataErrorInStaticRoute","createNonPrerenderableViewportErrorInStaticRoute","createNonPrerenderableBodyErrorInStaticRoute","createRuntimeBodyErrorInStaticRoute","createDynamicBodyErrorInStaticRoute","createRuntimeMetadataErrorInStaticRoute","createDynamicMetadataErrorInStaticRoute","createRuntimeViewportErrorInStaticRoute","createDynamicViewportErrorInStaticRoute","InvariantError","INSTANT_VALIDATION_BOUNDARY_NAME","INSTANT_SLOT_MARKER_PREFIX","INSTANT_SLOT_MARKER_SUFFIX","allRequiredBoundariesRendered","createUnrenderedSegmentError","getReactBrowserBailoutReason","createDynamicTrackingState","isDebugDynamicAccesses","dynamicAccesses","syncDynamicErrorWithStack","syncDynamicErrorWithStackPostMicrotask","createDynamicValidationState","hasSuspenseAboveBody","hasDynamicMetadata","dynamicMetadata","hasDynamicViewport","hasAllowedDynamic","dynamicErrors","getPendingClientSyncDynamicError","clientDynamic","getFirstDynamicReason","trackingState","expression","markCurrentScopeAsDynamic","store","workUnitStore","type","forceDynamic","forceStatic","dynamicShouldError","route","revalidate","err","dynamicUsageDescription","dynamicUsageStack","stack","markRequestStoreAsDynamic","throwToInterruptStaticGeneration","prerenderStore","trackDynamicDataInDynamicRender","requestStore","process","env","__NEXT_DEV_SERVER","phase","usedDynamic","abortOnSynchronousDynamicDataAccess","reason","error","createPrerenderInterruptedError","controller","abort","dynamicTracking","push","Error","undefined","abortOnSynchronousPlatformIOAccess","errorWithStack","queueMicrotask","abortAndThrowOnSynchronousRequestDataAccess","prerenderSignal","signal","aborted","NEXT_PRERENDER_INTERRUPTED","message","digest","isPrerenderInterruptedError","accessedDynamicData","length","consumeDynamicAccess","serverDynamic","formatDynamicAPIAccesses","filter","access","map","split","slice","line","includes","join","createHangingInputAbortSignal","AbortController","cacheSignal","inputReady","then","stagedRendering","finalStage","waitForStage","noop","annotateDynamicAccess","hasSuspenseRegex","bodyAndImplicitTags","hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex","RegExp","hasMetadataRegex","hasViewportRegex","hasOutletRegex","hasInstantValidationBoundaryRegex","slotMarkerRegex","resolveInstantStack","componentStack","dynamicValidation","slotStacks","match","exec","slotIndex","parseInt","slotStack","trackOutletSuspenseAboveBody","test","trackDynamicAccessInStaticRoute","dynamicReason","workStore","isServerPartial","kind","syncDynamicError","addErrorContext","createMetadataErrorInStaticRoute","createViewportErrorInStaticRoute","hasSuspense","createBodyErrorInStaticRoute","createBodyError","trackAllowedDynamicAccess","dynamicHoleKind","DynamicHoleKind","createInstantValidationState","hasAllowedClientDynamicAboveBoundary","validationPreventingErrors","thrownErrorsOutsideBoundary","trackDynamicHoleInNavigation","boundaryState","effectiveCreateInstantStack","createMetadataError","createViewportError","boundaryLocation","suspenseLocation","index","cause","createBodyErrorInNavigation","trackThrownErrorInNavigation","thrownValue","reactBrowserBailout","browserBailoutReason","browserBailoutError","trackDynamicHoleInStaticShell","createInstantStack","ownerStack","NODE_ENV","captureOwnerStack","name","PreludeState","logDisallowedDynamicError","console","throwIfSyncIOUsed","throwIfDisallowedDynamic","prelude","allowEmptyStaticShell","i","throwIfDisallowedDynamicInStaticRoute","isFallbackShell","reasons","getDisallowedReasonsInStaticRoute","getStaticShellDisallowedDynamicReasons","getNavigationDisallowedDynamicReasons","validationSampleTracking","devRenderDidError","missingSampleErrors","rootInstantStack","missingFiles","id","filePaths","requiredIds","renderedIds","has","filePath","normalized","replace","cwd","sort","AggregateError"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 3073, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/instant-validation/boundary-constants.ts"],"sourcesContent":["export const INSTANT_VALIDATION_BOUNDARY_NAME =\n '__next_instant_validation_boundary__'\n\nexport const INSTANT_SLOT_MARKER_PREFIX = '__next_instant_slot_'\nexport const INSTANT_SLOT_MARKER_SUFFIX = '__'\n"],"names":["INSTANT_VALIDATION_BOUNDARY_NAME","INSTANT_SLOT_MARKER_PREFIX","INSTANT_SLOT_MARKER_SUFFIX"],"mappings":";;;;;;;;AAAO,MAAMA,mCACX,uCAAsC;AAEjC,MAAMC,6BAA6B,uBAAsB;AACzD,MAAMC,6BAA6B,KAAI","ignoreList":[0]}}, + {"offset": {"line": 3088, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/instant-validation/boundary-tracking.tsx"],"sourcesContent":["export type ValidationBoundaryTracking = {\n /**\n * Map from boundary id (the SegmentPath where a validation boundary is\n * placed) to the file paths of modules inside that boundary's subtree.\n * When the boundary spans multiple parallel slots, each slot contributes\n * its own first-found module path so all unrendered segments can be\n * reported together.\n */\n requiredIds: Map\n renderedIds: Set\n}\n\nexport function createValidationBoundaryTracking(\n /** Pass if the render is expected to render the same IDs as a previous one. */\n matchPrevious?: ValidationBoundaryTracking\n): ValidationBoundaryTracking {\n return {\n requiredIds: matchPrevious ? new Map(matchPrevious.requiredIds) : new Map(),\n renderedIds: new Set(),\n }\n}\n\nexport function allRequiredBoundariesRendered(\n state: ValidationBoundaryTracking\n): boolean {\n for (const id of state.requiredIds.keys()) {\n if (!state.renderedIds.has(id)) {\n return false\n }\n }\n return true\n}\n"],"names":["createValidationBoundaryTracking","matchPrevious","requiredIds","Map","renderedIds","Set","allRequiredBoundariesRendered","state","id","keys","has"],"mappings":";;;;;;AAYO,SAASA,iCACd,6EAA6E,GAC7EC,aAA0C;IAE1C,OAAO;QACLC,aAAaD,gBAAgB,IAAIE,IAAIF,cAAcC,WAAW,IAAI,IAAIC;QACtEC,aAAa,IAAIC;IACnB;AACF;AAEO,SAASC,8BACdC,KAAiC;IAEjC,KAAK,MAAMC,MAAMD,MAAML,WAAW,CAACO,IAAI,GAAI;QACzC,IAAI,CAACF,MAAMH,WAAW,CAACM,GAAG,CAACF,KAAK;YAC9B,OAAO;QACT;IACF;IACA,OAAO;AACT","ignoreList":[0]}}, + {"offset": {"line": 3112, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/manifests-singleton.ts"],"sourcesContent":["import type { ActionManifest } from '../../build/webpack/plugins/flight-client-entry-plugin'\nimport type { ClientReferenceManifest } from '../../build/webpack/plugins/flight-manifest-plugin'\nimport type { DeepReadonly } from '../../shared/lib/deep-readonly'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport { pathHasPrefix } from '../../shared/lib/router/utils/path-has-prefix'\nimport { removePathPrefix } from '../../shared/lib/router/utils/remove-path-prefix'\nimport { mightBeServerReferenceId } from '../../shared/lib/server-reference-info'\nimport { wellKnownProperties } from '../../shared/lib/utils/reflect-utils'\nimport { workAsyncStorage } from './work-async-storage.external'\nimport {\n workUnitAsyncStorage,\n type WorkUnitStore,\n} from './work-unit-async-storage.external'\n\nexport interface ServerModuleMap {\n readonly [name: string]: {\n readonly id: string | number\n readonly name: string\n readonly chunks: Readonly> // currently not used\n readonly async?: boolean\n }\n}\n\nexport function getActionNotFoundError(actionId: string | null): Error {\n return new Error(\n `Failed to find Server Action${actionId ? ` \"${actionId}\"` : ''}. This request might be from an older or newer deployment.\\nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action`\n )\n}\n\nexport function getInvalidServerReferenceIdError(id: string): Error {\n // `id` is arbitrary client-provided input. Unlike the not-found case, it has\n // not passed the length gate and can reach this error via a malformed server\n // reference in an action payload, so it may be of any length and contain\n // control characters. `JSON.stringify` escapes newlines and quotes so it\n // can't forge log lines, and truncating overly long ids prevents log\n // flooding. Ids at or below the cap are logged in full so that we only add an\n // ellipsis to ids that are meaningfully longer than the truncated length.\n const encoded = JSON.stringify(\n id.length > MAX_LOGGED_SERVER_REFERENCE_ID_LENGTH\n ? id.slice(0, TRUNCATED_SERVER_REFERENCE_ID_LENGTH) + '…'\n : id\n )\n\n return new Error(\n `The Server Reference ID did not match the expected format. Received ${encoded}.\\nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action`\n )\n}\n\n// Ids at or below the cap are logged in full. Longer ids are truncated to the\n// shorter length and marked with an ellipsis, so the cap leaves headroom over\n// the truncated length rather than ellipsizing ids that are barely too long.\nconst MAX_LOGGED_SERVER_REFERENCE_ID_LENGTH = 100\nconst TRUNCATED_SERVER_REFERENCE_ID_LENGTH = 90\n\n// This is a global singleton that is, among other things, also used to\n// encode/decode bound args of server function closures. This can't be using a\n// AsyncLocalStorage as it might happen at the module level.\nconst MANIFESTS_SINGLETON = Symbol.for('next.server.manifests')\n\ninterface RegisteredClientReferenceManifest {\n /**\n * The page the manifest was registered with. Routes are normalized app paths,\n * which is lossy (route groups, parallel slots and the trailing `/page` are\n * stripped), so this is kept alongside for consumers that need to address the\n * manifest on disk again rather than reversing the normalization.\n */\n readonly page: string\n readonly clientReferenceManifest: DeepReadonly\n}\n\ninterface ManifestsSingleton {\n readonly clientReferenceManifestsPerRoute: Map<\n string,\n RegisteredClientReferenceManifest\n >\n readonly proxiedClientReferenceManifest: DeepReadonly\n readonly rscModuleMappingForUseCache: DeepReadonly<\n ClientReferenceManifest['rscModuleMapping']\n >\n serverActionsManifest: DeepReadonly\n serverModuleMap: ServerModuleMap\n}\n\ntype GlobalThisWithManifests = typeof globalThis & {\n [MANIFESTS_SINGLETON]?: ManifestsSingleton\n}\n\ntype ClientReferenceManifestMappingProp =\n | 'clientModules'\n | 'rscModuleMapping'\n | 'edgeRscModuleMapping'\n | 'ssrModuleMapping'\n | 'edgeSSRModuleMapping'\n\nconst globalThisWithManifests = globalThis as GlobalThisWithManifests\n\nfunction isUseCacheStore(workUnitStore: WorkUnitStore | undefined): boolean {\n if (!workUnitStore) {\n return false\n }\n\n switch (workUnitStore.type) {\n case 'cache':\n case 'private-cache':\n return true\n case 'request':\n case 'unstable-cache':\n case 'prerender':\n case 'prerender-client':\n case 'prerender-legacy':\n case 'prerender-runtime':\n case 'validation-client':\n case 'build-time-generator':\n return false\n default:\n return workUnitStore satisfies never\n }\n}\n\nfunction createProxiedClientReferenceManifest(\n clientReferenceManifestsPerRoute: Map<\n string,\n RegisteredClientReferenceManifest\n >\n): Pick<\n ManifestsSingleton,\n 'proxiedClientReferenceManifest' | 'rscModuleMappingForUseCache'\n> {\n const createMappingProxy = (prop: ClientReferenceManifestMappingProp) => {\n return new Proxy(\n {},\n {\n get(_, id: string) {\n const workStore = workAsyncStorage.getStore()\n\n if (workStore) {\n const currentManifest = clientReferenceManifestsPerRoute.get(\n workStore.route\n )?.clientReferenceManifest\n\n if (currentManifest?.[prop][id]) {\n if (\n workStore.durableUseCacheEntries &&\n prop === 'clientModules'\n ) {\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (isUseCacheStore(workUnitStore)) {\n // This creates a mapping so that a given client references with name\n // `app/foo/client.tsx` is serialized as\n // ```\n // { id: `app/foo/client.tsx`, name: `*`, chunks: [\"stub\"], async: false }\n // ```\n // instead of the actual\n // ```\n // { id: 19132, name: `*`, chunks: [\"/_next/static/chunks/...\"], async: true }\n // ```\n //\n // This means that not the unstable client module id is used for the cache entry,\n // but the stable client reference name. The stable client reference name is\n // resolved against the current manifest via rscModuleMappingForUseCache when the\n // entry is read.\n const clientReferenceManifestEntry =\n currentManifest.clientModules[id]\n return {\n // Return `id` instead of `clientReferenceManifestEntry.id` here.\n id,\n name: clientReferenceManifestEntry.name,\n // Set a sentinel value just in case this does ends up being read at some point\n // in the future, then at least we'll get \"Failed to load chunk stub (404)\"\n // instead of \"Failed to load module 1234\".\n chunks: ['stub'],\n async: false,\n }\n }\n }\n return currentManifest[prop][id]\n }\n\n // In development, we also check all other manifests to see if the\n // module exists there. This is to support a scenario where React's\n // I/O tracking (dev-only) creates a connection from one page to\n // another through an emitted async I/O node that references client\n // components from the other page, e.g. in owner props.\n // TODO: Maybe we need to add a `debugBundlerConfig` option to React\n // to avoid this workaround. The current workaround has the\n // disadvantage that one might accidentally or intentionally share\n // client references across pages (e.g. by storing them in a global\n // variable), which would then only be caught in production.\n if (process.env.NODE_ENV !== 'production') {\n for (const [\n route,\n { page, clientReferenceManifest },\n ] of clientReferenceManifestsPerRoute) {\n if (route === workStore.route) {\n continue\n }\n\n const entry = clientReferenceManifest[prop][id]\n\n if (entry !== undefined) {\n if (process.env.__NEXT_DEV_SERVER) {\n // The dev validation worker rebuilds this registry in its\n // own thread, seeded with only the route it validates, so\n // it has to be told which other manifests it needs.\n workStore.additionalClientReferenceManifestPages ??=\n new Set()\n workStore.additionalClientReferenceManifestPages.add(page)\n }\n\n return entry\n }\n }\n }\n } else {\n // If there's no work store defined, we can assume that a client\n // reference manifest is needed during module evaluation, e.g. to\n // create a server function using a higher-order function. This\n // might also use client components which need to be serialized by\n // Flight, and therefore client references need to be resolvable. In\n // that case we search all page manifests to find the module.\n for (const {\n clientReferenceManifest,\n } of clientReferenceManifestsPerRoute.values()) {\n const entry = clientReferenceManifest[prop][id]\n\n if (entry !== undefined) {\n return entry\n }\n }\n }\n\n return undefined\n },\n }\n )\n }\n\n const mappingProxies = new Map<\n ClientReferenceManifestMappingProp,\n ReturnType\n >()\n\n const proxiedClientReferenceManifest = new Proxy(\n {},\n {\n get(_, prop) {\n const workStore = workAsyncStorage.getStore()\n\n switch (prop) {\n case 'moduleLoading':\n case 'entryCSSFiles':\n case 'entryJSFiles': {\n if (!workStore) {\n throw new InvariantError(\n `Cannot access \"${prop}\" without a work store.`\n )\n }\n\n const registeredManifest = clientReferenceManifestsPerRoute.get(\n workStore.route\n )\n\n if (!registeredManifest) {\n throw new InvariantError(\n `The client reference manifest for route \"${workStore.route}\" does not exist.`\n )\n }\n\n return registeredManifest.clientReferenceManifest[prop]\n }\n case 'clientModules':\n case 'rscModuleMapping':\n case 'edgeRscModuleMapping':\n case 'ssrModuleMapping':\n case 'edgeSSRModuleMapping': {\n let proxy = mappingProxies.get(prop)\n\n if (!proxy) {\n proxy = createMappingProxy(prop)\n mappingProxies.set(prop, proxy)\n }\n\n return proxy\n }\n default: {\n throw new InvariantError(\n `This is a proxied client reference manifest. The property \"${String(prop)}\" is not handled.`\n )\n }\n }\n },\n }\n ) as DeepReadonly\n\n // Performs the inverse of the clientModules isUseCacheStore(workUnitStore) special case above:\n //\n // For cache functions, don't do the usual rscModuleMapping lookup by module ID, but instead look\n // up by the stable client reference name. This is because cache entries must not depend on\n // build-local module IDs or chunks. So we need a second layer of indirection here to do client\n // reference name -> client module id -> rsc module mapping lookup.\n //\n // This one is created separately (not inside proxiedClientReferenceManifest.rscModuleMapping) as\n // we don't necessarily are inside a workUnitStore when we need to access this mapping (as opposed\n // to the clientModules mapping, which always has the ALS set).\n const rscModuleMappingForUseCache = new Proxy(\n {},\n {\n get(\n _,\n key: string\n ): ClientReferenceManifest['rscModuleMapping'][string] | undefined {\n const workStore = workAsyncStorage.getStore()\n if (workStore && workStore.durableUseCacheEntries) {\n const currentManifest = clientReferenceManifestsPerRoute.get(\n workStore.route\n )?.clientReferenceManifest\n\n const clientReferenceName = key\n const clientReferenceManifestEntry =\n currentManifest?.clientModules[clientReferenceName]\n if (clientReferenceManifestEntry === undefined) {\n return undefined\n }\n\n const clientModuleId = clientReferenceManifestEntry.id\n return currentManifest?.rscModuleMapping[clientModuleId]\n } else {\n return proxiedClientReferenceManifest.rscModuleMapping[key]\n }\n },\n }\n ) as DeepReadonly\n\n return { proxiedClientReferenceManifest, rscModuleMappingForUseCache }\n}\n\n/**\n * This function creates a Flight-acceptable server module map proxy from our\n * Server Reference Manifest similar to our client module map. This is because\n * our manifest contains a lot of internal Next.js data that are relevant to the\n * runtime, workers, etc. that React doesn't need to know.\n */\nfunction createServerModuleMap(): ServerModuleMap {\n return new Proxy(Object.create(null) as ServerModuleMap, {\n get: (target, id: string | symbol, receiver) => {\n // React's debug serialization can probe the module map like a plain object.\n // These probes are not server reference lookups.\n if (typeof id !== 'string') {\n return Reflect.get(target, id, receiver)\n }\n\n if (wellKnownProperties.has(id)) {\n return Reflect.get(target, id, receiver)\n }\n\n if (!mightBeServerReferenceId(id)) {\n throw getInvalidServerReferenceIdError(id)\n }\n\n const workers =\n getServerActionsManifest()[\n process.env.NEXT_RUNTIME === 'edge' ? 'edge' : 'node'\n ]?.[id]?.workers\n\n if (!workers) {\n throw getActionNotFoundError(id)\n }\n\n const workStore = workAsyncStorage.getStore()\n\n let workerEntry:\n | {\n moduleId: string | number\n async: boolean\n durability?: {\n codeHash: string\n runtimeEnvVarsRead: readonly string[]\n runtimeEnvVarsExistence: readonly string[]\n }\n }\n | undefined\n\n if (workStore) {\n workerEntry = workers[normalizeWorkerPageName(workStore.page)]\n } else {\n // If there's no work store defined, we can assume that a server\n // module map is needed during module evaluation, e.g. to create a\n // server action using a higher-order function. Therefore it should be\n // safe to return any entry from the manifest that matches the action\n // ID. They all refer to the same module ID, which must also exist in\n // the current page bundle. TODO: This is currently not guaranteed in\n // Turbopack, and needs to be fixed.\n workerEntry = Object.values(workers).at(0)\n }\n\n if (!workerEntry) {\n throw getActionNotFoundError(id)\n }\n\n const { moduleId, async, durability } = workerEntry\n\n return {\n id: moduleId,\n name: id,\n chunks: [],\n async,\n durability,\n }\n },\n })\n}\n\n/**\n * The flight entry loader keys actions by bundlePath. bundlePath corresponds\n * with the relative path (including 'app') to the page entrypoint.\n */\nexport function normalizeWorkerPageName(pageName: string) {\n if (pathHasPrefix(pageName, 'app')) {\n return pageName\n }\n\n return 'app' + pageName\n}\n\n/**\n * Converts a bundlePath (relative path to the entrypoint) to a routable page\n * name.\n */\nfunction denormalizeWorkerPageName(bundlePath: string) {\n return normalizeAppPath(removePathPrefix(bundlePath, 'app'))\n}\n\n/**\n * Checks if the requested action has a worker for the current page.\n * If not, it returns the first worker that has a handler for the action.\n */\nexport function selectWorkerForForwarding(\n actionId: string,\n pageName: string\n): string | undefined {\n const serverActionsManifest = getServerActionsManifest()\n const workers =\n serverActionsManifest[\n process.env.NEXT_RUNTIME === 'edge' ? 'edge' : 'node'\n ][actionId]?.workers\n\n // There are no workers to handle this action, nothing to forward to.\n if (!workers) {\n return\n }\n\n // If there is an entry for the current page, we don't need to forward.\n if (workers[normalizeWorkerPageName(pageName)]) {\n return\n }\n\n // Otherwise, grab the first worker that has a handler for this action id.\n return denormalizeWorkerPageName(Object.keys(workers)[0])\n}\n\nexport function setManifestsSingleton({\n page,\n clientReferenceManifest,\n serverActionsManifest: rawServerActionsManifest,\n}: {\n page: string\n clientReferenceManifest: DeepReadonly\n serverActionsManifest: DeepReadonly\n}) {\n const existingSingleton = globalThisWithManifests[MANIFESTS_SINGLETON]\n const route = normalizeAppPath(page)\n\n const serverActionsManifest: DeepReadonly = {\n encryptionKey: rawServerActionsManifest.encryptionKey,\n // Use null-prototypes for the action objects to prevent prototype pollution\n // from affecting action ID lookups.\n node: Object.assign(Object.create(null), rawServerActionsManifest.node),\n edge: Object.assign(Object.create(null), rawServerActionsManifest.edge),\n }\n\n if (existingSingleton) {\n existingSingleton.clientReferenceManifestsPerRoute.set(route, {\n page,\n clientReferenceManifest,\n })\n\n existingSingleton.serverActionsManifest = serverActionsManifest\n } else {\n const clientReferenceManifestsPerRoute = new Map<\n string,\n RegisteredClientReferenceManifest\n >([[route, { page, clientReferenceManifest }]])\n\n const { proxiedClientReferenceManifest, rscModuleMappingForUseCache } =\n createProxiedClientReferenceManifest(clientReferenceManifestsPerRoute)\n\n globalThisWithManifests[MANIFESTS_SINGLETON] = {\n clientReferenceManifestsPerRoute,\n proxiedClientReferenceManifest,\n rscModuleMappingForUseCache,\n serverActionsManifest,\n serverModuleMap: createServerModuleMap(),\n }\n }\n}\n\nfunction getManifestsSingleton(): ManifestsSingleton {\n const manifestSingleton = globalThisWithManifests[MANIFESTS_SINGLETON]\n\n if (!manifestSingleton) {\n throw new InvariantError('The manifests singleton was not initialized.')\n }\n\n return manifestSingleton\n}\n\n/**\n * Returns the usual client_reference_manifest.json.\n *\n * In dev, it also looks up references of other pages (due to overlapping processing on\n * navigations).\n *\n * Inside a use-cache workUnitStore, clientModules instead map to a stable dummy value (see comments\n * above).\n */\nexport function getClientReferenceManifest(): DeepReadonly {\n return getManifestsSingleton().proxiedClientReferenceManifest\n}\n\n/**\n * A mapping of client reference names to the RSC module id. (So a double lookup of clientModules ->\n * rscModuleMapping)\n */\nexport function getRscModuleMappingForUseCache(): DeepReadonly<\n ClientReferenceManifest['rscModuleMapping']\n> {\n return getManifestsSingleton().rscModuleMappingForUseCache\n}\n\nexport function getServerActionsManifest(): DeepReadonly {\n return getManifestsSingleton().serverActionsManifest\n}\n\nexport function getServerModuleMap() {\n return getManifestsSingleton().serverModuleMap\n}\n"],"names":["InvariantError","normalizeAppPath","pathHasPrefix","removePathPrefix","mightBeServerReferenceId","wellKnownProperties","workAsyncStorage","workUnitAsyncStorage","getActionNotFoundError","actionId","Error","getInvalidServerReferenceIdError","id","encoded","JSON","stringify","length","MAX_LOGGED_SERVER_REFERENCE_ID_LENGTH","slice","TRUNCATED_SERVER_REFERENCE_ID_LENGTH","MANIFESTS_SINGLETON","Symbol","for","globalThisWithManifests","globalThis","isUseCacheStore","workUnitStore","type","createProxiedClientReferenceManifest","clientReferenceManifestsPerRoute","createMappingProxy","prop","Proxy","get","_","workStore","getStore","currentManifest","route","clientReferenceManifest","durableUseCacheEntries","clientReferenceManifestEntry","clientModules","name","chunks","async","process","env","NODE_ENV","page","entry","undefined","__NEXT_DEV_SERVER","additionalClientReferenceManifestPages","Set","add","values","mappingProxies","Map","proxiedClientReferenceManifest","registeredManifest","proxy","set","String","rscModuleMappingForUseCache","key","clientReferenceName","clientModuleId","rscModuleMapping","createServerModuleMap","Object","create","target","receiver","getServerActionsManifest","Reflect","has","workers","NEXT_RUNTIME","workerEntry","normalizeWorkerPageName","at","moduleId","durability","pageName","denormalizeWorkerPageName","bundlePath","selectWorkerForForwarding","serverActionsManifest","keys","setManifestsSingleton","rawServerActionsManifest","existingSingleton","encryptionKey","node","assign","edge","serverModuleMap","getManifestsSingleton","manifestSingleton","getClientReferenceManifest","getRscModuleMappingForUseCache","getServerModuleMap"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 3491, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/segment-config/ensure-static.ts"],"sourcesContent":["import type {\n AppSegmentConfig,\n EnsureStatic,\n} from '../../../build/segment-config/app/app-segment-config'\nimport { parseLoaderTree } from '../../../shared/lib/router/utils/parse-loader-tree'\nimport {\n getLayoutOrPageModule,\n type LoaderTree,\n} from '../../lib/app-dir-module'\n\n/**\n * The outcome of resolving a route's `ensureStatic` config.\n * The ordering is intentional -- higher values indicate a\n * more constrained route that forces more request kinds to be static.\n *\n * A constraint also implies all its predecessors:\n * - `Prefetch` implies `Shell`, i.e. if prefetches are static, so are shells.\n * - `Navigation` implies `Prefetch` and `Shell`, i.e. if the whole page is static,\n * then so are its shells and prefetches.\n *\n * Note that this flattens `\"auto\"` and `false` into `None`.\n * This is because rendering code does not need to distinguish them --\n * both indicate that the route follows normal Partial Prefetching semantics\n * and does not force anything to be static.\n * However, it is only correct to collapse them into one *after* resolving the\n * config for the entire route, because they have different interactions with\n * configs from other segments on the same route.\n */\nexport enum EnsureStaticLevel {\n /** The route follows standard Partial Prefetching semantics. */\n None = 0,\n /** The route requires that app shells must be statically prerendered. */\n Shell = 1,\n /** The route requires that app shells and prefetches must be statically prerendered. */\n Prefetch = 2,\n /** The route requires that app shells, prefetches, and the whole page must be statically prerendered. */\n Navigation = 3,\n}\n\nfunction getEnsureStaticLevel(ensureStatic: EnsureStatic) {\n switch (ensureStatic) {\n case 'auto':\n case false: {\n return EnsureStaticLevel.None\n }\n case 'shell': {\n return EnsureStaticLevel.Shell\n }\n case 'prefetch': {\n return EnsureStaticLevel.Prefetch\n }\n case 'navigation': {\n return EnsureStaticLevel.Navigation\n }\n }\n}\n\nexport async function resolveEnsureStaticLevel(\n tree: LoaderTree,\n partialPrefetching: boolean\n): Promise {\n return getEnsureStaticLevel(\n await resolveEnsureStaticConfig(tree, partialPrefetching)\n )\n}\n\nexport async function resolveEnsureStaticConfig(\n tree: LoaderTree,\n partialPrefetching: boolean\n): Promise> {\n let { config, filePath } = await resolveEnsureStaticConfigImpl(tree)\n\n if (!partialPrefetching) {\n // If Partial Prefetching is not enabled for this route, we only support\n // a subset of `ensureStatic` values.\n // (We error in `getAppPageStaticInfo` if `ensureStatic` is used without enabling\n // Cache Components, so we don't have to assert that here)\n switch (config) {\n case 'auto': {\n // Default to the equivalent of Cache Components prefetching behavior.\n config = 'prefetch'\n break\n }\n case false:\n case 'shell': {\n // Not meaningful in Cache Components without Partial Prefetching\n const originalConfig = config\n config = 'prefetch'\n console.warn(\n `${formatEnsureStaticExport(originalConfig)} has no effect unless the route is using Partial Prefetching.` +\n `\\n (from: ${filePath})`\n )\n break\n }\n case 'prefetch':\n // Equivalent to regular Cache Components behavior, so we allow it\n // without warning to avoid noise when doing gradual opt-in\n break\n case 'navigation':\n // Meaningful in Cache Components, even without Partial Prefetching\n break\n default:\n config satisfies never\n }\n }\n\n if (config === false) {\n // `false` and \"auto\" are equivalent once resolved.\n return 'auto'\n } else {\n return config\n }\n}\n\ntype EnsureStaticWithSource = {\n config: EnsureStatic\n filePath: string | null\n}\n\nasync function resolveEnsureStaticConfigImpl(\n tree: LoaderTree\n): Promise {\n const { mod: layoutOrPageMod, filePath } = await getLayoutOrPageModule(tree)\n\n const config = getEnsureStaticConfigForModule(layoutOrPageMod)\n\n const parentResult: EnsureStaticWithSource = {\n config,\n filePath: filePath ?? null,\n }\n\n // Walk the slots if any and validate that they don't have incompatible configs\n // with each other. If compatible, pick the most constrained value from the slots.\n let slotsResult: EnsureStaticWithSource | null = null\n let slotResultKey: string | null = null\n const { parallelRoutes } = parseLoaderTree(tree)\n for (const parallelRouteKey in parallelRoutes) {\n const parallelRoute = parallelRoutes[parallelRouteKey]\n const childResult = await resolveEnsureStaticConfigImpl(parallelRoute)\n if (!slotsResult) {\n slotsResult = childResult\n slotResultKey = parallelRouteKey\n } else {\n // Check if the child is compatible with the current result for the slots.\n switch (compareEnsureStatic(childResult.config, slotsResult.config)) {\n case Comparison.Compatible: {\n // 'auto' is compatible with anything, but if the current result is 'auto' and the new one isn't,\n // we want to use the more specific result.\n if (slotsResult.config === 'auto' && childResult.config !== 'auto') {\n slotsResult = childResult\n slotResultKey = parallelRouteKey\n }\n break\n }\n case Comparison.Incompatible:\n case Comparison.LessConstrained:\n case Comparison.MoreConstrained: {\n throw new Error(\n `Parallel slots cannot have incompatible \\`ensureStatic\\`.` +\n `\\n ${formatParallelSlot(slotResultKey!)}: ` +\n `\\n ${formatEnsureStaticExport(slotsResult.config)}` +\n `\\n (from: ${slotsResult.filePath})` +\n `\\n` +\n `\\n ${formatParallelSlot(parallelRouteKey)}: ` +\n `\\n ${formatEnsureStaticExport(childResult.config)}` +\n `\\n (from: ${childResult.filePath})` +\n `\\n` +\n `\\n Possible fixes:` +\n `\\n - Remove one of the \\`ensureStatic\\` exports` +\n `\\n - Change one of the \\`ensureStatic\\` exports to match the other`\n )\n }\n }\n }\n }\n\n // Child segments can override the config from the parent with a more constrained value,\n // but they cannot have a less constrained value.\n if (!slotsResult) {\n return parentResult\n } else {\n const comparison = compareEnsureStatic(\n slotsResult.config,\n parentResult.config\n )\n switch (comparison) {\n case Comparison.Compatible: {\n // 'auto' is compatible with anything, but if the parent result is 'auto' and the slots one isn't,\n // we want to use the more constrained result.\n if (parentResult.config === 'auto' && slotsResult.config !== 'auto') {\n return slotsResult\n } else {\n return parentResult\n }\n }\n case Comparison.MoreConstrained: {\n return slotsResult\n }\n case Comparison.LessConstrained:\n case Comparison.Incompatible: {\n throw new Error(\n (comparison === Comparison.LessConstrained\n ? `A child segment cannot override a parent segment with a less-constrained \\`ensureStatic\\`.`\n : `A child segment cannot override a parent segment with an incompatible \\`ensureStatic\\`.`) +\n `\\n Parent has: ` +\n `\\n ${formatEnsureStaticExport(parentResult.config)}` +\n `\\n (from: ${parentResult.filePath})` +\n `\\n Child has: ` +\n `\\n ${formatEnsureStaticExport(slotsResult.config)}` +\n `\\n (from: ${slotsResult.filePath})` +\n `\\n` +\n `\\n Possible fixes:` +\n `\\n - Remove one of the \\`ensureStatic\\` exports` +\n `\\n - Change one of the \\`ensureStatic\\` exports to match the other`\n )\n }\n }\n }\n}\n\nfunction formatParallelSlot(slot: string) {\n return slot === 'children' ? slot : `@${slot}`\n}\n\nfunction formatEnsureStaticExport(config: EnsureStatic) {\n return `export const ensureStatic = ${JSON.stringify(config)}`\n}\n\nenum Comparison {\n LessConstrained = 1,\n Compatible = 2,\n MoreConstrained = 3,\n Incompatible = 4,\n}\n\nconst ENSURE_STATIC_ORDER: Exclude[] = [\n 'shell',\n 'prefetch',\n 'navigation',\n]\n\nfunction compareEnsureStatic(\n left: EnsureStatic,\n right: EnsureStatic\n): Comparison {\n // 'auto' is compatible with everything.\n if (left === 'auto' || right === 'auto') {\n return Comparison.Compatible\n }\n\n // `false` is compatible with false.\n if (left === false && right === false) {\n return Comparison.Compatible\n }\n // If only one of the values is `false` (we know it's not both), it's incompatible.\n if (left === false || right === false) {\n return Comparison.Incompatible\n }\n\n const leftSort = ENSURE_STATIC_ORDER.indexOf(left)\n const rightSort = ENSURE_STATIC_ORDER.indexOf(right)\n return leftSort < rightSort\n ? Comparison.LessConstrained\n : leftSort === rightSort\n ? Comparison.Compatible\n : Comparison.MoreConstrained\n}\n\nfunction getEnsureStaticConfigForModule(\n mod: Record | undefined\n): EnsureStatic {\n return (mod ? (mod as AppSegmentConfig).ensureStatic : undefined) ?? 'auto'\n}\n"],"names":["parseLoaderTree","getLayoutOrPageModule","EnsureStaticLevel","getEnsureStaticLevel","ensureStatic","resolveEnsureStaticLevel","tree","partialPrefetching","resolveEnsureStaticConfig","config","filePath","resolveEnsureStaticConfigImpl","originalConfig","console","warn","formatEnsureStaticExport","mod","layoutOrPageMod","getEnsureStaticConfigForModule","parentResult","slotsResult","slotResultKey","parallelRoutes","parallelRouteKey","parallelRoute","childResult","compareEnsureStatic","Error","formatParallelSlot","comparison","slot","JSON","stringify","Comparison","ENSURE_STATIC_ORDER","left","right","leftSort","indexOf","rightSort","undefined"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 3683, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/app-render/staged-rendering.ts"],"sourcesContent":["import { InvariantError } from '../../shared/lib/invariant-error'\nimport { createPromiseWithResolvers } from '../../shared/lib/promise-with-resolvers'\n\nexport enum RenderStage {\n Before = 1,\n //\n ShellStatic = 10,\n /** Discrimination-only stage: `prefetch()` in validation renders (static) */\n PrefetchStatic_prefetchApi = 11,\n PrefetchStatic = 12,\n NavigationStatic = 13,\n Static = 14,\n //\n ShellRuntime = 20,\n /** Discrimination-only stage: `prefetch()` in validation renders (runtime) */\n PrefetchRuntime_prefetchApi = 21,\n PrefetchRuntime = 22,\n NavigationRuntime = 23,\n //\n Dynamic = 30,\n Abandoned = 40,\n}\n\nexport type AdvanceableRenderStage = Exclude<\n RenderStage,\n RenderStage.Before | RenderStage.Abandoned\n>\n\nexport const RENDER_STAGE_ADVANCE_ORDER: AdvanceableRenderStage[] = [\n RenderStage.ShellStatic,\n RenderStage.PrefetchStatic_prefetchApi,\n RenderStage.PrefetchStatic,\n RenderStage.NavigationStatic,\n RenderStage.Static,\n //\n RenderStage.ShellRuntime,\n RenderStage.PrefetchRuntime_prefetchApi,\n RenderStage.PrefetchRuntime,\n RenderStage.NavigationRuntime,\n //\n RenderStage.Dynamic,\n]\n\nexport function getNextStage(\n stage: Exclude\n) {\n return RENDER_STAGE_ADVANCE_ORDER[\n RENDER_STAGE_ADVANCE_ORDER.indexOf(stage) + 1\n ]\n}\n\nexport function isAdvanceableRenderStage(\n stage: RenderStage\n): stage is AdvanceableRenderStage {\n return RenderStage.Before < stage && stage <= RenderStage.Dynamic\n}\n\nexport enum SyncIOMode {\n /** Sync IO does not error in any stage. */\n Untracked = 1,\n /** Before `partialPrefetching`: Sync IO errors in static stages, and is allowed otherwise. */\n AllowedInRuntimeOrDynamic = 2,\n /** After `partialPrefetching`: Sync IO errors in all stages other than dynamic. */\n AllowedInDynamic = 3,\n}\n\nexport class StagedRenderingController {\n private abortSignal: AbortSignal | null\n private abandonController: AbortController | null\n private syncIOMode: SyncIOMode\n public readonly finalStage: AdvanceableRenderStage | null\n\n currentStage: RenderStage = RenderStage.Before\n\n syncInterruptReason: Error | null = null\n\n triggers: Record =\n createAdvanceableStageTriggers()\n\n constructor({\n abortSignal,\n abandonController,\n syncIO,\n finalStage,\n }: {\n abortSignal: AbortSignal | null\n abandonController: AbortController | null\n syncIO: SyncIOMode\n finalStage: AdvanceableRenderStage | null\n }) {\n this.abortSignal = abortSignal\n this.abandonController = abandonController\n this.syncIOMode = syncIO\n this.finalStage = finalStage\n\n if (abortSignal) {\n abortSignal.addEventListener(\n 'abort',\n () => {\n // Reject all stage promises that haven't already been resolved.\n // `cancelStageTrigger` is a noop if the trigger already resolved.\n const { reason } = abortSignal\n for (const trigger of Object.values(this.triggers)) {\n cancelStageTrigger(trigger, reason)\n }\n },\n { once: true }\n )\n }\n\n if (abandonController) {\n abandonController.signal.addEventListener(\n 'abort',\n () => {\n this.abandonRender()\n },\n { once: true }\n )\n }\n }\n\n /**\n * Schedules a callback that will execute synchronously when the controller is advanced\n * to `stage` or past it, before any promises for that stage are resolved.\n * If the controller is already past `stage`, the callback is executed immediately.\n * */\n onStage(stage: AdvanceableRenderStage, callback: () => void) {\n addSyncTriggerListener(this.triggers[stage], callback)\n }\n\n shouldTrackSyncInterrupt(): boolean {\n const { syncIOMode, currentStage } = this\n switch (syncIOMode) {\n case SyncIOMode.Untracked: {\n return false\n }\n case SyncIOMode.AllowedInRuntimeOrDynamic: {\n // Legacy: track Sync IO only in static stages.\n // Do not track it before the render, or in runtime/dynamic stages.\n return (\n currentStage > RenderStage.Before &&\n currentStage <= RenderStage.Static\n )\n }\n case SyncIOMode.AllowedInDynamic: {\n // Track sync IO in all cacheable stages.\n // This means all stages except:\n // - before the render\n // - in the dynamic stage\n return (\n currentStage > RenderStage.Before &&\n currentStage < RenderStage.Dynamic\n )\n }\n }\n }\n\n /** Note: only call this if `shouldTrackSyncInterrupt()` returned true */\n syncInterruptCurrentStageWithReason(reason: Error) {\n const { currentStage } = this\n if (\n currentStage === RenderStage.Before ||\n currentStage === RenderStage.Dynamic ||\n currentStage === RenderStage.Abandoned\n ) {\n // Not interruptible. Defensive noop.\n return\n }\n\n // If Sync IO occurs during an abandonable render, we trigger the abandon.\n // The abandon listener will call abandonRender which advances through\n // stages to let caches fill before marking as Abandoned.\n if (this.abandonController) {\n this.abandonController.abort()\n return\n }\n\n if (this.abortSignal) {\n // If this is an abortable render, we capture the interruption reason and stop advancing.\n // We don't release any more promises.\n // The caller is expected to abort the signal.\n this.syncInterruptReason = reason\n this.currentStage = RenderStage.Abandoned\n return\n }\n\n // If we're in a non-abandonable & non-abortable render,\n // we need to advance to the Dynamic stage and capture the interruption reason.\n // (in dev, this will be the restarted render)\n this.syncInterruptReason = reason\n this.advanceStage(RenderStage.Dynamic)\n }\n\n getSyncInterruptReason() {\n return this.syncInterruptReason\n }\n\n getStageEndTime(stage: Exclude) {\n return this.triggers[getNextStage(stage)].triggeredAt ?? Infinity\n }\n\n private abandonRender() {\n // In staged rendering, only the initial render is abandonable.\n // We can abandon the initial render if\n // 1. We notice a cache miss, and need to wait for caches to fill\n // 2. A sync IO error occurs, and the render should be interrupted\n // (this might be a lazy intitialization of a module,\n // so we still want to restart in this case and see if it still occurs)\n // In either case, we'll be doing another render after this one,\n // so we only want to unblock the next stage, not Dynamic, because\n // unblocking the dynamic stage would likely lead to wasted (uncached) IO.\n\n const { currentStage } = this\n\n if (currentStage === RenderStage.Before) {\n throw new InvariantError(\n \"A render that hasn't started yet cannot be abandoned\"\n )\n }\n if (\n currentStage === RenderStage.Dynamic ||\n currentStage === RenderStage.Abandoned\n ) {\n // We shouldn't ever trigger an abandon in these. Defensive noop.\n return\n }\n\n // Resolve all stages after the current one, up to runtime (excluding dynamic)\n const nextStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(currentStage) + 1\n const dynamicStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(\n RenderStage.Dynamic\n )\n for (let i = nextStageIx; i < dynamicStageIx; i++) {\n this.resolveStage(RENDER_STAGE_ADVANCE_ORDER[i])\n }\n\n this.currentStage = RenderStage.Abandoned\n }\n\n advanceStage(targetStage: AdvanceableRenderStage) {\n if (this.finalStage !== null && targetStage > this.finalStage) {\n throw new InvariantError(\n `Attempted to advance to stage ${RenderStage[targetStage]} but the render is limited to ${RenderStage[this.finalStage]}`\n )\n }\n const { currentStage } = this\n\n if (\n currentStage === RenderStage.Dynamic ||\n currentStage === RenderStage.Abandoned\n ) {\n // Terminal stages, nowhere left to advance.\n return\n }\n\n // If we're already at the target stage or beyond, do nothing.\n if (targetStage <= currentStage) {\n return\n }\n\n this.currentStage = targetStage\n\n // Resolve all stages between the current stage and the target.\n const nextStageIx =\n currentStage === RenderStage.Before\n ? 0\n : RENDER_STAGE_ADVANCE_ORDER.indexOf(currentStage) + 1\n const targetStageIx = RENDER_STAGE_ADVANCE_ORDER.indexOf(targetStage)\n for (let i = nextStageIx; i <= targetStageIx; i++) {\n this.resolveStage(RENDER_STAGE_ADVANCE_ORDER[i])\n }\n }\n\n private resolveStage(stage: AdvanceableRenderStage) {\n fireStageTrigger(this.triggers[stage])\n }\n\n private getStagePromise(stage: AdvanceableRenderStage): Promise {\n return this.triggers[stage].promise\n }\n\n waitForStage(stage: AdvanceableRenderStage) {\n return this.getStagePromise(stage)\n }\n\n delayUntilStage(\n stage: AdvanceableRenderStage,\n displayName: string | undefined,\n resolvedValue: T\n ): Promise {\n const stagePromise = this.getStagePromise(stage)\n\n const promise =\n process.env.NODE_ENV === 'development'\n ? makeDevtoolsIOPromiseFromIOTrigger(\n stagePromise,\n displayName,\n resolvedValue\n )\n : stagePromise.then(() => resolvedValue)\n\n // Analogously to `makeDynamicHangingPromise`, we might reject this promise if the signal is invoked.\n // (e.g. in the case where we don't want want the render to proceed to the dynamic stage and abort it).\n // We shouldn't consider this an unhandled rejection, so we attach a noop catch handler here to suppress this warning.\n if (this.abortSignal) {\n promise.catch(ignoreReject)\n }\n return promise\n }\n}\n\nfunction createAdvanceableStageTriggers(): Record<\n AdvanceableRenderStage,\n StageTrigger\n> {\n const triggers: Partial> = {}\n for (const stage of RENDER_STAGE_ADVANCE_ORDER) {\n triggers[stage] = createStageTrigger()\n }\n return triggers as Record\n}\n\nfunction ignoreReject() {}\n\n// TODO(restart-on-cache-miss): the layering of `delayUntilStage`,\n// `makeDevtoolsIOPromiseFromIOTrigger` and and `makeDevtoolsIOAwarePromise`\n// is confusing, we should clean it up.\nfunction makeDevtoolsIOPromiseFromIOTrigger(\n ioTrigger: Promise,\n displayName: string | undefined,\n resolvedValue: T\n): Promise {\n // If we create a `new Promise` and give it a displayName\n // (with no userspace code above us in the stack)\n // React Devtools will use it as the IO cause when determining \"suspended by\".\n // In particular, it should shadow any inner IO that resolved/rejected the promise\n // (in case of staged rendering, this will be the `setTimeout` that triggers the relevant stage)\n const promise = new Promise((resolve, reject) => {\n ioTrigger.then(resolve.bind(null, resolvedValue), reject)\n })\n if (displayName !== undefined) {\n // @ts-expect-error\n promise.displayName = displayName\n }\n return promise\n}\n\ntype StageTrigger = {\n state: 'pending' | 'triggered' | 'cancelled'\n triggeredAt: number | null\n promise: Promise\n _listeners: Array<() => void>\n _resolvePromise: () => void\n _rejectPromise: (reason: unknown) => void\n}\n\nfunction addSyncTriggerListener(trigger: StageTrigger, listener: () => void) {\n if (trigger.state === 'pending') {\n trigger._listeners.push(listener)\n } else {\n listener()\n }\n}\n\nfunction createStageTrigger(): StageTrigger {\n const { promise, resolve, reject } = createPromiseWithResolvers()\n return {\n state: 'pending',\n triggeredAt: null,\n promise,\n _listeners: [],\n _resolvePromise: resolve,\n _rejectPromise: reject,\n }\n}\n\nfunction fireStageTrigger(trigger: StageTrigger) {\n if (trigger.state !== 'pending') {\n return\n }\n trigger.state = 'triggered'\n trigger.triggeredAt = performance.now() + performance.timeOrigin\n try {\n const { _listeners: listeners } = trigger\n for (let i = 0; i < listeners.length; i++) {\n listeners[i]()\n }\n listeners.length = 0\n } finally {\n trigger._resolvePromise()\n }\n}\n\nfunction cancelStageTrigger(trigger: StageTrigger, reason: unknown) {\n if (trigger.state !== 'pending') {\n return\n }\n trigger.state = 'cancelled'\n // we didn't trigger, so don't save `triggeredAt`.\n\n // We're not gonna fire the listeners, we may as well free them.\n trigger._listeners.length = 0\n\n // Suppress unhandled rejection warnings for promises that no one is awaiting.\n trigger.promise.catch(ignoreReject)\n trigger._rejectPromise(reason)\n}\n"],"names":["InvariantError","createPromiseWithResolvers","RenderStage","RENDER_STAGE_ADVANCE_ORDER","getNextStage","stage","indexOf","isAdvanceableRenderStage","SyncIOMode","StagedRenderingController","constructor","abortSignal","abandonController","syncIO","finalStage","currentStage","syncInterruptReason","triggers","createAdvanceableStageTriggers","syncIOMode","addEventListener","reason","trigger","Object","values","cancelStageTrigger","once","signal","abandonRender","onStage","callback","addSyncTriggerListener","shouldTrackSyncInterrupt","syncInterruptCurrentStageWithReason","abort","advanceStage","getSyncInterruptReason","getStageEndTime","triggeredAt","Infinity","nextStageIx","dynamicStageIx","i","resolveStage","targetStage","targetStageIx","fireStageTrigger","getStagePromise","promise","waitForStage","delayUntilStage","displayName","resolvedValue","stagePromise","process","env","NODE_ENV","makeDevtoolsIOPromiseFromIOTrigger","then","catch","ignoreReject","createStageTrigger","ioTrigger","Promise","resolve","reject","bind","undefined","listener","state","_listeners","push","_resolvePromise","_rejectPromise","performance","now","timeOrigin","listeners","length"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 3979, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/base-http/helpers.ts"],"sourcesContent":["import type { BaseNextRequest, BaseNextResponse } from './'\nimport type { NodeNextRequest, NodeNextResponse } from './node'\nimport type { WebNextRequest, WebNextResponse } from './web'\n\n/**\n * This file provides some helpers that should be used in conjunction with\n * explicit environment checks. When combined with the environment checks, it\n * will ensure that the correct typings are used as well as enable code\n * elimination.\n */\n\n/**\n * Type guard to determine if a request is a WebNextRequest. This does not\n * actually check the type of the request, but rather the runtime environment.\n * It's expected that when the runtime environment is the edge runtime, that any\n * base request is a WebNextRequest.\n */\nexport const isWebNextRequest = (req: BaseNextRequest): req is WebNextRequest =>\n process.env.NEXT_RUNTIME === 'edge'\n\n/**\n * Type guard to determine if a response is a WebNextResponse. This does not\n * actually check the type of the response, but rather the runtime environment.\n * It's expected that when the runtime environment is the edge runtime, that any\n * base response is a WebNextResponse.\n */\nexport const isWebNextResponse = (\n res: BaseNextResponse\n): res is WebNextResponse => process.env.NEXT_RUNTIME === 'edge'\n\n/**\n * Type guard to determine if a request is a NodeNextRequest. This does not\n * actually check the type of the request, but rather the runtime environment.\n * It's expected that when the runtime environment is the node runtime, that any\n * base request is a NodeNextRequest.\n */\nexport const isNodeNextRequest = (\n req: BaseNextRequest\n): req is NodeNextRequest => process.env.NEXT_RUNTIME !== 'edge'\n\n/**\n * Type guard to determine if a response is a NodeNextResponse. This does not\n * actually check the type of the response, but rather the runtime environment.\n * It's expected that when the runtime environment is the node runtime, that any\n * base response is a NodeNextResponse.\n */\nexport const isNodeNextResponse = (\n res: BaseNextResponse\n): res is NodeNextResponse => process.env.NEXT_RUNTIME !== 'edge'\n"],"names":["isWebNextRequest","req","process","env","NEXT_RUNTIME","isWebNextResponse","res","isNodeNextRequest","isNodeNextResponse"],"mappings":"AAIA;;;;;CAKC,GAED;;;;;CAKC,GACD;;;;;;;;;;AAAO,MAAMA,mBAAmB,CAACC,MAC/BC,QAAQC,GAAG,CAACC,YAAY,uBAAK,OAAM;AAQ9B,MAAMC,oBAAoB,CAC/BC,MAC2BJ,QAAQC,GAAG,CAACC,YAAY,uBAAK,OAAM;AAQzD,MAAMG,oBAAoB,CAC/BN,MAC2BC,QAAQC,GAAG,CAACC,YAAY,uBAAK,OAAM;AAQzD,MAAMI,qBAAqB,CAChCF,MAC4BJ,QAAQC,GAAG,CAACC,YAAY,uBAAK,OAAM","ignoreList":[0]}}, + {"offset": {"line": 4007, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/base-http/index.ts"],"sourcesContent":["import type { IncomingHttpHeaders, OutgoingHttpHeaders } from 'http'\nimport type { I18NConfig } from '../config-shared'\n\nimport { RedirectStatusCode } from '../../client/components/redirect-status-code'\nimport type { NextApiRequestCookies } from '../api-utils'\nimport { getCookieParser } from '../api-utils/get-cookie-parser'\n\nexport interface BaseNextRequestConfig {\n basePath: string | undefined\n i18n?: I18NConfig\n trailingSlash?: boolean | undefined\n}\n\nexport type FetchMetric = {\n url: string\n idx: number\n end: number\n start: number\n method: string\n status: number\n cacheReason: string\n cacheStatus: 'hit' | 'miss' | 'skip' | 'hmr'\n cacheWarning?: string\n}\n\nexport type FetchMetrics = Array\n\nexport abstract class BaseNextRequest {\n protected _cookies: NextApiRequestCookies | undefined\n public abstract headers: IncomingHttpHeaders\n public abstract fetchMetrics: FetchMetric[] | undefined\n\n constructor(\n public method: string,\n public url: string,\n public body: Body\n ) {}\n\n // Utils implemented using the abstract methods above\n\n public get cookies() {\n if (this._cookies) return this._cookies\n return (this._cookies = getCookieParser(this.headers)())\n }\n}\n\nexport abstract class BaseNextResponse {\n abstract statusCode: number | undefined\n abstract statusMessage: string | undefined\n abstract get sent(): boolean\n\n constructor(public destination: Destination) {}\n\n /**\n * Sets a value for the header overwriting existing values\n */\n abstract setHeader(name: string, value: string | string[]): this\n\n /**\n * Removes a header\n */\n abstract removeHeader(name: string): this\n\n /**\n * Appends value for the given header name\n */\n abstract appendHeader(name: string, value: string): this\n\n /**\n * Get all values for a header as an array or undefined if no value is present\n */\n abstract getHeaderValues(name: string): string[] | undefined\n\n abstract hasHeader(name: string): boolean\n\n /**\n * Get values for a header concatenated using `,` or undefined if no value is present\n */\n abstract getHeader(name: string): string | undefined\n\n abstract getHeaders(): OutgoingHttpHeaders\n\n abstract body(value: string): this\n\n abstract send(): void\n\n abstract onClose(callback: () => void): void\n\n // Utils implemented using the abstract methods above\n\n public redirect(destination: string, statusCode: number) {\n this.setHeader('Location', destination)\n this.statusCode = statusCode\n\n // Since IE11 doesn't support the 308 header add backwards\n // compatibility using refresh header\n if (statusCode === RedirectStatusCode.PermanentRedirect) {\n this.setHeader('Refresh', `0;url=${destination}`)\n }\n\n return this\n }\n}\n"],"names":["RedirectStatusCode","getCookieParser","BaseNextRequest","constructor","method","url","body","cookies","_cookies","headers","BaseNextResponse","destination","redirect","statusCode","setHeader","PermanentRedirect"],"mappings":";;;;;;AAGA,SAASA,kBAAkB,QAAQ,+CAA8C;AAEjF,SAASC,eAAe,QAAQ,iCAAgC;;;AAsBzD,MAAeC;IAKpBC,YACSC,MAAc,EACdC,GAAW,EACXC,IAAU,CACjB;aAHOF,MAAAA,GAAAA;aACAC,GAAAA,GAAAA;aACAC,IAAAA,GAAAA;IACN;IAEH,qDAAqD;IAErD,IAAWC,UAAU;QACnB,IAAI,IAAI,CAACC,QAAQ,EAAE,OAAO,IAAI,CAACA,QAAQ;QACvC,OAAQ,IAAI,CAACA,QAAQ,OAAGP,6MAAAA,EAAgB,IAAI,CAACQ,OAAO;IACtD;AACF;AAEO,MAAeC;IAKpBP,YAAmBQ,WAAwB,CAAE;aAA1BA,WAAAA,GAAAA;IAA2B;IAqC9C,qDAAqD;IAE9CC,SAASD,WAAmB,EAAEE,UAAkB,EAAE;QACvD,IAAI,CAACC,SAAS,CAAC,YAAYH;QAC3B,IAAI,CAACE,UAAU,GAAGA;QAElB,0DAA0D;QAC1D,qCAAqC;QACrC,IAAIA,eAAeb,iNAAAA,CAAmBe,iBAAiB,EAAE;YACvD,IAAI,CAACD,SAAS,CAAC,WAAW,CAAC,MAAM,EAAEH,aAAa;QAClD;QAEA,OAAO,IAAI;IACb;AACF","ignoreList":[0]}}, + {"offset": {"line": 4049, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/base-http/node.ts"],"sourcesContent":["import type { ServerResponse, IncomingMessage } from 'http'\nimport type { Writable, Readable } from 'stream'\n\nimport { SYMBOL_CLEARED_COOKIES } from '../api-utils'\nimport type { NextApiRequestCookies } from '../api-utils'\n\nimport { NEXT_REQUEST_META } from '../request-meta'\nimport type { RequestMeta } from '../request-meta'\n\nimport { BaseNextRequest, BaseNextResponse, type FetchMetric } from './index'\nimport type { OutgoingHttpHeaders } from 'node:http'\n\ntype Req = IncomingMessage & {\n [NEXT_REQUEST_META]?: RequestMeta\n cookies?: NextApiRequestCookies\n fetchMetrics?: FetchMetric[]\n}\n\nexport class NodeNextRequest extends BaseNextRequest {\n public headers = this._req.headers\n public fetchMetrics: FetchMetric[] | undefined = this._req?.fetchMetrics;\n\n [NEXT_REQUEST_META]: RequestMeta = this._req[NEXT_REQUEST_META] || {}\n\n constructor(private _req: Req) {\n super(_req.method!.toUpperCase(), _req.url!, _req)\n }\n\n get originalRequest() {\n // Need to mimic these changes to the original req object for places where we use it:\n // render.tsx, api/ssg requests\n this._req[NEXT_REQUEST_META] = this[NEXT_REQUEST_META]\n this._req.url = this.url\n this._req.cookies = this.cookies\n return this._req\n }\n\n set originalRequest(value: Req) {\n this._req = value\n }\n\n private streaming = false\n\n /**\n * Returns the request body as a Web Readable Stream. The body here can only\n * be read once as the body will start flowing as soon as the data handler\n * is attached.\n *\n * @internal\n */\n public stream() {\n if (this.streaming) {\n throw new Error(\n 'Invariant: NodeNextRequest.stream() can only be called once'\n )\n }\n this.streaming = true\n\n return new ReadableStream({\n start: (controller) => {\n this._req.on('data', (chunk) => {\n controller.enqueue(new Uint8Array(chunk))\n })\n this._req.on('end', () => {\n controller.close()\n })\n this._req.on('error', (err) => {\n controller.error(err)\n })\n },\n })\n }\n}\n\nexport class NodeNextResponse extends BaseNextResponse {\n private textBody: string | undefined = undefined\n\n public [SYMBOL_CLEARED_COOKIES]?: boolean\n\n get originalResponse() {\n if (SYMBOL_CLEARED_COOKIES in this) {\n this._res[SYMBOL_CLEARED_COOKIES] = this[SYMBOL_CLEARED_COOKIES]\n }\n\n return this._res\n }\n\n constructor(\n private _res: ServerResponse & { [SYMBOL_CLEARED_COOKIES]?: boolean }\n ) {\n super(_res)\n }\n\n get sent() {\n return this._res.finished || this._res.headersSent\n }\n\n get statusCode() {\n return this._res.statusCode\n }\n\n set statusCode(value: number) {\n this._res.statusCode = value\n }\n\n get statusMessage() {\n return this._res.statusMessage\n }\n\n set statusMessage(value: string) {\n this._res.statusMessage = value\n }\n\n setHeader(name: string, value: string | string[]): this {\n this._res.setHeader(name, value)\n return this\n }\n\n removeHeader(name: string): this {\n this._res.removeHeader(name)\n return this\n }\n\n getHeaderValues(name: string): string[] | undefined {\n const values = this._res.getHeader(name)\n\n if (values === undefined) return undefined\n\n return (Array.isArray(values) ? values : [values]).map((value) =>\n value.toString()\n )\n }\n\n hasHeader(name: string): boolean {\n return this._res.hasHeader(name)\n }\n\n getHeader(name: string): string | undefined {\n const values = this.getHeaderValues(name)\n return Array.isArray(values) ? values.join(',') : undefined\n }\n\n getHeaders(): OutgoingHttpHeaders {\n return this._res.getHeaders()\n }\n\n appendHeader(name: string, value: string): this {\n const currentValues = this.getHeaderValues(name) ?? []\n\n if (!currentValues.includes(value)) {\n this._res.setHeader(name, [...currentValues, value])\n }\n\n return this\n }\n\n body(value: string) {\n this.textBody = value\n return this\n }\n\n send() {\n this._res.end(this.textBody)\n }\n\n public onClose(callback: () => void) {\n this.originalResponse.on('close', callback)\n }\n}\n"],"names":["SYMBOL_CLEARED_COOKIES","NEXT_REQUEST_META","BaseNextRequest","BaseNextResponse","NodeNextRequest","constructor","_req","method","toUpperCase","url","headers","fetchMetrics","streaming","originalRequest","cookies","value","stream","Error","ReadableStream","start","controller","on","chunk","enqueue","Uint8Array","close","err","error","NodeNextResponse","originalResponse","_res","textBody","undefined","sent","finished","headersSent","statusCode","statusMessage","setHeader","name","removeHeader","getHeaderValues","values","getHeader","Array","isArray","map","toString","hasHeader","join","getHeaders","appendHeader","currentValues","includes","body","send","end","onClose","callback"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 4181, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/dynamic-rendering-utils.ts"],"sourcesContent":["import { InvariantError } from '../shared/lib/invariant-error'\nimport { createPromiseWithResolvers } from '../shared/lib/promise-with-resolvers'\nimport { EnsureStaticLevel } from './app-render/segment-config/ensure-static'\nimport {\n RenderStage,\n type StagedRenderingController,\n type AdvanceableRenderStage,\n} from './app-render/staged-rendering'\nimport { workAsyncStorage } from './app-render/work-async-storage.external'\nimport type {\n RequestStore,\n WorkUnitStore,\n} from './app-render/work-unit-async-storage.external'\nimport { workUnitAsyncStorage } from './app-render/work-unit-async-storage.external'\nimport { getServerReact, getClientReact } from './runtime-reacts.external'\n\nexport function isHangingPromiseRejectionError(\n err: unknown\n): err is HangingPromiseRejectionError {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false\n }\n\n return err.digest === HANGING_PROMISE_REJECTION\n}\n\nconst HANGING_PROMISE_REJECTION = 'HANGING_PROMISE_REJECTION'\n\nclass HangingPromiseRejectionError extends Error {\n public readonly digest = HANGING_PROMISE_REJECTION\n\n constructor(\n public readonly route: string,\n public readonly expression: string\n ) {\n super(\n `During prerendering, ${expression} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${expression} to a different context by using \\`setTimeout\\`, \\`after\\`, or similar functions you may observe this error and you should handle it in that context. This occurred at route \"${route}\".`\n )\n }\n}\n\nconst CLIENT_HOOK_DYNAMIC = 'CLIENT_HOOK_DYNAMIC'\n\nexport class ClientHookDynamicError extends Error {\n public readonly digest = CLIENT_HOOK_DYNAMIC\n\n constructor(route: string, expression: string) {\n super(\n `Route \"${route}\": Next.js encountered URL data \\`${expression}\\` in a Client Component outside of \\`\\`.\\n\\n` +\n `This blocks prerendering because the value is only available at runtime.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [stream] Wrap the component in \\`\\` so the hook value streams in after prerendering\\n` +\n ` - [block] Set \\`export const instant = false\\` to allow a blocking route\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/blocking-prerender-client-hook`\n )\n }\n}\n\nexport function isClientHookDynamicError(\n err: unknown\n): err is ClientHookDynamicError {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false\n }\n\n return err.digest === CLIENT_HOOK_DYNAMIC\n}\n\ntype AbortListeners = Array<() => void>\nconst abortListenersBySignal = new WeakMap()\n\n/**\n * Constructs a promise that never resolves, standing in for *dynamic* data:\n * data that is only available during a real dynamic request and hangs in\n * every kind of prerender — `io()`, `connection()`, uncached `fetch()`.\n *\n * This is primarily useful for cacheComponents where we use promise\n * resolution timing to determine which parts of a render can be included in a\n * prerender.\n *\n * Records nothing on the prerender store: the promise's holes are only ever\n * filled by a real dynamic request, so a runtime prefetch response would have\n * the same holes as the static one. If the data source would resolve during a\n * runtime prerender, use `makeRuntimeHangingPromise` instead.\n */\nexport function makeDynamicHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string\n): Promise {\n return makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n}\n\nexport function makeUntrackedHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string\n): Promise {\n return makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n}\n\n/**\n * Constructs a promise that never resolves, standing in for session data\n * (which a runtime shell can access).\n * Examples: cookies, headers\n *\n * Awaiting one of these during a static prerender records on the prerender\n * store that a runtime shell would produce more content than the static\n * static shell, which the segment prefetch encoding uses\n * to tell the client whether a runtime request could be skipped.\n *\n * When unsure whether data is dynamic or runtime, prefer this method — the\n * cost of over-recording is a redundant runtime prefetch request; the cost of\n * under-recording is a permanently missing one.\n *\n * For fallback-param data — data a concrete (ISR-upgraded) prerender would\n * resolve — use `makeFallbackParamsHangingPromise` instead, so the access\n * is recorded with the right effect on the static-prefetch hint.\n */\nexport function makeSessionDataHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string,\n workUnitStore: WorkUnitStore\n): Promise {\n const promise = makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n return trackPromiseUsed(\n promise,\n trackSessionDataAccessed.bind(null, workUnitStore, expression)\n )\n}\n\n/**\n * Constructs a promise that never resolves, standing in for URL data,\n * which can be accessed in a runtime prefetch (but not a runtime shell).\n * Examples: fallback params, searchParams\n *\n * Awaiting one of these during a static prerender records on the prerender\n * store that a runtime prefetch would produce more content than the static\n * response, which the segment prefetch encoding uses\n * to tell the client whether a runtime prefetch request could be skipped.\n *\n * When unsure whether data is dynamic or runtime, prefer this method — the\n * cost of over-recording is a redundant runtime prefetch request; the cost of\n * under-recording is a permanently missing one.\n *\n * `workUnitStore` may be null ONLY when the caller tracks the access itself.\n * Such a caller MUST call `trackURLDataAccessed` from every path that\n * observes the promise (e.g. the proxy traps for `then`/`status`),\n * against the work unit store active at access time.\n *\n * For fallback-param data — data a concrete (ISR-upgraded) prerender would\n * resolve — use `makeFallbackParamsHangingPromise` instead, so the access\n * is recorded with the right effect on the static-prefetch hint.\n */\nexport function makeURLDataHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string,\n workUnitStore: WorkUnitStore | null\n): Promise {\n const promise = makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n if (workUnitStore === null) {\n return promise\n }\n return trackPromiseUsed(\n promise,\n trackURLDataAccessed.bind(null, workUnitStore, expression)\n )\n}\n\n/**\n * Creates a promise that stands in for a result that will either be session data\n * or URL data, but we don't know which.\n */\nexport function makeUnknownRuntimeDataHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string,\n workUnitStore: WorkUnitStore\n): Promise {\n // We don't know if this is session or URL data, i.e. if it should affect the shell\n // or only the prefetch. Track it conservatively as affecting both.\n return makeSessionDataHangingPromise(signal, route, expression, workUnitStore)\n}\n\n/**\n * Constructs a promise that never resolves, standing in for data that is only\n * accessible in the prefetch, but not in the shell, e.g. `prefetch()`.\n * This usage does *not* indicate that a runtime request is needed,\n * only that the data is not available in a shell.\n *\n * @internal\n */\nexport function makePrefetchHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string\n): Promise {\n return makeUntrackedHangingPromise(signal, route, expression)\n}\n\n/**\n * Variant of `makeRuntimeHangingPromise` for *fallback-param* data: fallback\n * route params and values derived solely from them (`params`, `rootParams`,\n * `pathname` during a fallback prerender). Like every runtime data access,\n * awaiting it records the access on the prerender store's response-level flag,\n * but its effect on the build-time static-prefetch hint differs — on a\n * fallback-upgradeable route the access is transient (a concrete prerender\n * resolves it), so it leaves the hint intact. See `trackFallbackParamsAccessed`.\n *\n * As with `makeRuntimeHangingPromise`, `workUnitStore` may be null ONLY when\n * the caller tracks the access itself by calling `trackFallbackParamsAccessed`\n * from every path that observes the promise.\n */\nexport function makeFallbackParamsHangingPromise(\n signal: AbortSignal,\n route: string,\n expression: string,\n workUnitStore: WorkUnitStore | null\n): Promise {\n const promise = makeHangingPromiseWithError(\n signal,\n new HangingPromiseRejectionError(route, expression)\n )\n if (workUnitStore === null) {\n return promise\n }\n return trackPromiseUsed(\n promise,\n trackFallbackParamsAccessed.bind(null, workUnitStore, expression)\n )\n}\n\nexport type PrerenderDataTracking = {\n /**\n * Records when the render has accessed a request data source\n * that hangs during a static prerender but would resolve during a runtime\n * prerender — cookies, headers, fallback params, searchParams, and cache\n * entries excluded only from static prerenders.\n *\n * The client uses this promise as the actual source of truth for whether a segment\n * needs a runtime request. Prefetch hints can become stale after a revalidation,\n * so if a hint says a static request should be enough but `runtimeDataAccessed`\n * resolves to `true`, a follow-up runtime request will be issued.\n * This applies to both shells and prefetches.\n *\n * The promise is embedded in the RSC payload (`InitialRSCPayload['u']`),\n * and is meant to be rewindable. This means that the shell might not have\n * any runtime data accesses, even when the prefetch does.\n * (this has some subtleties; see `markRuntimeDataAccessWhenStageReached`\n * for more)\n *\n * After the prerender, the promise is consumed by `collectSegmentData` and each\n * static prefetch will contain it (`PrefetchFlightResponse['u']`).\n * However, all the segments for a route will use the same promise (because we're\n * only tracking this on the page level) so if one segment needs runtime data, then\n * all segments will be marked as such.\n * However, on the client `isPartial` takes precedence over `runtimeDataAccessed`,\n * so complete segments will not end up being deopted.\n */\n readonly runtimeDataAccessed: PromiseWithResolvers\n\n /** Corresponds to `PrefetchHint.ShouldAttemptStaticShell`. */\n shouldAttemptStaticShell: boolean\n /** Corresponds to `PrefetchHint.ShouldAttemptStaticPrefetch`. */\n shouldAttemptStaticPrefetch: boolean\n}\n\nexport function createPrerenderDataTracking(): PrerenderDataTracking {\n return {\n runtimeDataAccessed: createPromiseWithResolvers(),\n shouldAttemptStaticShell: true,\n shouldAttemptStaticPrefetch: true,\n }\n}\n\nexport function finishPrerenderDataTracking(\n prerenderDataTracking: PrerenderDataTracking\n) {\n // If a runtime data access already resolved this promise, this is a no-op.\n prerenderDataTracking.runtimeDataAccessed.resolve(false)\n}\n\n/**\n * Records on a static prerender store that the render accessed a data source\n * which would have resolved in a runtime shell (or runtime prefetch).\n * No-op for all other store types.\n *\n * Prefer `makeRuntimeHangingPromise`. Use this function only when implementing\n * similar tracking and that one is not enough.\n */\nfunction trackSessionDataAccessed(\n workUnitStore: WorkUnitStore,\n expression: string\n): void {\n trackRuntimeDataAccessed(\n workUnitStore,\n PrerenderDataKind.SessionData,\n expression\n )\n}\n\n/**\n * Records on a static prerender store that the render accessed a data source\n * which would have resolved in a runtime prefetch (but NOT in a runtime shell)\n * No-op for all other store types.\n *\n * Prefer `makeRuntimeHangingPromise`. Use this function only when implementing\n * similar tracking and that one is not enough.\n *\n * For fallback-param data, use `trackFallbackParamsAccessed` instead. When\n * unsure, this is the conservative choice.\n */\nexport function trackURLDataAccessed(\n workUnitStore: WorkUnitStore,\n expression: string\n): void {\n trackRuntimeDataAccessed(workUnitStore, PrerenderDataKind.UrlData, expression)\n}\n\n/**\n * Fallback-param variant of `trackRuntimeDataAccessed`, for accesses of\n * fallback route params and values derived solely from them. It records the\n * response-level flag all the same, but only clears the build-time\n * static-prefetch hint when the route is not fallback-upgradeable — on an\n * upgradeable route the access is transient, since ISR later produces a\n * concrete prerender that resolves it.\n */\nexport function trackFallbackParamsAccessed(\n workUnitStore: WorkUnitStore,\n expression: string\n): void {\n trackRuntimeDataAccessed(\n workUnitStore,\n PrerenderDataKind.FallbackParams,\n expression\n )\n}\n\nconst enum PrerenderDataKind {\n SessionData = 1,\n UrlData = 2,\n FallbackParams = 3,\n}\n\nfunction trackRuntimeDataAccessed(\n workUnitStore: WorkUnitStore,\n dataKind: PrerenderDataKind,\n expression: string\n): void {\n switch (workUnitStore.type) {\n case 'prerender': {\n const { prerenderDataTracking, stagedRendering } = workUnitStore\n if (!prerenderDataTracking || !stagedRendering) {\n return\n }\n const { currentStage } = stagedRendering\n if (currentStage === RenderStage.Before) {\n console.error(\n new InvariantError(\n 'Unexpected trackRuntimeDataAccessed in the Before stage.'\n )\n )\n return\n }\n if (currentStage >= RenderStage.NavigationStatic) {\n // Ignore any accesses that happen after `navigation()` resolves.\n // The purpose of this tracking is to judge whether a runtime prefetch\n // would give us a more complete result than a static one.\n // But `navigation()` wouldn't have resolved in a runtime prefetch,\n // so e.g. `await navigation(); await cookies()` wouldn't have more content\n // in those, and we shouldn't count it.\n return\n }\n\n const ensureStaticLevel =\n workUnitStore.ensureStaticLevel ?? EnsureStaticLevel.None\n\n // NOTE: In general, we keep hints in sync with `needsRuntimeRequest`, but they\n // don't have to always match. The client re-uses hints for the entire route,\n // while `needsRuntimeRequest` can vary across individual prerendered param values\n // (e.g. if cookies are accessed depending on a param value).\n // Hints can also become outdated if a route only starts using runtime data\n // after a revalidation, so we have to expect this and be resilient to it.\n // Also see the upgradeable fallback params case below, which deliberately\n // puts them out of sync.\n\n switch (dataKind) {\n case PrerenderDataKind.SessionData: {\n // Potentially deopt both the shell and the prefetch,\n // because if the shell accessed runtime data, so does the prefetch.\n // However, if we're already past the shell stage, the shell is not affected.\n // (which makes e.g. `await prefetch(); await cookies()` only affect the prefetch)\n let firstAffectedStage:\n | RenderStage.ShellStatic\n | RenderStage.PrefetchStatic\n | null = null\n\n if (\n currentStage <= RenderStage.ShellStatic &&\n // Only track if we're not forcing the shell to be static.\n ensureStaticLevel < EnsureStaticLevel.Shell\n ) {\n prerenderDataTracking.shouldAttemptStaticShell = false\n firstAffectedStage ??= RenderStage.ShellStatic\n logRuntimeDeopt?.(expression, 'shell')\n }\n\n if (\n currentStage <= RenderStage.PrefetchStatic &&\n // Only track if we're not forcing the prefetch to be static.\n ensureStaticLevel < EnsureStaticLevel.Prefetch\n ) {\n prerenderDataTracking.shouldAttemptStaticPrefetch = false\n // NOTE: if the shell is affected, don't override it.\n firstAffectedStage ??= RenderStage.PrefetchStatic\n logRuntimeDeopt?.(expression, 'prefetch')\n }\n\n if (firstAffectedStage !== null) {\n markRuntimeDataAccessWhenStageReached(\n prerenderDataTracking,\n stagedRendering,\n firstAffectedStage\n )\n }\n break\n }\n case PrerenderDataKind.FallbackParams: {\n if (workUnitStore.isFallbackUpgradeable) {\n // An fallback-param access is transient when the route is\n // fallback-upgradeable (i.e. ISR later produces the concrete prerender a\n // static prefetch would hit) so it does not indicate the need for a runtime\n // request and thus does not affect the static hints.\n //\n // If runtime prefetches are not disallowed by `ensureStatic`, then we still\n // set `runtimeDataAccessed` (while keeping the hints static). This means that\n // if the concrete prerender isn't ready yet and we served the fallback, then\n // the client knows it can use a *runtime* prefetch for speculative links --\n // a runtime prefetch can provide the same content (or more) as the concrete\n // prerender would.\n if (ensureStaticLevel < EnsureStaticLevel.Prefetch) {\n markRuntimeDataAccessWhenStageReached(\n prerenderDataTracking,\n stagedRendering,\n // `params` are URL data, so they only affect the prefetch\n RenderStage.PrefetchStatic\n )\n logRuntimeUpgradeableFallback?.()\n }\n break\n }\n // not an upgradeable fallback param access, so we treat it as URL data.\n // intentional fallthrough\n }\n case PrerenderDataKind.UrlData: {\n // Only deopt the prefetch, not the shell, which cannot access URL data anyway.\n if (\n currentStage <= RenderStage.PrefetchStatic &&\n ensureStaticLevel < EnsureStaticLevel.Prefetch\n ) {\n prerenderDataTracking.shouldAttemptStaticPrefetch = false\n logRuntimeDeopt?.(expression, 'prefetch')\n\n markRuntimeDataAccessWhenStageReached(\n prerenderDataTracking,\n stagedRendering,\n RenderStage.PrefetchStatic\n )\n }\n break\n }\n }\n\n break\n }\n case 'prerender-client':\n case 'prerender-legacy':\n case 'prerender-runtime':\n case 'validation-client':\n case 'request':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n // Only the modern server prerender tracks this; see the field docs on\n // PrerenderStoreModernServer.\n break\n default:\n workUnitStore satisfies never\n }\n}\n\n/**\n * Tracks a runtime data access on the `runtimeDataAccessed` promise,\n * but with a delay until `targetStage`.\n *\n * When we encounter a URL data access like `await params`, we need to mark the\n * *prefetch* as needing runtime data, but the *shell* should remain unaffected\n * (because it cannot access params anyway).\n *\n * However, the shell and the prefetch share one `runtimeDataAccessed` promise,\n * and it needs to be accurately rewindable by the client\n * In other words, we need to make sure that it reads as `false` when rewound\n * to a shell, but as `true` in the final response (the prefetch).\n *\n * This means that if the `await params` is encountered during the shell stage, we\n * cannot resolve `runtimeDataAccessed` immediately.\n * Instead, we delay the resolution until the PrefetchStatic stage, so the promise\n * will remain unresolved when rewound to the shell stage (which reads as `false`).\n */\nfunction markRuntimeDataAccessWhenStageReached(\n prerenderDataTracking: PrerenderDataTracking,\n stageController: StagedRenderingController,\n targetStage: AdvanceableRenderStage\n) {\n const { runtimeDataAccessed } = prerenderDataTracking\n // NOTE: If we're already in or past the target stage, we can avoid allocating a closure,\n // because `onStage` would've executed the callback immediately anyway.\n if (stageController.currentStage >= targetStage) {\n runtimeDataAccessed.resolve(true)\n } else {\n stageController.onStage(\n targetStage,\n runtimeDataAccessed.resolve.bind(null, true)\n )\n }\n}\n\nconst logRuntimeDeopt = process.env.NEXT_PRIVATE_DEBUG_RUNTIME_DATA\n ? (expression: string, kind: 'shell' | 'prefetch') => {\n const { route } = workAsyncStorage.getStore()!\n console.log(\n `Route '${route}': deopting to a runtime ${kind} because it used ${expression}`\n )\n }\n : undefined\n\nconst logRuntimeUpgradeableFallback = process.env\n .NEXT_PRIVATE_DEBUG_RUNTIME_DATA\n ? () => {\n const { route } = workAsyncStorage.getStore()!\n console.log(\n `Route '${route}': marking upgradeable fallback as runtime prefetchable`\n )\n }\n : undefined\n\n/**\n * Signals that we cannot recover both a runtime shell and a static (PPR) shell\n * from the same render. Use this whenever the stage of a promise varies on\n * `RequestStore.needsRuntimeShell`.\n * */\nexport function trackIncompatibleShellContent(\n workUnitStore: RequestStore,\n reason: string\n) {\n const { stagedRendering } = workUnitStore\n if (!stagedRendering) {\n return\n }\n\n // TODO(app-shells): optimize this to only consider stages that are relevant for validation.\n // We should only track incompatible content when it can affect them.\n // For now, we simply exclude everything that happens in the dynamic stage.\n // (Note that we also need to account for cache misses that move things to a\n // different stage -- those should also preemptively set `hasIncompatibleShellContent`\n // because there's a chance that a render with warm caches would set it)\n const { currentStage } = stagedRendering\n if (\n currentStage === RenderStage.Dynamic ||\n currentStage === RenderStage.Abandoned\n ) {\n return\n }\n if (process.env.NEXT_PRIVATE_DEBUG_VALIDATION) {\n const workStore = workAsyncStorage.getStore()!\n console.log(\n `Route ${workStore.route}: Incompatible shell content: ${reason}`\n )\n }\n workUnitStore.hasIncompatibleShellContent = true\n}\n\nexport function makeClientHookHangingPromise(\n signal: AbortSignal,\n error: ClientHookDynamicError\n): Promise {\n return makeHangingPromiseWithError(signal, error)\n}\n\nfunction makeHangingPromiseWithError(\n signal: AbortSignal,\n error: Error\n): Promise {\n if (signal.aborted) {\n return Promise.reject(error)\n } else {\n const hangingPromise = new Promise((_, reject) => {\n const boundRejection = reject.bind(null, error)\n let currentListeners = abortListenersBySignal.get(signal)\n if (currentListeners) {\n currentListeners.push(boundRejection)\n } else {\n const listeners = [boundRejection]\n abortListenersBySignal.set(signal, listeners)\n signal.addEventListener(\n 'abort',\n () => {\n for (let i = 0; i < listeners.length; i++) {\n listeners[i]()\n }\n },\n { once: true }\n )\n }\n })\n // We are fine if no one actually awaits this promise. We shouldn't consider this an unhandled rejection so\n // we attach a noop catch handler here to suppress this warning. If you actually await somewhere or construct\n // your own promise out of it you'll need to ensure you handle the error when it rejects.\n hangingPromise.catch(ignoreReject)\n return hangingPromise\n }\n}\n\nfunction ignoreReject() {}\n\n/**\n * Creates a promise that will be triggered when another promise resolves.\n * It will not emit unhandled rejections, which is important if the trigger\n * is a promise that might itself get rejected (e.g. when a prerender/render\n * are aborted due to sync IO)\n */\nexport function makePromiseFromTrigger(\n trigger: Promise,\n value: T\n): Promise {\n const promise = trigger.then(() => value)\n promise.catch(ignoreReject)\n return promise\n}\n\nexport function makeDevtoolsIOAwarePromise(\n underlying: T,\n requestStore: RequestStore,\n stage: AdvanceableRenderStage\n): Promise {\n if (requestStore.stagedRendering) {\n // We resolve each stage in a timeout, so React DevTools will pick this up as IO.\n return requestStore.stagedRendering.delayUntilStage(\n stage,\n undefined,\n underlying\n )\n }\n // in React DevTools if we resolve in a setTimeout we will observe\n // the promise resolution as something that can suspend a boundary or root.\n return new Promise((resolve) => {\n // Must use setTimeout to be considered IO React DevTools. setImmediate will not work.\n setTimeout(() => {\n resolve(underlying)\n }, 0)\n })\n}\n\n/**\n * Invokes `onUse` whenever `then()/catch()/finally()` are called on the promise\n * or when the promise is awaited. */\nexport function trackPromiseUsed(\n promise: Promise,\n onUse: () => void\n): Promise {\n // We can instrument `.then()/.catch()/.finally()` in one go by using a Promise subclass\n // that implements a custom `.then()`, because `catch` and `finally` delegate to it.\n //\n // Alternative implementation ideas that were tried and rejected:\n //\n // 1. Patching the methods directly via `promise.then = (..args) => { ... }`:\n // doesn't work, because Node does not call the monkeypatched methods for native `await`:\n // > Native Promise [...]: The promise is directly used and awaited natively, without calling `then()`.\n // > https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await#description\n //\n // 2. Wrapping in a proxy that returns a custom `then/catch/finally`:\n // breaks async stacks in React's IO tracking (stack becomes `Promise.then`)\n return TrackedPromise.from(promise, onUse)\n}\n\nclass TrackedPromise extends Promise {\n #onUse: (() => void) | null = null\n\n // We don't need derived promises to also be a TrackedPromise.\n // We only care about the first level of `.then()`.\n static get [Symbol.species]() {\n return Promise\n }\n\n static from(promise: Promise, onUse: () => void): TrackedPromise {\n // Whenever the promise we're tracking resolves/rejects, we should follow.\n const tracked = new TrackedPromise(promise.then.bind(promise))\n\n tracked.#onUse = onUse\n\n // Hanging promises catch rejections when created. Tracked promises are generally derived\n // from promises that may hang & reject, so we need to do the same.\n // However, we have to bypass the tracking we do in `TrackedPromise.then`.\n // (we're using `then` directly, because `catch` ends up delegating `TrackedPromise.then`)\n Promise.prototype.then.call(tracked, undefined, ignoreReject)\n\n return tracked\n }\n\n then(\n onFulfilled?: (value: T) => TResult1 | PromiseLike,\n onRejected?: (reason: unknown) => TResult2 | PromiseLike\n ): Promise {\n const onUse = this.#onUse\n if (onUse) {\n try {\n onUse()\n } catch (err) {\n // We don't want to break the method even if our tracking errored.\n console.error(err)\n }\n }\n\n return Promise.prototype.then.call(\n this,\n onFulfilled,\n onRejected\n ) as Promise\n }\n}\n\nexport const RENDER_STAGES_BY_DATA_KIND = {\n sessionData: RenderStage.ShellRuntime as const,\n /**\n * Statically-prerenderable URL data, like static `params`.\n * It may need to be pushed to a runtime stage in a runtime prerender,\n * but it's semantically distinct from `runtimeUrlData` like `searchParams`,\n * which is always excluded from static prerenders.\n * */\n staticUrlData: {\n /**\n * From that app's point of view, `prefetch()` is semantically the same as\n * `staticUrlData`, because it does not resolve in a shell but resolves in\n * a prefetch (even a static one).\n * We handle it separately to provide a specialized error in validation renders.\n */\n prefetchApi: {\n static: RenderStage.PrefetchStatic_prefetchApi as const,\n runtime: RenderStage.PrefetchRuntime_prefetchApi as const,\n },\n static: RenderStage.PrefetchStatic as const,\n runtime: RenderStage.PrefetchRuntime as const,\n },\n /**\n * URL data that is never statically-prerenderable, like static `searchParams`.\n * */\n runtimeUrlData: RenderStage.PrefetchRuntime as const,\n}\n\nexport function applyOwnerStack(error: Error): Error {\n if (process.env.NODE_ENV !== 'production') {\n let ownerStack: string | undefined | null\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n // captureOwnerStack() returns the owner stack for the current React\n // rendering context. Inside a cache scope this only includes the inner\n // component tree. The outer owner stack (captured before entering the\n // cache boundary in use-cache-wrapper.ts) is stored on the cache store.\n // We concatenate both to get the full component tree.\n const innerOwnerStack =\n getClientReact()?.captureOwnerStack?.() ??\n getServerReact()?.captureOwnerStack?.()\n\n switch (workUnitStore?.type) {\n case 'cache':\n case 'private-cache':\n ownerStack =\n (innerOwnerStack || '') + (workUnitStore.outerOwnerStack || '') ||\n undefined\n break\n case 'unstable-cache':\n case 'request':\n case 'prerender':\n case 'prerender-legacy':\n case 'prerender-runtime':\n case 'prerender-client':\n case 'validation-client':\n case 'build-time-generator':\n case undefined:\n ownerStack = innerOwnerStack\n break\n default:\n workUnitStore satisfies never\n }\n\n if (ownerStack) {\n let stack = ownerStack\n\n if (error.stack) {\n const frames: string[] = []\n\n for (const frame of error.stack.split('\\n').slice(1)) {\n if (frame.includes('react_stack_bottom_frame')) {\n break\n }\n\n frames.push(frame)\n }\n\n stack = '\\n' + frames.join('\\n') + stack\n }\n\n error.stack = error.name + ': ' + error.message + stack\n }\n }\n\n return error\n}\n"],"names":["InvariantError","createPromiseWithResolvers","EnsureStaticLevel","RenderStage","workAsyncStorage","workUnitAsyncStorage","getServerReact","getClientReact","isHangingPromiseRejectionError","err","digest","HANGING_PROMISE_REJECTION","HangingPromiseRejectionError","Error","constructor","route","expression","CLIENT_HOOK_DYNAMIC","ClientHookDynamicError","isClientHookDynamicError","abortListenersBySignal","WeakMap","makeDynamicHangingPromise","signal","makeHangingPromiseWithError","makeUntrackedHangingPromise","makeSessionDataHangingPromise","workUnitStore","promise","trackPromiseUsed","trackSessionDataAccessed","bind","makeURLDataHangingPromise","trackURLDataAccessed","makeUnknownRuntimeDataHangingPromise","makePrefetchHangingPromise","makeFallbackParamsHangingPromise","trackFallbackParamsAccessed","createPrerenderDataTracking","runtimeDataAccessed","shouldAttemptStaticShell","shouldAttemptStaticPrefetch","finishPrerenderDataTracking","prerenderDataTracking","resolve","trackRuntimeDataAccessed","dataKind","type","stagedRendering","currentStage","Before","console","error","NavigationStatic","ensureStaticLevel","None","firstAffectedStage","ShellStatic","Shell","logRuntimeDeopt","PrefetchStatic","Prefetch","markRuntimeDataAccessWhenStageReached","isFallbackUpgradeable","logRuntimeUpgradeableFallback","stageController","targetStage","onStage","process","env","NEXT_PRIVATE_DEBUG_RUNTIME_DATA","kind","getStore","log","undefined","trackIncompatibleShellContent","reason","Dynamic","Abandoned","NEXT_PRIVATE_DEBUG_VALIDATION","workStore","hasIncompatibleShellContent","makeClientHookHangingPromise","aborted","Promise","reject","hangingPromise","_","boundRejection","currentListeners","get","push","listeners","set","addEventListener","i","length","once","catch","ignoreReject","makePromiseFromTrigger","trigger","value","then","makeDevtoolsIOAwarePromise","underlying","requestStore","stage","delayUntilStage","setTimeout","onUse","TrackedPromise","from","Symbol","species","tracked","prototype","call","onFulfilled","onRejected","RENDER_STAGES_BY_DATA_KIND","sessionData","ShellRuntime","staticUrlData","prefetchApi","static","PrefetchStatic_prefetchApi","runtime","PrefetchRuntime_prefetchApi","PrefetchRuntime","runtimeUrlData","applyOwnerStack","NODE_ENV","ownerStack","innerOwnerStack","captureOwnerStack","outerOwnerStack","stack","frames","frame","split","slice","includes","join","name","message"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 4663, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/instrumentation/utils.ts"],"sourcesContent":["export function getRevalidateReason(params: {\n isOnDemandRevalidate?: boolean\n isStaticGeneration?: boolean\n}): 'on-demand' | 'stale' | undefined {\n if (params.isOnDemandRevalidate) {\n return 'on-demand'\n }\n if (params.isStaticGeneration) {\n return 'stale'\n }\n return undefined\n}\n"],"names":["getRevalidateReason","params","isOnDemandRevalidate","isStaticGeneration","undefined"],"mappings":";;;;AAAO,SAASA,oBAAoBC,MAGnC;IACC,IAAIA,OAAOC,oBAAoB,EAAE;QAC/B,OAAO;IACT;IACA,IAAID,OAAOE,kBAAkB,EAAE;QAC7B,OAAO;IACT;IACA,OAAOC;AACT","ignoreList":[0]}}, + {"offset": {"line": 4680, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/app-dir-module.ts"],"sourcesContent":["import type { AppDirModules } from '../../build/webpack/loaders/next-app-loader'\nimport { DEFAULT_SEGMENT_KEY } from '../../shared/lib/segment'\n\n/**\n * LoaderTree is generated in next-app-loader.\n */\nexport type LoaderTree = [\n segment: string,\n parallelRoutes: { [parallelRouterKey: string]: LoaderTree },\n modules: AppDirModules,\n /**\n * At build time, for each dynamic segment, we compute the list of static\n * sibling segments that exist at the same URL path level. This is used by\n * the client router to determine if a prefetch can be reused.\n *\n * For example, given the following file structure:\n * /app/(group1)/products/sale/page.tsx -> /products/sale\n * /app/(group2)/products/[id]/page.tsx -> /products/[id]\n *\n * The [id] segment would have staticSiblings: ['sale']\n *\n * This accounts for route groups, which may place sibling routes in\n * different parts of the file system tree but at the same URL level.\n *\n * A value of `null` means the static siblings are unknown (e.g., in webpack\n * dev mode where routes are compiled on-demand).\n */\n staticSiblings: readonly string[] | null,\n]\n\nexport async function getLayoutOrPageModule(loaderTree: LoaderTree) {\n const { layout, page, defaultPage } = loaderTree[2]\n const isLayout = typeof layout !== 'undefined'\n const isPage = typeof page !== 'undefined'\n const isDefaultPage =\n typeof defaultPage !== 'undefined' && loaderTree[0] === DEFAULT_SEGMENT_KEY\n\n let mod = undefined\n let modType: 'layout' | 'page' | undefined = undefined\n let filePath = undefined\n\n if (isLayout) {\n mod = await layout[0]()\n modType = 'layout'\n filePath = layout[1]\n } else if (isPage) {\n mod = await page[0]()\n modType = 'page'\n filePath = page[1]\n } else if (isDefaultPage) {\n mod = await defaultPage[0]()\n modType = 'page'\n filePath = defaultPage[1]\n }\n\n return { mod, modType, filePath }\n}\n\nexport async function getComponentTypeModule(\n loaderTree: LoaderTree,\n moduleType: 'layout' | 'not-found' | 'forbidden' | 'unauthorized'\n) {\n const { [moduleType]: module } = loaderTree[2]\n if (typeof module !== 'undefined') {\n return await module[0]()\n }\n return undefined\n}\n"],"names":["DEFAULT_SEGMENT_KEY","getLayoutOrPageModule","loaderTree","layout","page","defaultPage","isLayout","isPage","isDefaultPage","mod","undefined","modType","filePath","getComponentTypeModule","moduleType","module"],"mappings":";;;;;;AACA,SAASA,mBAAmB,QAAQ,2BAA0B;;AA6BvD,eAAeC,sBAAsBC,UAAsB;IAChE,MAAM,EAAEC,MAAM,EAAEC,IAAI,EAAEC,WAAW,EAAE,GAAGH,UAAU,CAAC,EAAE;IACnD,MAAMI,WAAW,OAAOH,WAAW;IACnC,MAAMI,SAAS,OAAOH,SAAS;IAC/B,MAAMI,gBACJ,OAAOH,gBAAgB,eAAeH,UAAU,CAAC,EAAE,KAAKF,wLAAAA;IAE1D,IAAIS,MAAMC;IACV,IAAIC,UAAyCD;IAC7C,IAAIE,WAAWF;IAEf,IAAIJ,UAAU;QACZG,MAAM,MAAMN,MAAM,CAAC,EAAE;QACrBQ,UAAU;QACVC,WAAWT,MAAM,CAAC,EAAE;IACtB,OAAO,IAAII,QAAQ;QACjBE,MAAM,MAAML,IAAI,CAAC,EAAE;QACnBO,UAAU;QACVC,WAAWR,IAAI,CAAC,EAAE;IACpB,OAAO,IAAII,eAAe;QACxBC,MAAM,MAAMJ,WAAW,CAAC,EAAE;QAC1BM,UAAU;QACVC,WAAWP,WAAW,CAAC,EAAE;IAC3B;IAEA,OAAO;QAAEI;QAAKE;QAASC;IAAS;AAClC;AAEO,eAAeC,uBACpBX,UAAsB,EACtBY,UAAiE;IAEjE,MAAM,EAAE,CAACA,WAAW,EAAEC,MAAM,EAAE,GAAGb,UAAU,CAAC,EAAE;IAC9C,IAAI,OAAOa,WAAW,aAAa;QACjC,OAAO,MAAMA,MAAM,CAAC,EAAE;IACxB;IACA,OAAOL;AACT","ignoreList":[0]}}, + {"offset": {"line": 4726, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/cache-control.ts"],"sourcesContent":["import { CACHE_ONE_YEAR_SECONDS } from '../../lib/constants'\n\n/**\n * The revalidate option used internally for pages. A value of `false` means\n * that the page should not be revalidated. A number means that the page\n * should be revalidated after the given number of seconds (this also includes\n * `1` which means to revalidate after 1 second). A value of `0` is not a valid\n * value for this option.\n */\nexport type Revalidate = number | false\n\nexport interface CacheControl {\n revalidate: Revalidate\n expire: number | undefined\n}\n\nexport function getCacheControlHeader({\n revalidate,\n expire,\n}: CacheControl): string {\n const swrHeader =\n typeof revalidate === 'number' &&\n expire !== undefined &&\n revalidate < expire\n ? `, stale-while-revalidate=${expire - revalidate}`\n : ''\n\n if (revalidate === 0) {\n return 'private, no-cache, no-store, max-age=0, must-revalidate'\n } else if (typeof revalidate === 'number') {\n return `s-maxage=${revalidate}${swrHeader}`\n }\n\n return `s-maxage=${CACHE_ONE_YEAR_SECONDS}${swrHeader}`\n}\n"],"names":["CACHE_ONE_YEAR_SECONDS","getCacheControlHeader","revalidate","expire","swrHeader","undefined"],"mappings":";;;;AAAA,SAASA,sBAAsB,QAAQ,sBAAqB;;AAgBrD,SAASC,sBAAsB,EACpCC,UAAU,EACVC,MAAM,EACO;IACb,MAAMC,YACJ,OAAOF,eAAe,YACtBC,WAAWE,aACXH,aAAaC,SACT,CAAC,yBAAyB,EAAEA,SAASD,YAAY,GACjD;IAEN,IAAIA,eAAe,GAAG;QACpB,OAAO;IACT,OAAO,IAAI,OAAOA,eAAe,UAAU;QACzC,OAAO,CAAC,SAAS,EAAEA,aAAaE,WAAW;IAC7C;IAEA,OAAO,CAAC,SAAS,EAAEJ,mLAAAA,GAAyBI,WAAW;AACzD","ignoreList":[0]}}, + {"offset": {"line": 4745, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/clone-response.ts"],"sourcesContent":["const noop = () => {}\n\nlet registry: FinalizationRegistry> | undefined\n\nif (globalThis.FinalizationRegistry) {\n registry = new FinalizationRegistry((weakRef: WeakRef) => {\n const stream = weakRef.deref()\n if (stream && !stream.locked) {\n stream.cancel('Response object has been garbage collected').then(noop)\n }\n })\n}\n\n/**\n * Clones a response by teeing the body so we can return two independent\n * ReadableStreams from it. This avoids the bug in the undici library around\n * response cloning.\n *\n * After cloning, the original response's body will be consumed and closed.\n *\n * @see https://github.com/vercel/next.js/pull/73274\n *\n * @param original - The original response to clone.\n * @returns A tuple containing two independent clones of the original response.\n */\nexport function cloneResponse(original: Response): [Response, Response] {\n // If the response has no body, then we can just return the original response\n // twice because it's immutable.\n if (!original.body) {\n return [original, original]\n }\n\n const [body1, body2] = original.body.tee()\n\n const cloned1 = new Response(body1, {\n status: original.status,\n statusText: original.statusText,\n headers: original.headers,\n })\n\n Object.defineProperty(cloned1, 'url', {\n value: original.url,\n // How the original response.url behaves\n configurable: true,\n enumerable: true,\n writable: false,\n })\n\n const cloned2 = new Response(body2, {\n status: original.status,\n statusText: original.statusText,\n headers: original.headers,\n })\n\n Object.defineProperty(cloned2, 'url', {\n value: original.url,\n // How the original response.url behaves\n configurable: true,\n enumerable: true,\n writable: false,\n })\n\n // The Fetch Standard allows users to skip consuming the response body by\n // relying on garbage collection to release connection resources.\n // https://github.com/nodejs/undici?tab=readme-ov-file#garbage-collection\n //\n // To cancel the stream you then need to cancel both resulting branches.\n // Teeing a stream will generally lock it for the duration, preventing other\n // readers from locking it.\n // https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/tee\n if (registry) {\n if (cloned1.body) {\n registry.register(cloned1, new WeakRef(cloned1.body))\n }\n\n if (cloned2.body) {\n registry.register(cloned2, new WeakRef(cloned2.body))\n }\n }\n\n return [cloned1, cloned2]\n}\n"],"names":["noop","registry","globalThis","FinalizationRegistry","weakRef","stream","deref","locked","cancel","then","cloneResponse","original","body","body1","body2","tee","cloned1","Response","status","statusText","headers","Object","defineProperty","value","url","configurable","enumerable","writable","cloned2","register","WeakRef"],"mappings":";;;;AAAA,MAAMA,OAAO,KAAO;AAEpB,IAAIC;AAEJ,IAAIC,WAAWC,oBAAoB,EAAE;IACnCF,WAAW,IAAIE,qBAAqB,CAACC;QACnC,MAAMC,SAASD,QAAQE,KAAK;QAC5B,IAAID,UAAU,CAACA,OAAOE,MAAM,EAAE;YAC5BF,OAAOG,MAAM,CAAC,8CAA8CC,IAAI,CAACT;QACnE;IACF;AACF;AAcO,SAASU,cAAcC,QAAkB;IAC9C,6EAA6E;IAC7E,gCAAgC;IAChC,IAAI,CAACA,SAASC,IAAI,EAAE;QAClB,OAAO;YAACD;YAAUA;SAAS;IAC7B;IAEA,MAAM,CAACE,OAAOC,MAAM,GAAGH,SAASC,IAAI,CAACG,GAAG;IAExC,MAAMC,UAAU,IAAIC,SAASJ,OAAO;QAClCK,QAAQP,SAASO,MAAM;QACvBC,YAAYR,SAASQ,UAAU;QAC/BC,SAAST,SAASS,OAAO;IAC3B;IAEAC,OAAOC,cAAc,CAACN,SAAS,OAAO;QACpCO,OAAOZ,SAASa,GAAG;QACnB,wCAAwC;QACxCC,cAAc;QACdC,YAAY;QACZC,UAAU;IACZ;IAEA,MAAMC,UAAU,IAAIX,SAASH,OAAO;QAClCI,QAAQP,SAASO,MAAM;QACvBC,YAAYR,SAASQ,UAAU;QAC/BC,SAAST,SAASS,OAAO;IAC3B;IAEAC,OAAOC,cAAc,CAACM,SAAS,OAAO;QACpCL,OAAOZ,SAASa,GAAG;QACnB,wCAAwC;QACxCC,cAAc;QACdC,YAAY;QACZC,UAAU;IACZ;IAEA,yEAAyE;IACzE,iEAAiE;IACjE,yEAAyE;IACzE,EAAE;IACF,wEAAwE;IACxE,4EAA4E;IAC5E,2BAA2B;IAC3B,sEAAsE;IACtE,IAAI1B,UAAU;QACZ,IAAIe,QAAQJ,IAAI,EAAE;YAChBX,SAAS4B,QAAQ,CAACb,SAAS,IAAIc,QAAQd,QAAQJ,IAAI;QACrD;QAEA,IAAIgB,QAAQhB,IAAI,EAAE;YAChBX,SAAS4B,QAAQ,CAACD,SAAS,IAAIE,QAAQF,QAAQhB,IAAI;QACrD;IACF;IAEA,OAAO;QAACI;QAASY;KAAQ;AAC3B","ignoreList":[0]}}, + {"offset": {"line": 4818, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/dedupe-fetch.ts"],"sourcesContent":["/**\n * Based on https://github.com/facebook/react/blob/d4e78c42a94be027b4dc7ed2659a5fddfbf9bd4e/packages/react/src/ReactFetch.js\n */\nimport * as React from 'react'\nimport { cloneResponse } from './clone-response'\nimport { InvariantError } from '../../shared/lib/invariant-error'\n\nconst simpleCacheKey = '[\"GET\",[],null,\"follow\",null,null,null,null]' // generateCacheKey(new Request('https://blank'));\n\n// Headers that should not affect deduplication\n// traceparent and tracestate are used for distributed tracing and should not affect cache keys\nconst headersToExcludeInCacheKey = new Set(['traceparent', 'tracestate'])\n\nfunction generateCacheKey(request: Request): string {\n // We pick the fields that goes into the key used to dedupe requests.\n // We don't include the `cache` field, because we end up using whatever\n // caching resulted from the first request.\n // Notably we currently don't consider non-standard (or future) options.\n // This might not be safe. TODO: warn for non-standard extensions differing.\n // IF YOU CHANGE THIS UPDATE THE simpleCacheKey ABOVE.\n\n const filteredHeaders = Array.from(request.headers.entries()).filter(\n ([key]) => !headersToExcludeInCacheKey.has(key.toLowerCase())\n )\n\n return JSON.stringify([\n request.method,\n filteredHeaders,\n request.mode,\n request.redirect,\n request.credentials,\n request.referrer,\n request.referrerPolicy,\n request.integrity,\n ])\n}\n\ntype CacheEntry = [\n key: string,\n promise: Promise,\n response: Response | null,\n]\n\nexport function createDedupeFetch(originalFetch: typeof fetch) {\n const getCacheEntries = React.cache(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- url is the cache key\n (url: string): CacheEntry[] => []\n )\n\n return function dedupeFetch(\n resource: URL | RequestInfo,\n options?: RequestInit\n ): Promise {\n if (options && options.signal) {\n // If we're passed a signal, then we assume that\n // someone else controls the lifetime of this object and opts out of\n // caching. It's effectively the opt-out mechanism.\n // Ideally we should be able to check this on the Request but\n // it always gets initialized with its own signal so we don't\n // know if it's supposed to override - unless we also override the\n // Request constructor.\n return originalFetch(resource, options)\n }\n // Normalize the Request\n let url: string\n let cacheKey: string\n if (typeof resource === 'string' && !options) {\n // Fast path.\n cacheKey = simpleCacheKey\n url = resource\n } else {\n // Normalize the request.\n // if resource is not a string or a URL (its an instance of Request)\n // then do not instantiate a new Request but instead\n // reuse the request as to not disturb the body in the event it's a ReadableStream.\n const request =\n typeof resource === 'string' || resource instanceof URL\n ? new Request(resource, options)\n : resource\n if (\n (request.method !== 'GET' && request.method !== 'HEAD') ||\n request.keepalive\n ) {\n // We currently don't dedupe requests that might have side-effects. Those\n // have to be explicitly cached. We assume that the request doesn't have a\n // body if it's GET or HEAD.\n // keepalive gets treated the same as if you passed a custom cache signal.\n return originalFetch(resource, options)\n }\n cacheKey = generateCacheKey(request)\n url = request.url\n }\n\n const cacheEntries = getCacheEntries(url)\n for (let i = 0, j = cacheEntries.length; i < j; i += 1) {\n const [key, promise] = cacheEntries[i]\n if (key === cacheKey) {\n return promise.then(() => {\n const response = cacheEntries[i][2]\n if (!response) throw new InvariantError('No cached response')\n\n // We're cloning the response using this utility because there exists\n // a bug in the undici library around response cloning. See the\n // following pull request for more details:\n // https://github.com/vercel/next.js/pull/73274\n const [cloned1, cloned2] = cloneResponse(response)\n cacheEntries[i][2] = cloned2\n return cloned1\n })\n }\n }\n\n // We pass the original arguments here in case normalizing the Request\n // doesn't include all the options in this environment.\n const promise = originalFetch(resource, options)\n const entry: CacheEntry = [cacheKey, promise, null]\n cacheEntries.push(entry)\n\n return promise.then((response) => {\n // We're cloning the response using this utility because there exists\n // a bug in the undici library around response cloning. See the\n // following pull request for more details:\n // https://github.com/vercel/next.js/pull/73274\n const [cloned1, cloned2] = cloneResponse(response)\n entry[2] = cloned2\n return cloned1\n })\n }\n}\n"],"names":["React","cloneResponse","InvariantError","simpleCacheKey","headersToExcludeInCacheKey","Set","generateCacheKey","request","filteredHeaders","Array","from","headers","entries","filter","key","has","toLowerCase","JSON","stringify","method","mode","redirect","credentials","referrer","referrerPolicy","integrity","createDedupeFetch","originalFetch","getCacheEntries","cache","url","dedupeFetch","resource","options","signal","cacheKey","URL","Request","keepalive","cacheEntries","i","j","length","promise","then","response","cloned1","cloned2","entry","push"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 4934, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/encode-header-safe.ts"],"sourcesContent":["/**\n * Percent-encode every character other than horizontal tab and printable ASCII\n * so a value can be safely serialized into an HTTP header.\n *\n * Node's `validateHeaderValue` and `fetch`'s ByteString conversion accept\n * different character ranges. Restricting values to `\\t\\x20-\\x7e` produces a\n * conservative representation that both can serialize. Characters outside a\n * transport's accepted range (Hebrew, Arabic, Chinese, emoji, …) would\n * otherwise throw `ERR_INVALID_CHAR` or a `TypeError`, which crashes ISR or\n * fails a cache read on every affected request.\n *\n * Cache tags are encoded at the public boundaries — tag construction\n * (`getImplicitTags`, `validateTags`) and invalidation input\n * (`revalidatePath`, `revalidateTag`, `updateTag`) — so storage, comparison,\n * and the wire all see the same canonical form.\n *\n * The class is narrower than either transport accepts. Everything inside it\n * passes through byte-for-byte, including `,`, `/`, `%`, `[`, `]`, `_`, `-` and\n * `\\t`, which preserves the comma-separated header format and the\n * dynamic-segment markers in derived tags (`_N_T_/[slug]/page`).\n *\n * Properties:\n * - Fast-path: input that already fits the class is returned unchanged. This\n * makes the encoder idempotent on already-encoded `%xx` sequences.\n * - Matches *runs* of out-of-class code units so surrogate pairs (e.g. an\n * emoji) are handed to `encodeURIComponent` as a complete code point — a\n * per-code-unit regex would split the pair and throw `URIError`.\n */\nconst OUT_OF_CLASS_CHAR = /[^\\t\\x20-\\x7e]/\nconst OUT_OF_CLASS_RUN = /[^\\t\\x20-\\x7e]+/g\n\nexport function encodeHeaderSafe(value: string): string {\n return OUT_OF_CLASS_CHAR.test(value)\n ? value.replace(OUT_OF_CLASS_RUN, (run) => encodeURIComponent(run))\n : value\n}\n"],"names":["OUT_OF_CLASS_CHAR","OUT_OF_CLASS_RUN","encodeHeaderSafe","value","test","replace","run","encodeURIComponent"],"mappings":";;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BC,GACD,MAAMA,oBAAoB;AAC1B,MAAMC,mBAAmB;AAElB,SAASC,iBAAiBC,KAAa;IAC5C,OAAOH,kBAAkBI,IAAI,CAACD,SAC1BA,MAAME,OAAO,CAACJ,kBAAkB,CAACK,MAAQC,mBAAmBD,QAC5DH;AACN","ignoreList":[0]}}, + {"offset": {"line": 4974, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/lru-cache.ts"],"sourcesContent":["/**\n * Node in the doubly-linked list used for LRU tracking.\n * Each node represents a cache entry with bidirectional pointers.\n */\nclass LRUNode {\n public readonly key: string\n public data: T\n public size: number\n public prev: LRUNode | SentinelNode | null = null\n public next: LRUNode | SentinelNode | null = null\n\n constructor(key: string, data: T, size: number) {\n this.key = key\n this.data = data\n this.size = size\n }\n}\n\n/**\n * Sentinel node used for head/tail boundaries.\n * These nodes don't contain actual cache data but simplify list operations.\n */\nclass SentinelNode {\n public prev: LRUNode | SentinelNode | null = null\n public next: LRUNode | SentinelNode | null = null\n}\n\n/**\n * LRU (Least Recently Used) Cache implementation using a doubly-linked list\n * and hash map for O(1) operations.\n *\n * Algorithm:\n * - Uses a doubly-linked list to maintain access order (most recent at head)\n * - Hash map provides O(1) key-to-node lookup\n * - Sentinel head/tail nodes simplify edge case handling\n * - Size-based eviction supports custom size calculation functions\n *\n * Data Structure Layout:\n * HEAD <-> [most recent] <-> ... <-> [least recent] <-> TAIL\n *\n * Operations:\n * - get(): Move accessed node to head (mark as most recent)\n * - set(): Add new node at head, evict from tail if over capacity\n * - Eviction: Remove least recent node (tail.prev) when size exceeds limit\n */\nexport class LRUCache {\n private readonly cache: Map> = new Map()\n private readonly head: SentinelNode\n private readonly tail: SentinelNode\n private totalSize: number = 0\n private readonly maxSize: number\n private readonly calculateSize:\n | ((value: T, key: string) => number)\n | undefined\n private readonly onEvict: ((key: string, value: T) => void) | undefined\n\n constructor(\n maxSize: number,\n calculateSize?: (value: T, key: string) => number,\n onEvict?: (key: string, value: T) => void\n ) {\n this.maxSize = maxSize\n this.calculateSize = calculateSize\n this.onEvict = onEvict\n\n // Create sentinel nodes to simplify doubly-linked list operations\n // HEAD <-> TAIL (empty list)\n this.head = new SentinelNode()\n this.tail = new SentinelNode()\n this.head.next = this.tail\n this.tail.prev = this.head\n }\n\n /**\n * Adds a node immediately after the head (marks as most recently used).\n * Used when inserting new items or when an item is accessed.\n * PRECONDITION: node must be disconnected (prev/next should be null)\n */\n private addToHead(node: LRUNode): void {\n node.prev = this.head\n node.next = this.head.next\n // head.next is always non-null (points to tail or another node)\n this.head.next!.prev = node\n this.head.next = node\n }\n\n /**\n * Removes a node from its current position in the doubly-linked list.\n * Updates the prev/next pointers of adjacent nodes to maintain list integrity.\n * PRECONDITION: node must be connected (prev/next are non-null)\n */\n private removeNode(node: LRUNode): void {\n // Connected nodes always have non-null prev/next\n node.prev!.next = node.next\n node.next!.prev = node.prev\n }\n\n /**\n * Moves an existing node to the head position (marks as most recently used).\n * This is the core LRU operation - accessed items become most recent.\n */\n private moveToHead(node: LRUNode): void {\n this.removeNode(node)\n this.addToHead(node)\n }\n\n /**\n * Removes and returns the least recently used node (the one before tail).\n * This is called during eviction when the cache exceeds capacity.\n * PRECONDITION: cache is not empty (ensured by caller)\n */\n private removeTail(): LRUNode {\n const lastNode = this.tail.prev as LRUNode\n // tail.prev is always non-null and always LRUNode when cache is not empty\n this.removeNode(lastNode)\n return lastNode\n }\n\n /**\n * Sets a key-value pair in the cache.\n * If the key exists, updates the value and moves to head.\n * If new, adds at head and evicts from tail if necessary.\n *\n * Time Complexity:\n * - O(1) for uniform item sizes\n * - O(k) where k is the number of items evicted (can be O(N) for variable sizes)\n */\n public set(key: string, value: T): boolean {\n const size = this.calculateSize?.(value, key) ?? 1\n if (size <= 0) {\n throw new Error(\n `LRUCache: calculateSize returned ${size}, but size must be > 0. ` +\n `Items with size 0 would never be evicted, causing unbounded cache growth.`\n )\n }\n if (size > this.maxSize) {\n console.warn('Single item size exceeds maxSize')\n return false\n }\n\n const existing = this.cache.get(key)\n if (existing) {\n // Update existing node: adjust size and move to head (most recent)\n existing.data = value\n this.totalSize = this.totalSize - existing.size + size\n existing.size = size\n this.moveToHead(existing)\n } else {\n // Add new node at head (most recent position)\n const newNode = new LRUNode(key, value, size)\n this.cache.set(key, newNode)\n this.addToHead(newNode)\n this.totalSize += size\n }\n\n // Evict least recently used items until under capacity\n while (this.totalSize > this.maxSize && this.cache.size > 0) {\n const tail = this.removeTail()\n this.cache.delete(tail.key)\n this.totalSize -= tail.size\n this.onEvict?.(tail.key, tail.data)\n }\n\n return true\n }\n\n /**\n * Checks if a key exists in the cache.\n * This is a pure query operation - does NOT update LRU order.\n *\n * Time Complexity: O(1)\n */\n public has(key: string): boolean {\n return this.cache.has(key)\n }\n\n /**\n * Retrieves a value by key and marks it as most recently used.\n * Moving to head maintains the LRU property for future evictions.\n *\n * Time Complexity: O(1)\n */\n public get(key: string): T | undefined {\n const node = this.cache.get(key)\n if (!node) return undefined\n\n // Mark as most recently used by moving to head\n this.moveToHead(node)\n\n return node.data\n }\n\n /**\n * Returns an iterator over the cache entries. The order is outputted in the\n * order of most recently used to least recently used.\n */\n public *[Symbol.iterator](): IterableIterator<[string, T]> {\n let current = this.head.next\n while (current && current !== this.tail) {\n // Between head and tail, current is always LRUNode\n const node = current as LRUNode\n yield [node.key, node.data]\n current = current.next\n }\n }\n\n /**\n * Removes a specific key from the cache.\n * Updates both the hash map and doubly-linked list.\n *\n * Note: This is an explicit removal and does NOT trigger the `onEvict`\n * callback. Use this for intentional deletions where eviction tracking\n * is not needed.\n *\n * Time Complexity: O(1)\n */\n public remove(key: string): void {\n const node = this.cache.get(key)\n if (!node) return\n\n this.removeNode(node)\n this.cache.delete(key)\n this.totalSize -= node.size\n }\n\n /**\n * Returns the number of items in the cache.\n */\n public get size(): number {\n return this.cache.size\n }\n\n /**\n * Returns the current total size of all cached items.\n * This uses the custom size calculation if provided.\n */\n public get currentSize(): number {\n return this.totalSize\n }\n}\n"],"names":["LRUNode","constructor","key","data","size","prev","next","SentinelNode","LRUCache","maxSize","calculateSize","onEvict","cache","Map","totalSize","head","tail","addToHead","node","removeNode","moveToHead","removeTail","lastNode","set","value","Error","console","warn","existing","get","newNode","delete","has","undefined","Symbol","iterator","current","remove","currentSize"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 5157, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/patch-fetch.ts"],"sourcesContent":["import type {\n WorkAsyncStorage,\n WorkStore,\n} from '../app-render/work-async-storage.external'\n\nimport { AppRenderSpan, NextNodeServerSpan } from './trace/constants'\nimport {\n isRequestInsightsEnabled,\n recordRequestInsightFetch,\n} from './trace/request-insights'\nimport { getRequestInsightsIdentity } from './trace/request-insights-identity'\nimport { getTracer, SpanKind } from './trace/tracer'\nimport {\n CACHE_ONE_YEAR_SECONDS,\n INFINITE_CACHE,\n NEXT_CACHE_TAG_MAX_ITEMS,\n NEXT_CACHE_TAG_MAX_LENGTH,\n} from '../../lib/constants'\nimport { markCurrentScopeAsDynamic } from '../app-render/dynamic-rendering'\nimport { makeDynamicHangingPromise } from '../dynamic-rendering-utils'\nimport type { FetchMetric } from '../base-http'\nimport { createDedupeFetch } from './dedupe-fetch'\nimport {\n getCacheSignal,\n type RevalidateStore,\n type WorkUnitAsyncStorage,\n type WorkUnitStore,\n willConsumerServerCache,\n} from '../app-render/work-unit-async-storage.external'\nimport {\n CachedRouteKind,\n IncrementalCacheKind,\n type CachedFetchData,\n type ServerComponentsHmrCache,\n type SetIncrementalFetchCacheContext,\n} from '../response-cache'\nimport { cloneResponse } from './clone-response'\nimport type { IncrementalCache } from './incremental-cache'\nimport { RenderStage } from '../app-render/staged-rendering'\nimport { encodeHeaderSafe } from './encode-header-safe'\nimport type { Span } from './trace/tracer'\n\nconst isEdgeRuntime = process.env.NEXT_RUNTIME === 'edge'\n\n/**\n * Whether fetch cache configuration needs to be processed for the current work\n * unit before an origin fetch. Static prerender stores use it for dynamic\n * access tracking. Cache scopes apply it to their own cache policy, regardless\n * of which outer work unit created them. Development staged renders additionally\n * coordinate dynamic fetches with the dynamic render stage.\n */\nfunction shouldProcessFetchConfigForWorkUnit(\n workUnitStore: WorkUnitStore | undefined\n): boolean {\n if (!workUnitStore) {\n return false\n }\n\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'prerender-legacy':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n return true\n case 'request':\n return Boolean(\n process.env.NODE_ENV === 'development' &&\n process.env.__NEXT_CACHE_COMPONENTS &&\n workUnitStore.stagedRendering\n )\n case 'prerender-runtime':\n case 'validation-client':\n case 'build-time-generator':\n return false\n default:\n return workUnitStore satisfies never\n }\n}\n\ntype Fetcher = typeof fetch\n\ntype PatchedFetcher = Fetcher & {\n readonly __nextPatched: true\n readonly __nextGetStaticStore: () => WorkAsyncStorage\n readonly _nextOriginalFetch: Fetcher\n}\n\nexport const NEXT_PATCH_SYMBOL = Symbol.for('next-patch')\n\nfunction isFetchPatched() {\n return (globalThis as Record)[NEXT_PATCH_SYMBOL] === true\n}\n\nexport function validateRevalidate(\n revalidateVal: unknown,\n route: string\n): undefined | number {\n try {\n let normalizedRevalidate: number | undefined = undefined\n\n if (revalidateVal === false || revalidateVal === Infinity) {\n // Unlike Infinity, INFINITE_CACHE survives JSON serialization (e.g. in\n // the fetch cache).\n normalizedRevalidate = INFINITE_CACHE\n } else if (\n typeof revalidateVal === 'number' &&\n !isNaN(revalidateVal) &&\n revalidateVal > -1\n ) {\n normalizedRevalidate = revalidateVal\n } else if (typeof revalidateVal !== 'undefined') {\n throw new Error(\n `Invalid revalidate value \"${revalidateVal}\" on \"${route}\", must be a non-negative number or false`\n )\n }\n return normalizedRevalidate\n } catch (err: any) {\n // handle client component error from attempting to check revalidate value\n if (err instanceof Error && err.message.includes('Invalid revalidate')) {\n throw err\n }\n return undefined\n }\n}\n\nexport function validateTags(tags: any[], description: string) {\n const validTags: string[] = []\n const invalidTags: Array<{\n tag: any\n reason: string\n }> = []\n\n for (let i = 0; i < tags.length; i++) {\n const tag = tags[i]\n\n if (typeof tag !== 'string') {\n invalidTags.push({ tag, reason: 'invalid type, must be a string' })\n } else if (tag.length > NEXT_CACHE_TAG_MAX_LENGTH) {\n invalidTags.push({\n tag,\n reason: `exceeded max length of ${NEXT_CACHE_TAG_MAX_LENGTH}`,\n })\n } else {\n // Encode so a non-ASCII tag can be safely serialized into the\n // `x-next-cache-tags` HTTP header without tripping Node's header\n // validation. Length is checked on the raw input above.\n validTags.push(encodeHeaderSafe(tag))\n }\n\n if (validTags.length > NEXT_CACHE_TAG_MAX_ITEMS) {\n console.warn(\n `Warning: exceeded max tag count for ${description}, dropped tags:`,\n tags.slice(i).join(', ')\n )\n break\n }\n }\n\n if (invalidTags.length > 0) {\n console.warn(`Warning: invalid tags passed to ${description}: `)\n\n for (const { tag, reason } of invalidTags) {\n console.log(`tag: \"${tag}\" ${reason}`)\n }\n }\n return validTags\n}\n\nfunction trackFetchMetric(\n workStore: WorkStore,\n span: Span | undefined,\n ctx: Omit\n) {\n const metric = {\n ...ctx,\n end: performance.timeOrigin + performance.now(),\n idx: workStore.nextFetchId || 0,\n }\n\n span?.setAttributes({\n 'http.status_code': metric.status,\n 'next.fetch.idx': metric.idx,\n 'next.fetch.cache_status': metric.cacheStatus,\n 'next.fetch.cache_reason': metric.cacheReason,\n })\n\n if (isRequestInsightsEnabled()) {\n const requestInsightsIdentity = getRequestInsightsIdentity()\n const requestInsightsRequestId =\n requestInsightsIdentity?.requestId ?? workStore.requestId\n\n if (requestInsightsRequestId) {\n recordRequestInsightFetch(\n {\n requestId: requestInsightsRequestId,\n kind: requestInsightsIdentity?.kind,\n htmlRequestId:\n requestInsightsIdentity?.htmlRequestId ?? workStore.htmlRequestId,\n route: workStore.route,\n },\n {\n url: metric.url,\n method: metric.method,\n statusCode: metric.status,\n startTime: metric.start,\n durationMs: metric.end - metric.start,\n cacheStatus: metric.cacheStatus,\n cacheReason: metric.cacheReason,\n index: metric.idx,\n }\n )\n }\n }\n\n if (!workStore.shouldTrackFetchMetrics) {\n return\n }\n\n workStore.fetchMetrics ??= []\n\n workStore.fetchMetrics.push(metric)\n}\n\nasync function createCachedPrerenderResponse(\n res: Response,\n cacheKey: string,\n incrementalCacheContext: SetIncrementalFetchCacheContext | undefined,\n incrementalCache: IncrementalCache,\n revalidate: number,\n handleUnlock: () => Promise | void\n): Promise {\n // We are prerendering at build time or revalidate time with cacheComponents so we\n // need to buffer the response so we can guarantee it can be read in a\n // microtask.\n const bodyBuffer = await res.arrayBuffer()\n\n const fetchedData = {\n headers: Object.fromEntries(res.headers.entries()),\n body: Buffer.from(bodyBuffer).toString('base64'),\n status: res.status,\n url: res.url,\n }\n\n // We can skip setting the serverComponentsHmrCache because we aren't in dev\n // mode.\n\n if (incrementalCacheContext) {\n await incrementalCache.set(\n cacheKey,\n { kind: CachedRouteKind.FETCH, data: fetchedData, revalidate },\n incrementalCacheContext\n )\n }\n\n await handleUnlock()\n\n // We return a new Response to the caller.\n return new Response(bodyBuffer, {\n headers: res.headers,\n status: res.status,\n statusText: res.statusText,\n })\n}\n\nasync function createCachedDynamicResponse(\n workStore: WorkStore,\n res: Response,\n cacheKey: string,\n incrementalCacheContext: SetIncrementalFetchCacheContext | undefined,\n incrementalCache: IncrementalCache,\n serverComponentsHmrCache: ServerComponentsHmrCache | undefined,\n revalidate: number,\n input: RequestInfo | URL,\n handleUnlock: () => Promise | void,\n signal: AbortSignal | null\n): Promise {\n // We're cloning the response using this utility because there exists a bug in\n // the undici library around response cloning. See the following pull request\n // for more details: https://github.com/vercel/next.js/pull/73274\n const [cloned1, cloned2] = cloneResponse(res)\n\n // We are dynamically rendering including dev mode. We want to return the\n // response to the caller as soon as possible because it might stream over a\n // very long time.\n const cacheSetPromise = cloned1\n .arrayBuffer()\n .then(async (arrayBuffer) => {\n const bodyBuffer = Buffer.from(arrayBuffer)\n\n const fetchedData = {\n headers: Object.fromEntries(cloned1.headers.entries()),\n body: bodyBuffer.toString('base64'),\n status: cloned1.status,\n url: cloned1.url,\n }\n\n serverComponentsHmrCache?.set(cacheKey, fetchedData)\n\n if (incrementalCacheContext) {\n await incrementalCache.set(\n cacheKey,\n { kind: CachedRouteKind.FETCH, data: fetchedData, revalidate },\n incrementalCacheContext\n )\n }\n })\n .catch((error) => {\n // Don't warn if the request was aborted intentionally.\n if (!signal?.aborted) {\n console.warn(`Failed to set fetch cache`, input, error)\n }\n })\n .finally(handleUnlock)\n\n const pendingRevalidateKey = `cache-set-${cacheKey}`\n const pendingRevalidates = (workStore.pendingRevalidates ??= {})\n\n let pendingRevalidatePromise = Promise.resolve()\n if (pendingRevalidateKey in pendingRevalidates) {\n // There is already a pending revalidate entry that we need to await to\n // avoid race conditions.\n pendingRevalidatePromise = pendingRevalidates[pendingRevalidateKey]\n }\n\n pendingRevalidates[pendingRevalidateKey] = pendingRevalidatePromise\n .then(() => cacheSetPromise)\n .finally(() => {\n // If the pending revalidate is not present in the store, then we have\n // nothing to delete.\n if (!pendingRevalidates?.[pendingRevalidateKey]) {\n return\n }\n\n delete pendingRevalidates[pendingRevalidateKey]\n })\n\n return cloned2\n}\n\ninterface PatchableModule {\n workAsyncStorage: WorkAsyncStorage\n workUnitAsyncStorage: WorkUnitAsyncStorage\n}\n\nexport function createPatchedFetcher(\n originFetch: Fetcher,\n { workAsyncStorage, workUnitAsyncStorage }: PatchableModule\n): PatchedFetcher {\n // Create the patched fetch function.\n const patched = async function fetch(\n input: RequestInfo | URL,\n init: RequestInit | undefined\n ): Promise {\n let url: URL | undefined\n try {\n url = new URL(input instanceof Request ? input.url : input)\n url.username = ''\n url.password = ''\n } catch {\n // Error caused by malformed URL should be handled by native fetch\n url = undefined\n }\n const fetchUrl = url?.href ?? ''\n const method = init?.method?.toUpperCase() || 'GET'\n\n // Do create a new span trace for internal fetches in the\n // non-verbose mode.\n const isInternal = (init?.next as any)?.internal === true\n const hideSpan = process.env.NEXT_OTEL_FETCH_DISABLED === '1'\n // We don't track fetch metrics for internal fetches\n // so it's not critical that we have a start time, as it won't be recorded.\n // This is to workaround a flaky issue where performance APIs might\n // not be available and will require follow-up investigation.\n const fetchStart: number | undefined = isInternal\n ? undefined\n : performance.timeOrigin + performance.now()\n\n const workStore = workAsyncStorage.getStore()\n const workUnitStore = workUnitAsyncStorage.getStore()\n\n let cacheSignal = workUnitStore ? getCacheSignal(workUnitStore) : null\n if (cacheSignal) {\n cacheSignal.beginRead()\n }\n\n const result = getTracer().trace(\n isInternal ? NextNodeServerSpan.internalFetch : AppRenderSpan.fetch,\n {\n hideSpan,\n kind: SpanKind.CLIENT,\n spanName: ['fetch', method, fetchUrl].filter(Boolean).join(' '),\n attributes: {\n 'http.url': fetchUrl,\n 'http.method': method,\n 'net.peer.name': url?.hostname,\n 'net.peer.port': url?.port || undefined,\n },\n },\n async (span) => {\n // If this is an internal fetch, we should not do any special treatment.\n if (isInternal) {\n return originFetch(input, init)\n }\n\n // If the workStore is not available, we can't do any\n // special treatment of fetch, therefore fallback to the original\n // fetch implementation.\n if (!workStore) {\n return originFetch(input, init)\n }\n\n // We should also fallback to the original fetch implementation if we\n // are in draft mode, it does not constitute a static generation.\n if (workStore.isDraftMode) {\n return originFetch(input, init)\n }\n\n const isRequestInput =\n input &&\n typeof input === 'object' &&\n typeof (input as Request).method === 'string'\n\n // With `fetch(new Request(url), init)`, native fetch lets `init`\n // override the base Request. Merge them into a single effective Request\n // so cacheability, the cache key, and the upstream request all describe\n // the same thing.\n if (isRequestInput && init) {\n // `next` (revalidate/tags) is Next-specific and dropped by\n // `new Request`, so keep it on `init` and move the rest onto input.\n const { next, ...overrides } = init\n input = new Request(input as Request, overrides)\n init = next ? { next } : undefined\n }\n\n const getRequestMeta = (field: string) => {\n // If request input is present but init is not, retrieve from input first.\n const value = (init as any)?.[field]\n return value || (isRequestInput ? (input as any)[field] : null)\n }\n\n let finalRevalidate: number | undefined = undefined\n const getNextField = (field: 'revalidate' | 'tags') => {\n return typeof init?.next?.[field] !== 'undefined'\n ? init?.next?.[field]\n : isRequestInput\n ? (input as any).next?.[field]\n : undefined\n }\n // RequestInit doesn't keep extra fields e.g. next so it's\n // only available if init is used separate\n const originalFetchRevalidate = getNextField('revalidate')\n let currentFetchRevalidate = originalFetchRevalidate\n const tags: string[] = validateTags(\n getNextField('tags') || [],\n `fetch ${input.toString()}`\n )\n\n let revalidateStore: RevalidateStore | undefined\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-runtime':\n // TODO: Stop accumulating tags in client prerender. (fallthrough)\n case 'prerender-client':\n case 'validation-client':\n case 'prerender-legacy':\n case 'cache':\n case 'private-cache':\n revalidateStore = workUnitStore\n break\n case 'request':\n case 'unstable-cache':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n if (revalidateStore) {\n if (Array.isArray(tags)) {\n // Collect tags onto parent caches or parent prerenders.\n const collectedTags =\n revalidateStore.tags ?? (revalidateStore.tags = [])\n for (const tag of tags) {\n if (!collectedTags.includes(tag)) {\n collectedTags.push(tag)\n }\n }\n }\n }\n\n const implicitTags = workUnitStore?.implicitTags\n\n let pageFetchCacheMode = workStore.fetchCache\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'unstable-cache':\n // Inside unstable-cache we treat it the same as force-no-store on\n // the page.\n pageFetchCacheMode = 'force-no-store'\n break\n case 'prerender':\n case 'prerender-client':\n case 'validation-client':\n case 'prerender-runtime':\n case 'prerender-legacy':\n case 'request':\n case 'cache':\n case 'private-cache':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n const isUsingNoStore = !!workStore.isUnstableNoStore\n\n let currentFetchCacheConfig = getRequestMeta('cache')\n let cacheReason = ''\n let cacheWarning: string | undefined\n\n if (\n typeof currentFetchCacheConfig === 'string' &&\n typeof currentFetchRevalidate !== 'undefined'\n ) {\n // If the revalidate value conflicts with the cache value, we should warn the user and unset the conflicting values.\n const isConflictingRevalidate =\n // revalidate: 0 and cache: force-cache\n (currentFetchCacheConfig === 'force-cache' &&\n currentFetchRevalidate === 0) ||\n // revalidate: >0 or revalidate: false and cache: no-store\n (currentFetchCacheConfig === 'no-store' &&\n (currentFetchRevalidate > 0 || currentFetchRevalidate === false))\n\n if (isConflictingRevalidate) {\n cacheWarning = `Specified \"cache: ${currentFetchCacheConfig}\" and \"revalidate: ${currentFetchRevalidate}\", only one should be specified.`\n currentFetchCacheConfig = undefined\n currentFetchRevalidate = undefined\n }\n }\n\n const hasExplicitFetchCacheOptOut =\n // fetch config itself signals not to cache\n currentFetchCacheConfig === 'no-cache' ||\n currentFetchCacheConfig === 'no-store' ||\n // the fetch isn't explicitly caching and the segment level cache config signals not to cache\n // note: `pageFetchCacheMode` is also set by being in an unstable_cache context.\n pageFetchCacheMode === 'force-no-store' ||\n pageFetchCacheMode === 'only-no-store'\n\n // If no explicit fetch cache mode is set, but dynamic = `force-dynamic` is set,\n // we shouldn't consider caching the fetch. This is because the `dynamic` cache\n // is considered a \"top-level\" cache mode, whereas something like `fetchCache` is more\n // fine-grained. Top-level modes are responsible for setting reasonable defaults for the\n // other configurations.\n const noFetchConfigAndForceDynamic =\n !pageFetchCacheMode &&\n !currentFetchCacheConfig &&\n !currentFetchRevalidate &&\n workStore.forceDynamic\n\n if (\n // force-cache was specified without a revalidate value. We set the revalidate value to false\n // which will signal the cache to not revalidate\n currentFetchCacheConfig === 'force-cache' &&\n typeof currentFetchRevalidate === 'undefined'\n ) {\n currentFetchRevalidate = false\n } else if (\n hasExplicitFetchCacheOptOut ||\n noFetchConfigAndForceDynamic\n ) {\n currentFetchRevalidate = 0\n }\n\n if (\n currentFetchCacheConfig === 'no-cache' ||\n currentFetchCacheConfig === 'no-store'\n ) {\n cacheReason = `cache: ${currentFetchCacheConfig}`\n }\n\n finalRevalidate = validateRevalidate(\n currentFetchRevalidate,\n workStore.route\n )\n\n const _headers = getRequestMeta('headers')\n const initHeaders: Headers =\n typeof _headers?.get === 'function'\n ? _headers\n : new Headers(_headers || {})\n\n const hasUnCacheableHeader =\n initHeaders.get('authorization') || initHeaders.get('cookie')\n\n const isUnCacheableMethod = !['get', 'head'].includes(\n getRequestMeta('method')?.toLowerCase() || 'get'\n )\n\n /**\n * We automatically disable fetch caching under the following conditions:\n * - Fetch cache configs are not set. Specifically:\n * - A page fetch cache mode is not set (export const fetchCache=...)\n * - A fetch cache mode is not set in the fetch call (fetch(url, { cache: ... }))\n * or the fetch cache mode is set to 'default'\n * - A fetch revalidate value is not set in the fetch call (fetch(url, { revalidate: ... }))\n * - OR the fetch comes after a configuration that triggered dynamic rendering (e.g., reading cookies())\n * and the fetch was considered uncacheable (e.g., POST method or has authorization headers)\n */\n const hasNoExplicitCacheConfig =\n // eslint-disable-next-line eqeqeq\n pageFetchCacheMode == undefined &&\n // eslint-disable-next-line eqeqeq\n (currentFetchCacheConfig == undefined ||\n // when considering whether to opt into the default \"no-cache\" fetch semantics,\n // a \"default\" cache config should be treated the same as no cache config\n currentFetchCacheConfig === 'default') &&\n // eslint-disable-next-line eqeqeq\n currentFetchRevalidate == undefined\n\n let autoNoCache = Boolean(\n (hasUnCacheableHeader || isUnCacheableMethod) &&\n revalidateStore?.revalidate === 0\n )\n\n let isImplicitBuildTimeCache = false\n\n if (!autoNoCache && hasNoExplicitCacheConfig) {\n // We don't enable automatic no-cache behavior during build-time\n // prerendering so that we can still leverage the fetch cache between\n // export workers.\n if (workStore.isBuildTimePrerendering) {\n isImplicitBuildTimeCache = true\n } else {\n autoNoCache = true\n }\n }\n\n // If we have no cache config, and we're in Dynamic I/O prerendering,\n // it'll be a dynamic call. We don't have to issue that dynamic call.\n if (hasNoExplicitCacheConfig && workUnitStore !== undefined) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-runtime':\n // While we don't want to do caching in the client scope we know the\n // fetch will be dynamic for cacheComponents so we may as well avoid the\n // call here. (fallthrough)\n case 'prerender-client':\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n\n return makeDynamicHangingPromise(\n workUnitStore.renderSignal,\n workStore.route,\n 'fetch()'\n )\n case 'validation-client':\n break\n case 'request':\n if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore.stagedRendering\n ) {\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n await workUnitStore.stagedRendering.waitForStage(\n RenderStage.Dynamic\n )\n }\n break\n case 'prerender-legacy':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n switch (pageFetchCacheMode) {\n case 'force-no-store': {\n cacheReason = 'fetchCache = force-no-store'\n break\n }\n case 'only-no-store': {\n if (\n currentFetchCacheConfig === 'force-cache' ||\n (typeof finalRevalidate !== 'undefined' && finalRevalidate > 0)\n ) {\n throw new Error(\n `cache: 'force-cache' used on fetch for ${fetchUrl} with 'export const fetchCache = 'only-no-store'`\n )\n }\n cacheReason = 'fetchCache = only-no-store'\n break\n }\n case 'only-cache': {\n if (currentFetchCacheConfig === 'no-store') {\n throw new Error(\n `cache: 'no-store' used on fetch for ${fetchUrl} with 'export const fetchCache = 'only-cache'`\n )\n }\n break\n }\n case 'force-cache': {\n if (\n typeof currentFetchRevalidate === 'undefined' ||\n currentFetchRevalidate === 0\n ) {\n cacheReason = 'fetchCache = force-cache'\n finalRevalidate = INFINITE_CACHE\n }\n break\n }\n case 'default-cache':\n case 'default-no-store':\n case 'auto':\n case undefined:\n // sometimes we won't match the above cases. the reason we don't move\n // everything to this switch is the use of autoNoCache which is not a fetchCacheMode\n // I suspect this could be unified with fetchCacheMode however in which case we could\n // simplify the switch case and ensure we have an exhaustive switch handling all modes\n break\n default:\n pageFetchCacheMode satisfies never\n }\n\n if (typeof finalRevalidate === 'undefined') {\n if (pageFetchCacheMode === 'default-cache' && !isUsingNoStore) {\n finalRevalidate = INFINITE_CACHE\n cacheReason = 'fetchCache = default-cache'\n } else if (pageFetchCacheMode === 'default-no-store') {\n finalRevalidate = 0\n cacheReason = 'fetchCache = default-no-store'\n } else if (isUsingNoStore) {\n finalRevalidate = 0\n cacheReason = 'noStore call'\n } else if (autoNoCache) {\n finalRevalidate = 0\n cacheReason = 'auto no cache'\n } else {\n // TODO: should we consider this case an invariant?\n cacheReason = 'auto cache'\n finalRevalidate = revalidateStore\n ? revalidateStore.revalidate\n : INFINITE_CACHE\n }\n } else if (!cacheReason) {\n cacheReason = `revalidate: ${finalRevalidate}`\n }\n\n if (\n // when force static is configured we don't bail from\n // `revalidate: 0` values\n !(workStore.forceStatic && finalRevalidate === 0) &&\n // we don't consider autoNoCache to switch to dynamic for ISR\n !autoNoCache &&\n // If the revalidate value isn't currently set or the value is less\n // than the current revalidate value, we should update the revalidate\n // value.\n revalidateStore &&\n finalRevalidate < revalidateStore.revalidate\n ) {\n // If we were setting the revalidate value to 0, we should try to\n // postpone instead first.\n if (finalRevalidate === 0) {\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'prerender-runtime':\n // If we're in an instant validation, a dynamic fetch won't\n // have time to resolve during the validation prerender anyway,\n // so we leave it hanging. This can cause false negatives in shared parents,\n // but we accept that for now, because client data fetching is non-idiomatic.\n // eslint-disable-next-line no-fallthrough\n case 'validation-client':\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n return makeDynamicHangingPromise(\n workUnitStore.renderSignal,\n workStore.route,\n 'fetch()'\n )\n case 'request':\n if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore.stagedRendering\n ) {\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n await workUnitStore.stagedRendering.waitForStage(\n RenderStage.Dynamic\n )\n }\n break\n case 'prerender-legacy':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n markCurrentScopeAsDynamic(\n workStore,\n workUnitStore,\n `revalidate: 0 fetch ${input} ${workStore.route}`\n )\n }\n\n // We only want to set the revalidate store's revalidate time if it\n // was explicitly set for the fetch call, i.e.\n // originalFetchRevalidate.\n if (revalidateStore && originalFetchRevalidate === finalRevalidate) {\n revalidateStore.revalidate = finalRevalidate\n }\n }\n\n const isCacheableRevalidate =\n typeof finalRevalidate === 'number' && finalRevalidate > 0\n\n let cacheKey: string | undefined\n const { incrementalCache } = workStore\n let isHmrRefresh = false\n let serverComponentsHmrCache: ServerComponentsHmrCache | undefined\n\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'request':\n case 'cache':\n case 'private-cache':\n isHmrRefresh = workUnitStore.isHmrRefresh ?? false\n serverComponentsHmrCache = workUnitStore.serverComponentsHmrCache\n break\n case 'prerender':\n case 'prerender-client':\n case 'validation-client':\n case 'prerender-runtime':\n case 'prerender-legacy':\n case 'unstable-cache':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n if (\n incrementalCache &&\n (isCacheableRevalidate || serverComponentsHmrCache)\n ) {\n try {\n cacheKey = await incrementalCache.generateCacheKey(\n fetchUrl,\n isRequestInput ? (input as RequestInit) : init\n )\n } catch (cause) {\n console.error(`Failed to generate cache key for`, input, cause)\n }\n }\n\n const fetchIdx = workStore.nextFetchId ?? 1\n workStore.nextFetchId = fetchIdx + 1\n\n let handleUnlock: () => Promise | void = () => {}\n\n const doOriginalFetch = async (\n isStale?: boolean,\n cacheReasonOverride?: string\n ) => {\n const requestInputFields = [\n 'cache',\n 'credentials',\n 'headers',\n 'integrity',\n 'keepalive',\n 'method',\n 'mode',\n 'redirect',\n 'referrer',\n 'referrerPolicy',\n 'window',\n 'duplex',\n\n // don't pass through signal when revalidating\n ...(isStale ? [] : ['signal']),\n ]\n\n if (isRequestInput) {\n const reqInput: Request = input as any\n const reqOptions: RequestInit = {\n body: (reqInput as any)._ogBody || reqInput.body,\n }\n\n for (const field of requestInputFields) {\n // @ts-expect-error custom fields\n reqOptions[field] = reqInput[field]\n }\n input = new Request(reqInput.url, reqOptions)\n } else if (init) {\n const { _ogBody, body, signal, ...otherInput } =\n init as RequestInit & { _ogBody?: any }\n init = {\n ...otherInput,\n body: _ogBody || body,\n signal: isStale ? undefined : signal,\n }\n }\n\n // add metadata to init without editing the original\n const clonedInit = {\n ...init,\n next: { ...init?.next, fetchType: 'origin', fetchIdx },\n }\n\n return originFetch(input, clonedInit)\n .then(async (res) => {\n if (!isStale && fetchStart) {\n trackFetchMetric(workStore, span, {\n start: fetchStart,\n url: fetchUrl,\n cacheReason: cacheReasonOverride || cacheReason,\n cacheStatus:\n finalRevalidate === 0 || cacheReasonOverride\n ? 'skip'\n : 'miss',\n cacheWarning,\n status: res.status,\n method: clonedInit.method || 'GET',\n })\n }\n if (\n res.status === 200 &&\n incrementalCache &&\n cacheKey &&\n (isCacheableRevalidate || serverComponentsHmrCache)\n ) {\n const normalizedRevalidate =\n finalRevalidate >= INFINITE_CACHE\n ? CACHE_ONE_YEAR_SECONDS\n : finalRevalidate\n\n const incrementalCacheConfig:\n | SetIncrementalFetchCacheContext\n | undefined = isCacheableRevalidate\n ? {\n fetchCache: true,\n fetchUrl,\n fetchIdx,\n tags,\n isImplicitBuildTimeCache,\n }\n : undefined\n\n switch (workUnitStore?.type) {\n case 'prerender':\n case 'prerender-client':\n case 'validation-client':\n case 'prerender-runtime':\n return createCachedPrerenderResponse(\n res,\n cacheKey,\n incrementalCacheConfig,\n incrementalCache,\n normalizedRevalidate,\n handleUnlock\n )\n case 'request':\n if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore.stagedRendering &&\n workUnitStore.cacheSignal &&\n isCacheableRevalidate\n ) {\n // We're filling caches for a staged render with an\n // explicit cache config, so we need to wait for the\n // response to finish instead of streaming. For HMR-only\n // caching (no explicit revalidate), we fall through to\n // createCachedDynamicResponse which handles streaming\n // and abort gracefully.\n return createCachedPrerenderResponse(\n res,\n cacheKey,\n incrementalCacheConfig,\n incrementalCache,\n normalizedRevalidate,\n handleUnlock\n )\n }\n // fallthrough\n case 'prerender-legacy':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n case undefined:\n return createCachedDynamicResponse(\n workStore,\n res,\n cacheKey,\n incrementalCacheConfig,\n incrementalCache,\n serverComponentsHmrCache,\n normalizedRevalidate,\n input,\n handleUnlock,\n getRequestMeta('signal')\n )\n default:\n workUnitStore satisfies never\n }\n }\n\n // we had response that we determined shouldn't be cached so we return it\n // and don't cache it. This also needs to unlock the cache lock we acquired.\n await handleUnlock()\n\n return res\n })\n .catch((error) => {\n handleUnlock()\n throw error\n })\n }\n\n let cacheReasonOverride\n let isForegroundRevalidate = false\n let isHmrRefreshCache = false\n\n if (cacheKey && incrementalCache) {\n let cachedFetchData: CachedFetchData | undefined\n\n if (isHmrRefresh && serverComponentsHmrCache) {\n cachedFetchData = serverComponentsHmrCache.get(cacheKey)\n isHmrRefreshCache = true\n }\n\n if (isCacheableRevalidate && !cachedFetchData) {\n handleUnlock = await incrementalCache.lock(cacheKey)\n const entry = workStore.isOnDemandRevalidate\n ? null\n : await incrementalCache.get(cacheKey, {\n kind: IncrementalCacheKind.FETCH,\n revalidate: finalRevalidate,\n fetchUrl,\n fetchIdx,\n tags,\n softTags: implicitTags?.tags,\n })\n\n if (hasNoExplicitCacheConfig && workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'validation-client':\n case 'prerender-runtime':\n // We sometimes use the cache to dedupe fetches that do not\n // specify a cache configuration. In these cases we want to\n // make sure we still exclude them from prerenders if\n // cacheComponents is on so we introduce an artificial task boundary\n // here.\n await getTimeoutBoundary()\n break\n case 'request':\n if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore.stagedRendering\n ) {\n await workUnitStore.stagedRendering.waitForStage(\n RenderStage.Dynamic\n )\n }\n break\n case 'prerender-legacy':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n\n if (entry) {\n await handleUnlock()\n } else {\n // in dev, incremental cache response will be null in case the browser adds `cache-control: no-cache` in the request headers\n // TODO: it seems like we also hit this after revalidates in dev?\n cacheReasonOverride = 'cache-control: no-cache (hard refresh)'\n }\n\n if (entry?.value && entry.value.kind === CachedRouteKind.FETCH) {\n // If the consumer will persist this result in a server cache,\n // wait for fresh data so it doesn't persist a stale value.\n if (willConsumerServerCache(workUnitStore) && entry.isStale) {\n isForegroundRevalidate = true\n } else {\n if (entry.isStale) {\n workStore.pendingRevalidates ??= {}\n if (!workStore.pendingRevalidates[cacheKey]) {\n const pendingRevalidate = doOriginalFetch(true)\n .then(async (response) => ({\n body: await response.arrayBuffer(),\n headers: response.headers,\n status: response.status,\n statusText: response.statusText,\n }))\n .finally(() => {\n workStore.pendingRevalidates ??= {}\n delete workStore.pendingRevalidates[cacheKey || '']\n })\n\n // Attach the empty catch here so we don't get a \"unhandled\n // promise rejection\" warning.\n pendingRevalidate.catch(console.error)\n\n workStore.pendingRevalidates[cacheKey] = pendingRevalidate\n }\n }\n\n cachedFetchData = entry.value.data\n }\n }\n }\n\n if (cachedFetchData) {\n if (fetchStart) {\n trackFetchMetric(workStore, span, {\n start: fetchStart,\n url: fetchUrl,\n cacheReason,\n cacheStatus: isHmrRefreshCache ? 'hmr' : 'hit',\n cacheWarning,\n status: cachedFetchData.status || 200,\n method: init?.method || 'GET',\n })\n }\n\n const response = new Response(\n Buffer.from(cachedFetchData.body, 'base64'),\n {\n headers: cachedFetchData.headers,\n status: cachedFetchData.status,\n }\n )\n\n Object.defineProperty(response, 'url', {\n value: cachedFetchData.url,\n })\n\n return response\n }\n }\n\n if (\n init &&\n typeof init === 'object' &&\n shouldProcessFetchConfigForWorkUnit(workUnitStore)\n ) {\n const { cache } = init\n\n // Delete `cache` property as Cloudflare Workers will throw an error\n if (isEdgeRuntime) delete init.cache\n\n if (cache === 'no-store') {\n // If enabled, we should bail out of static generation.\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'prerender-runtime':\n case 'validation-client':\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n return makeDynamicHangingPromise(\n workUnitStore.renderSignal,\n workStore.route,\n 'fetch()'\n )\n case 'request':\n if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore.stagedRendering\n ) {\n if (cacheSignal) {\n cacheSignal.endRead()\n cacheSignal = null\n }\n await workUnitStore.stagedRendering.waitForStage(\n RenderStage.Dynamic\n )\n }\n break\n case 'prerender-legacy':\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n markCurrentScopeAsDynamic(\n workStore,\n workUnitStore,\n `no-store fetch ${input} ${workStore.route}`\n )\n }\n\n const hasNextConfig = 'next' in init\n const { next = {} } = init\n if (\n typeof next.revalidate === 'number' &&\n revalidateStore &&\n next.revalidate < revalidateStore.revalidate\n ) {\n if (next.revalidate === 0) {\n // If enabled, we should bail out of static generation.\n if (workUnitStore) {\n switch (workUnitStore.type) {\n case 'prerender':\n case 'prerender-client':\n case 'prerender-runtime':\n case 'validation-client':\n return makeDynamicHangingPromise(\n workUnitStore.renderSignal,\n workStore.route,\n 'fetch()'\n )\n case 'request':\n if (\n process.env.NODE_ENV === 'development' &&\n workUnitStore.stagedRendering\n ) {\n await workUnitStore.stagedRendering.waitForStage(\n RenderStage.Dynamic\n )\n }\n break\n case 'cache':\n case 'private-cache':\n case 'unstable-cache':\n case 'prerender-legacy':\n case 'build-time-generator':\n break\n default:\n workUnitStore satisfies never\n }\n }\n markCurrentScopeAsDynamic(\n workStore,\n workUnitStore,\n `revalidate: 0 fetch ${input} ${workStore.route}`\n )\n }\n\n if (!workStore.forceStatic || next.revalidate !== 0) {\n revalidateStore.revalidate = next.revalidate\n }\n }\n if (hasNextConfig) delete init.next\n }\n\n // if we are revalidating the whole page via time or on-demand and\n // the fetch cache entry is stale we should still de-dupe the\n // origin hit if it's a cache-able entry\n if (cacheKey && isForegroundRevalidate) {\n const pendingRevalidateKey = cacheKey\n workStore.pendingRevalidates ??= {}\n let pendingRevalidate =\n workStore.pendingRevalidates[pendingRevalidateKey]\n\n if (pendingRevalidate) {\n const revalidatedResult: {\n body: ArrayBuffer\n headers: Headers\n status: number\n statusText: string\n } = await pendingRevalidate\n return new Response(revalidatedResult.body, {\n headers: revalidatedResult.headers,\n status: revalidatedResult.status,\n statusText: revalidatedResult.statusText,\n })\n }\n\n // We used to just resolve the Response and clone it however for\n // static generation with cacheComponents we need the response to be able to\n // be resolved in a microtask and cloning the response will never have\n // a body that can resolve in a microtask in node (as observed through\n // experimentation) So instead we await the body and then when it is\n // available we construct manually cloned Response objects with the\n // body as an ArrayBuffer. This will be resolvable in a microtask\n // making it compatible with cacheComponents.\n const pendingResponse = doOriginalFetch(true, cacheReasonOverride)\n // We're cloning the response using this utility because there\n // exists a bug in the undici library around response cloning.\n // See the following pull request for more details:\n // https://github.com/vercel/next.js/pull/73274\n .then(cloneResponse)\n\n pendingRevalidate = pendingResponse\n .then(async (responses) => {\n const response = responses[0]\n return {\n body: await response.arrayBuffer(),\n headers: response.headers,\n status: response.status,\n statusText: response.statusText,\n }\n })\n .finally(() => {\n // If the pending revalidate is not present in the store, then\n // we have nothing to delete.\n if (!workStore.pendingRevalidates?.[pendingRevalidateKey]) {\n return\n }\n\n delete workStore.pendingRevalidates[pendingRevalidateKey]\n })\n\n // Attach the empty catch here so we don't get a \"unhandled promise\n // rejection\" warning\n pendingRevalidate.catch(() => {})\n\n workStore.pendingRevalidates[pendingRevalidateKey] = pendingRevalidate\n\n return pendingResponse.then((responses) => responses[1])\n } else {\n return doOriginalFetch(false, cacheReasonOverride)\n }\n }\n )\n\n if (cacheSignal) {\n try {\n return await result\n } finally {\n if (cacheSignal) {\n cacheSignal.endRead()\n }\n }\n }\n return result\n }\n\n // Attach the necessary properties to the patched fetch function.\n // We don't use this to determine if the fetch function has been patched,\n // but for external consumers to determine if the fetch function has been\n // patched.\n patched.__nextPatched = true as const\n patched.__nextGetStaticStore = () => workAsyncStorage\n patched._nextOriginalFetch = originFetch\n ;(globalThis as Record)[NEXT_PATCH_SYMBOL] = true\n\n // Assign the function name also as a name property, so that it's preserved\n // even when mangling is enabled.\n Object.defineProperty(patched, 'name', { value: 'fetch', writable: false })\n\n return patched\n}\n\n// we patch fetch to collect cache information used for\n// determining if a page is static or not\nexport function patchFetch(options: PatchableModule) {\n // If we've already patched fetch, we should not patch it again.\n if (isFetchPatched()) return\n\n // Grab the original fetch function. We'll attach this so we can use it in\n // the patched fetch function.\n const original = createDedupeFetch(globalThis.fetch)\n\n // Set the global fetch to the patched fetch.\n globalThis.fetch = createPatchedFetcher(original, options)\n}\n\nlet currentTimeoutBoundary: null | Promise = null\nfunction getTimeoutBoundary() {\n if (!currentTimeoutBoundary) {\n currentTimeoutBoundary = new Promise((r) => {\n setTimeout(() => {\n currentTimeoutBoundary = null\n r()\n }, 0)\n })\n }\n return currentTimeoutBoundary\n}\n"],"names":["AppRenderSpan","NextNodeServerSpan","isRequestInsightsEnabled","recordRequestInsightFetch","getRequestInsightsIdentity","getTracer","SpanKind","CACHE_ONE_YEAR_SECONDS","INFINITE_CACHE","NEXT_CACHE_TAG_MAX_ITEMS","NEXT_CACHE_TAG_MAX_LENGTH","markCurrentScopeAsDynamic","makeDynamicHangingPromise","createDedupeFetch","getCacheSignal","willConsumerServerCache","CachedRouteKind","IncrementalCacheKind","cloneResponse","RenderStage","encodeHeaderSafe","isEdgeRuntime","process","env","NEXT_RUNTIME","shouldProcessFetchConfigForWorkUnit","workUnitStore","type","Boolean","NODE_ENV","__NEXT_CACHE_COMPONENTS","stagedRendering","NEXT_PATCH_SYMBOL","Symbol","for","isFetchPatched","globalThis","validateRevalidate","revalidateVal","route","normalizedRevalidate","undefined","Infinity","isNaN","Error","err","message","includes","validateTags","tags","description","validTags","invalidTags","i","length","tag","push","reason","console","warn","slice","join","log","trackFetchMetric","workStore","span","ctx","metric","end","performance","timeOrigin","now","idx","nextFetchId","setAttributes","status","cacheStatus","cacheReason","requestInsightsIdentity","requestInsightsRequestId","requestId","kind","htmlRequestId","url","method","statusCode","startTime","start","durationMs","index","shouldTrackFetchMetrics","fetchMetrics","createCachedPrerenderResponse","res","cacheKey","incrementalCacheContext","incrementalCache","revalidate","handleUnlock","bodyBuffer","arrayBuffer","fetchedData","headers","Object","fromEntries","entries","body","Buffer","from","toString","set","FETCH","data","Response","statusText","createCachedDynamicResponse","serverComponentsHmrCache","input","signal","cloned1","cloned2","cacheSetPromise","then","catch","error","aborted","finally","pendingRevalidateKey","pendingRevalidates","pendingRevalidatePromise","Promise","resolve","createPatchedFetcher","originFetch","workAsyncStorage","workUnitAsyncStorage","patched","fetch","init","URL","Request","username","password","fetchUrl","href","toUpperCase","isInternal","next","internal","hideSpan","NEXT_OTEL_FETCH_DISABLED","fetchStart","getStore","cacheSignal","beginRead","result","trace","internalFetch","CLIENT","spanName","filter","attributes","hostname","port","getRequestMeta","isDraftMode","isRequestInput","overrides","field","value","finalRevalidate","getNextField","originalFetchRevalidate","currentFetchRevalidate","revalidateStore","Array","isArray","collectedTags","implicitTags","pageFetchCacheMode","fetchCache","isUsingNoStore","isUnstableNoStore","currentFetchCacheConfig","cacheWarning","isConflictingRevalidate","hasExplicitFetchCacheOptOut","noFetchConfigAndForceDynamic","forceDynamic","_headers","initHeaders","get","Headers","hasUnCacheableHeader","isUnCacheableMethod","toLowerCase","hasNoExplicitCacheConfig","autoNoCache","isImplicitBuildTimeCache","isBuildTimePrerendering","endRead","renderSignal","waitForStage","Dynamic","forceStatic","isCacheableRevalidate","isHmrRefresh","generateCacheKey","cause","fetchIdx","doOriginalFetch","isStale","cacheReasonOverride","requestInputFields","reqInput","reqOptions","_ogBody","otherInput","clonedInit","fetchType","incrementalCacheConfig","isForegroundRevalidate","isHmrRefreshCache","cachedFetchData","lock","entry","isOnDemandRevalidate","softTags","getTimeoutBoundary","pendingRevalidate","response","defineProperty","cache","hasNextConfig","revalidatedResult","pendingResponse","responses","__nextPatched","__nextGetStaticStore","_nextOriginalFetch","writable","patchFetch","options","original","currentTimeoutBoundary","r","setTimeout"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 6181, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/route-cache-key.ts"],"sourcesContent":["import type { RouteDefinition } from '../route-definitions/route-definition'\nimport type {\n DynamicPrerenderManifestRoute,\n PrerenderManifestRoute,\n} from '../../build'\nimport { normalizePagePath } from '../../shared/lib/page-path/normalize-page-path'\nimport { normalizeLocalePath } from '../../shared/lib/i18n/normalize-locale-path'\nimport { InvariantError } from '../../shared/lib/invariant-error'\nimport { AppPathnameNormalizer } from '../normalizers/built/app/app-pathname-normalizer'\nimport { RouteKind } from '../route-kind'\n\nexport const ROUTE_CACHE_DIRECTORY = 'route-cache'\n\nexport type ResponseCacheOwner = {\n readonly kind: RouteKind\n /** Canonical Pages pathname or full App module name, including groups and slots. */\n readonly sourceRoute: string\n}\n\nconst appPathnameNormalizer = new AppPathnameNormalizer()\n\n/** Convert a runtime route definition to the identity used by response caches. */\nexport function getResponseCacheOwner(\n definition: Pick\n): ResponseCacheOwner {\n return {\n kind: definition.kind,\n // Pages module names can include a trailing /index in Turbopack. Their\n // pathname matches the manifest's source in both bundlers. App modules\n // retain groups and parallel slots in their cache identity.\n sourceRoute:\n definition.kind === RouteKind.PAGES\n ? definition.pathname\n : definition.page,\n }\n}\n\n/**\n * Prerender metadata already identifies its source route. Compare that source\n * with the selected module before using its metadata, including negative\n * entries and partially specialized fallback shells. Cache storage continues\n * to use the full module identity, including groups and parallel slots.\n */\nexport function isRouteCacheOwner(\n pathname: string,\n owner: ResponseCacheOwner,\n prerender:\n | Pick\n | Pick\n | undefined,\n locales?: readonly string[]\n): boolean {\n if (!prerender) {\n return false\n }\n\n // Pages have JSON data routes, App Pages have RSC data routes, and App\n // Route Handlers have no separate data route.\n const kind =\n prerender.dataRoute === null\n ? RouteKind.APP_ROUTE\n : prerender.dataRoute.endsWith('.json')\n ? RouteKind.PAGES\n : prerender.dataRoute.endsWith('.rsc')\n ? RouteKind.APP_PAGE\n : undefined\n if (kind !== owner.kind) {\n return false\n }\n\n const source =\n 'srcRoute' in prerender ? prerender.srcRoute : prerender.fallbackSourceRoute\n const prerenderOwner =\n source ??\n (kind === RouteKind.PAGES\n ? normalizeLocalePath(pathname, locales).pathname\n : pathname)\n\n return (\n prerenderOwner ===\n (kind === RouteKind.PAGES\n ? owner.sourceRoute\n : appPathnameNormalizer.normalize(owner.sourceRoute))\n )\n}\n\n/**\n * Response keys are opaque to cache handlers. Hash the source route into one\n * fixed-length directory, preserving App groups and slots without expanding\n * Unicode names or repeating the source directory hierarchy on disk. The\n * pathname stays readable and is normalized exactly once before namespacing.\n */\nexport function getRouteCacheKey(\n pathname: string,\n owner: ResponseCacheOwner\n): string {\n if (!owner) {\n throw new InvariantError('Response cache requires a source route')\n }\n const { sourceRoute } = owner\n let source: string\n if (process.env.NEXT_RUNTIME === 'edge') {\n const sha256 =\n require('next/dist/compiled/hash.js/sha256') as typeof import('next/dist/compiled/hash.js/sha256')\n source = sha256()\n .update(new TextEncoder().encode(sourceRoute))\n .digest('hex')\n } else {\n const { createHash } = require('crypto') as typeof import('crypto')\n source = createHash('sha256').update(sourceRoute).digest('hex')\n }\n return `/${ROUTE_CACHE_DIRECTORY}/${owner.kind}/${source}/$${normalizePagePath(pathname)}`\n}\n"],"names":["normalizePagePath","normalizeLocalePath","InvariantError","AppPathnameNormalizer","RouteKind","ROUTE_CACHE_DIRECTORY","appPathnameNormalizer","getResponseCacheOwner","definition","kind","sourceRoute","PAGES","pathname","page","isRouteCacheOwner","owner","prerender","locales","dataRoute","APP_ROUTE","endsWith","APP_PAGE","undefined","source","srcRoute","fallbackSourceRoute","prerenderOwner","normalize","getRouteCacheKey","process","env","NEXT_RUNTIME","sha256","require","update","TextEncoder","encode","digest","createHash"],"mappings":";;;;;;;;;;AAKA,SAASA,iBAAiB,QAAQ,iDAAgD;AAClF,SAASC,mBAAmB,QAAQ,8CAA6C;AACjF,SAASC,cAAc,QAAQ,mCAAkC;AACjE,SAASC,qBAAqB,QAAQ,mDAAkD;AACxF,SAASC,SAAS,QAAQ,gBAAe;;;;;;AAElC,MAAMC,wBAAwB,cAAa;AAQlD,MAAMC,wBAAwB,IAAIH,wOAAAA;AAG3B,SAASI,sBACdC,UAA+D;IAE/D,OAAO;QACLC,MAAMD,WAAWC,IAAI;QACrB,uEAAuE;QACvE,uEAAuE;QACvE,4DAA4D;QAC5DC,aACEF,WAAWC,IAAI,KAAKL,6KAAAA,CAAUO,KAAK,GAC/BH,WAAWI,QAAQ,GACnBJ,WAAWK,IAAI;IACvB;AACF;AAQO,SAASC,kBACdF,QAAgB,EAChBG,KAAyB,EACzBC,SAGa,EACbC,OAA2B;IAE3B,IAAI,CAACD,WAAW;QACd,OAAO;IACT;IAEA,uEAAuE;IACvE,8CAA8C;IAC9C,MAAMP,OACJO,UAAUE,SAAS,KAAK,OACpBd,6KAAAA,CAAUe,SAAS,GACnBH,UAAUE,SAAS,CAACE,QAAQ,CAAC,WAC3BhB,6KAAAA,CAAUO,KAAK,GACfK,UAAUE,SAAS,CAACE,QAAQ,CAAC,UAC3BhB,6KAAAA,CAAUiB,QAAQ,GAClBC;IACV,IAAIb,SAASM,MAAMN,IAAI,EAAE;QACvB,OAAO;IACT;IAEA,MAAMc,SACJ,cAAcP,YAAYA,UAAUQ,QAAQ,GAAGR,UAAUS,mBAAmB;IAC9E,MAAMC,iBACJH,UACCd,CAAAA,SAASL,6KAAAA,CAAUO,KAAK,OACrBV,oNAAAA,EAAoBW,UAAUK,SAASL,QAAQ,GAC/CA,QAAO;IAEb,OACEc,mBACCjB,CAAAA,SAASL,6KAAAA,CAAUO,KAAK,GACrBI,MAAML,WAAW,GACjBJ,sBAAsBqB,SAAS,CAACZ,MAAML,WAAW,CAAA;AAEzD;AAQO,SAASkB,iBACdhB,QAAgB,EAChBG,KAAyB;IAEzB,IAAI,CAACA,OAAO;QACV,MAAM,IAAIb,8LAAAA,CAAe;IAC3B;IACA,MAAM,EAAEQ,WAAW,EAAE,GAAGK;IACxB,IAAIQ;IACJ,IAAIM,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;SAMlC;QACL,MAAM,EAAEO,UAAU,EAAE,GAAGL,QAAQ;QAC/BV,SAASe,WAAW,UAAUJ,MAAM,CAACxB,aAAa2B,MAAM,CAAC;IAC3D;IACA,OAAO,CAAC,CAAC,EAAEhC,sBAAsB,CAAC,EAAEU,MAAMN,IAAI,CAAC,CAAC,EAAEc,OAAO,EAAE,MAAEvB,wNAAAA,EAAkBY,WAAW;AAC5F","ignoreList":[0]}}, + {"offset": {"line": 6244, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/trace/constants.ts"],"sourcesContent":["/**\n * Contains predefined constants for the trace span name in next/server.\n *\n * Currently, next/server/tracer is internal implementation only for tracking\n * next.js's implementation only with known span names defined here.\n **/\n\n// eslint typescript has a bug with TS enums\n\nenum BaseServerSpan {\n handleRequest = 'BaseServer.handleRequest',\n run = 'BaseServer.run',\n pipe = 'BaseServer.pipe',\n getStaticHTML = 'BaseServer.getStaticHTML',\n render = 'BaseServer.render',\n renderToResponseWithComponents = 'BaseServer.renderToResponseWithComponents',\n renderToResponse = 'BaseServer.renderToResponse',\n renderToHTML = 'BaseServer.renderToHTML',\n renderError = 'BaseServer.renderError',\n renderErrorToResponse = 'BaseServer.renderErrorToResponse',\n renderErrorToHTML = 'BaseServer.renderErrorToHTML',\n render404 = 'BaseServer.render404',\n}\n\nenum LoadComponentsSpan {\n loadDefaultErrorComponents = 'LoadComponents.loadDefaultErrorComponents',\n loadComponents = 'LoadComponents.loadComponents',\n loadRouteModule = 'LoadComponents.loadRouteModule',\n}\n\nenum InstrumentationSpan {\n loadModule = 'Instrumentation.loadModule',\n register = 'Instrumentation.register',\n}\n\nenum NextServerSpan {\n getRequestHandler = 'NextServer.getRequestHandler',\n getRequestHandlerWithMetadata = 'NextServer.getRequestHandlerWithMetadata',\n getServer = 'NextServer.getServer',\n getServerRequestHandler = 'NextServer.getServerRequestHandler',\n createServer = 'createServer.createServer',\n}\n\nenum NextNodeServerSpan {\n compression = 'NextNodeServer.compression',\n getBuildId = 'NextNodeServer.getBuildId',\n createComponentTree = 'NextNodeServer.createComponentTree',\n clientComponentLoading = 'NextNodeServer.clientComponentLoading',\n getLayoutOrPageModule = 'NextNodeServer.getLayoutOrPageModule',\n generateStaticRoutes = 'NextNodeServer.generateStaticRoutes',\n generateFsStaticRoutes = 'NextNodeServer.generateFsStaticRoutes',\n generatePublicRoutes = 'NextNodeServer.generatePublicRoutes',\n generateImageRoutes = 'NextNodeServer.generateImageRoutes.route',\n sendRenderResult = 'NextNodeServer.sendRenderResult',\n proxyRequest = 'NextNodeServer.proxyRequest',\n runApi = 'NextNodeServer.runApi',\n render = 'NextNodeServer.render',\n renderHTML = 'NextNodeServer.renderHTML',\n imageOptimizer = 'NextNodeServer.imageOptimizer',\n getPagePath = 'NextNodeServer.getPagePath',\n getRoutesManifest = 'NextNodeServer.getRoutesManifest',\n findPageComponents = 'NextNodeServer.findPageComponents',\n getFontManifest = 'NextNodeServer.getFontManifest',\n getServerComponentManifest = 'NextNodeServer.getServerComponentManifest',\n getRequestHandler = 'NextNodeServer.getRequestHandler',\n renderToHTML = 'NextNodeServer.renderToHTML',\n renderError = 'NextNodeServer.renderError',\n renderErrorToHTML = 'NextNodeServer.renderErrorToHTML',\n render404 = 'NextNodeServer.render404',\n startResponse = 'NextNodeServer.startResponse',\n\n // nested inner span, does not require parent scope name\n route = 'route',\n onProxyReq = 'onProxyReq',\n apiResolver = 'apiResolver',\n internalFetch = 'internalFetch',\n}\n\nenum StartServerSpan {\n startServer = 'startServer.startServer',\n}\n\nenum RenderSpan {\n getServerSideProps = 'Render.getServerSideProps',\n getStaticProps = 'Render.getStaticProps',\n renderToString = 'Render.renderToString',\n renderDocument = 'Render.renderDocument',\n createBodyResult = 'Render.createBodyResult',\n}\n\nenum AppRenderSpan {\n renderToString = 'AppRender.renderToString',\n renderToReadableStream = 'AppRender.renderToReadableStream',\n getBodyResult = 'AppRender.getBodyResult',\n fetch = 'AppRender.fetch',\n waitShellReady = 'AppRender.waitShellReady',\n renderToNodeFizzStream = 'AppRender.renderToNodeFizzStream',\n instantInsights = 'AppRender.instantInsights',\n instantInsightsPrepareValidation = 'AppRender.instantInsights.prepareValidation',\n instantInsightsRunValidation = 'AppRender.instantInsights.runValidation',\n}\n\nenum DevBundlerServiceSpan {\n ensurePage = 'DevBundlerService.ensurePage',\n}\n\nenum RouterSpan {\n executeRoute = 'Router.executeRoute',\n}\n\nenum NodeSpan {\n runHandler = 'Node.runHandler',\n}\n\nenum AppRouteRouteHandlersSpan {\n runHandler = 'AppRouteRouteHandlers.runHandler',\n}\n\nenum AppRouteRouteModuleSpan {\n loadUserland = 'AppRouteRouteModule.loadUserland',\n}\n\nenum RouteModuleSpan {\n prepare = 'RouteModule.prepare',\n loadManifests = 'RouteModule.loadManifests',\n}\nenum ResolveMetadataSpan {\n generateMetadata = 'ResolveMetadata.generateMetadata',\n generateViewport = 'ResolveMetadata.generateViewport',\n}\n\nenum MiddlewareSpan {\n execute = 'Middleware.execute',\n}\n\ntype SpanTypes =\n | `${BaseServerSpan}`\n | `${LoadComponentsSpan}`\n | `${InstrumentationSpan}`\n | `${NextServerSpan}`\n | `${StartServerSpan}`\n | `${NextNodeServerSpan}`\n | `${RenderSpan}`\n | `${RouterSpan}`\n | `${AppRenderSpan}`\n | `${DevBundlerServiceSpan}`\n | `${NodeSpan}`\n | `${AppRouteRouteHandlersSpan}`\n | `${AppRouteRouteModuleSpan}`\n | `${RouteModuleSpan}`\n | `${ResolveMetadataSpan}`\n | `${MiddlewareSpan}`\n\n// This list is used to filter out spans that are not relevant to the user\nexport const NextVanillaSpanAllowlist = new Set([\n MiddlewareSpan.execute,\n BaseServerSpan.handleRequest,\n RenderSpan.getServerSideProps,\n RenderSpan.getStaticProps,\n AppRenderSpan.fetch,\n AppRenderSpan.getBodyResult,\n LoadComponentsSpan.loadRouteModule,\n RenderSpan.renderDocument,\n NodeSpan.runHandler,\n AppRouteRouteHandlersSpan.runHandler,\n AppRouteRouteModuleSpan.loadUserland,\n RouteModuleSpan.prepare,\n InstrumentationSpan.loadModule,\n InstrumentationSpan.register,\n ResolveMetadataSpan.generateMetadata,\n ResolveMetadataSpan.generateViewport,\n NextNodeServerSpan.createComponentTree,\n NextNodeServerSpan.findPageComponents,\n NextNodeServerSpan.getLayoutOrPageModule,\n NextNodeServerSpan.startResponse,\n NextNodeServerSpan.clientComponentLoading,\n])\n\n// These Spans are allowed to be always logged\n// when the otel log prefix env is set\nexport const LogSpanAllowList = new Set([\n NextNodeServerSpan.findPageComponents,\n NextNodeServerSpan.createComponentTree,\n NextNodeServerSpan.clientComponentLoading,\n])\n\nexport {\n BaseServerSpan,\n LoadComponentsSpan,\n InstrumentationSpan,\n NextServerSpan,\n NextNodeServerSpan,\n StartServerSpan,\n RenderSpan,\n RouterSpan,\n AppRenderSpan,\n DevBundlerServiceSpan,\n NodeSpan,\n AppRouteRouteHandlersSpan,\n AppRouteRouteModuleSpan,\n RouteModuleSpan,\n ResolveMetadataSpan,\n MiddlewareSpan,\n}\n\nexport type { SpanTypes }\n"],"names":["BaseServerSpan","LoadComponentsSpan","InstrumentationSpan","NextServerSpan","NextNodeServerSpan","StartServerSpan","RenderSpan","AppRenderSpan","DevBundlerServiceSpan","RouterSpan","NodeSpan","AppRouteRouteHandlersSpan","AppRouteRouteModuleSpan","RouteModuleSpan","ResolveMetadataSpan","MiddlewareSpan","NextVanillaSpanAllowlist","Set","LogSpanAllowList"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;EAKE,GAEF,4CAA4C;AAE5C,IAAKA,iBAAAA,WAAAA,GAAAA,SAAAA,cAAAA;;;;;;;;;;;;;WAAAA;EAAAA,kBAAAA,CAAAA;AAeL,IAAKC,qBAAAA,WAAAA,GAAAA,SAAAA,kBAAAA;;;;WAAAA;EAAAA,sBAAAA,CAAAA;AAML,IAAKC,sBAAAA,WAAAA,GAAAA,SAAAA,mBAAAA;;;WAAAA;EAAAA,uBAAAA,CAAAA;AAKL,IAAKC,iBAAAA,WAAAA,GAAAA,SAAAA,cAAAA;;;;;;WAAAA;EAAAA,kBAAAA,CAAAA;AAQL,IAAKC,qBAAAA,WAAAA,GAAAA,SAAAA,kBAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4BH,wDAAwD;;;;;WA5BrDA;EAAAA,sBAAAA,CAAAA;AAmCL,IAAKC,kBAAAA,WAAAA,GAAAA,SAAAA,eAAAA;;WAAAA;EAAAA,mBAAAA,CAAAA;AAIL,IAAKC,aAAAA,WAAAA,GAAAA,SAAAA,UAAAA;;;;;;WAAAA;EAAAA,cAAAA,CAAAA;AAQL,IAAKC,gBAAAA,WAAAA,GAAAA,SAAAA,aAAAA;;;;;;;;;;WAAAA;EAAAA,iBAAAA,CAAAA;AAYL,IAAKC,wBAAAA,WAAAA,GAAAA,SAAAA,qBAAAA;;WAAAA;EAAAA,yBAAAA,CAAAA;AAIL,IAAKC,aAAAA,WAAAA,GAAAA,SAAAA,UAAAA;;WAAAA;EAAAA,cAAAA,CAAAA;AAIL,IAAKC,WAAAA,WAAAA,GAAAA,SAAAA,QAAAA;;WAAAA;EAAAA,YAAAA,CAAAA;AAIL,IAAKC,4BAAAA,WAAAA,GAAAA,SAAAA,yBAAAA;;WAAAA;EAAAA,6BAAAA,CAAAA;AAIL,IAAKC,0BAAAA,WAAAA,GAAAA,SAAAA,uBAAAA;;WAAAA;EAAAA,2BAAAA,CAAAA;AAIL,IAAKC,kBAAAA,WAAAA,GAAAA,SAAAA,eAAAA;;;WAAAA;EAAAA,mBAAAA,CAAAA;AAIL,IAAKC,sBAAAA,WAAAA,GAAAA,SAAAA,mBAAAA;;;WAAAA;EAAAA,uBAAAA,CAAAA;AAKL,IAAKC,iBAAAA,WAAAA,GAAAA,SAAAA,cAAAA;;WAAAA;EAAAA,kBAAAA,CAAAA;AAuBE,MAAMC,2BAA2B,IAAIC,IAAI;;;;;;;;;;;;;;;;;;;;;;CAsB/C,EAAC;AAIK,MAAMC,mBAAmB,IAAID,IAAI;;;;CAIvC,EAAC","ignoreList":[0]}}, + {"offset": {"line": 6447, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/trace/request-insights-identity.ts"],"sourcesContent":["import type { AsyncLocalStorage } from 'async_hooks'\nimport type { RequestInsightKind } from '../../../next-devtools/shared/request-insights'\nimport { getOrCreateGlobalAsyncLocalStorage } from '../../app-render/async-local-storage'\n\nexport type RequestInsightsIdentity = {\n requestId: string\n kind?: RequestInsightKind\n htmlRequestId: string\n url: string | undefined\n}\n\n// This storage covers the part of BaseServer request handling that runs before\n// App Render creates workAsyncStorage. Once available, workStore remains the\n// primary identity source for locally recorded spans.\nfunction getRequestInsightsIdentityStorage(): AsyncLocalStorage {\n return getOrCreateGlobalAsyncLocalStorage('request-insights-identity-storage')\n}\n\nexport function runWithRequestInsightsIdentity(\n identity: RequestInsightsIdentity,\n fn: () => T\n): T {\n return getRequestInsightsIdentityStorage().run(identity, fn)\n}\n\nexport function getRequestInsightsIdentity():\n | RequestInsightsIdentity\n | undefined {\n return getRequestInsightsIdentityStorage().getStore()\n}\n"],"names":["getOrCreateGlobalAsyncLocalStorage","getRequestInsightsIdentityStorage","runWithRequestInsightsIdentity","identity","fn","run","getRequestInsightsIdentity","getStore"],"mappings":";;;;;;AAEA,SAASA,kCAAkC,QAAQ,uCAAsC;;AASzF,+EAA+E;AAC/E,6EAA6E;AAC7E,sDAAsD;AACtD,SAASC;IACP,WAAOD,mOAAAA,EAAmC;AAC5C;AAEO,SAASE,+BACdC,QAAiC,EACjCC,EAAW;IAEX,OAAOH,oCAAoCI,GAAG,CAACF,UAAUC;AAC3D;AAEO,SAASE;IAGd,OAAOL,oCAAoCM,QAAQ;AACrD","ignoreList":[0]}}, + {"offset": {"line": 6471, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/trace/request-insights.ts"],"sourcesContent":["import type { AttributeValue } from 'next/dist/compiled/@opentelemetry/api'\nimport type {\n RequestInsight,\n RequestInsightFetch,\n RequestInsightsSnapshot,\n} from '../../../next-devtools/shared/request-insights'\nimport type { RequestInsightKind } from '../../../shared/lib/request-insights'\nimport {\n getRequestInsightKey,\n getRequestInsightKind,\n} from '../../../shared/lib/request-insights'\nimport type { SpanStoreRecord } from './span-store'\nexport { isRequestInsightsEnabled } from './span-store'\n\nconst MAX_REQUEST_INSIGHTS = 100\nconst REQUEST_INSIGHTS_STORE_KEY = Symbol.for('@next/request-insights-store')\nconst CLIENT_COMPONENT_LOADING_SPAN_TYPE =\n 'NextNodeServer.clientComponentLoading'\n\ntype RequestInsightsListener = (insight: RequestInsight) => void\ntype RequestInsightIdentity = {\n requestId?: string\n kind?: RequestInsightKind\n htmlRequestId?: string\n route?: string\n url?: string\n}\n\nconst REDACTED_VALUE = 'redacted'\nconst SAFE_SPAN_ATTRIBUTE_KEYS = new Set([\n 'http.method',\n 'http.route',\n 'http.status_code',\n 'http.url',\n 'net.peer.name',\n 'net.peer.port',\n 'next.fetch.cache_reason',\n 'next.fetch.cache_status',\n 'next.fetch.idx',\n 'next.route',\n 'next.rsc',\n 'next.segment',\n 'next.span_category',\n 'next.span_name',\n 'next.span_type',\n])\nconst SENSITIVE_PARAM_NAME_RE =\n /(?:^|[_-])(?:access[_-]?token|api[_-]?key|auth|authorization|code|cookie|credential|id[_-]?token|jwt|key|password|secret|session|signature|sig|token)(?:$|[_-])/i\n\nclass InMemoryRequestInsightsStore {\n private readonly requests = new Map()\n private readonly requestTimings = new Map<\n string,\n { startTime: number; durationMs: number }\n >()\n private readonly requestOrder: string[] = []\n private readonly listeners = new Set()\n\n recordSpan(span: SpanStoreRecord): void {\n if (!span.requestId) {\n return\n }\n\n const insight = this.getOrCreateRequest(\n {\n requestId: span.requestId,\n kind: span.requestInsightKind,\n htmlRequestId: span.htmlRequestId,\n route: span.route,\n url: span.url,\n },\n span.startTime ?? span.timestamp\n )\n\n const spanStartTime = span.startTime ?? span.timestamp\n insight.htmlRequestId = span.htmlRequestId ?? insight.htmlRequestId\n insight.route = insight.route ?? span.route\n insight.url = insight.url ?? sanitizeUrl(span.url)\n this.updateTiming(\n insight,\n spanStartTime,\n span.durationMs,\n span.attributes?.['next.span_type'] === 'BaseServer.handleRequest'\n )\n insight.status =\n insight.status === 'error' || span.status === 'error'\n ? 'error'\n : span.status === 'ok'\n ? 'ok'\n : insight.status\n\n insight.spans.push({\n name: span.name,\n startTime: spanStartTime,\n durationMs: span.durationMs,\n status: span.status,\n traceId: span.traceId,\n spanId: span.spanId,\n parentSpanId: span.parentSpanId,\n attributes: sanitizeSpanAttributes(span.attributes),\n links: sanitizeSpanLinks(span.links),\n events: sanitizeSpanEvents(span.events),\n error: span.error,\n })\n\n const fetch = getFetchInsight(span)\n if (fetch) {\n this.recordFetchForInsight(insight, fetch)\n }\n\n this.notify(insight)\n }\n\n recordFetch(identity: RequestInsightIdentity, fetch: RequestInsightFetch) {\n if (!identity.requestId) {\n return\n }\n\n const fetchStartTime = fetch.startTime ?? getCurrentTimestamp()\n const insight = this.getOrCreateRequest(identity, fetchStartTime)\n this.updateTiming(insight, fetchStartTime, fetch.durationMs, false)\n this.recordFetchForInsight(insight, sanitizeFetchInsight(fetch))\n this.notify(insight)\n }\n\n getSnapshot(): RequestInsightsSnapshot {\n return {\n requests: this.requestOrder\n .map((insightKey) => this.requests.get(insightKey))\n .filter((request): request is RequestInsight => request !== undefined),\n }\n }\n\n subscribe(listener: RequestInsightsListener): () => void {\n this.listeners.add(listener)\n return () => {\n this.listeners.delete(listener)\n }\n }\n\n clear(): void {\n this.requests.clear()\n this.requestTimings.clear()\n this.requestOrder.length = 0\n }\n\n private updateTiming(\n insight: RequestInsight,\n startTime: number,\n durationMs: number | undefined,\n isRequestSpan: boolean\n ): void {\n const insightKey = getRequestInsightKey(insight)\n if (isRequestSpan && durationMs !== undefined) {\n const requestTiming = { startTime, durationMs }\n this.requestTimings.set(insightKey, requestTiming)\n insight.startTime = requestTiming.startTime\n insight.durationMs = requestTiming.durationMs\n return\n }\n\n const requestTiming = this.requestTimings.get(insightKey)\n if (requestTiming) {\n insight.startTime = requestTiming.startTime\n insight.durationMs = requestTiming.durationMs\n return\n }\n\n const endTime = startTime + (durationMs ?? 0)\n const requestEndTime = insight.startTime + (insight.durationMs ?? 0)\n insight.startTime = Math.min(insight.startTime, startTime)\n insight.durationMs = Math.max(requestEndTime, endTime) - insight.startTime\n }\n\n private notify(insight: RequestInsight): void {\n for (const listener of this.listeners) {\n listener(insight)\n }\n }\n\n private getOrCreateRequest(\n identity: RequestInsightIdentity,\n startTime: number\n ): RequestInsight {\n const requestId = identity.requestId!\n const insightKey = getRequestInsightKey({\n requestId,\n kind: identity.kind,\n })\n let insight = this.requests.get(insightKey)\n\n if (!insight) {\n insight = {\n requestId,\n kind: getRequestInsightKind(identity),\n htmlRequestId: identity.htmlRequestId ?? requestId,\n route: identity.route,\n url: sanitizeUrl(identity.url),\n startTime,\n status: 'pending',\n spans: [],\n fetches: [],\n }\n this.requests.set(insightKey, insight)\n this.requestOrder.push(insightKey)\n this.trim()\n }\n\n insight.htmlRequestId = identity.htmlRequestId ?? insight.htmlRequestId\n insight.route = insight.route ?? identity.route\n insight.url = insight.url ?? sanitizeUrl(identity.url)\n insight.startTime = Math.min(insight.startTime, startTime)\n\n return insight\n }\n\n private recordFetchForInsight(\n insight: RequestInsight,\n fetch: RequestInsightFetch\n ): void {\n if (\n insight.fetches.some(\n (existingFetch) =>\n existingFetch.url === fetch.url &&\n (existingFetch.index !== undefined && fetch.index !== undefined\n ? existingFetch.index === fetch.index\n : existingFetch.startTime === fetch.startTime)\n )\n ) {\n return\n }\n\n insight.fetches.push(sanitizeFetchInsight(fetch))\n }\n\n private trim(): void {\n while (this.requestOrder.length > MAX_REQUEST_INSIGHTS) {\n const insightKey = this.requestOrder.shift()\n if (insightKey) {\n this.requests.delete(insightKey)\n this.requestTimings.delete(insightKey)\n }\n }\n }\n}\n\nexport function recordRequestInsightSpan(span: SpanStoreRecord): void {\n if (\n span.attributes?.['next.span_type'] === CLIENT_COMPONENT_LOADING_SPAN_TYPE\n ) {\n return\n }\n\n getRequestInsightsStore().recordSpan(span)\n}\n\nexport function recordRequestInsightFetch(\n identity: RequestInsightIdentity,\n fetch: RequestInsightFetch\n): void {\n getRequestInsightsStore().recordFetch(identity, fetch)\n}\n\nexport function getRequestInsightsSnapshot(): RequestInsightsSnapshot {\n return getRequestInsightsStore().getSnapshot()\n}\n\nexport function subscribeRequestInsights(\n listener: RequestInsightsListener\n): () => void {\n return getRequestInsightsStore().subscribe(listener)\n}\n\nexport function clearRequestInsightsForTest(): void {\n getRequestInsightsStore().clear()\n}\n\nfunction getRequestInsightsStore(): InMemoryRequestInsightsStore {\n const globalStore = globalThis as typeof globalThis & {\n [REQUEST_INSIGHTS_STORE_KEY]?: InMemoryRequestInsightsStore\n }\n\n return (globalStore[REQUEST_INSIGHTS_STORE_KEY] ??=\n new InMemoryRequestInsightsStore())\n}\n\nfunction getFetchInsight(span: SpanStoreRecord): RequestInsightFetch | null {\n const attributes = span.attributes\n\n if (!attributes || attributes['next.span_type'] !== 'AppRender.fetch') {\n return null\n }\n\n return {\n url: sanitizeUrl(getStringAttribute(attributes['http.url']) ?? span.url),\n method: getStringAttribute(attributes['http.method']),\n statusCode: getNumberAttribute(attributes['http.status_code']),\n startTime: span.startTime ?? span.timestamp,\n durationMs: span.durationMs,\n cacheStatus: getStringAttribute(attributes['next.fetch.cache_status']),\n cacheReason: getStringAttribute(attributes['next.fetch.cache_reason']),\n index: getNumberAttribute(attributes['next.fetch.idx']),\n }\n}\n\nfunction sanitizeFetchInsight(fetch: RequestInsightFetch): RequestInsightFetch {\n return {\n ...fetch,\n url: sanitizeUrl(fetch.url),\n }\n}\n\nfunction getCurrentTimestamp(): number {\n return performance.timeOrigin + performance.now()\n}\n\nfunction sanitizeSpanAttributes(\n attributes: SpanStoreRecord['attributes']\n): SpanStoreRecord['attributes'] {\n if (!attributes) {\n return undefined\n }\n\n const sanitized: NonNullable = {}\n for (const [key, value] of Object.entries(attributes)) {\n if (!SAFE_SPAN_ATTRIBUTE_KEYS.has(key)) {\n continue\n }\n\n sanitized[key] = key === 'http.url' ? sanitizeUrlAttribute(value) : value\n }\n\n return Object.keys(sanitized).length > 0 ? sanitized : undefined\n}\n\nfunction sanitizeSpanEvents(\n events: SpanStoreRecord['events']\n): SpanStoreRecord['events'] {\n return events?.map((event) => ({\n ...event,\n attributes: sanitizeSpanAttributes(event.attributes),\n }))\n}\n\nfunction sanitizeSpanLinks(\n links: SpanStoreRecord['links']\n): SpanStoreRecord['links'] {\n return links?.map((link) => ({\n ...link,\n attributes: sanitizeSpanAttributes(link.attributes),\n }))\n}\n\nfunction sanitizeUrlAttribute(value: AttributeValue): AttributeValue {\n return typeof value === 'string' ? (sanitizeUrl(value) ?? '') : value\n}\n\nfunction sanitizeUrl(value: string | undefined): string | undefined {\n if (!value) {\n return value\n }\n\n const isRelativeUrl = value.startsWith('/')\n\n try {\n const url = isRelativeUrl ? new URL(value, 'http://n') : new URL(value)\n\n url.username = ''\n url.password = ''\n\n for (const name of Array.from(url.searchParams.keys())) {\n if (SENSITIVE_PARAM_NAME_RE.test(name)) {\n url.searchParams.set(name, REDACTED_VALUE)\n }\n }\n\n return isRelativeUrl ? `${url.pathname}${url.search}${url.hash}` : url.href\n } catch {\n return value\n }\n}\n\nfunction getStringAttribute(value: AttributeValue | undefined) {\n return typeof value === 'string' ? value : undefined\n}\n\nfunction getNumberAttribute(value: AttributeValue | undefined) {\n return typeof value === 'number' ? value : undefined\n}\n"],"names":["getRequestInsightKey","getRequestInsightKind","isRequestInsightsEnabled","MAX_REQUEST_INSIGHTS","REQUEST_INSIGHTS_STORE_KEY","Symbol","for","CLIENT_COMPONENT_LOADING_SPAN_TYPE","REDACTED_VALUE","SAFE_SPAN_ATTRIBUTE_KEYS","Set","SENSITIVE_PARAM_NAME_RE","InMemoryRequestInsightsStore","recordSpan","span","requestId","insight","getOrCreateRequest","kind","requestInsightKind","htmlRequestId","route","url","startTime","timestamp","spanStartTime","sanitizeUrl","updateTiming","durationMs","attributes","status","spans","push","name","traceId","spanId","parentSpanId","sanitizeSpanAttributes","links","sanitizeSpanLinks","events","sanitizeSpanEvents","error","fetch","getFetchInsight","recordFetchForInsight","notify","recordFetch","identity","fetchStartTime","getCurrentTimestamp","sanitizeFetchInsight","getSnapshot","requests","requestOrder","map","insightKey","get","filter","request","undefined","subscribe","listener","listeners","add","delete","clear","requestTimings","length","isRequestSpan","requestTiming","set","endTime","requestEndTime","Math","min","max","fetches","trim","some","existingFetch","index","shift","Map","recordRequestInsightSpan","getRequestInsightsStore","recordRequestInsightFetch","getRequestInsightsSnapshot","subscribeRequestInsights","clearRequestInsightsForTest","globalStore","globalThis","getStringAttribute","method","statusCode","getNumberAttribute","cacheStatus","cacheReason","performance","timeOrigin","now","sanitized","key","value","Object","entries","has","sanitizeUrlAttribute","keys","event","link","isRelativeUrl","startsWith","URL","username","password","Array","from","searchParams","test","pathname","search","hash","href"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 6756, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/trace/span-store.ts"],"sourcesContent":["import type { AttributeValue } from 'next/dist/compiled/@opentelemetry/api'\nimport type { RequestInsightKind } from '../../../next-devtools/shared/request-insights'\n\nexport type SpanStoreAttributes = Record\n\nexport type SpanStoreLink = {\n traceId: string\n spanId: string\n attributes?: SpanStoreAttributes\n}\n\nexport type SpanStoreEvent = {\n name: string\n timestamp: number\n attributes?: SpanStoreAttributes\n}\n\nexport type SpanStoreRecord = {\n name: string\n timestamp: number\n startTime?: number\n durationMs?: number\n status?: 'ok' | 'error'\n traceId?: string\n spanId?: string\n parentSpanId?: string\n requestId?: string\n requestInsightKind?: RequestInsightKind\n htmlRequestId?: string\n route?: string\n url?: string\n attributes?: SpanStoreAttributes\n links?: SpanStoreLink[]\n events?: SpanStoreEvent[]\n error?: {\n type?: string\n message?: string\n }\n}\n\ntype SpanRecorderForTest = (span: SpanStoreRecord) => void\n\nlet spanRecorderForTest: SpanRecorderForTest | undefined\n\nexport function recordSpan(record: Omit): void {\n if (!isLocalSpanRecordingEnabled()) {\n return\n }\n\n const spanRecord: SpanStoreRecord = {\n timestamp: getCurrentTimestamp(),\n ...record,\n }\n\n spanRecorderForTest?.(spanRecord)\n\n if (isRequestInsightsEnabled() && spanRecord.requestId) {\n const { recordRequestInsightSpan } =\n require('./request-insights') as typeof import('./request-insights')\n recordRequestInsightSpan(spanRecord)\n }\n}\n\nexport function setSpanRecorderForTest(\n recorder: SpanRecorderForTest | undefined\n): void {\n spanRecorderForTest = recorder\n}\n\nexport function isLocalSpanRecordingEnabled(): boolean {\n if (!process.env.__NEXT_DEV_SERVER) {\n return false\n }\n\n return spanRecorderForTest !== undefined || isRequestInsightsEnabled()\n}\n\nexport function isRequestInsightsEnabled(): boolean {\n if (!process.env.__NEXT_DEV_SERVER) {\n return false\n }\n\n const value = process.env.__NEXT_REQUEST_INSIGHTS\n return isEnabledEnvValue(value)\n}\n\nfunction isEnabledEnvValue(value: string | undefined): boolean {\n return value === '1' || value === 'true' || (value as unknown) === true\n}\n\nfunction getCurrentTimestamp(): number {\n return performance.timeOrigin + performance.now()\n}\n"],"names":["spanRecorderForTest","recordSpan","record","isLocalSpanRecordingEnabled","spanRecord","timestamp","getCurrentTimestamp","isRequestInsightsEnabled","requestId","recordRequestInsightSpan","require","setSpanRecorderForTest","recorder","process","env","__NEXT_DEV_SERVER","undefined","value","__NEXT_REQUEST_INSIGHTS","isEnabledEnvValue","performance","timeOrigin","now"],"mappings":";;;;;;;;;;AA0CA,IAAIA;AAEG,SAASC,WAAWC,MAA0C;IACnE,IAAI,CAACC,+BAA+B;QAClC;IACF;IAEA,MAAMC,aAA8B;QAClCC,WAAWC;QACX,GAAGJ,MAAM;IACX;IAEAF,uBAAAA,OAAAA,KAAAA,IAAAA,oBAAsBI;IAEtB,IAAIG,8BAA8BH,WAAWI,SAAS,EAAE;;AAK1D;AAEO,SAASG,uBACdC,QAAyC;IAEzCZ,sBAAsBY;AACxB;AAEO,SAAST;IACd,IAAI,CAACU,QAAQC,GAAG,CAACC,iBAAiB,EAAE;;IAIpC,OAAOf,wBAAwBgB,aAAaT;AAC9C;AAEO,SAASA;IACd,IAAI,CAACM,QAAQC,GAAG,CAACC,iBAAiB,EAAE;;IAIpC,MAAME,QAAQJ,QAAQC,GAAG,CAACI,uBAAuB;IACjD,OAAOC,kBAAkBF;AAC3B;AAEA,SAASE,kBAAkBF,KAAyB;IAClD,OAAOA,UAAU,OAAOA,UAAU,UAAWA,UAAsB;AACrE;AAEA,SAASX;IACP,OAAOc,YAAYC,UAAU,GAAGD,YAAYE,GAAG;AACjD","ignoreList":[0]}}, + {"offset": {"line": 6803, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/lib/trace/tracer.ts"],"sourcesContent":["import type { FetchEventResult } from '../../web/types'\nimport type { TextMapSetter } from '@opentelemetry/api'\nimport type { SpanTypes } from './constants'\nimport type { LocalSpanRecorder } from './local-span-recorder'\nimport { LogSpanAllowList, NextVanillaSpanAllowlist } from './constants'\n\nimport type {\n Context,\n ContextAPI,\n Span,\n SpanOptions,\n Tracer,\n AttributeValue,\n TextMapGetter,\n} from 'next/dist/compiled/@opentelemetry/api'\nimport { isThenable } from '../../../shared/lib/is-thenable'\n\nconst NEXT_OTEL_PERFORMANCE_PREFIX = process.env.NEXT_OTEL_PERFORMANCE_PREFIX\nconst LOCAL_SPAN_RECORDER_KEY = Symbol.for('@next/local-span-recorder')\n\ntype GlobalWithLocalSpanRecorder = typeof globalThis & {\n [LOCAL_SPAN_RECORDER_KEY]?: LocalSpanRecorder\n}\n\nlet api: typeof import('next/dist/compiled/@opentelemetry/api')\n\nfunction getLocalSpanRecorder() {\n if (process.env.__NEXT_DEV_SERVER) {\n return (globalThis as GlobalWithLocalSpanRecorder)[LOCAL_SPAN_RECORDER_KEY]\n } else {\n return undefined\n }\n}\n\n// we want to allow users to use their own version of @opentelemetry/api if they\n// want to, so we try to require it first, and if it fails we fall back to the\n// version that is bundled with Next.js\n// this is because @opentelemetry/api has to be synced with the version of\n// @opentelemetry/tracing that is used, and we don't want to force users to use\n// the version that is bundled with Next.js.\n// the API is ~stable, so this should be fine\nif (process.env.NEXT_RUNTIME === 'edge') {\n api = require('@opentelemetry/api') as typeof import('@opentelemetry/api')\n} else {\n try {\n api = require('@opentelemetry/api') as typeof import('@opentelemetry/api')\n } catch (err) {\n api =\n require('next/dist/compiled/@opentelemetry/api') as typeof import('next/dist/compiled/@opentelemetry/api')\n }\n}\n\nconst { context, propagation, trace, SpanStatusCode, SpanKind, ROOT_CONTEXT } =\n api\n\nexport class BubbledError extends Error {\n constructor(\n public readonly bubble?: boolean,\n public readonly result?: FetchEventResult\n ) {\n super()\n }\n}\n\nexport function isBubbledError(error: unknown): error is BubbledError {\n if (typeof error !== 'object' || error === null) return false\n return error instanceof BubbledError\n}\n\nconst closeSpanWithError = (\n span: Span,\n error?: Error,\n endTime?: Parameters[0]\n) => {\n if (isBubbledError(error) && error.bubble) {\n span.setAttribute('next.bubble', true)\n } else {\n if (error) {\n span.recordException(error)\n span.setAttribute('error.type', error.name)\n }\n span.setStatus({ code: SpanStatusCode.ERROR, message: error?.message })\n }\n span.end(endTime)\n}\n\ntype TracerSpanOptions = Omit & {\n endTime?: Parameters[0]\n parentSpan?: Span\n spanName?: string\n attributes?: Partial>\n hideSpan?: boolean\n}\n\ninterface NextTracer {\n getContext(): ContextAPI\n\n /**\n * Instruments a function by automatically creating a span activated on its\n * scope.\n *\n * The span will automatically be finished when one of these conditions is\n * met:\n *\n * * The function returns a promise, in which case the span will finish when\n * the promise is resolved or rejected.\n * * The function takes a callback as its second parameter, in which case the\n * span will finish when that callback is called.\n * * The function doesn't accept a callback and doesn't return a promise, in\n * which case the span will finish at the end of the function execution.\n *\n */\n trace(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise\n ): Promise\n trace(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n trace(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise\n ): Promise\n trace(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n\n /**\n * Wrap a function to automatically create a span activated on its\n * scope when it's called.\n *\n * The span will automatically be finished when one of these conditions is\n * met:\n *\n * * The function returns a promise, in which case the span will finish when\n * the promise is resolved or rejected.\n * * The function takes a callback as its last parameter, in which case the\n * span will finish when that callback is called.\n * * The function doesn't accept a callback and doesn't return a promise, in\n * which case the span will finish at the end of the function execution.\n */\n wrap) => any>(type: SpanTypes, fn: T): T\n wrap) => any>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: T\n ): T\n wrap) => any>(\n type: SpanTypes,\n options: (...args: any[]) => TracerSpanOptions,\n fn: T\n ): T\n\n /**\n * Starts and returns a new Span representing a logical unit of work.\n *\n * This method do NOT modify the current Context by default. In result, any inner span will not\n * automatically set its parent context to the span created by this method unless manually activate\n * context via `tracer.getContext().with`. `trace`, or `wrap` is generally recommended as it gracefully\n * handles context activation. (ref: https://github.com/open-telemetry/opentelemetry-js/issues/1923)\n */\n startSpan(type: SpanTypes): Span\n startSpan(type: SpanTypes, options: TracerSpanOptions): Span\n\n /**\n * Returns currently activated span if current context is in the scope of the span.\n * Returns undefined otherwise.\n */\n getActiveScopeSpan(): Span | undefined\n\n /**\n * Returns trace propagation data for the currently active context. The format is equal to data provided\n * through the OpenTelemetry propagator API.\n */\n getTracePropagationData(): ClientTraceDataEntry[]\n\n /**\n * Executes a function with the given span set as the active span in the context.\n * This allows child spans created within the function to automatically parent to this span.\n */\n withSpan(span: Span, fn: () => T): T\n}\n\ntype NextAttributeNames =\n | 'next.route'\n | 'next.page'\n | 'next.rsc'\n | 'next.segment'\n | 'next.span_category'\n | 'next.span_name'\n | 'next.span_type'\n | 'next.clientComponentLoadCount'\ntype OTELAttributeNames = `http.${string}` | `net.${string}`\ntype AttributeNames = NextAttributeNames | OTELAttributeNames\n\n/** we use this map to propagate attributes from nested spans to the top span */\nconst rootSpanAttributesStore = new Map<\n number,\n Map\n>()\nconst rootSpanIdKey = api.createContextKey('next.rootSpanId')\nlet lastSpanId = 0\nconst getSpanId = () => lastSpanId++\n\nexport interface ClientTraceDataEntry {\n key: string\n value: string\n}\n\nconst clientTraceDataSetter: TextMapSetter = {\n set(carrier, key, value) {\n carrier.push({\n key,\n value,\n })\n },\n}\n\nclass NextTracerImpl implements NextTracer {\n /**\n * Returns an instance to the trace with configured name.\n * Since wrap / trace can be defined in any place prior to actual trace subscriber initialization,\n * This should be lazily evaluated.\n */\n private getTracerInstance(): Tracer {\n return trace.getTracer('next.js', process.env.__NEXT_VERSION)\n }\n\n private isOpenTelemetryEnabled(): boolean {\n const activeSpan = trace.getSpan(context.active())\n if (activeSpan?.isRecording()) {\n return true\n }\n\n const tracerProvider = trace.getTracerProvider() as {\n getDelegate?: () => { constructor?: { name?: string } } | undefined\n }\n\n if (!('getDelegate' in tracerProvider)) {\n return true\n }\n\n return (\n tracerProvider.getDelegate?.()?.constructor?.name !== 'NoopTracerProvider'\n )\n }\n\n public getContext(): ContextAPI {\n return context\n }\n\n public getTracePropagationData(): ClientTraceDataEntry[] {\n const activeContext = context.active()\n const entries: ClientTraceDataEntry[] = []\n propagation.inject(activeContext, entries, clientTraceDataSetter)\n return entries\n }\n\n public getActiveScopeSpan(): Span | undefined {\n const localSpanRecorder = getLocalSpanRecorder()\n const activeLocalSpan = localSpanRecorder?.getActiveLocalSpan()\n if (\n activeLocalSpan &&\n localSpanRecorder?.isOpenTelemetryIsolatedSpan(activeLocalSpan)\n ) {\n return activeLocalSpan\n }\n\n const activeSpan = trace.getSpan(context.active())\n if (activeSpan || !process.env.__NEXT_DEV_SERVER) {\n return activeSpan\n }\n return activeLocalSpan\n }\n\n /**\n * Run `fn` with the active span cleared, so spans created inside become new\n * roots (or parent to incoming propagated context). Used for in-process\n * Node.js middleware so its span is a sibling of the request span, matching\n * edge middleware which runs in a detached sandbox.\n */\n public runWithDetachedContext(fn: () => T): T {\n if (!NEXT_OTEL_PERFORMANCE_PREFIX && !this.isOpenTelemetryEnabled()) {\n return fn()\n }\n return context.with(ROOT_CONTEXT, fn)\n }\n\n public withPropagatedContext(\n carrier: C,\n fn: () => T,\n getter?: TextMapGetter,\n force = false\n ): T {\n const activeContext = context.active()\n\n if (\n !NEXT_OTEL_PERFORMANCE_PREFIX &&\n !this.isOpenTelemetryEnabled() &&\n !trace.getSpanContext(activeContext)\n ) {\n return fn()\n }\n\n if (force) {\n const remoteContext = propagation.extract(ROOT_CONTEXT, carrier, getter)\n\n if (trace.getSpanContext(remoteContext)) {\n return context.with(remoteContext, fn)\n }\n\n // Preserve the current active span while still merging any extracted\n // baggage/context values from the carrier.\n const mergedContext = propagation.extract(activeContext, carrier, getter)\n return context.with(mergedContext, fn)\n }\n\n if (trace.getSpanContext(activeContext)) {\n // Active span is already set, too late to propagate.\n return fn()\n }\n\n const remoteContext = propagation.extract(activeContext, carrier, getter)\n return context.with(remoteContext, fn)\n }\n\n // Trace, wrap implementation is inspired by datadog trace implementation\n // (https://datadoghq.dev/dd-trace-js/interfaces/tracer.html#trace).\n public trace(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise\n ): Promise\n public trace(\n type: SpanTypes,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n public trace(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => Promise\n ): Promise\n public trace(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: (span?: Span, done?: (error?: Error) => any) => T\n ): T\n public trace(...args: Array) {\n const [type, fnOrOptions, fnOrEmpty] = args\n const tracingEnabled =\n Boolean(NEXT_OTEL_PERFORMANCE_PREFIX) || this.isOpenTelemetryEnabled()\n const localSpanRecorder = getLocalSpanRecorder()\n const localSpanRecordingEnabled =\n localSpanRecorder?.isLocalSpanRecordingEnabled() ?? false\n\n if (!tracingEnabled && !localSpanRecordingEnabled) {\n return typeof fnOrOptions === 'function' ? fnOrOptions() : fnOrEmpty()\n }\n\n // coerce options form overload\n const {\n fn,\n options,\n }: {\n fn: (span?: Span, done?: (error?: Error) => any) => T | Promise\n options: TracerSpanOptions\n } =\n typeof fnOrOptions === 'function'\n ? {\n fn: fnOrOptions,\n options: {},\n }\n : {\n fn: fnOrEmpty,\n options: { ...fnOrOptions },\n }\n\n const spanName = options.spanName ?? type\n\n const parentSpan = options.parentSpan ?? this.getActiveScopeSpan()\n const isolatedParentSpan =\n parentSpan && localSpanRecorder?.isOpenTelemetryIsolatedSpan(parentSpan)\n ? parentSpan\n : undefined\n const shouldDelegateSpan =\n !isolatedParentSpan &&\n (NextVanillaSpanAllowlist.has(type) ||\n process.env.NEXT_OTEL_VERBOSE === '1')\n const shouldTraceSpan =\n shouldDelegateSpan ||\n (localSpanRecorder?.isRequestInsightsEnabled() ?? false)\n\n if (!shouldTraceSpan || options.hideSpan) {\n return fn()\n }\n\n // Trying to get active scoped span to assign parent. If option specifies parent span manually, will try to use it.\n let spanContext = isolatedParentSpan\n ? context.active()\n : this.getSpanContext(parentSpan)\n\n if (!spanContext) {\n spanContext = context?.active() ?? ROOT_CONTEXT\n }\n // Check if there's already a root span in the store for this trace\n // We are intentionally not checking whether there is an active context\n // from outside of nextjs to ensure that we can provide the same level\n // of telemetry when using a custom server\n const existingRootSpanId = spanContext.getValue(rootSpanIdKey)\n const isRootSpan =\n typeof existingRootSpanId !== 'number' ||\n !rootSpanAttributesStore.has(existingRootSpanId)\n\n const spanId = getSpanId()\n\n options.attributes = {\n 'next.span_category': 'nextjs',\n 'next.span_name': spanName,\n 'next.span_type': type,\n ...options.attributes,\n }\n\n return context.with(spanContext.setValue(rootSpanIdKey, spanId), () =>\n this.runWithActiveSpan(\n spanName,\n options,\n spanContext,\n tracingEnabled && shouldDelegateSpan,\n localSpanRecordingEnabled,\n isolatedParentSpan,\n (span: Span) => {\n let startTime: number | undefined\n if (\n NEXT_OTEL_PERFORMANCE_PREFIX &&\n type &&\n LogSpanAllowList.has(type)\n ) {\n startTime =\n 'performance' in globalThis && 'measure' in performance\n ? globalThis.performance.now()\n : undefined\n }\n\n let cleanedUp = false\n const onCleanup = () => {\n if (cleanedUp) return\n cleanedUp = true\n rootSpanAttributesStore.delete(spanId)\n if (startTime) {\n performance.measure(\n `${NEXT_OTEL_PERFORMANCE_PREFIX}:next-${(\n type.split('.').pop() || ''\n ).replace(\n /[A-Z]/g,\n (match: string) => '-' + match.toLowerCase()\n )}`,\n {\n start: startTime,\n end: performance.now(),\n }\n )\n }\n }\n\n if (isRootSpan) {\n rootSpanAttributesStore.set(\n spanId,\n new Map(\n Object.entries(options.attributes ?? {}) as [\n AttributeNames,\n AttributeValue | undefined,\n ][]\n )\n )\n }\n if (fn.length > 1) {\n try {\n return fn(span, (err) => {\n if (err) {\n closeSpanWithError(span, err, options.endTime)\n } else {\n span.end(options.endTime)\n }\n })\n } catch (err: any) {\n closeSpanWithError(span, err, options.endTime)\n throw err\n } finally {\n onCleanup()\n }\n }\n\n try {\n const result = fn(span)\n if (isThenable(result)) {\n // If there's error make sure it throws\n return result\n .then((res) => {\n span.end(options.endTime)\n // Need to pass down the promise result,\n // it could be react stream response with error { error, stream }\n return res\n })\n .catch((err) => {\n closeSpanWithError(span, err, options.endTime)\n throw err\n })\n .finally(onCleanup)\n } else {\n span.end(options.endTime)\n onCleanup()\n }\n\n return result\n } catch (err: any) {\n closeSpanWithError(span, err, options.endTime)\n onCleanup()\n throw err\n }\n }\n )\n )\n }\n\n private runWithActiveSpan(\n spanName: string,\n options: TracerSpanOptions,\n parentContext: Context,\n tracingEnabled: boolean,\n localSpanRecordingEnabled: boolean,\n isolatedParentSpan: Span | undefined,\n fn: (span: Span) => T\n ): T {\n if (tracingEnabled) {\n return this.getTracerInstance().startActiveSpan(\n spanName,\n options,\n (span: Span) =>\n fn(\n localSpanRecordingEnabled\n ? this.createLocalRecordingSpan(\n spanName,\n options,\n parentContext,\n span,\n isolatedParentSpan\n )\n : span\n )\n )\n }\n\n const span = this.createLocalRecordingSpan(\n spanName,\n options,\n parentContext,\n undefined,\n isolatedParentSpan\n )\n const localSpanRecorder = getLocalSpanRecorder()!\n return localSpanRecorder.withLocalSpan(span, () =>\n localSpanRecorder.isOpenTelemetryIsolatedSpan(span)\n ? fn(span)\n : context.with(\n trace.setSpan(context.active(), span),\n fn,\n undefined,\n span\n )\n )\n }\n\n private createLocalRecordingSpan(\n name: string,\n options: TracerSpanOptions,\n parentContext: Context,\n delegateSpan?: Span,\n isolatedParentSpan?: Span\n ): Span {\n const parentSpanContext =\n isolatedParentSpan?.spanContext() ?? trace.getSpanContext(parentContext)\n const delegateSpanContext = delegateSpan?.spanContext()\n\n return getLocalSpanRecorder()!.createLocalSpan({\n name,\n attributes: options.attributes,\n links: options.links,\n startTime: options.startTime,\n delegateSpan,\n traceId: delegateSpanContext?.traceId ?? parentSpanContext?.traceId,\n spanId: delegateSpanContext?.spanId,\n parentSpanId: parentSpanContext?.spanId,\n isolateOpenTelemetry: isolatedParentSpan !== undefined,\n })\n }\n\n public wrap) => any>(type: SpanTypes, fn: T): T\n public wrap) => any>(\n type: SpanTypes,\n options: TracerSpanOptions,\n fn: T\n ): T\n public wrap) => any>(\n type: SpanTypes,\n options: (...args: any[]) => TracerSpanOptions,\n fn: T\n ): T\n public wrap(...args: Array) {\n const tracer = this\n const [name, options, fn] =\n args.length === 3 ? args : [args[0], {}, args[1]]\n\n if (\n !NextVanillaSpanAllowlist.has(name) &&\n process.env.NEXT_OTEL_VERBOSE !== '1' &&\n !process.env.__NEXT_DEV_SERVER\n ) {\n return fn\n }\n\n return function (this: any) {\n let optionsObj = options\n if (typeof optionsObj === 'function' && typeof fn === 'function') {\n optionsObj = optionsObj.apply(this, arguments)\n }\n\n const lastArgId = arguments.length - 1\n const cb = arguments[lastArgId]\n\n if (typeof cb === 'function') {\n const scopeBoundCb = tracer.getContext().bind(context.active(), cb)\n return tracer.trace(name, optionsObj, (_span, done) => {\n arguments[lastArgId] = function (err: any) {\n done?.(err)\n return scopeBoundCb.apply(this, arguments)\n }\n\n return fn.apply(this, arguments)\n })\n } else {\n return tracer.trace(name, optionsObj, () => fn.apply(this, arguments))\n }\n }\n }\n\n public startSpan(type: SpanTypes): Span\n public startSpan(type: SpanTypes, options: TracerSpanOptions): Span\n public startSpan(...args: Array): Span {\n const [type, passedOptions]: [string, TracerSpanOptions | undefined] =\n args as any\n const options: TracerSpanOptions = passedOptions\n ? {\n ...passedOptions,\n attributes: {\n 'next.span_category': 'nextjs',\n ...passedOptions.attributes,\n },\n }\n : { attributes: { 'next.span_category': 'nextjs' } }\n\n const localSpanRecorder = getLocalSpanRecorder()\n const parentSpan = options.parentSpan ?? this.getActiveScopeSpan()\n const isolatedParentSpan =\n parentSpan && localSpanRecorder?.isOpenTelemetryIsolatedSpan(parentSpan)\n ? parentSpan\n : undefined\n const parentContext =\n (isolatedParentSpan ? undefined : this.getSpanContext(parentSpan)) ??\n context.active()\n const localSpanRecordingEnabled =\n localSpanRecorder?.isLocalSpanRecordingEnabled() ?? false\n\n if (!localSpanRecordingEnabled) {\n return this.getTracerInstance().startSpan(type, options, parentContext)\n }\n\n const delegateSpan =\n !isolatedParentSpan && this.isOpenTelemetryEnabled()\n ? this.getTracerInstance().startSpan(type, options, parentContext)\n : undefined\n\n return this.createLocalRecordingSpan(\n type,\n options,\n parentContext,\n delegateSpan,\n isolatedParentSpan\n )\n }\n\n private getSpanContext(parentSpan?: Span) {\n const spanContext = parentSpan\n ? trace.setSpan(context.active(), parentSpan)\n : undefined\n\n return spanContext\n }\n\n public getRootSpanAttributes() {\n const spanId = context.active().getValue(rootSpanIdKey) as number\n return rootSpanAttributesStore.get(spanId)\n }\n\n public setRootSpanAttribute(key: AttributeNames, value: AttributeValue) {\n const spanId = context.active().getValue(rootSpanIdKey) as number\n const attributes = rootSpanAttributesStore.get(spanId)\n if (attributes && !attributes.has(key)) {\n attributes.set(key, value)\n }\n\n if (process.env.__NEXT_DEV_SERVER) {\n const localSpan = getLocalSpanRecorder()?.getActiveLocalSpan()\n if (localSpan) {\n localSpan.setAttribute(key, value)\n }\n }\n }\n\n public withSpan(span: Span, fn: () => T): T {\n const recorder = getLocalSpanRecorder()\n if (recorder?.isLocalRecordingSpan(span)) {\n return recorder.withLocalSpan(span, () =>\n recorder.isOpenTelemetryIsolatedSpan(span)\n ? fn()\n : context.with(trace.setSpan(context.active(), span), fn)\n )\n }\n return context.with(trace.setSpan(context.active(), span), fn)\n }\n}\n\nconst getTracer = (() => {\n const tracer = new NextTracerImpl()\n\n return () => tracer\n})()\n\nexport { getTracer, SpanStatusCode, SpanKind }\nexport type { NextTracer, Span, SpanOptions, ContextAPI, TracerSpanOptions }\n"],"names":["LogSpanAllowList","NextVanillaSpanAllowlist","isThenable","NEXT_OTEL_PERFORMANCE_PREFIX","process","env","LOCAL_SPAN_RECORDER_KEY","Symbol","for","api","getLocalSpanRecorder","__NEXT_DEV_SERVER","globalThis","undefined","NEXT_RUNTIME","require","err","context","propagation","trace","SpanStatusCode","SpanKind","ROOT_CONTEXT","BubbledError","Error","constructor","bubble","result","isBubbledError","error","closeSpanWithError","span","endTime","setAttribute","recordException","name","setStatus","code","ERROR","message","end","rootSpanAttributesStore","Map","rootSpanIdKey","createContextKey","lastSpanId","getSpanId","clientTraceDataSetter","set","carrier","key","value","push","NextTracerImpl","getTracerInstance","getTracer","__NEXT_VERSION","isOpenTelemetryEnabled","tracerProvider","activeSpan","getSpan","active","isRecording","getTracerProvider","getDelegate","getContext","getTracePropagationData","activeContext","entries","inject","getActiveScopeSpan","localSpanRecorder","activeLocalSpan","getActiveLocalSpan","isOpenTelemetryIsolatedSpan","runWithDetachedContext","fn","with","withPropagatedContext","getter","force","getSpanContext","remoteContext","extract","mergedContext","args","type","fnOrOptions","fnOrEmpty","tracingEnabled","Boolean","localSpanRecordingEnabled","isLocalSpanRecordingEnabled","options","spanName","parentSpan","isolatedParentSpan","shouldDelegateSpan","has","NEXT_OTEL_VERBOSE","shouldTraceSpan","isRequestInsightsEnabled","hideSpan","spanContext","existingRootSpanId","getValue","isRootSpan","spanId","attributes","setValue","runWithActiveSpan","startTime","performance","now","cleanedUp","onCleanup","delete","measure","split","pop","replace","match","toLowerCase","start","Object","length","then","res","catch","finally","parentContext","startActiveSpan","createLocalRecordingSpan","withLocalSpan","setSpan","delegateSpan","parentSpanContext","delegateSpanContext","createLocalSpan","links","traceId","parentSpanId","isolateOpenTelemetry","wrap","tracer","optionsObj","apply","arguments","lastArgId","cb","scopeBoundCb","bind","_span","done","startSpan","passedOptions","getRootSpanAttributes","get","setRootSpanAttribute","localSpan","withSpan","recorder","isLocalRecordingSpan"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 7176, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/normalizers/built/app/app-pathname-normalizer.ts"],"sourcesContent":["import { normalizeAppPath } from '../../../../shared/lib/router/utils/app-paths'\nimport { Normalizers } from '../../normalizers'\nimport { wrapNormalizerFn } from '../../wrap-normalizer-fn'\nimport { UnderscoreNormalizer } from '../../underscore-normalizer'\nimport type { Normalizer } from '../../normalizer'\n\nexport class AppPathnameNormalizer extends Normalizers {\n constructor() {\n super([\n // The pathname to match should have the trailing `/page` and other route\n // group information stripped from it.\n wrapNormalizerFn(normalizeAppPath),\n // The page should have the `%5F` characters replaced with `_` characters.\n new UnderscoreNormalizer(),\n ])\n }\n\n public normalize(page: string): string {\n return super.normalize(page)\n }\n}\n\nexport class DevAppPathnameNormalizer extends Normalizers {\n constructor(pageNormalizer: Normalizer) {\n super([\n // This should normalize the filename to a page.\n pageNormalizer,\n // Normalize the app page to a pathname.\n new AppPathnameNormalizer(),\n ])\n }\n\n public normalize(filename: string): string {\n return super.normalize(filename)\n }\n}\n"],"names":["normalizeAppPath","Normalizers","wrapNormalizerFn","UnderscoreNormalizer","AppPathnameNormalizer","constructor","normalize","page","DevAppPathnameNormalizer","pageNormalizer","filename"],"mappings":";;;;;;AAAA,SAASA,gBAAgB,QAAQ,gDAA+C;AAChF,SAASC,WAAW,QAAQ,oBAAmB;AAC/C,SAASC,gBAAgB,QAAQ,2BAA0B;AAC3D,SAASC,oBAAoB,QAAQ,8BAA6B;;;;;AAG3D,MAAMC,8BAA8BH,4LAAAA;IACzCI,aAAc;QACZ,KAAK,CAAC;YACJ,yEAAyE;YACzE,sCAAsC;gBACtCH,8MAAAA,EAAiBF,6MAAAA;YACjB,0EAA0E;YAC1E,IAAIG,kNAAAA;SACL;IACH;IAEOG,UAAUC,IAAY,EAAU;QACrC,OAAO,KAAK,CAACD,UAAUC;IACzB;AACF;AAEO,MAAMC,iCAAiCP,4LAAAA;IAC5CI,YAAYI,cAA0B,CAAE;QACtC,KAAK,CAAC;YACJ,gDAAgD;YAChDA;YACA,wCAAwC;YACxC,IAAIL;SACL;IACH;IAEOE,UAAUI,QAAgB,EAAU;QACzC,OAAO,KAAK,CAACJ,UAAUI;IACzB;AACF","ignoreList":[0]}}, + {"offset": {"line": 7221, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/normalizers/normalizers.ts"],"sourcesContent":["import type { Normalizer } from './normalizer'\n\n/**\n * Normalizers combines many normalizers into a single normalizer interface that\n * will normalize the inputted pathname with each normalizer in order.\n */\nexport class Normalizers implements Normalizer {\n constructor(private readonly normalizers: Array = []) {}\n\n public push(normalizer: Normalizer) {\n this.normalizers.push(normalizer)\n }\n\n public normalize(pathname: string): string {\n return this.normalizers.reduce(\n (normalized, normalizer) => normalizer.normalize(normalized),\n pathname\n )\n }\n}\n"],"names":["Normalizers","constructor","normalizers","push","normalizer","normalize","pathname","reduce","normalized"],"mappings":"AAEA;;;CAGC,GACD;;;;AAAO,MAAMA;IACXC,YAA6BC,cAAiC,EAAE,CAAE;aAArCA,WAAAA,GAAAA;IAAsC;IAE5DC,KAAKC,UAAsB,EAAE;QAClC,IAAI,CAACF,WAAW,CAACC,IAAI,CAACC;IACxB;IAEOC,UAAUC,QAAgB,EAAU;QACzC,OAAO,IAAI,CAACJ,WAAW,CAACK,MAAM,CAC5B,CAACC,YAAYJ,aAAeA,WAAWC,SAAS,CAACG,aACjDF;IAEJ;AACF","ignoreList":[0]}}, + {"offset": {"line": 7243, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/normalizers/underscore-normalizer.ts"],"sourcesContent":["import type { Normalizer } from './normalizer'\n\n/**\n * UnderscoreNormalizer replaces all instances of %5F with _.\n */\nexport class UnderscoreNormalizer implements Normalizer {\n public normalize(pathname: string): string {\n return pathname.replace(/%5F/g, '_')\n }\n}\n"],"names":["UnderscoreNormalizer","normalize","pathname","replace"],"mappings":"AAEA;;CAEC,GACD;;;;AAAO,MAAMA;IACJC,UAAUC,QAAgB,EAAU;QACzC,OAAOA,SAASC,OAAO,CAAC,QAAQ;IAClC;AACF","ignoreList":[0]}}, + {"offset": {"line": 7258, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/normalizers/wrap-normalizer-fn.ts"],"sourcesContent":["import type { Normalizer } from './normalizer'\n\nexport function wrapNormalizerFn(fn: (pathname: string) => string): Normalizer {\n return { normalize: fn }\n}\n"],"names":["wrapNormalizerFn","fn","normalize"],"mappings":";;;;AAEO,SAASA,iBAAiBC,EAAgC;IAC/D,OAAO;QAAEC,WAAWD;IAAG;AACzB","ignoreList":[0]}}, + {"offset": {"line": 7271, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/pipe-readable.ts"],"sourcesContent":["import type { ServerResponse } from 'node:http'\nimport type { Readable } from 'node:stream'\n\nimport {\n ResponseAbortedName,\n createAbortController,\n} from './web/spec-extension/adapters/next-request'\nimport { createPromiseWithResolvers } from '../shared/lib/promise-with-resolvers'\nimport { getTracer } from './lib/trace/tracer'\nimport { NextNodeServerSpan } from './lib/trace/constants'\nimport type { ClientComponentLoadTracker } from './client-component-renderer-logger'\n\nexport function isAbortError(e: any): e is Error & { name: 'AbortError' } {\n return e?.name === 'AbortError' || e?.name === ResponseAbortedName\n}\n\nconst HAS_CLIENT_COMPONENT_METRICS_ENABLED =\n 'performance' in globalThis && process.env.NEXT_OTEL_PERFORMANCE_PREFIX\n\nfunction createWriterFromResponse(\n res: ServerResponse,\n waitUntilForEnd?: Promise,\n clientComponentLoadTracker?: ClientComponentLoadTracker\n): WritableStream {\n let started = false\n\n // Create a promise that will resolve once the response has drained. See\n // https://nodejs.org/api/stream.html#stream_event_drain\n let drained = createPromiseWithResolvers()\n function onDrain() {\n drained.resolve()\n }\n res.on('drain', onDrain)\n\n // If the finish event fires, it means we shouldn't block and wait for the\n // drain event.\n res.once('close', () => {\n res.off('drain', onDrain)\n drained.resolve()\n })\n\n // Create a promise that will resolve once the response has finished. See\n // https://nodejs.org/api/http.html#event-finish_1\n const finished = createPromiseWithResolvers()\n res.once('finish', () => {\n finished.resolve()\n })\n\n // Create a writable stream that will write to the response.\n return new WritableStream({\n write: async (chunk) => {\n // You'd think we'd want to use `start` instead of placing this in `write`\n // but this ensures that we don't actually flush the headers until we've\n // started writing chunks.\n if (!started) {\n started = true\n\n if (HAS_CLIENT_COMPONENT_METRICS_ENABLED) {\n const metrics = clientComponentLoadTracker?.snapshot()\n if (metrics) {\n performance.measure(\n `${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`,\n {\n start: metrics.clientComponentLoadStart,\n end:\n metrics.clientComponentLoadStart +\n metrics.clientComponentLoadTimes,\n }\n )\n }\n }\n\n res.flushHeaders()\n getTracer().trace(\n NextNodeServerSpan.startResponse,\n {\n spanName: 'start response',\n },\n () => undefined\n )\n }\n\n try {\n const ok = res.write(chunk)\n\n // Added by the `compression` middleware, this is a function that will\n // flush the partially-compressed response to the client.\n if ('flush' in res && typeof res.flush === 'function') {\n res.flush()\n }\n\n // If the write returns false, it means there's some backpressure, so\n // wait until it's streamed before continuing.\n if (!ok) {\n await drained.promise\n\n // Reset the drained promise so that we can wait for the next drain event.\n drained = createPromiseWithResolvers()\n }\n } catch (err) {\n res.end()\n throw new Error('failed to write chunk to response', { cause: err })\n }\n },\n abort: (err) => {\n if (res.writableFinished) return\n\n res.destroy(err)\n },\n close: async () => {\n // if a waitUntil promise was passed, wait for it to resolve before\n // ending the response.\n if (waitUntilForEnd) {\n await waitUntilForEnd\n }\n\n if (res.writableFinished) return\n\n res.end()\n return finished.promise\n },\n })\n}\n\nexport async function pipeToNodeResponse(\n readable: ReadableStream,\n res: ServerResponse,\n waitUntilForEnd?: Promise,\n clientComponentLoadTracker?: ClientComponentLoadTracker\n) {\n try {\n // If the response has already errored, then just return now.\n const { errored, destroyed } = res\n if (errored || destroyed) return\n\n // Create a new AbortController so that we can abort the readable if the\n // client disconnects.\n const controller = createAbortController(res)\n\n const writer = createWriterFromResponse(\n res,\n waitUntilForEnd,\n clientComponentLoadTracker\n )\n\n await readable.pipeTo(writer, { signal: controller.signal })\n } catch (err: any) {\n // If this isn't related to an abort error, re-throw it.\n if (isAbortError(err)) return\n\n throw new Error('failed to pipe response', { cause: err })\n }\n}\n\nexport async function pipeNodeReadableToNodeResponse(\n readable: Readable,\n res: ServerResponse,\n waitUntilForEnd?: Promise,\n clientComponentLoadTracker?: ClientComponentLoadTracker\n) {\n try {\n const { errored, destroyed } = res\n if (errored || destroyed) return\n\n let started = false\n\n const finished = createPromiseWithResolvers()\n\n // One `drain` listener for the whole response, as in\n // `createWriterFromResponse` above. It must not be `res.once('drain')` per\n // backpressured write: the `compression` middleware forwards `res.on` to\n // its zlib stream but leaves `removeListener` pointing at the response, so\n // a `once` listener is never removed from the stream it was added to. Each\n // backpressured write would leak one, and past ten Node reports the stream\n // as a probable leak via `MaxListenersExceededWarning`.\n //\n // TODO: the upstream fix for that asymmetry is\n // https://github.com/expressjs/compression/pull/153, which intercepts\n // `removeListener` so it reaches the zlib stream. It has been open since\n // 2019 and is not in upstream 1.8.1; we vendor 1.7.4. If it ever lands and\n // we upgrade, `res.off('drain', onDrain)` below would start working with\n // compression active and the caveat on the `close` handler could go away.\n let paused = false\n const onDrain = () => {\n // The listener outlives the readable: `off` below cannot reach the zlib\n // stream either, so a late drain can arrive after teardown.\n if (!paused || readable.destroyed) return\n\n paused = false\n readable.resume()\n }\n res.on('drain', onDrain)\n\n res.once('close', () => {\n // Only removes the listener when compression is inactive, which is the\n // case where it was added to the response itself. Otherwise it lives on\n // the zlib stream, which is released with the response.\n res.off('drain', onDrain)\n readable.destroy()\n finished.resolve()\n })\n\n readable.on('data', (chunk: Buffer) => {\n if (!started) {\n started = true\n\n if (\n 'performance' in globalThis &&\n process.env.NEXT_OTEL_PERFORMANCE_PREFIX\n ) {\n const metrics = clientComponentLoadTracker?.snapshot()\n if (metrics) {\n performance.measure(\n `${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`,\n {\n start: metrics.clientComponentLoadStart,\n end:\n metrics.clientComponentLoadStart +\n metrics.clientComponentLoadTimes,\n }\n )\n }\n }\n\n res.flushHeaders()\n getTracer().trace(\n NextNodeServerSpan.startResponse,\n {\n spanName: 'start response',\n },\n () => undefined\n )\n }\n\n const ok = res.write(chunk)\n\n if ('flush' in res && typeof res.flush === 'function') {\n res.flush()\n }\n\n if (!ok) {\n paused = true\n readable.pause()\n }\n })\n\n readable.on('end', async () => {\n if (waitUntilForEnd) {\n await waitUntilForEnd\n }\n\n if (!res.writableFinished) {\n res.end()\n }\n\n finished.resolve()\n })\n\n readable.on('error', (err) => {\n if (isAbortError(err)) {\n finished.resolve()\n return\n }\n\n res.destroy(err)\n finished.resolve()\n })\n\n await finished.promise\n } catch (err: any) {\n if (isAbortError(err)) return\n\n throw new Error('failed to pipe response', { cause: err })\n }\n}\n"],"names":["ResponseAbortedName","createAbortController","createPromiseWithResolvers","getTracer","NextNodeServerSpan","isAbortError","e","name","HAS_CLIENT_COMPONENT_METRICS_ENABLED","globalThis","process","env","NEXT_OTEL_PERFORMANCE_PREFIX","createWriterFromResponse","res","waitUntilForEnd","clientComponentLoadTracker","started","drained","onDrain","resolve","on","once","off","finished","WritableStream","write","chunk","metrics","snapshot","performance","measure","start","clientComponentLoadStart","end","clientComponentLoadTimes","flushHeaders","trace","startResponse","spanName","undefined","ok","flush","promise","err","Error","cause","abort","writableFinished","destroy","close","pipeToNodeResponse","readable","errored","destroyed","controller","writer","pipeTo","signal","pipeNodeReadableToNodeResponse","paused","resume","pause"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 7483, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/render-result.ts"],"sourcesContent":["import type { OutgoingHttpHeaders, ServerResponse } from 'http'\nimport type { Readable } from 'stream'\nimport type { CacheControl } from './lib/cache-control'\nimport type { FetchMetrics } from './base-http'\nimport type { PrefetchHints } from '../shared/lib/app-router-types'\nimport type { ClientComponentLoadTracker } from './client-component-renderer-logger'\n\nimport {\n chainStreams,\n streamFromBuffer,\n streamFromString,\n streamToString,\n} from './stream-utils/node-web-streams-helper'\nimport {\n isAbortError,\n pipeToNodeResponse,\n pipeNodeReadableToNodeResponse,\n} from './pipe-readable'\nimport type { RenderResumeDataCache } from './resume-data-cache/resume-data-cache'\nimport { InvariantError } from '../shared/lib/invariant-error'\nimport type {\n HTML_CONTENT_TYPE_HEADER,\n JSON_CONTENT_TYPE_HEADER,\n TEXT_PLAIN_CONTENT_TYPE_HEADER,\n} from '../lib/constants'\nimport type { RSC_CONTENT_TYPE_HEADER } from '../client/components/app-router-headers'\n\ntype ContentTypeOption =\n | typeof RSC_CONTENT_TYPE_HEADER // For App Page RSC responses\n | typeof HTML_CONTENT_TYPE_HEADER // For App Page, Pages HTML responses\n | typeof JSON_CONTENT_TYPE_HEADER // For API routes, Next.js data requests\n | typeof TEXT_PLAIN_CONTENT_TYPE_HEADER // For simplified errors\n\nexport type AppPageRenderResultMetadata = {\n /** Request-local metrics for the first response write. Never cache this. */\n clientComponentLoadTracker?: ClientComponentLoadTracker\n flightData?: Buffer\n cacheControl?: CacheControl\n staticBailoutInfo?: {\n stack?: string\n description?: string\n }\n\n /**\n * The postponed state if the render had postponed and needs to be resumed.\n */\n postponed?: string\n\n /**\n * Whether the prerender left any UI pending in a Suspense boundary. This is\n * reported directly by React's prerender result before Next.js resumes\n * client-only boundaries.\n */\n hasPendingUi?: boolean\n\n /**\n * The headers to set on the response that were added by the render.\n */\n headers?: OutgoingHttpHeaders\n statusCode?: number\n fetchTags?: string\n fetchMetrics?: FetchMetrics\n\n segmentData?: Map\n\n /**\n * Per-route prefetch hints computed at build time (e.g. segment inlining\n * decisions based on gzip sizes). Written to prefetch-hints.json by the\n * build pipeline.\n */\n prefetchHints?: PrefetchHints\n\n /**\n * In development, the resume data cache is warmed up before the render. This\n * is attached to the metadata so that it can be used during the render. When\n * prerendering, the filled resume data cache is also attached to the metadata\n * so that it can be used when prerendering matching fallback shells.\n */\n renderResumeDataCache?: RenderResumeDataCache\n}\n\nexport type PrerenderFailure = {\n readonly error: Error\n readonly result: RenderResult<\n Pick<\n AppPageRenderResultMetadata,\n 'headers' | 'flightData' | 'fetchMetrics' | 'postponed'\n >\n >\n}\n\nexport type PrerenderResult =\n | RenderResult\n | PrerenderFailure\n\nexport type PagesRenderResultMetadata = {\n pageData?: any\n cacheControl?: CacheControl\n isNotFound?: boolean\n isRedirect?: boolean\n}\n\nexport type StaticRenderResultMetadata = {}\n\nexport type RenderResultMetadata = AppPageRenderResultMetadata &\n PagesRenderResultMetadata &\n StaticRenderResultMetadata\n\nexport type RenderResultResponse =\n | ReadableStream[]\n | ReadableStream\n | Readable\n | string\n | Buffer\n | null\n\nexport type RenderResultOptions<\n Metadata extends RenderResultMetadata = RenderResultMetadata,\n> = {\n contentType: ContentTypeOption | null\n waitUntil?: Promise\n metadata: Metadata\n}\n\nfunction isNodeReadable(value: unknown): value is Readable {\n return (\n value !== null &&\n typeof value === 'object' &&\n typeof (value as Record).pipe === 'function' &&\n typeof (value as Record).on === 'function' &&\n !(value instanceof ReadableStream)\n )\n}\n\nexport default class RenderResult<\n Metadata extends RenderResultMetadata = RenderResultMetadata,\n> {\n /**\n * The detected content type for the response. This is used to set the\n * `Content-Type` header.\n */\n public readonly contentType: ContentTypeOption | null\n\n /**\n * The metadata for the response. This is used to set the revalidation times\n * and other metadata.\n */\n public readonly metadata: Readonly\n\n /**\n * The response itself. This can be a string, a stream, or null. If it's a\n * string, then it's a static response. If it's a stream, then it's a\n * dynamic response. If it's null, then the response was not found or was\n * already sent.\n */\n private response: RenderResultResponse\n\n /**\n * A render result that represents an empty response. This is used to\n * represent a response that was not found or was already sent.\n */\n public static readonly EMPTY = new RenderResult(\n null,\n { metadata: {}, contentType: null }\n )\n\n /**\n * Creates a new RenderResult instance from a static response.\n *\n * @param value the static response value\n * @param contentType the content type of the response\n * @returns a new RenderResult instance\n */\n public static fromStatic(\n value: string | Buffer,\n contentType: ContentTypeOption\n ) {\n return new RenderResult(value, {\n metadata: {},\n contentType,\n })\n }\n\n private readonly waitUntil?: Promise\n\n constructor(\n response: RenderResultResponse,\n { contentType, waitUntil, metadata }: RenderResultOptions\n ) {\n this.response = response\n this.contentType = contentType\n this.metadata = metadata\n this.waitUntil = waitUntil\n }\n\n public assignMetadata(metadata: Metadata) {\n Object.assign(this.metadata, metadata)\n }\n\n /**\n * Returns true if the response is null. It can be null if the response was\n * not found or was already sent.\n */\n public get isNull(): boolean {\n return this.response === null\n }\n\n /**\n * Returns false if the response is a string. It can be a string if the page\n * was prerendered. If it's not, then it was generated dynamically.\n */\n public get isDynamic(): boolean {\n return typeof this.response !== 'string'\n }\n\n /**\n * Returns the response if it is a string. If the page was dynamic, this will\n * return a promise if the `stream` option is true, or it will throw an error.\n *\n * @param stream Whether or not to return a promise if the response is dynamic\n * @returns The response as a string\n */\n public toUnchunkedString(stream?: false): string\n public toUnchunkedString(stream: true): Promise\n public toUnchunkedString(stream = false): Promise | string {\n if (this.response === null) {\n // If the response is null, return an empty string. This behavior is\n // intentional as we're now providing the `RenderResult.EMPTY` value.\n return ''\n }\n\n if (typeof this.response !== 'string') {\n if (!stream) {\n throw new InvariantError(\n 'dynamic responses cannot be unchunked. This is a bug in Next.js'\n )\n }\n\n return streamToString(this.readable)\n }\n\n return this.response\n }\n\n /**\n * Returns a readable stream of the response.\n */\n private get readable(): ReadableStream {\n if (this.response === null) {\n // If the response is null, return an empty stream. This behavior is\n // intentional as we're now providing the `RenderResult.EMPTY` value.\n return new ReadableStream({\n start(controller) {\n controller.close()\n },\n })\n }\n\n if (typeof this.response === 'string') {\n return streamFromString(this.response)\n }\n\n if (Buffer.isBuffer(this.response)) {\n return streamFromBuffer(this.response)\n }\n\n // If the response is an array of streams, then chain them together.\n if (Array.isArray(this.response)) {\n return chainStreams(...this.response)\n }\n\n if (isNodeReadable(this.response)) {\n if (process.env.NEXT_RUNTIME === 'edge') {\n throw new InvariantError(\n 'Node.js Readable cannot be converted to a web stream in the edge runtime'\n )\n } else {\n let Readable: typeof import('node:stream').Readable\n if (process.env.TURBOPACK) {\n Readable = (require('node:stream') as typeof import('node:stream'))\n .Readable\n } else {\n Readable = (\n __non_webpack_require__(\n 'node:stream'\n ) as typeof import('node:stream')\n ).Readable\n }\n return Readable.toWeb(this.response) as ReadableStream\n }\n }\n\n return this.response\n }\n\n /**\n * Coerces the response to an array of streams. This will convert the response\n * to an array of streams if it is not already one.\n *\n * @returns An array of streams\n */\n private coerce(): ReadableStream[] {\n if (this.response === null) {\n // If the response is null, return an empty stream. This behavior is\n // intentional as we're now providing the `RenderResult.EMPTY` value.\n return []\n }\n\n if (typeof this.response === 'string') {\n return [streamFromString(this.response)]\n } else if (Array.isArray(this.response)) {\n return this.response\n } else if (Buffer.isBuffer(this.response)) {\n return [streamFromBuffer(this.response)]\n } else if (isNodeReadable(this.response)) {\n if (process.env.NEXT_RUNTIME === 'edge') {\n throw new InvariantError(\n 'Node.js Readable cannot be converted to a web stream in the edge runtime'\n )\n } else {\n let Readable: typeof import('node:stream').Readable\n if (process.env.TURBOPACK) {\n Readable = (require('node:stream') as typeof import('node:stream'))\n .Readable\n } else {\n Readable = (\n __non_webpack_require__(\n 'node:stream'\n ) as typeof import('node:stream')\n ).Readable\n }\n return [Readable.toWeb(this.response) as ReadableStream]\n }\n } else {\n return [this.response]\n }\n }\n\n /**\n * Pipes the response through a transform stream. This converts the response\n * to a single readable stream (chaining if needed) and pipes it through the\n * provided transform.\n *\n * @param transform The transform stream to pipe through\n */\n public pipeThrough(transform: TransformStream): void {\n this.response = this.readable.pipeThrough(transform)\n }\n\n /**\n * Unshifts a new stream to the response. This will convert the response to an\n * array of streams if it is not already one and will add the new stream to\n * the start of the array. When this response is piped, all of the streams\n * will be piped one after the other.\n *\n * @param readable The new stream to unshift\n */\n public unshift(readable: ReadableStream): void {\n // Coerce the response to an array of streams.\n this.response = this.coerce()\n\n // Add the new stream to the start of the array.\n this.response.unshift(readable)\n }\n\n /**\n * Chains a new stream to the response. This will convert the response to an\n * array of streams if it is not already one and will add the new stream to\n * the end. When this response is piped, all of the streams will be piped\n * one after the other.\n *\n * @param readable The new stream to chain\n */\n public push(readable: ReadableStream): void {\n // Coerce the response to an array of streams.\n this.response = this.coerce()\n\n // Add the new stream to the end of the array.\n this.response.push(readable)\n }\n\n /**\n * Pipes the response to a writable stream. This will close/cancel the\n * writable stream if an error is encountered. If this doesn't throw, then\n * the writable stream will be closed or aborted.\n *\n * @param writable Writable stream to pipe the response to\n */\n public async pipeTo(writable: WritableStream): Promise {\n try {\n await this.readable.pipeTo(writable, {\n // We want to close the writable stream ourselves so that we can wait\n // for the waitUntil promise to resolve before closing it. If an error\n // is encountered, we'll abort the writable stream if we swallowed the\n // error.\n preventClose: true,\n })\n\n // If there is a waitUntil promise, wait for it to resolve before\n // closing the writable stream.\n if (this.waitUntil) await this.waitUntil\n\n // Close the writable stream.\n await writable.close()\n } catch (err) {\n // If this is an abort error, we should abort the writable stream (as we\n // took ownership of it when we started piping). We don't need to re-throw\n // because we handled the error.\n if (isAbortError(err)) {\n // Abort the writable stream if an error is encountered.\n await writable.abort(err)\n\n return\n }\n\n // We're not aborting the writer here as when this method throws it's not\n // clear as to how so the caller should assume it's their responsibility\n // to clean up the writer.\n throw err\n }\n }\n\n /**\n * Pipes the response to a node response. This will close/cancel the node\n * response if an error is encountered.\n *\n * @param res\n */\n public async pipeToNodeResponse(res: ServerResponse) {\n if (\n this.response !== null &&\n typeof this.response !== 'string' &&\n !Buffer.isBuffer(this.response) &&\n !Array.isArray(this.response) &&\n isNodeReadable(this.response)\n ) {\n await pipeNodeReadableToNodeResponse(\n this.response,\n res,\n this.waitUntil,\n this.metadata.clientComponentLoadTracker\n )\n return\n }\n await pipeToNodeResponse(\n this.readable,\n res,\n this.waitUntil,\n this.metadata.clientComponentLoadTracker\n )\n }\n}\n"],"names":["chainStreams","streamFromBuffer","streamFromString","streamToString","isAbortError","pipeToNodeResponse","pipeNodeReadableToNodeResponse","InvariantError","isNodeReadable","value","pipe","on","ReadableStream","RenderResult","EMPTY","metadata","contentType","fromStatic","constructor","response","waitUntil","assignMetadata","Object","assign","isNull","isDynamic","toUnchunkedString","stream","readable","start","controller","close","Buffer","isBuffer","Array","isArray","process","env","NEXT_RUNTIME","Readable","TURBOPACK","require","__non_webpack_require__","toWeb","coerce","pipeThrough","transform","unshift","push","pipeTo","writable","preventClose","err","abort","res","clientComponentLoadTracker"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 7714, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/request-meta.ts"],"sourcesContent":["import type { IncomingMessage, ServerResponse } from 'http'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { UrlWithParsedQuery } from 'url'\nimport type { BaseNextRequest } from './base-http'\nimport type { CloneableBody } from './body-streams'\nimport type { RouteMatch } from './route-matches/route-match'\nimport type { NEXT_RSC_UNION_QUERY } from '../client/components/app-router-headers'\nimport type {\n ResponseCacheEntry,\n ServerComponentsHmrCache,\n} from './response-cache'\nimport type { PagesDevOverlayBridgeType } from '../next-devtools/userspace/pages/pages-dev-overlay-setup'\nimport type { OpaqueFallbackRouteParams } from './request/fallback-params'\nimport type { IncrementalCache } from './lib/incremental-cache'\nimport type { RevalidateFn } from './lib/router-utils/router-server-context'\nimport type { NextRequest } from './web/exports'\n\n// FIXME: (wyattjoh) this is a temporary solution to allow us to pass data between bundled modules\nexport const NEXT_REQUEST_META = Symbol.for('NextInternalRequestMeta')\n\nexport type NextIncomingMessage = (\n | BaseNextRequest\n | IncomingMessage\n | NextRequest\n) & {\n [NEXT_REQUEST_META]?: RequestMeta\n}\n\n/**\n * The callback function to call when a response cache entry was generated or\n * looked up in the cache. When it returns true, the server assumes that the\n * handler has already responded to the request and will not do so itself.\n */\nexport type OnCacheEntryHandler = (\n /**\n * The response cache entry that was generated or looked up in the cache.\n */\n cacheEntry: ResponseCacheEntry,\n\n /**\n * The request metadata.\n */\n requestMeta: {\n /**\n * The URL that was used to make the request.\n */\n url: string | undefined\n }\n) => Promise | boolean | void\n\nexport interface RequestMeta {\n /**\n * The query that was used to make the request.\n */\n initQuery?: ParsedUrlQuery\n\n /**\n * The URL that was used to make the request.\n */\n initURL?: string\n\n /**\n * The protocol that was used to make the request.\n */\n initProtocol?: string\n\n /**\n * The body that was read from the request. This is used to allow the body to\n * be read multiple times.\n */\n clonableBody?: CloneableBody\n\n /**\n * True when the request matched a locale domain that was configured in the\n * next.config.js file.\n */\n isLocaleDomain?: boolean\n\n /**\n * True when the request had locale information stripped from the pathname\n * part of the URL.\n */\n didStripLocale?: boolean\n\n /**\n * If the request had its URL rewritten, this is the pathname it was rewritten\n * to (not a full URL, just the pathname).\n */\n rewrittenPathname?: string\n\n /**\n * The cookies that were added by middleware and were added to the response.\n */\n middlewareCookie?: string[]\n\n /**\n * The match on the request for a given route.\n */\n match?: RouteMatch\n\n /**\n * The incremental cache to use for the request.\n */\n incrementalCache?: IncrementalCache\n\n /**\n * The server components HMR cache, only for dev.\n */\n serverComponentsHmrCache?: ServerComponentsHmrCache\n\n /**\n * The hash of the most recent server component change (dev only), set by the\n * router-server from the hot-reloader. Included in `\"use cache\"` cache keys\n * so that cached entries are revalidated after an edit, for every client,\n * regardless of whether it runs the HMR client.\n */\n hmrRefreshHash?: string\n\n /**\n * Equals the segment path that was used for the prefetch RSC request.\n */\n segmentPrefetchRSCRequest?: string\n\n /**\n * True when the request is for the prefetch flight data.\n */\n isPrefetchRSCRequest?: true\n\n /**\n * True when the request is for the flight data.\n */\n isRSCRequest?: true\n\n /**\n * A search param set by the Next.js client when performing RSC requests.\n * Because some CDNs do not vary their cache entries on our custom headers,\n * this search param represents a hash of the header values. For any cached\n * RSC request, we should verify that the hash matches before responding.\n * Otherwise this can lead to cache poisoning.\n * TODO: Consider not using custom request headers at all, and instead encode\n * everything into the search param.\n */\n cacheBustingSearchParam?: string\n\n /**\n * True when the request is for the `/_next/data` route using the pages\n * router.\n */\n isNextDataReq?: true\n\n /**\n * Postponed state to use for resumption. When absent, the request is not a\n * resume request. A non-empty string contains the state to resume, while an\n * empty string represents a resume request without postponed state and\n * signals that the renderer should perform a full dynamic render.\n *\n * There are no guarantees that the page actually postponed, as verifying\n * that would incur an additional cache lookup.\n */\n postponed?: string\n\n /**\n * The action body extracted from a server action request when the postponed\n * state was prepended to the body by the proxy. This allows the action\n * handler to read the action payload without re-reading the consumed stream.\n */\n actionBody?: Buffer\n\n /**\n * If provided, this will be called when a response cache entry was generated\n * or looked up in the cache.\n *\n * @deprecated Use `onCacheEntryV2` instead.\n */\n onCacheEntry?: OnCacheEntryHandler\n\n /**\n * If provided, this will be called when a response cache entry was generated\n * or looked up in the cache.\n */\n onCacheEntryV2?: OnCacheEntryHandler\n\n /**\n * The previous revalidate before rendering 404 page for notFound: true\n */\n notFoundRevalidate?: number | false\n\n /**\n * In development, the original source page that returned a 404.\n */\n developmentNotFoundSourcePage?: string\n\n /**\n * The path we routed to and should be invoked\n */\n invokePath?: string\n\n /**\n * The specific page output we should be matching\n */\n invokeOutput?: string\n\n /**\n * The status we are invoking the request with from routing\n */\n invokeStatus?: number\n\n /**\n * The routing error we are invoking with\n */\n invokeError?: Error\n\n /**\n * The query parsed for the invocation\n */\n invokeQuery?: Record\n\n /**\n * Whether the request is a middleware invocation\n */\n middlewareInvoke?: boolean\n\n /**\n * Whether the request should render the fallback shell or not.\n */\n renderFallbackShell?: boolean\n\n /**\n * Route param keys that were explicitly resolved from partial nxtP*\n * query params during background revalidation. Used by app-page.ts to\n * determine which fallback params should remain deferred vs resolved\n * in intermediate PPR shells.\n */\n resolvedRouteParamKeys?: Set\n\n /**\n * Whether the request is for the custom error page.\n */\n customErrorRender?: true\n\n /**\n * Whether to bubble up the NoFallbackError to the caller when a 404 is\n * returned.\n */\n bubbleNoFallback?: true\n\n /**\n * True when the request had locale information inferred from the default\n * locale.\n */\n localeInferredFromDefault?: true\n\n /**\n * The locale that was inferred or explicitly set for the request.\n */\n locale?: string\n\n /**\n * The default locale that was inferred or explicitly set for the request.\n */\n defaultLocale?: string\n\n /**\n * The relative project dir the server is running in from project root\n */\n relativeProjectDir?: string\n\n /**\n * The dist directory the server is currently using\n */\n distDir?: string\n\n /**\n Optional hostname used by route handlers when constructing absolute URLs.\n hostname: '127.0.0.1',\n */\n hostname?: string\n\n /**\n Optional internal revalidate function to avoid revalidating over the network\n */\n revalidate?: RevalidateFn\n\n /**\n Optional function to render the 404 page for pages router `notFound: true`\n */\n render404?: (\n req: IncomingMessage,\n res: ServerResponse,\n parsedUrl?: UrlWithParsedQuery,\n setHeaders?: boolean\n ) => Promise\n\n /**\n * The query after resolving routes\n */\n query?: ParsedUrlQuery\n\n /**\n * The params after resolving routes\n */\n params?: ParsedUrlQuery\n\n /**\n * ErrorOverlay component to use in development for pages router\n */\n PagesErrorDebug?: PagesDevOverlayBridgeType\n\n /**\n * Whether server is in minimal mode (this will be replaced with more\n * specific flags in future)\n */\n minimalMode?: boolean\n\n /**\n * Staged renders defer these route params until after the static stage. They\n * keep their concrete request values instead of replacing them with\n * placeholders. Dev static-shell validation uses the same set for the\n * selected shell.\n *\n * For `/t2/items/b2` with selected shell `/t2/items/[bottom]`, this map\n * contains only `bottom`:\n * - A layout's `params` containing only `top` can resolve statically.\n * - A page's `params` containing `bottom` waits until after the static stage.\n *\n * A set recorded in postponed state overrides this metadata on a resume,\n * including an explicitly empty set.\n */\n stagedFallbackParams?: OpaqueFallbackRouteParams | null\n\n /**\n * Dev static-shell debug renders use these params to prerender the matched\n * source shell. The Instant Navigation Testing API uses this path too. The\n * prerender substitutes opaque placeholders for these params rather than\n * using their request values.\n *\n * Suppose `generateStaticParams` returns `[{ top: 't1' }]` for\n * `/[top]/items/[bottom]`. A request for `/t2/items/b2` has:\n * - Source `/[top]/items/[bottom]`: `top` and `bottom` are unresolved.\n * - Completed shell `/t2/items/[bottom]`: only `bottom` is unresolved.\n *\n * This map contains the source's `top` and `bottom`. A debug render of that\n * source also uses this map as `stagedFallbackParams`.\n */\n fallbackRouteParams?: OpaqueFallbackRouteParams | null\n\n /** DEV only: parameter matching rejected this request as not found. */\n devParamMatchingRejected?: boolean\n\n /** DEV only: closed parameters, including for successful allowed values. */\n devNotFoundParams?: readonly string[]\n\n /**\n * DEV only: Request timings in process.hrtime.bigint()\n */\n devRequestTimingStart?: bigint\n devRequestTimingMiddlewareStart?: bigint\n devRequestTimingMiddlewareEnd?: bigint\n devRequestTimingInternalsEnd?: bigint\n\n /**\n * DEV only: The duration of getStaticPaths/generateStaticParams in process.hrtime.bigint()\n */\n devGenerateStaticParamsDuration?: bigint\n\n /**\n * DEV only: Server action log info to be logged after the request log\n */\n devServerActionLog?: {\n functionName: string\n args: unknown[]\n location: string\n duration: number\n }\n}\n\n/**\n * Gets the request metadata. If no key is provided, the entire metadata object\n * is returned.\n *\n * @param req the request to get the metadata from\n * @param key the key to get from the metadata (optional)\n * @returns the value for the key or the entire metadata object\n */\nexport function getRequestMeta(\n req: NextIncomingMessage,\n key?: undefined\n): RequestMeta\nexport function getRequestMeta(\n req: NextIncomingMessage,\n key: K\n): RequestMeta[K]\nexport function getRequestMeta(\n req: NextIncomingMessage,\n key?: K\n): RequestMeta | RequestMeta[K] {\n const meta = req[NEXT_REQUEST_META] || {}\n return typeof key === 'string' ? meta[key] : meta\n}\n\n/**\n * Sets the request metadata.\n *\n * @param req the request to set the metadata on\n * @param meta the metadata to set\n * @returns the mutated request metadata\n */\nexport function setRequestMeta(req: NextIncomingMessage, meta: RequestMeta) {\n req[NEXT_REQUEST_META] = meta\n return meta\n}\n\n/**\n * Adds a value to the request metadata.\n *\n * @param request the request to mutate\n * @param key the key to set\n * @param value the value to set\n * @returns the mutated request metadata\n */\nexport function addRequestMeta(\n request: NextIncomingMessage,\n key: K,\n value: RequestMeta[K]\n) {\n const meta = getRequestMeta(request)\n meta[key] = value\n return setRequestMeta(request, meta)\n}\n\n/**\n * Removes a key from the request metadata.\n *\n * @param request the request to mutate\n * @param key the key to remove\n * @returns the mutated request metadata\n */\nexport function removeRequestMeta(\n request: NextIncomingMessage,\n key: K\n) {\n const meta = getRequestMeta(request)\n delete meta[key]\n return setRequestMeta(request, meta)\n}\n\ntype NextQueryMetadata = {\n /**\n * The `_rsc` query parameter used for cache busting to ensure that the RSC\n * requests do not get cached by the browser explicitly.\n */\n [NEXT_RSC_UNION_QUERY]?: string\n}\n\nexport type NextParsedUrlQuery = ParsedUrlQuery & NextQueryMetadata\n\n/**\n * subset of `url.parse` return value\n */\ninterface LegacyUrl {\n auth?: string | null\n hash: string | null\n hostname: string | null\n href: string\n pathname: string | null\n protocol: string | null\n search: string | null\n slashes: boolean | null\n port: string | null\n query: string | null | ParsedUrlQuery\n}\ninterface LegacyUrlWithParsedQuery extends LegacyUrl {\n query: ParsedUrlQuery\n}\n\n// TODO: Remove in favor of WHATWG URLs\nexport interface NextUrlWithParsedQuery extends LegacyUrlWithParsedQuery {\n query: NextParsedUrlQuery\n}\n"],"names":["NEXT_REQUEST_META","Symbol","for","getRequestMeta","req","key","meta","setRequestMeta","addRequestMeta","request","value","removeRequestMeta"],"mappings":"AAiBA,kGAAkG;;;;;;;;;;;;;AAC3F,MAAMA,oBAAoBC,OAAOC,GAAG,CAAC,2BAA0B;AAsX/D,SAASC,eACdC,GAAwB,EACxBC,GAAO;IAEP,MAAMC,OAAOF,GAAG,CAACJ,kBAAkB,IAAI,CAAC;IACxC,OAAO,OAAOK,QAAQ,WAAWC,IAAI,CAACD,IAAI,GAAGC;AAC/C;AASO,SAASC,eAAeH,GAAwB,EAAEE,IAAiB;IACxEF,GAAG,CAACJ,kBAAkB,GAAGM;IACzB,OAAOA;AACT;AAUO,SAASE,eACdC,OAA4B,EAC5BJ,GAAM,EACNK,KAAqB;IAErB,MAAMJ,OAAOH,eAAeM;IAC5BH,IAAI,CAACD,IAAI,GAAGK;IACZ,OAAOH,eAAeE,SAASH;AACjC;AASO,SAASK,kBACdF,OAA4B,EAC5BJ,GAAM;IAEN,MAAMC,OAAOH,eAAeM;IAC5B,OAAOH,IAAI,CAACD,IAAI;IAChB,OAAOE,eAAeE,SAASH;AACjC","ignoreList":[0]}}, + {"offset": {"line": 7750, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/response-cache/index.ts"],"sourcesContent":["import type { ResponseCacheOwner } from '../lib/route-cache-key'\nimport type {\n ResponseCacheResult,\n ResponseGenerator,\n ResponseCacheBase,\n IncrementalResponseCacheEntry,\n IncrementalResponseCache,\n GetIncrementalResponseCacheContext,\n GetIncrementalImageCacheContext,\n} from './types'\nimport { IncrementalCacheKind } from './types'\nimport { InvariantError } from '../../shared/lib/invariant-error'\n\nimport { Batcher } from '../../lib/batcher'\nimport { LRUCache } from '../lib/lru-cache'\nimport { warnOnce } from '../../build/output/log'\nimport { scheduleOnNextTick } from '../../lib/scheduler'\nimport {\n fromResponseCacheEntry,\n routeKindToIncrementalCacheKind,\n toResponseCacheEntry,\n} from './utils'\nimport type { RouteKind } from '../route-kind'\nimport type { PrerenderFailure } from '../render-result'\n\ntype IncrementalResponseCacheResult =\n | IncrementalResponseCacheEntry\n | PrerenderFailure\n | null\n\n/**\n * Parses an environment variable as a positive integer, returning the fallback\n * if the value is missing, not a number, or not positive.\n */\nfunction parsePositiveInt(\n envValue: string | undefined,\n fallback: number\n): number {\n if (!envValue) return fallback\n const parsed = parseInt(envValue, 10)\n return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback\n}\n\n/**\n * Default TTL (in milliseconds) for minimal mode response cache entries.\n * Used for cache hit validation as a fallback for providers that don't\n * send the x-invocation-id header yet.\n *\n * 10 seconds chosen because:\n * - Long enough to dedupe rapid successive requests (e.g., page + data)\n * - Short enough to not serve stale data across unrelated requests\n *\n * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_TTL` environment variable.\n */\nconst DEFAULT_TTL_MS = parsePositiveInt(\n process.env.NEXT_PRIVATE_RESPONSE_CACHE_TTL,\n 10_000\n)\n\n/**\n * Default maximum number of entries in the response cache.\n * Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE` environment variable.\n */\nconst DEFAULT_MAX_SIZE = parsePositiveInt(\n process.env.NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE,\n 150\n)\n\n/**\n * Separator used in compound cache keys to join pathname and invocationID.\n * Using null byte (\\0) since it cannot appear in valid URL paths or UUIDs.\n */\nconst KEY_SEPARATOR = '\\0'\n\n/**\n * Sentinel value used for TTL-based cache entries (when invocationID is undefined).\n * Chosen to be a clearly reserved marker for internal cache keys.\n */\nconst TTL_SENTINEL = '__ttl_sentinel__'\n\n/**\n * Entry stored in the LRU cache.\n */\ntype CacheEntry = {\n entry: IncrementalResponseCacheResult\n /**\n * TTL expiration timestamp in milliseconds. Used as a fallback for\n * cache hit validation when providers don't send x-invocation-id.\n * Memory pressure is managed by LRU eviction rather than timers.\n */\n expiresAt: number\n}\n\n/**\n * Creates a compound cache key from pathname and invocationID.\n */\nfunction createCacheKey(\n pathname: string,\n invocationID: string | undefined\n): string {\n return `${pathname}${KEY_SEPARATOR}${invocationID ?? TTL_SENTINEL}`\n}\n\n/**\n * Extracts the invocationID from a compound cache key.\n * Returns undefined if the key used TTL_SENTINEL.\n */\nfunction extractInvocationID(compoundKey: string): string | undefined {\n const separatorIndex = compoundKey.lastIndexOf(KEY_SEPARATOR)\n if (separatorIndex === -1) return undefined\n\n const invocationID = compoundKey.slice(separatorIndex + 1)\n return invocationID === TTL_SENTINEL ? undefined : invocationID\n}\n\nexport * from './types'\n\nexport default class ResponseCache implements ResponseCacheBase {\n // The get and revalidate batchers share pending renders across invocation\n // IDs, including failures. Invocation IDs scope reuse of completed results in\n // the LRU below.\n private readonly getBatcher = Batcher.create<\n { key: string; isOnDemandRevalidate: boolean },\n IncrementalResponseCacheResult,\n string\n >({\n // Ensure on-demand revalidate doesn't block normal requests, it should be\n // safe to run an on-demand revalidate for the same key as a normal request.\n cacheKeyFn: ({ key, isOnDemandRevalidate }) =>\n `${key}-${isOnDemandRevalidate ? '1' : '0'}`,\n // We wait to do any async work until after we've added our promise to\n // `pendingResponses` to ensure that any any other calls will reuse the\n // same promise until we've fully finished our work.\n schedulerFn: scheduleOnNextTick,\n })\n\n private readonly revalidateBatcher = Batcher.create<\n string,\n IncrementalResponseCacheResult\n >({\n // We wait to do any async work until after we've added our promise to\n // `pendingResponses` to ensure that any any other calls will reuse the\n // same promise until we've fully finished our work.\n schedulerFn: scheduleOnNextTick,\n })\n\n /**\n * LRU cache for minimal mode using compound keys (pathname + invocationID).\n * This allows multiple invocations to cache the same pathname without\n * overwriting each other's entries.\n */\n private readonly cache: LRUCache\n\n /**\n * Set of invocation IDs that have had cache entries evicted.\n * Used to detect when the cache size may be too small.\n * Bounded to prevent memory growth.\n */\n private readonly evictedInvocationIDs: Set = new Set()\n\n /**\n * The configured max size, stored for logging.\n */\n private readonly maxSize: number\n\n /**\n * The configured TTL for cache entries in milliseconds.\n */\n private readonly ttl: number\n\n // we don't use minimal_mode name here as this.minimal_mode is\n // statically replace for server runtimes but we need it to\n // be dynamic here\n private minimal_mode?: boolean\n\n private readonly route: ResponseCacheOwner | 'image'\n\n constructor({\n minimalMode,\n route,\n maxSize = DEFAULT_MAX_SIZE,\n ttl = DEFAULT_TTL_MS,\n }: {\n minimalMode: boolean\n route: ResponseCacheOwner | 'image'\n maxSize?: number\n ttl?: number\n }) {\n if (!route) {\n throw new InvariantError('Response cache requires a source route')\n }\n this.route = route\n this.minimal_mode = minimalMode\n this.maxSize = maxSize\n this.ttl = ttl\n\n // Create the LRU cache with eviction tracking\n this.cache = new LRUCache(maxSize, undefined, (compoundKey) => {\n const invocationID = extractInvocationID(compoundKey)\n if (invocationID) {\n // Bound to 100 entries to prevent unbounded memory growth.\n // FIFO eviction is acceptable here because:\n // 1. Invocations are short-lived (single request lifecycle), so older\n // invocations are unlikely to still be active after 100 newer ones\n // 2. This warning mechanism is best-effort for developer guidance—\n // missing occasional eviction warnings doesn't affect correctness\n // 3. If a long-running invocation is somehow evicted and then has\n // another cache entry evicted, it will simply be re-added\n if (this.evictedInvocationIDs.size >= 100) {\n const first = this.evictedInvocationIDs.values().next().value\n if (first) this.evictedInvocationIDs.delete(first)\n }\n this.evictedInvocationIDs.add(invocationID)\n }\n })\n }\n\n /**\n * Gets the response cache entry for the given key.\n *\n * @param key - The key to get the response cache entry for.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param context - The context for the get request.\n * @returns The response cache entry.\n */\n public async get(\n key: string | null,\n responseGenerator: ResponseGenerator,\n context: {\n routeKind: RouteKind\n isOnDemandRevalidate?: boolean\n isPrefetch?: boolean\n incrementalCache: IncrementalResponseCache\n isRoutePPREnabled?: boolean\n isFallback?: boolean\n waitUntil?: (prom: Promise) => void\n\n /**\n * The invocation ID from the infrastructure. Used to scope the in-memory\n * cache to a single revalidation request in minimal mode. Concurrent\n * invocations can still share a pending render through the batchers.\n */\n invocationID?: string\n }\n ): Promise {\n // If there is no key for the cache, we can't possibly look this up in the\n // cache so just return the result of the response generator.\n if (!key) {\n return responseGenerator({\n hasResolved: false,\n previousCacheEntry: null,\n })\n }\n\n // Check minimal mode cache before doing any other work.\n if (this.minimal_mode) {\n const cacheKey = createCacheKey(key, context.invocationID)\n const cachedItem = this.cache.get(cacheKey)\n\n if (cachedItem) {\n // With invocationID: exact match found - always a hit\n // With TTL mode: must check expiration\n if (context.invocationID !== undefined) {\n return cachedItem.entry !== null && 'error' in cachedItem.entry\n ? cachedItem.entry\n : toResponseCacheEntry(cachedItem.entry)\n }\n\n // TTL entries can be reused by unrelated requests. Exclude failures so\n // those requests can retry instead of receiving a cached error.\n const now = Date.now()\n if (\n (cachedItem.entry === null || !('error' in cachedItem.entry)) &&\n cachedItem.expiresAt > now\n ) {\n return toResponseCacheEntry(cachedItem.entry)\n }\n\n // TTL expired - clean up\n this.cache.remove(cacheKey)\n }\n\n // Warn if this invocation had entries evicted - indicates cache may be too small.\n if (\n context.invocationID &&\n this.evictedInvocationIDs.has(context.invocationID)\n ) {\n warnOnce(\n `Response cache entry was evicted for invocation ${context.invocationID}. ` +\n `Consider increasing NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE (current: ${this.maxSize}).`\n )\n }\n }\n\n const {\n incrementalCache,\n isOnDemandRevalidate = false,\n isFallback = false,\n isRoutePPREnabled = false,\n isPrefetch = false,\n waitUntil,\n invocationID,\n } = context\n\n const response = await this.getBatcher.batch(\n { key, isOnDemandRevalidate },\n ({ resolve }) => {\n const promise = this.handleGet(\n key,\n responseGenerator,\n {\n incrementalCache,\n isOnDemandRevalidate,\n isFallback,\n isRoutePPREnabled,\n isPrefetch,\n invocationID,\n },\n resolve\n )\n\n // We need to ensure background revalidates are passed to waitUntil.\n if (waitUntil) waitUntil(promise)\n\n return promise\n }\n )\n\n // In minimal mode, each caller with an invocation ID stores the shared\n // failure under its own ID for reuse by related requests. Callers without\n // an invocation ID receive the failure but do not store it in the LRU.\n if (\n this.minimal_mode &&\n response &&\n ('error' in response ? invocationID !== undefined : response.cacheControl)\n ) {\n const cacheKey = createCacheKey(key, invocationID)\n this.cache.set(cacheKey, {\n entry: response,\n expiresAt: Date.now() + this.ttl,\n })\n }\n\n return response !== null && 'error' in response\n ? response\n : toResponseCacheEntry(response)\n }\n\n /**\n * Handles the get request for the response cache.\n *\n * @param key - The key to get the response cache entry for.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param context - The context for the get request.\n * @param resolve - The resolve function to use to resolve the response cache entry.\n * @returns The response cache entry.\n */\n private async handleGet(\n key: string,\n responseGenerator: ResponseGenerator,\n context: {\n incrementalCache: IncrementalResponseCache\n isOnDemandRevalidate: boolean\n isFallback: boolean\n isRoutePPREnabled: boolean\n isPrefetch: boolean\n invocationID: string | undefined\n },\n resolve: (value: IncrementalResponseCacheResult) => void\n ): Promise {\n let previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null =\n null\n let resolved = false\n\n try {\n // Get the previous cache entry if not in minimal mode\n previousIncrementalCacheEntry = !this.minimal_mode\n ? await context.incrementalCache.get(\n key,\n this.getCacheContext(context.isRoutePPREnabled, context.isFallback)\n )\n : null\n\n // `isStale === -1` signals that the entry is past its `expire` (either\n // via an expired tag or, with `cacheLife({ expire })`, past the route's\n // expire time in the prerender manifest). In that case we must NOT\n // early-resolve with the stale value — instead we fall through to a\n // blocking revalidation so the response returned to the user is fresh.\n if (\n previousIncrementalCacheEntry &&\n !context.isOnDemandRevalidate &&\n previousIncrementalCacheEntry.isStale !== -1\n ) {\n resolve(previousIncrementalCacheEntry)\n resolved = true\n\n if (!previousIncrementalCacheEntry.isStale || context.isPrefetch) {\n // The cached value is still valid, so we don't need to update it yet.\n return previousIncrementalCacheEntry\n }\n }\n\n // Revalidate the cache entry.\n //\n // A prefetch request that missed must run its own response generator\n // rather than joining an in-flight revalidation through the batcher. A\n // background revalidation may be regenerating the concrete (non-fallback)\n // entry for this route — e.g. an ISR fallback-shell upgrade scheduled by\n // an earlier prefetch sub-request. Joining it would serve that concrete\n // result to the prefetch instead of the fallback shell, and which segment\n // wins would depend purely on request timing. Running the generator\n // directly lets every prefetch segment take the same fallback-shell path,\n // independent of any concurrent background upgrade.\n const incrementalResponseCacheEntry =\n context.isPrefetch && previousIncrementalCacheEntry === null\n ? await this.handleRevalidate(\n key,\n context.incrementalCache,\n context.isRoutePPREnabled,\n context.isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n resolved\n )\n : await this.revalidate(\n key,\n context.incrementalCache,\n context.isRoutePPREnabled,\n context.isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n resolved\n )\n\n if (\n incrementalResponseCacheEntry !== null &&\n 'error' in incrementalResponseCacheEntry &&\n resolved\n ) {\n // The caller already received the stale entry. Report the background\n // failure here, as the catch below does for a thrown error.\n console.error(incrementalResponseCacheEntry.error)\n return null\n }\n\n // Handle null response\n if (!incrementalResponseCacheEntry) {\n // Remove the cache item if it was set so we don't use it again.\n if (this.minimal_mode) {\n const cacheKey = createCacheKey(key, context.invocationID)\n this.cache.remove(cacheKey)\n }\n return null\n }\n\n // Resolve for on-demand revalidation or if not already resolved\n if (context.isOnDemandRevalidate && !resolved) {\n return incrementalResponseCacheEntry\n }\n\n return incrementalResponseCacheEntry\n } catch (err) {\n // If we've already resolved the cache entry, we can't reject as we\n // already resolved the cache entry so log the error here.\n if (resolved) {\n console.error(err)\n return null\n }\n\n throw err\n }\n }\n\n /**\n * Revalidates the cache entry for the given key.\n *\n * @param key - The key to revalidate the cache entry for.\n * @param incrementalCache - The incremental cache to use to revalidate the cache entry.\n * @param isRoutePPREnabled - Whether the route is PPR enabled.\n * @param isFallback - Whether the route is a fallback.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param previousIncrementalCacheEntry - The previous cache entry to use to revalidate the cache entry.\n * @param hasResolved - Whether the response has been resolved.\n * @param waitUntil - Optional function to register background work.\n * @param invocationID - The invocation ID for cache key scoping.\n * @returns The revalidated cache entry.\n */\n public async revalidate(\n key: string,\n incrementalCache: IncrementalResponseCache,\n isRoutePPREnabled: boolean,\n isFallback: boolean,\n responseGenerator: ResponseGenerator,\n previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null,\n hasResolved: boolean,\n waitUntil?: (prom: Promise) => void\n ) {\n return this.revalidateBatcher.batch(key, () => {\n const promise = this.handleRevalidate(\n key,\n incrementalCache,\n isRoutePPREnabled,\n isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n hasResolved\n )\n\n // We need to ensure background revalidates are passed to waitUntil.\n if (waitUntil) waitUntil(promise)\n\n return promise\n })\n }\n\n private async handleRevalidate(\n key: string,\n incrementalCache: IncrementalResponseCache,\n isRoutePPREnabled: boolean,\n isFallback: boolean,\n responseGenerator: ResponseGenerator,\n previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null,\n hasResolved: boolean\n ): Promise {\n let failure: PrerenderFailure\n try {\n // Generate the response cache entry using the response generator.\n const responseCacheEntry = await responseGenerator({\n hasResolved,\n previousCacheEntry: previousIncrementalCacheEntry,\n isRevalidating: true,\n })\n if (!responseCacheEntry) {\n return null\n }\n\n if ('error' in responseCacheEntry) {\n failure = responseCacheEntry\n } else {\n // Convert the response cache entry to an incremental response cache entry.\n const incrementalResponseCacheEntry = await fromResponseCacheEntry({\n ...responseCacheEntry,\n isMiss: !previousIncrementalCacheEntry,\n })\n\n // We want to persist the result only if it has a cache control value\n // defined. The minimal mode LRU write is handled in get() so that every\n // caller, including batched invocations, populates the cache.\n if (incrementalResponseCacheEntry.cacheControl && !this.minimal_mode) {\n await incrementalCache.set(key, incrementalResponseCacheEntry.value, {\n ...this.getCacheContext(isRoutePPREnabled, isFallback),\n cacheControl: incrementalResponseCacheEntry.cacheControl,\n })\n }\n\n return incrementalResponseCacheEntry\n }\n } catch (err) {\n await this.retainPreviousCacheEntry(\n key,\n incrementalCache,\n isRoutePPREnabled,\n isFallback,\n previousIncrementalCacheEntry\n )\n throw err\n }\n\n await this.retainPreviousCacheEntry(\n key,\n incrementalCache,\n isRoutePPREnabled,\n isFallback,\n previousIncrementalCacheEntry\n )\n return failure\n }\n\n // Retain the previous successful value and delay retries after revalidation\n // fails.\n private async retainPreviousCacheEntry(\n key: string,\n incrementalCache: IncrementalResponseCache,\n isRoutePPREnabled: boolean,\n isFallback: boolean,\n previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null\n ): Promise {\n if (previousIncrementalCacheEntry?.cacheControl) {\n const revalidate = Math.min(\n Math.max(previousIncrementalCacheEntry.cacheControl.revalidate || 3, 3),\n 30\n )\n const expire =\n previousIncrementalCacheEntry.cacheControl.expire === undefined\n ? undefined\n : Math.max(\n revalidate + 3,\n previousIncrementalCacheEntry.cacheControl.expire\n )\n\n await incrementalCache.set(key, previousIncrementalCacheEntry.value, {\n ...this.getCacheContext(isRoutePPREnabled, isFallback),\n cacheControl: { revalidate: revalidate, expire: expire },\n })\n }\n }\n\n private getCacheContext(\n isRoutePPREnabled: boolean,\n isFallback: boolean\n ): GetIncrementalResponseCacheContext | GetIncrementalImageCacheContext {\n if (this.route === 'image') {\n return { kind: IncrementalCacheKind.IMAGE, isFallback: false }\n }\n const kind = routeKindToIncrementalCacheKind(this.route.kind)\n if (kind === IncrementalCacheKind.IMAGE) {\n throw new InvariantError('Images must use the image response cache')\n }\n return { route: this.route, kind, isRoutePPREnabled, isFallback }\n }\n}\n"],"names":["IncrementalCacheKind","InvariantError","Batcher","LRUCache","warnOnce","scheduleOnNextTick","fromResponseCacheEntry","routeKindToIncrementalCacheKind","toResponseCacheEntry","parsePositiveInt","envValue","fallback","parsed","parseInt","Number","isFinite","DEFAULT_TTL_MS","process","env","NEXT_PRIVATE_RESPONSE_CACHE_TTL","DEFAULT_MAX_SIZE","NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE","KEY_SEPARATOR","TTL_SENTINEL","createCacheKey","pathname","invocationID","extractInvocationID","compoundKey","separatorIndex","lastIndexOf","undefined","slice","ResponseCache","constructor","minimalMode","route","maxSize","ttl","getBatcher","create","cacheKeyFn","key","isOnDemandRevalidate","schedulerFn","revalidateBatcher","evictedInvocationIDs","Set","minimal_mode","cache","size","first","values","next","value","delete","add","get","responseGenerator","context","hasResolved","previousCacheEntry","cacheKey","cachedItem","entry","now","Date","expiresAt","remove","has","incrementalCache","isFallback","isRoutePPREnabled","isPrefetch","waitUntil","response","batch","resolve","promise","handleGet","cacheControl","set","previousIncrementalCacheEntry","resolved","getCacheContext","isStale","incrementalResponseCacheEntry","handleRevalidate","revalidate","console","error","err","failure","responseCacheEntry","isRevalidating","isMiss","retainPreviousCacheEntry","Math","min","max","expire","kind","IMAGE"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 8101, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/response-cache/types.ts"],"sourcesContent":["import type { ResponseCacheOwner } from '../lib/route-cache-key'\nimport type { OutgoingHttpHeaders } from 'http'\nimport type RenderResult from '../render-result'\nimport type { CacheControl, Revalidate } from '../lib/cache-control'\nimport type { RouteKind } from '../route-kind'\nimport type { PrerenderFailure } from '../render-result'\n\nexport interface ResponseCacheBase {\n get(\n key: string | null,\n responseGenerator: ResponseGenerator,\n context: {\n isOnDemandRevalidate?: boolean\n isPrefetch?: boolean\n incrementalCache: IncrementalCache\n /**\n * This is a hint to the cache to help it determine what kind of route\n * this is so it knows where to look up the cache entry from. If not\n * provided it will test the filesystem to check.\n */\n routeKind: RouteKind\n\n /**\n * True if this is a fallback request.\n */\n isFallback?: boolean\n\n /**\n * True if the route is enabled for PPR.\n */\n isRoutePPREnabled?: boolean\n }\n ): Promise\n}\n\n// The server components HMR cache might store other data as well in the future,\n// at which point this should be refactored to a discriminated union type.\nexport interface ServerComponentsHmrCache {\n get(key: string): CachedFetchData | undefined\n set(key: string, data: CachedFetchData): void\n}\n\nexport type CachedFetchData = {\n headers: Record\n body: string\n url: string\n status?: number\n}\n\nexport const enum CachedRouteKind {\n APP_PAGE = 'APP_PAGE',\n APP_ROUTE = 'APP_ROUTE',\n PAGES = 'PAGES',\n FETCH = 'FETCH',\n REDIRECT = 'REDIRECT',\n IMAGE = 'IMAGE',\n}\n\nexport interface CachedFetchValue {\n kind: CachedRouteKind.FETCH\n data: CachedFetchData\n // tags are only present with file-system-cache\n // fetch cache stores tags outside of cache entry\n tags?: string[]\n revalidate: number\n}\n\nexport interface CachedRedirectValue {\n kind: CachedRouteKind.REDIRECT\n props: Object\n}\n\nexport interface CachedAppPageValue {\n kind: CachedRouteKind.APP_PAGE\n // this needs to be a RenderResult so since renderResponse\n // expects that type instead of a string\n html: RenderResult\n rscData: Buffer | undefined\n status: number | undefined\n postponed: string | undefined\n headers: OutgoingHttpHeaders | undefined\n segmentData: Map | undefined\n}\n\nexport interface CachedPageValue {\n kind: CachedRouteKind.PAGES\n // this needs to be a RenderResult so since renderResponse\n // expects that type instead of a string\n html: RenderResult\n pageData: Object\n status: number | undefined\n headers: OutgoingHttpHeaders | undefined\n}\n\nexport interface CachedRouteValue {\n kind: CachedRouteKind.APP_ROUTE\n // this needs to be a RenderResult so since renderResponse\n // expects that type instead of a string\n body: Buffer\n status: number\n headers: OutgoingHttpHeaders\n}\n\nexport interface CachedImageValue {\n kind: CachedRouteKind.IMAGE\n etag: string\n upstreamEtag: string\n buffer: Buffer\n extension: string\n revalidate?: number\n isMiss?: boolean\n isStale?: boolean\n}\n\nexport interface IncrementalCachedAppPageValue {\n kind: CachedRouteKind.APP_PAGE\n // this needs to be a string since the cache expects to store\n // the string value\n html: string\n rscData: Buffer | undefined\n headers: OutgoingHttpHeaders | undefined\n postponed: string | undefined\n status: number | undefined\n segmentData: Map | undefined\n}\n\nexport interface IncrementalCachedPageValue {\n kind: CachedRouteKind.PAGES\n // this needs to be a string since the cache expects to store\n // the string value\n html: string\n pageData: Object\n headers: OutgoingHttpHeaders | undefined\n status: number | undefined\n}\n\nexport interface IncrementalResponseCacheEntry {\n cacheControl?: CacheControl\n /**\n * timestamp in milliseconds to revalidate after\n */\n revalidateAfter?: Revalidate\n /**\n * `-1` here dictates a blocking revalidate should be used\n */\n isStale?: boolean | -1\n isMiss?: boolean\n isFallback?: boolean\n value: Exclude | null\n}\n\nexport interface IncrementalFetchCacheEntry {\n /**\n * `-1` here dictates a blocking revalidate should be used\n */\n isStale?: boolean | -1\n value: CachedFetchValue\n}\n\nexport type IncrementalCacheEntry =\n | IncrementalResponseCacheEntry\n | IncrementalFetchCacheEntry\n\nexport type IncrementalCacheValue =\n | CachedRedirectValue\n | IncrementalCachedPageValue\n | IncrementalCachedAppPageValue\n | CachedImageValue\n | CachedFetchValue\n | CachedRouteValue\n\nexport type ResponseCacheValue =\n | CachedRedirectValue\n | CachedPageValue\n | CachedAppPageValue\n | CachedImageValue\n | CachedRouteValue\n\nexport type ResponseCacheEntry = {\n cacheControl?: CacheControl\n value: ResponseCacheValue | null\n isStale?: boolean | -1\n isMiss?: boolean\n isFallback?: boolean\n}\n\nexport type ResponseCacheResult = ResponseCacheEntry | PrerenderFailure | null\n\n/**\n * @param hasResolved whether the responseGenerator has resolved it's promise\n * @param previousCacheEntry the previous cache entry if it exists or the current\n */\nexport type ResponseGenerator = (state: {\n hasResolved: boolean\n previousCacheEntry?: IncrementalResponseCacheEntry | null\n isRevalidating?: boolean\n span?: any\n\n /**\n * When true, this indicates that the response generator is being called in a\n * context where the response must be generated statically.\n *\n * CRITICAL: This should only currently be used when revalidating due to a\n * dynamic RSC request.\n */\n forceStaticRender?: boolean\n}) => Promise\n\nexport const enum IncrementalCacheKind {\n APP_PAGE = 'APP_PAGE',\n APP_ROUTE = 'APP_ROUTE',\n PAGES = 'PAGES',\n FETCH = 'FETCH',\n IMAGE = 'IMAGE',\n}\n\nexport interface GetIncrementalFetchCacheContext {\n kind: IncrementalCacheKind.FETCH\n revalidate?: Revalidate\n fetchUrl?: string\n fetchIdx?: number\n tags?: string[]\n softTags?: string[]\n}\n\nexport interface GetIncrementalResponseCacheHandlerContext {\n kind: Exclude<\n IncrementalCacheKind,\n IncrementalCacheKind.FETCH | IncrementalCacheKind.IMAGE\n >\n\n /**\n * True if the route is enabled for PPR.\n */\n isRoutePPREnabled?: boolean\n\n /**\n * True if this is a fallback request.\n */\n isFallback: boolean\n}\n\nexport interface GetIncrementalResponseCacheContext\n extends GetIncrementalResponseCacheHandlerContext {\n /** Internal ownership used before invoking the storage handler. */\n route: ResponseCacheOwner\n}\n\nexport interface SetIncrementalFetchCacheContext {\n fetchCache: true\n fetchUrl?: string\n fetchIdx?: number\n tags?: string[]\n isImplicitBuildTimeCache?: boolean\n}\n\nexport interface SetIncrementalResponseCacheHandlerContext {\n fetchCache?: false\n cacheControl?: CacheControl\n\n /**\n * True if the route is enabled for PPR.\n */\n isRoutePPREnabled?: boolean\n\n /**\n * True if this is a fallback request.\n */\n isFallback?: boolean\n}\n\nexport interface SetIncrementalResponseCacheContext\n extends SetIncrementalResponseCacheHandlerContext {\n /** Internal ownership used before invoking the storage handler. */\n route: ResponseCacheOwner\n}\n\nexport interface GetIncrementalImageCacheContext {\n kind: IncrementalCacheKind.IMAGE\n route?: never\n isFallback: false\n isRoutePPREnabled?: false\n}\n\nexport interface SetIncrementalImageCacheContext {\n kind: IncrementalCacheKind.IMAGE\n route?: never\n fetchCache?: false\n cacheControl?: CacheControl\n}\n\nexport interface IncrementalResponseCache {\n get(\n cacheKey: string,\n ctx: GetIncrementalResponseCacheContext | GetIncrementalImageCacheContext\n ): Promise\n set(\n key: string,\n data: Exclude | null,\n ctx: SetIncrementalResponseCacheContext | SetIncrementalImageCacheContext\n ): Promise\n}\n\nexport interface IncrementalCache extends IncrementalResponseCache {\n get(\n cacheKey: string,\n ctx: GetIncrementalFetchCacheContext\n ): Promise\n get(\n cacheKey: string,\n ctx: GetIncrementalResponseCacheContext | GetIncrementalImageCacheContext\n ): Promise\n set(\n key: string,\n data: CachedFetchValue | null,\n ctx: SetIncrementalFetchCacheContext\n ): Promise\n set(\n key: string,\n data: Exclude | null,\n ctx: SetIncrementalResponseCacheContext | SetIncrementalImageCacheContext\n ): Promise\n revalidateTag(\n tags: string | string[],\n durations?: { expire?: number }\n ): Promise\n}\n"],"names":["CachedRouteKind","IncrementalCacheKind"],"mappings":";;;;;;AAiDO,IAAWA,kBAAAA,WAAAA,GAAAA,SAAAA,eAAAA;;;;;;;WAAAA;MAOjB;AAwJM,IAAWC,uBAAAA,WAAAA,GAAAA,SAAAA,oBAAAA;;;;;;WAAAA;MAMjB","ignoreList":[0]}}, + {"offset": {"line": 8128, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/response-cache/utils.ts"],"sourcesContent":["import {\n CachedRouteKind,\n IncrementalCacheKind,\n type CachedAppPageValue,\n type CachedPageValue,\n type IncrementalResponseCacheEntry,\n type ResponseCacheEntry,\n} from './types'\n\nimport RenderResult from '../render-result'\nimport { RouteKind } from '../route-kind'\nimport { HTML_CONTENT_TYPE_HEADER } from '../../lib/constants'\n\nexport async function fromResponseCacheEntry(\n cacheEntry: ResponseCacheEntry\n): Promise {\n return {\n ...cacheEntry,\n value:\n cacheEntry.value?.kind === CachedRouteKind.PAGES\n ? {\n kind: CachedRouteKind.PAGES,\n html: await cacheEntry.value.html.toUnchunkedString(true),\n pageData: cacheEntry.value.pageData,\n headers: cacheEntry.value.headers,\n status: cacheEntry.value.status,\n }\n : cacheEntry.value?.kind === CachedRouteKind.APP_PAGE\n ? {\n kind: CachedRouteKind.APP_PAGE,\n html: await cacheEntry.value.html.toUnchunkedString(true),\n postponed: cacheEntry.value.postponed,\n rscData: cacheEntry.value.rscData,\n headers: cacheEntry.value.headers,\n status: cacheEntry.value.status,\n segmentData: cacheEntry.value.segmentData,\n }\n : cacheEntry.value,\n }\n}\n\nexport async function toResponseCacheEntry(\n response: IncrementalResponseCacheEntry | null\n): Promise {\n if (!response) return null\n\n return {\n isMiss: response.isMiss,\n isStale: response.isStale,\n cacheControl: response.cacheControl,\n isFallback: response.isFallback,\n value:\n response.value?.kind === CachedRouteKind.PAGES\n ? ({\n kind: CachedRouteKind.PAGES,\n html: RenderResult.fromStatic(\n response.value.html,\n HTML_CONTENT_TYPE_HEADER\n ),\n pageData: response.value.pageData,\n headers: response.value.headers,\n status: response.value.status,\n } satisfies CachedPageValue)\n : response.value?.kind === CachedRouteKind.APP_PAGE\n ? ({\n kind: CachedRouteKind.APP_PAGE,\n html: RenderResult.fromStatic(\n response.value.html,\n HTML_CONTENT_TYPE_HEADER\n ),\n rscData: response.value.rscData,\n headers: response.value.headers,\n status: response.value.status,\n postponed: response.value.postponed,\n segmentData: response.value.segmentData,\n } satisfies CachedAppPageValue)\n : response.value,\n }\n}\n\nexport function routeKindToIncrementalCacheKind(\n routeKind: RouteKind\n): Exclude {\n switch (routeKind) {\n case RouteKind.PAGES:\n return IncrementalCacheKind.PAGES\n case RouteKind.APP_PAGE:\n return IncrementalCacheKind.APP_PAGE\n case RouteKind.IMAGE:\n return IncrementalCacheKind.IMAGE\n case RouteKind.APP_ROUTE:\n return IncrementalCacheKind.APP_ROUTE\n case RouteKind.PAGES_API:\n // Pages Router API routes are not cached in the incremental cache.\n throw new Error(`Unexpected route kind ${routeKind}`)\n default:\n return routeKind satisfies never\n }\n}\n"],"names":["CachedRouteKind","IncrementalCacheKind","RenderResult","RouteKind","HTML_CONTENT_TYPE_HEADER","fromResponseCacheEntry","cacheEntry","value","kind","PAGES","html","toUnchunkedString","pageData","headers","status","APP_PAGE","postponed","rscData","segmentData","toResponseCacheEntry","response","isMiss","isStale","cacheControl","isFallback","fromStatic","routeKindToIncrementalCacheKind","routeKind","IMAGE","APP_ROUTE","PAGES_API","Error"],"mappings":";;;;;;;;AAAA,SACEA,eAAe,EACfC,oBAAoB,QAKf,UAAS;AAEhB,OAAOC,kBAAkB,mBAAkB;AAC3C,SAASC,SAAS,QAAQ,gBAAe;AACzC,SAASC,wBAAwB,QAAQ,sBAAqB;;;;;AAEvD,eAAeC,uBACpBC,UAA8B;QAK1BA,mBAQIA;IAXR,OAAO;QACL,GAAGA,UAAU;QACbC,OACED,CAAAA,CAAAA,oBAAAA,WAAWC,KAAK,KAAA,OAAA,KAAA,IAAhBD,kBAAkBE,IAAI,MAAKR,gMAAAA,CAAgBS,KAAK,GAC5C;YACED,MAAMR,gMAAAA,CAAgBS,KAAK;YAC3BC,MAAM,MAAMJ,WAAWC,KAAK,CAACG,IAAI,CAACC,iBAAiB,CAAC;YACpDC,UAAUN,WAAWC,KAAK,CAACK,QAAQ;YACnCC,SAASP,WAAWC,KAAK,CAACM,OAAO;YACjCC,QAAQR,WAAWC,KAAK,CAACO,MAAM;QACjC,IACAR,CAAAA,CAAAA,qBAAAA,WAAWC,KAAK,KAAA,OAAA,KAAA,IAAhBD,mBAAkBE,IAAI,MAAKR,gMAAAA,CAAgBe,QAAQ,GACjD;YACEP,MAAMR,gMAAAA,CAAgBe,QAAQ;YAC9BL,MAAM,MAAMJ,WAAWC,KAAK,CAACG,IAAI,CAACC,iBAAiB,CAAC;YACpDK,WAAWV,WAAWC,KAAK,CAACS,SAAS;YACrCC,SAASX,WAAWC,KAAK,CAACU,OAAO;YACjCJ,SAASP,WAAWC,KAAK,CAACM,OAAO;YACjCC,QAAQR,WAAWC,KAAK,CAACO,MAAM;YAC/BI,aAAaZ,WAAWC,KAAK,CAACW,WAAW;QAC3C,IACAZ,WAAWC,KAAK;IAC1B;AACF;AAEO,eAAeY,qBACpBC,QAA8C;QAU1CA,iBAWIA;IAnBR,IAAI,CAACA,UAAU,OAAO;IAEtB,OAAO;QACLC,QAAQD,SAASC,MAAM;QACvBC,SAASF,SAASE,OAAO;QACzBC,cAAcH,SAASG,YAAY;QACnCC,YAAYJ,SAASI,UAAU;QAC/BjB,OACEa,CAAAA,CAAAA,kBAAAA,SAASb,KAAK,KAAA,OAAA,KAAA,IAAda,gBAAgBZ,IAAI,MAAKR,gMAAAA,CAAgBS,KAAK,GACzC;YACCD,MAAMR,gMAAAA,CAAgBS,KAAK;YAC3BC,MAAMR,8KAAAA,CAAauB,UAAU,CAC3BL,SAASb,KAAK,CAACG,IAAI,EACnBN,qLAAAA;YAEFQ,UAAUQ,SAASb,KAAK,CAACK,QAAQ;YACjCC,SAASO,SAASb,KAAK,CAACM,OAAO;YAC/BC,QAAQM,SAASb,KAAK,CAACO,MAAM;QAC/B,IACAM,CAAAA,CAAAA,mBAAAA,SAASb,KAAK,KAAA,OAAA,KAAA,IAAda,iBAAgBZ,IAAI,MAAKR,gMAAAA,CAAgBe,QAAQ,GAC9C;YACCP,MAAMR,gMAAAA,CAAgBe,QAAQ;YAC9BL,MAAMR,8KAAAA,CAAauB,UAAU,CAC3BL,SAASb,KAAK,CAACG,IAAI,EACnBN,qLAAAA;YAEFa,SAASG,SAASb,KAAK,CAACU,OAAO;YAC/BJ,SAASO,SAASb,KAAK,CAACM,OAAO;YAC/BC,QAAQM,SAASb,KAAK,CAACO,MAAM;YAC7BE,WAAWI,SAASb,KAAK,CAACS,SAAS;YACnCE,aAAaE,SAASb,KAAK,CAACW,WAAW;QACzC,IACAE,SAASb,KAAK;IACxB;AACF;AAEO,SAASmB,gCACdC,SAAoB;IAEpB,OAAQA;QACN,KAAKxB,6KAAAA,CAAUM,KAAK;YAClB,OAAOR,qMAAAA,CAAqBQ,KAAK;QACnC,KAAKN,6KAAAA,CAAUY,QAAQ;YACrB,OAAOd,qMAAAA,CAAqBc,QAAQ;QACtC,KAAKZ,6KAAAA,CAAUyB,KAAK;YAClB,OAAO3B,qMAAAA,CAAqB2B,KAAK;QACnC,KAAKzB,6KAAAA,CAAU0B,SAAS;YACtB,OAAO5B,qMAAAA,CAAqB4B,SAAS;QACvC,KAAK1B,6KAAAA,CAAU2B,SAAS;YACtB,mEAAmE;YACnE,MAAM,IAAIC,MAAM,CAAC,sBAAsB,EAAEJ,WAAW;QACtD;YACE,OAAOA;IACX;AACF","ignoreList":[0]}}, + {"offset": {"line": 8211, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/route-kind.ts"],"sourcesContent":["export const enum RouteKind {\n /**\n * `PAGES` represents all the React pages that are under `pages/`.\n */\n PAGES = 'PAGES',\n /**\n * `PAGES_API` represents all the API routes under `pages/api/`.\n */\n PAGES_API = 'PAGES_API',\n /**\n * `APP_PAGE` represents all the React pages that are under `app/` with the\n * filename of `page.{j,t}s{,x}`.\n */\n APP_PAGE = 'APP_PAGE',\n /**\n * `APP_ROUTE` represents all the API routes and metadata routes that are under `app/` with the\n * filename of `route.{j,t}s{,x}`.\n */\n APP_ROUTE = 'APP_ROUTE',\n\n /**\n * `IMAGE` represents all the images that are generated by `next/image`.\n */\n IMAGE = 'IMAGE',\n}\n"],"names":["RouteKind"],"mappings":";;;;AAAO,IAAWA,YAAAA,WAAAA,GAAAA,SAAAA,SAAAA;IAChB;;GAEC,GAAA,SAAA,CAAA,QAAA,GAAA;IAED;;GAEC,GAAA,SAAA,CAAA,YAAA,GAAA;IAED;;;GAGC,GAAA,SAAA,CAAA,WAAA,GAAA;IAED;;;GAGC,GAAA,SAAA,CAAA,YAAA,GAAA;IAGD;;GAEC,GAAA,SAAA,CAAA,QAAA,GAAA;WAtBeA;MAwBjB","ignoreList":[0]}}, + {"offset": {"line": 8239, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/send-response.ts"],"sourcesContent":["import type { BaseNextRequest, BaseNextResponse } from './base-http'\nimport { isNodeNextResponse } from './base-http/helpers'\n\nimport { pipeToNodeResponse } from './pipe-readable'\nimport { splitCookiesString } from './web/utils'\n\n/**\n * Sends the response on the underlying next response object.\n *\n * @param req the underlying request object\n * @param res the underlying response object\n * @param response the response to send\n */\nexport async function sendResponse(\n req: BaseNextRequest,\n res: BaseNextResponse,\n response: Response,\n waitUntil?: Promise\n): Promise {\n if (\n // The type check here ensures that `req` is correctly typed, and the\n // environment variable check provides dead code elimination.\n process.env.NEXT_RUNTIME !== 'edge' &&\n isNodeNextResponse(res)\n ) {\n // Copy over the response status.\n res.statusCode = response.status\n res.statusMessage = response.statusText\n\n // TODO: this is not spec-compliant behavior and we should not restrict\n // headers that are allowed to appear many times.\n //\n // See:\n // https://github.com/vercel/next.js/pull/70127\n const headersWithMultipleValuesAllowed = [\n // can add more headers to this list if needed\n 'set-cookie',\n 'www-authenticate',\n 'proxy-authenticate',\n 'vary',\n ]\n\n // Copy over the response headers.\n response.headers?.forEach((value, name) => {\n // `x-middleware-set-cookie` is an internal header not needed for the response\n if (name.toLowerCase() === 'x-middleware-set-cookie') {\n return\n }\n\n // The append handling is special cased for `set-cookie`.\n if (name.toLowerCase() === 'set-cookie') {\n // TODO: (wyattjoh) replace with native response iteration when we can upgrade undici\n for (const cookie of splitCookiesString(value)) {\n res.appendHeader(name, cookie)\n }\n } else {\n // only append the header if it is either not present in the outbound response\n // or if the header supports multiple values\n const isHeaderPresent = typeof res.getHeader(name) !== 'undefined'\n if (\n headersWithMultipleValuesAllowed.includes(name.toLowerCase()) ||\n !isHeaderPresent\n ) {\n res.appendHeader(name, value)\n }\n }\n })\n\n /**\n * The response can't be directly piped to the underlying response. The\n * following is duplicated from the edge runtime handler.\n *\n * See packages/next/server/next-server.ts\n */\n\n const { originalResponse } = res\n\n // A response body must not be sent for HEAD requests. See https://httpwg.org/specs/rfc9110.html#HEAD\n if (response.body && req.method !== 'HEAD') {\n await pipeToNodeResponse(response.body, originalResponse, waitUntil)\n } else {\n originalResponse.end()\n }\n }\n}\n"],"names":["isNodeNextResponse","pipeToNodeResponse","splitCookiesString","sendResponse","req","res","response","waitUntil","process","env","NEXT_RUNTIME","statusCode","status","statusMessage","statusText","headersWithMultipleValuesAllowed","headers","forEach","value","name","toLowerCase","cookie","appendHeader","isHeaderPresent","getHeader","includes","originalResponse","body","method","end"],"mappings":";;;;AACA,SAASA,kBAAkB,QAAQ,sBAAqB;AAExD,SAASC,kBAAkB,QAAQ,kBAAiB;AACpD,SAASC,kBAAkB,QAAQ,cAAa;;;;AASzC,eAAeC,aACpBC,GAAoB,EACpBC,GAAqB,EACrBC,QAAkB,EAClBC,SAA4B;IAE5B,IACE,AACA,6DAA6D,QADQ;IAErEC,QAAQC,GAAG,CAACC,YAAY,uBAAK,cAC7BV,gMAAAA,EAAmBK,MACnB;YAkBA,AACAC,kCADkC;QAjBlC,iCAAiC;QACjCD,IAAIM,UAAU,GAAGL,SAASM,MAAM;QAChCP,IAAIQ,aAAa,GAAGP,SAASQ,UAAU;QAEvC,uEAAuE;QACvE,iDAAiD;QACjD,EAAE;QACF,OAAO;QACP,+CAA+C;QAC/C,MAAMC,mCAAmC;YACvC,8CAA8C;YAC9C;YACA;YACA;YACA;SACD;SAGDT,oBAAAA,SAASU,OAAO,KAAA,OAAA,KAAA,IAAhBV,kBAAkBW,OAAO,CAAC,CAACC,OAAOC;YAChC,8EAA8E;YAC9E,IAAIA,KAAKC,WAAW,OAAO,2BAA2B;gBACpD;YACF;YAEA,yDAAyD;YACzD,IAAID,KAAKC,WAAW,OAAO,cAAc;gBACvC,qFAAqF;gBACrF,KAAK,MAAMC,cAAUnB,qLAAAA,EAAmBgB,OAAQ;oBAC9Cb,IAAIiB,YAAY,CAACH,MAAME;gBACzB;YACF,OAAO;gBACL,8EAA8E;gBAC9E,4CAA4C;gBAC5C,MAAME,kBAAkB,OAAOlB,IAAImB,SAAS,CAACL,UAAU;gBACvD,IACEJ,iCAAiCU,QAAQ,CAACN,KAAKC,WAAW,OAC1D,CAACG,iBACD;oBACAlB,IAAIiB,YAAY,CAACH,MAAMD;gBACzB;YACF;QACF;QAEA;;;;;KAKC,GAED,MAAM,EAAEQ,gBAAgB,EAAE,GAAGrB;QAE7B,qGAAqG;QACrG,IAAIC,SAASqB,IAAI,IAAIvB,IAAIwB,MAAM,KAAK,QAAQ;YAC1C,UAAM3B,yLAAAA,EAAmBK,SAASqB,IAAI,EAAED,kBAAkBnB;QAC5D,OAAO;YACLmB,iBAAiBG,GAAG;QACtB;IACF;AACF","ignoreList":[0]}}, + {"offset": {"line": 8306, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/stream-utils/encoded-tags.ts"],"sourcesContent":["export const ENCODED_TAGS = {\n // opening tags do not have the closing `>` since they can contain other attributes such as ``\n OPENING: {\n // \n HEAD: new Uint8Array([60, 47, 104, 101, 97, 100, 62]),\n // \n BODY: new Uint8Array([60, 47, 98, 111, 100, 121, 62]),\n // \n HTML: new Uint8Array([60, 47, 104, 116, 109, 108, 62]),\n // \n BODY_AND_HTML: new Uint8Array([\n 60, 47, 98, 111, 100, 121, 62, 60, 47, 104, 116, 109, 108, 62,\n ]),\n },\n META: {\n // Only the match the prefix cause the suffix can be different whether it's xml compatible or not \">\" or \"/>\"\n // (\n ...streams: ReadableStream[]\n): ReadableStream {\n // If we have no streams, return an empty stream. This behavior is\n // intentional as we're now providing the `RenderResult.EMPTY` value.\n if (streams.length === 0) {\n return new ReadableStream({\n start(controller) {\n controller.close()\n },\n })\n }\n\n // If we only have 1 stream we fast path it by returning just this stream\n if (streams.length === 1) {\n return streams[0]\n }\n\n const { readable, writable } = new TransformStream()\n\n // We always initiate pipeTo immediately. We know we have at least 2 streams\n // so we need to avoid closing the writable when this one finishes.\n let promise = streams[0].pipeTo(writable, { preventClose: true })\n\n let i = 1\n for (; i < streams.length - 1; i++) {\n const nextStream = streams[i]\n promise = promise.then(() =>\n nextStream.pipeTo(writable, { preventClose: true })\n )\n }\n\n // We can omit the length check because we halted before the last stream and there\n // is at least two streams so the lastStream here will always be defined\n const lastStream = streams[i]\n promise = promise.then(() => lastStream.pipeTo(writable))\n\n // Catch any errors from the streams and ignore them, they will be handled\n // by whatever is consuming the readable stream.\n promise.catch(voidCatch)\n\n return readable\n}\n\nexport function streamFromString(str: string): ReadableStream {\n return new ReadableStream({\n start(controller) {\n controller.enqueue(encoder.encode(str))\n controller.close()\n },\n })\n}\n\n/**\n * Creates a stream that delivers `chunk` and then closes.\n *\n * The stream is a default stream, and it has to stay one. A byte stream (`type:\n * 'bytes'`) transfers the buffer of each chunk that it receives, which detaches\n * `chunk`. A caller that keeps `chunk` to serve more than one read, such as an\n * in-memory cache handler, loses the data on the first read.\n *\n * Every reader receives the same `chunk` instance. A reader that modifies it\n * changes what later readers see.\n */\nexport function streamFromBuffer(chunk: Buffer): ReadableStream {\n return new ReadableStream({\n start(controller) {\n controller.enqueue(chunk)\n controller.close()\n },\n })\n}\n\nasync function streamToChunks(\n stream: ReadableStream\n): Promise> {\n const reader = stream.getReader()\n const chunks: Array = []\n\n while (true) {\n const { done, value } = await reader.read()\n if (done) {\n break\n }\n\n chunks.push(value)\n }\n\n return chunks\n}\n\nfunction concatUint8Arrays(chunks: Array): Uint8Array {\n const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0)\n const result = new Uint8Array(totalLength)\n let offset = 0\n for (const chunk of chunks) {\n result.set(chunk, offset)\n offset += chunk.length\n }\n return result\n}\n\nexport async function webstreamToUint8Array(\n stream: ReadableStream\n): Promise {\n return concatUint8Arrays(await streamToChunks(stream))\n}\n\nfunction webToReadable(\n stream: ReadableStream | import('node:stream').Readable\n): import('node:stream').Readable {\n if (process.env.NEXT_RUNTIME === 'edge') {\n throw new Error('webToReadable cannot be used in the edge runtime')\n } else {\n let Readable: typeof import('node:stream').Readable\n if (process.env.TURBOPACK) {\n Readable = (require('node:stream') as typeof import('node:stream'))\n .Readable\n } else if (\n process.env.__NEXT_BUNDLER === 'Webpack' ||\n process.env.__NEXT_BUNDLER === 'Rspack'\n ) {\n Readable = (\n __non_webpack_require__('node:stream') as typeof import('node:stream')\n ).Readable\n } else {\n Readable = (require('node:stream') as typeof import('node:stream'))\n .Readable\n }\n if (stream instanceof Readable) {\n return stream\n }\n return Readable.fromWeb(stream as import('stream/web').ReadableStream)\n }\n}\n\nexport async function nodestreamToUint8Array(\n stream: AnyStream\n): Promise {\n const chunks: Buffer[] = []\n for await (const chunk of webToReadable(stream)) {\n chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk)\n }\n return Buffer.concat(chunks)\n}\n\nexport async function streamToUint8Array(stream: AnyStream) {\n if (process.env.NEXT_RUNTIME === 'edge') {\n // Edge runtime always uses web streams\n return webstreamToUint8Array(stream as ReadableStream)\n } else {\n let Readable: typeof import('node:stream').Readable\n if (process.env.TURBOPACK) {\n Readable = (require('node:stream') as typeof import('node:stream'))\n .Readable\n } else if (\n process.env.__NEXT_BUNDLER === 'Webpack' ||\n process.env.__NEXT_BUNDLER === 'Rspack'\n ) {\n Readable = (\n __non_webpack_require__('node:stream') as typeof import('node:stream')\n ).Readable\n } else {\n Readable = (require('node:stream') as typeof import('node:stream'))\n .Readable\n }\n\n if (stream instanceof Readable) {\n return nodestreamToUint8Array(stream)\n }\n\n return webstreamToUint8Array(stream)\n }\n}\n\nexport async function streamToBuffer(\n stream: ReadableStream\n): Promise {\n return Buffer.concat(await streamToChunks(stream))\n}\n\nexport async function streamToString(\n stream: ReadableStream,\n signal?: AbortSignal\n): Promise {\n const decoder = new TextDecoder('utf-8', { fatal: true })\n let string = ''\n\n for await (const chunk of stream) {\n if (signal?.aborted) {\n return string\n }\n\n string += decoder.decode(chunk, { stream: true })\n }\n\n string += decoder.decode()\n\n return string\n}\n\nexport type BufferedTransformOptions = {\n /**\n * Flush synchronously once the buffer reaches this many bytes.\n */\n readonly maxBufferByteLength?: number\n}\n\nexport function createBufferedTransformStream(\n options: BufferedTransformOptions = {}\n): TransformStream {\n const { maxBufferByteLength = Infinity } = options\n\n let bufferedChunks: Array = []\n let bufferByteLength: number = 0\n let pending: PromiseWithResolvers | undefined\n\n const flush = (controller: TransformStreamDefaultController) => {\n try {\n if (bufferedChunks.length === 0) {\n return\n }\n\n const chunk = new Uint8Array(bufferByteLength)\n let copiedBytes = 0\n\n for (let i = 0; i < bufferedChunks.length; i++) {\n const bufferedChunk = bufferedChunks[i]\n chunk.set(bufferedChunk, copiedBytes)\n copiedBytes += bufferedChunk.byteLength\n }\n // We just wrote all the buffered chunks so we need to reset the bufferedChunks array\n // and our bufferByteLength to prepare for the next round of buffered chunks\n bufferedChunks.length = 0\n bufferByteLength = 0\n controller.enqueue(chunk)\n } catch {\n // If an error occurs while enqueuing, it can't be due to this\n // transformer. It's most likely caused by the controller having been\n // errored (for example, if the stream was cancelled).\n }\n }\n\n const scheduleFlush = (controller: TransformStreamDefaultController) => {\n if (pending) {\n return\n }\n\n const detached = createPromiseWithResolvers()\n pending = detached\n\n scheduleImmediate(() => {\n try {\n flush(controller)\n } finally {\n pending = undefined\n detached.resolve()\n }\n })\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n // Combine the previous buffer with the new chunk.\n bufferedChunks.push(chunk)\n bufferByteLength += chunk.byteLength\n\n if (bufferByteLength >= maxBufferByteLength) {\n flush(controller)\n } else {\n scheduleFlush(controller)\n }\n },\n flush() {\n return pending?.promise\n },\n })\n}\n\n// TODO this is currently unused but once we add proper output:export support, it needs to be\n// revisited. See https://github.com/vercel/next.js/pull/89478 for more details\n//\n// function createPrefetchCommentStream(\n// isBuildTimePrerendering: boolean,\n// buildId: string\n// ): TransformStream {\n// // Insert an extra comment at the beginning of the HTML document. This must\n// // come after the DOCTYPE, which is inserted by React.\n// //\n// // The first chunk sent by React will contain the doctype. After that, we can\n// // pass through the rest of the chunks as-is.\n// let didTransformFirstChunk = false\n// return new TransformStream({\n// transform(chunk, controller) {\n// if (isBuildTimePrerendering && !didTransformFirstChunk) {\n// didTransformFirstChunk = true\n// const decoder = new TextDecoder('utf-8', { fatal: true })\n// const chunkStr = decoder.decode(chunk, {\n// stream: true,\n// })\n// const updatedChunkStr = insertBuildIdComment(chunkStr, buildId)\n// controller.enqueue(encoder.encode(updatedChunkStr))\n// return\n// }\n// controller.enqueue(chunk)\n// },\n// })\n// }\n\nexport function renderToInitialFizzStream({\n ReactDOMServer,\n element,\n streamOptions,\n}: {\n ReactDOMServer: {\n renderToReadableStream: typeof import('react-dom/server').renderToReadableStream\n }\n element: React.ReactElement\n streamOptions?: Parameters[1]\n}): Promise {\n return getTracer().trace(AppRenderSpan.renderToReadableStream, async () =>\n ReactDOMServer.renderToReadableStream(element, streamOptions)\n )\n}\n\nexport function createMetadataTransformStream(\n insert: () => Promise | string\n): TransformStream {\n let chunkIndex = -1\n let isMarkRemoved = false\n\n return new TransformStream({\n async transform(chunk, controller) {\n let iconMarkIndex = -1\n let closedHeadIndex = -1\n chunkIndex++\n\n if (isMarkRemoved) {\n controller.enqueue(chunk)\n return\n }\n let iconMarkLength = 0\n // Only search for the closed head tag once\n if (iconMarkIndex === -1) {\n iconMarkIndex = indexOfUint8Array(chunk, ENCODED_TAGS.META.ICON_MARK)\n if (iconMarkIndex === -1) {\n controller.enqueue(chunk)\n return\n } else {\n // When we found the `` or `>`, checking the next char to ensure we cover both cases.\n iconMarkLength = ENCODED_TAGS.META.ICON_MARK.length\n // Check if next char is /, this is for xml mode.\n if (chunk[iconMarkIndex + iconMarkLength] === 47) {\n iconMarkLength += 2\n } else {\n // The last char is `>`\n iconMarkLength++\n }\n }\n }\n\n // Check if icon mark is inside tag in the first chunk.\n if (chunkIndex === 0) {\n closedHeadIndex = indexOfUint8Array(chunk, ENCODED_TAGS.CLOSED.HEAD)\n if (iconMarkIndex !== -1) {\n // The mark icon is located in the 1st chunk before the head tag.\n // We do not need to insert the script tag in this case because it's in the head.\n // Just remove the icon mark from the chunk.\n if (iconMarkIndex < closedHeadIndex) {\n const replaced = new Uint8Array(chunk.length - iconMarkLength)\n\n // Remove the icon mark from the chunk.\n replaced.set(chunk.subarray(0, iconMarkIndex))\n replaced.set(\n chunk.subarray(iconMarkIndex + iconMarkLength),\n iconMarkIndex\n )\n chunk = replaced\n } else {\n // The icon mark is after the head tag, replace and insert the script tag at that position.\n const insertion = await insert()\n const encodedInsertion = encoder.encode(insertion)\n const insertionLength = encodedInsertion.length\n const replaced = new Uint8Array(\n chunk.length - iconMarkLength + insertionLength\n )\n replaced.set(chunk.subarray(0, iconMarkIndex))\n replaced.set(encodedInsertion, iconMarkIndex)\n replaced.set(\n chunk.subarray(iconMarkIndex + iconMarkLength),\n iconMarkIndex + insertionLength\n )\n chunk = replaced\n }\n isMarkRemoved = true\n }\n // If there's no icon mark located, it will be handled later when if present in the following chunks.\n } else {\n // When it's appeared in the following chunks, we'll need to\n // remove the mark and then insert the script tag at that position.\n const insertion = await insert()\n const encodedInsertion = encoder.encode(insertion)\n const insertionLength = encodedInsertion.length\n // Replace the icon mark with the hoist script or empty string.\n const replaced = new Uint8Array(\n chunk.length - iconMarkLength + insertionLength\n )\n // Set the first part of the chunk, before the icon mark.\n replaced.set(chunk.subarray(0, iconMarkIndex))\n // Set the insertion after the icon mark.\n replaced.set(encodedInsertion, iconMarkIndex)\n\n // Set the rest of the chunk after the icon mark.\n replaced.set(\n chunk.subarray(iconMarkIndex + iconMarkLength),\n iconMarkIndex + insertionLength\n )\n chunk = replaced\n isMarkRemoved = true\n }\n controller.enqueue(chunk)\n },\n })\n}\n\nexport function createHeadInsertionTransformStream(\n insert: () => Promise\n): TransformStream {\n let inserted = false\n\n // We need to track if this transform saw any bytes because if it didn't\n // we won't want to insert any server HTML at all\n let hasBytes = false\n\n return new TransformStream({\n async transform(chunk, controller) {\n hasBytes = true\n\n const insertion = await insert()\n if (inserted) {\n if (insertion) {\n const encodedInsertion = encoder.encode(insertion)\n controller.enqueue(encodedInsertion)\n }\n controller.enqueue(chunk)\n } else {\n // TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for.\n const index = indexOfUint8Array(chunk, ENCODED_TAGS.CLOSED.HEAD)\n // In fully static rendering or non PPR rendering cases:\n // `/head>` will always be found in the chunk in first chunk rendering.\n if (index !== -1) {\n if (insertion) {\n const encodedInsertion = encoder.encode(insertion)\n // Get the total count of the bytes in the chunk and the insertion\n // e.g.\n // chunk = \n // insertion = \n // output = [ ] \n const insertedHeadContent = new Uint8Array(\n chunk.length + encodedInsertion.length\n )\n // Append the first part of the chunk, before the head tag\n insertedHeadContent.set(chunk.slice(0, index))\n // Append the server inserted content\n insertedHeadContent.set(encodedInsertion, index)\n // Append the rest of the chunk\n insertedHeadContent.set(\n chunk.slice(index),\n index + encodedInsertion.length\n )\n controller.enqueue(insertedHeadContent)\n } else {\n controller.enqueue(chunk)\n }\n inserted = true\n } else {\n // This will happens in PPR rendering during next start, when the page is partially rendered.\n // When the page resumes, the head tag will be found in the middle of the chunk.\n // Where we just need to append the insertion and chunk to the current stream.\n // e.g.\n // PPR-static: ... [ resume content ] \n // PPR-resume: [ insertion ] [ rest content ]\n if (insertion) {\n controller.enqueue(encoder.encode(insertion))\n }\n controller.enqueue(chunk)\n inserted = true\n }\n }\n },\n async flush(controller) {\n // Check before closing if there's anything remaining to insert.\n if (hasBytes) {\n const insertion = await insert()\n if (insertion) {\n controller.enqueue(encoder.encode(insertion))\n }\n }\n },\n })\n}\n\nasync function createClientResumeScriptInsertionTransformStream(): Promise<\n TransformStream\n> {\n const segmentPath = '/_full'\n const cacheBustingHeader = await computeCacheBustingSearchParam(\n '1', // headers[NEXT_ROUTER_PREFETCH_HEADER]\n '/_full', // headers[NEXT_ROUTER_SEGMENT_PREFETCH_HEADER]\n undefined, // headers[NEXT_ROUTER_STATE_TREE_HEADER]\n undefined // headers[NEXT_URL]\n )\n const searchStr = `${NEXT_RSC_UNION_QUERY}=${cacheBustingHeader}`\n const NEXT_CLIENT_RESUME_SCRIPT = ``\n\n let didAlreadyInsert = false\n return new TransformStream({\n transform(chunk, controller) {\n if (didAlreadyInsert) {\n // Already inserted the script into the head. Pass through.\n controller.enqueue(chunk)\n return\n }\n // TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for.\n const headClosingTagIndex = indexOfUint8Array(\n chunk,\n ENCODED_TAGS.CLOSED.HEAD\n )\n\n if (headClosingTagIndex === -1) {\n // In fully static rendering or non PPR rendering cases:\n // `/head>` will always be found in the chunk in first chunk rendering.\n controller.enqueue(chunk)\n return\n }\n\n const encodedInsertion = encoder.encode(NEXT_CLIENT_RESUME_SCRIPT)\n // Get the total count of the bytes in the chunk and the insertion\n // e.g.\n // chunk = \n // insertion = \n // output = [ ] \n const insertedHeadContent = new Uint8Array(\n chunk.length + encodedInsertion.length\n )\n // Append the first part of the chunk, before the head tag\n insertedHeadContent.set(chunk.slice(0, headClosingTagIndex))\n // Append the server inserted content\n insertedHeadContent.set(encodedInsertion, headClosingTagIndex)\n // Append the rest of the chunk\n insertedHeadContent.set(\n chunk.slice(headClosingTagIndex),\n headClosingTagIndex + encodedInsertion.length\n )\n\n controller.enqueue(insertedHeadContent)\n didAlreadyInsert = true\n },\n })\n}\n\n// Suffix after main body content - scripts before ,\n// but wait for the major chunks to be enqueued.\nexport function createDeferredSuffixStream(\n suffix: string\n): TransformStream {\n let flushed = false\n let pending: PromiseWithResolvers | undefined\n\n const flush = (controller: TransformStreamDefaultController) => {\n const detached = createPromiseWithResolvers()\n pending = detached\n\n scheduleImmediate(() => {\n try {\n controller.enqueue(encoder.encode(suffix))\n } catch {\n // If an error occurs while enqueuing it can't be due to this\n // transformers fault. It's likely due to the controller being\n // errored due to the stream being cancelled.\n } finally {\n pending = undefined\n detached.resolve()\n }\n })\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n controller.enqueue(chunk)\n\n // If we've already flushed, we're done.\n if (flushed) return\n\n // Schedule the flush to happen.\n flushed = true\n flush(controller)\n },\n flush(controller) {\n if (pending) return pending.promise\n if (flushed) return\n\n // Flush now.\n controller.enqueue(encoder.encode(suffix))\n },\n })\n}\n\nexport function createFlightDataInjectionTransformStream(\n stream: ReadableStream,\n delayDataUntilFirstHtmlChunk: boolean\n): TransformStream {\n let htmlStreamFinished = false\n\n let pull: Promise | null = null\n let donePulling = false\n\n function startOrContinuePulling(\n controller: TransformStreamDefaultController\n ) {\n if (!pull) {\n pull = startPulling(controller)\n }\n return pull\n }\n\n async function startPulling(controller: TransformStreamDefaultController) {\n const reader = stream.getReader()\n\n if (delayDataUntilFirstHtmlChunk) {\n // NOTE: streaming flush\n // We are buffering here for the inlined data stream because the\n // \"shell\" stream might be chunkenized again by the underlying stream\n // implementation, e.g. with a specific high-water mark. To ensure it's\n // the safe timing to pipe the data stream, this extra tick is\n // necessary.\n\n // We don't start reading until we've left the current Task to ensure\n // that it's inserted after flushing the shell. Note that this implementation\n // might get stale if impl details of Fizz change in the future.\n await atLeastOneTask()\n }\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) {\n donePulling = true\n return\n }\n\n // We want to prioritize HTML over RSC data.\n // The SSR render is based on the same RSC stream, so when we get a new RSC chunk,\n // we're likely to produce an HTML chunk as well, so give it a chance to flush first.\n if (!delayDataUntilFirstHtmlChunk && !htmlStreamFinished) {\n await atLeastOneTask()\n }\n controller.enqueue(value)\n }\n } catch (err) {\n controller.error(err)\n }\n }\n\n return new TransformStream({\n start(controller) {\n if (!delayDataUntilFirstHtmlChunk) {\n startOrContinuePulling(controller)\n }\n },\n transform(chunk, controller) {\n controller.enqueue(chunk)\n\n // Start the streaming if it hasn't already been started yet.\n if (delayDataUntilFirstHtmlChunk) {\n startOrContinuePulling(controller)\n }\n },\n flush(controller) {\n htmlStreamFinished = true\n if (donePulling) {\n return\n }\n return startOrContinuePulling(controller)\n },\n })\n}\n\nexport const CLOSE_TAG = ''\n\n/**\n * This transform stream moves the suffix to the end of the stream, so results\n * like `` will be transformed to\n * ``.\n */\nexport function createMoveSuffixStream(): TransformStream<\n Uint8Array,\n Uint8Array\n> {\n let foundSuffix = false\n\n return new TransformStream({\n transform(chunk, controller) {\n if (foundSuffix) {\n return controller.enqueue(chunk)\n }\n\n const index = indexOfUint8Array(chunk, ENCODED_TAGS.CLOSED.BODY_AND_HTML)\n if (index > -1) {\n foundSuffix = true\n\n // If the whole chunk is the suffix, then don't write anything, it will\n // be written in the flush.\n if (chunk.length === ENCODED_TAGS.CLOSED.BODY_AND_HTML.length) {\n return\n }\n\n // Write out the part before the suffix.\n const before = chunk.slice(0, index)\n controller.enqueue(before)\n\n // In the case where the suffix is in the middle of the chunk, we need\n // to split the chunk into two parts.\n if (chunk.length > ENCODED_TAGS.CLOSED.BODY_AND_HTML.length + index) {\n // Write out the part after the suffix.\n const after = chunk.slice(\n index + ENCODED_TAGS.CLOSED.BODY_AND_HTML.length\n )\n controller.enqueue(after)\n }\n } else {\n controller.enqueue(chunk)\n }\n },\n flush(controller) {\n // Even if we didn't find the suffix, the HTML is not valid if we don't\n // add it, so insert it at the end.\n controller.enqueue(ENCODED_TAGS.CLOSED.BODY_AND_HTML)\n },\n })\n}\n\nfunction createStripDocumentClosingTagsTransform(): TransformStream<\n Uint8Array,\n Uint8Array\n> {\n return new TransformStream({\n transform(chunk, controller) {\n // We rely on the assumption that chunks will never break across a code unit.\n // This is reasonable because we currently concat all of React's output from a single\n // flush into one chunk before streaming it forward which means the chunk will represent\n // a single coherent utf-8 string. This is not safe to use if we change our streaming to no\n // longer do this large buffered chunk\n if (\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.BODY_AND_HTML) ||\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.BODY) ||\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.HTML)\n ) {\n // the entire chunk is the closing tags; return without enqueueing anything.\n return\n }\n\n // We assume these tags will go at together at the end of the document and that\n // they won't appear anywhere else in the document. This is not really a safe assumption\n // but until we revamp our streaming infra this is a performant way to string the tags\n chunk = removeFromUint8Array(chunk, ENCODED_TAGS.CLOSED.BODY)\n chunk = removeFromUint8Array(chunk, ENCODED_TAGS.CLOSED.HTML)\n\n controller.enqueue(chunk)\n },\n })\n}\n\nexport function createHtmlDataDplIdTransformStream(\n dplId: string\n): TransformStream {\n let didTransform = false\n\n return new TransformStream({\n transform(chunk, controller) {\n if (didTransform) {\n controller.enqueue(chunk)\n return\n }\n\n const htmlTagIndex = indexOfUint8Array(chunk, ENCODED_TAGS.OPENING.HTML)\n if (htmlTagIndex === -1) {\n controller.enqueue(chunk)\n return\n }\n\n // Insert the data-dpl-id attribute right after \" {\n let foundHtml = false\n let foundBody = false\n return new TransformStream({\n async transform(chunk, controller) {\n // Peek into the streamed chunk to see if the tags are present.\n if (\n !foundHtml &&\n indexOfUint8Array(chunk, ENCODED_TAGS.OPENING.HTML) > -1\n ) {\n foundHtml = true\n }\n\n if (\n !foundBody &&\n indexOfUint8Array(chunk, ENCODED_TAGS.OPENING.BODY) > -1\n ) {\n foundBody = true\n }\n\n controller.enqueue(chunk)\n },\n flush(controller) {\n const missingTags: ('html' | 'body')[] = []\n if (!foundHtml) missingTags.push('html')\n if (!foundBody) missingTags.push('body')\n\n if (!missingTags.length) return\n\n controller.enqueue(\n encoder.encode(\n `\n `<${c}>`)\n .join(\n missingTags.length > 1 ? ' and ' : ''\n )} tags in the root layout.\\nRead more at https://nextjs.org/docs/messages/missing-root-layout-tags\"\n data-next-error-digest=\"${MISSING_ROOT_TAGS_ERROR}\"\n data-next-error-stack=\"\"\n >\n `\n )\n )\n },\n })\n}\n\nexport function chainTransformers(\n readable: ReadableStream,\n transformers: ReadonlyArray | null>\n): ReadableStream {\n let stream = readable\n for (const transformer of transformers) {\n if (!transformer) continue\n\n stream = stream.pipeThrough(transformer)\n }\n return stream\n}\n\nexport type ContinueStreamOptions = {\n inlinedDataStream: ReadableStream | undefined\n waitForAllReady: boolean\n deploymentId: string | undefined\n getServerInsertedHTML: () => Promise\n getServerInsertedMetadata: () => Promise\n validateRootLayout?: boolean\n /**\n * Suffix to inject after the buffered data, but before the close tags.\n */\n suffix?: string | undefined\n}\n\nexport async function continueFizzStream(\n renderStream: ReactDOMServerReadableStream,\n {\n suffix,\n inlinedDataStream,\n waitForAllReady,\n deploymentId,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n validateRootLayout,\n }: ContinueStreamOptions\n): Promise> {\n // Suffix itself might contain close tags at the end, so we need to split it.\n const suffixUnclosed = suffix ? suffix.split(CLOSE_TAG, 1)[0] : null\n\n if (waitForAllReady) {\n // Wait for all Suspense boundaries to resolve before continuing.\n await renderStream.allReady\n } else {\n // Otherwise, we want to make sure Fizz is done with all microtasky work\n // before we start pulling the stream and cause a flush.\n await waitAtLeastOneReactRenderTask()\n }\n\n return chainTransformers(renderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n\n // Insert data-dpl-id attribute on the html tag\n deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,\n\n // Transform metadata\n createMetadataTransformStream(getServerInsertedMetadata),\n\n // Insert suffix content\n suffixUnclosed != null && suffixUnclosed.length > 0\n ? createDeferredSuffixStream(suffixUnclosed)\n : null,\n\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n inlinedDataStream\n ? createFlightDataInjectionTransformStream(inlinedDataStream, true)\n : null,\n\n // Validate the root layout for missing html or body tags\n validateRootLayout ? createRootLayoutValidatorStream() : null,\n\n // Close tags should always be deferred to the end\n createMoveSuffixStream(),\n\n // Special head insertions\n // TODO-APP: Insert server side html to end of head in app layout rendering, to avoid\n // hydration errors. Remove this once it's ready to be handled by react itself.\n createHeadInsertionTransformStream(getServerInsertedHTML),\n ])\n}\n\ntype ContinueDynamicPrerenderOptions = {\n getServerInsertedHTML: () => Promise\n getServerInsertedMetadata: () => Promise\n deploymentId: string | undefined\n}\n\nexport async function continueDynamicPrerender(\n prerenderStream: ReadableStream,\n {\n getServerInsertedHTML,\n getServerInsertedMetadata,\n deploymentId,\n }: ContinueDynamicPrerenderOptions\n) {\n return chainTransformers(prerenderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n createStripDocumentClosingTagsTransform(),\n // Insert data-dpl-id attribute on the html tag\n deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,\n // Insert generated tags to head\n createHeadInsertionTransformStream(getServerInsertedHTML),\n // Transform metadata\n createMetadataTransformStream(getServerInsertedMetadata),\n ])\n}\n\ntype ContinueStaticPrerenderOptions = {\n inlinedDataStream: ReadableStream\n getServerInsertedHTML: () => Promise\n getServerInsertedMetadata: () => Promise\n deploymentId: string | undefined\n}\n\nexport async function continueStaticPrerender(\n prerenderStream: ReadableStream,\n {\n inlinedDataStream,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n deploymentId,\n }: ContinueStaticPrerenderOptions\n) {\n return chainTransformers(prerenderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n // Add build id comment to start of the HTML document (in export mode)\n // Insert data-dpl-id attribute on the html tag\n deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,\n // Insert generated tags to head\n createHeadInsertionTransformStream(getServerInsertedHTML),\n // Transform metadata\n createMetadataTransformStream(getServerInsertedMetadata),\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n createFlightDataInjectionTransformStream(inlinedDataStream, true),\n // Close tags should always be deferred to the end\n createMoveSuffixStream(),\n ])\n}\n\nexport async function continueStaticFallbackPrerender(\n prerenderStream: ReadableStream,\n {\n inlinedDataStream,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n deploymentId,\n }: ContinueStaticPrerenderOptions\n) {\n // Same as `continueStaticPrerender`, but also inserts an additional script\n // to instruct the client to start fetching the hydration data as early\n // as possible.\n return chainTransformers(prerenderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n // Insert data-dpl-id attribute on the html tag\n deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,\n // Insert generated tags to head\n createHeadInsertionTransformStream(getServerInsertedHTML),\n // Insert the client resume script into the head\n await createClientResumeScriptInsertionTransformStream(),\n // Transform metadata\n createMetadataTransformStream(getServerInsertedMetadata),\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n createFlightDataInjectionTransformStream(inlinedDataStream, true),\n // Close tags should always be deferred to the end\n createMoveSuffixStream(),\n ])\n}\n\ntype ContinueResumeOptions = {\n inlinedDataStream: ReadableStream\n getServerInsertedHTML: () => Promise\n getServerInsertedMetadata: () => Promise\n delayDataUntilFirstHtmlChunk: boolean\n deploymentId: string | undefined\n}\n\nexport async function continueDynamicHTMLResume(\n renderStream: ReadableStream,\n {\n delayDataUntilFirstHtmlChunk,\n inlinedDataStream,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n deploymentId,\n }: ContinueResumeOptions\n) {\n return chainTransformers(renderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n // Insert data-dpl-id attribute on the html tag\n deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,\n // Insert generated tags to head\n createHeadInsertionTransformStream(getServerInsertedHTML),\n // Transform metadata\n createMetadataTransformStream(getServerInsertedMetadata),\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n createFlightDataInjectionTransformStream(\n inlinedDataStream,\n delayDataUntilFirstHtmlChunk\n ),\n // Close tags should always be deferred to the end\n createMoveSuffixStream(),\n ])\n}\n\nexport function createDocumentClosingStream(): ReadableStream {\n return streamFromString(CLOSE_TAG)\n}\n\n// ---------------------------------------------------------------------------\n// Runtime prefetch transform (Web streams)\n// ---------------------------------------------------------------------------\n\n/**\n * Web TransformStream that replaces the runtime prefetch sentinel in an RSC\n * payload stream: `[]` -> `[,]`.\n *\n * This is the web equivalent of createRuntimePrefetchNodeTransform\n * in node-stream-helpers.ts.\n */\nexport function createRuntimePrefetchTransformStream(\n sentinel: number,\n isPartial: boolean,\n staleTime: number\n): TransformStream {\n const enc = new TextEncoder()\n\n // Search for: []\n // Replace with: [,]\n const search = enc.encode(`[${sentinel}]`)\n const first = search[0]\n const replace = enc.encode(`[${isPartial},${staleTime}]`)\n const searchLen = search.length\n\n let currentChunk: Uint8Array | null = null\n let found = false\n\n function processChunk(\n controller: TransformStreamDefaultController,\n nextChunk: null | Uint8Array\n ) {\n if (found) {\n if (nextChunk) {\n controller.enqueue(nextChunk)\n }\n return\n }\n\n if (currentChunk) {\n // We can't search past the index that can contain a full match\n let exclusiveUpperBound = currentChunk.length - (searchLen - 1)\n if (nextChunk) {\n // If we have any overflow bytes we can search up to the chunk's final byte\n exclusiveUpperBound += Math.min(nextChunk.length, searchLen - 1)\n }\n if (exclusiveUpperBound < 1) {\n // we can't match the current chunk.\n controller.enqueue(currentChunk)\n currentChunk = nextChunk // advance so we don't process this chunk again\n return\n }\n\n let currentIndex = currentChunk.indexOf(first)\n\n // check the current candidate match if it is within the bounds of our search space for the currentChunk\n candidateLoop: while (\n -1 < currentIndex &&\n currentIndex < exclusiveUpperBound\n ) {\n // We already know index 0 matches because we used indexOf to find the candidateIndex so we start at index 1\n let matchIndex = 1\n while (matchIndex < searchLen) {\n const candidateIndex = currentIndex + matchIndex\n const candidateValue =\n candidateIndex < currentChunk.length\n ? currentChunk[candidateIndex]\n : // if we ever hit this condition it is because there is a nextChunk we can read from\n nextChunk![candidateIndex - currentChunk.length]\n if (candidateValue !== search[matchIndex]) {\n // No match, reset and continue the search from the next position\n currentIndex = currentChunk.indexOf(first, currentIndex + 1)\n continue candidateLoop\n }\n matchIndex++\n }\n // We found a complete match. currentIndex is our starting point to replace the value.\n found = true\n // enqueue everything up to the match\n controller.enqueue(currentChunk.subarray(0, currentIndex))\n // enqueue the replacement value\n controller.enqueue(replace)\n // If there are bytes in the currentChunk after the match enqueue them\n if (currentIndex + searchLen < currentChunk.length) {\n controller.enqueue(currentChunk.slice(currentIndex + searchLen))\n }\n // If we have a next chunk we enqueue it now\n if (nextChunk) {\n // if replacement spills over to the next chunk we first exclude the replaced bytes\n const overflowBytes = currentIndex + searchLen - currentChunk.length\n const truncatedChunk =\n overflowBytes > 0 ? nextChunk!.subarray(overflowBytes) : nextChunk\n controller.enqueue(truncatedChunk)\n }\n // We are now in found mode and don't need to track currentChunk anymore\n currentChunk = null\n return\n }\n // No match found in this chunk, emit it and wait for the next one\n controller.enqueue(currentChunk)\n }\n\n // Advance to the next chunk\n currentChunk = nextChunk\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n processChunk(controller, chunk)\n },\n flush(controller) {\n processChunk(controller, null)\n },\n })\n}\n"],"names":["getTracer","AppRenderSpan","createPromiseWithResolvers","scheduleImmediate","atLeastOneTask","waitAtLeastOneReactRenderTask","ENCODED_TAGS","indexOfUint8Array","isEquivalentUint8Arrays","removeFromUint8Array","MISSING_ROOT_TAGS_ERROR","RSC_HEADER","NEXT_ROUTER_PREFETCH_HEADER","NEXT_ROUTER_SEGMENT_PREFETCH_HEADER","NEXT_RSC_UNION_QUERY","computeCacheBustingSearchParam","voidCatch","encoder","TextEncoder","chainStreams","streams","length","ReadableStream","start","controller","close","readable","writable","TransformStream","promise","pipeTo","preventClose","i","nextStream","then","lastStream","catch","streamFromString","str","enqueue","encode","streamFromBuffer","chunk","streamToChunks","stream","reader","getReader","chunks","done","value","read","push","concatUint8Arrays","totalLength","reduce","sum","result","Uint8Array","offset","set","webstreamToUint8Array","webToReadable","process","env","NEXT_RUNTIME","Error","Readable","TURBOPACK","require","__NEXT_BUNDLER","__non_webpack_require__","fromWeb","nodestreamToUint8Array","Buffer","from","concat","streamToUint8Array","streamToBuffer","streamToString","signal","decoder","TextDecoder","fatal","string","aborted","decode","createBufferedTransformStream","options","maxBufferByteLength","Infinity","bufferedChunks","bufferByteLength","pending","flush","copiedBytes","bufferedChunk","byteLength","scheduleFlush","detached","undefined","resolve","transform","renderToInitialFizzStream","ReactDOMServer","element","streamOptions","trace","renderToReadableStream","createMetadataTransformStream","insert","chunkIndex","isMarkRemoved","iconMarkIndex","closedHeadIndex","iconMarkLength","META","ICON_MARK","CLOSED","HEAD","replaced","subarray","insertion","encodedInsertion","insertionLength","createHeadInsertionTransformStream","inserted","hasBytes","index","insertedHeadContent","slice","createClientResumeScriptInsertionTransformStream","segmentPath","cacheBustingHeader","searchStr","NEXT_CLIENT_RESUME_SCRIPT","didAlreadyInsert","headClosingTagIndex","createDeferredSuffixStream","suffix","flushed","createFlightDataInjectionTransformStream","delayDataUntilFirstHtmlChunk","htmlStreamFinished","pull","donePulling","startOrContinuePulling","startPulling","err","error","CLOSE_TAG","createMoveSuffixStream","foundSuffix","BODY_AND_HTML","before","after","createStripDocumentClosingTagsTransform","BODY","HTML","createHtmlDataDplIdTransformStream","dplId","didTransform","htmlTagIndex","OPENING","insertionPoint","attribute","encodedAttribute","modifiedChunk","createRootLayoutValidatorStream","foundHtml","foundBody","missingTags","map","c","join","chainTransformers","transformers","transformer","pipeThrough","continueFizzStream","renderStream","inlinedDataStream","waitForAllReady","deploymentId","getServerInsertedHTML","getServerInsertedMetadata","validateRootLayout","suffixUnclosed","split","allReady","continueDynamicPrerender","prerenderStream","continueStaticPrerender","continueStaticFallbackPrerender","continueDynamicHTMLResume","createDocumentClosingStream","createRuntimePrefetchTransformStream","sentinel","isPartial","staleTime","enc","search","first","replace","searchLen","currentChunk","found","processChunk","nextChunk","exclusiveUpperBound","Math","min","currentIndex","indexOf","candidateLoop","matchIndex","candidateIndex","candidateValue","overflowBytes","truncatedChunk"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 9299, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/stream-utils/uint8array-helpers.ts"],"sourcesContent":["/**\n * Find the starting index of Uint8Array `b` within Uint8Array `a`.\n */\nexport function indexOfUint8Array(a: Uint8Array, b: Uint8Array) {\n if (b.length === 0) return 0\n if (a.length === 0 || b.length > a.length) return -1\n\n // Use Node's native implementation when available.\n if (typeof Buffer !== 'undefined') {\n const haystack = Buffer.isBuffer(a)\n ? a\n : Buffer.from(a.buffer, a.byteOffset, a.byteLength)\n return haystack.indexOf(b)\n }\n\n // start iterating through `a`\n for (let i = 0; i <= a.length - b.length; i++) {\n let completeMatch = true\n // from index `i`, iterate through `b` and check for mismatch\n for (let j = 0; j < b.length; j++) {\n // if the values do not match, then this isn't a complete match, exit `b` iteration early and iterate to next index of `a`.\n if (a[i + j] !== b[j]) {\n completeMatch = false\n break\n }\n }\n\n if (completeMatch) {\n return i\n }\n }\n\n return -1\n}\n\n/**\n * Check if two Uint8Arrays are strictly equivalent.\n */\nexport function isEquivalentUint8Arrays(a: Uint8Array, b: Uint8Array) {\n if (a.length !== b.length) return false\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false\n }\n\n return true\n}\n\n/**\n * Remove Uint8Array `b` from Uint8Array `a`.\n *\n * If `b` is not in `a`, `a` is returned unchanged.\n *\n * Otherwise, the function returns a new Uint8Array instance with size `a.length - b.length`\n */\nexport function removeFromUint8Array(a: Uint8Array, b: Uint8Array) {\n const tagIndex = indexOfUint8Array(a, b)\n if (tagIndex === 0) return a.subarray(b.length)\n if (tagIndex > -1) {\n const removed = new Uint8Array(a.length - b.length)\n removed.set(a.subarray(0, tagIndex))\n removed.set(a.subarray(tagIndex + b.length), tagIndex)\n return removed\n } else {\n return a\n }\n}\n"],"names":["indexOfUint8Array","a","b","length","Buffer","haystack","isBuffer","from","buffer","byteOffset","byteLength","indexOf","i","completeMatch","j","isEquivalentUint8Arrays","removeFromUint8Array","tagIndex","subarray","removed","Uint8Array","set"],"mappings":"AAAA;;CAEC,GACD;;;;;;;;AAAO,SAASA,kBAAkBC,CAAa,EAAEC,CAAa;IAC5D,IAAIA,EAAEC,MAAM,KAAK,GAAG,OAAO;IAC3B,IAAIF,EAAEE,MAAM,KAAK,KAAKD,EAAEC,MAAM,GAAGF,EAAEE,MAAM,EAAE,OAAO,CAAC;IAEnD,mDAAmD;IACnD,IAAI,OAAOC,WAAW,aAAa;QACjC,MAAMC,WAAWD,OAAOE,QAAQ,CAACL,KAC7BA,IACAG,OAAOG,IAAI,CAACN,EAAEO,MAAM,EAAEP,EAAEQ,UAAU,EAAER,EAAES,UAAU;QACpD,OAAOL,SAASM,OAAO,CAACT;IAC1B;IAEA,8BAA8B;IAC9B,IAAK,IAAIU,IAAI,GAAGA,KAAKX,EAAEE,MAAM,GAAGD,EAAEC,MAAM,EAAES,IAAK;QAC7C,IAAIC,gBAAgB;QACpB,6DAA6D;QAC7D,IAAK,IAAIC,IAAI,GAAGA,IAAIZ,EAAEC,MAAM,EAAEW,IAAK;YACjC,2HAA2H;YAC3H,IAAIb,CAAC,CAACW,IAAIE,EAAE,KAAKZ,CAAC,CAACY,EAAE,EAAE;gBACrBD,gBAAgB;gBAChB;YACF;QACF;QAEA,IAAIA,eAAe;YACjB,OAAOD;QACT;IACF;IAEA,OAAO,CAAC;AACV;AAKO,SAASG,wBAAwBd,CAAa,EAAEC,CAAa;IAClE,IAAID,EAAEE,MAAM,KAAKD,EAAEC,MAAM,EAAE,OAAO;IAElC,IAAK,IAAIS,IAAI,GAAGA,IAAIX,EAAEE,MAAM,EAAES,IAAK;QACjC,IAAIX,CAAC,CAACW,EAAE,KAAKV,CAAC,CAACU,EAAE,EAAE,OAAO;IAC5B;IAEA,OAAO;AACT;AASO,SAASI,qBAAqBf,CAAa,EAAEC,CAAa;IAC/D,MAAMe,WAAWjB,kBAAkBC,GAAGC;IACtC,IAAIe,aAAa,GAAG,OAAOhB,EAAEiB,QAAQ,CAAChB,EAAEC,MAAM;IAC9C,IAAIc,WAAW,CAAC,GAAG;QACjB,MAAME,UAAU,IAAIC,WAAWnB,EAAEE,MAAM,GAAGD,EAAEC,MAAM;QAClDgB,QAAQE,GAAG,CAACpB,EAAEiB,QAAQ,CAAC,GAAGD;QAC1BE,QAAQE,GAAG,CAACpB,EAAEiB,QAAQ,CAACD,WAAWf,EAAEC,MAAM,GAAGc;QAC7C,OAAOE;IACT,OAAO;QACL,OAAOlB;IACT;AACF","ignoreList":[0]}}, + {"offset": {"line": 9357, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/error.ts"],"sourcesContent":["export class PageSignatureError extends Error {\n constructor({ page }: { page: string }) {\n super(`The middleware \"${page}\" accepts an async API directly with the form:\n \n export function middleware(request, event) {\n return NextResponse.redirect('/new-location')\n }\n \n Read more: https://nextjs.org/docs/messages/middleware-new-signature\n `)\n }\n}\n\nexport class RemovedPageError extends Error {\n constructor() {\n super(`The request.page has been deprecated in favour of \\`URLPattern\\`.\n Read more: https://nextjs.org/docs/messages/middleware-request-page\n `)\n }\n}\n\nexport class RemovedUAError extends Error {\n constructor() {\n super(`The request.ua has been removed in favour of \\`userAgent\\` function.\n Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent\n `)\n }\n}\n"],"names":["PageSignatureError","Error","constructor","page","RemovedPageError","RemovedUAError"],"mappings":";;;;;;;;AAAO,MAAMA,2BAA2BC;IACtCC,YAAY,EAAEC,IAAI,EAAoB,CAAE;QACtC,KAAK,CAAC,CAAC,gBAAgB,EAAEA,KAAK;;;;;;;EAOhC,CAAC;IACD;AACF;AAEO,MAAMC,yBAAyBH;IACpCC,aAAc;QACZ,KAAK,CAAC,CAAC;;EAET,CAAC;IACD;AACF;AAEO,MAAMG,uBAAuBJ;IAClCC,aAAc;QACZ,KAAK,CAAC,CAAC;;EAET,CAAC;IACD;AACF","ignoreList":[0]}}, + {"offset": {"line": 9395, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/next-url.ts"],"sourcesContent":["import type { OutgoingHttpHeaders } from 'http'\nimport type { DomainLocale, I18NConfig } from '../config-shared'\nimport type { I18NProvider } from '../lib/i18n-provider'\n\nimport { detectDomainLocale } from '../../shared/lib/i18n/detect-domain-locale'\nimport { formatNextPathnameInfo } from '../../shared/lib/router/utils/format-next-pathname-info'\nimport { getHostname } from '../../shared/lib/get-hostname'\nimport { getNextPathnameInfo } from '../../shared/lib/router/utils/get-next-pathname-info'\n\ninterface Options {\n base?: string | URL\n headers?: OutgoingHttpHeaders\n forceLocale?: boolean\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig | null\n trailingSlash?: boolean\n }\n i18nProvider?: I18NProvider\n}\n\nconst REGEX_LOCALHOST_HOSTNAME =\n /^(?:127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\\[::1\\]|localhost)$/\n\nfunction parseURL(url: string | URL, base?: string | URL) {\n const parsed = new URL(String(url), base && String(base))\n if (REGEX_LOCALHOST_HOSTNAME.test(parsed.hostname)) {\n parsed.hostname = 'localhost'\n }\n return parsed\n}\n\nconst Internal = Symbol('NextURLInternal')\n\nexport class NextURL {\n private [Internal]: {\n basePath: string\n buildId?: string\n flightSearchParameters?: Record\n defaultLocale?: string\n domainLocale?: DomainLocale\n locale?: string\n options: Options\n trailingSlash?: boolean\n url: URL\n }\n\n constructor(input: string | URL, base?: string | URL, opts?: Options)\n constructor(input: string | URL, opts?: Options)\n constructor(\n input: string | URL,\n baseOrOpts?: string | URL | Options,\n opts?: Options\n ) {\n let base: undefined | string | URL\n let options: Options\n\n if (\n (typeof baseOrOpts === 'object' && 'pathname' in baseOrOpts) ||\n typeof baseOrOpts === 'string'\n ) {\n base = baseOrOpts\n options = opts || {}\n } else {\n options = opts || baseOrOpts || {}\n }\n\n this[Internal] = {\n url: parseURL(input, base ?? options.base),\n options: options,\n basePath: '',\n }\n\n this.analyze()\n }\n\n private analyze() {\n const info = getNextPathnameInfo(this[Internal].url.pathname, {\n nextConfig: this[Internal].options.nextConfig,\n parseData: !process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE,\n i18nProvider: this[Internal].options.i18nProvider,\n })\n\n const hostname = getHostname(\n this[Internal].url,\n this[Internal].options.headers\n )\n this[Internal].domainLocale = this[Internal].options.i18nProvider\n ? this[Internal].options.i18nProvider.detectDomainLocale(hostname)\n : detectDomainLocale(\n this[Internal].options.nextConfig?.i18n?.domains,\n hostname\n )\n\n const defaultLocale =\n this[Internal].domainLocale?.defaultLocale ||\n this[Internal].options.nextConfig?.i18n?.defaultLocale\n\n this[Internal].url.pathname = info.pathname\n this[Internal].defaultLocale = defaultLocale\n this[Internal].basePath = info.basePath ?? ''\n this[Internal].buildId = info.buildId\n this[Internal].locale = info.locale ?? defaultLocale\n this[Internal].trailingSlash = info.trailingSlash\n }\n\n private formatPathname() {\n return formatNextPathnameInfo({\n basePath: this[Internal].basePath,\n buildId: this[Internal].buildId,\n defaultLocale: !this[Internal].options.forceLocale\n ? this[Internal].defaultLocale\n : undefined,\n locale: this[Internal].locale,\n pathname: this[Internal].url.pathname,\n trailingSlash: this[Internal].trailingSlash,\n })\n }\n\n private formatSearch() {\n return this[Internal].url.search\n }\n\n public get buildId() {\n return this[Internal].buildId\n }\n\n public set buildId(buildId: string | undefined) {\n this[Internal].buildId = buildId\n }\n\n public get locale() {\n return this[Internal].locale ?? ''\n }\n\n public set locale(locale: string) {\n if (\n !this[Internal].locale ||\n !this[Internal].options.nextConfig?.i18n?.locales.includes(locale)\n ) {\n throw new TypeError(\n `The NextURL configuration includes no locale \"${locale}\"`\n )\n }\n\n this[Internal].locale = locale\n }\n\n get defaultLocale() {\n return this[Internal].defaultLocale\n }\n\n get domainLocale() {\n return this[Internal].domainLocale\n }\n\n get searchParams() {\n return this[Internal].url.searchParams\n }\n\n get host() {\n return this[Internal].url.host\n }\n\n set host(value: string) {\n this[Internal].url.host = value\n }\n\n get hostname() {\n return this[Internal].url.hostname\n }\n\n set hostname(value: string) {\n this[Internal].url.hostname = value\n }\n\n get port() {\n return this[Internal].url.port\n }\n\n set port(value: string) {\n this[Internal].url.port = value\n }\n\n get protocol() {\n return this[Internal].url.protocol\n }\n\n set protocol(value: string) {\n this[Internal].url.protocol = value\n }\n\n get href() {\n const pathname = this.formatPathname()\n const search = this.formatSearch()\n return `${this.protocol}//${this.host}${pathname}${search}${this.hash}`\n }\n\n set href(url: string) {\n this[Internal].url = parseURL(url)\n this.analyze()\n }\n\n get origin() {\n return this[Internal].url.origin\n }\n\n get pathname() {\n return this[Internal].url.pathname\n }\n\n set pathname(value: string) {\n this[Internal].url.pathname = value\n }\n\n get hash() {\n return this[Internal].url.hash\n }\n\n set hash(value: string) {\n this[Internal].url.hash = value\n }\n\n get search() {\n return this[Internal].url.search\n }\n\n set search(value: string) {\n this[Internal].url.search = value\n }\n\n get password() {\n return this[Internal].url.password\n }\n\n set password(value: string) {\n this[Internal].url.password = value\n }\n\n get username() {\n return this[Internal].url.username\n }\n\n set username(value: string) {\n this[Internal].url.username = value\n }\n\n get basePath() {\n return this[Internal].basePath\n }\n\n set basePath(value: string) {\n this[Internal].basePath = value.startsWith('/') ? value : `/${value}`\n }\n\n toString() {\n return this.href\n }\n\n toJSON() {\n return this.href\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n href: this.href,\n origin: this.origin,\n protocol: this.protocol,\n username: this.username,\n password: this.password,\n host: this.host,\n hostname: this.hostname,\n port: this.port,\n pathname: this.pathname,\n search: this.search,\n searchParams: this.searchParams,\n hash: this.hash,\n }\n }\n\n clone() {\n return new NextURL(String(this), this[Internal].options)\n }\n}\n"],"names":["detectDomainLocale","formatNextPathnameInfo","getHostname","getNextPathnameInfo","REGEX_LOCALHOST_HOSTNAME","parseURL","url","base","parsed","URL","String","test","hostname","Internal","Symbol","NextURL","constructor","input","baseOrOpts","opts","options","basePath","analyze","info","pathname","nextConfig","parseData","process","env","__NEXT_NO_MIDDLEWARE_URL_NORMALIZE","i18nProvider","headers","domainLocale","i18n","domains","defaultLocale","buildId","locale","trailingSlash","formatPathname","forceLocale","undefined","formatSearch","search","locales","includes","TypeError","searchParams","host","value","port","protocol","href","hash","origin","password","username","startsWith","toString","toJSON","for","clone"],"mappings":";;;;AAIA,SAASA,kBAAkB,QAAQ,6CAA4C;AAC/E,SAASC,sBAAsB,QAAQ,0DAAyD;AAChG,SAASC,WAAW,QAAQ,gCAA+B;AAC3D,SAASC,mBAAmB,QAAQ,uDAAsD;;;;;AAc1F,MAAMC,2BACJ;AAEF,SAASC,SAASC,GAAiB,EAAEC,IAAmB;IACtD,MAAMC,SAAS,IAAIC,IAAIC,OAAOJ,MAAMC,QAAQG,OAAOH;IACnD,IAAIH,yBAAyBO,IAAI,CAACH,OAAOI,QAAQ,GAAG;QAClDJ,OAAOI,QAAQ,GAAG;IACpB;IACA,OAAOJ;AACT;AAEA,MAAMK,WAAWC,OAAO;AAEjB,MAAMC;IAeXC,YACEC,KAAmB,EACnBC,UAAmC,EACnCC,IAAc,CACd;QACA,IAAIZ;QACJ,IAAIa;QAEJ,IACG,OAAOF,eAAe,YAAY,cAAcA,cACjD,OAAOA,eAAe,UACtB;YACAX,OAAOW;YACPE,UAAUD,QAAQ,CAAC;QACrB,OAAO;YACLC,UAAUD,QAAQD,cAAc,CAAC;QACnC;QAEA,IAAI,CAACL,SAAS,GAAG;YACfP,KAAKD,SAASY,OAAOV,QAAQa,QAAQb,IAAI;YACzCa,SAASA;YACTC,UAAU;QACZ;QAEA,IAAI,CAACC,OAAO;IACd;IAEQA,UAAU;YAcV,wCAAA,mCAKJ,6BACA,yCAAA;QAnBF,MAAMC,WAAOpB,mOAAAA,EAAoB,IAAI,CAACU,SAAS,CAACP,GAAG,CAACkB,QAAQ,EAAE;YAC5DC,YAAY,IAAI,CAACZ,SAAS,CAACO,OAAO,CAACK,UAAU;YAC7CC,WAAW,CAACC,QAAQC,GAAG,CAACC,kCAAkC;YAC1DC,cAAc,IAAI,CAACjB,SAAS,CAACO,OAAO,CAACU,YAAY;QACnD;QAEA,MAAMlB,eAAWV,wLAAAA,EACf,IAAI,CAACW,SAAS,CAACP,GAAG,EAClB,IAAI,CAACO,SAAS,CAACO,OAAO,CAACW,OAAO;QAEhC,IAAI,CAAClB,SAAS,CAACmB,YAAY,GAAG,IAAI,CAACnB,SAAS,CAACO,OAAO,CAACU,YAAY,GAC7D,IAAI,CAACjB,SAAS,CAACO,OAAO,CAACU,YAAY,CAAC9B,kBAAkB,CAACY,gBACvDZ,kNAAAA,EAAAA,CACE,oCAAA,IAAI,CAACa,SAAS,CAACO,OAAO,CAACK,UAAU,KAAA,OAAA,KAAA,IAAA,CAAjC,yCAAA,kCAAmCQ,IAAI,KAAA,OAAA,KAAA,IAAvC,uCAAyCC,OAAO,EAChDtB;QAGN,MAAMuB,gBACJ,CAAA,CAAA,8BAAA,IAAI,CAACtB,SAAS,CAACmB,YAAY,KAAA,OAAA,KAAA,IAA3B,4BAA6BG,aAAa,KAAA,CAAA,CAC1C,qCAAA,IAAI,CAACtB,SAAS,CAACO,OAAO,CAACK,UAAU,KAAA,OAAA,KAAA,IAAA,CAAjC,0CAAA,mCAAmCQ,IAAI,KAAA,OAAA,KAAA,IAAvC,wCAAyCE,aAAa;QAExD,IAAI,CAACtB,SAAS,CAACP,GAAG,CAACkB,QAAQ,GAAGD,KAAKC,QAAQ;QAC3C,IAAI,CAACX,SAAS,CAACsB,aAAa,GAAGA;QAC/B,IAAI,CAACtB,SAAS,CAACQ,QAAQ,GAAGE,KAAKF,QAAQ,IAAI;QAC3C,IAAI,CAACR,SAAS,CAACuB,OAAO,GAAGb,KAAKa,OAAO;QACrC,IAAI,CAACvB,SAAS,CAACwB,MAAM,GAAGd,KAAKc,MAAM,IAAIF;QACvC,IAAI,CAACtB,SAAS,CAACyB,aAAa,GAAGf,KAAKe,aAAa;IACnD;IAEQC,iBAAiB;QACvB,WAAOtC,yOAAAA,EAAuB;YAC5BoB,UAAU,IAAI,CAACR,SAAS,CAACQ,QAAQ;YACjCe,SAAS,IAAI,CAACvB,SAAS,CAACuB,OAAO;YAC/BD,eAAe,CAAC,IAAI,CAACtB,SAAS,CAACO,OAAO,CAACoB,WAAW,GAC9C,IAAI,CAAC3B,SAAS,CAACsB,aAAa,GAC5BM;YACJJ,QAAQ,IAAI,CAACxB,SAAS,CAACwB,MAAM;YAC7Bb,UAAU,IAAI,CAACX,SAAS,CAACP,GAAG,CAACkB,QAAQ;YACrCc,eAAe,IAAI,CAACzB,SAAS,CAACyB,aAAa;QAC7C;IACF;IAEQI,eAAe;QACrB,OAAO,IAAI,CAAC7B,SAAS,CAACP,GAAG,CAACqC,MAAM;IAClC;IAEA,IAAWP,UAAU;QACnB,OAAO,IAAI,CAACvB,SAAS,CAACuB,OAAO;IAC/B;IAEA,IAAWA,QAAQA,OAA2B,EAAE;QAC9C,IAAI,CAACvB,SAAS,CAACuB,OAAO,GAAGA;IAC3B;IAEA,IAAWC,SAAS;QAClB,OAAO,IAAI,CAACxB,SAAS,CAACwB,MAAM,IAAI;IAClC;IAEA,IAAWA,OAAOA,MAAc,EAAE;YAG7B,wCAAA;QAFH,IACE,CAAC,IAAI,CAACxB,SAAS,CAACwB,MAAM,IACtB,CAAA,CAAA,CAAC,oCAAA,IAAI,CAACxB,SAAS,CAACO,OAAO,CAACK,UAAU,KAAA,OAAA,KAAA,IAAA,CAAjC,yCAAA,kCAAmCQ,IAAI,KAAA,OAAA,KAAA,IAAvC,uCAAyCW,OAAO,CAACC,QAAQ,CAACR,OAAAA,GAC3D;YACA,MAAM,IAAIS,UACR,CAAC,8CAA8C,EAAET,OAAO,CAAC,CAAC;QAE9D;QAEA,IAAI,CAACxB,SAAS,CAACwB,MAAM,GAAGA;IAC1B;IAEA,IAAIF,gBAAgB;QAClB,OAAO,IAAI,CAACtB,SAAS,CAACsB,aAAa;IACrC;IAEA,IAAIH,eAAe;QACjB,OAAO,IAAI,CAACnB,SAAS,CAACmB,YAAY;IACpC;IAEA,IAAIe,eAAe;QACjB,OAAO,IAAI,CAAClC,SAAS,CAACP,GAAG,CAACyC,YAAY;IACxC;IAEA,IAAIC,OAAO;QACT,OAAO,IAAI,CAACnC,SAAS,CAACP,GAAG,CAAC0C,IAAI;IAChC;IAEA,IAAIA,KAAKC,KAAa,EAAE;QACtB,IAAI,CAACpC,SAAS,CAACP,GAAG,CAAC0C,IAAI,GAAGC;IAC5B;IAEA,IAAIrC,WAAW;QACb,OAAO,IAAI,CAACC,SAAS,CAACP,GAAG,CAACM,QAAQ;IACpC;IAEA,IAAIA,SAASqC,KAAa,EAAE;QAC1B,IAAI,CAACpC,SAAS,CAACP,GAAG,CAACM,QAAQ,GAAGqC;IAChC;IAEA,IAAIC,OAAO;QACT,OAAO,IAAI,CAACrC,SAAS,CAACP,GAAG,CAAC4C,IAAI;IAChC;IAEA,IAAIA,KAAKD,KAAa,EAAE;QACtB,IAAI,CAACpC,SAAS,CAACP,GAAG,CAAC4C,IAAI,GAAGD;IAC5B;IAEA,IAAIE,WAAW;QACb,OAAO,IAAI,CAACtC,SAAS,CAACP,GAAG,CAAC6C,QAAQ;IACpC;IAEA,IAAIA,SAASF,KAAa,EAAE;QAC1B,IAAI,CAACpC,SAAS,CAACP,GAAG,CAAC6C,QAAQ,GAAGF;IAChC;IAEA,IAAIG,OAAO;QACT,MAAM5B,WAAW,IAAI,CAACe,cAAc;QACpC,MAAMI,SAAS,IAAI,CAACD,YAAY;QAChC,OAAO,GAAG,IAAI,CAACS,QAAQ,CAAC,EAAE,EAAE,IAAI,CAACH,IAAI,GAAGxB,WAAWmB,SAAS,IAAI,CAACU,IAAI,EAAE;IACzE;IAEA,IAAID,KAAK9C,GAAW,EAAE;QACpB,IAAI,CAACO,SAAS,CAACP,GAAG,GAAGD,SAASC;QAC9B,IAAI,CAACgB,OAAO;IACd;IAEA,IAAIgC,SAAS;QACX,OAAO,IAAI,CAACzC,SAAS,CAACP,GAAG,CAACgD,MAAM;IAClC;IAEA,IAAI9B,WAAW;QACb,OAAO,IAAI,CAACX,SAAS,CAACP,GAAG,CAACkB,QAAQ;IACpC;IAEA,IAAIA,SAASyB,KAAa,EAAE;QAC1B,IAAI,CAACpC,SAAS,CAACP,GAAG,CAACkB,QAAQ,GAAGyB;IAChC;IAEA,IAAII,OAAO;QACT,OAAO,IAAI,CAACxC,SAAS,CAACP,GAAG,CAAC+C,IAAI;IAChC;IAEA,IAAIA,KAAKJ,KAAa,EAAE;QACtB,IAAI,CAACpC,SAAS,CAACP,GAAG,CAAC+C,IAAI,GAAGJ;IAC5B;IAEA,IAAIN,SAAS;QACX,OAAO,IAAI,CAAC9B,SAAS,CAACP,GAAG,CAACqC,MAAM;IAClC;IAEA,IAAIA,OAAOM,KAAa,EAAE;QACxB,IAAI,CAACpC,SAAS,CAACP,GAAG,CAACqC,MAAM,GAAGM;IAC9B;IAEA,IAAIM,WAAW;QACb,OAAO,IAAI,CAAC1C,SAAS,CAACP,GAAG,CAACiD,QAAQ;IACpC;IAEA,IAAIA,SAASN,KAAa,EAAE;QAC1B,IAAI,CAACpC,SAAS,CAACP,GAAG,CAACiD,QAAQ,GAAGN;IAChC;IAEA,IAAIO,WAAW;QACb,OAAO,IAAI,CAAC3C,SAAS,CAACP,GAAG,CAACkD,QAAQ;IACpC;IAEA,IAAIA,SAASP,KAAa,EAAE;QAC1B,IAAI,CAACpC,SAAS,CAACP,GAAG,CAACkD,QAAQ,GAAGP;IAChC;IAEA,IAAI5B,WAAW;QACb,OAAO,IAAI,CAACR,SAAS,CAACQ,QAAQ;IAChC;IAEA,IAAIA,SAAS4B,KAAa,EAAE;QAC1B,IAAI,CAACpC,SAAS,CAACQ,QAAQ,GAAG4B,MAAMQ,UAAU,CAAC,OAAOR,QAAQ,CAAC,CAAC,EAAEA,OAAO;IACvE;IAEAS,WAAW;QACT,OAAO,IAAI,CAACN,IAAI;IAClB;IAEAO,SAAS;QACP,OAAO,IAAI,CAACP,IAAI;IAClB;IAEA,CAACtC,OAAO8C,GAAG,CAAC,+BAA+B,GAAG;QAC5C,OAAO;YACLR,MAAM,IAAI,CAACA,IAAI;YACfE,QAAQ,IAAI,CAACA,MAAM;YACnBH,UAAU,IAAI,CAACA,QAAQ;YACvBK,UAAU,IAAI,CAACA,QAAQ;YACvBD,UAAU,IAAI,CAACA,QAAQ;YACvBP,MAAM,IAAI,CAACA,IAAI;YACfpC,UAAU,IAAI,CAACA,QAAQ;YACvBsC,MAAM,IAAI,CAACA,IAAI;YACf1B,UAAU,IAAI,CAACA,QAAQ;YACvBmB,QAAQ,IAAI,CAACA,MAAM;YACnBI,cAAc,IAAI,CAACA,YAAY;YAC/BM,MAAM,IAAI,CAACA,IAAI;QACjB;IACF;IAEAQ,QAAQ;QACN,OAAO,IAAI9C,QAAQL,OAAO,IAAI,GAAG,IAAI,CAACG,SAAS,CAACO,OAAO;IACzD;AACF","ignoreList":[0]}}, + {"offset": {"line": 9590, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/adapters/headers.ts"],"sourcesContent":["import type { IncomingHttpHeaders } from 'http'\n\nimport { ReflectAdapter } from './reflect'\n\n/**\n * @internal\n */\nexport class ReadonlyHeadersError extends Error {\n constructor() {\n super(\n 'Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers'\n )\n }\n\n public static callable() {\n throw new ReadonlyHeadersError()\n }\n}\n\nexport type ReadonlyHeaders = Headers & {\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n append(...args: any[]): void\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n set(...args: any[]): void\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n delete(...args: any[]): void\n}\n\n/**\n * The read methods that a sealed view provides itself instead of forwarding to\n * the underlying `Headers`. Deriving the type from `Headers` keeps the\n * implementations in step with the platform signatures.\n */\ntype SealedHeaderMethods = Pick<\n Headers,\n | 'get'\n | 'has'\n | 'getSetCookie'\n | 'keys'\n | 'values'\n | 'entries'\n | 'forEach'\n | typeof Symbol.iterator\n>\n\n/**\n * Builds the read methods for a sealed view that exposes all of `target`.\n */\nfunction createPassThroughMethods(\n target: Headers,\n sealed: ReadonlyHeaders\n): SealedHeaderMethods {\n return {\n get: target.get.bind(target),\n has: target.has.bind(target),\n getSetCookie: target.getSetCookie.bind(target),\n keys: target.keys.bind(target),\n values: target.values.bind(target),\n entries: target.entries.bind(target),\n [Symbol.iterator]: target[Symbol.iterator].bind(target),\n // The native method passes the unsealed target as the callback's `parent`\n // argument. That is a mutable handle on the underlying headers. Pass the\n // sealed view instead.\n forEach(callbackfn, thisArg) {\n for (const [name, value] of target.entries()) {\n callbackfn.call(thisArg, value, name, sealed)\n }\n },\n }\n}\n\n/**\n * Builds the read methods for a sealed view that omits the header names matched\n * by `isHidden`.\n */\nfunction createHidingMethods(\n target: Headers,\n sealed: ReadonlyHeaders,\n isHidden: (name: string) => boolean\n): SealedHeaderMethods {\n function* entries(): HeadersIterator<[string, string]> {\n for (const entry of target.entries()) {\n if (!isHidden(entry[0])) {\n yield entry\n }\n }\n }\n\n return {\n entries,\n [Symbol.iterator]: entries,\n get: (name) => (isHidden(name) ? null : target.get(name)),\n has: (name) => (isHidden(name) ? false : target.has(name)),\n getSetCookie: () => (isHidden('set-cookie') ? [] : target.getSetCookie()),\n *keys(): HeadersIterator {\n for (const name of target.keys()) {\n if (!isHidden(name)) {\n yield name\n }\n }\n },\n *values(): HeadersIterator {\n for (const [, value] of entries()) {\n yield value\n }\n },\n // The native method passes the unsealed target as the callback's `parent`\n // argument. That is a mutable handle on the underlying headers. Pass the\n // sealed view instead.\n forEach(callbackfn, thisArg) {\n for (const [name, value] of entries()) {\n callbackfn.call(thisArg, value, name, sealed)\n }\n },\n }\n}\n\nexport class HeadersAdapter extends Headers {\n private readonly headers: IncomingHttpHeaders\n\n constructor(headers: IncomingHttpHeaders) {\n // We've already overridden the methods that would be called, so we're just\n // calling the super constructor to ensure that the instanceof check works.\n super()\n\n this.headers = new Proxy(headers, {\n get(target, prop, receiver) {\n // Because this is just an object, we expect that all \"get\" operations\n // are for properties. If it's a \"get\" for a symbol, we'll just return\n // the symbol.\n if (typeof prop === 'symbol') {\n return ReflectAdapter.get(target, prop, receiver)\n }\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return undefined.\n if (typeof original === 'undefined') return\n\n // If the original casing exists, return the value.\n return ReflectAdapter.get(target, original, receiver)\n },\n set(target, prop, value, receiver) {\n if (typeof prop === 'symbol') {\n return ReflectAdapter.set(target, prop, value, receiver)\n }\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, use the prop as the key.\n return ReflectAdapter.set(target, original ?? prop, value, receiver)\n },\n has(target, prop) {\n if (typeof prop === 'symbol') return ReflectAdapter.has(target, prop)\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return false.\n if (typeof original === 'undefined') return false\n\n // If the original casing exists, return true.\n return ReflectAdapter.has(target, original)\n },\n deleteProperty(target, prop) {\n if (typeof prop === 'symbol')\n return ReflectAdapter.deleteProperty(target, prop)\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return true.\n if (typeof original === 'undefined') return true\n\n // If the original casing exists, delete the property.\n return ReflectAdapter.deleteProperty(target, original)\n },\n })\n }\n\n /**\n * Seals a Headers instance to prevent modification by throwing an error when\n * any mutating method is called.\n *\n * The sealed view stays live. Later writes to `headers` remain visible\n * through it.\n *\n * `hidden` omits the given header names from every read operation (`get`,\n * `has`, `getSetCookie`, `forEach`, and iteration). The names must be\n * lowercase. The underlying headers are neither copied nor mutated, so hidden\n * headers remain available to the framework.\n */\n public static seal(\n headers: Headers,\n hidden?: ReadonlySet\n ): ReadonlyHeaders {\n const isHidden =\n hidden && hidden.size > 0\n ? (name: string): boolean => hidden.has(name.toLowerCase())\n : null\n\n // The methods are built once per sealed view and reused, so repeated access\n // returns the same function instead of a fresh closure. They are assigned\n // after the proxy exists because `forEach` hands the proxy to its callback.\n // Creating the proxy runs no trap, so nothing can read them before then.\n let methods: SealedHeaderMethods\n\n const sealed: ReadonlyHeaders = new Proxy(headers, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'append':\n case 'delete':\n case 'set':\n return ReadonlyHeadersError.callable\n case Symbol.iterator:\n return methods[Symbol.iterator]\n case 'get':\n case 'has':\n case 'getSetCookie':\n case 'keys':\n case 'values':\n case 'entries':\n case 'forEach':\n return methods[prop]\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n\n methods = isHidden\n ? createHidingMethods(headers, sealed, isHidden)\n : createPassThroughMethods(headers, sealed)\n\n return sealed\n }\n\n /**\n * @param headers\n * @returns A fresh object identity backed by the original value\n */\n public static fresh(headers: ReadonlyHeaders): ReadonlyHeaders {\n return new Proxy(headers, {\n get(target, prop, receiver) {\n return ReflectAdapter.get(target, prop, receiver)\n },\n })\n }\n\n /**\n * Merges a header value into a string. This stores multiple values as an\n * array, so we need to merge them into a string.\n *\n * @param value a header value\n * @returns a merged header value (a string)\n */\n private merge(value: string | string[]): string {\n if (Array.isArray(value)) return value.join(', ')\n\n return value\n }\n\n /**\n * Creates a Headers instance from a plain object or a Headers instance.\n *\n * @param headers a plain object or a Headers instance\n * @returns a headers instance\n */\n public static from(headers: IncomingHttpHeaders | Headers): Headers {\n if (headers instanceof Headers) return headers\n\n return new HeadersAdapter(headers)\n }\n\n public append(name: string, value: string): void {\n const existing = this.headers[name]\n if (typeof existing === 'string') {\n this.headers[name] = [existing, value]\n } else if (Array.isArray(existing)) {\n existing.push(value)\n } else {\n this.headers[name] = value\n }\n }\n\n public delete(name: string): void {\n delete this.headers[name]\n }\n\n public get(name: string): string | null {\n const value = this.headers[name]\n if (typeof value !== 'undefined') return this.merge(value)\n\n return null\n }\n\n public has(name: string): boolean {\n return typeof this.headers[name] !== 'undefined'\n }\n\n public set(name: string, value: string): void {\n this.headers[name] = value\n }\n\n public forEach(\n callbackfn: (value: string, name: string, parent: Headers) => void,\n thisArg?: any\n ): void {\n for (const [name, value] of this.entries()) {\n callbackfn.call(thisArg, value, name, this)\n }\n }\n\n public *entries(): HeadersIterator<[string, string]> {\n for (const key of Object.keys(this.headers)) {\n const name = key.toLowerCase()\n // We assert here that this is a string because we got it from the\n // Object.keys() call above.\n const value = this.get(name) as string\n\n yield [name, value] as [string, string]\n }\n }\n\n public *keys(): HeadersIterator {\n for (const key of Object.keys(this.headers)) {\n const name = key.toLowerCase()\n yield name\n }\n }\n\n public *values(): HeadersIterator {\n for (const key of Object.keys(this.headers)) {\n // We assert here that this is a string because we got it from the\n // Object.keys() call above.\n const value = this.get(key) as string\n\n yield value\n }\n }\n\n public [Symbol.iterator](): HeadersIterator<[string, string]> {\n return this.entries()\n }\n}\n"],"names":["ReflectAdapter","ReadonlyHeadersError","Error","constructor","callable","createPassThroughMethods","target","sealed","get","bind","has","getSetCookie","keys","values","entries","Symbol","iterator","forEach","callbackfn","thisArg","name","value","call","createHidingMethods","isHidden","entry","HeadersAdapter","Headers","headers","Proxy","prop","receiver","lowercased","toLowerCase","original","Object","find","o","set","deleteProperty","seal","hidden","size","methods","fresh","merge","Array","isArray","join","from","append","existing","push","delete","key"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 9865, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/adapters/next-request.ts"],"sourcesContent":["import type { BaseNextRequest } from '../../../base-http'\nimport type { NodeNextRequest } from '../../../base-http/node'\nimport type { WebNextRequest } from '../../../base-http/web'\nimport type { Writable } from 'node:stream'\n\nimport { getRequestMeta } from '../../../request-meta'\nimport { fromNodeOutgoingHttpHeaders } from '../../utils'\nimport { NextRequest } from '../request'\nimport { isNodeNextRequest, isWebNextRequest } from '../../../base-http/helpers'\n\nexport const ResponseAbortedName = 'ResponseAborted'\nexport class ResponseAborted extends Error {\n public readonly name = ResponseAbortedName\n}\n\n/**\n * Creates an AbortController tied to the closing of a ServerResponse (or other\n * appropriate Writable).\n *\n * If the `close` event is fired before the `finish` event, then we'll send the\n * `abort` signal.\n */\nexport function createAbortController(response: Writable): AbortController {\n const controller = new AbortController()\n\n // If `finish` fires first, then `res.end()` has been called and the close is\n // just us finishing the stream on our side. If `close` fires first, then we\n // know the client disconnected before we finished.\n response.once('close', () => {\n if (response.writableFinished) return\n\n controller.abort(new ResponseAborted())\n })\n\n return controller\n}\n\n/**\n * Creates an AbortSignal tied to the closing of a ServerResponse (or other\n * appropriate Writable).\n *\n * This cannot be done with the request (IncomingMessage or Readable) because\n * the `abort` event will not fire if to data has been fully read (because that\n * will \"close\" the readable stream and nothing fires after that).\n */\nexport function signalFromNodeResponse(response: Writable): AbortSignal {\n const { errored, destroyed } = response\n if (errored || destroyed) {\n return AbortSignal.abort(errored ?? new ResponseAborted())\n }\n\n const { signal } = createAbortController(response)\n return signal\n}\n\nexport class NextRequestAdapter {\n public static fromBaseNextRequest(\n request: BaseNextRequest,\n signal: AbortSignal\n ): NextRequest {\n if (\n // The type check here ensures that `req` is correctly typed, and the\n // environment variable check provides dead code elimination.\n process.env.NEXT_RUNTIME === 'edge' &&\n isWebNextRequest(request)\n ) {\n return NextRequestAdapter.fromWebNextRequest(request)\n } else if (\n // The type check here ensures that `req` is correctly typed, and the\n // environment variable check provides dead code elimination.\n process.env.NEXT_RUNTIME !== 'edge' &&\n isNodeNextRequest(request)\n ) {\n return NextRequestAdapter.fromNodeNextRequest(request, signal)\n } else {\n throw new Error('Invariant: Unsupported NextRequest type')\n }\n }\n\n public static fromNodeNextRequest(\n request: NodeNextRequest,\n signal: AbortSignal\n ): NextRequest {\n // HEAD and GET requests can not have a body.\n let body: BodyInit | null = null\n if (request.method !== 'GET' && request.method !== 'HEAD' && request.body) {\n // @ts-expect-error - this is handled by undici, when streams/web land use it instead\n body = request.body\n }\n\n let url: URL\n if (request.url.startsWith('http')) {\n url = new URL(request.url)\n } else {\n // Grab the full URL from the request metadata.\n const base = getRequestMeta(request, 'initURL')\n if (!base || !base.startsWith('http')) {\n // Because the URL construction relies on the fact that the URL provided\n // is absolute, we need to provide a base URL. We can't use the request\n // URL because it's relative, so we use a dummy URL instead.\n url = new URL(request.url, 'http://n')\n } else {\n url = new URL(request.url, base)\n }\n }\n\n return new NextRequest(url, {\n method: request.method,\n headers: fromNodeOutgoingHttpHeaders(request.headers),\n duplex: 'half',\n signal,\n // geo\n // ip\n // nextConfig\n\n // body can not be passed if request was aborted\n // or we get a Request body was disturbed error\n ...(signal.aborted\n ? {}\n : {\n body,\n }),\n })\n }\n\n public static fromWebNextRequest(request: WebNextRequest): NextRequest {\n // HEAD and GET requests can not have a body.\n let body: ReadableStream | null = null\n if (request.method !== 'GET' && request.method !== 'HEAD') {\n body = request.body\n }\n\n return new NextRequest(request.url, {\n method: request.method,\n headers: fromNodeOutgoingHttpHeaders(request.headers),\n duplex: 'half',\n signal: request.request.signal,\n // geo\n // ip\n // nextConfig\n\n // body can not be passed if request was aborted\n // or we get a Request body was disturbed error\n ...(request.request.signal.aborted\n ? {}\n : {\n body,\n }),\n })\n }\n}\n"],"names":["getRequestMeta","fromNodeOutgoingHttpHeaders","NextRequest","isNodeNextRequest","isWebNextRequest","ResponseAbortedName","ResponseAborted","Error","name","createAbortController","response","controller","AbortController","once","writableFinished","abort","signalFromNodeResponse","errored","destroyed","AbortSignal","signal","NextRequestAdapter","fromBaseNextRequest","request","process","env","NEXT_RUNTIME","fromWebNextRequest","fromNodeNextRequest","body","method","url","startsWith","URL","base","headers","duplex","aborted"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 9985, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/adapters/reflect.ts"],"sourcesContent":["export class ReflectAdapter {\n static get(\n target: T,\n prop: string | symbol,\n receiver: unknown\n ): any {\n const value = Reflect.get(target, prop, receiver)\n if (typeof value === 'function') {\n return value.bind(target)\n }\n\n return value\n }\n\n static set(\n target: T,\n prop: string | symbol,\n value: any,\n receiver: any\n ): boolean {\n return Reflect.set(target, prop, value, receiver)\n }\n\n static has(target: T, prop: string | symbol): boolean {\n return Reflect.has(target, prop)\n }\n\n static deleteProperty(\n target: T,\n prop: string | symbol\n ): boolean {\n return Reflect.deleteProperty(target, prop)\n }\n}\n"],"names":["ReflectAdapter","get","target","prop","receiver","value","Reflect","bind","set","has","deleteProperty"],"mappings":";;;;AAAO,MAAMA;IACX,OAAOC,IACLC,MAAS,EACTC,IAAqB,EACrBC,QAAiB,EACZ;QACL,MAAMC,QAAQC,QAAQL,GAAG,CAACC,QAAQC,MAAMC;QACxC,IAAI,OAAOC,UAAU,YAAY;YAC/B,OAAOA,MAAME,IAAI,CAACL;QACpB;QAEA,OAAOG;IACT;IAEA,OAAOG,IACLN,MAAS,EACTC,IAAqB,EACrBE,KAAU,EACVD,QAAa,EACJ;QACT,OAAOE,QAAQE,GAAG,CAACN,QAAQC,MAAME,OAAOD;IAC1C;IAEA,OAAOK,IAAsBP,MAAS,EAAEC,IAAqB,EAAW;QACtE,OAAOG,QAAQG,GAAG,CAACP,QAAQC;IAC7B;IAEA,OAAOO,eACLR,MAAS,EACTC,IAAqB,EACZ;QACT,OAAOG,QAAQI,cAAc,CAACR,QAAQC;IACxC;AACF","ignoreList":[0]}}, + {"offset": {"line": 10011, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/cookies.ts"],"sourcesContent":["export {\n RequestCookies,\n ResponseCookies,\n stringifyCookie,\n} from 'next/dist/compiled/@edge-runtime/cookies'\n"],"names":["RequestCookies","ResponseCookies","stringifyCookie"],"mappings":";AAAA,SACEA,cAAc,EACdC,eAAe,EACfC,eAAe,QACV,2CAA0C","ignoreList":[0]}}, + {"offset": {"line": 10018, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/spec-extension/request.ts"],"sourcesContent":["import type { I18NConfig } from '../../config-shared'\nimport { NextURL } from '../next-url'\nimport { toNodeOutgoingHttpHeaders, validateURL } from '../utils'\nimport { RemovedUAError, RemovedPageError } from '../error'\nimport { RequestCookies } from './cookies'\n\nexport const INTERNALS = Symbol('internal request')\n\n/**\n * This class extends the [Web `Request` API](https://developer.mozilla.org/docs/Web/API/Request) with additional convenience methods.\n *\n * Read more: [Next.js Docs: `NextRequest`](https://nextjs.org/docs/app/api-reference/functions/next-request)\n */\nexport class NextRequest extends Request {\n /** @internal */\n [INTERNALS]: {\n cookies: RequestCookies\n url: string\n nextUrl: NextURL\n }\n\n constructor(input: URL | RequestInfo, init: RequestInit = {}) {\n const url =\n typeof input !== 'string' && 'url' in input ? input.url : String(input)\n\n validateURL(url)\n\n // node Request instance requires duplex option when a body\n // is present or it errors, we don't handle this for\n // Request being passed in since it would have already\n // errored if this wasn't configured\n if (process.env.NEXT_RUNTIME !== 'edge') {\n if (init.body && init.duplex !== 'half') {\n init.duplex = 'half'\n }\n }\n\n if (input instanceof Request) super(input, init)\n else super(url, init)\n\n const nextUrl = new NextURL(url, {\n headers: toNodeOutgoingHttpHeaders(this.headers),\n nextConfig: init.nextConfig,\n })\n this[INTERNALS] = {\n cookies: new RequestCookies(this.headers),\n nextUrl,\n url: process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE\n ? url\n : nextUrl.toString(),\n }\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n cookies: this.cookies,\n nextUrl: this.nextUrl,\n url: this.url,\n // rest of props come from Request\n bodyUsed: this.bodyUsed,\n cache: this.cache,\n credentials: this.credentials,\n destination: this.destination,\n headers: Object.fromEntries(this.headers),\n integrity: this.integrity,\n keepalive: this.keepalive,\n method: this.method,\n mode: this.mode,\n redirect: this.redirect,\n referrer: this.referrer,\n referrerPolicy: this.referrerPolicy,\n signal: this.signal,\n }\n }\n\n public get cookies() {\n return this[INTERNALS].cookies\n }\n\n public get nextUrl() {\n return this[INTERNALS].nextUrl\n }\n\n /**\n * @deprecated\n * `page` has been deprecated in favour of `URLPattern`.\n * Read more: https://nextjs.org/docs/messages/middleware-request-page\n */\n public get page() {\n throw new RemovedPageError()\n }\n\n /**\n * @deprecated\n * `ua` has been removed in favour of \\`userAgent\\` function.\n * Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent\n */\n public get ua() {\n throw new RemovedUAError()\n }\n\n public get url() {\n return this[INTERNALS].url\n }\n}\n\nexport interface RequestInit extends globalThis.RequestInit {\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig | null\n trailingSlash?: boolean\n }\n signal?: AbortSignal\n // see https://github.com/whatwg/fetch/pull/1457\n duplex?: 'half'\n}\n"],"names":["NextURL","toNodeOutgoingHttpHeaders","validateURL","RemovedUAError","RemovedPageError","RequestCookies","INTERNALS","Symbol","NextRequest","Request","constructor","input","init","url","String","process","env","NEXT_RUNTIME","body","duplex","nextUrl","headers","nextConfig","cookies","__NEXT_NO_MIDDLEWARE_URL_NORMALIZE","toString","for","bodyUsed","cache","credentials","destination","Object","fromEntries","integrity","keepalive","method","mode","redirect","referrer","referrerPolicy","signal","page","ua"],"mappings":";;;;;;AACA,SAASA,OAAO,QAAQ,cAAa;AACrC,SAASC,yBAAyB,EAAEC,WAAW,QAAQ,WAAU;AACjE,SAASC,cAAc,EAAEC,gBAAgB,QAAQ,WAAU;;AAC3D,SAASC,cAAc,QAAQ,YAAW;;;;;AAEnC,MAAMC,YAAYC,OAAO,oBAAmB;AAO5C,MAAMC,oBAAoBC;IAQ/BC,YAAYC,KAAwB,EAAEC,OAAoB,CAAC,CAAC,CAAE;QAC5D,MAAMC,MACJ,OAAOF,UAAU,YAAY,SAASA,QAAQA,MAAME,GAAG,GAAGC,OAAOH;YAEnET,8KAAAA,EAAYW;QAEZ,2DAA2D;QAC3D,oDAAoD;QACpD,sDAAsD;QACtD,oCAAoC;QACpC,IAAIE,QAAQC,GAAG,CAACC,YAAY,KAAK,OAAQ;YACvC,IAAIL,KAAKM,IAAI,IAAIN,KAAKO,MAAM,KAAK,QAAQ;gBACvCP,KAAKO,MAAM,GAAG;YAChB;QACF;QAEA,IAAIR,iBAAiBF,SAAS,KAAK,CAACE,OAAOC;aACtC,KAAK,CAACC,KAAKD;QAEhB,MAAMQ,UAAU,IAAIpB,gLAAAA,CAAQa,KAAK;YAC/BQ,aAASpB,4LAAAA,EAA0B,IAAI,CAACoB,OAAO;YAC/CC,YAAYV,KAAKU,UAAU;QAC7B;QACA,IAAI,CAAChB,UAAU,GAAG;YAChBiB,SAAS,IAAIlB,qMAAAA,CAAe,IAAI,CAACgB,OAAO;YACxCD;YACAP,KAAKE,QAAQC,GAAG,CAACQ,0BACbX,QAD+C,kBAE/CO,QAAQK,QAAQ;QACtB;IACF;IAEA,CAAClB,OAAOmB,GAAG,CAAC,+BAA+B,GAAG;QAC5C,OAAO;YACLH,SAAS,IAAI,CAACA,OAAO;YACrBH,SAAS,IAAI,CAACA,OAAO;YACrBP,KAAK,IAAI,CAACA,GAAG;YACb,kCAAkC;YAClCc,UAAU,IAAI,CAACA,QAAQ;YACvBC,OAAO,IAAI,CAACA,KAAK;YACjBC,aAAa,IAAI,CAACA,WAAW;YAC7BC,aAAa,IAAI,CAACA,WAAW;YAC7BT,SAASU,OAAOC,WAAW,CAAC,IAAI,CAACX,OAAO;YACxCY,WAAW,IAAI,CAACA,SAAS;YACzBC,WAAW,IAAI,CAACA,SAAS;YACzBC,QAAQ,IAAI,CAACA,MAAM;YACnBC,MAAM,IAAI,CAACA,IAAI;YACfC,UAAU,IAAI,CAACA,QAAQ;YACvBC,UAAU,IAAI,CAACA,QAAQ;YACvBC,gBAAgB,IAAI,CAACA,cAAc;YACnCC,QAAQ,IAAI,CAACA,MAAM;QACrB;IACF;IAEA,IAAWjB,UAAU;QACnB,OAAO,IAAI,CAACjB,UAAU,CAACiB,OAAO;IAChC;IAEA,IAAWH,UAAU;QACnB,OAAO,IAAI,CAACd,UAAU,CAACc,OAAO;IAChC;IAEA;;;;GAIC,GACD,IAAWqB,OAAO;QAChB,MAAM,IAAIrC,mLAAAA;IACZ;IAEA;;;;GAIC,GACD,IAAWsC,KAAK;QACd,MAAM,IAAIvC,iLAAAA;IACZ;IAEA,IAAWU,MAAM;QACf,OAAO,IAAI,CAACP,UAAU,CAACO,GAAG;IAC5B;AACF","ignoreList":[0]}}, + {"offset": {"line": 10108, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/web/utils.ts"],"sourcesContent":["import type { OutgoingHttpHeaders } from 'http'\nimport {\n NEXT_INTERCEPTION_MARKER_PREFIX,\n NEXT_QUERY_PARAM_PREFIX,\n} from '../../lib/constants'\n\n/**\n * Converts a Node.js IncomingHttpHeaders object to a Headers object. Any\n * headers with multiple values will be joined with a comma and space. Any\n * headers that have an undefined value will be ignored and others will be\n * coerced to strings.\n *\n * @param nodeHeaders the headers object to convert\n * @returns the converted headers object\n */\nexport function fromNodeOutgoingHttpHeaders(\n nodeHeaders: OutgoingHttpHeaders\n): Headers {\n const headers = new Headers()\n for (let [key, value] of Object.entries(nodeHeaders)) {\n const values = Array.isArray(value) ? value : [value]\n for (let v of values) {\n if (typeof v === 'undefined') continue\n if (typeof v === 'number') {\n v = v.toString()\n }\n\n headers.append(key, v)\n }\n }\n return headers\n}\n\n/*\n Set-Cookie header field-values are sometimes comma joined in one string. This splits them without choking on commas\n that are within a single set-cookie field-value, such as in the Expires portion.\n This is uncommon, but explicitly allowed - see https://tools.ietf.org/html/rfc2616#section-4.2\n Node.js does this for every header *except* set-cookie - see https://github.com/nodejs/node/blob/d5e363b77ebaf1caf67cd7528224b651c86815c1/lib/_http_incoming.js#L128\n React Native's fetch does this for *every* header, including set-cookie.\n \n Based on: https://github.com/google/j2objc/commit/16820fdbc8f76ca0c33472810ce0cb03d20efe25\n Credits to: https://github.com/tomball for original and https://github.com/chrusart for JavaScript implementation\n*/\nexport function splitCookiesString(cookiesString: string) {\n var cookiesStrings = []\n var pos = 0\n var start\n var ch\n var lastComma\n var nextStart\n var cookiesSeparatorFound\n\n function skipWhitespace() {\n while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n pos += 1\n }\n return pos < cookiesString.length\n }\n\n function notSpecialChar() {\n ch = cookiesString.charAt(pos)\n\n return ch !== '=' && ch !== ';' && ch !== ','\n }\n\n while (pos < cookiesString.length) {\n start = pos\n cookiesSeparatorFound = false\n\n while (skipWhitespace()) {\n ch = cookiesString.charAt(pos)\n if (ch === ',') {\n // ',' is a cookie separator if we have later first '=', not ';' or ','\n lastComma = pos\n pos += 1\n\n skipWhitespace()\n nextStart = pos\n\n while (pos < cookiesString.length && notSpecialChar()) {\n pos += 1\n }\n\n // currently special character\n if (pos < cookiesString.length && cookiesString.charAt(pos) === '=') {\n // we found cookies separator\n cookiesSeparatorFound = true\n // pos is inside the next cookie, so back up and return it.\n pos = nextStart\n cookiesStrings.push(cookiesString.substring(start, lastComma))\n start = pos\n } else {\n // in param ',' or param separator ';',\n // we continue from that comma\n pos = lastComma + 1\n }\n } else {\n pos += 1\n }\n }\n\n if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n cookiesStrings.push(cookiesString.substring(start, cookiesString.length))\n }\n }\n\n return cookiesStrings\n}\n\n/**\n * Converts a Headers object to a Node.js OutgoingHttpHeaders object. This is\n * required to support the set-cookie header, which may have multiple values.\n *\n * @param headers the headers object to convert\n * @returns the converted headers object\n */\nexport function toNodeOutgoingHttpHeaders(\n headers: Headers\n): OutgoingHttpHeaders {\n const nodeHeaders: OutgoingHttpHeaders = {}\n const cookies: string[] = []\n if (headers) {\n for (const [key, value] of headers.entries()) {\n if (key.toLowerCase() === 'set-cookie') {\n // We may have gotten a comma joined string of cookies, or multiple\n // set-cookie headers. We need to merge them into one header array\n // to represent all the cookies.\n cookies.push(...splitCookiesString(value))\n nodeHeaders[key] = cookies.length === 1 ? cookies[0] : cookies\n } else {\n nodeHeaders[key] = value\n }\n }\n }\n return nodeHeaders\n}\n\n/**\n * Validate the correctness of a user-provided URL.\n */\nexport function validateURL(url: string | URL): string {\n try {\n return String(new URL(String(url)))\n } catch (error: any) {\n throw new Error(\n `URL is malformed \"${String(\n url\n )}\". Please use only absolute URLs - https://nextjs.org/docs/messages/middleware-relative-urls`,\n { cause: error }\n )\n }\n}\n\n/**\n * Normalizes `nxtP` and `nxtI` query param values to remove the prefix.\n * This function does not mutate the input key.\n */\nexport function normalizeNextQueryParam(key: string): null | string {\n const prefixes = [NEXT_QUERY_PARAM_PREFIX, NEXT_INTERCEPTION_MARKER_PREFIX]\n for (const prefix of prefixes) {\n if (key !== prefix && key.startsWith(prefix)) {\n return key.substring(prefix.length)\n }\n }\n return null\n}\n"],"names":["NEXT_INTERCEPTION_MARKER_PREFIX","NEXT_QUERY_PARAM_PREFIX","fromNodeOutgoingHttpHeaders","nodeHeaders","headers","Headers","key","value","Object","entries","values","Array","isArray","v","toString","append","splitCookiesString","cookiesString","cookiesStrings","pos","start","ch","lastComma","nextStart","cookiesSeparatorFound","skipWhitespace","length","test","charAt","notSpecialChar","push","substring","toNodeOutgoingHttpHeaders","cookies","toLowerCase","validateURL","url","String","URL","error","Error","cause","normalizeNextQueryParam","prefixes","prefix","startsWith"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 10236, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/errors/constants.ts"],"sourcesContent":["export const MISSING_ROOT_TAGS_ERROR = 'NEXT_MISSING_ROOT_TAGS'\n"],"names":["MISSING_ROOT_TAGS_ERROR"],"mappings":";;;;AAAO,MAAMA,0BAA0B,yBAAwB","ignoreList":[0]}}, + {"offset": {"line": 10245, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/get-hostname.ts"],"sourcesContent":["import type { OutgoingHttpHeaders } from 'http'\n\n/**\n * Takes an object with a hostname property (like a parsed URL) and some\n * headers that may contain Host and returns the preferred hostname.\n * @param parsed An object containing a hostname property.\n * @param headers A dictionary with headers containing a `host`.\n */\nexport function getHostname(\n parsed: { hostname?: string | null },\n headers?: OutgoingHttpHeaders\n): string | undefined {\n // Get the hostname from the headers if it exists, otherwise use the parsed\n // hostname.\n let hostname: string\n if (headers?.host && !Array.isArray(headers.host)) {\n hostname = headers.host.toString().split(':', 1)[0]\n } else if (parsed.hostname) {\n hostname = parsed.hostname\n } else return\n\n return hostname.toLowerCase()\n}\n"],"names":["getHostname","parsed","headers","hostname","host","Array","isArray","toString","split","toLowerCase"],"mappings":"AAEA;;;;;CAKC,GACD;;;;AAAO,SAASA,YACdC,MAAoC,EACpCC,OAA6B;IAE7B,2EAA2E;IAC3E,YAAY;IACZ,IAAIC;IACJ,IAAID,SAASE,QAAQ,CAACC,MAAMC,OAAO,CAACJ,QAAQE,IAAI,GAAG;QACjDD,WAAWD,QAAQE,IAAI,CAACG,QAAQ,GAAGC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE;IACrD,OAAO,IAAIP,OAAOE,QAAQ,EAAE;QAC1BA,WAAWF,OAAOE,QAAQ;IAC5B,OAAO;IAEP,OAAOA,SAASM,WAAW;AAC7B","ignoreList":[0]}}, + {"offset": {"line": 10269, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/hash.ts"],"sourcesContent":["// http://www.cse.yorku.ca/~oz/hash.html\n// More specifically, 32-bit hash via djbxor\n// (ref: https://gist.github.com/eplawless/52813b1d8ad9af510d85?permalink_comment_id=3367765#gistcomment-3367765)\n// This is due to number type differences between rust for turbopack to js number types,\n// where rust does not have easy way to repreesnt js's 53-bit float number type for the matching\n// overflow behavior. This is more `correct` in terms of having canonical hash across different runtime / implementation\n// as can gaurantee determinstic output from 32bit hash.\nexport function djb2Hash(str: string) {\n let hash = 5381\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i)\n hash = ((hash << 5) + hash + char) & 0xffffffff\n }\n return hash >>> 0\n}\n\nexport function hexHash(str: string) {\n return djb2Hash(str).toString(36).slice(0, 5)\n}\n"],"names":["djb2Hash","str","hash","i","length","char","charCodeAt","hexHash","toString","slice"],"mappings":"AAAA,wCAAwC;AACxC,4CAA4C;AAC5C,iHAAiH;AACjH,wFAAwF;AACxF,gGAAgG;AAChG,wHAAwH;AACxH,wDAAwD;;;;;;;AACjD,SAASA,SAASC,GAAW;IAClC,IAAIC,OAAO;IACX,IAAK,IAAIC,IAAI,GAAGA,IAAIF,IAAIG,MAAM,EAAED,IAAK;QACnC,MAAME,OAAOJ,IAAIK,UAAU,CAACH;QAC5BD,OAASA,CAAAA,QAAQ,CAAA,IAAKA,OAAOG,OAAQ;IACvC;IACA,OAAOH,SAAS;AAClB;AAEO,SAASK,QAAQN,GAAW;IACjC,OAAOD,SAASC,KAAKO,QAAQ,CAAC,IAAIC,KAAK,CAAC,GAAG;AAC7C","ignoreList":[0]}}, + {"offset": {"line": 10297, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/i18n/detect-domain-locale.ts"],"sourcesContent":["import type { DomainLocale } from '../../../server/config-shared'\n\nexport function detectDomainLocale(\n domainItems?: readonly DomainLocale[],\n hostname?: string,\n detectedLocale?: string\n) {\n if (!domainItems) return\n\n if (detectedLocale) {\n detectedLocale = detectedLocale.toLowerCase()\n }\n\n for (const item of domainItems) {\n // remove port if present\n const domainHostname = item.domain?.split(':', 1)[0].toLowerCase()\n if (\n hostname === domainHostname ||\n detectedLocale === item.defaultLocale.toLowerCase() ||\n item.locales?.some((locale) => locale.toLowerCase() === detectedLocale)\n ) {\n return item\n }\n }\n}\n"],"names":["detectDomainLocale","domainItems","hostname","detectedLocale","toLowerCase","item","domainHostname","domain","split","defaultLocale","locales","some","locale"],"mappings":";;;;AAEO,SAASA,mBACdC,WAAqC,EACrCC,QAAiB,EACjBC,cAAuB;IAEvB,IAAI,CAACF,aAAa;IAElB,IAAIE,gBAAgB;QAClBA,iBAAiBA,eAAeC,WAAW;IAC7C;IAEA,KAAK,MAAMC,QAAQJ,YAAa;QAC9B,yBAAyB;QACzB,MAAMK,iBAAiBD,KAAKE,MAAM,EAAEC,MAAM,KAAK,EAAE,CAAC,EAAE,CAACJ;QACrD,IACEF,aAAaI,kBACbH,mBAAmBE,KAAKI,aAAa,CAACL,WAAW,MACjDC,KAAKK,OAAO,EAAEC,KAAK,CAACC,SAAWA,OAAOR,WAAW,OAAOD,iBACxD;YACA,OAAOE;QACT;IACF;AACF","ignoreList":[0]}}, + {"offset": {"line": 10318, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/i18n/normalize-locale-path.ts"],"sourcesContent":["export interface PathLocale {\n detectedLocale?: string\n pathname: string\n}\n\n/**\n * A cache of lowercased locales for each list of locales. This is stored as a\n * WeakMap so if the locales are garbage collected, the cache entry will be\n * removed as well.\n */\nconst cache = new WeakMap()\n\n/**\n * For a pathname that may include a locale from a list of locales, it\n * removes the locale from the pathname returning it alongside with the\n * detected locale.\n *\n * @param pathname A pathname that may include a locale.\n * @param locales A list of locales.\n * @returns The detected locale and pathname without locale\n */\nexport function normalizeLocalePath(\n pathname: string,\n locales?: readonly string[]\n): PathLocale {\n // If locales is undefined, return the pathname as is.\n if (!locales) return { pathname }\n\n // Get the cached lowercased locales or create a new cache entry.\n let lowercasedLocales = cache.get(locales)\n if (!lowercasedLocales) {\n lowercasedLocales = locales.map((locale) => locale.toLowerCase())\n cache.set(locales, lowercasedLocales)\n }\n\n let detectedLocale: string | undefined\n\n // The first segment will be empty, because it has a leading `/`. If\n // there is no further segment, there is no locale (or it's the default).\n const segments = pathname.split('/', 2)\n\n // If there's no second segment (ie, the pathname is just `/`), there's no\n // locale.\n if (!segments[1]) return { pathname }\n\n // The second segment will contain the locale part if any.\n const segment = segments[1].toLowerCase()\n\n // See if the segment matches one of the locales. If it doesn't, there is\n // no locale (or it's the default).\n const index = lowercasedLocales.indexOf(segment)\n if (index < 0) return { pathname }\n\n // Return the case-sensitive locale.\n detectedLocale = locales[index]\n\n // Remove the `/${locale}` part of the pathname.\n pathname = pathname.slice(detectedLocale.length + 1) || '/'\n\n return { pathname, detectedLocale }\n}\n"],"names":["cache","WeakMap","normalizeLocalePath","pathname","locales","lowercasedLocales","get","map","locale","toLowerCase","set","detectedLocale","segments","split","segment","index","indexOf","slice","length"],"mappings":";;;;AAKA;;;;CAIC,GACD,MAAMA,QAAQ,IAAIC;AAWX,SAASC,oBACdC,QAAgB,EAChBC,OAA2B;IAE3B,sDAAsD;IACtD,IAAI,CAACA,SAAS,OAAO;QAAED;IAAS;IAEhC,iEAAiE;IACjE,IAAIE,oBAAoBL,MAAMM,GAAG,CAACF;IAClC,IAAI,CAACC,mBAAmB;QACtBA,oBAAoBD,QAAQG,GAAG,CAAC,CAACC,SAAWA,OAAOC,WAAW;QAC9DT,MAAMU,GAAG,CAACN,SAASC;IACrB;IAEA,IAAIM;IAEJ,oEAAoE;IACpE,yEAAyE;IACzE,MAAMC,WAAWT,SAASU,KAAK,CAAC,KAAK;IAErC,0EAA0E;IAC1E,UAAU;IACV,IAAI,CAACD,QAAQ,CAAC,EAAE,EAAE,OAAO;QAAET;IAAS;IAEpC,0DAA0D;IAC1D,MAAMW,UAAUF,QAAQ,CAAC,EAAE,CAACH,WAAW;IAEvC,yEAAyE;IACzE,mCAAmC;IACnC,MAAMM,QAAQV,kBAAkBW,OAAO,CAACF;IACxC,IAAIC,QAAQ,GAAG,OAAO;QAAEZ;IAAS;IAEjC,oCAAoC;IACpCQ,iBAAiBP,OAAO,CAACW,MAAM;IAE/B,gDAAgD;IAChDZ,WAAWA,SAASc,KAAK,CAACN,eAAeO,MAAM,GAAG,MAAM;IAExD,OAAO;QAAEf;QAAUQ;IAAe;AACpC","ignoreList":[0]}}, + {"offset": {"line": 10368, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/instant-messages.ts"],"sourcesContent":["export function createUnrenderedSegmentError(\n route: string,\n missingFiles: readonly string[]\n): Error {\n let message = `Route \"${route}\": Could not validate that a segment in your UI has instant navigation.`\n if (missingFiles.length > 0) {\n const label =\n missingFiles.length === 1 ? 'Dropped segment' : 'Dropped segments'\n message +=\n `\\n\\nThis segment was dropped from rendering. Issues that would prevent instant navigation will go undetected.` +\n `\\n\\n${label}:\\n${missingFiles.map((p) => ` ${p}`).join('\\n')}` +\n `\\n\\nWays to fix this:` +\n `\\n - [render] Render the dropped segment` +\n `\\n - [ignore] Set \\`export const instant = false\\` to opt the dropped segment out of instant-navigation validation` +\n `\\n\\nLearn more: https://nextjs.org/docs/messages/instant-unrendered-segment`\n }\n return new Error(message)\n}\n\nexport function createLinkPrefetchPartialError(pathname: string): Error {\n return new Error(\n `Next.js encountered dynamic data during prefetching for \"${pathname}\".\\n\\n` +\n `This will lead to slower, more expensive prefetches.\\n\\n` +\n `Ways to fix this:\\n` +\n ` - [upgrade] Opt into Partial Prefetching by exporting \\`const prefetch = 'partial'\\` from the page or layout, or by setting \\`partialPrefetching: true\\` in next.config to opt the whole app in\\n` +\n ` - [disable] Remove \\`prefetch={true}\\` from the to use the default prefetch\\n` +\n ` - [ignore] Set \\`export const instant = false\\` to opt the route out of instant-navigation validation\\n\\n` +\n `Learn more: https://nextjs.org/docs/messages/instant-link-prefetch-partial`\n )\n}\n"],"names":["createUnrenderedSegmentError","route","missingFiles","message","length","label","map","p","join","Error","createLinkPrefetchPartialError","pathname"],"mappings":";;;;;;AAAO,SAASA,6BACdC,KAAa,EACbC,YAA+B;IAE/B,IAAIC,UAAU,CAAC,OAAO,EAAEF,MAAM,uEAAuE,CAAC;IACtG,IAAIC,aAAaE,MAAM,GAAG,GAAG;QAC3B,MAAMC,QACJH,aAAaE,MAAM,KAAK,IAAI,oBAAoB;QAClDD,WACE,CAAC,6GAA6G,CAAC,GAC/G,CAAC,IAAI,EAAEE,MAAM,GAAG,EAAEH,aAAaI,GAAG,CAAC,CAACC,IAAM,CAAC,EAAE,EAAEA,GAAG,EAAEC,IAAI,CAAC,OAAO,GAChE,CAAC,qBAAqB,CAAC,GACvB,CAAC,yCAAyC,CAAC,GAC3C,CAAC,mHAAmH,CAAC,GACrH,CAAC,2EAA2E,CAAC;IACjF;IACA,OAAO,IAAIC,MAAMN;AACnB;AAEO,SAASO,+BAA+BC,QAAgB;IAC7D,OAAO,IAAIF,MACT,CAAC,yDAAyD,EAAEE,SAAS,MAAM,CAAC,GAC1E,CAAC,wDAAwD,CAAC,GAC1D,CAAC,mBAAmB,CAAC,GACrB,CAAC,mMAAmM,CAAC,GACrM,CAAC,sFAAsF,CAAC,GACxF,CAAC,2GAA2G,CAAC,GAC7G,CAAC,0EAA0E,CAAC;AAElF","ignoreList":[0]}}, + {"offset": {"line": 10389, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/invariant-error.ts"],"sourcesContent":["export class InvariantError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(\n `Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`,\n options\n )\n this.name = 'InvariantError'\n }\n}\n"],"names":["InvariantError","Error","constructor","message","options","endsWith","name"],"mappings":";;;;AAAO,MAAMA,uBAAuBC;IAClCC,YAAYC,OAAe,EAAEC,OAAsB,CAAE;QACnD,KAAK,CACH,CAAC,WAAW,EAAED,QAAQE,QAAQ,CAAC,OAAOF,UAAUA,UAAU,IAAI,0BAA0B,CAAC,EACzFC;QAEF,IAAI,CAACE,IAAI,GAAG;IACd;AACF","ignoreList":[0]}}, + {"offset": {"line": 10403, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/is-thenable.ts"],"sourcesContent":["/**\n * Check to see if a value is Thenable.\n *\n * @param promise the maybe-thenable value\n * @returns true if the value is thenable\n */\nexport function isThenable(\n promise: Promise | T\n): promise is Promise {\n return (\n promise !== null &&\n typeof promise === 'object' &&\n 'then' in promise &&\n typeof promise.then === 'function'\n )\n}\n"],"names":["isThenable","promise","then"],"mappings":"AAAA;;;;;CAKC,GACD;;;;AAAO,SAASA,WACdC,OAAuB;IAEvB,OACEA,YAAY,QACZ,OAAOA,YAAY,YACnB,UAAUA,WACV,OAAOA,QAAQC,IAAI,KAAK;AAE5B","ignoreList":[0]}}, + {"offset": {"line": 10419, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/lazy-dynamic/react-browser-bailout.ts"],"sourcesContent":["// This module is bundled separately into user code and the precompiled App\n// Router runtime. Use the global symbol registry so both copies recognize the\n// same browser bailout reason.\nconst REACT_BROWSER_BAILOUT_REASON = Symbol.for('next.browser-bailout-reason')\n\ntype ReactBrowserBailoutReason = {\n $$typeof: symbol\n reason: string\n}\n\nexport function createReactBrowserBailoutReason(\n reason: string\n): ReactBrowserBailoutReason {\n return {\n $$typeof: REACT_BROWSER_BAILOUT_REASON,\n reason,\n }\n}\n\nexport function getReactBrowserBailoutReason(\n error: unknown\n): string | undefined {\n const cause = (error as Error)?.cause as ReactBrowserBailoutReason | undefined\n\n return cause?.$$typeof === REACT_BROWSER_BAILOUT_REASON\n ? cause.reason\n : undefined\n}\n\nexport function isNextBrowserBailoutError(error: unknown): boolean {\n return getReactBrowserBailoutReason(error) !== undefined\n}\n"],"names":["REACT_BROWSER_BAILOUT_REASON","Symbol","for","createReactBrowserBailoutReason","reason","$$typeof","getReactBrowserBailoutReason","error","cause","undefined","isNextBrowserBailoutError"],"mappings":";;;;;;;;AAAA,2EAA2E;AAC3E,8EAA8E;AAC9E,+BAA+B;AAC/B,MAAMA,+BAA+BC,OAAOC,GAAG,CAAC;AAOzC,SAASC,gCACdC,MAAc;IAEd,OAAO;QACLC,UAAUL;QACVI;IACF;AACF;AAEO,SAASE,6BACdC,KAAc;IAEd,MAAMC,QAASD,OAAiBC;IAEhC,OAAOA,OAAOH,aAAaL,+BACvBQ,MAAMJ,MAAM,GACZK;AACN;AAEO,SAASC,0BAA0BH,KAAc;IACtD,OAAOD,6BAA6BC,WAAWE;AACjD","ignoreList":[0]}}, + {"offset": {"line": 10448, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/page-path/ensure-leading-slash.ts"],"sourcesContent":["/**\n * For a given page path, this function ensures that there is a leading slash.\n * If there is not a leading slash, one is added, otherwise it is noop.\n */\nexport function ensureLeadingSlash(path: string) {\n return path.startsWith('/') ? path : `/${path}`\n}\n"],"names":["ensureLeadingSlash","path","startsWith"],"mappings":"AAAA;;;CAGC,GACD;;;;AAAO,SAASA,mBAAmBC,IAAY;IAC7C,OAAOA,KAAKC,UAAU,CAAC,OAAOD,OAAO,CAAC,CAAC,EAAEA,MAAM;AACjD","ignoreList":[0]}}, + {"offset": {"line": 10462, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/page-path/normalize-page-path.ts"],"sourcesContent":["import { ensureLeadingSlash } from './ensure-leading-slash'\nimport { isDynamicRoute } from '../router/utils'\nimport { NormalizeError } from '../utils'\n\n/**\n * Takes a page and transforms it into its file counterpart ensuring that the\n * output is normalized. Note this function is not idempotent because a page\n * `/index` can be referencing `/index/index.js` and `/index/index` could be\n * referencing `/index/index/index.js`. Examples:\n * - `/` -> `/index`\n * - `/index/foo` -> `/index/index/foo`\n * - `/index` -> `/index/index`\n */\nexport function normalizePagePath(page: string): string {\n const normalized =\n /^\\/index(\\/|$)/.test(page) && !isDynamicRoute(page)\n ? `/index${page}`\n : page === '/'\n ? '/index'\n : ensureLeadingSlash(page)\n\n if (process.env.NEXT_RUNTIME !== 'edge') {\n const { posix } = require('path') as typeof import('path')\n const resolvedPage = posix.normalize(normalized)\n if (resolvedPage !== normalized) {\n throw new NormalizeError(\n `Requested and resolved page mismatch: ${normalized} ${resolvedPage}`\n )\n }\n }\n\n return normalized\n}\n"],"names":["ensureLeadingSlash","isDynamicRoute","NormalizeError","normalizePagePath","page","normalized","test","process","env","NEXT_RUNTIME","posix","require","resolvedPage","normalize"],"mappings":";;;;AAAA,SAASA,kBAAkB,QAAQ,yBAAwB;;AAC3D,SAASC,cAAc,QAAQ,kBAAiB;AAChD,SAASC,cAAc,QAAQ,WAAU;;;;AAWlC,SAASC,kBAAkBC,IAAY;IAC5C,MAAMC,aACJ,iBAAiBC,IAAI,CAACF,SAAS,KAACH,4MAAAA,EAAeG,QAC3C,CAAC,MAAM,EAAEA,MAAM,GACfA,SAAS,MACP,eACAJ,0NAAAA,EAAmBI;IAE3B,IAAIG,QAAQC,GAAG,CAACC,YAAY,KAAK,OAAQ;QACvC,MAAM,EAAEC,KAAK,EAAE,GAAGC,QAAQ;QAC1B,MAAMC,eAAeF,MAAMG,SAAS,CAACR;QACrC,IAAIO,iBAAiBP,YAAY;YAC/B,MAAM,IAAIH,iLAAAA,CACR,CAAC,sCAAsC,EAAEG,WAAW,CAAC,EAAEO,cAAc;QAEzE;IACF;IAEA,OAAOP;AACT","ignoreList":[0]}}, + {"offset": {"line": 10488, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/promise-with-resolvers.ts"],"sourcesContent":["export function createPromiseWithResolvers(): PromiseWithResolvers {\n // Shim of Stage 4 Promise.withResolvers proposal\n let resolve: (value: T | PromiseLike) => void\n let reject: (reason: any) => void\n const promise = new Promise((res, rej) => {\n resolve = res\n reject = rej\n })\n return { resolve: resolve!, reject: reject!, promise }\n}\n"],"names":["createPromiseWithResolvers","resolve","reject","promise","Promise","res","rej"],"mappings":";;;;AAAO,SAASA;IACd,iDAAiD;IACjD,IAAIC;IACJ,IAAIC;IACJ,MAAMC,UAAU,IAAIC,QAAW,CAACC,KAAKC;QACnCL,UAAUI;QACVH,SAASI;IACX;IACA,OAAO;QAAEL,SAASA;QAAUC,QAAQA;QAASC;IAAQ;AACvD","ignoreList":[0]}}, + {"offset": {"line": 10510, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/request-insights.ts"],"sourcesContent":["export type RequestInsightKind = 'request' | 'instant-insights'\n\nexport type RequestInsightIdentity = {\n requestId: string\n kind?: RequestInsightKind\n}\n\nexport function getRequestInsightKind(\n insight: Pick\n): RequestInsightKind {\n return insight.kind ?? 'request'\n}\n\nexport function getRequestInsightKey(insight: RequestInsightIdentity): string {\n return `${getRequestInsightKind(insight)}:${insight.requestId}`\n}\n"],"names":["getRequestInsightKind","insight","kind","getRequestInsightKey","requestId"],"mappings":";;;;;;AAOO,SAASA,sBACdC,OAA6C;IAE7C,OAAOA,QAAQC,IAAI,IAAI;AACzB;AAEO,SAASC,qBAAqBF,OAA+B;IAClE,OAAO,GAAGD,sBAAsBC,SAAS,CAAC,EAAEA,QAAQG,SAAS,EAAE;AACjE","ignoreList":[0]}}, + {"offset": {"line": 10526, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/add-locale.ts"],"sourcesContent":["import { addPathPrefix } from './add-path-prefix'\nimport { pathHasPrefix } from './path-has-prefix'\n\n/**\n * For a given path and a locale, if the locale is given, it will prefix the\n * locale. The path shouldn't be an API path. If a default locale is given the\n * prefix will be omitted if the locale is already the default locale.\n */\nexport function addLocale(\n path: string,\n locale?: string | false,\n defaultLocale?: string,\n ignorePrefix?: boolean\n) {\n // If no locale was given or the locale is the default locale, we don't need\n // to prefix the path.\n if (!locale || locale === defaultLocale) return path\n\n const lower = path.toLowerCase()\n\n // If the path is an API path or the path already has the locale prefix, we\n // don't need to prefix the path.\n if (!ignorePrefix) {\n if (pathHasPrefix(lower, '/api')) return path\n if (pathHasPrefix(lower, `/${locale.toLowerCase()}`)) return path\n }\n\n // Add the locale prefix to the path.\n return addPathPrefix(path, `/${locale}`)\n}\n"],"names":["addPathPrefix","pathHasPrefix","addLocale","path","locale","defaultLocale","ignorePrefix","lower","toLowerCase"],"mappings":";;;;AAAA,SAASA,aAAa,QAAQ,oBAAmB;AACjD,SAASC,aAAa,QAAQ,oBAAmB;;;AAO1C,SAASC,UACdC,IAAY,EACZC,MAAuB,EACvBC,aAAsB,EACtBC,YAAsB;IAEtB,4EAA4E;IAC5E,sBAAsB;IACtB,IAAI,CAACF,UAAUA,WAAWC,eAAe,OAAOF;IAEhD,MAAMI,QAAQJ,KAAKK,WAAW;IAE9B,2EAA2E;IAC3E,iCAAiC;IACjC,IAAI,CAACF,cAAc;QACjB,QAAIL,mNAAAA,EAAcM,OAAO,SAAS,OAAOJ;QACzC,QAAIF,mNAAAA,EAAcM,OAAO,CAAC,CAAC,EAAEH,OAAOI,WAAW,IAAI,GAAG,OAAOL;IAC/D;IAEA,qCAAqC;IACrC,WAAOH,mNAAAA,EAAcG,MAAM,CAAC,CAAC,EAAEC,QAAQ;AACzC","ignoreList":[0]}}, + {"offset": {"line": 10552, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/add-path-prefix.ts"],"sourcesContent":["import { parsePath } from './parse-path'\n\n/**\n * Adds the provided prefix to the given path. It first ensures that the path\n * is indeed starting with a slash.\n */\nexport function addPathPrefix(path: string, prefix?: string) {\n if (!path.startsWith('/') || !prefix) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n return `${prefix}${pathname}${query}${hash}`\n}\n"],"names":["parsePath","addPathPrefix","path","prefix","startsWith","pathname","query","hash"],"mappings":";;;;AAAA,SAASA,SAAS,QAAQ,eAAc;;AAMjC,SAASC,cAAcC,IAAY,EAAEC,MAAe;IACzD,IAAI,CAACD,KAAKE,UAAU,CAAC,QAAQ,CAACD,QAAQ;QACpC,OAAOD;IACT;IAEA,MAAM,EAAEG,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAE,OAAGP,uMAAAA,EAAUE;IAC5C,OAAO,GAAGC,SAASE,WAAWC,QAAQC,MAAM;AAC9C","ignoreList":[0]}}, + {"offset": {"line": 10569, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/add-path-suffix.ts"],"sourcesContent":["import { parsePath } from './parse-path'\n\n/**\n * Similarly to `addPathPrefix`, this function adds a suffix at the end on the\n * provided path. It also works only for paths ensuring the argument starts\n * with a slash.\n */\nexport function addPathSuffix(path: string, suffix?: string) {\n if (!path.startsWith('/') || !suffix) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n return `${pathname}${suffix}${query}${hash}`\n}\n"],"names":["parsePath","addPathSuffix","path","suffix","startsWith","pathname","query","hash"],"mappings":";;;;AAAA,SAASA,SAAS,QAAQ,eAAc;;AAOjC,SAASC,cAAcC,IAAY,EAAEC,MAAe;IACzD,IAAI,CAACD,KAAKE,UAAU,CAAC,QAAQ,CAACD,QAAQ;QACpC,OAAOD;IACT;IAEA,MAAM,EAAEG,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAE,OAAGP,uMAAAA,EAAUE;IAC5C,OAAO,GAAGG,WAAWF,SAASG,QAAQC,MAAM;AAC9C","ignoreList":[0]}}, + {"offset": {"line": 10586, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/app-paths.ts"],"sourcesContent":["import { ensureLeadingSlash } from '../../page-path/ensure-leading-slash'\nimport { isGroupSegment } from '../../segment'\n\n/**\n * Normalizes an app route so it represents the actual request path. Essentially\n * performing the following transformations:\n *\n * - `/(dashboard)/user/[id]/page` to `/user/[id]`\n * - `/(dashboard)/account/page` to `/account`\n * - `/user/[id]/page` to `/user/[id]`\n * - `/account/page` to `/account`\n * - `/page` to `/`\n * - `/(dashboard)/user/[id]/route` to `/user/[id]`\n * - `/(dashboard)/account/route` to `/account`\n * - `/user/[id]/route` to `/user/[id]`\n * - `/account/route` to `/account`\n * - `/route` to `/`\n * - `/` to `/`\n *\n * @param route the app route to normalize\n * @returns the normalized pathname\n */\nexport function normalizeAppPath(route: string) {\n return ensureLeadingSlash(\n route.split('/').reduce((pathname, segment, index, segments) => {\n // Empty segments are ignored.\n if (!segment) {\n return pathname\n }\n\n // Groups are ignored.\n if (isGroupSegment(segment)) {\n return pathname\n }\n\n // Parallel segments are ignored.\n if (segment[0] === '@') {\n return pathname\n }\n\n // The last segment (if it's a leaf) should be ignored.\n if (\n (segment === 'page' || segment === 'route') &&\n index === segments.length - 1\n ) {\n return pathname\n }\n\n return `${pathname}/${segment}`\n }, '')\n )\n}\n\n/**\n * Comparator for sorting app paths so that parallel slot paths (containing\n * `/@`) come before the children/root page path. This keeps the direct\n * children/root page last so it can be selected as the canonical entry.\n *\n * Without this, route group prefixes like `(group)` (char code 0x28) sort\n * before `@` (0x40), causing the children page to sort first instead of last\n * and leading to a manifest mismatch / 404 in webpack dev mode.\n */\nexport function compareAppPaths(a: string, b: string): number {\n const aHasSlot = a.includes('/@')\n const bHasSlot = b.includes('/@')\n if (aHasSlot && !bHasSlot) return -1\n if (!aHasSlot && bHasSlot) return 1\n return a.localeCompare(b)\n}\n\nfunction normalizeAppPageEntryPathname(appPath: string): string {\n // Webpack app entries preserve escaped underscore segments as `%5F`, while\n // normalized request pathnames expose the decoded `_` segment.\n return normalizeAppPath(appPath).replace(/%5F/g, '_')\n}\n\n/**\n * Selects the app path that owns the compiled entry for a normalized route.\n * Catch-all normalization can add app paths from other routes, so only direct\n * paths are candidates. Among those, compareAppPaths deterministically prefers\n * the children/root page, or a stable slot when the route only has slots.\n */\nexport function selectAppPageEntry(\n pathname: string,\n appPaths: readonly string[],\n normalizePathname: (appPath: string) => string = normalizeAppPageEntryPathname\n): string {\n let entry: string | undefined\n\n for (const appPath of appPaths) {\n if (normalizePathname(appPath) !== pathname) continue\n\n if (entry === undefined || compareAppPaths(entry, appPath) < 0) {\n entry = appPath\n }\n }\n\n if (entry === undefined) {\n throw new Error(`Invariant: no direct app page entry found for ${pathname}`)\n }\n\n return entry\n}\n\n/**\n * Strips the `.rsc` extension if it's in the pathname.\n * Since this function is used on full urls it checks `?` for searchParams handling.\n */\nexport function normalizeRscURL(url: string) {\n return url.replace(\n /\\.rsc($|\\?)/,\n // $1 ensures `?` is preserved\n '$1'\n )\n}\n"],"names":["ensureLeadingSlash","isGroupSegment","normalizeAppPath","route","split","reduce","pathname","segment","index","segments","length","compareAppPaths","a","b","aHasSlot","includes","bHasSlot","localeCompare","normalizeAppPageEntryPathname","appPath","replace","selectAppPageEntry","appPaths","normalizePathname","entry","undefined","Error","normalizeRscURL","url"],"mappings":";;;;;;;;;;AAAA,SAASA,kBAAkB,QAAQ,uCAAsC;AACzE,SAASC,cAAc,QAAQ,gBAAe;;;AAqBvC,SAASC,iBAAiBC,KAAa;IAC5C,WAAOH,0NAAAA,EACLG,MAAMC,KAAK,CAAC,KAAKC,MAAM,CAAC,CAACC,UAAUC,SAASC,OAAOC;QACjD,8BAA8B;QAC9B,IAAI,CAACF,SAAS;YACZ,OAAOD;QACT;QAEA,sBAAsB;QACtB,QAAIL,mLAAAA,EAAeM,UAAU;YAC3B,OAAOD;QACT;QAEA,iCAAiC;QACjC,IAAIC,OAAO,CAAC,EAAE,KAAK,KAAK;YACtB,OAAOD;QACT;QAEA,uDAAuD;QACvD,IACGC,CAAAA,YAAY,UAAUA,YAAY,OAAM,KACzCC,UAAUC,SAASC,MAAM,GAAG,GAC5B;YACA,OAAOJ;QACT;QAEA,OAAO,GAAGA,SAAS,CAAC,EAAEC,SAAS;IACjC,GAAG;AAEP;AAWO,SAASI,gBAAgBC,CAAS,EAAEC,CAAS;IAClD,MAAMC,WAAWF,EAAEG,QAAQ,CAAC;IAC5B,MAAMC,WAAWH,EAAEE,QAAQ,CAAC;IAC5B,IAAID,YAAY,CAACE,UAAU,OAAO,CAAC;IACnC,IAAI,CAACF,YAAYE,UAAU,OAAO;IAClC,OAAOJ,EAAEK,aAAa,CAACJ;AACzB;AAEA,SAASK,8BAA8BC,OAAe;IACpD,2EAA2E;IAC3E,+DAA+D;IAC/D,OAAOjB,iBAAiBiB,SAASC,OAAO,CAAC,QAAQ;AACnD;AAQO,SAASC,mBACdf,QAAgB,EAChBgB,QAA2B,EAC3BC,oBAAiDL,6BAA6B;IAE9E,IAAIM;IAEJ,KAAK,MAAML,WAAWG,SAAU;QAC9B,IAAIC,kBAAkBJ,aAAab,UAAU;QAE7C,IAAIkB,UAAUC,aAAad,gBAAgBa,OAAOL,WAAW,GAAG;YAC9DK,QAAQL;QACV;IACF;IAEA,IAAIK,UAAUC,WAAW;QACvB,MAAM,IAAIC,MAAM,CAAC,8CAA8C,EAAEpB,UAAU;IAC7E;IAEA,OAAOkB;AACT;AAMO,SAASG,gBAAgBC,GAAW;IACzC,OAAOA,IAAIR,OAAO,CAChB,eACA,AACA,8BAD8B;AAGlC","ignoreList":[0]}}, + {"offset": {"line": 10653, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/cache-busting-search-param.ts"],"sourcesContent":["import { hexHash } from '../../hash'\n\nconst CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES = 12\nconst textEncoder = new TextEncoder()\n\nfunction encodeCacheBustingSearchParam(bytes: Uint8Array): string {\n let binary = ''\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i])\n }\n\n return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '')\n}\n\nfunction normalizeCacheBustingInput(\n value: string | string[] | undefined\n): string {\n if (value === undefined) {\n return '0'\n }\n return Array.isArray(value) ? value.join(',') : value\n}\n\nfunction createCacheBustingSearchParamInput(\n prefetchHeader: '1' | '2' | '3' | '0' | undefined,\n segmentPrefetchHeader: string | string[] | undefined,\n stateTreeHeader: string | string[] | undefined,\n nextUrlHeader: string | string[] | undefined\n): string | null {\n if (\n (prefetchHeader === undefined || prefetchHeader === '0') &&\n segmentPrefetchHeader === undefined &&\n stateTreeHeader === undefined &&\n nextUrlHeader === undefined\n ) {\n return null\n }\n\n return [\n prefetchHeader ?? '0',\n normalizeCacheBustingInput(segmentPrefetchHeader),\n normalizeCacheBustingInput(stateTreeHeader),\n normalizeCacheBustingInput(nextUrlHeader),\n ].join(',')\n}\n\nasync function computeCacheBustingSearchParamFromInput(\n input: string\n): Promise {\n // Truncate SHA-256 to 96 bits to keep `_rsc` compact\n const digest = await globalThis.crypto.subtle.digest(\n 'SHA-256',\n textEncoder.encode(input)\n )\n return encodeCacheBustingSearchParam(\n new Uint8Array(digest).subarray(0, CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES)\n )\n}\n\nexport async function computeCacheBustingSearchParam(\n prefetchHeader: '1' | '2' | '3' | '0' | undefined,\n segmentPrefetchHeader: string | string[] | undefined,\n stateTreeHeader: string | string[] | undefined,\n nextUrlHeader: string | string[] | undefined\n): Promise {\n const input = createCacheBustingSearchParamInput(\n prefetchHeader,\n segmentPrefetchHeader,\n stateTreeHeader,\n nextUrlHeader\n )\n if (input === null) {\n return ''\n }\n\n return computeCacheBustingSearchParamFromInput(input)\n}\n\nexport function computeLegacyCacheBustingSearchParam(\n prefetchHeader: '1' | '2' | '3' | '0' | undefined,\n segmentPrefetchHeader: string | string[] | undefined,\n stateTreeHeader: string | string[] | undefined,\n nextUrlHeader: string | string[] | undefined\n): string {\n const input = createCacheBustingSearchParamInput(\n prefetchHeader,\n segmentPrefetchHeader,\n stateTreeHeader,\n nextUrlHeader\n )\n if (input === null) {\n return ''\n }\n\n return hexHash(input)\n}\n"],"names":["hexHash","CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES","textEncoder","TextEncoder","encodeCacheBustingSearchParam","bytes","binary","i","length","String","fromCharCode","btoa","replace","normalizeCacheBustingInput","value","undefined","Array","isArray","join","createCacheBustingSearchParamInput","prefetchHeader","segmentPrefetchHeader","stateTreeHeader","nextUrlHeader","computeCacheBustingSearchParamFromInput","input","digest","globalThis","crypto","subtle","encode","Uint8Array","subarray","computeCacheBustingSearchParam","computeLegacyCacheBustingSearchParam"],"mappings":";;;;;;AAAA,SAASA,OAAO,QAAQ,aAAY;;AAEpC,MAAMC,0CAA0C;AAChD,MAAMC,cAAc,IAAIC;AAExB,SAASC,8BAA8BC,KAAiB;IACtD,IAAIC,SAAS;IACb,IAAK,IAAIC,IAAI,GAAGA,IAAIF,MAAMG,MAAM,EAAED,IAAK;QACrCD,UAAUG,OAAOC,YAAY,CAACL,KAAK,CAACE,EAAE;IACxC;IAEA,OAAOI,KAAKL,QAAQM,OAAO,CAAC,OAAO,KAAKA,OAAO,CAAC,OAAO,KAAKA,OAAO,CAAC,OAAO;AAC7E;AAEA,SAASC,2BACPC,KAAoC;IAEpC,IAAIA,UAAUC,WAAW;QACvB,OAAO;IACT;IACA,OAAOC,MAAMC,OAAO,CAACH,SAASA,MAAMI,IAAI,CAAC,OAAOJ;AAClD;AAEA,SAASK,mCACPC,cAAiD,EACjDC,qBAAoD,EACpDC,eAA8C,EAC9CC,aAA4C;IAE5C,IACGH,CAAAA,mBAAmBL,aAAaK,mBAAmB,GAAE,KACtDC,0BAA0BN,aAC1BO,oBAAoBP,aACpBQ,kBAAkBR,WAClB;QACA,OAAO;IACT;IAEA,OAAO;QACLK,kBAAkB;QAClBP,2BAA2BQ;QAC3BR,2BAA2BS;QAC3BT,2BAA2BU;KAC5B,CAACL,IAAI,CAAC;AACT;AAEA,eAAeM,wCACbC,KAAa;IAEb,qDAAqD;IACrD,MAAMC,SAAS,MAAMC,WAAWC,MAAM,CAACC,MAAM,CAACH,MAAM,CAClD,WACAxB,YAAY4B,MAAM,CAACL;IAErB,OAAOrB,8BACL,IAAI2B,WAAWL,QAAQM,QAAQ,CAAC,GAAG/B;AAEvC;AAEO,eAAegC,+BACpBb,cAAiD,EACjDC,qBAAoD,EACpDC,eAA8C,EAC9CC,aAA4C;IAE5C,MAAME,QAAQN,mCACZC,gBACAC,uBACAC,iBACAC;IAEF,IAAIE,UAAU,MAAM;QAClB,OAAO;IACT;IAEA,OAAOD,wCAAwCC;AACjD;AAEO,SAASS,qCACdd,cAAiD,EACjDC,qBAAoD,EACpDC,eAA8C,EAC9CC,aAA4C;IAE5C,MAAME,QAAQN,mCACZC,gBACAC,uBACAC,iBACAC;IAEF,IAAIE,UAAU,MAAM;QAClB,OAAO;IACT;IAEA,WAAOzB,yKAAAA,EAAQyB;AACjB","ignoreList":[0]}}, + {"offset": {"line": 10710, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/format-next-pathname-info.ts"],"sourcesContent":["import type { NextPathnameInfo } from './get-next-pathname-info'\nimport { removeTrailingSlash } from './remove-trailing-slash'\nimport { addPathPrefix } from './add-path-prefix'\nimport { addPathSuffix } from './add-path-suffix'\nimport { addLocale } from './add-locale'\n\ninterface ExtendedInfo extends NextPathnameInfo {\n defaultLocale?: string\n ignorePrefix?: boolean\n}\n\nexport function formatNextPathnameInfo(info: ExtendedInfo) {\n let pathname = addLocale(\n info.pathname,\n info.locale,\n info.buildId ? undefined : info.defaultLocale,\n info.ignorePrefix\n )\n\n if (info.buildId || !info.trailingSlash) {\n pathname = removeTrailingSlash(pathname)\n }\n\n if (info.buildId) {\n pathname = addPathSuffix(\n addPathPrefix(pathname, `/_next/data/${info.buildId}`),\n info.pathname === '/' ? 'index.json' : '.json'\n )\n }\n\n pathname = addPathPrefix(pathname, info.basePath)\n return !info.buildId && info.trailingSlash\n ? !pathname.endsWith('/')\n ? addPathSuffix(pathname, '/')\n : pathname\n : removeTrailingSlash(pathname)\n}\n"],"names":["removeTrailingSlash","addPathPrefix","addPathSuffix","addLocale","formatNextPathnameInfo","info","pathname","locale","buildId","undefined","defaultLocale","ignorePrefix","trailingSlash","basePath","endsWith"],"mappings":";;;;AACA,SAASA,mBAAmB,QAAQ,0BAAyB;AAC7D,SAASC,aAAa,QAAQ,oBAAmB;AACjD,SAASC,aAAa,QAAQ,oBAAmB;AACjD,SAASC,SAAS,QAAQ,eAAc;;;;;AAOjC,SAASC,uBAAuBC,IAAkB;IACvD,IAAIC,eAAWH,uMAAAA,EACbE,KAAKC,QAAQ,EACbD,KAAKE,MAAM,EACXF,KAAKG,OAAO,GAAGC,YAAYJ,KAAKK,aAAa,EAC7CL,KAAKM,YAAY;IAGnB,IAAIN,KAAKG,OAAO,IAAI,CAACH,KAAKO,aAAa,EAAE;QACvCN,eAAWN,+NAAAA,EAAoBM;IACjC;IAEA,IAAID,KAAKG,OAAO,EAAE;QAChBF,eAAWJ,mNAAAA,MACTD,mNAAAA,EAAcK,UAAU,CAAC,YAAY,EAAED,KAAKG,OAAO,EAAE,GACrDH,KAAKC,QAAQ,KAAK,MAAM,eAAe;IAE3C;IAEAA,eAAWL,mNAAAA,EAAcK,UAAUD,KAAKQ,QAAQ;IAChD,OAAO,CAACR,KAAKG,OAAO,IAAIH,KAAKO,aAAa,GACtC,CAACN,SAASQ,QAAQ,CAAC,WACjBZ,mNAAAA,EAAcI,UAAU,OACxBA,eACFN,+NAAAA,EAAoBM;AAC1B","ignoreList":[0]}}, + {"offset": {"line": 10737, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/get-next-pathname-info.ts"],"sourcesContent":["import { normalizeLocalePath } from '../../i18n/normalize-locale-path'\nimport { removePathPrefix } from './remove-path-prefix'\nimport { pathHasPrefix } from './path-has-prefix'\nimport type { I18NProvider } from '../../../../server/lib/i18n-provider'\n\nexport interface NextPathnameInfo {\n /**\n * The base path in case the pathname included it.\n */\n basePath?: string\n /**\n * The buildId for when the parsed URL is a data URL. Parsing it can be\n * disabled with the `parseData` option.\n */\n buildId?: string\n /**\n * If there was a locale in the pathname, this will hold its value.\n */\n locale?: string\n /**\n * The processed pathname without a base path, locale, or data URL elements\n * when parsing it is enabled.\n */\n pathname: string\n /**\n * A boolean telling if the pathname had a trailingSlash. This can be only\n * true if trailingSlash is enabled.\n */\n trailingSlash?: boolean\n}\n\ninterface Options {\n /**\n * When passed to true, this function will also parse Nextjs data URLs.\n */\n parseData?: boolean\n /**\n * A partial of the Next.js configuration to parse the URL.\n */\n nextConfig?: {\n basePath?: string\n i18n?: { locales?: readonly string[] } | null\n trailingSlash?: boolean\n }\n\n /**\n * If provided, this normalizer will be used to detect the locale instead of\n * the default locale detection.\n */\n i18nProvider?: I18NProvider\n}\n\nexport function getNextPathnameInfo(\n pathname: string,\n options: Options\n): NextPathnameInfo {\n const { basePath, i18n, trailingSlash } = options.nextConfig ?? {}\n const info: NextPathnameInfo = {\n pathname,\n trailingSlash: pathname !== '/' ? pathname.endsWith('/') : trailingSlash,\n }\n\n if (basePath && pathHasPrefix(info.pathname, basePath)) {\n info.pathname = removePathPrefix(info.pathname, basePath)\n info.basePath = basePath\n }\n let pathnameNoDataPrefix = info.pathname\n\n if (\n info.pathname.startsWith('/_next/data/') &&\n info.pathname.endsWith('.json')\n ) {\n const paths = info.pathname\n .replace(/^\\/_next\\/data\\//, '')\n .replace(/\\.json$/, '')\n .split('/')\n\n const buildId = paths[0]\n info.buildId = buildId\n pathnameNoDataPrefix =\n paths[1] !== 'index' ? `/${paths.slice(1).join('/')}` : '/'\n\n // update pathname with normalized if enabled although\n // we use normalized to populate locale info still\n if (options.parseData === true) {\n info.pathname = pathnameNoDataPrefix\n }\n }\n\n // If provided, use the locale route normalizer to detect the locale instead\n // of the function below.\n if (i18n) {\n let result = options.i18nProvider\n ? options.i18nProvider.analyze(info.pathname)\n : normalizeLocalePath(info.pathname, i18n.locales)\n\n info.locale = result.detectedLocale\n info.pathname = result.pathname ?? info.pathname\n\n if (!result.detectedLocale && info.buildId) {\n result = options.i18nProvider\n ? options.i18nProvider.analyze(pathnameNoDataPrefix)\n : normalizeLocalePath(pathnameNoDataPrefix, i18n.locales)\n\n if (result.detectedLocale) {\n info.locale = result.detectedLocale\n }\n }\n }\n return info\n}\n"],"names":["normalizeLocalePath","removePathPrefix","pathHasPrefix","getNextPathnameInfo","pathname","options","basePath","i18n","trailingSlash","nextConfig","info","endsWith","pathnameNoDataPrefix","startsWith","paths","replace","split","buildId","slice","join","parseData","result","i18nProvider","analyze","locales","locale","detectedLocale"],"mappings":";;;;AAAA,SAASA,mBAAmB,QAAQ,mCAAkC;AACtE,SAASC,gBAAgB,QAAQ,uBAAsB;AACvD,SAASC,aAAa,QAAQ,oBAAmB;;;;AAkD1C,SAASC,oBACdC,QAAgB,EAChBC,OAAgB;IAEhB,MAAM,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,aAAa,EAAE,GAAGH,QAAQI,UAAU,IAAI,CAAC;IACjE,MAAMC,OAAyB;QAC7BN;QACAI,eAAeJ,aAAa,MAAMA,SAASO,QAAQ,CAAC,OAAOH;IAC7D;IAEA,IAAIF,gBAAYJ,mNAAAA,EAAcQ,KAAKN,QAAQ,EAAEE,WAAW;QACtDI,KAAKN,QAAQ,OAAGH,yNAAAA,EAAiBS,KAAKN,QAAQ,EAAEE;QAChDI,KAAKJ,QAAQ,GAAGA;IAClB;IACA,IAAIM,uBAAuBF,KAAKN,QAAQ;IAExC,IACEM,KAAKN,QAAQ,CAACS,UAAU,CAAC,mBACzBH,KAAKN,QAAQ,CAACO,QAAQ,CAAC,UACvB;QACA,MAAMG,QAAQJ,KAAKN,QAAQ,CACxBW,OAAO,CAAC,oBAAoB,IAC5BA,OAAO,CAAC,WAAW,IACnBC,KAAK,CAAC;QAET,MAAMC,UAAUH,KAAK,CAAC,EAAE;QACxBJ,KAAKO,OAAO,GAAGA;QACfL,uBACEE,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC,EAAEA,MAAMI,KAAK,CAAC,GAAGC,IAAI,CAAC,MAAM,GAAG;QAE1D,sDAAsD;QACtD,kDAAkD;QAClD,IAAId,QAAQe,SAAS,KAAK,MAAM;YAC9BV,KAAKN,QAAQ,GAAGQ;QAClB;IACF;IAEA,4EAA4E;IAC5E,yBAAyB;IACzB,IAAIL,MAAM;QACR,IAAIc,SAAShB,QAAQiB,YAAY,GAC7BjB,QAAQiB,YAAY,CAACC,OAAO,CAACb,KAAKN,QAAQ,QAC1CJ,oNAAAA,EAAoBU,KAAKN,QAAQ,EAAEG,KAAKiB,OAAO;QAEnDd,KAAKe,MAAM,GAAGJ,OAAOK,cAAc;QACnChB,KAAKN,QAAQ,GAAGiB,OAAOjB,QAAQ,IAAIM,KAAKN,QAAQ;QAEhD,IAAI,CAACiB,OAAOK,cAAc,IAAIhB,KAAKO,OAAO,EAAE;YAC1CI,SAAShB,QAAQiB,YAAY,GACzBjB,QAAQiB,YAAY,CAACC,OAAO,CAACX,4BAC7BZ,oNAAAA,EAAoBY,sBAAsBL,KAAKiB,OAAO;YAE1D,IAAIH,OAAOK,cAAc,EAAE;gBACzBhB,KAAKe,MAAM,GAAGJ,OAAOK,cAAc;YACrC;QACF;IACF;IACA,OAAOhB;AACT","ignoreList":[0]}}, + {"offset": {"line": 10788, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/index.ts"],"sourcesContent":["export { getSortedRoutes, getSortedRouteObjects } from './sorted-routes'\nexport { isDynamicRoute } from './is-dynamic'\n"],"names":["getSortedRoutes","getSortedRouteObjects","isDynamicRoute"],"mappings":";AACA,SAASE,cAAc,QAAQ,eAAc","ignoreList":[0]}}, + {"offset": {"line": 10796, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/interception-routes.ts"],"sourcesContent":["import { normalizeAppPath } from './app-paths'\n\n// order matters here, the first match will be used\nexport const INTERCEPTION_ROUTE_MARKERS = [\n '(..)(..)',\n '(.)',\n '(..)',\n '(...)',\n] as const\n\nexport type InterceptionMarker = (typeof INTERCEPTION_ROUTE_MARKERS)[number]\n\nexport type MissingCanonicalInterceptionRoute = {\n interceptionRoute: string\n canonicalRoute: string\n}\n\ntype RoutePattern = {\n prefix: Array\n minLength: number\n unbounded: boolean\n}\n\nfunction parseRoutePattern(route: string): RoutePattern {\n const segments = route.split('/').filter(Boolean)\n const tail = segments.at(-1)\n const isOptionalCatchAll =\n tail !== undefined && tail.startsWith('[[...') && tail.endsWith(']]')\n const isCatchAll =\n tail !== undefined && tail.startsWith('[...') && tail.endsWith(']')\n const unbounded = isOptionalCatchAll || isCatchAll\n const prefixSegments = unbounded ? segments.slice(0, -1) : segments\n\n return {\n prefix: prefixSegments.map((segment) =>\n segment.startsWith('[') && segment.endsWith(']') ? null : segment\n ),\n minLength:\n prefixSegments.length + (isCatchAll && !isOptionalCatchAll ? 1 : 0),\n unbounded,\n }\n}\n\nfunction acceptsLength(pattern: RoutePattern, length: number): boolean {\n return pattern.unbounded\n ? length >= pattern.minLength\n : length === pattern.minLength\n}\n\nfunction prefixCovers(\n canonical: RoutePattern,\n intercepted: RoutePattern\n): boolean {\n return canonical.prefix.every((canonicalSegment, index) => {\n if (canonicalSegment === null) return true\n\n const interceptedSegment = intercepted.prefix[index]\n return (\n interceptedSegment !== undefined &&\n interceptedSegment !== null &&\n canonicalSegment === interceptedSegment\n )\n })\n}\n\nfunction patternCoversAtLength(\n canonical: RoutePattern,\n intercepted: RoutePattern,\n length: number\n): boolean {\n return (\n acceptsLength(canonical, length) &&\n acceptsLength(intercepted, length) &&\n prefixCovers(canonical, intercepted)\n )\n}\n\n/** Returns whether ordinary route patterns cover every URL in `route`. */\nfunction isRoutePatternCovered(route: string, ordinaryRoutes: RoutePattern[]) {\n const intercepted = parseRoutePattern(route)\n\n if (!intercepted.unbounded) {\n return ordinaryRoutes.some((pattern) =>\n patternCoversAtLength(pattern, intercepted, intercepted.minLength)\n )\n }\n\n let unboundedCoverageStart = Infinity\n for (const pattern of ordinaryRoutes) {\n if (pattern.unbounded && prefixCovers(pattern, intercepted)) {\n unboundedCoverageStart = Math.min(\n unboundedCoverageStart,\n Math.max(intercepted.minLength, pattern.minLength)\n )\n }\n }\n\n if (unboundedCoverageStart === Infinity) return false\n\n // An optional or required catchall can have its shorter paths covered by\n // fixed routes before another catchall takes over the remaining suffix.\n for (\n let length = intercepted.minLength;\n length < unboundedCoverageStart;\n length++\n ) {\n if (\n !ordinaryRoutes.some((pattern) =>\n patternCoversAtLength(pattern, intercepted, length)\n )\n ) {\n return false\n }\n }\n\n return true\n}\n\nexport function isInterceptionRouteAppPath(path: string): boolean {\n // TODO-APP: add more serious validation\n return (\n path\n .split('/')\n .find((segment) =>\n INTERCEPTION_ROUTE_MARKERS.find((m) => segment.startsWith(m))\n ) !== undefined\n )\n}\n\ntype InterceptionRouteInformation = {\n /**\n * The intercepting route. This is the route that is being intercepted or the\n * route that the user was coming from. This is matched by the Next-Url\n * header.\n */\n interceptingRoute: string\n\n /**\n * The intercepted route. This is the route that is being intercepted or the\n * route that the user is going to. This is matched by the request pathname.\n */\n interceptedRoute: string\n}\n\nexport function extractInterceptionRouteInformation(\n path: string\n): InterceptionRouteInformation {\n let interceptingRoute: string | undefined\n let marker: (typeof INTERCEPTION_ROUTE_MARKERS)[number] | undefined\n let interceptedRoute: string | undefined\n\n for (const segment of path.split('/')) {\n marker = INTERCEPTION_ROUTE_MARKERS.find((m) => segment.startsWith(m))\n if (marker) {\n ;[interceptingRoute, interceptedRoute] = path.split(marker, 2)\n break\n }\n }\n\n if (!interceptingRoute || !marker || !interceptedRoute) {\n throw new Error(\n `Invalid interception route: ${path}. Must be in the format //(..|...|..)(..)/`\n )\n }\n\n interceptingRoute = normalizeAppPath(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed\n\n switch (marker) {\n case '(.)':\n // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route\n if (interceptingRoute === '/') {\n interceptedRoute = `/${interceptedRoute}`\n } else {\n interceptedRoute = interceptingRoute + '/' + interceptedRoute\n }\n break\n case '(..)':\n // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route\n if (interceptingRoute === '/') {\n throw new Error(\n `Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`\n )\n }\n interceptedRoute = interceptingRoute\n .split('/')\n .slice(0, -1)\n .concat(interceptedRoute)\n .join('/')\n break\n case '(...)':\n // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route\n interceptedRoute = '/' + interceptedRoute\n break\n case '(..)(..)':\n // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route\n\n const splitInterceptingRoute = interceptingRoute.split('/')\n if (splitInterceptingRoute.length <= 2) {\n throw new Error(\n `Invalid interception route: ${path}. Cannot use (..)(..) marker at the root level or one level up.`\n )\n }\n\n interceptedRoute = splitInterceptingRoute\n .slice(0, -2)\n .concat(interceptedRoute)\n .join('/')\n break\n default:\n throw new Error('Invariant: unexpected marker')\n }\n\n return { interceptingRoute, interceptedRoute }\n}\n\n/**\n * Finds interception matchers that cannot be loaded as an ordinary request.\n *\n * This must run after catch-all normalization and pruning so `appPaths`\n * contains the final matcher set rather than every possible matcher candidate.\n */\nexport function findMissingCanonicalInterceptionRoutes(\n appPaths: Record\n): MissingCanonicalInterceptionRoute[] {\n const canonicalRoutes = Object.keys(appPaths).filter(\n (route) => !isInterceptionRouteAppPath(route)\n )\n const canonicalRoutePatterns = canonicalRoutes.map(parseRoutePattern)\n\n return Object.keys(appPaths)\n .filter(isInterceptionRouteAppPath)\n .map((interceptionRoute) => ({\n interceptionRoute,\n canonicalRoute:\n extractInterceptionRouteInformation(interceptionRoute).interceptedRoute,\n }))\n .filter(\n ({ canonicalRoute }) =>\n !isRoutePatternCovered(canonicalRoute, canonicalRoutePatterns)\n )\n .sort((a, b) => a.interceptionRoute.localeCompare(b.interceptionRoute))\n}\n"],"names":["normalizeAppPath","INTERCEPTION_ROUTE_MARKERS","parseRoutePattern","route","segments","split","filter","Boolean","tail","at","isOptionalCatchAll","undefined","startsWith","endsWith","isCatchAll","unbounded","prefixSegments","slice","prefix","map","segment","minLength","length","acceptsLength","pattern","prefixCovers","canonical","intercepted","every","canonicalSegment","index","interceptedSegment","patternCoversAtLength","isRoutePatternCovered","ordinaryRoutes","some","unboundedCoverageStart","Infinity","Math","min","max","isInterceptionRouteAppPath","path","find","m","extractInterceptionRouteInformation","interceptingRoute","marker","interceptedRoute","Error","concat","join","splitInterceptingRoute","findMissingCanonicalInterceptionRoutes","appPaths","canonicalRoutes","Object","keys","canonicalRoutePatterns","interceptionRoute","canonicalRoute","sort","a","b","localeCompare"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 10930, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/is-dynamic.ts"],"sourcesContent":["import {\n extractInterceptionRouteInformation,\n isInterceptionRouteAppPath,\n} from './interception-routes'\n\n// Identify /.*[param].*/ in route string\nconst TEST_ROUTE = /\\/[^/]*\\[[^/]+\\][^/]*(?=\\/|$)/\n\n// Identify /[param]/ in route string\nconst TEST_STRICT_ROUTE = /\\/\\[[^/]+\\](?=\\/|$)/\n\n/**\n * Check if a route is dynamic.\n *\n * @param route - The route to check.\n * @param strict - Whether to use strict mode which prohibits segments with prefixes/suffixes (default: true).\n * @returns Whether the route is dynamic.\n */\nexport function isDynamicRoute(route: string, strict: boolean = true): boolean {\n if (isInterceptionRouteAppPath(route)) {\n route = extractInterceptionRouteInformation(route).interceptedRoute\n }\n\n if (strict) {\n return TEST_STRICT_ROUTE.test(route)\n }\n\n return TEST_ROUTE.test(route)\n}\n"],"names":["extractInterceptionRouteInformation","isInterceptionRouteAppPath","TEST_ROUTE","TEST_STRICT_ROUTE","isDynamicRoute","route","strict","interceptedRoute","test"],"mappings":";;;;AAAA,SACEA,mCAAmC,EACnCC,0BAA0B,QACrB,wBAAuB;;AAE9B,yCAAyC;AACzC,MAAMC,aAAa;AAEnB,qCAAqC;AACrC,MAAMC,oBAAoB;AASnB,SAASC,eAAeC,KAAa,EAAEC,SAAkB,IAAI;IAClE,QAAIL,iOAAAA,EAA2BI,QAAQ;QACrCA,YAAQL,0OAAAA,EAAoCK,OAAOE,gBAAgB;IACrE;IAEA,IAAID,QAAQ;QACV,OAAOH,kBAAkBK,IAAI,CAACH;IAChC;IAEA,OAAOH,WAAWM,IAAI,CAACH;AACzB","ignoreList":[0]}}, + {"offset": {"line": 10953, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/parse-loader-tree.ts"],"sourcesContent":["import { DEFAULT_SEGMENT_KEY } from '../../segment'\nimport type { LoaderTree } from '../../../../server/lib/app-dir-module'\n\nexport function parseLoaderTree(tree: LoaderTree) {\n const [segment, parallelRoutes, modules, staticSiblings] = tree\n const { layout, template } = modules\n let { page } = modules\n // a __DEFAULT__ segment means that this route didn't match any of the\n // segments in the route, so we should use the default page\n page = segment === DEFAULT_SEGMENT_KEY ? modules.defaultPage : page\n\n const conventionPath = layout?.[1] || template?.[1] || page?.[1]\n\n return {\n page,\n segment,\n modules,\n /* it can be either layout / template / page */\n conventionPath,\n parallelRoutes,\n staticSiblings,\n }\n}\n"],"names":["DEFAULT_SEGMENT_KEY","parseLoaderTree","tree","segment","parallelRoutes","modules","staticSiblings","layout","template","page","defaultPage","conventionPath"],"mappings":";;;;AAAA,SAASA,mBAAmB,QAAQ,gBAAe;;AAG5C,SAASC,gBAAgBC,IAAgB;IAC9C,MAAM,CAACC,SAASC,gBAAgBC,SAASC,eAAe,GAAGJ;IAC3D,MAAM,EAAEK,MAAM,EAAEC,QAAQ,EAAE,GAAGH;IAC7B,IAAI,EAAEI,IAAI,EAAE,GAAGJ;IACf,sEAAsE;IACtE,2DAA2D;IAC3DI,OAAON,YAAYH,wLAAAA,GAAsBK,QAAQK,WAAW,GAAGD;IAE/D,MAAME,iBAAiBJ,QAAQ,CAAC,EAAE,IAAIC,UAAU,CAAC,EAAE,IAAIC,MAAM,CAAC,EAAE;IAEhE,OAAO;QACLA;QACAN;QACAE;QACA,6CAA6C,GAC7CM;QACAP;QACAE;IACF;AACF","ignoreList":[0]}}, + {"offset": {"line": 10980, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/parse-path.ts"],"sourcesContent":["/**\n * Given a path this function will find the pathname, query and hash and return\n * them. This is useful to parse full paths on the client side.\n * @param path A path to parse e.g. /foo/bar?id=1#hash\n */\nexport function parsePath(path: string) {\n const hashIndex = path.indexOf('#')\n const queryIndex = path.indexOf('?')\n const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex)\n\n if (hasQuery || hashIndex > -1) {\n return {\n pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),\n query: hasQuery\n ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined)\n : '',\n hash: hashIndex > -1 ? path.slice(hashIndex) : '',\n }\n }\n\n return { pathname: path, query: '', hash: '' }\n}\n"],"names":["parsePath","path","hashIndex","indexOf","queryIndex","hasQuery","pathname","substring","query","undefined","hash","slice"],"mappings":"AAAA;;;;CAIC,GACD;;;;AAAO,SAASA,UAAUC,IAAY;IACpC,MAAMC,YAAYD,KAAKE,OAAO,CAAC;IAC/B,MAAMC,aAAaH,KAAKE,OAAO,CAAC;IAChC,MAAME,WAAWD,aAAa,CAAC,KAAMF,CAAAA,YAAY,KAAKE,aAAaF,SAAQ;IAE3E,IAAIG,YAAYH,YAAY,CAAC,GAAG;QAC9B,OAAO;YACLI,UAAUL,KAAKM,SAAS,CAAC,GAAGF,WAAWD,aAAaF;YACpDM,OAAOH,WACHJ,KAAKM,SAAS,CAACH,YAAYF,YAAY,CAAC,IAAIA,YAAYO,aACxD;YACJC,MAAMR,YAAY,CAAC,IAAID,KAAKU,KAAK,CAACT,aAAa;QACjD;IACF;IAEA,OAAO;QAAEI,UAAUL;QAAMO,OAAO;QAAIE,MAAM;IAAG;AAC/C","ignoreList":[0]}}, + {"offset": {"line": 11009, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/path-has-prefix.ts"],"sourcesContent":["import { parsePath } from './parse-path'\n\n/**\n * Checks if a given path starts with a given prefix. It ensures it matches\n * exactly without containing extra chars. e.g. prefix /docs should replace\n * for /docs, /docs/, /docs/a but not /docsss\n * @param path The path to check.\n * @param prefix The prefix to check against.\n */\nexport function pathHasPrefix(path: string, prefix: string) {\n if (typeof path !== 'string') {\n return false\n }\n\n const { pathname } = parsePath(path)\n return pathname === prefix || pathname.startsWith(prefix + '/')\n}\n"],"names":["parsePath","pathHasPrefix","path","prefix","pathname","startsWith"],"mappings":";;;;AAAA,SAASA,SAAS,QAAQ,eAAc;;AASjC,SAASC,cAAcC,IAAY,EAAEC,MAAc;IACxD,IAAI,OAAOD,SAAS,UAAU;QAC5B,OAAO;IACT;IAEA,MAAM,EAAEE,QAAQ,EAAE,OAAGJ,uMAAAA,EAAUE;IAC/B,OAAOE,aAAaD,UAAUC,SAASC,UAAU,CAACF,SAAS;AAC7D","ignoreList":[0]}}, + {"offset": {"line": 11026, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/remove-path-prefix.ts"],"sourcesContent":["import { pathHasPrefix } from './path-has-prefix'\n\n/**\n * Given a path and a prefix it will remove the prefix when it exists in the\n * given path. It ensures it matches exactly without containing extra chars\n * and if the prefix is not there it will be noop.\n *\n * @param path The path to remove the prefix from.\n * @param prefix The prefix to be removed.\n */\nexport function removePathPrefix(path: string, prefix: string): string {\n // If the path doesn't start with the prefix we can return it as is. This\n // protects us from situations where the prefix is a substring of the path\n // prefix such as:\n //\n // For prefix: /blog\n //\n // /blog -> true\n // /blog/ -> true\n // /blog/1 -> true\n // /blogging -> false\n // /blogging/ -> false\n // /blogging/1 -> false\n if (!pathHasPrefix(path, prefix)) {\n return path\n }\n\n // Remove the prefix from the path via slicing.\n const withoutPrefix = path.slice(prefix.length)\n\n // If the path without the prefix starts with a `/` we can return it as is.\n if (withoutPrefix.startsWith('/')) {\n return withoutPrefix\n }\n\n // If the path without the prefix doesn't start with a `/` we need to add it\n // back to the path to make sure it's a valid path.\n return `/${withoutPrefix}`\n}\n"],"names":["pathHasPrefix","removePathPrefix","path","prefix","withoutPrefix","slice","length","startsWith"],"mappings":";;;;AAAA,SAASA,aAAa,QAAQ,oBAAmB;;AAU1C,SAASC,iBAAiBC,IAAY,EAAEC,MAAc;IAC3D,yEAAyE;IACzE,0EAA0E;IAC1E,kBAAkB;IAClB,EAAE;IACF,oBAAoB;IACpB,EAAE;IACF,kBAAkB;IAClB,mBAAmB;IACnB,oBAAoB;IACpB,uBAAuB;IACvB,wBAAwB;IACxB,yBAAyB;IACzB,IAAI,KAACH,mNAAAA,EAAcE,MAAMC,SAAS;QAChC,OAAOD;IACT;IAEA,+CAA+C;IAC/C,MAAME,gBAAgBF,KAAKG,KAAK,CAACF,OAAOG,MAAM;IAE9C,2EAA2E;IAC3E,IAAIF,cAAcG,UAAU,CAAC,MAAM;QACjC,OAAOH;IACT;IAEA,4EAA4E;IAC5E,mDAAmD;IACnD,OAAO,CAAC,CAAC,EAAEA,eAAe;AAC5B","ignoreList":[0]}}, + {"offset": {"line": 11062, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/router/utils/remove-trailing-slash.ts"],"sourcesContent":["/**\n * Removes the trailing slash for a given route or page path. Examples:\n * - `/foo/bar/` -> `/foo/bar`\n * - `/foo/bar` -> `/foo/bar`\n *\n * Uses charCodeAt (47 === '/') instead of regex to avoid the overhead of\n * compiling and executing a RegExp on every call (~3-5x faster).\n */\nexport function removeTrailingSlash(route: string) {\n return route.charCodeAt(route.length - 1) === 47 && route.length > 1\n ? route.slice(0, -1)\n : route\n}\n"],"names":["removeTrailingSlash","route","charCodeAt","length","slice"],"mappings":"AAAA;;;;;;;CAOC,GACD;;;;AAAO,SAASA,oBAAoBC,KAAa;IAC/C,OAAOA,MAAMC,UAAU,CAACD,MAAME,MAAM,GAAG,OAAO,MAAMF,MAAME,MAAM,GAAG,IAC/DF,MAAMG,KAAK,CAAC,GAAG,CAAC,KAChBH;AACN","ignoreList":[0]}}, + {"offset": {"line": 11080, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/segment.ts"],"sourcesContent":["import type { FlightRouterState, Segment } from './app-router-types'\n\nexport function getSegmentValue(segment: Segment) {\n return Array.isArray(segment) ? segment[1] : segment\n}\n\nexport function isGroupSegment(segment: string) {\n // Use array[0] for performant purpose\n return segment[0] === '(' && segment.endsWith(')')\n}\n\nexport function isParallelRouteSegment(segment: string) {\n return segment.startsWith('@') && segment !== '@children'\n}\n\nexport function computeSelectedLayoutSegment(\n segments: string[] | null,\n parallelRouteKey: string\n): string | null {\n if (!segments || segments.length === 0) {\n return null\n }\n\n // For 'children', use first segment; for other parallel routes, use last segment\n const rawSegment =\n parallelRouteKey === 'children'\n ? segments[0]\n : segments[segments.length - 1]\n\n // If the default slot is showing, return null since it's not technically \"selected\" (it's a fallback)\n // Returning an internal value like `__DEFAULT__` would be confusing\n return rawSegment === DEFAULT_SEGMENT_KEY ? null : rawSegment\n}\n\n/** Get the canonical parameters from the current level to the leaf node. */\nexport function getSelectedLayoutSegmentPath(\n tree: FlightRouterState,\n parallelRouteKey: string,\n first = true,\n segmentPath: string[] = []\n): string[] {\n let node: FlightRouterState\n if (first) {\n // Use the provided parallel route key on the first parallel route\n node = tree[1][parallelRouteKey]\n } else {\n // After first parallel route prefer children, if there's no children pick the first parallel route.\n const parallelRoutes = tree[1]\n node = parallelRoutes.children ?? Object.values(parallelRoutes)[0]\n }\n\n if (!node) return segmentPath\n const segment = node[0]\n\n let segmentValue = getSegmentValue(segment)\n\n if (!segmentValue || segmentValue === PAGE_SEGMENT_KEY) {\n return segmentPath\n }\n\n segmentPath.push(segmentValue)\n\n return getSelectedLayoutSegmentPath(\n node,\n parallelRouteKey,\n false,\n segmentPath\n )\n}\n\nexport const PAGE_SEGMENT_KEY = '__PAGE__'\nexport const DEFAULT_SEGMENT_KEY = '__DEFAULT__'\nexport const NOT_FOUND_SEGMENT_KEY = '/_not-found'\n"],"names":["getSegmentValue","segment","Array","isArray","isGroupSegment","endsWith","isParallelRouteSegment","startsWith","computeSelectedLayoutSegment","segments","parallelRouteKey","length","rawSegment","DEFAULT_SEGMENT_KEY","getSelectedLayoutSegmentPath","tree","first","segmentPath","node","parallelRoutes","children","Object","values","segmentValue","PAGE_SEGMENT_KEY","push","NOT_FOUND_SEGMENT_KEY"],"mappings":";;;;;;;;;;;;;;;;;;AAEO,SAASA,gBAAgBC,OAAgB;IAC9C,OAAOC,MAAMC,OAAO,CAACF,WAAWA,OAAO,CAAC,EAAE,GAAGA;AAC/C;AAEO,SAASG,eAAeH,OAAe;IAC5C,sCAAsC;IACtC,OAAOA,OAAO,CAAC,EAAE,KAAK,OAAOA,QAAQI,QAAQ,CAAC;AAChD;AAEO,SAASC,uBAAuBL,OAAe;IACpD,OAAOA,QAAQM,UAAU,CAAC,QAAQN,YAAY;AAChD;AAEO,SAASO,6BACdC,QAAyB,EACzBC,gBAAwB;IAExB,IAAI,CAACD,YAAYA,SAASE,MAAM,KAAK,GAAG;QACtC,OAAO;IACT;IAEA,iFAAiF;IACjF,MAAMC,aACJF,qBAAqB,aACjBD,QAAQ,CAAC,EAAE,GACXA,QAAQ,CAACA,SAASE,MAAM,GAAG,EAAE;IAEnC,sGAAsG;IACtG,oEAAoE;IACpE,OAAOC,eAAeC,sBAAsB,OAAOD;AACrD;AAGO,SAASE,6BACdC,IAAuB,EACvBL,gBAAwB,EACxBM,QAAQ,IAAI,EACZC,cAAwB,EAAE;IAE1B,IAAIC;IACJ,IAAIF,OAAO;QACT,kEAAkE;QAClEE,OAAOH,IAAI,CAAC,EAAE,CAACL,iBAAiB;IAClC,OAAO;QACL,oGAAoG;QACpG,MAAMS,iBAAiBJ,IAAI,CAAC,EAAE;QAC9BG,OAAOC,eAAeC,QAAQ,IAAIC,OAAOC,MAAM,CAACH,eAAe,CAAC,EAAE;IACpE;IAEA,IAAI,CAACD,MAAM,OAAOD;IAClB,MAAMhB,UAAUiB,IAAI,CAAC,EAAE;IAEvB,IAAIK,eAAevB,gBAAgBC;IAEnC,IAAI,CAACsB,gBAAgBA,iBAAiBC,kBAAkB;QACtD,OAAOP;IACT;IAEAA,YAAYQ,IAAI,CAACF;IAEjB,OAAOT,6BACLI,MACAR,kBACA,OACAO;AAEJ;AAEO,MAAMO,mBAAmB,WAAU;AACnC,MAAMX,sBAAsB,cAAa;AACzC,MAAMa,wBAAwB,cAAa","ignoreList":[0]}}, + {"offset": {"line": 11144, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/server-reference-info.ts"],"sourcesContent":["export interface ServerReferenceInfo {\n type: 'server-action' | 'use-cache'\n usedArgs: [boolean, boolean, boolean, boolean, boolean, boolean]\n hasRestArgs: boolean\n}\n\nexport const SERVER_REFERENCE_ID_LENGTH = 42\n\nexport function mightBeServerReferenceId(id: string): boolean {\n return id.length === SERVER_REFERENCE_ID_LENGTH\n}\n\n/**\n * Extracts info about the server reference for the given server reference ID by\n * parsing the first byte of the hex-encoded ID.\n *\n * ```\n * Bit positions: [7] [6] [5] [4] [3] [2] [1] [0]\n * Bits: typeBit argMask restArgs\n * ```\n *\n * If the `typeBit` is `1` the server reference represents a `\"use cache\"`\n * function, otherwise a server action.\n *\n * The `argMask` encodes whether the function uses the argument at the\n * respective position.\n *\n * The `restArgs` bit indicates whether the function uses a rest parameter. It's\n * also set to 1 if the function has more than 6 args.\n *\n * @param id hex-encoded server reference ID\n */\nexport function extractInfoFromServerReferenceId(\n id: string\n): ServerReferenceInfo {\n const infoByte = parseInt(id.slice(0, 2), 16)\n const typeBit = (infoByte >> 7) & 0x1\n const argMask = (infoByte >> 1) & 0x3f\n const restArgs = infoByte & 0x1\n const usedArgs = Array(6)\n\n for (let index = 0; index < 6; index++) {\n const bitPosition = 5 - index\n const bit = (argMask >> bitPosition) & 0x1\n usedArgs[index] = bit === 1\n }\n\n return {\n type: typeBit === 1 ? 'use-cache' : 'server-action',\n usedArgs: usedArgs as [\n boolean,\n boolean,\n boolean,\n boolean,\n boolean,\n boolean,\n ],\n hasRestArgs: restArgs === 1,\n }\n}\n\n/**\n * Creates a sparse array containing only the used arguments based on the\n * provided action info.\n */\nexport function omitUnusedArgs(\n args: unknown[],\n info: ServerReferenceInfo\n): unknown[] {\n const filteredArgs = new Array(args.length)\n let length = 0\n\n for (let index = 0; index < args.length; index++) {\n if (\n (index < 6 && info.usedArgs[index]) ||\n // This assumes that the server reference info byte has the restArgs bit\n // set to 1 if there are more than 6 args.\n (index >= 6 && info.hasRestArgs)\n ) {\n filteredArgs[index] = args[index]\n length = index + 1\n }\n }\n\n // Trim trailing unused args from the array.\n filteredArgs.length = length\n\n return filteredArgs\n}\n"],"names":["SERVER_REFERENCE_ID_LENGTH","mightBeServerReferenceId","id","length","extractInfoFromServerReferenceId","infoByte","parseInt","slice","typeBit","argMask","restArgs","usedArgs","Array","index","bitPosition","bit","type","hasRestArgs","omitUnusedArgs","args","info","filteredArgs"],"mappings":";;;;;;;;;;AAMO,MAAMA,6BAA6B,GAAE;AAErC,SAASC,yBAAyBC,EAAU;IACjD,OAAOA,GAAGC,MAAM,KAAKH;AACvB;AAsBO,SAASI,iCACdF,EAAU;IAEV,MAAMG,WAAWC,SAASJ,GAAGK,KAAK,CAAC,GAAG,IAAI;IAC1C,MAAMC,UAAWH,YAAY,IAAK;IAClC,MAAMI,UAAWJ,YAAY,IAAK;IAClC,MAAMK,WAAWL,WAAW;IAC5B,MAAMM,WAAWC,MAAM;IAEvB,IAAK,IAAIC,QAAQ,GAAGA,QAAQ,GAAGA,QAAS;QACtC,MAAMC,cAAc,IAAID;QACxB,MAAME,MAAON,WAAWK,cAAe;QACvCH,QAAQ,CAACE,MAAM,GAAGE,QAAQ;IAC5B;IAEA,OAAO;QACLC,MAAMR,YAAY,IAAI,cAAc;QACpCG,UAAUA;QAQVM,aAAaP,aAAa;IAC5B;AACF;AAMO,SAASQ,eACdC,IAAe,EACfC,IAAyB;IAEzB,MAAMC,eAAe,IAAIT,MAAMO,KAAKhB,MAAM;IAC1C,IAAIA,SAAS;IAEb,IAAK,IAAIU,QAAQ,GAAGA,QAAQM,KAAKhB,MAAM,EAAEU,QAAS;QAChD,IACGA,QAAQ,KAAKO,KAAKT,QAAQ,CAACE,MAAM,IAClC,wEAAwE;QACxE,0CAA0C;QACzCA,SAAS,KAAKO,KAAKH,WAAW,EAC/B;YACAI,YAAY,CAACR,MAAM,GAAGM,IAAI,CAACN,MAAM;YACjCV,SAASU,QAAQ;QACnB;IACF;IAEA,4CAA4C;IAC5CQ,aAAalB,MAAM,GAAGA;IAEtB,OAAOkB;AACT","ignoreList":[0]}}, + {"offset": {"line": 11194, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/utils.ts"],"sourcesContent":["import type { HtmlProps } from './html-context.shared-runtime'\nimport type { ComponentType, JSX } from 'react'\nimport type { DomainLocale } from '../../server/config'\nimport type { Env } from '@next/env'\nimport type { IncomingMessage, ServerResponse } from 'http'\nimport type { NextRouter } from './router/router'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { PreviewData } from '../../types'\nimport type { COMPILER_NAMES } from './constants'\nimport type fs from 'fs'\n\nexport type NextComponentType<\n Context extends BaseContext = NextPageContext,\n InitialProps = {},\n Props = {},\n> = ComponentType & {\n /**\n * Used for initial page load data population. Data returned from `getInitialProps` is serialized when server rendered.\n * Make sure to return plain `Object` without using `Date`, `Map`, `Set`.\n * @param context Context of `page`\n */\n getInitialProps?(context: Context): InitialProps | Promise\n}\n\nexport type DocumentType = NextComponentType<\n DocumentContext,\n DocumentInitialProps,\n DocumentProps\n>\n\nexport type AppType

= NextComponentType<\n AppContextType,\n P,\n AppPropsType\n>\n\nexport type AppTreeType = ComponentType<\n AppInitialProps & { [name: string]: any }\n>\n\n/**\n * Web vitals provided to _app.reportWebVitals by Core Web Vitals plugin developed by Google Chrome team.\n * https://nextjs.org/blog/next-9-4#integrated-web-vitals-reporting\n */\nexport const WEB_VITALS = ['CLS', 'FCP', 'INP', 'LCP', 'TTFB'] as const\nexport type NextWebVitalsMetric = {\n id: string\n startTime: number\n value: number\n attribution?: { [key: string]: unknown }\n} & (\n | {\n label: 'web-vital'\n name: (typeof WEB_VITALS)[number]\n }\n | {\n label: 'custom'\n name:\n | 'Next.js-hydration'\n | 'Next.js-route-change-to-render'\n | 'Next.js-render'\n }\n)\n\nexport type Enhancer = (Component: C) => C\n\nexport type ComponentsEnhancer =\n | {\n enhanceApp?: Enhancer\n enhanceComponent?: Enhancer\n }\n | Enhancer\n\nexport type RenderPageResult = {\n html: string\n head?: Array\n}\n\nexport type RenderPage = (\n options?: ComponentsEnhancer\n) => DocumentInitialProps | Promise\n\nexport type BaseContext = {\n res?: ServerResponse\n [k: string]: any\n}\n\nexport type NEXT_DATA = {\n props: Record\n page: string\n query: ParsedUrlQuery\n buildId: string\n assetPrefix?: string\n nextExport?: boolean\n autoExport?: boolean\n isFallback?: boolean\n isExperimentalCompile?: boolean\n dynamicIds?: (string | number)[]\n err?: Error & {\n statusCode?: number\n source?: typeof COMPILER_NAMES.server | typeof COMPILER_NAMES.edgeServer\n }\n gsp?: boolean\n gssp?: boolean\n customServer?: boolean\n gip?: boolean\n appGip?: boolean\n locale?: string\n locales?: readonly string[]\n defaultLocale?: string\n domainLocales?: readonly DomainLocale[]\n scriptLoader?: any[]\n isPreview?: boolean\n notFoundSrcPage?: string\n}\n\n/**\n * `Next` context\n */\nexport interface NextPageContext {\n /**\n * Error object if encountered during rendering\n */\n err?: (Error & { statusCode?: number }) | null\n /**\n * `HTTP` request object.\n */\n req?: IncomingMessage\n /**\n * `HTTP` response object.\n */\n res?: ServerResponse\n /**\n * Path section of `URL`.\n */\n pathname: string\n /**\n * Query string section of `URL` parsed as an object.\n */\n query: ParsedUrlQuery\n /**\n * `String` of the actual path including query.\n */\n asPath?: string\n /**\n * The currently active locale\n */\n locale?: string\n /**\n * All configured locales\n */\n locales?: readonly string[]\n /**\n * The configured default locale\n */\n defaultLocale?: string\n /**\n * `Component` the tree of the App to use if needing to render separately\n */\n AppTree: AppTreeType\n}\n\nexport type AppContextType = {\n Component: NextComponentType\n AppTree: AppTreeType\n ctx: NextPageContext\n router: Router\n}\n\nexport type AppInitialProps = {\n pageProps: PageProps\n}\n\nexport type AppPropsType<\n Router extends NextRouter = NextRouter,\n PageProps = {},\n> = AppInitialProps & {\n Component: NextComponentType\n router: Router\n __N_SSG?: boolean\n __N_SSP?: boolean\n}\n\nexport type DocumentContext = NextPageContext & {\n renderPage: RenderPage\n defaultGetInitialProps(\n ctx: DocumentContext,\n options?: { nonce?: string }\n ): Promise\n}\n\nexport type DocumentInitialProps = RenderPageResult & {\n styles?: React.ReactElement[] | Iterable | JSX.Element\n}\n\nexport type DocumentProps = DocumentInitialProps & HtmlProps\n\n/**\n * Next `API` route request\n */\nexport interface NextApiRequest extends IncomingMessage {\n /**\n * Object of `query` values from url\n */\n query: Partial<{\n [key: string]: string | string[]\n }>\n /**\n * Object of `cookies` from header\n */\n cookies: Partial<{\n [key: string]: string\n }>\n\n body: any\n\n env: Env\n\n draftMode?: boolean\n\n preview?: boolean\n /**\n * Preview data set on the request, if any\n * */\n previewData?: PreviewData\n}\n\n/**\n * Send body of response\n */\ntype Send = (body: T) => void\n\n/**\n * Next `API` route response\n */\nexport type NextApiResponse = ServerResponse & {\n /**\n * Send data `any` data in response\n */\n send: Send\n /**\n * Send data `json` data in response\n */\n json: Send\n status: (statusCode: number) => NextApiResponse\n redirect(url: string): NextApiResponse\n redirect(status: number, url: string): NextApiResponse\n\n /**\n * Set draft mode\n */\n setDraftMode: (options: { enable: boolean }) => NextApiResponse\n\n /**\n * Set preview data for Next.js' prerender mode\n */\n setPreviewData: (\n data: object | string,\n options?: {\n /**\n * Specifies the number (in seconds) for the preview session to last for.\n * The given number will be converted to an integer by rounding down.\n * By default, no maximum age is set and the preview session finishes\n * when the client shuts down (browser is closed).\n */\n maxAge?: number\n /**\n * Specifies the path for the preview session to work under. By default,\n * the path is considered the \"default path\", i.e., any pages under \"/\".\n */\n path?: string\n }\n ) => NextApiResponse\n\n /**\n * Clear preview data for Next.js' prerender mode\n */\n clearPreviewData: (options?: { path?: string }) => NextApiResponse\n\n /**\n * Revalidate a specific page and regenerate it using On-Demand Incremental\n * Static Regeneration.\n * The path should be an actual path, not a rewritten path. E.g. for\n * \"/blog/[slug]\" this should be \"/blog/post-1\".\n * @link https://nextjs.org/docs/app/building-your-application/data-fetching/incremental-static-regeneration#on-demand-revalidation-with-revalidatepath\n */\n revalidate: (\n urlPath: string,\n opts?: {\n unstable_onlyGenerated?: boolean\n }\n ) => Promise\n}\n\n/**\n * Next `API` route handler\n */\nexport type NextApiHandler = (\n req: NextApiRequest,\n res: NextApiResponse\n) => unknown | Promise\n\n/**\n * Utils\n */\nexport function execOnce ReturnType>(\n fn: T\n): T {\n let used = false\n let result: ReturnType\n\n return ((...args: any[]) => {\n if (!used) {\n used = true\n result = fn(...args)\n }\n return result\n }) as T\n}\n\n// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1\n// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\nconst ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/\nexport const isAbsoluteUrl = (url: string) => {\n // Fast path: an absolute URL must start with a letter (the scheme).\n // Check for a-z and A-Z without the cost of the regex.\n const c = url.charCodeAt(0)\n const isLetter =\n (c >= 65 /* A */ && c <= 90) /* Z */ ||\n (c >= 97 /* a */ && c <= 122) /* z */\n if (!isLetter) {\n return false\n }\n\n return ABSOLUTE_URL_REGEX.test(url)\n}\n\nexport function getLocationOrigin() {\n const { protocol, hostname, port } = window.location\n return `${protocol}//${hostname}${port ? ':' + port : ''}`\n}\n\nexport function getURL() {\n const { href } = window.location\n const origin = getLocationOrigin()\n return href.substring(origin.length)\n}\n\nexport function getDisplayName

(Component: ComponentType

) {\n return typeof Component === 'string'\n ? Component\n : Component.displayName || Component.name || 'Unknown'\n}\n\nexport function isResSent(res: ServerResponse) {\n return res.finished || res.headersSent\n}\n\nexport function normalizeRepeatedSlashes(url: string) {\n const urlParts = url.split('?')\n const urlNoQuery = urlParts[0]\n\n return (\n urlNoQuery\n // first we replace any non-encoded backslashes with forward\n // then normalize repeated forward slashes\n .replace(/\\\\/g, '/')\n .replace(/\\/\\/+/g, '/') +\n (urlParts[1] ? `?${urlParts.slice(1).join('?')}` : '')\n )\n}\n\nexport async function loadGetInitialProps<\n C extends BaseContext,\n IP = {},\n P = {},\n>(App: NextComponentType, ctx: C): Promise {\n if (process.env.NODE_ENV !== 'production') {\n if (App.prototype?.getInitialProps) {\n const message = `\"${getDisplayName(\n App\n )}.getInitialProps()\" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.`\n throw new Error(message)\n }\n }\n // when called from _app `ctx` is nested in `ctx`\n const res = ctx.res || (ctx.ctx && ctx.ctx.res)\n\n if (!App.getInitialProps) {\n if (ctx.ctx && ctx.Component) {\n // @ts-ignore pageProps default\n return {\n pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx),\n }\n }\n return {} as IP\n }\n\n const props = await App.getInitialProps(ctx)\n\n if (res && isResSent(res)) {\n return props\n }\n\n if (!props) {\n const message = `\"${getDisplayName(\n App\n )}.getInitialProps()\" should resolve to an object. But found \"${props}\" instead.`\n throw new Error(message)\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (Object.keys(props).length === 0 && !ctx.ctx) {\n console.warn(\n `${getDisplayName(\n App\n )} returned an empty object from \\`getInitialProps\\`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps`\n )\n }\n }\n\n return props\n}\n\nexport const SP = typeof performance !== 'undefined'\nexport const ST =\n SP &&\n (['mark', 'measure', 'getEntriesByName'] as const).every(\n (method) => typeof performance[method] === 'function'\n )\n\nexport class DecodeError extends Error {}\nexport class NormalizeError extends Error {}\nexport class PageNotFoundError extends Error {\n code: string\n\n constructor(page: string) {\n super()\n this.code = 'ENOENT'\n this.name = 'PageNotFoundError'\n this.message = `Cannot find module for page: ${page}`\n }\n}\n\nexport class MissingStaticPage extends Error {\n constructor(page: string, message: string) {\n super()\n this.message = `Failed to load static file for page: ${page} ${message}`\n }\n}\n\nexport class MiddlewareNotFoundError extends Error {\n code: string\n constructor() {\n super()\n this.code = 'ENOENT'\n this.message = `Cannot find the middleware module`\n }\n}\n\nexport interface CacheFs {\n existsSync: typeof fs.existsSync\n readFile: typeof fs.promises.readFile\n readFileSync: typeof fs.readFileSync\n writeFile(f: string, d: any): Promise\n /** Publish a complete file without replacing an existing destination. */\n writeFileAtomic?(f: string, d: any): Promise\n mkdir(dir: string): Promise\n stat(f: string): Promise<{ mtime: Date }>\n}\n\nexport function stringifyError(error: Error) {\n return JSON.stringify({ message: error.message, stack: error.stack })\n}\n"],"names":["WEB_VITALS","execOnce","fn","used","result","args","ABSOLUTE_URL_REGEX","isAbsoluteUrl","url","c","charCodeAt","isLetter","test","getLocationOrigin","protocol","hostname","port","window","location","getURL","href","origin","substring","length","getDisplayName","Component","displayName","name","isResSent","res","finished","headersSent","normalizeRepeatedSlashes","urlParts","split","urlNoQuery","replace","slice","join","loadGetInitialProps","App","ctx","process","env","NODE_ENV","prototype","getInitialProps","message","Error","pageProps","props","Object","keys","console","warn","SP","performance","ST","every","method","DecodeError","NormalizeError","PageNotFoundError","constructor","page","code","MissingStaticPage","MiddlewareNotFoundError","stringifyError","error","JSON","stringify","stack"],"mappings":"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","ignoreList":[0]}}, + {"offset": {"line": 11360, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/shared/lib/utils/reflect-utils.ts"],"sourcesContent":["// This regex will have fast negatives meaning valid identifiers may not pass\n// this test. However this is only used during static generation to provide hints\n// about why a page bailed out of some or all prerendering and we can use bracket notation\n// for example while `ಠ_ಠ` is a valid identifier it's ok to print `searchParams['ಠ_ಠ']`\n// even if this would have been fine too `searchParams.ಠ_ಠ`\nconst isDefinitelyAValidIdentifier = /^[A-Za-z_$][A-Za-z0-9_$]*$/\n\nexport function describeStringPropertyAccess(target: string, prop: string) {\n if (isDefinitelyAValidIdentifier.test(prop)) {\n return `\\`${target}.${prop}\\``\n }\n return `\\`${target}[${JSON.stringify(prop)}]\\``\n}\n\nexport function describeHasCheckingStringProperty(\n target: string,\n prop: string\n) {\n const stringifiedProp = JSON.stringify(prop)\n return `\\`Reflect.has(${target}, ${stringifiedProp})\\`, \\`${stringifiedProp} in ${target}\\`, or similar`\n}\n\nexport const wellKnownProperties = new Set([\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toString',\n 'valueOf',\n 'toLocaleString',\n\n // Promise prototype\n 'then',\n 'catch',\n 'finally',\n\n // React Promise extension\n 'status',\n // 'value',\n // 'error',\n\n // React introspection\n 'displayName',\n '_debugInfo',\n\n // Common tested properties\n 'toJSON',\n '$$typeof',\n '__esModule',\n\n // Tested by flight when checking for iterables\n '@@iterator',\n])\n"],"names":["isDefinitelyAValidIdentifier","describeStringPropertyAccess","target","prop","test","JSON","stringify","describeHasCheckingStringProperty","stringifiedProp","wellKnownProperties","Set"],"mappings":";;;;;;;;AAAA,6EAA6E;AAC7E,iFAAiF;AACjF,0FAA0F;AAC1F,uFAAuF;AACvF,2DAA2D;AAC3D,MAAMA,+BAA+B;AAE9B,SAASC,6BAA6BC,MAAc,EAAEC,IAAY;IACvE,IAAIH,6BAA6BI,IAAI,CAACD,OAAO;QAC3C,OAAO,CAAC,EAAE,EAAED,OAAO,CAAC,EAAEC,KAAK,EAAE,CAAC;IAChC;IACA,OAAO,CAAC,EAAE,EAAED,OAAO,CAAC,EAAEG,KAAKC,SAAS,CAACH,MAAM,GAAG,CAAC;AACjD;AAEO,SAASI,kCACdL,MAAc,EACdC,IAAY;IAEZ,MAAMK,kBAAkBH,KAAKC,SAAS,CAACH;IACvC,OAAO,CAAC,cAAc,EAAED,OAAO,EAAE,EAAEM,gBAAgB,OAAO,EAAEA,gBAAgB,IAAI,EAAEN,OAAO,cAAc,CAAC;AAC1G;AAEO,MAAMO,sBAAsB,IAAIC,IAAI;IACzC;IACA;IACA;IACA;IACA;IACA;IAEA,oBAAoB;IACpB;IACA;IACA;IAEA,0BAA0B;IAC1B;IACA,WAAW;IACX,WAAW;IAEX,sBAAsB;IACtB;IACA;IAEA,2BAA2B;IAC3B;IACA;IACA;IAEA,+CAA+C;IAC/C;CACD,EAAC","ignoreList":[0]}}, + {"offset": {"line": 11413, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/route-modules/app-page/module.compiled.js"],"sourcesContent":["if (process.env.NEXT_RUNTIME === 'edge') {\n module.exports = require('next/dist/server/route-modules/app-page/module.js')\n} else {\n if (process.env.__NEXT_EXPERIMENTAL_REACT) {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page-experimental.runtime.prod.js')\n }\n }\n } else {\n if (process.env.NODE_ENV === 'development') {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.dev.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.dev.js')\n }\n } else {\n if (process.env.TURBOPACK) {\n module.exports = require('next/dist/compiled/next-server/app-page-turbo.runtime.prod.js')\n } else {\n module.exports = require('next/dist/compiled/next-server/app-page.runtime.prod.js')\n }\n }\n }\n}\n"],"names":["process","env","NEXT_RUNTIME","module","exports","require","__NEXT_EXPERIMENTAL_REACT","NODE_ENV","TURBOPACK"],"mappings":"AAAA,IAAIA,QAAQC,GAAG,CAACC,YAAY,KAAK,QAAQ;;KAElC;IACL,IAAIF,QAAQC,GAAG,CAACK,yBAAyB,EAAE;;SAcpC;QACL,IAAIN,QAAQC,GAAG,CAACM,QAAQ,KAAK,WAAe;YAC1C,IAAIP,QAAQC,GAAG,CAACO,SAAS,eAAE;gBACzBL,OAAOC,OAAO,GAAGC,QAAQ;YAC3B,OAAO;;QAGT,OAAO;;IAOT;AACF","ignoreList":[0]}}, + {"offset": {"line": 11432, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/src/server/route-modules/app-page/vendored/rsc/react.ts"],"sourcesContent":["module.exports = (\n require('../../module.compiled') as typeof import('../../module.compiled')\n).vendored['react-rsc']!.React\n"],"names":["module","exports","require","vendored","React"],"mappings":"AAAAA,OAAOC,OAAO,GACZC,QAAQ,8HACRC,QAAQ,CAAC,YAAY,CAAEC,KAAK","ignoreList":[0]}}, + {"offset": {"line": 11437, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/dist/compiled/@opentelemetry/api/index.js"],"sourcesContent":["(()=>{\"use strict\";var e={912:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ContextAPI=void 0;const n=r(108);const a=r(221);const o=r(44);const i=\"context\";const c=new n.NoopContextManager;class ContextAPI{constructor(){}static getInstance(){if(!this._instance){this._instance=new ContextAPI}return this._instance}setGlobalContextManager(e){return(0,a.registerGlobal)(i,e,o.DiagAPI.instance())}active(){return this._getContextManager().active()}with(e,t,r,...n){return this._getContextManager().with(e,t,r,...n)}bind(e,t){return this._getContextManager().bind(e,t)}_getContextManager(){return(0,a.getGlobal)(i)||c}disable(){this._getContextManager().disable();(0,a.unregisterGlobal)(i,o.DiagAPI.instance())}}t.ContextAPI=ContextAPI},44:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.DiagAPI=void 0;const n=r(757);const a=r(412);const o=r(711);const i=r(221);const c=\"diag\";class DiagAPI{constructor(){function _logProxy(e){return function(...t){const r=(0,i.getGlobal)(\"diag\");if(!r)return;return r[e](...t)}}const e=this;const setLogger=(t,r={logLevel:o.DiagLogLevel.INFO})=>{var n,c,s;if(t===e){const t=new Error(\"Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation\");e.error((n=t.stack)!==null&&n!==void 0?n:t.message);return false}if(typeof r===\"number\"){r={logLevel:r}}const u=(0,i.getGlobal)(\"diag\");const l=(0,a.createLogLevelDiagLogger)((c=r.logLevel)!==null&&c!==void 0?c:o.DiagLogLevel.INFO,t);if(u&&!r.suppressOverrideMessage){const e=(s=(new Error).stack)!==null&&s!==void 0?s:\"\";u.warn(`Current logger will be overwritten from ${e}`);l.warn(`Current logger will overwrite one already registered from ${e}`)}return(0,i.registerGlobal)(\"diag\",l,e,true)};e.setLogger=setLogger;e.disable=()=>{(0,i.unregisterGlobal)(c,e)};e.createComponentLogger=e=>new n.DiagComponentLogger(e);e.verbose=_logProxy(\"verbose\");e.debug=_logProxy(\"debug\");e.info=_logProxy(\"info\");e.warn=_logProxy(\"warn\");e.error=_logProxy(\"error\")}static instance(){if(!this._instance){this._instance=new DiagAPI}return this._instance}}t.DiagAPI=DiagAPI},262:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.MetricsAPI=void 0;const n=r(586);const a=r(221);const o=r(44);const i=\"metrics\";class MetricsAPI{constructor(){}static getInstance(){if(!this._instance){this._instance=new MetricsAPI}return this._instance}setGlobalMeterProvider(e){return(0,a.registerGlobal)(i,e,o.DiagAPI.instance())}getMeterProvider(){return(0,a.getGlobal)(i)||n.NOOP_METER_PROVIDER}getMeter(e,t,r){return this.getMeterProvider().getMeter(e,t,r)}disable(){(0,a.unregisterGlobal)(i,o.DiagAPI.instance())}}t.MetricsAPI=MetricsAPI},25:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.PropagationAPI=void 0;const n=r(221);const a=r(19);const o=r(92);const i=r(398);const c=r(504);const s=r(44);const u=\"propagation\";const l=new a.NoopTextMapPropagator;class PropagationAPI{constructor(){this.createBaggage=c.createBaggage;this.getBaggage=i.getBaggage;this.getActiveBaggage=i.getActiveBaggage;this.setBaggage=i.setBaggage;this.deleteBaggage=i.deleteBaggage}static getInstance(){if(!this._instance){this._instance=new PropagationAPI}return this._instance}setGlobalPropagator(e){return(0,n.registerGlobal)(u,e,s.DiagAPI.instance())}inject(e,t,r=o.defaultTextMapSetter){return this._getGlobalPropagator().inject(e,t,r)}extract(e,t,r=o.defaultTextMapGetter){return this._getGlobalPropagator().extract(e,t,r)}fields(){return this._getGlobalPropagator().fields()}disable(){(0,n.unregisterGlobal)(u,s.DiagAPI.instance())}_getGlobalPropagator(){return(0,n.getGlobal)(u)||l}}t.PropagationAPI=PropagationAPI},397:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.TraceAPI=void 0;const n=r(221);const a=r(498);const o=r(477);const i=r(793);const c=r(44);const s=\"trace\";class TraceAPI{constructor(){this._proxyTracerProvider=new a.ProxyTracerProvider;this.wrapSpanContext=o.wrapSpanContext;this.isSpanContextValid=o.isSpanContextValid;this.deleteSpan=i.deleteSpan;this.getSpan=i.getSpan;this.getActiveSpan=i.getActiveSpan;this.getSpanContext=i.getSpanContext;this.setSpan=i.setSpan;this.setSpanContext=i.setSpanContext}static getInstance(){if(!this._instance){this._instance=new TraceAPI}return this._instance}setGlobalTracerProvider(e){const t=(0,n.registerGlobal)(s,this._proxyTracerProvider,c.DiagAPI.instance());if(t){this._proxyTracerProvider.setDelegate(e)}return t}getTracerProvider(){return(0,n.getGlobal)(s)||this._proxyTracerProvider}getTracer(e,t){return this.getTracerProvider().getTracer(e,t)}disable(){(0,n.unregisterGlobal)(s,c.DiagAPI.instance());this._proxyTracerProvider=new a.ProxyTracerProvider}}t.TraceAPI=TraceAPI},398:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.deleteBaggage=t.setBaggage=t.getActiveBaggage=t.getBaggage=void 0;const n=r(912);const a=r(23);const o=(0,a.createContextKey)(\"OpenTelemetry Baggage Key\");function getBaggage(e){return e.getValue(o)||undefined}t.getBaggage=getBaggage;function getActiveBaggage(){return getBaggage(n.ContextAPI.getInstance().active())}t.getActiveBaggage=getActiveBaggage;function setBaggage(e,t){return e.setValue(o,t)}t.setBaggage=setBaggage;function deleteBaggage(e){return e.deleteValue(o)}t.deleteBaggage=deleteBaggage},152:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.BaggageImpl=void 0;class BaggageImpl{constructor(e){this._entries=e?new Map(e):new Map}getEntry(e){const t=this._entries.get(e);if(!t){return undefined}return Object.assign({},t)}getAllEntries(){return Array.from(this._entries.entries()).map((([e,t])=>[e,t]))}setEntry(e,t){const r=new BaggageImpl(this._entries);r._entries.set(e,t);return r}removeEntry(e){const t=new BaggageImpl(this._entries);t._entries.delete(e);return t}removeEntries(...e){const t=new BaggageImpl(this._entries);for(const r of e){t._entries.delete(r)}return t}clear(){return new BaggageImpl}}t.BaggageImpl=BaggageImpl},647:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.baggageEntryMetadataSymbol=void 0;t.baggageEntryMetadataSymbol=Symbol(\"BaggageEntryMetadata\")},504:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.baggageEntryMetadataFromString=t.createBaggage=void 0;const n=r(44);const a=r(152);const o=r(647);const i=n.DiagAPI.instance();function createBaggage(e={}){return new a.BaggageImpl(new Map(Object.entries(e)))}t.createBaggage=createBaggage;function baggageEntryMetadataFromString(e){if(typeof e!==\"string\"){i.error(`Cannot create baggage metadata from unknown type: ${typeof e}`);e=\"\"}return{__TYPE__:o.baggageEntryMetadataSymbol,toString(){return e}}}t.baggageEntryMetadataFromString=baggageEntryMetadataFromString},778:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.context=void 0;const n=r(912);t.context=n.ContextAPI.getInstance()},108:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NoopContextManager=void 0;const n=r(23);class NoopContextManager{active(){return n.ROOT_CONTEXT}with(e,t,r,...n){return t.call(r,...n)}bind(e,t){return t}enable(){return this}disable(){return this}}t.NoopContextManager=NoopContextManager},23:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ROOT_CONTEXT=t.createContextKey=void 0;function createContextKey(e){return Symbol.for(e)}t.createContextKey=createContextKey;class BaseContext{constructor(e){const t=this;t._currentContext=e?new Map(e):new Map;t.getValue=e=>t._currentContext.get(e);t.setValue=(e,r)=>{const n=new BaseContext(t._currentContext);n._currentContext.set(e,r);return n};t.deleteValue=e=>{const r=new BaseContext(t._currentContext);r._currentContext.delete(e);return r}}}t.ROOT_CONTEXT=new BaseContext},304:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.diag=void 0;const n=r(44);t.diag=n.DiagAPI.instance()},757:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.DiagComponentLogger=void 0;const n=r(221);class DiagComponentLogger{constructor(e){this._namespace=e.namespace||\"DiagComponentLogger\"}debug(...e){return logProxy(\"debug\",this._namespace,e)}error(...e){return logProxy(\"error\",this._namespace,e)}info(...e){return logProxy(\"info\",this._namespace,e)}warn(...e){return logProxy(\"warn\",this._namespace,e)}verbose(...e){return logProxy(\"verbose\",this._namespace,e)}}t.DiagComponentLogger=DiagComponentLogger;function logProxy(e,t,r){const a=(0,n.getGlobal)(\"diag\");if(!a){return}r.unshift(t);return a[e](...r)}},83:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.DiagConsoleLogger=void 0;const r=[{n:\"error\",c:\"error\"},{n:\"warn\",c:\"warn\"},{n:\"info\",c:\"info\"},{n:\"debug\",c:\"debug\"},{n:\"verbose\",c:\"trace\"}];class DiagConsoleLogger{constructor(){function _consoleFunc(e){return function(...t){if(console){let r=console[e];if(typeof r!==\"function\"){r=console.log}if(typeof r===\"function\"){return r.apply(console,t)}}}}for(let e=0;e{Object.defineProperty(t,\"__esModule\",{value:true});t.createLogLevelDiagLogger=void 0;const n=r(711);function createLogLevelDiagLogger(e,t){if(en.DiagLogLevel.ALL){e=n.DiagLogLevel.ALL}t=t||{};function _filterFunc(r,n){const a=t[r];if(typeof a===\"function\"&&e>=n){return a.bind(t)}return function(){}}return{error:_filterFunc(\"error\",n.DiagLogLevel.ERROR),warn:_filterFunc(\"warn\",n.DiagLogLevel.WARN),info:_filterFunc(\"info\",n.DiagLogLevel.INFO),debug:_filterFunc(\"debug\",n.DiagLogLevel.DEBUG),verbose:_filterFunc(\"verbose\",n.DiagLogLevel.VERBOSE)}}t.createLogLevelDiagLogger=createLogLevelDiagLogger},711:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.DiagLogLevel=void 0;var r;(function(e){e[e[\"NONE\"]=0]=\"NONE\";e[e[\"ERROR\"]=30]=\"ERROR\";e[e[\"WARN\"]=50]=\"WARN\";e[e[\"INFO\"]=60]=\"INFO\";e[e[\"DEBUG\"]=70]=\"DEBUG\";e[e[\"VERBOSE\"]=80]=\"VERBOSE\";e[e[\"ALL\"]=9999]=\"ALL\"})(r=t.DiagLogLevel||(t.DiagLogLevel={}))},221:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.unregisterGlobal=t.getGlobal=t.registerGlobal=void 0;const n=r(678);const a=r(652);const o=r(662);const i=a.VERSION.split(\".\")[0];const c=Symbol.for(`opentelemetry.js.api.${i}`);const s=n._globalThis;function registerGlobal(e,t,r,n=false){var o;const i=s[c]=(o=s[c])!==null&&o!==void 0?o:{version:a.VERSION};if(!n&&i[e]){const t=new Error(`@opentelemetry/api: Attempted duplicate registration of API: ${e}`);r.error(t.stack||t.message);return false}if(i.version!==a.VERSION){const t=new Error(`@opentelemetry/api: Registration of version v${i.version} for ${e} does not match previously registered API v${a.VERSION}`);r.error(t.stack||t.message);return false}i[e]=t;r.debug(`@opentelemetry/api: Registered a global for ${e} v${a.VERSION}.`);return true}t.registerGlobal=registerGlobal;function getGlobal(e){var t,r;const n=(t=s[c])===null||t===void 0?void 0:t.version;if(!n||!(0,o.isCompatible)(n)){return}return(r=s[c])===null||r===void 0?void 0:r[e]}t.getGlobal=getGlobal;function unregisterGlobal(e,t){t.debug(`@opentelemetry/api: Unregistering a global for ${e} v${a.VERSION}.`);const r=s[c];if(r){delete r[e]}}t.unregisterGlobal=unregisterGlobal},662:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.isCompatible=t._makeCompatibilityCheck=void 0;const n=r(652);const a=/^(\\d+)\\.(\\d+)\\.(\\d+)(-(.+))?$/;function _makeCompatibilityCheck(e){const t=new Set([e]);const r=new Set;const n=e.match(a);if(!n){return()=>false}const o={major:+n[1],minor:+n[2],patch:+n[3],prerelease:n[4]};if(o.prerelease!=null){return function isExactmatch(t){return t===e}}function _reject(e){r.add(e);return false}function _accept(e){t.add(e);return true}return function isCompatible(e){if(t.has(e)){return true}if(r.has(e)){return false}const n=e.match(a);if(!n){return _reject(e)}const i={major:+n[1],minor:+n[2],patch:+n[3],prerelease:n[4]};if(i.prerelease!=null){return _reject(e)}if(o.major!==i.major){return _reject(e)}if(o.major===0){if(o.minor===i.minor&&o.patch<=i.patch){return _accept(e)}return _reject(e)}if(o.minor<=i.minor){return _accept(e)}return _reject(e)}}t._makeCompatibilityCheck=_makeCompatibilityCheck;t.isCompatible=_makeCompatibilityCheck(n.VERSION)},120:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.metrics=void 0;const n=r(262);t.metrics=n.MetricsAPI.getInstance()},532:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ValueType=void 0;var r;(function(e){e[e[\"INT\"]=0]=\"INT\";e[e[\"DOUBLE\"]=1]=\"DOUBLE\"})(r=t.ValueType||(t.ValueType={}))},440:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.createNoopMeter=t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC=t.NOOP_OBSERVABLE_GAUGE_METRIC=t.NOOP_OBSERVABLE_COUNTER_METRIC=t.NOOP_UP_DOWN_COUNTER_METRIC=t.NOOP_HISTOGRAM_METRIC=t.NOOP_COUNTER_METRIC=t.NOOP_METER=t.NoopObservableUpDownCounterMetric=t.NoopObservableGaugeMetric=t.NoopObservableCounterMetric=t.NoopObservableMetric=t.NoopHistogramMetric=t.NoopUpDownCounterMetric=t.NoopCounterMetric=t.NoopMetric=t.NoopMeter=void 0;class NoopMeter{constructor(){}createHistogram(e,r){return t.NOOP_HISTOGRAM_METRIC}createCounter(e,r){return t.NOOP_COUNTER_METRIC}createUpDownCounter(e,r){return t.NOOP_UP_DOWN_COUNTER_METRIC}createObservableGauge(e,r){return t.NOOP_OBSERVABLE_GAUGE_METRIC}createObservableCounter(e,r){return t.NOOP_OBSERVABLE_COUNTER_METRIC}createObservableUpDownCounter(e,r){return t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC}addBatchObservableCallback(e,t){}removeBatchObservableCallback(e){}}t.NoopMeter=NoopMeter;class NoopMetric{}t.NoopMetric=NoopMetric;class NoopCounterMetric extends NoopMetric{add(e,t){}}t.NoopCounterMetric=NoopCounterMetric;class NoopUpDownCounterMetric extends NoopMetric{add(e,t){}}t.NoopUpDownCounterMetric=NoopUpDownCounterMetric;class NoopHistogramMetric extends NoopMetric{record(e,t){}}t.NoopHistogramMetric=NoopHistogramMetric;class NoopObservableMetric{addCallback(e){}removeCallback(e){}}t.NoopObservableMetric=NoopObservableMetric;class NoopObservableCounterMetric extends NoopObservableMetric{}t.NoopObservableCounterMetric=NoopObservableCounterMetric;class NoopObservableGaugeMetric extends NoopObservableMetric{}t.NoopObservableGaugeMetric=NoopObservableGaugeMetric;class NoopObservableUpDownCounterMetric extends NoopObservableMetric{}t.NoopObservableUpDownCounterMetric=NoopObservableUpDownCounterMetric;t.NOOP_METER=new NoopMeter;t.NOOP_COUNTER_METRIC=new NoopCounterMetric;t.NOOP_HISTOGRAM_METRIC=new NoopHistogramMetric;t.NOOP_UP_DOWN_COUNTER_METRIC=new NoopUpDownCounterMetric;t.NOOP_OBSERVABLE_COUNTER_METRIC=new NoopObservableCounterMetric;t.NOOP_OBSERVABLE_GAUGE_METRIC=new NoopObservableGaugeMetric;t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC=new NoopObservableUpDownCounterMetric;function createNoopMeter(){return t.NOOP_METER}t.createNoopMeter=createNoopMeter},586:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NOOP_METER_PROVIDER=t.NoopMeterProvider=void 0;const n=r(440);class NoopMeterProvider{getMeter(e,t,r){return n.NOOP_METER}}t.NoopMeterProvider=NoopMeterProvider;t.NOOP_METER_PROVIDER=new NoopMeterProvider},678:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var a=this&&this.__exportStar||function(e,t){for(var r in e)if(r!==\"default\"&&!Object.prototype.hasOwnProperty.call(t,r))n(t,e,r)};Object.defineProperty(t,\"__esModule\",{value:true});a(r(59),t)},460:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t._globalThis=void 0;t._globalThis=typeof globalThis===\"object\"?globalThis:global},59:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var a=this&&this.__exportStar||function(e,t){for(var r in e)if(r!==\"default\"&&!Object.prototype.hasOwnProperty.call(t,r))n(t,e,r)};Object.defineProperty(t,\"__esModule\",{value:true});a(r(460),t)},27:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.propagation=void 0;const n=r(25);t.propagation=n.PropagationAPI.getInstance()},19:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NoopTextMapPropagator=void 0;class NoopTextMapPropagator{inject(e,t){}extract(e,t){return e}fields(){return[]}}t.NoopTextMapPropagator=NoopTextMapPropagator},92:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.defaultTextMapSetter=t.defaultTextMapGetter=void 0;t.defaultTextMapGetter={get(e,t){if(e==null){return undefined}return e[t]},keys(e){if(e==null){return[]}return Object.keys(e)}};t.defaultTextMapSetter={set(e,t,r){if(e==null){return}e[t]=r}}},816:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.trace=void 0;const n=r(397);t.trace=n.TraceAPI.getInstance()},374:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NonRecordingSpan=void 0;const n=r(546);class NonRecordingSpan{constructor(e=n.INVALID_SPAN_CONTEXT){this._spanContext=e}spanContext(){return this._spanContext}setAttribute(e,t){return this}setAttributes(e){return this}addEvent(e,t){return this}setStatus(e){return this}updateName(e){return this}end(e){}isRecording(){return false}recordException(e,t){}}t.NonRecordingSpan=NonRecordingSpan},637:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NoopTracer=void 0;const n=r(912);const a=r(793);const o=r(374);const i=r(477);const c=n.ContextAPI.getInstance();class NoopTracer{startSpan(e,t,r=c.active()){const n=Boolean(t===null||t===void 0?void 0:t.root);if(n){return new o.NonRecordingSpan}const s=r&&(0,a.getSpanContext)(r);if(isSpanContext(s)&&(0,i.isSpanContextValid)(s)){return new o.NonRecordingSpan(s)}else{return new o.NonRecordingSpan}}startActiveSpan(e,t,r,n){let o;let i;let s;if(arguments.length<2){return}else if(arguments.length===2){s=t}else if(arguments.length===3){o=t;s=r}else{o=t;i=r;s=n}const u=i!==null&&i!==void 0?i:c.active();const l=this.startSpan(e,o,u);const g=(0,a.setSpan)(u,l);return c.with(g,s,undefined,l)}}t.NoopTracer=NoopTracer;function isSpanContext(e){return typeof e===\"object\"&&typeof e[\"spanId\"]===\"string\"&&typeof e[\"traceId\"]===\"string\"&&typeof e[\"traceFlags\"]===\"number\"}},76:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NoopTracerProvider=void 0;const n=r(637);class NoopTracerProvider{getTracer(e,t,r){return new n.NoopTracer}}t.NoopTracerProvider=NoopTracerProvider},779:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ProxyTracer=void 0;const n=r(637);const a=new n.NoopTracer;class ProxyTracer{constructor(e,t,r,n){this._provider=e;this.name=t;this.version=r;this.options=n}startSpan(e,t,r){return this._getTracer().startSpan(e,t,r)}startActiveSpan(e,t,r,n){const a=this._getTracer();return Reflect.apply(a.startActiveSpan,a,arguments)}_getTracer(){if(this._delegate){return this._delegate}const e=this._provider.getDelegateTracer(this.name,this.version,this.options);if(!e){return a}this._delegate=e;return this._delegate}}t.ProxyTracer=ProxyTracer},498:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ProxyTracerProvider=void 0;const n=r(779);const a=r(76);const o=new a.NoopTracerProvider;class ProxyTracerProvider{getTracer(e,t,r){var a;return(a=this.getDelegateTracer(e,t,r))!==null&&a!==void 0?a:new n.ProxyTracer(this,e,t,r)}getDelegate(){var e;return(e=this._delegate)!==null&&e!==void 0?e:o}setDelegate(e){this._delegate=e}getDelegateTracer(e,t,r){var n;return(n=this._delegate)===null||n===void 0?void 0:n.getTracer(e,t,r)}}t.ProxyTracerProvider=ProxyTracerProvider},312:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.SamplingDecision=void 0;var r;(function(e){e[e[\"NOT_RECORD\"]=0]=\"NOT_RECORD\";e[e[\"RECORD\"]=1]=\"RECORD\";e[e[\"RECORD_AND_SAMPLED\"]=2]=\"RECORD_AND_SAMPLED\"})(r=t.SamplingDecision||(t.SamplingDecision={}))},793:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.getSpanContext=t.setSpanContext=t.deleteSpan=t.setSpan=t.getActiveSpan=t.getSpan=void 0;const n=r(23);const a=r(374);const o=r(912);const i=(0,n.createContextKey)(\"OpenTelemetry Context Key SPAN\");function getSpan(e){return e.getValue(i)||undefined}t.getSpan=getSpan;function getActiveSpan(){return getSpan(o.ContextAPI.getInstance().active())}t.getActiveSpan=getActiveSpan;function setSpan(e,t){return e.setValue(i,t)}t.setSpan=setSpan;function deleteSpan(e){return e.deleteValue(i)}t.deleteSpan=deleteSpan;function setSpanContext(e,t){return setSpan(e,new a.NonRecordingSpan(t))}t.setSpanContext=setSpanContext;function getSpanContext(e){var t;return(t=getSpan(e))===null||t===void 0?void 0:t.spanContext()}t.getSpanContext=getSpanContext},285:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.TraceStateImpl=void 0;const n=r(240);const a=32;const o=512;const i=\",\";const c=\"=\";class TraceStateImpl{constructor(e){this._internalState=new Map;if(e)this._parse(e)}set(e,t){const r=this._clone();if(r._internalState.has(e)){r._internalState.delete(e)}r._internalState.set(e,t);return r}unset(e){const t=this._clone();t._internalState.delete(e);return t}get(e){return this._internalState.get(e)}serialize(){return this._keys().reduce(((e,t)=>{e.push(t+c+this.get(t));return e}),[]).join(i)}_parse(e){if(e.length>o)return;this._internalState=e.split(i).reverse().reduce(((e,t)=>{const r=t.trim();const a=r.indexOf(c);if(a!==-1){const o=r.slice(0,a);const i=r.slice(a+1,t.length);if((0,n.validateKey)(o)&&(0,n.validateValue)(i)){e.set(o,i)}else{}}return e}),new Map);if(this._internalState.size>a){this._internalState=new Map(Array.from(this._internalState.entries()).reverse().slice(0,a))}}_keys(){return Array.from(this._internalState.keys()).reverse()}_clone(){const e=new TraceStateImpl;e._internalState=new Map(this._internalState);return e}}t.TraceStateImpl=TraceStateImpl},240:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.validateValue=t.validateKey=void 0;const r=\"[_0-9a-z-*/]\";const n=`[a-z]${r}{0,255}`;const a=`[a-z0-9]${r}{0,240}@[a-z]${r}{0,13}`;const o=new RegExp(`^(?:${n}|${a})$`);const i=/^[ -~]{0,255}[!-~]$/;const c=/,|=/;function validateKey(e){return o.test(e)}t.validateKey=validateKey;function validateValue(e){return i.test(e)&&!c.test(e)}t.validateValue=validateValue},87:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.createTraceState=void 0;const n=r(285);function createTraceState(e){return new n.TraceStateImpl(e)}t.createTraceState=createTraceState},546:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.INVALID_SPAN_CONTEXT=t.INVALID_TRACEID=t.INVALID_SPANID=void 0;const n=r(731);t.INVALID_SPANID=\"0000000000000000\";t.INVALID_TRACEID=\"00000000000000000000000000000000\";t.INVALID_SPAN_CONTEXT={traceId:t.INVALID_TRACEID,spanId:t.INVALID_SPANID,traceFlags:n.TraceFlags.NONE}},613:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.SpanKind=void 0;var r;(function(e){e[e[\"INTERNAL\"]=0]=\"INTERNAL\";e[e[\"SERVER\"]=1]=\"SERVER\";e[e[\"CLIENT\"]=2]=\"CLIENT\";e[e[\"PRODUCER\"]=3]=\"PRODUCER\";e[e[\"CONSUMER\"]=4]=\"CONSUMER\"})(r=t.SpanKind||(t.SpanKind={}))},477:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.wrapSpanContext=t.isSpanContextValid=t.isValidSpanId=t.isValidTraceId=void 0;const n=r(546);const a=r(374);const o=/^([0-9a-f]{32})$/i;const i=/^[0-9a-f]{16}$/i;function isValidTraceId(e){return o.test(e)&&e!==n.INVALID_TRACEID}t.isValidTraceId=isValidTraceId;function isValidSpanId(e){return i.test(e)&&e!==n.INVALID_SPANID}t.isValidSpanId=isValidSpanId;function isSpanContextValid(e){return isValidTraceId(e.traceId)&&isValidSpanId(e.spanId)}t.isSpanContextValid=isSpanContextValid;function wrapSpanContext(e){return new a.NonRecordingSpan(e)}t.wrapSpanContext=wrapSpanContext},854:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.SpanStatusCode=void 0;var r;(function(e){e[e[\"UNSET\"]=0]=\"UNSET\";e[e[\"OK\"]=1]=\"OK\";e[e[\"ERROR\"]=2]=\"ERROR\"})(r=t.SpanStatusCode||(t.SpanStatusCode={}))},731:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.TraceFlags=void 0;var r;(function(e){e[e[\"NONE\"]=0]=\"NONE\";e[e[\"SAMPLED\"]=1]=\"SAMPLED\"})(r=t.TraceFlags||(t.TraceFlags={}))},652:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.VERSION=void 0;t.VERSION=\"1.6.0\"}};var t={};function __nccwpck_require__(r){var n=t[r];if(n!==undefined){return n.exports}var a=t[r]={exports:{}};var o=true;try{e[r].call(a.exports,a,a.exports,__nccwpck_require__);o=false}finally{if(o)delete t[r]}return a.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var r={};(()=>{var e=r;Object.defineProperty(e,\"__esModule\",{value:true});e.trace=e.propagation=e.metrics=e.diag=e.context=e.INVALID_SPAN_CONTEXT=e.INVALID_TRACEID=e.INVALID_SPANID=e.isValidSpanId=e.isValidTraceId=e.isSpanContextValid=e.createTraceState=e.TraceFlags=e.SpanStatusCode=e.SpanKind=e.SamplingDecision=e.ProxyTracerProvider=e.ProxyTracer=e.defaultTextMapSetter=e.defaultTextMapGetter=e.ValueType=e.createNoopMeter=e.DiagLogLevel=e.DiagConsoleLogger=e.ROOT_CONTEXT=e.createContextKey=e.baggageEntryMetadataFromString=void 0;var t=__nccwpck_require__(504);Object.defineProperty(e,\"baggageEntryMetadataFromString\",{enumerable:true,get:function(){return t.baggageEntryMetadataFromString}});var n=__nccwpck_require__(23);Object.defineProperty(e,\"createContextKey\",{enumerable:true,get:function(){return n.createContextKey}});Object.defineProperty(e,\"ROOT_CONTEXT\",{enumerable:true,get:function(){return n.ROOT_CONTEXT}});var a=__nccwpck_require__(83);Object.defineProperty(e,\"DiagConsoleLogger\",{enumerable:true,get:function(){return a.DiagConsoleLogger}});var o=__nccwpck_require__(711);Object.defineProperty(e,\"DiagLogLevel\",{enumerable:true,get:function(){return o.DiagLogLevel}});var i=__nccwpck_require__(440);Object.defineProperty(e,\"createNoopMeter\",{enumerable:true,get:function(){return i.createNoopMeter}});var c=__nccwpck_require__(532);Object.defineProperty(e,\"ValueType\",{enumerable:true,get:function(){return c.ValueType}});var s=__nccwpck_require__(92);Object.defineProperty(e,\"defaultTextMapGetter\",{enumerable:true,get:function(){return s.defaultTextMapGetter}});Object.defineProperty(e,\"defaultTextMapSetter\",{enumerable:true,get:function(){return s.defaultTextMapSetter}});var u=__nccwpck_require__(779);Object.defineProperty(e,\"ProxyTracer\",{enumerable:true,get:function(){return u.ProxyTracer}});var l=__nccwpck_require__(498);Object.defineProperty(e,\"ProxyTracerProvider\",{enumerable:true,get:function(){return l.ProxyTracerProvider}});var g=__nccwpck_require__(312);Object.defineProperty(e,\"SamplingDecision\",{enumerable:true,get:function(){return g.SamplingDecision}});var p=__nccwpck_require__(613);Object.defineProperty(e,\"SpanKind\",{enumerable:true,get:function(){return p.SpanKind}});var d=__nccwpck_require__(854);Object.defineProperty(e,\"SpanStatusCode\",{enumerable:true,get:function(){return d.SpanStatusCode}});var _=__nccwpck_require__(731);Object.defineProperty(e,\"TraceFlags\",{enumerable:true,get:function(){return _.TraceFlags}});var f=__nccwpck_require__(87);Object.defineProperty(e,\"createTraceState\",{enumerable:true,get:function(){return f.createTraceState}});var b=__nccwpck_require__(477);Object.defineProperty(e,\"isSpanContextValid\",{enumerable:true,get:function(){return b.isSpanContextValid}});Object.defineProperty(e,\"isValidTraceId\",{enumerable:true,get:function(){return b.isValidTraceId}});Object.defineProperty(e,\"isValidSpanId\",{enumerable:true,get:function(){return b.isValidSpanId}});var v=__nccwpck_require__(546);Object.defineProperty(e,\"INVALID_SPANID\",{enumerable:true,get:function(){return v.INVALID_SPANID}});Object.defineProperty(e,\"INVALID_TRACEID\",{enumerable:true,get:function(){return v.INVALID_TRACEID}});Object.defineProperty(e,\"INVALID_SPAN_CONTEXT\",{enumerable:true,get:function(){return v.INVALID_SPAN_CONTEXT}});const O=__nccwpck_require__(778);Object.defineProperty(e,\"context\",{enumerable:true,get:function(){return O.context}});const P=__nccwpck_require__(304);Object.defineProperty(e,\"diag\",{enumerable:true,get:function(){return P.diag}});const N=__nccwpck_require__(120);Object.defineProperty(e,\"metrics\",{enumerable:true,get:function(){return N.metrics}});const S=__nccwpck_require__(27);Object.defineProperty(e,\"propagation\",{enumerable:true,get:function(){return S.propagation}});const C=__nccwpck_require__(816);Object.defineProperty(e,\"trace\",{enumerable:true,get:function(){return C.trace}});e[\"default\"]={context:O.context,diag:P.diag,metrics:N.metrics,propagation:S.propagation,trace:C.trace}})();module.exports=r})();"],"names":["e","t","r","Object","defineProperty","value","ContextAPI","n","a","o","i","c","NoopContextManager","getInstance","_instance","setGlobalContextManager","registerGlobal","DiagAPI","instance","active","_getContextManager","with","bind","getGlobal","disable","unregisterGlobal","_logProxy","setLogger","logLevel","DiagLogLevel","INFO","s","Error","error","stack","message","u","l","createLogLevelDiagLogger","suppressOverrideMessage","warn","createComponentLogger","DiagComponentLogger","verbose","debug","info","MetricsAPI","setGlobalMeterProvider","getMeterProvider","NOOP_METER_PROVIDER","getMeter","PropagationAPI","NoopTextMapPropagator","createBaggage","getBaggage","getActiveBaggage","setBaggage","deleteBaggage","setGlobalPropagator","inject","defaultTextMapSetter","_getGlobalPropagator","extract","defaultTextMapGetter","fields","TraceAPI","_proxyTracerProvider","ProxyTracerProvider","wrapSpanContext","isSpanContextValid","deleteSpan","getSpan","getActiveSpan","getSpanContext","setSpan","setSpanContext","setGlobalTracerProvider","setDelegate","getTracerProvider","getTracer","createContextKey","getValue","undefined","setValue","deleteValue","BaggageImpl","_entries","Map","getEntry","get","assign","getAllEntries","Array","from","entries","map","setEntry","set","removeEntry","delete","removeEntries","clear","baggageEntryMetadataSymbol","Symbol","baggageEntryMetadataFromString","__TYPE__","toString","context","ROOT_CONTEXT","call","enable","for","BaseContext","_currentContext","diag","_namespace","namespace","logProxy","unshift","DiagConsoleLogger","_consoleFunc","console","log","apply","length","NONE","ALL","_filterFunc","ERROR","WARN","DEBUG","VERBOSE","VERSION","split","_globalThis","version","isCompatible","_makeCompatibilityCheck","Set","match","major","minor","patch","prerelease","isExactmatch","_reject","add","_accept","has","metrics","ValueType","createNoopMeter","NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC","NOOP_OBSERVABLE_GAUGE_METRIC","NOOP_OBSERVABLE_COUNTER_METRIC","NOOP_UP_DOWN_COUNTER_METRIC","NOOP_HISTOGRAM_METRIC","NOOP_COUNTER_METRIC","NOOP_METER","NoopObservableUpDownCounterMetric","NoopObservableGaugeMetric","NoopObservableCounterMetric","NoopObservableMetric","NoopHistogramMetric","NoopUpDownCounterMetric","NoopCounterMetric","NoopMetric","NoopMeter","createHistogram","createCounter","createUpDownCounter","createObservableGauge","createObservableCounter","createObservableUpDownCounter","addBatchObservableCallback","removeBatchObservableCallback","record","addCallback","removeCallback","NoopMeterProvider","__createBinding","create","enumerable","__exportStar","prototype","hasOwnProperty","globalThis","propagation","keys","trace","NonRecordingSpan","INVALID_SPAN_CONTEXT","_spanContext","spanContext","setAttribute","setAttributes","addEvent","setStatus","updateName","end","isRecording","recordException","NoopTracer","startSpan","Boolean","root","isSpanContext","startActiveSpan","arguments","g","NoopTracerProvider","ProxyTracer","_provider","name","options","_getTracer","Reflect","_delegate","getDelegateTracer","getDelegate","SamplingDecision","TraceStateImpl","_internalState","_parse","_clone","unset","serialize","_keys","reduce","push","join","reverse","trim","indexOf","slice","validateKey","validateValue","size","RegExp","test","createTraceState","INVALID_TRACEID","INVALID_SPANID","traceId","spanId","traceFlags","TraceFlags","SpanKind","isValidSpanId","isValidTraceId","SpanStatusCode","__nccwpck_require__","exports","ab","p","d","_","f","b","v","O","P","N","S","C","module"],"mappings":"AAAA,CAAC;IAAK;IAAa,IAAIA,IAAE;QAAC,KAAI,CAACA,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEK,UAAU,GAAC,KAAK;YAAE,MAAMC,IAAEL,EAAE;YAAK,MAAMM,IAAEN,EAAE;YAAK,MAAMO,IAAEP,EAAE;YAAI,MAAMQ,IAAE;YAAU,MAAMC,IAAE,IAAIJ,EAAEK,kBAAkB;YAAC,MAAMN;gBAAWA,aAAa,CAAC;gBAAC,OAAOO,cAAa;oBAAC,IAAG,CAAC,IAAI,CAACC,SAAS,EAAC;wBAAC,IAAI,CAACA,SAAS,GAAC,IAAIR;oBAAU;oBAAC,OAAO,IAAI,CAACQ,SAAS;gBAAA;gBAACC,wBAAwBf,CAAC,EAAC;oBAAC,OAAM,CAAC,GAAEQ,EAAEQ,cAAc,EAAEN,GAAEV,GAAES,EAAEQ,OAAO,CAACC,QAAQ;gBAAG;gBAACC,SAAQ;oBAAC,OAAO,IAAI,CAACC,kBAAkB,GAAGD,MAAM;gBAAE;gBAACE,KAAKrB,CAAC,EAACC,CAAC,EAACC,CAAC,EAAC,GAAGK,CAAC,EAAC;oBAAC,OAAO,IAAI,CAACa,kBAAkB,GAAGC,IAAI,CAACrB,GAAEC,GAAEC,MAAKK;gBAAE;gBAACe,KAAKtB,CAAC,EAACC,CAAC,EAAC;oBAAC,OAAO,IAAI,CAACmB,kBAAkB,GAAGE,IAAI,CAACtB,GAAEC;gBAAE;gBAACmB,qBAAoB;oBAAC,OAAM,CAAC,GAAEZ,EAAEe,SAAS,EAAEb,MAAIC;gBAAC;gBAACa,UAAS;oBAAC,IAAI,CAACJ,kBAAkB,GAAGI,OAAO;oBAAG,CAAC,GAAEhB,EAAEiB,gBAAgB,EAAEf,GAAED,EAAEQ,OAAO,CAACC,QAAQ;gBAAG;YAAC;YAACjB,EAAEK,UAAU,GAACA;QAAU;QAAE,IAAG,CAACN,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEgB,OAAO,GAAC,KAAK;YAAE,MAAMV,IAAEL,EAAE;YAAK,MAAMM,IAAEN,EAAE;YAAK,MAAMO,IAAEP,EAAE;YAAK,MAAMQ,IAAER,EAAE;YAAK,MAAMS,IAAE;YAAO,MAAMM;gBAAQA,aAAa;oBAAC,SAASS,UAAU1B,CAAC;wBAAE,OAAO,SAAS,GAAGC,CAAC;4BAAE,MAAMC,IAAE,CAAC,GAAEQ,EAAEa,SAAS,EAAE;4BAAQ,IAAG,CAACrB,GAAE;4BAAO,OAAOA,CAAC,CAACF,EAAE,IAAIC;wBAAE;oBAAC;oBAAC,MAAMD,IAAE,IAAI;oBAAC,MAAM2B,YAAU,CAAC1B,GAAEC,IAAE;wBAAC0B,UAASnB,EAAEoB,YAAY,CAACC,IAAI;oBAAA,CAAC;wBAAI,IAAIvB,GAAEI,GAAEoB;wBAAE,IAAG9B,MAAID,GAAE;4BAAC,MAAMC,IAAE,IAAI+B,MAAM;4BAAsIhC,EAAEiC,KAAK,CAAC,CAAC1B,IAAEN,EAAEiC,KAAK,MAAI,QAAM3B,MAAI,KAAK,IAAEA,IAAEN,EAAEkC,OAAO;4BAAE,OAAO;wBAAK;wBAAC,IAAG,OAAOjC,MAAI,UAAS;4BAACA,IAAE;gCAAC0B,UAAS1B;4BAAC;wBAAC;wBAAC,MAAMkC,IAAE,CAAC,GAAE1B,EAAEa,SAAS,EAAE;wBAAQ,MAAMc,IAAE,CAAC,GAAE7B,EAAE8B,wBAAwB,EAAE,CAAC3B,IAAET,EAAE0B,QAAQ,MAAI,QAAMjB,MAAI,KAAK,IAAEA,IAAEF,EAAEoB,YAAY,CAACC,IAAI,EAAC7B;wBAAG,IAAGmC,KAAG,CAAClC,EAAEqC,uBAAuB,EAAC;4BAAC,MAAMvC,IAAE,CAAC+B,IAAE,CAAC,IAAIC,KAAK,EAAEE,KAAK,MAAI,QAAMH,MAAI,KAAK,IAAEA,IAAE;4BAAkCK,EAAEI,IAAI,CAAC,CAAC,wCAAwC,EAAExC,GAAG;4BAAEqC,EAAEG,IAAI,CAAC,CAAC,0DAA0D,EAAExC,GAAG;wBAAC;wBAAC,OAAM,CAAC,GAAEU,EAAEM,cAAc,EAAE,QAAOqB,GAAErC,GAAE;oBAAK;oBAAEA,EAAE2B,SAAS,GAACA;oBAAU3B,EAAEwB,OAAO,GAAC;wBAAK,CAAC,GAAEd,EAAEe,gBAAgB,EAAEd,GAAEX;oBAAE;oBAAEA,EAAEyC,qBAAqB,GAACzC,CAAAA,IAAG,IAAIO,EAAEmC,mBAAmB,CAAC1C;oBAAGA,EAAE2C,OAAO,GAACjB,UAAU;oBAAW1B,EAAE4C,KAAK,GAAClB,UAAU;oBAAS1B,EAAE6C,IAAI,GAACnB,UAAU;oBAAQ1B,EAAEwC,IAAI,GAACd,UAAU;oBAAQ1B,EAAEiC,KAAK,GAACP,UAAU;gBAAQ;gBAAC,OAAOR,WAAU;oBAAC,IAAG,CAAC,IAAI,CAACJ,SAAS,EAAC;wBAAC,IAAI,CAACA,SAAS,GAAC,IAAIG;oBAAO;oBAAC,OAAO,IAAI,CAACH,SAAS;gBAAA;YAAC;YAACb,EAAEgB,OAAO,GAACA;QAAO;QAAE,KAAI,CAACjB,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAE6C,UAAU,GAAC,KAAK;YAAE,MAAMvC,IAAEL,EAAE;YAAK,MAAMM,IAAEN,EAAE;YAAK,MAAMO,IAAEP,EAAE;YAAI,MAAMQ,IAAE;YAAU,MAAMoC;gBAAWA,aAAa,CAAC;gBAAC,OAAOjC,cAAa;oBAAC,IAAG,CAAC,IAAI,CAACC,SAAS,EAAC;wBAAC,IAAI,CAACA,SAAS,GAAC,IAAIgC;oBAAU;oBAAC,OAAO,IAAI,CAAChC,SAAS;gBAAA;gBAACiC,uBAAuB/C,CAAC,EAAC;oBAAC,OAAM,CAAC,GAAEQ,EAAEQ,cAAc,EAAEN,GAAEV,GAAES,EAAEQ,OAAO,CAACC,QAAQ;gBAAG;gBAAC8B,mBAAkB;oBAAC,OAAM,CAAC,GAAExC,EAAEe,SAAS,EAAEb,MAAIH,EAAE0C,mBAAmB;gBAAA;gBAACC,SAASlD,CAAC,EAACC,CAAC,EAACC,CAAC,EAAC;oBAAC,OAAO,IAAI,CAAC8C,gBAAgB,GAAGE,QAAQ,CAAClD,GAAEC,GAAEC;gBAAE;gBAACsB,UAAS;oBAAC,CAAC,GAAEhB,EAAEiB,gBAAgB,EAAEf,GAAED,EAAEQ,OAAO,CAACC,QAAQ;gBAAG;YAAC;YAACjB,EAAE6C,UAAU,GAACA;QAAU;QAAE,IAAG,CAAC9C,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEkD,cAAc,GAAC,KAAK;YAAE,MAAM5C,IAAEL,EAAE;YAAK,MAAMM,IAAEN,EAAE;YAAI,MAAMO,IAAEP,EAAE;YAAI,MAAMQ,IAAER,EAAE;YAAK,MAAMS,IAAET,EAAE;YAAK,MAAM6B,IAAE7B,EAAE;YAAI,MAAMkC,IAAE;YAAc,MAAMC,IAAE,IAAI7B,EAAE4C,qBAAqB;YAAC,MAAMD;gBAAeA,aAAa;oBAAC,IAAI,CAACE,aAAa,GAAC1C,EAAE0C,aAAa;oBAAC,IAAI,CAACC,UAAU,GAAC5C,EAAE4C,UAAU;oBAAC,IAAI,CAACC,gBAAgB,GAAC7C,EAAE6C,gBAAgB;oBAAC,IAAI,CAACC,UAAU,GAAC9C,EAAE8C,UAAU;oBAAC,IAAI,CAACC,aAAa,GAAC/C,EAAE+C,aAAa;gBAAA;gBAAC,OAAO5C,cAAa;oBAAC,IAAG,CAAC,IAAI,CAACC,SAAS,EAAC;wBAAC,IAAI,CAACA,SAAS,GAAC,IAAIqC;oBAAc;oBAAC,OAAO,IAAI,CAACrC,SAAS;gBAAA;gBAAC4C,oBAAoB1D,CAAC,EAAC;oBAAC,OAAM,CAAC,GAAEO,EAAES,cAAc,EAAEoB,GAAEpC,GAAE+B,EAAEd,OAAO,CAACC,QAAQ;gBAAG;gBAACyC,OAAO3D,CAAC,EAACC,CAAC,EAACC,IAAEO,EAAEmD,oBAAoB,EAAC;oBAAC,OAAO,IAAI,CAACC,oBAAoB,GAAGF,MAAM,CAAC3D,GAAEC,GAAEC;gBAAE;gBAAC4D,QAAQ9D,CAAC,EAACC,CAAC,EAACC,IAAEO,EAAEsD,oBAAoB,EAAC;oBAAC,OAAO,IAAI,CAACF,oBAAoB,GAAGC,OAAO,CAAC9D,GAAEC,GAAEC;gBAAE;gBAAC8D,SAAQ;oBAAC,OAAO,IAAI,CAACH,oBAAoB,GAAGG,MAAM;gBAAE;gBAACxC,UAAS;oBAAC,CAAC,GAAEjB,EAAEkB,gBAAgB,EAAEW,GAAEL,EAAEd,OAAO,CAACC,QAAQ;gBAAG;gBAAC2C,uBAAsB;oBAAC,OAAM,CAAC,GAAEtD,EAAEgB,SAAS,EAAEa,MAAIC;gBAAC;YAAC;YAACpC,EAAEkD,cAAc,GAACA;QAAc;QAAE,KAAI,CAACnD,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEgE,QAAQ,GAAC,KAAK;YAAE,MAAM1D,IAAEL,EAAE;YAAK,MAAMM,IAAEN,EAAE;YAAK,MAAMO,IAAEP,EAAE;YAAK,MAAMQ,IAAER,EAAE;YAAK,MAAMS,IAAET,EAAE;YAAI,MAAM6B,IAAE;YAAQ,MAAMkC;gBAASA,aAAa;oBAAC,IAAI,CAACC,oBAAoB,GAAC,IAAI1D,EAAE2D,mBAAmB;oBAAC,IAAI,CAACC,eAAe,GAAC3D,EAAE2D,eAAe;oBAAC,IAAI,CAACC,kBAAkB,GAAC5D,EAAE4D,kBAAkB;oBAAC,IAAI,CAACC,UAAU,GAAC5D,EAAE4D,UAAU;oBAAC,IAAI,CAACC,OAAO,GAAC7D,EAAE6D,OAAO;oBAAC,IAAI,CAACC,aAAa,GAAC9D,EAAE8D,aAAa;oBAAC,IAAI,CAACC,cAAc,GAAC/D,EAAE+D,cAAc;oBAAC,IAAI,CAACC,OAAO,GAAChE,EAAEgE,OAAO;oBAAC,IAAI,CAACC,cAAc,GAACjE,EAAEiE,cAAc;gBAAA;gBAAC,OAAO9D,cAAa;oBAAC,IAAG,CAAC,IAAI,CAACC,SAAS,EAAC;wBAAC,IAAI,CAACA,SAAS,GAAC,IAAImD;oBAAQ;oBAAC,OAAO,IAAI,CAACnD,SAAS;gBAAA;gBAAC8D,wBAAwB5E,CAAC,EAAC;oBAAC,MAAMC,IAAE,CAAC,GAAEM,EAAES,cAAc,EAAEe,GAAE,IAAI,CAACmC,oBAAoB,EAACvD,EAAEM,OAAO,CAACC,QAAQ;oBAAI,IAAGjB,GAAE;wBAAC,IAAI,CAACiE,oBAAoB,CAACW,WAAW,CAAC7E;oBAAE;oBAAC,OAAOC;gBAAC;gBAAC6E,oBAAmB;oBAAC,OAAM,CAAC,GAAEvE,EAAEgB,SAAS,EAAEQ,MAAI,IAAI,CAACmC,oBAAoB;gBAAA;gBAACa,UAAU/E,CAAC,EAACC,CAAC,EAAC;oBAAC,OAAO,IAAI,CAAC6E,iBAAiB,GAAGC,SAAS,CAAC/E,GAAEC;gBAAE;gBAACuB,UAAS;oBAAC,CAAC,GAAEjB,EAAEkB,gBAAgB,EAAEM,GAAEpB,EAAEM,OAAO,CAACC,QAAQ;oBAAI,IAAI,CAACgD,oBAAoB,GAAC,IAAI1D,EAAE2D,mBAAmB;gBAAA;YAAC;YAAClE,EAAEgE,QAAQ,GAACA;QAAQ;QAAE,KAAI,CAACjE,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEwD,aAAa,GAACxD,EAAEuD,UAAU,GAACvD,EAAEsD,gBAAgB,GAACtD,EAAEqD,UAAU,GAAC,KAAK;YAAE,MAAM/C,IAAEL,EAAE;YAAK,MAAMM,IAAEN,EAAE;YAAI,MAAMO,IAAE,CAAC,GAAED,EAAEwE,gBAAgB,EAAE;YAA6B,SAAS1B,WAAWtD,CAAC;gBAAE,OAAOA,EAAEiF,QAAQ,CAACxE,MAAIyE;YAAS;YAACjF,EAAEqD,UAAU,GAACA;YAAW,SAASC;gBAAmB,OAAOD,WAAW/C,EAAED,UAAU,CAACO,WAAW,GAAGM,MAAM;YAAG;YAAClB,EAAEsD,gBAAgB,GAACA;YAAiB,SAASC,WAAWxD,CAAC,EAACC,CAAC;gBAAE,OAAOD,EAAEmF,QAAQ,CAAC1E,GAAER;YAAE;YAACA,EAAEuD,UAAU,GAACA;YAAW,SAASC,cAAczD,CAAC;gBAAE,OAAOA,EAAEoF,WAAW,CAAC3E;YAAE;YAACR,EAAEwD,aAAa,GAACA;QAAa;QAAE,KAAI,CAACzD,GAAEC;YAAKE,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEoF,WAAW,GAAC,KAAK;YAAE,MAAMA;gBAAYA,YAAYrF,CAAC,CAAC;oBAAC,IAAI,CAACsF,QAAQ,GAACtF,IAAE,IAAIuF,IAAIvF,KAAG,IAAIuF;gBAAG;gBAACC,SAASxF,CAAC,EAAC;oBAAC,MAAMC,IAAE,IAAI,CAACqF,QAAQ,CAACG,GAAG,CAACzF;oBAAG,IAAG,CAACC,GAAE;wBAAC,OAAOiF;oBAAS;oBAAC,OAAO/E,OAAOuF,MAAM,CAAC,CAAC,GAAEzF;gBAAE;gBAAC0F,gBAAe;oBAAC,OAAOC,MAAMC,IAAI,CAAC,IAAI,CAACP,QAAQ,CAACQ,OAAO,IAAIC,GAAG,CAAE,CAAC,CAAC/F,GAAEC,EAAE,GAAG;4BAACD;4BAAEC;yBAAE;gBAAE;gBAAC+F,SAAShG,CAAC,EAACC,CAAC,EAAC;oBAAC,MAAMC,IAAE,IAAImF,YAAY,IAAI,CAACC,QAAQ;oBAAEpF,EAAEoF,QAAQ,CAACW,GAAG,CAACjG,GAAEC;oBAAG,OAAOC;gBAAC;gBAACgG,YAAYlG,CAAC,EAAC;oBAAC,MAAMC,IAAE,IAAIoF,YAAY,IAAI,CAACC,QAAQ;oBAAErF,EAAEqF,QAAQ,CAACa,MAAM,CAACnG;oBAAG,OAAOC;gBAAC;gBAACmG,cAAc,GAAGpG,CAAC,EAAC;oBAAC,MAAMC,IAAE,IAAIoF,YAAY,IAAI,CAACC,QAAQ;oBAAE,KAAI,MAAMpF,KAAKF,EAAE;wBAACC,EAAEqF,QAAQ,CAACa,MAAM,CAACjG;oBAAE;oBAAC,OAAOD;gBAAC;gBAACoG,QAAO;oBAAC,OAAO,IAAIhB;gBAAW;YAAC;YAACpF,EAAEoF,WAAW,GAACA;QAAW;QAAE,KAAI,CAACrF,GAAEC;YAAKE,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEqG,0BAA0B,GAAC,KAAK;YAAErG,EAAEqG,0BAA0B,GAACC,OAAO;QAAuB;QAAE,KAAI,CAACvG,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEuG,8BAA8B,GAACvG,EAAEoD,aAAa,GAAC,KAAK;YAAE,MAAM9C,IAAEL,EAAE;YAAI,MAAMM,IAAEN,EAAE;YAAK,MAAMO,IAAEP,EAAE;YAAK,MAAMQ,IAAEH,EAAEU,OAAO,CAACC,QAAQ;YAAG,SAASmC,cAAcrD,IAAE,CAAC,CAAC;gBAAE,OAAO,IAAIQ,EAAE6E,WAAW,CAAC,IAAIE,IAAIpF,OAAO2F,OAAO,CAAC9F;YAAI;YAACC,EAAEoD,aAAa,GAACA;YAAc,SAASmD,+BAA+BxG,CAAC;gBAAE,IAAG,OAAOA,MAAI,UAAS;oBAACU,EAAEuB,KAAK,CAAC,CAAC,kDAAkD,EAAE,OAAOjC,GAAG;oBAAEA,IAAE;gBAAE;gBAAC,OAAM;oBAACyG,UAAShG,EAAE6F,0BAA0B;oBAACI;wBAAW,OAAO1G;oBAAC;gBAAC;YAAC;YAACC,EAAEuG,8BAA8B,GAACA;QAA8B;QAAE,KAAI,CAACxG,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAE0G,OAAO,GAAC,KAAK;YAAE,MAAMpG,IAAEL,EAAE;YAAKD,EAAE0G,OAAO,GAACpG,EAAED,UAAU,CAACO,WAAW;QAAE;QAAE,KAAI,CAACb,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEW,kBAAkB,GAAC,KAAK;YAAE,MAAML,IAAEL,EAAE;YAAI,MAAMU;gBAAmBO,SAAQ;oBAAC,OAAOZ,EAAEqG,YAAY;gBAAA;gBAACvF,KAAKrB,CAAC,EAACC,CAAC,EAACC,CAAC,EAAC,GAAGK,CAAC,EAAC;oBAAC,OAAON,EAAE4G,IAAI,CAAC3G,MAAKK;gBAAE;gBAACe,KAAKtB,CAAC,EAACC,CAAC,EAAC;oBAAC,OAAOA;gBAAC;gBAAC6G,SAAQ;oBAAC,OAAO,IAAI;gBAAA;gBAACtF,UAAS;oBAAC,OAAO,IAAI;gBAAA;YAAC;YAACvB,EAAEW,kBAAkB,GAACA;QAAkB;QAAE,IAAG,CAACZ,GAAEC;YAAKE,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAE2G,YAAY,GAAC3G,EAAE+E,gBAAgB,GAAC,KAAK;YAAE,SAASA,iBAAiBhF,CAAC;gBAAE,OAAOuG,OAAOQ,GAAG,CAAC/G;YAAE;YAACC,EAAE+E,gBAAgB,GAACA;YAAiB,MAAMgC;gBAAYA,YAAYhH,CAAC,CAAC;oBAAC,MAAMC,IAAE,IAAI;oBAACA,EAAEgH,eAAe,GAACjH,IAAE,IAAIuF,IAAIvF,KAAG,IAAIuF;oBAAItF,EAAEgF,QAAQ,GAACjF,CAAAA,IAAGC,EAAEgH,eAAe,CAACxB,GAAG,CAACzF;oBAAGC,EAAEkF,QAAQ,GAAC,CAACnF,GAAEE;wBAAK,MAAMK,IAAE,IAAIyG,YAAY/G,EAAEgH,eAAe;wBAAE1G,EAAE0G,eAAe,CAAChB,GAAG,CAACjG,GAAEE;wBAAG,OAAOK;oBAAC;oBAAEN,EAAEmF,WAAW,GAACpF,CAAAA;wBAAI,MAAME,IAAE,IAAI8G,YAAY/G,EAAEgH,eAAe;wBAAE/G,EAAE+G,eAAe,CAACd,MAAM,CAACnG;wBAAG,OAAOE;oBAAC;gBAAC;YAAC;YAACD,EAAE2G,YAAY,GAAC,IAAII;QAAW;QAAE,KAAI,CAAChH,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEiH,IAAI,GAAC,KAAK;YAAE,MAAM3G,IAAEL,EAAE;YAAID,EAAEiH,IAAI,GAAC3G,EAAEU,OAAO,CAACC,QAAQ;QAAE;QAAE,KAAI,CAAClB,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEyC,mBAAmB,GAAC,KAAK;YAAE,MAAMnC,IAAEL,EAAE;YAAK,MAAMwC;gBAAoBA,YAAY1C,CAAC,CAAC;oBAAC,IAAI,CAACmH,UAAU,GAACnH,EAAEoH,SAAS,IAAE;gBAAqB;gBAACxE,MAAM,GAAG5C,CAAC,EAAC;oBAAC,OAAOqH,SAAS,SAAQ,IAAI,CAACF,UAAU,EAACnH;gBAAE;gBAACiC,MAAM,GAAGjC,CAAC,EAAC;oBAAC,OAAOqH,SAAS,SAAQ,IAAI,CAACF,UAAU,EAACnH;gBAAE;gBAAC6C,KAAK,GAAG7C,CAAC,EAAC;oBAAC,OAAOqH,SAAS,QAAO,IAAI,CAACF,UAAU,EAACnH;gBAAE;gBAACwC,KAAK,GAAGxC,CAAC,EAAC;oBAAC,OAAOqH,SAAS,QAAO,IAAI,CAACF,UAAU,EAACnH;gBAAE;gBAAC2C,QAAQ,GAAG3C,CAAC,EAAC;oBAAC,OAAOqH,SAAS,WAAU,IAAI,CAACF,UAAU,EAACnH;gBAAE;YAAC;YAACC,EAAEyC,mBAAmB,GAACA;YAAoB,SAAS2E,SAASrH,CAAC,EAACC,CAAC,EAACC,CAAC;gBAAE,MAAMM,IAAE,CAAC,GAAED,EAAEgB,SAAS,EAAE;gBAAQ,IAAG,CAACf,GAAE;oBAAC;gBAAM;gBAACN,EAAEoH,OAAO,CAACrH;gBAAG,OAAOO,CAAC,CAACR,EAAE,IAAIE;YAAE;QAAC;QAAE,IAAG,CAACF,GAAEC;YAAKE,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEsH,iBAAiB,GAAC,KAAK;YAAE,MAAMrH,IAAE;gBAAC;oBAACK,GAAE;oBAAQI,GAAE;gBAAO;gBAAE;oBAACJ,GAAE;oBAAOI,GAAE;gBAAM;gBAAE;oBAACJ,GAAE;oBAAOI,GAAE;gBAAM;gBAAE;oBAACJ,GAAE;oBAAQI,GAAE;gBAAO;gBAAE;oBAACJ,GAAE;oBAAUI,GAAE;gBAAO;aAAE;YAAC,MAAM4G;gBAAkBA,aAAa;oBAAC,SAASC,aAAaxH,CAAC;wBAAE,OAAO,SAAS,GAAGC,CAAC;4BAAE,IAAGwH,SAAQ;gCAAC,IAAIvH,IAAEuH,OAAO,CAACzH,EAAE;gCAAC,IAAG,OAAOE,MAAI,YAAW;oCAACA,IAAEuH,QAAQC,GAAG;gCAAA;gCAAC,IAAG,OAAOxH,MAAI,YAAW;oCAAC,OAAOA,EAAEyH,KAAK,CAACF,SAAQxH;gCAAE;4BAAC;wBAAC;oBAAC;oBAAC,IAAI,IAAID,IAAE,GAAEA,IAAEE,EAAE0H,MAAM,EAAC5H,IAAI;wBAAC,IAAI,CAACE,CAAC,CAACF,EAAE,CAACO,CAAC,CAAC,GAACiH,aAAatH,CAAC,CAACF,EAAE,CAACW,CAAC;oBAAC;gBAAC;YAAC;YAACV,EAAEsH,iBAAiB,GAACA;QAAiB;QAAE,KAAI,CAACvH,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEqC,wBAAwB,GAAC,KAAK;YAAE,MAAM/B,IAAEL,EAAE;YAAK,SAASoC,yBAAyBtC,CAAC,EAACC,CAAC;gBAAE,IAAGD,IAAEO,EAAEsB,YAAY,CAACgG,IAAI,EAAC;oBAAC7H,IAAEO,EAAEsB,YAAY,CAACgG,IAAI;gBAAA,OAAM,IAAG7H,IAAEO,EAAEsB,YAAY,CAACiG,GAAG,EAAC;oBAAC9H,IAAEO,EAAEsB,YAAY,CAACiG,GAAG;gBAAA;gBAAC7H,IAAEA,KAAG,CAAC;gBAAE,SAAS8H,YAAY7H,CAAC,EAACK,CAAC;oBAAE,MAAMC,IAAEP,CAAC,CAACC,EAAE;oBAAC,IAAG,OAAOM,MAAI,cAAYR,KAAGO,GAAE;wBAAC,OAAOC,EAAEc,IAAI,CAACrB;oBAAE;oBAAC,OAAO,YAAW;gBAAC;gBAAC,OAAM;oBAACgC,OAAM8F,YAAY,SAAQxH,EAAEsB,YAAY,CAACmG,KAAK;oBAAExF,MAAKuF,YAAY,QAAOxH,EAAEsB,YAAY,CAACoG,IAAI;oBAAEpF,MAAKkF,YAAY,QAAOxH,EAAEsB,YAAY,CAACC,IAAI;oBAAEc,OAAMmF,YAAY,SAAQxH,EAAEsB,YAAY,CAACqG,KAAK;oBAAEvF,SAAQoF,YAAY,WAAUxH,EAAEsB,YAAY,CAACsG,OAAO;gBAAC;YAAC;YAAClI,EAAEqC,wBAAwB,GAACA;QAAwB;QAAE,KAAI,CAACtC,GAAEC;YAAKE,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAE4B,YAAY,GAAC,KAAK;YAAE,IAAI3B;YAAE,CAAC,SAASF,CAAC;gBAAEA,CAAC,CAACA,CAAC,CAAC,OAAO,GAAC,EAAE,GAAC;gBAAOA,CAAC,CAACA,CAAC,CAAC,QAAQ,GAAC,GAAG,GAAC;gBAAQA,CAAC,CAACA,CAAC,CAAC,OAAO,GAAC,GAAG,GAAC;gBAAOA,CAAC,CAACA,CAAC,CAAC,OAAO,GAAC,GAAG,GAAC;gBAAOA,CAAC,CAACA,CAAC,CAAC,QAAQ,GAAC,GAAG,GAAC;gBAAQA,CAAC,CAACA,CAAC,CAAC,UAAU,GAAC,GAAG,GAAC;gBAAUA,CAAC,CAACA,CAAC,CAAC,MAAM,GAAC,KAAK,GAAC;YAAK,CAAC,EAAEE,IAAED,EAAE4B,YAAY,IAAE,CAAC5B,EAAE4B,YAAY,GAAC,CAAC,CAAC;QAAE;QAAE,KAAI,CAAC7B,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEwB,gBAAgB,GAACxB,EAAEsB,SAAS,GAACtB,EAAEe,cAAc,GAAC,KAAK;YAAE,MAAMT,IAAEL,EAAE;YAAK,MAAMM,IAAEN,EAAE;YAAK,MAAMO,IAAEP,EAAE;YAAK,MAAMQ,IAAEF,EAAE4H,OAAO,CAACC,KAAK,CAAC,IAAI,CAAC,EAAE;YAAC,MAAM1H,IAAE4F,OAAOQ,GAAG,CAAC,CAAC,qBAAqB,EAAErG,GAAG;YAAE,MAAMqB,IAAExB,EAAE+H,WAAW;YAAC,SAAStH,eAAehB,CAAC,EAACC,CAAC,EAACC,CAAC,EAACK,IAAE,KAAK;gBAAE,IAAIE;gBAAE,MAAMC,IAAEqB,CAAC,CAACpB,EAAE,GAAC,CAACF,IAAEsB,CAAC,CAACpB,EAAE,MAAI,QAAMF,MAAI,KAAK,IAAEA,IAAE;oBAAC8H,SAAQ/H,EAAE4H,OAAO;gBAAA;gBAAE,IAAG,CAAC7H,KAAGG,CAAC,CAACV,EAAE,EAAC;oBAAC,MAAMC,IAAE,IAAI+B,MAAM,CAAC,6DAA6D,EAAEhC,GAAG;oBAAEE,EAAE+B,KAAK,CAAChC,EAAEiC,KAAK,IAAEjC,EAAEkC,OAAO;oBAAE,OAAO;gBAAK;gBAAC,IAAGzB,EAAE6H,OAAO,KAAG/H,EAAE4H,OAAO,EAAC;oBAAC,MAAMnI,IAAE,IAAI+B,MAAM,CAAC,6CAA6C,EAAEtB,EAAE6H,OAAO,CAAC,KAAK,EAAEvI,EAAE,2CAA2C,EAAEQ,EAAE4H,OAAO,EAAE;oBAAElI,EAAE+B,KAAK,CAAChC,EAAEiC,KAAK,IAAEjC,EAAEkC,OAAO;oBAAE,OAAO;gBAAK;gBAACzB,CAAC,CAACV,EAAE,GAACC;gBAAEC,EAAE0C,KAAK,CAAC,CAAC,4CAA4C,EAAE5C,EAAE,EAAE,EAAEQ,EAAE4H,OAAO,CAAC,CAAC,CAAC;gBAAE,OAAO;YAAI;YAACnI,EAAEe,cAAc,GAACA;YAAe,SAASO,UAAUvB,CAAC;gBAAE,IAAIC,GAAEC;gBAAE,MAAMK,IAAE,CAACN,IAAE8B,CAAC,CAACpB,EAAE,MAAI,QAAMV,MAAI,KAAK,IAAE,KAAK,IAAEA,EAAEsI,OAAO;gBAAC,IAAG,CAAChI,KAAG,CAAC,CAAC,GAAEE,EAAE+H,YAAY,EAAEjI,IAAG;oBAAC;gBAAM;gBAAC,OAAM,CAACL,IAAE6B,CAAC,CAACpB,EAAE,MAAI,QAAMT,MAAI,KAAK,IAAE,KAAK,IAAEA,CAAC,CAACF,EAAE;YAAA;YAACC,EAAEsB,SAAS,GAACA;YAAU,SAASE,iBAAiBzB,CAAC,EAACC,CAAC;gBAAEA,EAAE2C,KAAK,CAAC,CAAC,+CAA+C,EAAE5C,EAAE,EAAE,EAAEQ,EAAE4H,OAAO,CAAC,CAAC,CAAC;gBAAE,MAAMlI,IAAE6B,CAAC,CAACpB,EAAE;gBAAC,IAAGT,GAAE;oBAAC,OAAOA,CAAC,CAACF,EAAE;gBAAA;YAAC;YAACC,EAAEwB,gBAAgB,GAACA;QAAgB;QAAE,KAAI,CAACzB,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEuI,YAAY,GAACvI,EAAEwI,uBAAuB,GAAC,KAAK;YAAE,MAAMlI,IAAEL,EAAE;YAAK,MAAMM,IAAE;YAAgC,SAASiI,wBAAwBzI,CAAC;gBAAE,MAAMC,IAAE,IAAIyI,IAAI;oBAAC1I;iBAAE;gBAAE,MAAME,IAAE,IAAIwI;gBAAI,MAAMnI,IAAEP,EAAE2I,KAAK,CAACnI;gBAAG,IAAG,CAACD,GAAE;oBAAC,OAAM,IAAI;gBAAK;gBAAC,MAAME,IAAE;oBAACmI,OAAM,CAACrI,CAAC,CAAC,EAAE;oBAACsI,OAAM,CAACtI,CAAC,CAAC,EAAE;oBAACuI,OAAM,CAACvI,CAAC,CAAC,EAAE;oBAACwI,YAAWxI,CAAC,CAAC,EAAE;gBAAA;gBAAE,IAAGE,EAAEsI,UAAU,IAAE,MAAK;oBAAC,OAAO,SAASC,aAAa/I,CAAC;wBAAE,OAAOA,MAAID;oBAAC;gBAAC;gBAAC,SAASiJ,QAAQjJ,CAAC;oBAAEE,EAAEgJ,GAAG,CAAClJ;oBAAG,OAAO;gBAAK;gBAAC,SAASmJ,QAAQnJ,CAAC;oBAAEC,EAAEiJ,GAAG,CAAClJ;oBAAG,OAAO;gBAAI;gBAAC,OAAO,SAASwI,aAAaxI,CAAC;oBAAE,IAAGC,EAAEmJ,GAAG,CAACpJ,IAAG;wBAAC,OAAO;oBAAI;oBAAC,IAAGE,EAAEkJ,GAAG,CAACpJ,IAAG;wBAAC,OAAO;oBAAK;oBAAC,MAAMO,IAAEP,EAAE2I,KAAK,CAACnI;oBAAG,IAAG,CAACD,GAAE;wBAAC,OAAO0I,QAAQjJ;oBAAE;oBAAC,MAAMU,IAAE;wBAACkI,OAAM,CAACrI,CAAC,CAAC,EAAE;wBAACsI,OAAM,CAACtI,CAAC,CAAC,EAAE;wBAACuI,OAAM,CAACvI,CAAC,CAAC,EAAE;wBAACwI,YAAWxI,CAAC,CAAC,EAAE;oBAAA;oBAAE,IAAGG,EAAEqI,UAAU,IAAE,MAAK;wBAAC,OAAOE,QAAQjJ;oBAAE;oBAAC,IAAGS,EAAEmI,KAAK,KAAGlI,EAAEkI,KAAK,EAAC;wBAAC,OAAOK,QAAQjJ;oBAAE;oBAAC,IAAGS,EAAEmI,KAAK,KAAG,GAAE;wBAAC,IAAGnI,EAAEoI,KAAK,KAAGnI,EAAEmI,KAAK,IAAEpI,EAAEqI,KAAK,IAAEpI,EAAEoI,KAAK,EAAC;4BAAC,OAAOK,QAAQnJ;wBAAE;wBAAC,OAAOiJ,QAAQjJ;oBAAE;oBAAC,IAAGS,EAAEoI,KAAK,IAAEnI,EAAEmI,KAAK,EAAC;wBAAC,OAAOM,QAAQnJ;oBAAE;oBAAC,OAAOiJ,QAAQjJ;gBAAE;YAAC;YAACC,EAAEwI,uBAAuB,GAACA;YAAwBxI,EAAEuI,YAAY,GAACC,wBAAwBlI,EAAE6H,OAAO;QAAC;QAAE,KAAI,CAACpI,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEoJ,OAAO,GAAC,KAAK;YAAE,MAAM9I,IAAEL,EAAE;YAAKD,EAAEoJ,OAAO,GAAC9I,EAAEuC,UAAU,CAACjC,WAAW;QAAE;QAAE,KAAI,CAACb,GAAEC;YAAKE,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEqJ,SAAS,GAAC,KAAK;YAAE,IAAIpJ;YAAE,CAAC,SAASF,CAAC;gBAAEA,CAAC,CAACA,CAAC,CAAC,MAAM,GAAC,EAAE,GAAC;gBAAMA,CAAC,CAACA,CAAC,CAAC,SAAS,GAAC,EAAE,GAAC;YAAQ,CAAC,EAAEE,IAAED,EAAEqJ,SAAS,IAAE,CAACrJ,EAAEqJ,SAAS,GAAC,CAAC,CAAC;QAAE;QAAE,KAAI,CAACtJ,GAAEC;YAAKE,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEsJ,eAAe,GAACtJ,EAAEuJ,sCAAsC,GAACvJ,EAAEwJ,4BAA4B,GAACxJ,EAAEyJ,8BAA8B,GAACzJ,EAAE0J,2BAA2B,GAAC1J,EAAE2J,qBAAqB,GAAC3J,EAAE4J,mBAAmB,GAAC5J,EAAE6J,UAAU,GAAC7J,EAAE8J,iCAAiC,GAAC9J,EAAE+J,yBAAyB,GAAC/J,EAAEgK,2BAA2B,GAAChK,EAAEiK,oBAAoB,GAACjK,EAAEkK,mBAAmB,GAAClK,EAAEmK,uBAAuB,GAACnK,EAAEoK,iBAAiB,GAACpK,EAAEqK,UAAU,GAACrK,EAAEsK,SAAS,GAAC,KAAK;YAAE,MAAMA;gBAAUA,aAAa,CAAC;gBAACC,gBAAgBxK,CAAC,EAACE,CAAC,EAAC;oBAAC,OAAOD,EAAE2J,qBAAqB;gBAAA;gBAACa,cAAczK,CAAC,EAACE,CAAC,EAAC;oBAAC,OAAOD,EAAE4J,mBAAmB;gBAAA;gBAACa,oBAAoB1K,CAAC,EAACE,CAAC,EAAC;oBAAC,OAAOD,EAAE0J,2BAA2B;gBAAA;gBAACgB,sBAAsB3K,CAAC,EAACE,CAAC,EAAC;oBAAC,OAAOD,EAAEwJ,4BAA4B;gBAAA;gBAACmB,wBAAwB5K,CAAC,EAACE,CAAC,EAAC;oBAAC,OAAOD,EAAEyJ,8BAA8B;gBAAA;gBAACmB,8BAA8B7K,CAAC,EAACE,CAAC,EAAC;oBAAC,OAAOD,EAAEuJ,sCAAsC;gBAAA;gBAACsB,2BAA2B9K,CAAC,EAACC,CAAC,EAAC,CAAC;gBAAC8K,8BAA8B/K,CAAC,EAAC,CAAC;YAAC;YAACC,EAAEsK,SAAS,GAACA;YAAU,MAAMD;YAAW;YAACrK,EAAEqK,UAAU,GAACA;YAAW,MAAMD,0BAA0BC;gBAAWpB,IAAIlJ,CAAC,EAACC,CAAC,EAAC,CAAC;YAAC;YAACA,EAAEoK,iBAAiB,GAACA;YAAkB,MAAMD,gCAAgCE;gBAAWpB,IAAIlJ,CAAC,EAACC,CAAC,EAAC,CAAC;YAAC;YAACA,EAAEmK,uBAAuB,GAACA;YAAwB,MAAMD,4BAA4BG;gBAAWU,OAAOhL,CAAC,EAACC,CAAC,EAAC,CAAC;YAAC;YAACA,EAAEkK,mBAAmB,GAACA;YAAoB,MAAMD;gBAAqBe,YAAYjL,CAAC,EAAC,CAAC;gBAACkL,eAAelL,CAAC,EAAC,CAAC;YAAC;YAACC,EAAEiK,oBAAoB,GAACA;YAAqB,MAAMD,oCAAoCC;YAAqB;YAACjK,EAAEgK,2BAA2B,GAACA;YAA4B,MAAMD,kCAAkCE;YAAqB;YAACjK,EAAE+J,yBAAyB,GAACA;YAA0B,MAAMD,0CAA0CG;YAAqB;YAACjK,EAAE8J,iCAAiC,GAACA;YAAkC9J,EAAE6J,UAAU,GAAC,IAAIS;YAAUtK,EAAE4J,mBAAmB,GAAC,IAAIQ;YAAkBpK,EAAE2J,qBAAqB,GAAC,IAAIO;YAAoBlK,EAAE0J,2BAA2B,GAAC,IAAIS;YAAwBnK,EAAEyJ,8BAA8B,GAAC,IAAIO;YAA4BhK,EAAEwJ,4BAA4B,GAAC,IAAIO;YAA0B/J,EAAEuJ,sCAAsC,GAAC,IAAIO;YAAkC,SAASR;gBAAkB,OAAOtJ,EAAE6J,UAAU;YAAA;YAAC7J,EAAEsJ,eAAe,GAACA;QAAe;QAAE,KAAI,CAACvJ,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEgD,mBAAmB,GAAChD,EAAEkL,iBAAiB,GAAC,KAAK;YAAE,MAAM5K,IAAEL,EAAE;YAAK,MAAMiL;gBAAkBjI,SAASlD,CAAC,EAACC,CAAC,EAACC,CAAC,EAAC;oBAAC,OAAOK,EAAEuJ,UAAU;gBAAA;YAAC;YAAC7J,EAAEkL,iBAAiB,GAACA;YAAkBlL,EAAEgD,mBAAmB,GAAC,IAAIkI;QAAiB;QAAE,KAAI,SAASnL,CAAC,EAACC,CAAC,EAACC,CAAC;YAAE,IAAIK,IAAE,IAAI,IAAE,IAAI,CAAC6K,eAAe,IAAE,CAACjL,OAAOkL,MAAM,GAAC,SAASrL,CAAC,EAACC,CAAC,EAACC,CAAC,EAACK,CAAC;gBAAE,IAAGA,MAAI2E,WAAU3E,IAAEL;gBAAEC,OAAOC,cAAc,CAACJ,GAAEO,GAAE;oBAAC+K,YAAW;oBAAK7F,KAAI;wBAAW,OAAOxF,CAAC,CAACC,EAAE;oBAAA;gBAAC;YAAE,IAAE,SAASF,CAAC,EAACC,CAAC,EAACC,CAAC,EAACK,CAAC;gBAAE,IAAGA,MAAI2E,WAAU3E,IAAEL;gBAAEF,CAAC,CAACO,EAAE,GAACN,CAAC,CAACC,EAAE;YAAA,CAAC;YAAE,IAAIM,IAAE,IAAI,IAAE,IAAI,CAAC+K,YAAY,IAAE,SAASvL,CAAC,EAACC,CAAC;gBAAE,IAAI,IAAIC,KAAKF,EAAE,IAAGE,MAAI,aAAW,CAACC,OAAOqL,SAAS,CAACC,cAAc,CAAC5E,IAAI,CAAC5G,GAAEC,IAAGK,EAAEN,GAAED,GAAEE;YAAE;YAAEC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGG,EAAEN,EAAE,KAAID;QAAE;QAAE,KAAI,CAACD,GAAEC;YAAKE,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEqI,WAAW,GAAC,KAAK;YAAErI,EAAEqI,WAAW,GAAC,OAAOoD,eAAa,WAASA;QAAiB;QAAE,IAAG,SAAS1L,CAAC,EAACC,CAAC,EAACC,CAAC;YAAE,IAAIK,IAAE,IAAI,IAAE,IAAI,CAAC6K,eAAe,IAAE,CAACjL,OAAOkL,MAAM,GAAC,SAASrL,CAAC,EAACC,CAAC,EAACC,CAAC,EAACK,CAAC;gBAAE,IAAGA,MAAI2E,WAAU3E,IAAEL;gBAAEC,OAAOC,cAAc,CAACJ,GAAEO,GAAE;oBAAC+K,YAAW;oBAAK7F,KAAI;wBAAW,OAAOxF,CAAC,CAACC,EAAE;oBAAA;gBAAC;YAAE,IAAE,SAASF,CAAC,EAACC,CAAC,EAACC,CAAC,EAACK,CAAC;gBAAE,IAAGA,MAAI2E,WAAU3E,IAAEL;gBAAEF,CAAC,CAACO,EAAE,GAACN,CAAC,CAACC,EAAE;YAAA,CAAC;YAAE,IAAIM,IAAE,IAAI,IAAE,IAAI,CAAC+K,YAAY,IAAE,SAASvL,CAAC,EAACC,CAAC;gBAAE,IAAI,IAAIC,KAAKF,EAAE,IAAGE,MAAI,aAAW,CAACC,OAAOqL,SAAS,CAACC,cAAc,CAAC5E,IAAI,CAAC5G,GAAEC,IAAGK,EAAEN,GAAED,GAAEE;YAAE;YAAEC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGG,EAAEN,EAAE,MAAKD;QAAE;QAAE,IAAG,CAACD,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAE0L,WAAW,GAAC,KAAK;YAAE,MAAMpL,IAAEL,EAAE;YAAID,EAAE0L,WAAW,GAACpL,EAAE4C,cAAc,CAACtC,WAAW;QAAE;QAAE,IAAG,CAACb,GAAEC;YAAKE,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEmD,qBAAqB,GAAC,KAAK;YAAE,MAAMA;gBAAsBO,OAAO3D,CAAC,EAACC,CAAC,EAAC,CAAC;gBAAC6D,QAAQ9D,CAAC,EAACC,CAAC,EAAC;oBAAC,OAAOD;gBAAC;gBAACgE,SAAQ;oBAAC,OAAM,EAAE;gBAAA;YAAC;YAAC/D,EAAEmD,qBAAqB,GAACA;QAAqB;QAAE,IAAG,CAACpD,GAAEC;YAAKE,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAE2D,oBAAoB,GAAC3D,EAAE8D,oBAAoB,GAAC,KAAK;YAAE9D,EAAE8D,oBAAoB,GAAC;gBAAC0B,KAAIzF,CAAC,EAACC,CAAC;oBAAE,IAAGD,KAAG,MAAK;wBAAC,OAAOkF;oBAAS;oBAAC,OAAOlF,CAAC,CAACC,EAAE;gBAAA;gBAAE2L,MAAK5L,CAAC;oBAAE,IAAGA,KAAG,MAAK;wBAAC,OAAM,EAAE;oBAAA;oBAAC,OAAOG,OAAOyL,IAAI,CAAC5L;gBAAE;YAAC;YAAEC,EAAE2D,oBAAoB,GAAC;gBAACqC,KAAIjG,CAAC,EAACC,CAAC,EAACC,CAAC;oBAAE,IAAGF,KAAG,MAAK;wBAAC;oBAAM;oBAACA,CAAC,CAACC,EAAE,GAACC;gBAAC;YAAC;QAAC;QAAE,KAAI,CAACF,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAE4L,KAAK,GAAC,KAAK;YAAE,MAAMtL,IAAEL,EAAE;YAAKD,EAAE4L,KAAK,GAACtL,EAAE0D,QAAQ,CAACpD,WAAW;QAAE;QAAE,KAAI,CAACb,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAE6L,gBAAgB,GAAC,KAAK;YAAE,MAAMvL,IAAEL,EAAE;YAAK,MAAM4L;gBAAiBA,YAAY9L,IAAEO,EAAEwL,oBAAoB,CAAC;oBAAC,IAAI,CAACC,YAAY,GAAChM;gBAAC;gBAACiM,cAAa;oBAAC,OAAO,IAAI,CAACD,YAAY;gBAAA;gBAACE,aAAalM,CAAC,EAACC,CAAC,EAAC;oBAAC,OAAO,IAAI;gBAAA;gBAACkM,cAAcnM,CAAC,EAAC;oBAAC,OAAO,IAAI;gBAAA;gBAACoM,SAASpM,CAAC,EAACC,CAAC,EAAC;oBAAC,OAAO,IAAI;gBAAA;gBAACoM,UAAUrM,CAAC,EAAC;oBAAC,OAAO,IAAI;gBAAA;gBAACsM,WAAWtM,CAAC,EAAC;oBAAC,OAAO,IAAI;gBAAA;gBAACuM,IAAIvM,CAAC,EAAC,CAAC;gBAACwM,cAAa;oBAAC,OAAO;gBAAK;gBAACC,gBAAgBzM,CAAC,EAACC,CAAC,EAAC,CAAC;YAAC;YAACA,EAAE6L,gBAAgB,GAACA;QAAgB;QAAE,KAAI,CAAC9L,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEyM,UAAU,GAAC,KAAK;YAAE,MAAMnM,IAAEL,EAAE;YAAK,MAAMM,IAAEN,EAAE;YAAK,MAAMO,IAAEP,EAAE;YAAK,MAAMQ,IAAER,EAAE;YAAK,MAAMS,IAAEJ,EAAED,UAAU,CAACO,WAAW;YAAG,MAAM6L;gBAAWC,UAAU3M,CAAC,EAACC,CAAC,EAACC,IAAES,EAAEQ,MAAM,EAAE,EAAC;oBAAC,MAAMZ,IAAEqM,QAAQ3M,MAAI,QAAMA,MAAI,KAAK,IAAE,KAAK,IAAEA,EAAE4M,IAAI;oBAAE,IAAGtM,GAAE;wBAAC,OAAO,IAAIE,EAAEqL,gBAAgB;oBAAA;oBAAC,MAAM/J,IAAE7B,KAAG,CAAC,GAAEM,EAAEiE,cAAc,EAAEvE;oBAAG,IAAG4M,cAAc/K,MAAI,CAAC,GAAErB,EAAE2D,kBAAkB,EAAEtC,IAAG;wBAAC,OAAO,IAAItB,EAAEqL,gBAAgB,CAAC/J;oBAAE,OAAK;wBAAC,OAAO,IAAItB,EAAEqL,gBAAgB;oBAAA;gBAAC;gBAACiB,gBAAgB/M,CAAC,EAACC,CAAC,EAACC,CAAC,EAACK,CAAC,EAAC;oBAAC,IAAIE;oBAAE,IAAIC;oBAAE,IAAIqB;oBAAE,IAAGiL,UAAUpF,MAAM,GAAC,GAAE;wBAAC;oBAAM,OAAM,IAAGoF,UAAUpF,MAAM,KAAG,GAAE;wBAAC7F,IAAE9B;oBAAC,OAAM,IAAG+M,UAAUpF,MAAM,KAAG,GAAE;wBAACnH,IAAER;wBAAE8B,IAAE7B;oBAAC,OAAK;wBAACO,IAAER;wBAAES,IAAER;wBAAE6B,IAAExB;oBAAC;oBAAC,MAAM6B,IAAE1B,MAAI,QAAMA,MAAI,KAAK,IAAEA,IAAEC,EAAEQ,MAAM;oBAAG,MAAMkB,IAAE,IAAI,CAACsK,SAAS,CAAC3M,GAAES,GAAE2B;oBAAG,MAAM6K,IAAE,CAAC,GAAEzM,EAAEkE,OAAO,EAAEtC,GAAEC;oBAAG,OAAO1B,EAAEU,IAAI,CAAC4L,GAAElL,GAAEmD,WAAU7C;gBAAE;YAAC;YAACpC,EAAEyM,UAAU,GAACA;YAAW,SAASI,cAAc9M,CAAC;gBAAE,OAAO,OAAOA,MAAI,YAAU,OAAOA,CAAC,CAAC,SAAS,KAAG,YAAU,OAAOA,CAAC,CAAC,UAAU,KAAG,YAAU,OAAOA,CAAC,CAAC,aAAa,KAAG;YAAQ;QAAC;QAAE,IAAG,CAACA,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEiN,kBAAkB,GAAC,KAAK;YAAE,MAAM3M,IAAEL,EAAE;YAAK,MAAMgN;gBAAmBnI,UAAU/E,CAAC,EAACC,CAAC,EAACC,CAAC,EAAC;oBAAC,OAAO,IAAIK,EAAEmM,UAAU;gBAAA;YAAC;YAACzM,EAAEiN,kBAAkB,GAACA;QAAkB;QAAE,KAAI,CAAClN,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEkN,WAAW,GAAC,KAAK;YAAE,MAAM5M,IAAEL,EAAE;YAAK,MAAMM,IAAE,IAAID,EAAEmM,UAAU;YAAC,MAAMS;gBAAYA,YAAYnN,CAAC,EAACC,CAAC,EAACC,CAAC,EAACK,CAAC,CAAC;oBAAC,IAAI,CAAC6M,SAAS,GAACpN;oBAAE,IAAI,CAACqN,IAAI,GAACpN;oBAAE,IAAI,CAACsI,OAAO,GAACrI;oBAAE,IAAI,CAACoN,OAAO,GAAC/M;gBAAC;gBAACoM,UAAU3M,CAAC,EAACC,CAAC,EAACC,CAAC,EAAC;oBAAC,OAAO,IAAI,CAACqN,UAAU,GAAGZ,SAAS,CAAC3M,GAAEC,GAAEC;gBAAE;gBAAC6M,gBAAgB/M,CAAC,EAACC,CAAC,EAACC,CAAC,EAACK,CAAC,EAAC;oBAAC,MAAMC,IAAE,IAAI,CAAC+M,UAAU;oBAAG,OAAOC,QAAQ7F,KAAK,CAACnH,EAAEuM,eAAe,EAACvM,GAAEwM;gBAAU;gBAACO,aAAY;oBAAC,IAAG,IAAI,CAACE,SAAS,EAAC;wBAAC,OAAO,IAAI,CAACA,SAAS;oBAAA;oBAAC,MAAMzN,IAAE,IAAI,CAACoN,SAAS,CAACM,iBAAiB,CAAC,IAAI,CAACL,IAAI,EAAC,IAAI,CAAC9E,OAAO,EAAC,IAAI,CAAC+E,OAAO;oBAAE,IAAG,CAACtN,GAAE;wBAAC,OAAOQ;oBAAC;oBAAC,IAAI,CAACiN,SAAS,GAACzN;oBAAE,OAAO,IAAI,CAACyN,SAAS;gBAAA;YAAC;YAACxN,EAAEkN,WAAW,GAACA;QAAW;QAAE,KAAI,CAACnN,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEkE,mBAAmB,GAAC,KAAK;YAAE,MAAM5D,IAAEL,EAAE;YAAK,MAAMM,IAAEN,EAAE;YAAI,MAAMO,IAAE,IAAID,EAAE0M,kBAAkB;YAAC,MAAM/I;gBAAoBY,UAAU/E,CAAC,EAACC,CAAC,EAACC,CAAC,EAAC;oBAAC,IAAIM;oBAAE,OAAM,CAACA,IAAE,IAAI,CAACkN,iBAAiB,CAAC1N,GAAEC,GAAEC,EAAE,MAAI,QAAMM,MAAI,KAAK,IAAEA,IAAE,IAAID,EAAE4M,WAAW,CAAC,IAAI,EAACnN,GAAEC,GAAEC;gBAAE;gBAACyN,cAAa;oBAAC,IAAI3N;oBAAE,OAAM,CAACA,IAAE,IAAI,CAACyN,SAAS,MAAI,QAAMzN,MAAI,KAAK,IAAEA,IAAES;gBAAC;gBAACoE,YAAY7E,CAAC,EAAC;oBAAC,IAAI,CAACyN,SAAS,GAACzN;gBAAC;gBAAC0N,kBAAkB1N,CAAC,EAACC,CAAC,EAACC,CAAC,EAAC;oBAAC,IAAIK;oBAAE,OAAM,CAACA,IAAE,IAAI,CAACkN,SAAS,MAAI,QAAMlN,MAAI,KAAK,IAAE,KAAK,IAAEA,EAAEwE,SAAS,CAAC/E,GAAEC,GAAEC;gBAAE;YAAC;YAACD,EAAEkE,mBAAmB,GAACA;QAAmB;QAAE,KAAI,CAACnE,GAAEC;YAAKE,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAE2N,gBAAgB,GAAC,KAAK;YAAE,IAAI1N;YAAE,CAAC,SAASF,CAAC;gBAAEA,CAAC,CAACA,CAAC,CAAC,aAAa,GAAC,EAAE,GAAC;gBAAaA,CAAC,CAACA,CAAC,CAAC,SAAS,GAAC,EAAE,GAAC;gBAASA,CAAC,CAACA,CAAC,CAAC,qBAAqB,GAAC,EAAE,GAAC;YAAoB,CAAC,EAAEE,IAAED,EAAE2N,gBAAgB,IAAE,CAAC3N,EAAE2N,gBAAgB,GAAC,CAAC,CAAC;QAAE;QAAE,KAAI,CAAC5N,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEwE,cAAc,GAACxE,EAAE0E,cAAc,GAAC1E,EAAEqE,UAAU,GAACrE,EAAEyE,OAAO,GAACzE,EAAEuE,aAAa,GAACvE,EAAEsE,OAAO,GAAC,KAAK;YAAE,MAAMhE,IAAEL,EAAE;YAAI,MAAMM,IAAEN,EAAE;YAAK,MAAMO,IAAEP,EAAE;YAAK,MAAMQ,IAAE,CAAC,GAAEH,EAAEyE,gBAAgB,EAAE;YAAkC,SAAST,QAAQvE,CAAC;gBAAE,OAAOA,EAAEiF,QAAQ,CAACvE,MAAIwE;YAAS;YAACjF,EAAEsE,OAAO,GAACA;YAAQ,SAASC;gBAAgB,OAAOD,QAAQ9D,EAAEH,UAAU,CAACO,WAAW,GAAGM,MAAM;YAAG;YAAClB,EAAEuE,aAAa,GAACA;YAAc,SAASE,QAAQ1E,CAAC,EAACC,CAAC;gBAAE,OAAOD,EAAEmF,QAAQ,CAACzE,GAAET;YAAE;YAACA,EAAEyE,OAAO,GAACA;YAAQ,SAASJ,WAAWtE,CAAC;gBAAE,OAAOA,EAAEoF,WAAW,CAAC1E;YAAE;YAACT,EAAEqE,UAAU,GAACA;YAAW,SAASK,eAAe3E,CAAC,EAACC,CAAC;gBAAE,OAAOyE,QAAQ1E,GAAE,IAAIQ,EAAEsL,gBAAgB,CAAC7L;YAAG;YAACA,EAAE0E,cAAc,GAACA;YAAe,SAASF,eAAezE,CAAC;gBAAE,IAAIC;gBAAE,OAAM,CAACA,IAAEsE,QAAQvE,EAAE,MAAI,QAAMC,MAAI,KAAK,IAAE,KAAK,IAAEA,EAAEgM,WAAW;YAAE;YAAChM,EAAEwE,cAAc,GAACA;QAAc;QAAE,KAAI,CAACzE,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAE4N,cAAc,GAAC,KAAK;YAAE,MAAMtN,IAAEL,EAAE;YAAK,MAAMM,IAAE;YAAG,MAAMC,IAAE;YAAI,MAAMC,IAAE;YAAI,MAAMC,IAAE;YAAI,MAAMkN;gBAAeA,YAAY7N,CAAC,CAAC;oBAAC,IAAI,CAAC8N,cAAc,GAAC,IAAIvI;oBAAI,IAAGvF,GAAE,IAAI,CAAC+N,MAAM,CAAC/N;gBAAE;gBAACiG,IAAIjG,CAAC,EAACC,CAAC,EAAC;oBAAC,MAAMC,IAAE,IAAI,CAAC8N,MAAM;oBAAG,IAAG9N,EAAE4N,cAAc,CAAC1E,GAAG,CAACpJ,IAAG;wBAACE,EAAE4N,cAAc,CAAC3H,MAAM,CAACnG;oBAAE;oBAACE,EAAE4N,cAAc,CAAC7H,GAAG,CAACjG,GAAEC;oBAAG,OAAOC;gBAAC;gBAAC+N,MAAMjO,CAAC,EAAC;oBAAC,MAAMC,IAAE,IAAI,CAAC+N,MAAM;oBAAG/N,EAAE6N,cAAc,CAAC3H,MAAM,CAACnG;oBAAG,OAAOC;gBAAC;gBAACwF,IAAIzF,CAAC,EAAC;oBAAC,OAAO,IAAI,CAAC8N,cAAc,CAACrI,GAAG,CAACzF;gBAAE;gBAACkO,YAAW;oBAAC,OAAO,IAAI,CAACC,KAAK,GAAGC,MAAM,CAAE,CAACpO,GAAEC;wBAAKD,EAAEqO,IAAI,CAACpO,IAAEU,IAAE,IAAI,CAAC8E,GAAG,CAACxF;wBAAI,OAAOD;oBAAC,GAAG,EAAE,EAAEsO,IAAI,CAAC5N;gBAAE;gBAACqN,OAAO/N,CAAC,EAAC;oBAAC,IAAGA,EAAE4H,MAAM,GAACnH,GAAE;oBAAO,IAAI,CAACqN,cAAc,GAAC9N,EAAEqI,KAAK,CAAC3H,GAAG6N,OAAO,GAAGH,MAAM,CAAE,CAACpO,GAAEC;wBAAK,MAAMC,IAAED,EAAEuO,IAAI;wBAAG,MAAMhO,IAAEN,EAAEuO,OAAO,CAAC9N;wBAAG,IAAGH,MAAI,CAAC,GAAE;4BAAC,MAAMC,IAAEP,EAAEwO,KAAK,CAAC,GAAElO;4BAAG,MAAME,IAAER,EAAEwO,KAAK,CAAClO,IAAE,GAAEP,EAAE2H,MAAM;4BAAE,IAAG,CAAC,GAAErH,EAAEoO,WAAW,EAAElO,MAAI,CAAC,GAAEF,EAAEqO,aAAa,EAAElO,IAAG;gCAACV,EAAEiG,GAAG,CAACxF,GAAEC;4BAAE,OAAK,CAAC;wBAAC;wBAAC,OAAOV;oBAAC,GAAG,IAAIuF;oBAAK,IAAG,IAAI,CAACuI,cAAc,CAACe,IAAI,GAACrO,GAAE;wBAAC,IAAI,CAACsN,cAAc,GAAC,IAAIvI,IAAIK,MAAMC,IAAI,CAAC,IAAI,CAACiI,cAAc,CAAChI,OAAO,IAAIyI,OAAO,GAAGG,KAAK,CAAC,GAAElO;oBAAG;gBAAC;gBAAC2N,QAAO;oBAAC,OAAOvI,MAAMC,IAAI,CAAC,IAAI,CAACiI,cAAc,CAAClC,IAAI,IAAI2C,OAAO;gBAAE;gBAACP,SAAQ;oBAAC,MAAMhO,IAAE,IAAI6N;oBAAe7N,EAAE8N,cAAc,GAAC,IAAIvI,IAAI,IAAI,CAACuI,cAAc;oBAAE,OAAO9N;gBAAC;YAAC;YAACC,EAAE4N,cAAc,GAACA;QAAc;QAAE,KAAI,CAAC7N,GAAEC;YAAKE,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAE2O,aAAa,GAAC3O,EAAE0O,WAAW,GAAC,KAAK;YAAE,MAAMzO,IAAE;YAAe,MAAMK,IAAE,CAAC,KAAK,EAAEL,EAAE,OAAO,CAAC;YAAC,MAAMM,IAAE,CAAC,QAAQ,EAAEN,EAAE,aAAa,EAAEA,EAAE,MAAM,CAAC;YAAC,MAAMO,IAAE,IAAIqO,OAAO,CAAC,IAAI,EAAEvO,EAAE,CAAC,EAAEC,EAAE,EAAE,CAAC;YAAE,MAAME,IAAE;YAAsB,MAAMC,IAAE;YAAM,SAASgO,YAAY3O,CAAC;gBAAE,OAAOS,EAAEsO,IAAI,CAAC/O;YAAE;YAACC,EAAE0O,WAAW,GAACA;YAAY,SAASC,cAAc5O,CAAC;gBAAE,OAAOU,EAAEqO,IAAI,CAAC/O,MAAI,CAACW,EAAEoO,IAAI,CAAC/O;YAAE;YAACC,EAAE2O,aAAa,GAACA;QAAa;QAAE,IAAG,CAAC5O,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAE+O,gBAAgB,GAAC,KAAK;YAAE,MAAMzO,IAAEL,EAAE;YAAK,SAAS8O,iBAAiBhP,CAAC;gBAAE,OAAO,IAAIO,EAAEsN,cAAc,CAAC7N;YAAE;YAACC,EAAE+O,gBAAgB,GAACA;QAAgB;QAAE,KAAI,CAAChP,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAE8L,oBAAoB,GAAC9L,EAAEgP,eAAe,GAAChP,EAAEiP,cAAc,GAAC,KAAK;YAAE,MAAM3O,IAAEL,EAAE;YAAKD,EAAEiP,cAAc,GAAC;YAAmBjP,EAAEgP,eAAe,GAAC;YAAmChP,EAAE8L,oBAAoB,GAAC;gBAACoD,SAAQlP,EAAEgP,eAAe;gBAACG,QAAOnP,EAAEiP,cAAc;gBAACG,YAAW9O,EAAE+O,UAAU,CAACzH,IAAI;YAAA;QAAC;QAAE,KAAI,CAAC7H,GAAEC;YAAKE,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEsP,QAAQ,GAAC,KAAK;YAAE,IAAIrP;YAAE,CAAC,SAASF,CAAC;gBAAEA,CAAC,CAACA,CAAC,CAAC,WAAW,GAAC,EAAE,GAAC;gBAAWA,CAAC,CAACA,CAAC,CAAC,SAAS,GAAC,EAAE,GAAC;gBAASA,CAAC,CAACA,CAAC,CAAC,SAAS,GAAC,EAAE,GAAC;gBAASA,CAAC,CAACA,CAAC,CAAC,WAAW,GAAC,EAAE,GAAC;gBAAWA,CAAC,CAACA,CAAC,CAAC,WAAW,GAAC,EAAE,GAAC;YAAU,CAAC,EAAEE,IAAED,EAAEsP,QAAQ,IAAE,CAACtP,EAAEsP,QAAQ,GAAC,CAAC,CAAC;QAAE;QAAE,KAAI,CAACvP,GAAEC,GAAEC;YAAKC,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEmE,eAAe,GAACnE,EAAEoE,kBAAkB,GAACpE,EAAEuP,aAAa,GAACvP,EAAEwP,cAAc,GAAC,KAAK;YAAE,MAAMlP,IAAEL,EAAE;YAAK,MAAMM,IAAEN,EAAE;YAAK,MAAMO,IAAE;YAAoB,MAAMC,IAAE;YAAkB,SAAS+O,eAAezP,CAAC;gBAAE,OAAOS,EAAEsO,IAAI,CAAC/O,MAAIA,MAAIO,EAAE0O,eAAe;YAAA;YAAChP,EAAEwP,cAAc,GAACA;YAAe,SAASD,cAAcxP,CAAC;gBAAE,OAAOU,EAAEqO,IAAI,CAAC/O,MAAIA,MAAIO,EAAE2O,cAAc;YAAA;YAACjP,EAAEuP,aAAa,GAACA;YAAc,SAASnL,mBAAmBrE,CAAC;gBAAE,OAAOyP,eAAezP,EAAEmP,OAAO,KAAGK,cAAcxP,EAAEoP,MAAM;YAAC;YAACnP,EAAEoE,kBAAkB,GAACA;YAAmB,SAASD,gBAAgBpE,CAAC;gBAAE,OAAO,IAAIQ,EAAEsL,gBAAgB,CAAC9L;YAAE;YAACC,EAAEmE,eAAe,GAACA;QAAe;QAAE,KAAI,CAACpE,GAAEC;YAAKE,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEyP,cAAc,GAAC,KAAK;YAAE,IAAIxP;YAAE,CAAC,SAASF,CAAC;gBAAEA,CAAC,CAACA,CAAC,CAAC,QAAQ,GAAC,EAAE,GAAC;gBAAQA,CAAC,CAACA,CAAC,CAAC,KAAK,GAAC,EAAE,GAAC;gBAAKA,CAAC,CAACA,CAAC,CAAC,QAAQ,GAAC,EAAE,GAAC;YAAO,CAAC,EAAEE,IAAED,EAAEyP,cAAc,IAAE,CAACzP,EAAEyP,cAAc,GAAC,CAAC,CAAC;QAAE;QAAE,KAAI,CAAC1P,GAAEC;YAAKE,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEqP,UAAU,GAAC,KAAK;YAAE,IAAIpP;YAAE,CAAC,SAASF,CAAC;gBAAEA,CAAC,CAACA,CAAC,CAAC,OAAO,GAAC,EAAE,GAAC;gBAAOA,CAAC,CAACA,CAAC,CAAC,UAAU,GAAC,EAAE,GAAC;YAAS,CAAC,EAAEE,IAAED,EAAEqP,UAAU,IAAE,CAACrP,EAAEqP,UAAU,GAAC,CAAC,CAAC;QAAE;QAAE,KAAI,CAACtP,GAAEC;YAAKE,OAAOC,cAAc,CAACH,GAAE,cAAa;gBAACI,OAAM;YAAI;YAAGJ,EAAEmI,OAAO,GAAC,KAAK;YAAEnI,EAAEmI,OAAO,GAAC;QAAO;IAAC;IAAE,IAAInI,IAAE,CAAC;IAAE,SAAS0P,oBAAoBzP,CAAC;QAAE,IAAIK,IAAEN,CAAC,CAACC,EAAE;QAAC,IAAGK,MAAI2E,WAAU;YAAC,OAAO3E,EAAEqP,OAAO;QAAA;QAAC,IAAIpP,IAAEP,CAAC,CAACC,EAAE,GAAC;YAAC0P,SAAQ,CAAC;QAAC;QAAE,IAAInP,IAAE;QAAK,IAAG;YAACT,CAAC,CAACE,EAAE,CAAC2G,IAAI,CAACrG,EAAEoP,OAAO,EAACpP,GAAEA,EAAEoP,OAAO,EAACD;YAAqBlP,IAAE;QAAK,SAAQ;YAAC,IAAGA,GAAE,OAAOR,CAAC,CAACC,EAAE;QAAA;QAAC,OAAOM,EAAEoP,OAAO;IAAA;IAAC,IAAG,OAAOD,wBAAsB,aAAYA,oBAAoBE,EAAE,GAAC,+FAAU;IAAI,IAAI3P,IAAE,CAAC;IAAE,CAAC;QAAK,IAAIF,IAAEE;QAAEC,OAAOC,cAAc,CAACJ,GAAE,cAAa;YAACK,OAAM;QAAI;QAAGL,EAAE6L,KAAK,GAAC7L,EAAE2L,WAAW,GAAC3L,EAAEqJ,OAAO,GAACrJ,EAAEkH,IAAI,GAAClH,EAAE2G,OAAO,GAAC3G,EAAE+L,oBAAoB,GAAC/L,EAAEiP,eAAe,GAACjP,EAAEkP,cAAc,GAAClP,EAAEwP,aAAa,GAACxP,EAAEyP,cAAc,GAACzP,EAAEqE,kBAAkB,GAACrE,EAAEgP,gBAAgB,GAAChP,EAAEsP,UAAU,GAACtP,EAAE0P,cAAc,GAAC1P,EAAEuP,QAAQ,GAACvP,EAAE4N,gBAAgB,GAAC5N,EAAEmE,mBAAmB,GAACnE,EAAEmN,WAAW,GAACnN,EAAE4D,oBAAoB,GAAC5D,EAAE+D,oBAAoB,GAAC/D,EAAEsJ,SAAS,GAACtJ,EAAEuJ,eAAe,GAACvJ,EAAE6B,YAAY,GAAC7B,EAAEuH,iBAAiB,GAACvH,EAAE4G,YAAY,GAAC5G,EAAEgF,gBAAgB,GAAChF,EAAEwG,8BAA8B,GAAC,KAAK;QAAE,IAAIvG,IAAE0P,oBAAoB;QAAKxP,OAAOC,cAAc,CAACJ,GAAE,kCAAiC;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAOxF,EAAEuG,8BAA8B;YAAA;QAAC;QAAG,IAAIjG,IAAEoP,oBAAoB;QAAIxP,OAAOC,cAAc,CAACJ,GAAE,oBAAmB;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAOlF,EAAEyE,gBAAgB;YAAA;QAAC;QAAG7E,OAAOC,cAAc,CAACJ,GAAE,gBAAe;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAOlF,EAAEqG,YAAY;YAAA;QAAC;QAAG,IAAIpG,IAAEmP,oBAAoB;QAAIxP,OAAOC,cAAc,CAACJ,GAAE,qBAAoB;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAOjF,EAAE+G,iBAAiB;YAAA;QAAC;QAAG,IAAI9G,IAAEkP,oBAAoB;QAAKxP,OAAOC,cAAc,CAACJ,GAAE,gBAAe;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAOhF,EAAEoB,YAAY;YAAA;QAAC;QAAG,IAAInB,IAAEiP,oBAAoB;QAAKxP,OAAOC,cAAc,CAACJ,GAAE,mBAAkB;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAO/E,EAAE6I,eAAe;YAAA;QAAC;QAAG,IAAI5I,IAAEgP,oBAAoB;QAAKxP,OAAOC,cAAc,CAACJ,GAAE,aAAY;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAO9E,EAAE2I,SAAS;YAAA;QAAC;QAAG,IAAIvH,IAAE4N,oBAAoB;QAAIxP,OAAOC,cAAc,CAACJ,GAAE,wBAAuB;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAO1D,EAAEgC,oBAAoB;YAAA;QAAC;QAAG5D,OAAOC,cAAc,CAACJ,GAAE,wBAAuB;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAO1D,EAAE6B,oBAAoB;YAAA;QAAC;QAAG,IAAIxB,IAAEuN,oBAAoB;QAAKxP,OAAOC,cAAc,CAACJ,GAAE,eAAc;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAOrD,EAAE+K,WAAW;YAAA;QAAC;QAAG,IAAI9K,IAAEsN,oBAAoB;QAAKxP,OAAOC,cAAc,CAACJ,GAAE,uBAAsB;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAOpD,EAAE8B,mBAAmB;YAAA;QAAC;QAAG,IAAI8I,IAAE0C,oBAAoB;QAAKxP,OAAOC,cAAc,CAACJ,GAAE,oBAAmB;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAOwH,EAAEW,gBAAgB;YAAA;QAAC;QAAG,IAAIkC,IAAEH,oBAAoB;QAAKxP,OAAOC,cAAc,CAACJ,GAAE,YAAW;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAOqK,EAAEP,QAAQ;YAAA;QAAC;QAAG,IAAIQ,IAAEJ,oBAAoB;QAAKxP,OAAOC,cAAc,CAACJ,GAAE,kBAAiB;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAOsK,EAAEL,cAAc;YAAA;QAAC;QAAG,IAAIM,IAAEL,oBAAoB;QAAKxP,OAAOC,cAAc,CAACJ,GAAE,cAAa;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAOuK,EAAEV,UAAU;YAAA;QAAC;QAAG,IAAIW,IAAEN,oBAAoB;QAAIxP,OAAOC,cAAc,CAACJ,GAAE,oBAAmB;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAOwK,EAAEjB,gBAAgB;YAAA;QAAC;QAAG,IAAIkB,IAAEP,oBAAoB;QAAKxP,OAAOC,cAAc,CAACJ,GAAE,sBAAqB;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAOyK,EAAE7L,kBAAkB;YAAA;QAAC;QAAGlE,OAAOC,cAAc,CAACJ,GAAE,kBAAiB;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAOyK,EAAET,cAAc;YAAA;QAAC;QAAGtP,OAAOC,cAAc,CAACJ,GAAE,iBAAgB;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAOyK,EAAEV,aAAa;YAAA;QAAC;QAAG,IAAIW,IAAER,oBAAoB;QAAKxP,OAAOC,cAAc,CAACJ,GAAE,kBAAiB;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAO0K,EAAEjB,cAAc;YAAA;QAAC;QAAG/O,OAAOC,cAAc,CAACJ,GAAE,mBAAkB;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAO0K,EAAElB,eAAe;YAAA;QAAC;QAAG9O,OAAOC,cAAc,CAACJ,GAAE,wBAAuB;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAO0K,EAAEpE,oBAAoB;YAAA;QAAC;QAAG,MAAMqE,IAAET,oBAAoB;QAAKxP,OAAOC,cAAc,CAACJ,GAAE,WAAU;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAO2K,EAAEzJ,OAAO;YAAA;QAAC;QAAG,MAAM0J,IAAEV,oBAAoB;QAAKxP,OAAOC,cAAc,CAACJ,GAAE,QAAO;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAO4K,EAAEnJ,IAAI;YAAA;QAAC;QAAG,MAAMoJ,IAAEX,oBAAoB;QAAKxP,OAAOC,cAAc,CAACJ,GAAE,WAAU;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAO6K,EAAEjH,OAAO;YAAA;QAAC;QAAG,MAAMkH,IAAEZ,oBAAoB;QAAIxP,OAAOC,cAAc,CAACJ,GAAE,eAAc;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAO8K,EAAE5E,WAAW;YAAA;QAAC;QAAG,MAAM6E,IAAEb,oBAAoB;QAAKxP,OAAOC,cAAc,CAACJ,GAAE,SAAQ;YAACsL,YAAW;YAAK7F,KAAI;gBAAW,OAAO+K,EAAE3E,KAAK;YAAA;QAAC;QAAG7L,CAAC,CAAC,UAAU,GAAC;YAAC2G,SAAQyJ,EAAEzJ,OAAO;YAACO,MAAKmJ,EAAEnJ,IAAI;YAACmC,SAAQiH,EAAEjH,OAAO;YAACsC,aAAY4E,EAAE5E,WAAW;YAACE,OAAM2E,EAAE3E,KAAK;QAAA;IAAC,CAAC;IAAI4E,OAAOb,OAAO,GAAC1P;AAAC,CAAC","ignoreList":[0]}}, + {"offset": {"line": 12922, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/node_modules/next/dist/compiled/cookie/index.js"],"sourcesContent":["(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var r=e;\n/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */r.parse=parse;r.serialize=serialize;var i=decodeURIComponent;var t=encodeURIComponent;var a=/; */;var n=/^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;function parse(e,r){if(typeof e!==\"string\"){throw new TypeError(\"argument str must be a string\")}var t={};var n=r||{};var o=e.split(a);var s=n.decode||i;for(var p=0;pitem.title?.trim()).map((item, index)=>({ + const resolved = ads ? ads.filter((item)=>item.title?.trim()).map((item)=>({ label: item.title, href: httpUrl(item.link) || undefined })) : [ @@ -450,21 +450,17 @@ __turbopack_context__.s([ var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js [app-rsc] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/client/app-dir/link.react-server.js [app-rsc] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$decrypted$2d$image$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/common/decrypted-image.tsx [app-rsc] (ecmascript)"); -var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$site$2f$routes$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/site/routes.ts [app-rsc] (ecmascript)"); -; ; ; ; const defaultWideAds = [ { src: "/images/banners/0.png", - alt: "推广广告 1", - href: __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$site$2f$routes$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["routes"].apps + alt: "推广广告 1" }, { src: "/images/banners/1.png", - alt: "推广广告 2", - href: __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$site$2f$routes$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["routes"].apps + alt: "推广广告 2" } ]; function httpAdUrl(link) { @@ -501,7 +497,7 @@ function WideAdRow({ items = defaultWideAds, ads, label = "推广广告", classN height: 97 }, void 0, false, { fileName: "[project]/src/components/common/wide-ad-row.tsx", - lineNumber: 59, + lineNumber: 58, columnNumber: 25 }, this); if (!href) { @@ -510,7 +506,7 @@ function WideAdRow({ items = defaultWideAds, ads, label = "推广广告", classN children: image }, item.id || item.images, false, { fileName: "[project]/src/components/common/wide-ad-row.tsx", - lineNumber: 62, + lineNumber: 61, columnNumber: 15 }, this); } @@ -522,13 +518,13 @@ function WideAdRow({ items = defaultWideAds, ads, label = "推广广告", classN children: image }, item.id || item.images, false, { fileName: "[project]/src/components/common/wide-ad-row.tsx", - lineNumber: 68, + lineNumber: 67, columnNumber: 13 }, this); }) }, void 0, false, { fileName: "[project]/src/components/common/wide-ad-row.tsx", - lineNumber: 56, + lineNumber: 55, columnNumber: 7 }, this); } @@ -544,7 +540,7 @@ function WideAdRow({ items = defaultWideAds, ads, label = "推广广告", classN height: item.height ?? 97 }, void 0, false, { fileName: "[project]/src/components/common/wide-ad-row.tsx", - lineNumber: 82, + lineNumber: 81, columnNumber: 11 }, this); if (item.href) { @@ -554,7 +550,7 @@ function WideAdRow({ items = defaultWideAds, ads, label = "推广广告", classN children: image }, `${item.src}-${index}`, false, { fileName: "[project]/src/components/common/wide-ad-row.tsx", - lineNumber: 91, + lineNumber: 90, columnNumber: 13 }, this); } @@ -563,13 +559,13 @@ function WideAdRow({ items = defaultWideAds, ads, label = "推广广告", classN children: image }, `${item.src}-${index}`, false, { fileName: "[project]/src/components/common/wide-ad-row.tsx", - lineNumber: 97, + lineNumber: 96, columnNumber: 11 }, this); }) }, void 0, false, { fileName: "[project]/src/components/common/wide-ad-row.tsx", - lineNumber: 79, + lineNumber: 78, columnNumber: 5 }, this); } @@ -680,33 +676,36 @@ function overlays(drama) { columnNumber: 5 }, this); } +function tags(drama) { + return (drama.tagLinks || []).length ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$card$2d$tags$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["CardTags"], { + tags: (drama.tagLinks || []).slice(0, 2) + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 40, + columnNumber: 5 + }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "drama-tags", + children: drama.tags.slice(0, 2).map((tag)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: [ + "#", + tag.replace(/^#/, "") + ] + }, tag, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 44, + columnNumber: 9 + }, this)) + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 42, + columnNumber: 5 + }, this); +} function meta(drama) { return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { className: "drama-meta", children: [ - (drama.tagLinks || []).length ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$card$2d$tags$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["CardTags"], { - tags: (drama.tagLinks || []).slice(0, 2) - }, void 0, false, { - fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 42, - columnNumber: 9 - }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { - className: "drama-tags", - children: drama.tags.slice(0, 2).map((tag)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { - children: [ - "#", - tag.replace(/^#/, "") - ] - }, tag, true, { - fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 46, - columnNumber: 13 - }, this)) - }, void 0, false, { - fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 44, - columnNumber: 9 - }, this), + tags(drama), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { className: "drama-heat", "aria-label": `热度 ${heatLabel(drama)}`, @@ -719,43 +718,43 @@ function meta(drama) { d: "M12 21s-9-5.7-9-12a5 5 0 0 1 9-3 5 5 0 0 1 9 3c0 6.3-9 12-9 12Z" }, void 0, false, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 52, + lineNumber: 56, columnNumber: 11 }, this) }, void 0, false, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 51, + lineNumber: 55, columnNumber: 9 }, this), heatLabel(drama) ] }, void 0, true, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 50, + lineNumber: 54, columnNumber: 7 }, this) ] }, void 0, true, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 40, + lineNumber: 52, columnNumber: 5 }, this); } -function FlameIcon() { +function HeatIcon() { return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("svg", { - className: "mc-flame", + className: "tk-heat-icon", viewBox: "0 0 24 24", "aria-hidden": "true", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("path", { - d: "M12 3c1 3.5 5 5.6 5 10.2A5 5 0 0 1 12 18a5 5 0 0 1-5-4.8c0-2.3 1.2-3.6 2.4-4.8.3 1.6 1 2.6 2 3.1C11 9.4 11 6 12 3Z" + d: "M5 20V12M12 20V5M19 20v-9" }, void 0, false, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 63, + lineNumber: 67, columnNumber: 7 }, this) }, void 0, false, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 62, + lineNumber: 66, columnNumber: 5 }, this); } @@ -773,20 +772,20 @@ function rankMedal(listRank) { children: "TOP" }, void 0, false, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 77, + lineNumber: 81, columnNumber: 7 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("strong", { children: String(listRank).padStart(2, "0") }, void 0, false, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 78, + lineNumber: 82, columnNumber: 7 }, this) ] }, void 0, true, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 76, + lineNumber: 80, columnNumber: 5 }, this); } @@ -798,89 +797,139 @@ function DramaCard({ drama, title, rank, listRank, ribbon, variant = "card" }) { height: 914 }, void 0, false, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 86, + lineNumber: 90, columnNumber: 5 }, this); const heading = title ?? drama.title; if (variant === "curated") { const desc = drama.desc?.trim() || ""; const genre = drama.genre?.trim() || ""; - // 旗标位宽约 4 字题材 +「精选」,过长会挤出 ribbon 图 - const pickGenre = genre.length > 4 ? `${genre.slice(0, 4)}…` : genre; - const pickLabel = pickGenre ? `${pickGenre}精选` : "精选"; + const pickLabel = genre ? `${genre}精选` : "精选"; + // 黄果版「猜你喜欢」:模糊海报氛围底 + 行内精选标签 + 底部操作栏,样式见 styles/pick-card.css return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["default"], { - className: "curated-card drama-data-card", + className: "hg-pick-card", href: href, "data-open": drama.id, "data-ribbon": ribbon || "orange", "aria-label": `观看${drama.title}`, children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { - className: "pick", - children: pickLabel + className: "hg-pick-backdrop", + "aria-hidden": "true", + children: poster }, void 0, false, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 103, + lineNumber: 106, columnNumber: 9 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { - className: "media portrait", + className: "hg-pick-poster media portrait", children: [ poster, overlays(drama) ] }, void 0, true, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 104, + lineNumber: 109, columnNumber: 9 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { - className: "curated-copy", + className: "hg-pick-body", children: [ - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", { - children: heading - }, void 0, false, { - fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 109, - columnNumber: 11 - }, this), - desc ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { - className: "drama-description martial-description", - children: desc - }, void 0, false, { - fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 110, - columnNumber: 19 - }, this) : null, - meta(drama), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { - className: "watch-link", + className: "hg-pick-top", children: [ - "立即观看 ", /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { - className: "watch-link-arrow", - "aria-hidden": "true" + className: "hg-pick-chip", + children: pickLabel }, void 0, false, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 113, - columnNumber: 18 + lineNumber: 115, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "hg-pick-heat", + "aria-label": `热度 ${heatLabel(drama)}`, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(HeatIcon, {}, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 117, + columnNumber: 15 + }, this), + heatLabel(drama) + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 116, + columnNumber: 13 }, this) ] }, void 0, true, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 112, + lineNumber: 114, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", { + className: "hg-pick-title", + children: heading + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 121, + columnNumber: 11 + }, this), + desc ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "hg-pick-desc", + children: desc + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 122, + columnNumber: 19 + }, this) : null, + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "hg-pick-foot", + children: [ + tags(drama), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "hg-pick-play", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("svg", { + viewBox: "0 0 24 24", + "aria-hidden": "true", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("path", { + d: "M8 5.5v13l10.5-6.5Z" + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 127, + columnNumber: 17 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 126, + columnNumber: 15 + }, this), + "立即观看" + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 125, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 123, columnNumber: 11 }, this) ] }, void 0, true, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 108, + lineNumber: 113, columnNumber: 9 }, this) ] }, void 0, true, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 96, + lineNumber: 99, columnNumber: 7 }, this); } @@ -899,7 +948,7 @@ function DramaCard({ drama, title, rank, listRank, ribbon, variant = "card" }) { children: poster }, void 0, false, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 125, + lineNumber: 142, columnNumber: 11 }, this), overlays(drama), @@ -910,13 +959,13 @@ function DramaCard({ drama, title, rank, listRank, ribbon, variant = "card" }) { children: place }, void 0, false, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 129, + lineNumber: 146, columnNumber: 11 }, this) ] }, void 0, true, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 124, + lineNumber: 141, columnNumber: 9 }, this), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { @@ -926,181 +975,201 @@ function DramaCard({ drama, title, rank, listRank, ribbon, variant = "card" }) { children: heading }, void 0, false, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 135, + lineNumber: 152, columnNumber: 13 }, this) }, void 0, false, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 134, + lineNumber: 151, columnNumber: 11 }, this) }, void 0, false, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 133, + lineNumber: 150, columnNumber: 9 }, this), meta(drama) ] }, void 0, true, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 123, + lineNumber: 140, columnNumber: 7 }, this); } const video = isSingleVideo(drama); const total = Math.max(1, Number(drama.eps) || 1); - const tagLinks = (drama.tagLinks || []).slice(0, 2); - const desc = drama.desc?.trim() || ""; + const allTags = drama.tagLinks || []; + const firstTag = allTags.find((tag)=>tag.kind !== "theme") || allTags[0]; const genre = drama.genre?.trim() || ""; + const segments = Math.min(total, 12); return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["default"], { - className: `card media-card ${video ? "media-card--video" : "media-card--series"}`, + className: `card tk-card ${video ? "tk-card--video" : "tk-card--series"}`, href: href, "aria-label": video ? `观看视频:${drama.title}` : `查看短剧:${drama.title},共${total}集`, children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { - className: "mc-frame", + className: "tk-cover", children: [ - video ? null : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { - className: "mc-stack", - "aria-hidden": "true" + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$poster$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["Poster"], { + className: "tk-img", + src: drama.coverUrl, + width: 640, + height: 800 }, void 0, false, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 155, - columnNumber: 25 + lineNumber: 173, + columnNumber: 9 }, this), - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { - className: "mc-cover", + drama.badge && drama.badgeType ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: `tk-ribbon tk-ribbon--${drama.badgeType}`, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: drama.badge + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 176, + columnNumber: 13 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 175, + columnNumber: 11 + }, this) : null, + video ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "tk-chip", children: [ - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$poster$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["Poster"], { - className: "mc-img", - src: drama.coverUrl, - width: 640, - height: 914 + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + "aria-hidden": "true", + children: "▶" }, void 0, false, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 157, + lineNumber: 181, + columnNumber: 13 + }, this), + " 单集" + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 180, + columnNumber: 11 + }, this) : null, + listRank ? rankMedal(listRank) : null, + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "tk-shade", + children: [ + video ? null : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "tk-count", + children: drama.finished ? `共${total}集` : `更至${total}集` + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 186, + columnNumber: 27 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", { + className: "tk-title", + children: heading + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 187, columnNumber: 11 }, this), - drama.badge && drama.badgeType ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { - className: `mc-bookmark mc-bookmark--${drama.badgeType}`, - children: drama.badge - }, void 0, false, { - fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 159, - columnNumber: 13 - }, this) : null, - video ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { - className: "mc-play", - "aria-hidden": "true", - children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("svg", { - viewBox: "0 0 24 24", - children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("path", { - d: "M9 7.5v9l7.5-4.5Z" - }, void 0, false, { - fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 164, - columnNumber: 17 - }, this) - }, void 0, false, { - fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 163, - columnNumber: 15 - }, this) - }, void 0, false, { - fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 162, - columnNumber: 13 - }, this) : null, - listRank ? rankMedal(listRank) : null, /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { - className: "mc-rail", - children: [ - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { - className: "mc-kind", - children: video ? "视频" : `短剧 · ${drama.finished ? "全" : "更至"}${total}集` - }, void 0, false, { - fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 170, - columnNumber: 13 - }, this), - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { - className: "mc-heat", - "aria-label": `热度 ${heatLabel(drama)}`, - children: [ - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(FlameIcon, {}, void 0, false, { - fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 172, - columnNumber: 15 - }, this), - heatLabel(drama) - ] - }, void 0, true, { - fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 171, - columnNumber: 13 - }, this) - ] - }, void 0, true, { + className: "tk-cta", + "aria-hidden": "true", + children: "立即播放 →" + }, void 0, false, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 169, + lineNumber: 188, columnNumber: 11 }, this) ] }, void 0, true, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 156, + lineNumber: 185, columnNumber: 9 + }, this), + video ? null : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "tk-strip", + "aria-hidden": "true", + children: Array.from({ + length: segments + }, (_, index)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("i", {}, index, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 195, + columnNumber: 15 + }, this)) + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 193, + columnNumber: 11 }, this) ] }, void 0, true, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 154, + lineNumber: 172, columnNumber: 7 }, this), - /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", { - className: "mc-title", - children: heading - }, void 0, false, { - fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 178, - columnNumber: 7 - }, this), - desc ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { - className: "mc-desc", - children: desc - }, void 0, false, { - fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 179, - columnNumber: 15 - }, this) : null, - genre || tagLinks.length ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { - className: "mc-foot", + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "tk-meta", children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "tk-heat", + "aria-label": `热度 ${heatLabel(drama)}`, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(HeatIcon, {}, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 202, + columnNumber: 11 + }, this), + heatLabel(drama) + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 201, + columnNumber: 9 + }, this), genre ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { - className: "mc-theme", + className: "tk-theme", children: genre }, void 0, false, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 182, - columnNumber: 20 + lineNumber: 205, + columnNumber: 18 }, this) : null, - tagLinks.length ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$card$2d$tags$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["CardTags"], { - tags: tagLinks + firstTag ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$card$2d$tags$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["CardTags"], { + tags: [ + firstTag + ] }, void 0, false, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 183, - columnNumber: 30 + lineNumber: 207, + columnNumber: 11 + }, this) : drama.tags[0] ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "drama-tags", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: [ + "#", + drama.tags[0].replace(/^#/, "") + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 210, + columnNumber: 13 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 209, + columnNumber: 11 }, this) : null ] }, void 0, true, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 181, - columnNumber: 9 - }, this) : null + lineNumber: 200, + columnNumber: 7 + }, this) ] }, void 0, true, { fileName: "[project]/src/components/drama/drama-card.tsx", - lineNumber: 149, + lineNumber: 167, columnNumber: 5 }, this); } @@ -2026,9 +2095,7 @@ __turbopack_context__.s([ "ApiError", ()=>ApiError, "apiRequest", - ()=>apiRequest, - "apiUpload", - ()=>apiUpload + ()=>apiRequest ]); var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$config$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/config.ts [app-rsc] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$sdk$2d$headers$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/sdk-headers.ts [app-rsc] (ecmascript)"); @@ -2046,13 +2113,12 @@ class ApiError extends Error { } } async function apiRequest(path, options = {}) { - const { method = "GET", body, token } = options; + const { method = "GET", body } = options; const headers = { Accept: "application/json", ...await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$sdk$2d$headers$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["browserTrackingHeaders"])(("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : "") }; if (body !== undefined) headers["Content-Type"] = "application/json"; - if (token) headers.Authorization = token; let response; try { response = await fetch(`${__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$config$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["API_BASE_URL"]}${path}`, { @@ -2079,38 +2145,6 @@ async function apiRequest(path, options = {}) { } return payload.data; } -async function apiUpload(path, formData, token) { - const headers = { - Accept: "application/json", - ...await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$sdk$2d$headers$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["browserTrackingHeaders"])(("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : "") - }; - if (token) headers.Authorization = token; - let response; - try { - response = await fetch(`${__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$config$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["API_BASE_URL"]}${path}`, { - method: "POST", - headers, - body: formData - }); - } catch { - throw new ApiError("网络异常,请稍后重试", 0); - } - const text = await response.text(); - let payload = null; - try { - payload = text ? JSON.parse(text) : null; - } catch { - payload = null; - } - if (!payload || typeof payload.code !== "number") { - throw new ApiError(response.ok ? "上传响应格式异常" : `上传失败 (${response.status})`, response.status); - } - if (!response.ok || payload.code !== 200) { - const detail = typeof payload.data === "string" ? payload.data.trim() : ""; - throw new ApiError(detail || payload.tip || payload.msg || "上传失败", response.status, payload.code); - } - return payload.data; -} }), "[project]/src/lib/api/playlet-server.ts [app-rsc] (ecmascript)", ((__turbopack_context__) => { "use strict"; @@ -2145,12 +2179,10 @@ __turbopack_context__.s([ "matchPlayletTagOption", ()=>matchPlayletTagOption ]); -var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$auth$2f$server$2d$profile$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/auth/server-profile.ts [app-rsc] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/playlet.ts [app-rsc] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/server-fetch.ts [app-rsc] (ecmascript)"); ; ; -; async function getPlayletChapterDetail(params) { const chapterId = String(params.chapterId).trim(); if (!chapterId) return { @@ -2165,34 +2197,14 @@ async function getPlayletChapterDetail(params) { else if (params.playletId != null && String(params.playletId).trim()) { query.set("playletId", String(params.playletId).trim()); } - const token = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$auth$2f$server$2d$profile$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["readServerAuthToken"])(); - const load = (auth)=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["serverFetchJson"])(`/api/app/playlet/chapter/detail?${query}`, { + try { + const data = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["serverFetchJson"])(`/api/app/playlet/chapter/detail?${query}`, { maxAttempts: 2, timeoutMs: 10_000, - revalidate: 0, - headers: auth ? { - Authorization: auth - } : undefined + revalidate: 0 }); - try { return { - data: await load(token), - error: "" - }; - } catch (reason) { - rethrowFrameworkError(reason); - if (!token) { - const error = reason instanceof Error ? reason.message : "剧集详情加载失败"; - if ("TURBOPACK compile-time truthy", 1) console.warn("[playlet-chapter-detail]", error); - return { - data: null, - error - }; - } - } - try { - return { - data: await load(null), + data, error: "" }; } catch (reason) { @@ -2216,16 +2228,6 @@ async function getPlayletHotList(params) { query.set("excludePlayletId", String(params.excludePlayletId).trim()); } try { - const token = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$auth$2f$server$2d$profile$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["readServerAuthToken"])(); - if (!token) return { - data: { - list: [], - pageNum, - pageSize, - totalCount: 0 - }, - error: "" - }; const data = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["serverFetchJson"])(`/api/app/playlet/hot/list?${query}`, { maxAttempts: 2, timeoutMs: 10_000, @@ -2233,10 +2235,7 @@ async function getPlayletHotList(params) { tags: [ "playlet-hot", `playlet-hot-${pageNum}-${pageSize}` - ], - headers: { - Authorization: token - } + ] }); return { data: { @@ -2266,7 +2265,6 @@ async function getPlayletGuessLike(params) { pageSize: String(params.pageSize ?? __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["PLAYLET_RECOMMEND_SIZE"]) }); try { - const token = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$auth$2f$server$2d$profile$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["readServerAuthToken"])(); const data = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["serverFetchJson"])(`/api/app/playlet/guess-like/list?${query}`, { maxAttempts: 2, timeoutMs: 10_000, @@ -2274,12 +2272,7 @@ async function getPlayletGuessLike(params) { tags: [ "playlet-guess-like", `playlet-guess-like-${params.playletId}` - ], - ...token ? { - headers: { - Authorization: token - } - } : {} + ] }); return (data.list || []).filter((item)=>item?.id && item.id !== params.playletId); } catch (reason) { @@ -2316,39 +2309,18 @@ async function getPlayletDetail(params) { const query = new URLSearchParams(); if (slug) query.set("slug", slug); else if (id) query.set("id", id); - const token = params.personalized === false ? null : await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$auth$2f$server$2d$profile$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["readServerAuthToken"])(); - const load = (auth)=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["serverFetchJson"])(`/api/app/playlet/detail?${query}`, { + try { + const data = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["serverFetchJson"])(`/api/app/playlet/detail?${query}`, { maxAttempts: 2, timeoutMs: 10_000, - revalidate: auth ? 0 : 60, - tags: auth ? undefined : [ + revalidate: 60, + tags: [ "playlet-detail", `playlet-detail-${pathKey}` - ], - headers: auth ? { - Authorization: auth - } : undefined + ] }); - try { - const data = normalizePlayletDetail(await load(token)); - if (data.id || !token) return { - data, - error: "" - }; - } catch (reason) { - rethrowFrameworkError(reason); - if (!token) { - const error = reason instanceof Error ? reason.message : "短剧详情加载失败"; - if ("TURBOPACK compile-time truthy", 1) console.warn("[playlet-detail]", error); - return { - data: null, - error - }; - } - } - try { return { - data: normalizePlayletDetail(await load(null)), + data: normalizePlayletDetail(data), error: "" }; } catch (reason) { @@ -2776,22 +2748,12 @@ __turbopack_context__.s([ ()=>PLAYLET_TOPIC_DETAIL_PAGE_SIZE, "PLAYLET_TOPIC_PAGE_SIZE", ()=>PLAYLET_TOPIC_PAGE_SIZE, - "clearPlayletHistory", - ()=>clearPlayletHistory, - "deletePlayletHistory", - ()=>deletePlayletHistory, - "fetchPlayletBoughtList", - ()=>fetchPlayletBoughtList, "fetchPlayletChapterDetail", ()=>fetchPlayletChapterDetail, - "fetchPlayletCollectList", - ()=>fetchPlayletCollectList, "fetchPlayletDetail", ()=>fetchPlayletDetail, "fetchPlayletGuessLike", ()=>fetchPlayletGuessLike, - "fetchPlayletHistoryList", - ()=>fetchPlayletHistoryList, "fetchPlayletHome", ()=>fetchPlayletHome, "fetchPlayletHomeConfigList", @@ -2800,8 +2762,6 @@ __turbopack_context__.s([ ()=>fetchPlayletHotLike, "fetchPlayletHotList", ()=>fetchPlayletHotList, - "fetchPlayletLikeList", - ()=>fetchPlayletLikeList, "fetchPlayletOperateList", ()=>fetchPlayletOperateList, "fetchPlayletRank", @@ -2828,16 +2788,8 @@ __turbopack_context__.s([ ()=>playletTopicDetailKey, "playletTopicTotalCount", ()=>playletTopicTotalCount, - "reportPlayletChapterWatch", - ()=>reportPlayletChapterWatch, "resolveGuessLikePlayletId", - ()=>resolveGuessLikePlayletId, - "setPlayletCollect", - ()=>setPlayletCollect, - "setPlayletLike", - ()=>setPlayletLike, - "unlockPlayletChapter", - ()=>unlockPlayletChapter + ()=>resolveGuessLikePlayletId ]); var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$channel$2d$routes$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/channel-routes.ts [app-rsc] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/client.ts [app-rsc] (ecmascript)"); @@ -2912,8 +2864,7 @@ function fetchPlayletOperateList(params) { pageSize: String(pageSize) }); return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/operate/list?${query}`, { - method: "GET", - token: params.token + method: "GET" }); } function fetchPlayletTopicList(params) { @@ -2924,8 +2875,7 @@ function fetchPlayletTopicList(params) { pageSize: String(pageSize) }); return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/topic/list?${query}`, { - method: "GET", - token: params.token + method: "GET" }); } function fetchPlayletHotList(params) { @@ -2939,8 +2889,7 @@ function fetchPlayletHotList(params) { query.set("excludePlayletId", String(params.excludePlayletId).trim()); } return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/hot/list?${query}`, { - method: "GET", - token: params.token + method: "GET" }); } function fetchPlayletDetail(params) { @@ -2950,8 +2899,7 @@ function fetchPlayletDetail(params) { if (slug) query.set("slug", slug); else if (id) query.set("id", id); return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/detail?${query}`, { - method: "GET", - token: params.token + method: "GET" }); } function fetchPlayletChapterDetail(params) { @@ -2966,90 +2914,7 @@ function fetchPlayletChapterDetail(params) { query.set("playletId", String(params.playletId).trim()); } return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/h5/chapter-detail?${query}`, { - method: "GET", - token: params.token - }); -} -function unlockPlayletChapter(body, token) { - return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])("/api/app/playlet/chapter/unlock", { - method: "POST", - body, - token - }); -} -function reportPlayletChapterWatch(body, token) { - return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])("/api/app/playlet/chapter/watch/report", { - method: "POST", - body, - token - }); -} -function setPlayletLike(body, token) { - return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])("/api/app/playlet/like/set", { - method: "POST", - body, - token - }); -} -function fetchPlayletLikeList(query, token) { - const params = new URLSearchParams({ - pageNum: String(query.pageNum ?? 1), - pageSize: String(query.pageSize ?? PLAYLET_LIBRARY_PAGE_SIZE) - }); - return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/like/list?${params}`, { - method: "GET", - token - }); -} -function setPlayletCollect(body, token) { - return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])("/api/app/playlet/collect/set", { - method: "POST", - body, - token - }); -} -function fetchPlayletCollectList(query, token) { - const params = new URLSearchParams({ - pageNum: String(query.pageNum ?? 1), - pageSize: String(query.pageSize ?? PLAYLET_LIBRARY_PAGE_SIZE) - }); - if (query.watchStatus != null) params.set("watchStatus", String(query.watchStatus)); - return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/collect/list?${params}`, { - method: "GET", - token - }); -} -function fetchPlayletBoughtList(query, token) { - const params = new URLSearchParams({ - pageNum: String(query.pageNum ?? 1), - pageSize: String(query.pageSize ?? PLAYLET_LIBRARY_PAGE_SIZE) - }); - return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/bought/list?${params}`, { - method: "GET", - token - }); -} -function fetchPlayletHistoryList(query, token) { - const params = new URLSearchParams({ - pageNum: String(query.pageNum ?? 1), - pageSize: String(query.pageSize ?? PLAYLET_LIBRARY_PAGE_SIZE) - }); - return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/history/list?${params}`, { - method: "GET", - token - }); -} -function clearPlayletHistory(token) { - return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])("/api/app/playlet/history/clear", { - method: "POST", - token - }); -} -function deletePlayletHistory(body, token) { - return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])("/api/app/playlet/history/delete", { - method: "POST", - body, - token + method: "GET" }); } function fetchPlayletTopicDetail(params) { @@ -3067,8 +2932,7 @@ function fetchPlayletTopicDetail(params) { if (topicSlug) query.set("topicSlug", topicSlug); else if (id) query.set("id", id); return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/topic/detail?${query}`, { - method: "GET", - token: params.token + method: "GET" }); } function playletTopicTotalCount(groups) { @@ -3085,8 +2949,7 @@ function fetchPlayletRank(params) { pageSize: String(pageSize) }); return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/rank?${query}`, { - method: "GET", - token: params.token + method: "GET" }); } function playletTagPathKey(raw) { @@ -3120,14 +2983,12 @@ function fetchPlayletTagList(params) { if (slug) query.set("tagSlug", slug); else if (id) query.set("tagId", id); return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/tag/list?${query}`, { - method: "GET", - token: params.token + method: "GET" }); } -function fetchPlayletHome(params) { +function fetchPlayletHome() { return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])("/api/app/playlet/home", { - method: "GET", - token: params?.token + method: "GET" }); } function fetchPlayletHomeConfigList(params) { @@ -3142,8 +3003,7 @@ function fetchPlayletHomeConfigList(params) { if (slug) query.set("slug", slug); else if (id) query.set("id", id); return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/home-config/list?${query}`, { - method: "GET", - token: params.token + method: "GET" }); } const PLAYLET_SEARCH_PAGE_SIZE = 24; @@ -3158,25 +3018,22 @@ function fetchPlayletSearch(params) { pageSize: String(pageSize) }); return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/search?${query}`, { - method: "GET", - token: params.token + method: "GET" }); } -function fetchPlayletSearchSuggest(keyword, token) { +function fetchPlayletSearchSuggest(keyword) { const value = keyword.trim().slice(0, 100); if (!value) return Promise.reject(new Error("缺少搜索关键词")); const query = new URLSearchParams({ keyword: value }); return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/search/suggest?${query}`, { - method: "GET", - token + method: "GET" }); } -function fetchPlayletHotLike(token) { +function fetchPlayletHotLike() { return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])("/api/app/playlet/hot-like", { - method: "GET", - token + method: "GET" }); } const PLAYLET_GUESS_LIKE_PAGE_SIZE = 3; @@ -3217,8 +3074,7 @@ function fetchPlayletGuessLike(params) { pageSize: String(pageSize) }); return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/guess-like/list?${query}`, { - method: "GET", - token: params.token + method: "GET" }); } }), diff --git a/.next-dev/dev/server/chunks/ssr/[root-of-the-server]__067m3twdyxcop._.js.map b/.next-dev/dev/server/chunks/ssr/[root-of-the-server]__067m3twdyxcop._.js.map index e7f4f1a..3e8bb7a 100644 --- a/.next-dev/dev/server/chunks/ssr/[root-of-the-server]__067m3twdyxcop._.js.map +++ b/.next-dev/dev/server/chunks/ssr/[root-of-the-server]__067m3twdyxcop._.js.map @@ -2,33 +2,33 @@ "version": 3, "sources": [], "sections": [ - {"offset": {"line": 5, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/app/page.tsx"],"sourcesContent":["import type { Metadata } from \"next\";\nimport { Suspense } from \"react\";\nimport { connection } from \"next/server\";\nimport { ListLoading } from \"@/components/common/ListLoading\";\n\nimport { HomePage } from \"@/components/home/home-page\";\nimport { JsonLd } from \"@/components/site/json-ld\";\nimport { getPlayletHome } from \"@/lib/api/playlet-server\";\nimport type { PlayletCommonData } from \"@/lib/api/types\";\nimport { playletHref } from \"@/lib/playlet-display\";\nimport { buildWebPageJSONLD, getSiteSEOCached, resolvePageMetadata } from \"@/lib/seo\";\nimport { navigationSectionSeo } from \"@/lib/seo/navigation-seo\";\nimport { HOME_CLASS } from \"@/lib/site/home-class\";\n\nexport const instant = false;\n\nconst HOME_TITLE = \"熟果短剧 · 好戏正在发生\";\nconst HOME_DESCRIPTION = \"熟果短剧,发现值得一看的短剧。都市甜宠、古装仙侠、悬疑逆袭,精选专题与热门榜单随心追。\";\n\n/** TDK 取自导航 translation/category/list 中 url=/ 的 seoInfo。 */\nexport async function generateMetadata(): Promise {\n await connection();\n return resolvePageMetadata({\n seoInfo: await navigationSectionSeo(\"/\"),\n fallbackTitle: HOME_TITLE,\n fallbackDescription: HOME_DESCRIPTION,\n canonical: \"/\",\n });\n}\n\nexport default function Page({ searchParams }: { searchParams: Promise<{ spotlight?: string }> }) {\n return (\n }>\n \n \n );\n}\n\nasync function HomeContent({ searchParams }: { searchParams: Promise<{ spotlight?: string }> }) {\n await connection();\n const { spotlight } = await searchParams;\n const index = Number(spotlight);\n const { data, error } = await getPlayletHome();\n const site = await getSiteSEOCached();\n const navSeo = await navigationSectionSeo(\"/\");\n const title = navSeo?.title?.trim() || HOME_TITLE;\n const description = navSeo?.description?.trim() || HOME_DESCRIPTION;\n return (\n <>\n {/* 服务端注入:首屏即挂上首页样式,避免 client 组件里渲染 \n \n ) : null}\n \n \n );\n}\n"],"names":["instant","GTAG_ID","trim","generateMetadata","origin","metadataBase","URL","title","default","template","description","applicationName","icons","icon","url","type","sizes","openGraph","locale","siteName","images","alt","twitter","card","verification","yandex","other","RootLayout","children","lang","className","suppressHydrationWarning","id","dangerouslySetInnerHTML","__html","fallback","src","strategy"],"mappings":";;;;;;;;;;;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;;;;;;;;;;;;;AAOO,MAAMA,UAAU;AAEvB,MAAMC,UAAU,sCAAiCC,UAAU;AAEpD,eAAeC;IACpB,MAAMC,SAAS,MAAM,IAAA,6IAAgB;IACrC,OAAO;QACLC,cAAc,IAAIC,IAAIF;QACtBG,OAAO;YACLC,SAAS;YACTC,UAAU;QACZ;QACAC,aAAa;QACbC,iBAAiB,0IAAS;QAC1BC,OAAO;YACLC,MAAM;gBACJ;oBAAEC,KAAK;oBAAiBC,MAAM;gBAAa;gBAC3C;oBAAED,KAAK;oBAAgBE,OAAO;gBAAM;aACrC;QACH;QACAC,WAAW;YACTF,MAAM;YACNG,QAAQ;YACRC,UAAU,0IAAS;YACnBC,QAAQ;gBAAC;oBAAEN,KAAK,iJAAgB;oBAAEO,KAAK,0IAAS;gBAAC;aAAE;QACrD;QACAC,SAAS;YACPC,MAAM;YACNH,QAAQ;gBAAC,iJAAgB;aAAC;QAC5B;QACAI,cAAc;YACZC,QAAQ;YACRC,OAAO;gBACL,iBAAiB;YACnB;QACF;IACF;AACF;AAEe,SAASC,WAAW,EAAEC,QAAQ,EAAoB;IAC/D,qBACE,8OAAC;QAAKC,MAAK;QAAQC,WAAU;QAAsB,wBAAqB;QAASC,wBAAwB;kBACvG,cAAA,8OAAC;;8BACC,8OAAC;oBACCC,IAAG;oBACHC,yBAAyB;wBACvBC,QACE;oBACJ;;;;;;8BAEF,8OAAC,wKAAa;;;;;8BACd,8OAAC,iNAAQ;oBAACC,wBAAU,8OAAC,0JAAU;wBAAChB,UAAU,0IAAS;kCAAGS;;;;;;8BACpD,cAAA,8OAAC,4JAAW;kCAAEA;;;;;;;;;;;gBAEf,qDACC;;sCACE,8OAAC,yIAAM;4BACLI,IAAG;4BACHI,KAAK,CAAC,4CAA4C,EAAEnC,SAAS;4BAC7DoC,UAAS;;;;;;sCAEX,8OAAC,yIAAM;4BAACL,IAAG;4BAAWK,UAAS;sCAC5B,CAAC;;;;gCAIgB,EAAEpC,QAAQ;cAC5B,CAAC;;;;;;;;;;;2BAGH;;;;;;;;;;;;AAIZ;gFA1EuB;kBAAA"}}, + {"offset": {"line": 181, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/common/app-download.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20=%3E%20%22[project]/src/components/common/app-download.tsx%22%20%7D"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const AppAddrProvider = registerClientReference(\n function() { throw new Error(\"Attempted to call AppAddrProvider() from the server but AppAddrProvider is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/common/app-download.tsx\",\n \"AppAddrProvider\",\n);\nexport const AppDownloadLink = registerClientReference(\n function() { throw new Error(\"Attempted to call AppDownloadLink() from the server but AppDownloadLink is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/common/app-download.tsx\",\n \"AppDownloadLink\",\n);\nexport const DownloadQr = registerClientReference(\n function() { throw new Error(\"Attempted to call DownloadQr() from the server but DownloadQr is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/common/app-download.tsx\",\n \"DownloadQr\",\n);\nexport const HeaderAppDownload = registerClientReference(\n function() { throw new Error(\"Attempted to call HeaderAppDownload() from the server but HeaderAppDownload is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/common/app-download.tsx\",\n \"HeaderAppDownload\",\n);\nexport const useAppAddr = registerClientReference(\n function() { throw new Error(\"Attempted to call useAppAddr() from the server but useAppAddr is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/common/app-download.tsx\",\n \"useAppAddr\",\n);\n"],"names":["AppAddrProvider","Error","AppDownloadLink","DownloadQr","HeaderAppDownload","useAppAddr"],"mappings":";;;;;;;;;;;;AAAA,uEAAuE;AACvE;;AACO,MAAMA,kBAAkB,IAAA,wQAAuB,EAClD;IAAa,MAAM,IAAIC,MAAM;AAA8O,GAC3Q,oDACA;AAEG,MAAMC,kBAAkB,IAAA,wQAAuB,EAClD;IAAa,MAAM,IAAID,MAAM;AAA8O,GAC3Q,oDACA;AAEG,MAAME,aAAa,IAAA,wQAAuB,EAC7C;IAAa,MAAM,IAAIF,MAAM;AAAoO,GACjQ,oDACA;AAEG,MAAMG,oBAAoB,IAAA,wQAAuB,EACpD;IAAa,MAAM,IAAIH,MAAM;AAAkP,GAC/Q,oDACA;AAEG,MAAMI,aAAa,IAAA,wQAAuB,EAC7C;IAAa,MAAM,IAAIJ,MAAM;AAAoO,GACjQ,oDACA","ignoreList":[0]}}, + {"offset": {"line": 215, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 222, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/common/decrypted-image.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20=%3E%20%22[project]/src/components/common/decrypted-image.tsx%22%20%7D"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const DecryptedImage = registerClientReference(\n function() { throw new Error(\"Attempted to call DecryptedImage() from the server but DecryptedImage is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/common/decrypted-image.tsx\",\n \"DecryptedImage\",\n);\n"],"names":["DecryptedImage","Error"],"mappings":";;;;AAAA,uEAAuE;AACvE;;AACO,MAAMA,iBAAiB,IAAA,wQAAuB,EACjD;IAAa,MAAM,IAAIC,MAAM;AAA4O,GACzQ,uDACA","ignoreList":[0]}}, + {"offset": {"line": 236, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 243, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/common/startup-ad-dialog.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20=%3E%20%22[project]/src/components/common/startup-ad-dialog.tsx%22%20%7D"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const StartupPopups = registerClientReference(\n function() { throw new Error(\"Attempted to call StartupPopups() from the server but StartupPopups is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/common/startup-ad-dialog.tsx\",\n \"StartupPopups\",\n);\n"],"names":["StartupPopups","Error"],"mappings":";;;;AAAA,uEAAuE;AACvE;;AACO,MAAMA,gBAAgB,IAAA,wQAAuB,EAChD;IAAa,MAAM,IAAIC,MAAM;AAA0O,GACvQ,yDACA","ignoreList":[0]}}, + {"offset": {"line": 257, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 264, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/common/startup-ad-source.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20=%3E%20%22[project]/src/components/common/startup-ad-source.tsx%22%20%7D"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const StartupAdSource = registerClientReference(\n function() { throw new Error(\"Attempted to call StartupAdSource() from the server but StartupAdSource is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/common/startup-ad-source.tsx\",\n \"StartupAdSource\",\n);\n"],"names":["StartupAdSource","Error"],"mappings":";;;;AAAA,uEAAuE;AACvE;;AACO,MAAMA,kBAAkB,IAAA,wQAAuB,EAClD;IAAa,MAAM,IAAIC,MAAM;AAA8O,GAC3Q,yDACA","ignoreList":[0]}}, + {"offset": {"line": 278, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 285, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/common/toast-host.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20=%3E%20%22[project]/src/components/common/toast-host.tsx%22%20%7D"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const ToastHost = registerClientReference(\n function() { throw new Error(\"Attempted to call ToastHost() from the server but ToastHost is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/common/toast-host.tsx\",\n \"ToastHost\",\n);\n"],"names":["ToastHost","Error"],"mappings":";;;;AAAA,uEAAuE;AACvE;;AACO,MAAMA,YAAY,IAAA,wQAAuB,EAC5C;IAAa,MAAM,IAAIC,MAAM;AAAkO,GAC/P,kDACA","ignoreList":[0]}}, + {"offset": {"line": 299, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 306, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/common/toast.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20=%3E%20%22[project]/src/components/common/toast.tsx%22%20%7D"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const ToastBridge = registerClientReference(\n function() { throw new Error(\"Attempted to call ToastBridge() from the server but ToastBridge is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/common/toast.tsx\",\n \"ToastBridge\",\n);\n"],"names":["ToastBridge","Error"],"mappings":";;;;AAAA,uEAAuE;AACvE;;AACO,MAAMA,cAAc,IAAA,wQAAuB,EAC9C;IAAa,MAAM,IAAIC,MAAM;AAAsO,GACnQ,6CACA","ignoreList":[0]}}, + {"offset": {"line": 320, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 327, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/category-link.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20=%3E%20%22[project]/src/components/site/category-link.tsx%22%20%7D"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const CategoryLink = registerClientReference(\n function() { throw new Error(\"Attempted to call CategoryLink() from the server but CategoryLink is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/site/category-link.tsx\",\n \"CategoryLink\",\n);\n"],"names":["CategoryLink","Error"],"mappings":";;;;AAAA,uEAAuE;AACvE;;AACO,MAAMA,eAAe,IAAA,wQAAuB,EAC/C;IAAa,MAAM,IAAIC,MAAM;AAAwO,GACrQ,mDACA","ignoreList":[0]}}, + {"offset": {"line": 341, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 348, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/category-nav.tsx"],"sourcesContent":["import { Fragment } from \"react\";\n\nimport { DecryptedImage } from \"@/components/common/decrypted-image\";\nimport { CategoryLink } from \"@/components/site/category-link\";\nimport { NavIcon } from \"@/components/site/nav-icons\";\nimport type { TranslationCategory, TranslationInfo } from \"@/lib/api/types\";\nimport { navPageForHref, translationHref } from \"@/lib/translation-nav\";\n\nfunction CategoryIcon({ item }: { item: TranslationCategory }) {\n if (item.icon?.trim()) {\n return ;\n }\n const page = navPageForHref(translationHref(item.urlValue));\n if (!page) return null;\n return ;\n}\n\nfunction subItems(item: TranslationCategory): TranslationInfo[] {\n if (item.categoryType !== 2) return [];\n return (item.translationList || []).filter((child) => child?.name?.trim());\n}\n\nfunction CategoryItem({ item, variant }: { item: TranslationCategory; variant: \"header\" | \"drawer\" | \"sidebar\" }) {\n const children = variant === \"sidebar\" ? [] : subItems(item);\n const link = (\n \n {variant === \"header\" ? null : }\n \n );\n if (!children.length) return link;\n return (\n \n {link}\n \n {children.map((child) => (\n \n ))}\n \n \n );\n}\n\nexport function CategoryNavItems({ items, variant }: { items: TranslationCategory[]; variant: \"header\" | \"drawer\" | \"sidebar\" }) {\n return (\n <>\n {items.map((item) => (\n \n \n \n ))}\n \n );\n}\n"],"names":["CategoryIcon","item","icon","trim","className","src","alt","width","height","page","urlValue","subItems","categoryType","translationList","filter","child","name","CategoryItem","variant","children","link","length","map","id","CategoryNavItems","items"],"mappings":";;;;;AAAA;AAEA;AACA;AACA;AAEA;;;;;;;AAEA,SAASA,aAAa,EAAEC,IAAI,EAAiC;IAC3D,IAAIA,KAAKC,IAAI,EAAEC,QAAQ;QACrB,qBAAO,8OAAC,oKAAc;YAACC,WAAU;YAAsBC,KAAKJ,KAAKC,IAAI;YAAEI,KAAI;YAAGC,OAAO;YAAIC,QAAQ;;;;;;IACnG;IACA,MAAMC,OAAO,IAAA,kJAAc,EAAC,IAAA,mJAAe,EAACR,KAAKS,QAAQ;IACzD,IAAI,CAACD,MAAM,OAAO;IAClB,qBAAO,8OAAC,qJAAO;QAACA,MAAMA;;;;;;AACxB;AAEA,SAASE,SAASV,IAAyB;IACzC,IAAIA,KAAKW,YAAY,KAAK,GAAG,OAAO,EAAE;IACtC,OAAO,CAACX,KAAKY,eAAe,IAAI,EAAE,EAAEC,MAAM,CAAC,CAACC,QAAUA,OAAOC,MAAMb;AACrE;AAEA,SAASc,aAAa,EAAEhB,IAAI,EAAEiB,OAAO,EAA2E;IAC9G,MAAMC,WAAWD,YAAY,YAAY,EAAE,GAAGP,SAASV;IACvD,MAAMmB,qBACJ,8OAAC,8JAAY;QAACV,UAAUT,KAAKS,QAAQ;QAAEM,MAAMf,KAAKe,IAAI;QAAEE,SAASA;kBAC9DA,YAAY,WAAW,qBAAO,8OAAClB;YAAaC,MAAMA;;;;;;;;;;;IAGvD,IAAI,CAACkB,SAASE,MAAM,EAAE,OAAOD;IAC7B,qBACE,8OAAC;QAAKhB,WAAU;;YACbgB;0BACD,8OAAC;gBAAKhB,WAAU;0BACbe,SAASG,GAAG,CAAC,CAACP,sBACb,8OAAC,8JAAY;wBAAgBL,UAAUK,MAAML,QAAQ;wBAAEM,MAAMD,MAAMC,IAAI;wBAAEE,SAASA;uBAA/DH,MAAMQ,EAAE;;;;;;;;;;;;;;;;AAKrC;AAEO,SAASC,iBAAiB,EAAEC,KAAK,EAAEP,OAAO,EAA8E;IAC7H,qBACE;kBACGO,MAAMH,GAAG,CAAC,CAACrB,qBACV,8OAAC,iNAAQ;0BACP,cAAA,8OAACgB;oBAAahB,MAAMA;oBAAMiB,SAASA;;;;;;eADtBjB,KAAKsB,EAAE;;;;;;;;;;AAM9B"}}, + {"offset": {"line": 464, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/entry-route-chrome.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20=%3E%20%22[project]/src/components/site/entry-route-chrome.tsx%22%20%7D"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const EntryRouteChrome = registerClientReference(\n function() { throw new Error(\"Attempted to call EntryRouteChrome() from the server but EntryRouteChrome is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/site/entry-route-chrome.tsx\",\n \"EntryRouteChrome\",\n);\n"],"names":["EntryRouteChrome","Error"],"mappings":";;;;AAAA,uEAAuE;AACvE;;AACO,MAAMA,mBAAmB,IAAA,wQAAuB,EACnD;IAAa,MAAM,IAAIC,MAAM;AAAgP,GAC7Q,wDACA","ignoreList":[0]}}, + {"offset": {"line": 478, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 485, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/header-scroll.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20=%3E%20%22[project]/src/components/site/header-scroll.tsx%22%20%7D"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const HeaderScroll = registerClientReference(\n function() { throw new Error(\"Attempted to call HeaderScroll() from the server but HeaderScroll is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/site/header-scroll.tsx\",\n \"HeaderScroll\",\n);\n"],"names":["HeaderScroll","Error"],"mappings":";;;;AAAA,uEAAuE;AACvE;;AACO,MAAMA,eAAe,IAAA,wQAAuB,EAC/C;IAAa,MAAM,IAAIC,MAAM;AAAwO,GACrQ,mDACA","ignoreList":[0]}}, + {"offset": {"line": 499, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 506, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/header-search.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20=%3E%20%22[project]/src/components/site/header-search.tsx%22%20%7D"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const HeaderSearch = registerClientReference(\n function() { throw new Error(\"Attempted to call HeaderSearch() from the server but HeaderSearch is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/site/header-search.tsx\",\n \"HeaderSearch\",\n);\n"],"names":["HeaderSearch","Error"],"mappings":";;;;AAAA,uEAAuE;AACvE;;AACO,MAAMA,eAAe,IAAA,wQAAuB,EAC/C;IAAa,MAAM,IAAIC,MAAM;AAAwO,GACrQ,mDACA","ignoreList":[0]}}, + {"offset": {"line": 520, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 527, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/inline-icon.tsx"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nconst cache = new Map();\n\nexport function InlineIcon({ file, className }: { file: string; className: string }) {\n let raw = cache.get(file);\n if (!raw) {\n raw = readFileSync(join(process.cwd(), \"public/images\", file), \"utf8\");\n cache.set(file, raw);\n }\n const svg = raw\n .replace(/<\\?xml[^>]*>\\s*/, \"\")\n .replace(\";\n}\n"],"names":["cache","Map","InlineIcon","file","className","raw","get","process","cwd","set","svg","replace","dangerouslySetInnerHTML","__html"],"mappings":";;;;;AAAA;AACA;;;;AAEA,MAAMA,QAAQ,IAAIC;AAEX,SAASC,WAAW,EAAEC,IAAI,EAAEC,SAAS,EAAuC;IACjF,IAAIC,MAAML,MAAMM,GAAG,CAACH;IACpB,IAAI,CAACE,KAAK;QACRA,MAAM,IAAA,6HAAY,EAAC,IAAA,yHAAI,EAACE,QAAQC,GAAG,IAAI,iBAAiBL,OAAO;QAC/DH,MAAMS,GAAG,CAACN,MAAME;IAClB;IACA,MAAMK,MAAML,IACTM,OAAO,CAAC,mBAAmB,IAC3BA,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAEP,UAAU,sCAAsC,CAAC;IACnF,qBAAO,8OAAC;QAAKA,WAAU;QAAYQ,yBAAyB;YAAEC,QAAQH;QAAI;;;;;;AAC5E"}}, + {"offset": {"line": 560, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/mobile-menu.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20=%3E%20%22[project]/src/components/site/mobile-menu.tsx%22%20%7D"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const MobileMenu = registerClientReference(\n function() { throw new Error(\"Attempted to call MobileMenu() from the server but MobileMenu is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/site/mobile-menu.tsx\",\n \"MobileMenu\",\n);\n"],"names":["MobileMenu","Error"],"mappings":";;;;AAAA,uEAAuE;AACvE;;AACO,MAAMA,aAAa,IAAA,wQAAuB,EAC7C;IAAa,MAAM,IAAIC,MAAM;AAAoO,GACjQ,iDACA","ignoreList":[0]}}, + {"offset": {"line": 574, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 581, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/nav-icons.tsx"],"sourcesContent":["import { InlineIcon } from \"@/components/site/inline-icon\";\n\nconst files = {\n home: \"nav-home.svg\",\n shorts: \"nav-shorts.svg\",\n series: \"nav-series.svg\",\n topics: \"nav-topics.svg\",\n rank: \"nav-rank.svg\",\n \"home-road\": \"nav-home-road.svg\",\n} as const;\n\nexport function NavIcon({ page }: { page: keyof typeof files }) {\n return ;\n}\n"],"names":["files","home","shorts","series","topics","rank","NavIcon","page","file","className"],"mappings":";;;;;AAAA;;;AAEA,MAAMA,QAAQ;IACZC,MAAM;IACNC,QAAQ;IACRC,QAAQ;IACRC,QAAQ;IACRC,MAAM;IACN,aAAa;AACf;AAEO,SAASC,QAAQ,EAAEC,IAAI,EAAgC;IAC5D,qBAAO,8OAAC,0JAAU;QAACC,MAAMR,KAAK,CAACO,KAAK;QAAEE,WAAU;;;;;;AAClD"}}, + {"offset": {"line": 611, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/page-tools.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20=%3E%20%22[project]/src/components/site/page-tools.tsx%22%20%7D"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const PageTools = registerClientReference(\n function() { throw new Error(\"Attempted to call PageTools() from the server but PageTools is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/site/page-tools.tsx\",\n \"PageTools\",\n);\n"],"names":["PageTools","Error"],"mappings":";;;;AAAA,uEAAuE;AACvE;;AACO,MAAMA,YAAY,IAAA,wQAAuB,EAC5C;IAAa,MAAM,IAAIC,MAAM;AAAkO,GAC/P,gDACA","ignoreList":[0]}}, + {"offset": {"line": 625, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 632, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/policy-links.tsx"],"sourcesContent":["import Link from \"next/link\";\n\nimport type { FooterPolicyLink } from \"@/lib/api/footer\";\n\nexport function PolicyLinks({ links }: { links: FooterPolicyLink[] }) {\n if (!links.length) return null;\n return (\n

\n {links.map((item) =>\n item.external ? (\n \n {item.name}\n \n ) : (\n \n {item.name}\n \n ),\n )}\n
\n );\n}\n"],"names":["PolicyLinks","links","length","className","map","item","external","href","target","startsWith","undefined","rel","name","id"],"mappings":";;;;;AAAA;;;AAIO,SAASA,YAAY,EAAEC,KAAK,EAAiC;IAClE,IAAI,CAACA,MAAMC,MAAM,EAAE,OAAO;IAC1B,qBACE,8OAAC;QAAIC,WAAU;QAAe,cAAW;kBACtCF,MAAMG,GAAG,CAAC,CAACC,OACVA,KAAKC,QAAQ,iBACX,8OAAC;gBAECC,MAAMF,KAAKE,IAAI;gBACfC,QAAQH,KAAKE,IAAI,CAACE,UAAU,CAAC,aAAaC,YAAY;gBACtDC,KAAI;0BAGHN,KAAKO,IAAI;eANLP,KAAKQ,EAAE;;;;qCASd,8OAAC,0LAAI;gBAAeN,MAAMF,KAAKE,IAAI;0BAChCF,KAAKO,IAAI;eADDP,KAAKQ,EAAE;;;;;;;;;;AAO5B"}}, + {"offset": {"line": 672, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/sidebar-toggle.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20=%3E%20%22[project]/src/components/site/sidebar-toggle.tsx%22%20%7D"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const SidebarToggle = registerClientReference(\n function() { throw new Error(\"Attempted to call SidebarToggle() from the server but SidebarToggle is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/site/sidebar-toggle.tsx\",\n \"SidebarToggle\",\n);\n"],"names":["SidebarToggle","Error"],"mappings":";;;;AAAA,uEAAuE;AACvE;;AACO,MAAMA,gBAAgB,IAAA,wQAAuB,EAChD;IAAa,MAAM,IAAIC,MAAM;AAA0O,GACvQ,oDACA","ignoreList":[0]}}, + {"offset": {"line": 686, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 693, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/site-chrome.tsx"],"sourcesContent":["import { EntryRouteChrome } from \"@/components/site/entry-route-chrome\";\nimport { HeaderScroll } from \"@/components/site/header-scroll\";\nimport { PageTools } from \"@/components/site/page-tools\";\nimport { SiteFooter } from \"@/components/site/site-footer\";\nimport { SiteHeader } from \"@/components/site/site-header\";\nimport { MobileNav, SiteSidebar } from \"@/components/site/site-sidebar\";\nimport type { FooterPolicyLink } from \"@/lib/api/footer\";\nimport type { TranslationCategory } from \"@/lib/api/types\";\n\nexport function SiteChrome({\n children,\n categoryList,\n policyLinks = [],\n siteName = \"\",\n slogan = \"\",\n year,\n}: {\n children: React.ReactNode;\n categoryList?: TranslationCategory[];\n policyLinks?: FooterPolicyLink[];\n siteName?: string;\n slogan?: string;\n /** 请求期计算的版权年份。预渲染兜底不传,避免 new Date()。 */\n year?: number;\n}) {\n return (\n <>\n \n \n \n \n \n {children}\n \n \n \n );\n}\n"],"names":["SiteChrome","children","categoryList","policyLinks","siteName","slogan","year"],"mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AAIO,SAASA,WAAW,EACzBC,QAAQ,EACRC,YAAY,EACZC,cAAc,EAAE,EAChBC,WAAW,EAAE,EACbC,SAAS,EAAE,EACXC,IAAI,EASL;IACC,qBACE;;0BACE,8OAAC,0KAAgB;;;;;0BACjB,8OAAC,4JAAW;gBAACJ,cAAcA;gBAAcC,aAAaA;gBAAaC,UAAUA;gBAAUE,MAAMA;;;;;;0BAC7F,8OAAC,0JAAS;gBAACJ,cAAcA;;;;;;0BACzB,8OAAC,0JAAU;gBAACA,cAAcA;gBAAcC,aAAaA;gBAAaC,UAAUA;gBAAUE,MAAMA;;;;;;0BAC5F,8OAAC,8JAAY;;;;;YACZL;0BACD,8OAAC,0JAAU;gBAACE,aAAaA;gBAAaC,UAAUA;gBAAUC,QAAQA;gBAAQC,MAAMA;;;;;;0BAChF,8OAAC,wJAAS;gBAACF,UAAUA;;;;;;;;;;;;AAG3B"}}, + {"offset": {"line": 780, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/site-footer.tsx"],"sourcesContent":["import Link from \"next/link\";\n\nimport { SocialLinks } from \"@/components/site/social-links\";\nimport type { FooterPolicyLink } from \"@/lib/api/footer\";\nimport { routes } from \"@/lib/site/routes\";\n\nexport function SiteFooter({\n policyLinks = [],\n siteName = \"\",\n slogan = \"\",\n year,\n}: {\n policyLinks?: FooterPolicyLink[];\n siteName?: string;\n slogan?: string;\n year?: number;\n}) {\n const brand = siteName.trim() || \"网站\";\n return (\n
\n
\n \n \n {brand}\n \n \n \n {slogan ?

{slogan}

: null}\n {policyLinks.length ? (\n \n ) : null}\n © {year ? `${year} ` : \"\"}{brand} All rights reserved.\n \n
\n
\n );\n}\n"],"names":["SiteFooter","policyLinks","siteName","slogan","year","brand","trim","className","href","home","src","width","height","alt","length","map","item","external","target","startsWith","undefined","rel","name","id","ariaLabel"],"mappings":";;;;;AAAA;AAEA;AAEA;;;;;AAEO,SAASA,WAAW,EACzBC,cAAc,EAAE,EAChBC,WAAW,EAAE,EACbC,SAAS,EAAE,EACXC,IAAI,EAML;IACC,MAAMC,QAAQH,SAASI,IAAI,MAAM;IACjC,qBACE,8OAAC;QAAOC,WAAU;QAA+B,cAAW;kBAC1D,cAAA,8OAAC;YAAIA,WAAU;;8BACb,8OAAC;oBAAOA,WAAU;;sCAChB,8OAAC,0LAAI;4BAACC,MAAM,sIAAM,CAACC,IAAI;4BAAE,cAAY,GAAGJ,MAAM,EAAE,CAAC;sCAC/C,cAAA,8OAAC;gCAAIK,KAAI;gCAAaC,OAAO;gCAAKC,QAAQ;gCAAIC,KAAKR;;;;;;;;;;;sCAErD,8OAAC;4BAAEE,WAAU;4BAA0B,eAAY;;;;;;;;;;;;gBAEpDJ,uBAAS,8OAAC;oBAAEI,WAAU;8BAA6BJ;;;;;2BAAc;gBACjEF,YAAYa,MAAM,iBACjB,8OAAC;oBAAIP,WAAU;oBAAkB,cAAW;8BACzCN,YAAYc,GAAG,CAAC,CAACC,OAChBA,KAAKC,QAAQ,iBACX,8OAAC;4BAAgBT,MAAMQ,KAAKR,IAAI;4BAAEU,QAAQF,KAAKR,IAAI,CAACW,UAAU,CAAC,aAAaC,YAAY;4BAAUC,KAAI;sCACnGL,KAAKM,IAAI;2BADJN,KAAKO,EAAE;;;;iDAIf,8OAAC,0LAAI;4BAAef,MAAMQ,KAAKR,IAAI;sCAChCQ,KAAKM,IAAI;2BADDN,KAAKO,EAAE;;;;;;;;;2BAMtB;8BACJ,8OAAC;oBAAMhB,WAAU;;wBAA+B;wBAAGH,OAAO,GAAGA,KAAK,CAAC,CAAC,GAAG;wBAAIC;wBAAM;;;;;;;8BACjF,8OAAC,4JAAW;oBAACE,WAAU;oBAAmBiB,WAAU;;;;;;;;;;;;;;;;;AAI5D"}}, + {"offset": {"line": 905, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/site-header.tsx"],"sourcesContent":["import Link from \"next/link\";\nimport { Suspense } from \"react\";\n\nimport { CategoryNavItems } from \"@/components/site/category-nav\";\nimport { HeaderSearch } from \"@/components/site/header-search\";\nimport { MobileMenu } from \"@/components/site/mobile-menu\";\nimport { PolicyLinks } from \"@/components/site/policy-links\";\nimport { SocialLinks } from \"@/components/site/social-links\";\nimport { HeaderAppDownload } from \"@/components/common/app-download\";\nimport type { FooterPolicyLink } from \"@/lib/api/footer\";\nimport type { TranslationCategory } from \"@/lib/api/types\";\nimport { usableTranslationCategories } from \"@/lib/translation-nav\";\nimport { routes } from \"@/lib/site/routes\";\n\nexport function SiteHeader({\n query = \"\",\n categoryList,\n policyLinks = [],\n siteName = \"\",\n year,\n}: {\n query?: string;\n categoryList?: TranslationCategory[];\n policyLinks?: FooterPolicyLink[];\n siteName?: string;\n year?: number;\n}) {\n const items = usableTranslationCategories(categoryList);\n const brand = siteName.trim() || \"网站\";\n return (\n
\n
\n \n \n {brand}\n \n \n
\n \n {brand}\n \n \n \n \n © {year ? `${year} ` : \"\"}{brand}\n
\n All rights reserved.\n
\n
\n \n
\n\n \n {brand}\n \n \n \n \n \n \n }\n >\n \n \n
\n \n
\n
\n
\n );\n}\n"],"names":["SiteHeader","query","categoryList","policyLinks","siteName","year","items","brand","trim","id","className","href","home","src","alt","width","height","variant","links","ariaLabel","fallback","role","name","type","placeholder","defaultValue","readOnly"],"mappings":";;;;;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;;;;;;;;;;;;AAEO,SAASA,WAAW,EACzBC,QAAQ,EAAE,EACVC,YAAY,EACZC,cAAc,EAAE,EAChBC,WAAW,EAAE,EACbC,IAAI,EAOL;IACC,MAAMC,QAAQ,IAAA,+JAA2B,EAACJ;IAC1C,MAAMK,QAAQH,SAASI,IAAI,MAAM;IACjC,qBACE,8OAAC;QAAIC,IAAG;QAAqBC,WAAU;kBACrC,cAAA,8OAAC;YAAOA,WAAU;;8BAChB,8OAAC,0JAAU;;sCACT,8OAAC,0LAAI;4BAACA,WAAU;4BAAsBC,MAAM,sIAAM,CAACC,IAAI;4BAAE,cAAY,GAAGL,MAAM,EAAE,CAAC;sCAC/E,cAAA,8OAAC;gCAAIG,WAAU;gCAAoBG,KAAI;gCAAaC,KAAKP;gCAAOQ,OAAO;gCAAKC,QAAQ;;;;;;;;;;;sCAEtF,8OAAC;4BAAIN,WAAU;4BAAsB,cAAW;sCAC9C,cAAA,8OAAC,iKAAgB;gCAACJ,OAAOA;gCAAOW,SAAQ;;;;;;;;;;;sCAE1C,8OAAC;4BAAIP,WAAU;;8CACb,8OAAC;;sDACC,8OAAC;4CAAIA,WAAU;4CAAuCG,KAAI;4CAAaC,KAAKP;4CAAOQ,OAAO;4CAAKC,QAAQ;;;;;;sDACvG,8OAAC;4CAAEN,WAAU;4CAAsB,eAAY;;;;;;;;;;;;8CAEjD,8OAAC,4JAAW;oCAACQ,OAAOf;;;;;;8CACpB,8OAAC;;wCAAM;wCACFE,OAAO,GAAGA,KAAK,CAAC,CAAC,GAAG;wCAAIE;sDAC3B,8OAAC;;;;;wCAAK;;;;;;;;;;;;;sCAIV,8OAAC,4JAAW;4BAACG,WAAU;4BAAuBS,WAAU;;;;;;;;;;;;8BAG1D,8OAAC,0LAAI;oBAACT,WAAU;oBAAkBC,MAAM,sIAAM,CAACC,IAAI;oBAAE,cAAY,GAAGL,MAAM,EAAE,CAAC;8BAC3E,cAAA,8OAAC;wBAAIG,WAAU;wBAAqCG,KAAI;wBAAaC,KAAKP;wBAAOQ,OAAO;wBAAKC,QAAQ;;;;;;;;;;;8BAEvG,8OAAC;oBAAIN,WAAU;oBAAiB,cAAW;8BACzC,cAAA,8OAAC,iKAAgB;wBAACJ,OAAOA;wBAAOW,SAAQ;;;;;;;;;;;8BAE1C,8OAAC,iNAAQ;oBACPG,wBACE,8OAAC;wBAAKV,WAAU;wBAASW,MAAK;;0CAC5B,8OAAC;gCAAMC,MAAK;gCAAIC,MAAK;gCAASC,aAAY;gCAAY,cAAW;gCAAOC,cAAcxB;gCAAOyB,QAAQ;;;;;;0CACrG,8OAAC;gCAAOH,MAAK;gCAAS,cAAW;0CAC/B,cAAA,8OAAC;oCAAIb,WAAU;oCAAiBG,KAAI;oCAAqBC,KAAI;oCAAGC,OAAO;oCAAIC,QAAQ;;;;;;;;;;;;;;;;;8BAKzF,cAAA,8OAAC,8JAAY;wBAACf,OAAOA;;;;;;;;;;;8BAEvB,8OAAC;oBAAIS,WAAU;oBAAiB,cAAW;8BACzC,cAAA,8OAAC,oKAAiB;wBAACN,UAAUA;;;;;;;;;;;;;;;;;;;;;;AAKvC"}}, + {"offset": {"line": 1173, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/site-runtime.tsx"],"sourcesContent":["import { connection } from \"next/server\";\n\nimport { AppAddrProvider } from \"@/components/common/app-download\";\nimport { StartupAdSource } from \"@/components/common/startup-ad-source\";\nimport { ToastBridge } from \"@/components/common/toast\";\nimport { ToastHost } from \"@/components/common/toast-host\";\nimport { SiteChrome } from \"@/components/site/site-chrome\";\nimport { getAppConfigInfo } from \"@/lib/api/app-config-server\";\nimport { footerPolicyLinks, getFooterInfo } from \"@/lib/api/footer\";\nimport { getTranslationCategoryList } from \"@/lib/api/translation\";\nimport { SITE_NAME, brandText } from \"@/lib/seo/metadata\";\nimport { usableTranslationCategories } from \"@/lib/translation-nav\";\n\nexport async function SiteRuntime({ children }: { children: React.ReactNode }) {\n await connection();\n const [appConfig, nav, footer] = await Promise.all([getAppConfigInfo(), getTranslationCategoryList(), getFooterInfo()]);\n const categoryList = usableTranslationCategories(nav.data?.categoryList);\n const policyLinks = footerPolicyLinks(footer.data);\n /* 站名固定为黄果短剧,后台 webSiteName / brand.title 不再生效;简介里的旧站名同步替换 */\n const siteName = SITE_NAME;\n const slogan = brandText(footer.data?.footerInfo?.brand?.content);\n const year = new Date().getFullYear();\n const appAddr = appConfig.data?.config?.appAddr?.trim() || \"\";\n\n return (\n \n \n {children}\n \n \n \n \n \n );\n}\n"],"names":["SiteRuntime","children","appConfig","nav","footer","Promise","all","categoryList","data","policyLinks","siteName","slogan","footerInfo","brand","content","year","Date","getFullYear","appAddr","config","trim","dialogList","advitise","nineGridList"],"mappings":";;;;;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AAEO,eAAeA,YAAY,EAAEC,QAAQ,EAAiC;IAC3E,MAAM,IAAA,4IAAU;IAChB,MAAM,CAACC,WAAWC,KAAKC,OAAO,GAAG,MAAMC,QAAQC,GAAG,CAAC;QAAC,IAAA,gKAAgB;QAAI,IAAA,8JAA0B;QAAI,IAAA,4IAAa;KAAG;IACtH,MAAMC,eAAe,IAAA,+JAA2B,EAACJ,IAAIK,IAAI,EAAED;IAC3D,MAAME,cAAc,IAAA,gJAAiB,EAACL,OAAOI,IAAI;IACjD,2DAA2D,GAC3D,MAAME,WAAW,0IAAS;IAC1B,MAAMC,SAAS,IAAA,0IAAS,EAACP,OAAOI,IAAI,EAAEI,YAAYC,OAAOC;IACzD,MAAMC,OAAO,IAAIC,OAAOC,WAAW;IACnC,MAAMC,UAAUhB,UAAUM,IAAI,EAAEW,QAAQD,SAASE,UAAU;IAE3D,qBACE,8OAAC,kKAAe;QAACF,SAASA;;0BACxB,8OAAC,0JAAU;gBAACX,cAAcA;gBAAcE,aAAaA;gBAAaC,UAAUA;gBAAUC,QAAQA;gBAAQI,MAAMA;0BACzGd;;;;;;0BAEH,8OAAC,0KAAe;gBAACoB,YAAYnB,UAAUM,IAAI,EAAEc,UAAUD;gBAAYE,cAAcrB,UAAUM,IAAI,EAAEc,UAAUC;;;;;;0BAC3G,8OAAC,0JAAS;;;;;0BACV,8OAAC,oJAAW;;;;;;;;;;;AAGlB"}}, + {"offset": {"line": 1258, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/site-sidebar.tsx"],"sourcesContent":["import Link from \"next/link\";\n\nimport { CategoryNavItems } from \"@/components/site/category-nav\";\nimport { PolicyLinks } from \"@/components/site/policy-links\";\nimport { SidebarToggle } from \"@/components/site/sidebar-toggle\";\nimport { SocialLinks } from \"@/components/site/social-links\";\nimport type { FooterPolicyLink } from \"@/lib/api/footer\";\nimport type { TranslationCategory } from \"@/lib/api/types\";\nimport { usableTranslationCategories } from \"@/lib/translation-nav\";\nimport { routes } from \"@/lib/site/routes\";\n\nexport function SiteSidebar({\n categoryList,\n policyLinks = [],\n siteName = \"\",\n year,\n}: {\n categoryList?: TranslationCategory[];\n policyLinks?: FooterPolicyLink[];\n siteName?: string;\n year?: number;\n}) {\n const items = usableTranslationCategories(categoryList);\n const brand = siteName.trim() || \"网站\";\n return (\n \n );\n}\n\nexport function MobileNav({ categoryList }: { categoryList?: TranslationCategory[] }) {\n const items = usableTranslationCategories(categoryList);\n return (\n \n );\n}\n"],"names":["SiteSidebar","categoryList","policyLinks","siteName","year","items","brand","trim","className","id","href","home","src","alt","width","height","variant","links","find","item","external","title","viewBox","cx","cy","r","d","ariaLabel","showLabel","MobileNav"],"mappings":";;;;;;;AAAA;AAEA;AACA;AACA;AACA;AAGA;AACA;;;;;;;;;AAEO,SAASA,YAAY,EAC1BC,YAAY,EACZC,cAAc,EAAE,EAChBC,WAAW,EAAE,EACbC,IAAI,EAML;IACC,MAAMC,QAAQ,IAAA,+JAA2B,EAACJ;IAC1C,MAAMK,QAAQH,SAASI,IAAI,MAAM;IACjC,qBACE,8OAAC;QAAMC,WAAU;QAAOC,IAAG;QAAe,cAAW;;0BACnD,8OAAC;gBAAID,WAAU;;kCACb,8OAAC,0LAAI;wBAACA,WAAU;wBAA2BE,MAAM,sIAAM,CAACC,IAAI;wBAAE,cAAY,GAAGL,MAAM,EAAE,CAAC;kCACpF,cAAA,8OAAC;4BAAKE,WAAU;sCACd,cAAA,8OAAC;gCAAIA,WAAU;gCAAkCI,KAAI;gCAAaC,KAAKP;gCAAOQ,OAAO;gCAAKC,QAAQ;;;;;;;;;;;;;;;;kCAGtG,8OAAC,gKAAa;;;;;;;;;;;0BAEhB,8OAAC;gBAAI,cAAW;0BACd,cAAA,8OAAC,iKAAgB;oBAACV,OAAOA;oBAAOW,SAAQ;;;;;;;;;;;0BAE1C,8OAAC;gBAAIR,WAAU;;kCACb,8OAAC;;0CACC,8OAAC;gCAAIA,WAAU;gCAAuCI,KAAI;gCAAaC,KAAKP;gCAAOQ,OAAO;gCAAKC,QAAQ;;;;;;0CACvG,8OAAC;gCAAEP,WAAU;gCAAsB,eAAY;;;;;;;;;;;;kCAEjD,8OAAC,4JAAW;wBAACS,OAAOf;;;;;;kCACpB,8OAAC;;4BAAM;4BACFE,OAAO,GAAGA,KAAK,CAAC,CAAC,GAAG;4BAAIE;0CAC3B,8OAAC;;;;;4BAAK;;;;;;;;;;;;;0BAIV,8OAAC,0LAAI;gBACHE,WAAU;gBACVE,MAAMR,YAAYgB,IAAI,CAAC,CAACC,OAAS,CAACA,KAAKC,QAAQ,GAAGV,QAAQ;gBAC1DW,OAAM;gBACN,cAAW;0BAEX,cAAA,8OAAC;oBAAIC,SAAQ;oBAAY,eAAY;;sCACnC,8OAAC;4BAAOC,IAAG;4BAAKC,IAAG;4BAAKC,GAAE;;;;;;sCAC1B,8OAAC;4BAAKC,GAAE;;;;;;;;;;;;;;;;;0BAGZ,8OAAC,4JAAW;gBAAClB,WAAU;gBAAiBmB,WAAU;gBAAOC,SAAS;;;;;;;;;;;;AAGxE;AAEO,SAASC,UAAU,EAAE5B,YAAY,EAA4C;IAClF,MAAMI,QAAQ,IAAA,+JAA2B,EAACJ;IAC1C,qBACE,8OAAC;QAAIO,WAAU;QAAe,cAAW;kBACvC,cAAA,8OAAC,iKAAgB;YAACH,OAAOA;YAAOW,SAAQ;;;;;;;;;;;AAG9C"}}, + {"offset": {"line": 1479, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/social-links.tsx"],"sourcesContent":["import { InlineIcon } from \"@/components/site/inline-icon\";\nimport { businessContactLinks } from \"@/lib/site/social-links\";\n\ntype SocialLinksProps = {\n className: string;\n /** 区域名称,供读屏识别整组入口 */\n ariaLabel: string;\n /** 侧栏展开态展示文案;抽屉仅图标 */\n showLabel?: boolean;\n};\n\nexport function SocialLinks({ className, ariaLabel, showLabel = false }: SocialLinksProps) {\n const links = businessContactLinks();\n if (!links.length) return null;\n return (\n \n );\n}\n"],"names":["SocialLinks","className","ariaLabel","showLabel","links","length","map","item","href","target","rel","title","label","file","icon","src","alt","width","height"],"mappings":";;;;;AAAA;AACA;;;;AAUO,SAASA,YAAY,EAAEC,SAAS,EAAEC,SAAS,EAAEC,YAAY,KAAK,EAAoB;IACvF,MAAMC,QAAQ,IAAA,6JAAoB;IAClC,IAAI,CAACA,MAAMC,MAAM,EAAE,OAAO;IAC1B,qBACE,8OAAC;QAAIJ,WAAWA;QAAW,cAAYC;kBACpCE,MAAME,GAAG,CAAC,CAACC,OACVJ,0BACE,8OAAC;gBAECK,MAAMD,KAAKC,IAAI;gBACfC,QAAO;gBACPC,KAAI;gBACJC,OAAOJ,KAAKK,KAAK;gBACjB,cAAYL,KAAKK,KAAK;;kCAEtB,8OAAC,0JAAU;wBAACC,MAAMN,KAAKO,IAAI;wBAAEb,WAAU;;;;;;kCACvC,8OAAC;wBAAKA,WAAU;wBAAuB,eAAY;kCAChDM,KAAKK,KAAK;;;;;;;eATRL,KAAKK,KAAK;;;;qCAajB,8OAAC;gBAAmBJ,MAAMD,KAAKC,IAAI;gBAAEC,QAAO;gBAASC,KAAI;gBAAsBC,OAAOJ,KAAKK,KAAK;0BAC9F,cAAA,8OAAC;oBAAIG,KAAK,CAAC,QAAQ,EAAER,KAAKO,IAAI,EAAE;oBAAEE,KAAKT,KAAKK,KAAK;oBAAEK,OAAO;oBAAIC,QAAQ;;;;;;eADhEX,KAAKK,KAAK;;;;;;;;;;AAO5B"}}, + {"offset": {"line": 1554, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/app-config-server.ts"],"sourcesContent":["import { serverFetchJson } from \"./server-fetch\";\nimport type { ConfigInfoResp } from \"./types\";\n\nexport type AppConfigLoadResult = {\n data: ConfigInfoResp | null;\n error: string;\n};\n\n/** 服务端拉取公共配置。GET /api/app/config/info,无查询参数。 */\nexport async function getAppConfigInfo(): Promise {\n try {\n const data = await serverFetchJson(\"/api/app/config/info\", {\n maxAttempts: 2,\n timeoutMs: 10_000,\n revalidate: 60,\n tags: [\"app-config\"],\n });\n return { data, error: \"\" };\n } catch (reason: unknown) {\n const error = reason instanceof Error ? reason.message : \"公共配置加载失败\";\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\"[app-config]\", error);\n }\n return { data: null, error };\n }\n}\n"],"names":["getAppConfigInfo","data","maxAttempts","timeoutMs","revalidate","tags","error","reason","Error","message","console","warn"],"mappings":";;;;AAAA;;AASO,eAAeA;IACpB,IAAI;QACF,MAAMC,OAAO,MAAM,IAAA,uJAAe,EAAiB,wBAAwB;YACzEC,aAAa;YACbC,WAAW;YACXC,YAAY;YACZC,MAAM;gBAAC;aAAa;QACtB;QACA,OAAO;YAAEJ;YAAMK,OAAO;QAAG;IAC3B,EAAE,OAAOC,QAAiB;QACxB,MAAMD,QAAQC,kBAAkBC,QAAQD,OAAOE,OAAO,GAAG;QACzD,wCAA4C;YAC1CC,QAAQC,IAAI,CAAC,gBAAgBL;QAC/B;QACA,OAAO;YAAEL,MAAM;YAAMK;QAAM;IAC7B;AACF"}}, + {"offset": {"line": 1589, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/client-headers.ts"],"sourcesContent":["const APP_VER = process.env.NEXT_PUBLIC_APP_VERSION?.trim() || \"1.0.0\";\n\ntype HeaderSource = Pick;\n\nfunction clean(value: string) {\n return value.replace(/[^\\x20-\\x7E]|[;=]/g, \" \").trim();\n}\n\n/** 不依赖 node:net,避免被浏览器端打包。 */\nfunction isIP(value: string) {\n if (/^(?:\\d{1,3}\\.){3}\\d{1,3}$/.test(value)) {\n return value.split(\".\").every((part) => {\n const n = Number(part);\n return String(n) === part && n >= 0 && n <= 255;\n });\n }\n // 宽松校验 IPv6,够用来转发 X-Real-IP。\n return value.includes(\":\") && /^[0-9a-fA-F:.]+$/.test(value);\n}\n\nfunction sysType(ua: string) {\n const value = ua.toLowerCase();\n if (value.includes(\"android\")) return \"h5_android\";\n if (value.includes(\"iphone\") || value.includes(\"ipad\") || value.includes(\"ipod\")) return \"h5_ios\";\n return \"h5_pc\";\n}\n\nfunction guessAndroidBrand(model: string, ua: string) {\n const value = `${model} ${ua}`;\n const brands: Array<[RegExp, string]> = [\n [/Build\\/HONOR|\\bHONOR\\b/i, \"Honor\"],\n [/Build\\/HUAWEI|HUAWEI|HW-/i, \"Huawei\"],\n [/SM-|samsung|Galaxy/i, \"Samsung\"],\n [/Pixel/i, \"Google\"],\n [/Redmi|POCO|XiaoMi|\\bMi\\b/i, \"Xiaomi\"],\n [/OPPO|\\bCPH\\d{3,4}/i, \"OPPO\"],\n [/vivo|\\bV\\d{4}/i, \"vivo\"],\n [/OnePlus|ONEPLUS/i, \"OnePlus\"],\n [/realme|\\bRMX\\d{3,4}/i, \"realme\"],\n ];\n return brands.find(([pattern]) => pattern.test(value))?.[1] || \"\";\n}\n\nfunction parseBrowser(ua: string) {\n const edge = ua.match(/Edg\\/([\\d.]+)/i);\n if (edge) return `Edge ${edge[1]}`;\n const opera = ua.match(/(?:OPR|Opera)\\/([\\d.]+)/i);\n if (opera) return `Opera ${opera[1]}`;\n const chrome = ua.match(/Chrome\\/([\\d.]+)/i);\n if (chrome && !/Edg\\//i.test(ua)) return `Chrome ${chrome[1]}`;\n const safari = ua.match(/Version\\/([\\d.]+).*Safari/i);\n if (safari) return `Safari ${safari[1]}`;\n const firefox = ua.match(/Firefox\\/([\\d.]+)/i);\n if (firefox) return `Firefox ${firefox[1]}`;\n const ie = ua.match(/(?:MSIE\\s|Trident.*rv:)([\\d.]+)/i);\n if (ie) return `IE ${ie[1]}`;\n return \"\";\n}\n\ntype DeviceProfile = {\n devType: string;\n sysType: \"h5_ios\" | \"h5_android\" | \"h5_pc\";\n buildID: string;\n deviceBrand: string;\n deviceModel: string;\n systemName: string;\n systemVersion: string;\n};\n\n/** 从浏览器 User-Agent 解析设备公共字段,口径对齐 jha-1040 useragent.ParseDeviceFromUA。 */\nfunction parseDeviceFromUA(ua: string): DeviceProfile {\n const raw = ua.trim();\n let deviceBrand = \"\";\n let deviceModel = \"\";\n let deviceType = \"desktop\";\n let systemName = \"Other\";\n let systemVersion = \"\";\n\n if (/iPhone|iPad|iPod/i.test(raw)) {\n systemName = \"iOS\";\n deviceBrand = \"Apple\";\n const ios = raw.match(/OS (\\d+[_\\d]*) like Mac OS X/i);\n if (ios) systemVersion = ios[1].replace(/_/g, \".\");\n if (/iPad/i.test(raw)) {\n deviceModel = \"iPad\";\n deviceType = \"tablet\";\n } else if (/iPod/i.test(raw)) {\n deviceModel = \"iPod\";\n deviceType = \"mobile\";\n } else {\n deviceModel = \"iPhone\";\n deviceType = \"mobile\";\n }\n } else if (/Android/i.test(raw)) {\n systemName = \"Android\";\n const version = raw.match(/Android ([\\d.]+)/i);\n if (version) systemVersion = version[1];\n const model = raw.match(/Android\\s+[\\d.]+;\\s*([^;)]+?)(?:\\s+Build\\/|\\))/i);\n if (model?.[1]) deviceModel = model[1].trim();\n deviceBrand = guessAndroidBrand(deviceModel, raw);\n deviceType = /Mobile/i.test(raw) ? \"mobile\" : \"tablet\";\n } else if (/Windows/i.test(raw)) {\n systemName = \"Windows\";\n const win = raw.match(/Windows NT ([\\d.]+)/i);\n if (win) systemVersion = win[1];\n } else if (/Mac OS X|Macintosh/i.test(raw)) {\n systemName = \"macOS\";\n deviceBrand = \"Apple\";\n deviceModel = \"Mac\";\n const mac = raw.match(/Mac OS X ([\\d_]+)/i);\n if (mac) systemVersion = mac[1].replace(/_/g, \".\");\n } else if (/Linux/i.test(raw)) {\n systemName = \"Linux\";\n }\n\n const devType = [deviceBrand, deviceModel, deviceType].map((part) => part.trim()).filter(Boolean).join(\" \");\n return {\n devType: devType || \"desktop\",\n sysType: sysType(raw),\n buildID: clean(parseBrowser(raw)) || \"web\",\n deviceBrand,\n deviceModel,\n systemName,\n systemVersion,\n };\n}\n\nfunction xUserAgent(ua: string, extra: { devID?: string; sid?: string } = {}) {\n const info = parseDeviceFromUA(ua);\n return [\n extra.devID ? `DevID=${clean(extra.devID)}` : \"\",\n `DevType=${clean(info.devType)}`,\n `SysType=${info.sysType}`,\n `Ver=${clean(APP_VER)}`,\n `BuildID=${clean(info.buildID) || \"web\"}`,\n `device_brand=${clean(info.deviceBrand)}`,\n `device_model=${clean(info.deviceModel)}`,\n `system_name=${clean(info.systemName)}`,\n `system_version=${clean(info.systemVersion)}`,\n `sid=${clean(extra.sid || \"\")}`,\n ]\n .filter((part) => part !== \"\")\n .join(\";\");\n}\n\nfunction sessionId(source: HeaderSource) {\n const cookies = new Map(\n (source.get(\"cookie\") || \"\").split(\";\").map((value) => {\n const index = value.indexOf(\"=\");\n if (index < 0) return [\"\", \"\"];\n return [value.slice(0, index).trim(), value.slice(index + 1).trim()];\n }),\n );\n const sid = cookies.get(\"sid\");\n if (sid) return sid;\n const token = cookies.get(\"_s_token_\") || \"\";\n if (token.startsWith(\"{\")) {\n try {\n return String(JSON.parse(token).sid || \"\");\n } catch {\n /* ignore */\n }\n }\n return token;\n}\n\n/** 浏览器请求只带 X-User-Agent。User-Agent 由浏览器自己发,不在前端伪造。 */\nexport function buildBrowserApiHeaders(devID = \"\", sid = \"\") {\n const ua = typeof navigator !== \"undefined\" ? navigator.userAgent : \"\";\n return { \"X-User-Agent\": xUserAgent(ua, { devID, sid }) };\n}\n\n/** 从请求头解析客户端 IP,优先 X-Real-IP,其次 X-Forwarded-For 第一段。 */\nexport function clientIp(source: HeaderSource, fallback = \"\") {\n const candidates = [source.get(\"x-real-ip\"), source.get(\"x-forwarded-for\")?.split(\",\")[0], fallback];\n for (const value of candidates) {\n const ip = value?.trim() || \"\";\n if (ip && isIP(ip)) return ip;\n }\n return \"\";\n}\n\n/**\n * 服务端转给上游的身份头:保留浏览器 User-Agent / X-User-Agent,并补上 X-Real-IP。\n * 没有浏览器上下文时回退到合成 X-User-Agent。\n */\nexport function clientHeaders(\n source?: HeaderSource,\n overrides: { userAgent?: string; clientIp?: string; devID?: string } = {},\n): Record {\n const result: Record = {};\n const ua = (overrides.userAgent || source?.get(\"user-agent\") || \"\").trim();\n if (ua) result[\"User-Agent\"] = ua;\n\n const incomingXua = source?.get(\"x-user-agent\")?.trim() || \"\";\n if (incomingXua) {\n result[\"X-User-Agent\"] = incomingXua;\n } else if (ua) {\n result[\"X-User-Agent\"] = xUserAgent(ua, { sid: source ? sessionId(source) : \"\" });\n } else {\n Object.assign(result, buildBrowserApiHeaders(overrides.devID || \"web-ssr\"));\n }\n\n const ip = overrides.clientIp || (source ? clientIp(source) : \"\");\n if (ip) result[\"X-Real-IP\"] = ip;\n\n return result;\n}\n"],"names":["APP_VER","trim","clean","value","replace","isIP","test","split","every","part","n","Number","String","includes","sysType","ua","toLowerCase","guessAndroidBrand","model","brands","find","pattern","parseBrowser","edge","match","opera","chrome","safari","firefox","ie","parseDeviceFromUA","raw","deviceBrand","deviceModel","deviceType","systemName","systemVersion","ios","version","win","mac","devType","map","filter","Boolean","join","buildID","xUserAgent","extra","info","devID","sid","sessionId","source","cookies","Map","get","index","indexOf","slice","token","startsWith","JSON","parse","buildBrowserApiHeaders","navigator","userAgent","clientIp","fallback","candidates","ip","clientHeaders","overrides","result","incomingXua","Object","assign"],"mappings":"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"}}, + {"offset": {"line": 1813, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/config.ts"],"sourcesContent":["/**\n * 浏览器接口根地址。\n * 留空时走同域 `/api/*`,由服务端转到 API_PROXY_TARGET。\n */\nconst DEFAULT_UPSTREAM = \"https://webhgbapi.mfcg.me\";\nconst raw = process.env.NEXT_PUBLIC_API_BASE_URL;\nexport const API_BASE_URL = (raw ?? \"\").replace(/\\/$/, \"\");\n\n/** 代理目标指回当前 Node 进程时,请求会打到自己,发布后接口表现为不通。 */\nexport function pointsAtThisServer(base: string) {\n try {\n const url = new URL(base);\n const loopback = url.hostname === \"127.0.0.1\" || url.hostname === \"localhost\" || url.hostname === \"::1\";\n if (!loopback) return false;\n const port = url.port || (url.protocol === \"https:\" ? \"443\" : \"80\");\n const listen = process.env.PORT?.trim();\n return !listen || port === listen;\n } catch {\n return false;\n }\n}\n\n/** 服务端直连上游(相对路径在 Node fetch 中不可用) */\nexport function getServerApiBaseUrl() {\n const proxy = process.env.API_PROXY_TARGET?.trim().replace(/\\/$/, \"\");\n const configured = proxy || raw?.trim().replace(/\\/$/, \"\") || \"\";\n if (configured && !pointsAtThisServer(configured)) return configured;\n return DEFAULT_UPSTREAM;\n}\n"],"names":["DEFAULT_UPSTREAM","raw","API_BASE_URL","replace","pointsAtThisServer","base","url","URL","loopback","hostname","port","protocol","listen","process","env","PORT","trim","getServerApiBaseUrl","proxy","API_PROXY_TARGET","configured"],"mappings":";;;;;;;;AAAA;;;CAGC,GACD,MAAMA,mBAAmB;AACzB,MAAMC;AACC,MAAMC,eAAe,CAACD,OAAO,EAAE,EAAEE,OAAO,CAAC,OAAO;AAGhD,SAASC,mBAAmBC,IAAY;IAC7C,IAAI;QACF,MAAMC,MAAM,IAAIC,IAAIF;QACpB,MAAMG,WAAWF,IAAIG,QAAQ,KAAK,eAAeH,IAAIG,QAAQ,KAAK,eAAeH,IAAIG,QAAQ,KAAK;QAClG,IAAI,CAACD,UAAU,OAAO;QACtB,MAAME,OAAOJ,IAAII,IAAI,IAAI,CAACJ,IAAIK,QAAQ,KAAK,WAAW,QAAQ,IAAI;QAClE,MAAMC,SAASC,QAAQC,GAAG,CAACC,IAAI,EAAEC;QACjC,OAAO,CAACJ,UAAUF,SAASE;IAC7B,EAAE,OAAM;QACN,OAAO;IACT;AACF;AAGO,SAASK;IACd,MAAMC,QAAQL,QAAQC,GAAG,CAACK,gBAAgB,EAAEH,OAAOb,QAAQ,OAAO;IAClE,MAAMiB,aAAaF,SAASjB,KAAKe,OAAOb,QAAQ,OAAO,OAAO;IAC9D,IAAIiB,cAAc,CAAChB,mBAAmBgB,aAAa,OAAOA;IAC1D,OAAOpB;AACT"}}, + {"offset": {"line": 1849, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/footer.ts"],"sourcesContent":["import { isExternalHref, translationHref } from \"@/lib/translation-nav\";\nimport { serverFetchJson } from \"./server-fetch\";\nimport type { FooterInfoResp, TranslationInfo } from \"./types\";\n\nexport type FooterPolicyLink = {\n id: number;\n name: string;\n href: string;\n external: boolean;\n};\n\nexport type FooterInfoLoadResult = {\n data: FooterInfoResp | null;\n error: string;\n};\n\n/** 已下线的页面(用户中心 / 充值 / 客服反馈),后台配置了也不展示。 */\nconst REMOVED_HREF = /^\\/(?:feedback|info\\/(?:feedback|user-center|deposit|account-settings))(?:[/?#]|$)/;\n\n/** 底部导航项:分组下的 translationList;没有子项时用分组自身。 */\nexport function footerNavItems(data: FooterInfoResp | null | undefined): TranslationInfo[] {\n const items: TranslationInfo[] = [];\n for (const category of data?.footerInfo?.navList || []) {\n const children = (category.translationList || []).filter((item) => item?.name?.trim());\n if (children.length) {\n items.push(...children);\n continue;\n }\n if (category.name?.trim() && category.urlValue?.trim()) {\n items.push({ id: category.id, name: category.name, urlValue: category.urlValue });\n }\n }\n return items.filter((item) => !REMOVED_HREF.test(translationHref(item.urlValue)));\n}\n\n/** 底部规则链接。接口里个别项写成 /richetext/,统一进 /richtext/。 */\nexport function footerPolicyHref(urlValue: string | undefined) {\n return translationHref(urlValue).replace(/^\\/richetext\\//, \"/richtext/\");\n}\n\nexport function footerPolicyLinks(data: FooterInfoResp | null | undefined): FooterPolicyLink[] {\n return footerNavItems(data).map((item) => {\n const href = footerPolicyHref(item.urlValue);\n return { id: item.id, name: item.name, href, external: isExternalHref(href) || href.startsWith(\"mailto:\") };\n });\n}\n\n/** 服务端拉取页脚。GET /api/app/config/footer/info,无查询参数。 */\nexport async function getFooterInfo(): Promise {\n try {\n const data = await serverFetchJson(\"/api/app/config/footer/info\", {\n maxAttempts: 2,\n timeoutMs: 10_000,\n revalidate: 60,\n tags: [\"footer-info\"],\n });\n return { data, error: \"\" };\n } catch (reason: unknown) {\n const error = reason instanceof Error ? reason.message : \"页脚加载失败\";\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\"[footer-info]\", error);\n }\n return { data: null, error };\n }\n}\n"],"names":["REMOVED_HREF","footerNavItems","data","items","category","footerInfo","navList","children","translationList","filter","item","name","trim","length","push","urlValue","id","test","footerPolicyHref","replace","footerPolicyLinks","map","href","external","startsWith","getFooterInfo","maxAttempts","timeoutMs","revalidate","tags","error","reason","Error","message","console","warn"],"mappings":";;;;;;;;;;AAAA;AACA;;;AAeA,wCAAwC,GACxC,MAAMA,eAAe;AAGd,SAASC,eAAeC,IAAuC;IACpE,MAAMC,QAA2B,EAAE;IACnC,KAAK,MAAMC,YAAYF,MAAMG,YAAYC,WAAW,EAAE,CAAE;QACtD,MAAMC,WAAW,CAACH,SAASI,eAAe,IAAI,EAAE,EAAEC,MAAM,CAAC,CAACC,OAASA,MAAMC,MAAMC;QAC/E,IAAIL,SAASM,MAAM,EAAE;YACnBV,MAAMW,IAAI,IAAIP;YACd;QACF;QACA,IAAIH,SAASO,IAAI,EAAEC,UAAUR,SAASW,QAAQ,EAAEH,QAAQ;YACtDT,MAAMW,IAAI,CAAC;gBAAEE,IAAIZ,SAASY,EAAE;gBAAEL,MAAMP,SAASO,IAAI;gBAAEI,UAAUX,SAASW,QAAQ;YAAC;QACjF;IACF;IACA,OAAOZ,MAAMM,MAAM,CAAC,CAACC,OAAS,CAACV,aAAaiB,IAAI,CAAC,IAAA,mJAAe,EAACP,KAAKK,QAAQ;AAChF;AAGO,SAASG,iBAAiBH,QAA4B;IAC3D,OAAO,IAAA,mJAAe,EAACA,UAAUI,OAAO,CAAC,kBAAkB;AAC7D;AAEO,SAASC,kBAAkBlB,IAAuC;IACvE,OAAOD,eAAeC,MAAMmB,GAAG,CAAC,CAACX;QAC/B,MAAMY,OAAOJ,iBAAiBR,KAAKK,QAAQ;QAC3C,OAAO;YAAEC,IAAIN,KAAKM,EAAE;YAAEL,MAAMD,KAAKC,IAAI;YAAEW;YAAMC,UAAU,IAAA,kJAAc,EAACD,SAASA,KAAKE,UAAU,CAAC;QAAW;IAC5G;AACF;AAGO,eAAeC;IACpB,IAAI;QACF,MAAMvB,OAAO,MAAM,IAAA,uJAAe,EAAiB,+BAA+B;YAChFwB,aAAa;YACbC,WAAW;YACXC,YAAY;YACZC,MAAM;gBAAC;aAAc;QACvB;QACA,OAAO;YAAE3B;YAAM4B,OAAO;QAAG;IAC3B,EAAE,OAAOC,QAAiB;QACxB,MAAMD,QAAQC,kBAAkBC,QAAQD,OAAOE,OAAO,GAAG;QACzD,wCAA4C;YAC1CC,QAAQC,IAAI,CAAC,iBAAiBL;QAChC;QACA,OAAO;YAAE5B,MAAM;YAAM4B;QAAM;IAC7B;AACF"}}, + {"offset": {"line": 1925, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/server-fetch.ts"],"sourcesContent":["import { setDefaultResultOrder } from \"node:dns\";\nimport { headers as nextHeaders } from \"next/headers\";\n\nimport { buildBrowserApiHeaders, clientHeaders } from \"./client-headers\";\nimport { getServerApiBaseUrl } from \"./config\";\nimport type { ApiEnvelope } from \"./types\";\n\nsetDefaultResultOrder(\"ipv4first\");\n\nconst MAX_ATTEMPTS = 3;\nconst RETRY_BASE_MS = 400;\n\nexport type ServerFetchOptions = {\n timeoutMs?: number;\n maxAttempts?: number;\n revalidate?: number | false;\n tags?: string[];\n headers?: Record;\n};\n\nfunction networkErrorCode(error: unknown): string {\n if (!(error instanceof Error)) return \"\";\n const withCode = error as Error & { code?: string; cause?: { code?: string; errors?: unknown[] } };\n if (withCode.code) return withCode.code;\n if (withCode.cause?.code) return withCode.cause.code;\n const nested = withCode.cause?.errors?.[0] as { code?: string } | undefined;\n return nested?.code || \"\";\n}\n\n/** 渲染被取消时的中断,不是接口超时。 */\nexport function isRequestAborted(error: unknown) {\n if (!(error instanceof Error)) return false;\n if (error.name === \"TimeoutError\") return false;\n return error.name === \"AbortError\" || /this operation was aborted/i.test(error.message);\n}\n\nfunction isRetryableNetworkError(error: unknown) {\n if (!(error instanceof Error)) return false;\n if (isRequestAborted(error)) return false;\n if (error.name === \"TimeoutError\" || error.name === \"AbortError\") return true;\n const message = error.message.toLowerCase();\n if (message.includes(\"fetch failed\") || message.includes(\"network\")) return true;\n const code = networkErrorCode(error);\n if (/ENETUNREACH|ECONNRESET|ECONNREFUSED|ETIMEDOUT|EAI_AGAIN|ENOTFOUND|UND_ERR/i.test(code)) {\n return true;\n }\n const cause = (error as Error & { cause?: { errors?: unknown[] } }).cause;\n if (Array.isArray(cause?.errors)) return true;\n return false;\n}\n\nfunction wait(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction networkMessage(error: unknown) {\n const code = networkErrorCode(error);\n const message = error instanceof Error ? error.message : \"\";\n if (error instanceof Error && (error.name === \"TimeoutError\" || /aborted due to timeout/i.test(message))) {\n return \"接口暂时不可用(服务端网络超时)\";\n }\n if (/ETIMEDOUT|ENETUNREACH|ECONNREFUSED|fetch failed/i.test(`${code} ${message}`)) {\n return \"接口暂时不可用(服务端网络超时)\";\n }\n return message || \"请求失败\";\n}\n\nasync function requestIdentityHeaders() {\n try {\n return clientHeaders(await nextHeaders());\n } catch {\n return buildBrowserApiHeaders(\"web-ssr\");\n }\n}\n\n/** 服务端直连上游 JSON;网络抖动自动重试。带上当前请求的 UA / IP。 */\nexport async function serverFetchJson(pathWithQuery: string, options?: ServerFetchOptions): Promise {\n const base = getServerApiBaseUrl();\n const url = `${base}${pathWithQuery}`;\n const timeoutMs = options?.timeoutMs ?? 12_000;\n const maxAttempts = options?.maxAttempts ?? MAX_ATTEMPTS;\n const identity = await requestIdentityHeaders();\n const nextInit =\n options?.revalidate !== undefined || options?.tags?.length\n ? {\n ...(options.revalidate !== undefined ? { revalidate: options.revalidate } : {}),\n ...(options.tags?.length ? { tags: options.tags } : {}),\n }\n : undefined;\n\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n const response = await fetch(url, {\n headers: {\n Accept: \"application/json\",\n ...identity,\n ...options?.headers,\n },\n signal: AbortSignal.timeout(timeoutMs),\n ...(nextInit ? { next: nextInit } : {}),\n });\n\n const text = await response.text();\n let payload: ApiEnvelope | null = null;\n try {\n payload = text ? (JSON.parse(text) as ApiEnvelope) : null;\n } catch {\n payload = null;\n }\n\n if (!payload || typeof payload.code !== \"number\") {\n throw new Error(response.ok ? \"接口响应格式异常\" : `接口暂时不可用 (${response.status})`);\n }\n if (!response.ok || payload.code !== 200) {\n throw new Error(payload.tip || payload.msg || \"请求失败\");\n }\n\n return payload.data;\n } catch (error) {\n lastError = error;\n if (attempt >= maxAttempts || !isRetryableNetworkError(error)) break;\n await wait(RETRY_BASE_MS * attempt);\n }\n }\n\n throw new Error(networkMessage(lastError));\n}\n"],"names":["MAX_ATTEMPTS","RETRY_BASE_MS","networkErrorCode","error","Error","withCode","code","cause","nested","errors","isRequestAborted","name","test","message","isRetryableNetworkError","toLowerCase","includes","Array","isArray","wait","ms","Promise","resolve","setTimeout","networkMessage","requestIdentityHeaders","serverFetchJson","pathWithQuery","options","base","url","timeoutMs","maxAttempts","identity","nextInit","revalidate","undefined","tags","length","lastError","attempt","response","fetch","headers","Accept","signal","AbortSignal","timeout","next","text","payload","JSON","parse","ok","status","tip","msg","data"],"mappings":"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"}}, + {"offset": {"line": 2044, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/translation.ts"],"sourcesContent":["import { serverFetchJson } from \"./server-fetch\";\nimport type { AppTranslationInfo, TranslationCategory } from \"./types\";\n\nexport type TranslationCategoryLoadResult = {\n data: AppTranslationInfo | null;\n error: string;\n};\n\nfunction normalizeCategory(item: TranslationCategory): TranslationCategory {\n return {\n ...item,\n translationList: item.translationList || [],\n };\n}\n\n/** 服务端拉取顶部导航。GET /api/app/translation/category/list,无查询参数。 */\nexport async function getTranslationCategoryList(): Promise {\n try {\n const data = await serverFetchJson(\"/api/app/translation/category/list\", {\n maxAttempts: 2,\n timeoutMs: 10_000,\n revalidate: 60,\n tags: [\"translation-category\"],\n });\n return {\n data: {\n ...data,\n categoryList: (data.categoryList || []).map(normalizeCategory),\n },\n error: \"\",\n };\n } catch (reason: unknown) {\n const error = reason instanceof Error ? reason.message : \"导航分类加载失败\";\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\"[translation-category]\", error);\n }\n return { data: null, error };\n }\n}\n"],"names":["normalizeCategory","item","translationList","getTranslationCategoryList","data","maxAttempts","timeoutMs","revalidate","tags","categoryList","map","error","reason","Error","message","console","warn"],"mappings":";;;;AAAA;;AAQA,SAASA,kBAAkBC,IAAyB;IAClD,OAAO;QACL,GAAGA,IAAI;QACPC,iBAAiBD,KAAKC,eAAe,IAAI,EAAE;IAC7C;AACF;AAGO,eAAeC;IACpB,IAAI;QACF,MAAMC,OAAO,MAAM,IAAA,uJAAe,EAAqB,sCAAsC;YAC3FC,aAAa;YACbC,WAAW;YACXC,YAAY;YACZC,MAAM;gBAAC;aAAuB;QAChC;QACA,OAAO;YACLJ,MAAM;gBACJ,GAAGA,IAAI;gBACPK,cAAc,CAACL,KAAKK,YAAY,IAAI,EAAE,EAAEC,GAAG,CAACV;YAC9C;YACAW,OAAO;QACT;IACF,EAAE,OAAOC,QAAiB;QACxB,MAAMD,QAAQC,kBAAkBC,QAAQD,OAAOE,OAAO,GAAG;QACzD,wCAA4C;YAC1CC,QAAQC,IAAI,CAAC,0BAA0BL;QACzC;QACA,OAAO;YAAEP,MAAM;YAAMO;QAAM;IAC7B;AACF"}}, + {"offset": {"line": 2088, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/contact.ts"],"sourcesContent":["/** 全站唯一对外联系方式:商务合作(Telegram @jbd125)。不再读取后台的邮箱 / QQ / X / 交流群配置。 */\nexport const BUSINESS_CONTACT = {\n label: \"商务合作\",\n handle: \"@jbd125\",\n href: \"https://t.me/jbd125\",\n} as const;\n"],"names":["BUSINESS_CONTACT","label","handle","href"],"mappings":"AAAA,kEAAkE;;;;AAC3D,MAAMA,mBAAmB;IAC9BC,OAAO;IACPC,QAAQ;IACRC,MAAM;AACR"}}, + {"offset": {"line": 2101, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/seo/index.ts"],"sourcesContent":["export {\n OG_DEFAULT_IMAGE,\n SITE_NAME,\n brandText,\n buildPageMetadata,\n isPlaceholderSeoText,\n normalizeSEO,\n paginateSEO,\n resolveShareImage,\n siteSEOFromConfig,\n withSiteSuffix,\n type BuildMetadataOptions,\n type NormalizedSEO,\n type SeoSource,\n} from \"./metadata\";\n\nexport {\n absoluteRequestUrl,\n absoluteUrl,\n getRequestOrigin,\n getSiteName,\n getSiteOrigin,\n} from \"./site\";\n\nexport {\n buildPlayletDetailJSONLD,\n buildPlayletPlayJSONLD,\n buildWebPageJSONLD,\n isoDate,\n isoDateTime,\n serializeJSONLD,\n} from \"./jsonld\";\n\nexport {\n configSiteName,\n configToSiteSEO,\n getSiteSEOCached,\n mergeSEO,\n resolveContentMetadata,\n resolvePageMetadata,\n type ResolvePageMetadataOptions,\n} from \"./resolve\";\n\nexport {\n NAVIGATION_SECTION_HREFS,\n navigationSectionSeo,\n type NavigationSectionHref,\n} from \"./navigation-seo\";\n"],"names":[],"mappings":";AAgBA;AAQA;AASA;AAUA"}}, + {"offset": {"line": 2115, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/seo/jsonld.ts"],"sourcesContent":["import { normalizeSEO, type SeoSource } from \"./metadata\";\nimport { absoluteUrl, getSiteName, getSiteOrigin } from \"./site\";\n\ntype JsonLdNode = Record;\n\nfunction ref(id: string): JsonLdNode {\n return { \"@id\": id };\n}\n\nfunction first(...values: Array) {\n for (const value of values) {\n const text = value?.trim();\n if (text) return text;\n }\n return \"\";\n}\n\nfunction unique(items: string[]) {\n const seen = new Set();\n const out: string[] = [];\n for (const item of items) {\n const value = item.trim();\n if (!value) continue;\n const key = value.toLowerCase();\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(value);\n }\n return out;\n}\n\n/** 后端无时区时间戳按 UTC+8 理解。 */\nexport function isoDateTime(value?: string | null) {\n const raw = value?.trim() || \"\";\n if (!raw || /^(0001|1970-01-01)/.test(raw)) return \"\";\n if (/^\\d{4}-\\d\\d-\\d\\dT\\d\\d:\\d\\d:\\d\\d(?:\\.\\d+)?(?:Z|[+-]\\d\\d:\\d\\d)$/.test(raw) && !Number.isNaN(Date.parse(raw))) {\n return raw.replace(/\\.\\d+(?=Z|[+-]\\d\\d:\\d\\d$)/, \"\").replace(/[+-]00:00$/, \"Z\");\n }\n const match = raw.match(/^(\\d{4})[-/](\\d{2})[-/](\\d{2})(?:[ T](\\d{2}):(\\d{2}):(\\d{2}))?$/);\n if (!match) return \"\";\n const result = `${match[1]}-${match[2]}-${match[3]}T${match[4] || \"00\"}:${match[5] || \"00\"}:${match[6] || \"00\"}+08:00`;\n return Number.isNaN(Date.parse(result)) ? \"\" : result;\n}\n\nexport function isoDate(value?: string | null) {\n const full = isoDateTime(value);\n return full ? full.slice(0, 10) : \"\";\n}\n\n/** HTML 安全序列化,避免 `` 打断脚本。 */\nexport function serializeJSONLD(value: unknown) {\n return JSON.stringify(value)\n .replace(//g, \"\\\\u003e\")\n .replace(/&/g, \"\\\\u0026\")\n .replace(/\\u2028/g, \"\\\\u2028\")\n .replace(/\\u2029/g, \"\\\\u2029\");\n}\n\nfunction organizationAndWebsite(siteName: string): JsonLdNode[] {\n const site = getSiteOrigin();\n const logo = absoluteUrl(\"/logo.webp\");\n return [\n {\n \"@type\": \"Organization\",\n \"@id\": `${site}/#organization`,\n name: siteName,\n url: absoluteUrl(\"/\"),\n logo: {\n \"@type\": \"ImageObject\",\n \"@id\": `${site}/#logo`,\n url: logo,\n contentUrl: logo,\n },\n },\n {\n \"@type\": \"WebSite\",\n \"@id\": `${site}/#website`,\n name: siteName,\n url: absoluteUrl(\"/\"),\n description: `${siteName}汇集热门短剧与精选推荐,支持高清在线观看。`,\n inLanguage: \"zh-CN\",\n publisher: ref(`${site}/#organization`),\n potentialAction: {\n \"@type\": \"SearchAction\",\n target: {\n \"@type\": \"EntryPoint\",\n urlTemplate: `${site}/search/{search_term_string}`,\n },\n \"query-input\": \"required name=search_term_string\",\n },\n },\n ];\n}\n\nfunction webpage(url: string, name: string, description: string, type = \"WebPage\"): JsonLdNode {\n const site = getSiteOrigin();\n return {\n \"@type\": type,\n \"@id\": `${url}#webpage`,\n name,\n description,\n url,\n inLanguage: \"zh-CN\",\n isPartOf: ref(`${site}/#website`),\n publisher: ref(`${site}/#organization`),\n };\n}\n\nfunction breadcrumb(items: Array<[string, string]>): JsonLdNode {\n const last = items.at(-1)?.[1] || \"\";\n return {\n \"@type\": \"BreadcrumbList\",\n \"@id\": `${last}#breadcrumb`,\n itemListElement: items\n .filter(([name, item]) => name && item)\n .map(([name, item], index) => ({\n \"@type\": \"ListItem\",\n position: index + 1,\n name,\n item,\n })),\n };\n}\n\nfunction wrapGraph(nodes: JsonLdNode[], siteName?: string) {\n return {\n \"@context\": \"https://schema.org\",\n \"@graph\": [...organizationAndWebsite(getSiteName(siteName)), ...nodes],\n };\n}\n\nexport type WebPageJsonLdInput = {\n path: string;\n title: string;\n description?: string;\n type?: \"WebPage\" | \"CollectionPage\" | \"AboutPage\" | \"FAQPage\";\n breadcrumbs?: Array<[string, string]>;\n itemListUrls?: string[];\n siteName?: string;\n};\n\nexport function buildWebPageJSONLD(input: WebPageJsonLdInput) {\n const url = absoluteUrl(input.path);\n const page = webpage(url, input.title, input.description || input.title, input.type || \"WebPage\");\n const nodes: JsonLdNode[] = [page];\n\n if (input.breadcrumbs?.length) {\n page.breadcrumb = ref(`${url}#breadcrumb`);\n nodes.push(breadcrumb(input.breadcrumbs.map(([name, path]) => [name, absoluteUrl(path)])));\n }\n\n const listUrls = unique((input.itemListUrls ?? []).map((item) => absoluteUrl(item)).filter(Boolean));\n if (listUrls.length >= 2) {\n page.mainEntity = ref(`${url}#itemlist`);\n nodes.push({\n \"@type\": \"ItemList\",\n \"@id\": `${url}#itemlist`,\n numberOfItems: listUrls.length,\n itemListElement: listUrls.map((item, index) => ({\n \"@type\": \"ListItem\",\n position: index + 1,\n url: item,\n })),\n });\n }\n\n return wrapGraph(nodes, input.siteName);\n}\n\nexport type PlayletDetailJsonLdInput = {\n path: string;\n title?: string;\n description?: string;\n cover?: string | null;\n totalEpisode?: number | null;\n onlineAt?: string | null;\n tagNames?: string[] | null;\n themeNames?: string[] | null;\n anchor?: string | null;\n seoInfo?: SeoSource;\n siteName?: string;\n};\n\nexport function buildPlayletDetailJSONLD(input: PlayletDetailJsonLdInput) {\n const url = absoluteUrl(input.path);\n const seo = normalizeSEO(input.seoInfo);\n const name = first(input.title, seo.title, \"短剧详情\");\n const description = first(seo.description, input.description, `在线观看《${name}》,高清短剧全集免费看。`);\n const cover = input.cover?.trim() || \"\";\n const site = getSiteOrigin();\n\n const series: JsonLdNode = {\n \"@type\": \"TVSeries\",\n \"@id\": `${url}#tvseries`,\n name,\n description,\n url,\n inLanguage: \"zh-CN\",\n publisher: ref(`${site}/#organization`),\n potentialAction: {\n \"@type\": \"WatchAction\",\n target: { \"@type\": \"EntryPoint\", urlTemplate: url },\n },\n };\n if (cover) {\n series.image = [cover];\n series.thumbnailUrl = [cover];\n }\n const episodes = Number(input.totalEpisode) || 0;\n if (episodes > 0) series.numberOfEpisodes = episodes;\n const published = isoDate(input.onlineAt);\n if (published) series.datePublished = published;\n const genre = unique([...(input.tagNames ?? []), ...(input.themeNames ?? []), ...seo.keywords]);\n if (genre.length) series.genre = genre;\n if (input.anchor?.trim()) series.actor = { \"@type\": \"Person\", name: input.anchor.trim() };\n\n const page = webpage(url, name, description);\n page.mainEntity = ref(series[\"@id\"] as string);\n page.breadcrumb = ref(`${url}#breadcrumb`);\n\n return wrapGraph(\n [\n page,\n breadcrumb([\n [\"首页\", absoluteUrl(\"/\")],\n [\"短剧\", absoluteUrl(\"/shorts\")],\n [name, url],\n ]),\n series,\n ],\n input.siteName,\n );\n}\n\nexport type PlayletPlayJsonLdInput = PlayletDetailJsonLdInput & {\n episode: number;\n playPath: string;\n videoUrl?: string | null;\n};\n\nexport function buildPlayletPlayJSONLD(input: PlayletPlayJsonLdInput) {\n const detailPath = absoluteUrl(input.path);\n const url = absoluteUrl(input.playPath);\n const seo = normalizeSEO(input.seoInfo);\n const title = first(input.title, seo.title, \"短剧\");\n const description = first(seo.description, input.description, `正在播放《${title}》第${input.episode}集`);\n const cover = input.cover?.trim() || \"\";\n const published = isoDateTime(input.onlineAt);\n const videoName = `${title} - 第${input.episode}集`;\n const site = getSiteOrigin();\n\n const page = webpage(url, videoName, description);\n page.breadcrumb = ref(`${url}#breadcrumb`);\n const nodes: JsonLdNode[] = [\n page,\n breadcrumb([\n [\"首页\", absoluteUrl(\"/\")],\n [title, detailPath],\n [videoName, url],\n ]),\n ];\n\n const series: JsonLdNode = {\n \"@type\": \"TVSeries\",\n \"@id\": `${detailPath}#tvseries`,\n name: title,\n description: first(seo.description, input.description, description),\n url: detailPath,\n inLanguage: \"zh-CN\",\n publisher: ref(`${site}/#organization`),\n };\n if (cover) {\n series.image = [cover];\n series.thumbnailUrl = [cover];\n }\n nodes.push(series);\n\n if (cover && published) {\n const video: JsonLdNode = {\n \"@type\": \"VideoObject\",\n \"@id\": `${url}#video`,\n name: videoName,\n description,\n url,\n mainEntityOfPage: ref(`${url}#webpage`),\n inLanguage: \"zh-CN\",\n isFamilyFriendly: false,\n isPartOf: ref(`${site}/#website`),\n publisher: ref(`${site}/#organization`),\n thumbnailUrl: [cover],\n image: [cover],\n uploadDate: published,\n potentialAction: {\n \"@type\": \"WatchAction\",\n target: { \"@type\": \"EntryPoint\", urlTemplate: url },\n },\n };\n if (input.videoUrl?.trim()) video.contentUrl = input.videoUrl.trim();\n page.mainEntity = ref(video[\"@id\"] as string);\n nodes.push(video);\n nodes.push({\n \"@type\": \"TVEpisode\",\n \"@id\": `${url}#episode`,\n name: videoName,\n description,\n episodeNumber: input.episode,\n url,\n associatedMedia: ref(video[\"@id\"] as string),\n partOfSeries: ref(series[\"@id\"] as string),\n image: [cover],\n datePublished: published,\n });\n }\n\n return wrapGraph(nodes, input.siteName);\n}\n"],"names":["ref","id","first","values","value","text","trim","unique","items","seen","Set","out","item","key","toLowerCase","has","add","push","isoDateTime","raw","test","Number","isNaN","Date","parse","replace","match","result","isoDate","full","slice","serializeJSONLD","JSON","stringify","organizationAndWebsite","siteName","site","logo","name","url","contentUrl","description","inLanguage","publisher","potentialAction","target","urlTemplate","webpage","type","isPartOf","breadcrumb","last","at","itemListElement","filter","map","index","position","wrapGraph","nodes","buildWebPageJSONLD","input","path","page","title","breadcrumbs","length","listUrls","itemListUrls","Boolean","mainEntity","numberOfItems","buildPlayletDetailJSONLD","seo","seoInfo","cover","series","image","thumbnailUrl","episodes","totalEpisode","numberOfEpisodes","published","onlineAt","datePublished","genre","tagNames","themeNames","keywords","anchor","actor","buildPlayletPlayJSONLD","detailPath","playPath","episode","videoName","video","mainEntityOfPage","isFamilyFriendly","uploadDate","videoUrl","episodeNumber","associatedMedia","partOfSeries"],"mappings":"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"}}, + {"offset": {"line": 2440, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/seo/metadata.ts"],"sourcesContent":["import type { Metadata } from \"next\";\n\nexport const SITE_NAME = \"黄果短剧\";\n\n/** 后台文案里残留的旧站名统一换成 SITE_NAME。 */\nconst LEGACY_SITE_NAMES = /91短剧|黄豆魔改短剧|黄豆短剧|熟果短剧/g;\n\nexport function brandText(value?: string | null) {\n return (value || \"\").trim().replace(LEGACY_SITE_NAMES, SITE_NAME);\n}\nexport const OG_DEFAULT_IMAGE = \"/og-default.png\";\n\nconst PLACEHOLDER_SEO = /^(网站标题|网站描述|网站名称|导航标题)$/;\n\nexport type SeoSource = {\n title?: string | null;\n webTitle?: string | null;\n description?: string | null;\n desc?: string | null;\n webDescription?: string | null;\n keywords?: string[] | string | null;\n keyword?: string[] | string | null;\n keyworld?: string[] | string | null;\n webKeyworld?: string[] | string | null;\n} | null | undefined;\n\nexport type NormalizedSEO = {\n title: string;\n description: string;\n keywords: string[];\n};\n\nfunction cleanText(value?: string | null) {\n const text = value?.replace(/\\s+/g, \" \").trim() || \"\";\n if (!text || PLACEHOLDER_SEO.test(text)) return \"\";\n return text;\n}\n\nfunction cleanKeywords(value?: string[] | string | null) {\n const source = Array.isArray(value) ? value : value?.split(/[,,]/) || [];\n const seen = new Set();\n const keywords: string[] = [];\n for (const item of source) {\n const text = cleanText(item);\n const key = text.toLowerCase();\n if (!text || seen.has(key)) continue;\n seen.add(key);\n keywords.push(text);\n }\n return keywords;\n}\n\nexport function isPlaceholderSeoText(value?: string | null) {\n return !cleanText(value);\n}\n\n/** 接口字段名不统一:SeoInfo.keywords,SeoValue.keyworld,配置里是 webKeyworld。 */\nexport function normalizeSEO(source: SeoSource, fallback: Partial = {}): NormalizedSEO {\n return {\n title: cleanText(source?.title) || cleanText(source?.webTitle) || cleanText(fallback.title) || SITE_NAME,\n description:\n cleanText(source?.description) ||\n cleanText(source?.desc) ||\n cleanText(source?.webDescription) ||\n cleanText(fallback.description) ||\n \"\",\n keywords:\n cleanKeywords(source?.keywords).length\n ? cleanKeywords(source?.keywords)\n : cleanKeywords(source?.keyword).length\n ? cleanKeywords(source?.keyword)\n : cleanKeywords(source?.keyworld).length\n ? cleanKeywords(source?.keyworld)\n : cleanKeywords(source?.webKeyworld).length\n ? cleanKeywords(source?.webKeyworld)\n : cleanKeywords(fallback.keywords),\n };\n}\n\nexport function withSiteSuffix(title: string, siteName = SITE_NAME) {\n const name = siteName.trim() || SITE_NAME;\n if (!title || title === name || title.includes(name)) return title || name;\n return `${title} - ${name}`;\n}\n\nexport function paginateSEO(seo: NormalizedSEO, page = 1, siteName = SITE_NAME): NormalizedSEO {\n if (!Number.isFinite(page) || page <= 1) return seo;\n const marker = `第${page}页`;\n return {\n title: seo.title.includes(marker) ? seo.title : `${seo.title} ${marker}`,\n description: seo.description ? `${seo.description} ${marker}` : seo.description,\n keywords: seo.keywords.includes(marker) ? seo.keywords : [...seo.keywords, marker],\n };\n}\n\nexport function resolveShareImage(image?: string | null) {\n const value = image?.trim();\n if (value && /^https?:\\/\\//i.test(value)) return value;\n return OG_DEFAULT_IMAGE;\n}\n\nexport function siteSEOFromConfig(config?: {\n webTitle?: string | null;\n webDescription?: string | null;\n webKeyworld?: string[] | null;\n} | null) {\n return normalizeSEO({\n title: config?.webTitle,\n description: config?.webDescription,\n keywords: config?.webKeyworld,\n });\n}\n\nexport type BuildMetadataOptions = {\n title: string;\n description?: string;\n keywords?: string[];\n canonical: string;\n image?: string | null;\n robots?: Metadata[\"robots\"];\n siteName?: string;\n ogType?: \"website\" | \"video.episode\" | \"video.other\";\n};\n\nexport function buildPageMetadata(options: BuildMetadataOptions): Metadata {\n const siteName = options.siteName?.trim() || SITE_NAME;\n // 标题直接用接口/页面 seoInfo,不再拼接「- 站点名」\n const title = options.title.trim() || siteName;\n const description = options.description?.trim() || undefined;\n const keywords = options.keywords?.filter(Boolean);\n const image = resolveShareImage(options.image);\n return {\n title,\n description,\n keywords: keywords?.length ? keywords.join(\",\") : undefined,\n robots: options.robots,\n alternates: { canonical: options.canonical },\n openGraph: {\n type: options.ogType === \"website\" || !options.ogType ? \"website\" : options.ogType,\n locale: \"zh_CN\",\n siteName,\n title,\n description,\n url: options.canonical,\n images: [{ url: image, alt: title }],\n },\n twitter: {\n card: \"summary_large_image\",\n title,\n description,\n images: [image],\n },\n };\n}\n"],"names":["SITE_NAME","LEGACY_SITE_NAMES","brandText","value","trim","replace","OG_DEFAULT_IMAGE","PLACEHOLDER_SEO","cleanText","text","test","cleanKeywords","source","Array","isArray","split","seen","Set","keywords","item","key","toLowerCase","has","add","push","isPlaceholderSeoText","normalizeSEO","fallback","title","webTitle","description","desc","webDescription","length","keyword","keyworld","webKeyworld","withSiteSuffix","siteName","name","includes","paginateSEO","seo","page","Number","isFinite","marker","resolveShareImage","image","siteSEOFromConfig","config","buildPageMetadata","options","undefined","filter","Boolean","join","robots","alternates","canonical","openGraph","type","ogType","locale","url","images","alt","twitter","card"],"mappings":"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"}}, + {"offset": {"line": 2569, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/seo/navigation-seo.ts"],"sourcesContent":["import { getTranslationCategoryList } from \"@/lib/api/translation\";\nimport type { SeoValue } from \"@/lib/api/types\";\nimport { translationHref } from \"@/lib/translation-nav\";\n\n/** 频道页面对应导航 categoryList 的 urlValue(含首页 /)。 */\nexport const NAVIGATION_SECTION_HREFS = [\"/\", \"/shorts\", \"/topics\", \"/rank\", \"/home-road\"] as const;\n\nexport type NavigationSectionHref = (typeof NAVIGATION_SECTION_HREFS)[number];\n\n/** 按导航 urlValue 取该频道的 seoInfo。没有匹配项时返回空,调用方继续用页面回退文案。 */\nexport async function navigationSectionSeo(href: NavigationSectionHref): Promise {\n const { data } = await getTranslationCategoryList();\n const match = data?.categoryList?.find((item) => translationHref(item.urlValue) === href);\n return match?.seoInfo;\n}\n"],"names":["NAVIGATION_SECTION_HREFS","navigationSectionSeo","href","data","match","categoryList","find","item","urlValue","seoInfo"],"mappings":";;;;;;AAAA;AAEA;;;AAGO,MAAMA,2BAA2B;IAAC;IAAK;IAAW;IAAW;IAAS;CAAa;AAKnF,eAAeC,qBAAqBC,IAA2B;IACpE,MAAM,EAAEC,IAAI,EAAE,GAAG,MAAM,IAAA,8JAA0B;IACjD,MAAMC,QAAQD,MAAME,cAAcC,KAAK,CAACC,OAAS,IAAA,mJAAe,EAACA,KAAKC,QAAQ,MAAMN;IACpF,OAAOE,OAAOK;AAChB"}}, + {"offset": {"line": 2595, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/seo/resolve.ts"],"sourcesContent":["import { cache } from \"react\";\nimport { getAppConfigInfo } from \"@/lib/api/app-config-server\";\nimport type { SeoInfo, SeoValue } from \"@/lib/api/types\";\nimport { buildPageMetadata, normalizeSEO, paginateSEO, SITE_NAME, type BuildMetadataOptions, type NormalizedSEO, type SeoSource } from \"./metadata\";\nimport { absoluteRequestUrl, getSiteName } from \"./site\";\n\nexport function mergeSEO(primary: SeoSource, fallback: Partial = {}): NormalizedSEO {\n const main = normalizeSEO(primary);\n const extra = normalizeSEO(null, fallback);\n return {\n title: main.title && main.title !== SITE_NAME ? main.title : extra.title || main.title,\n description: main.description || extra.description,\n keywords: main.keywords.length ? main.keywords : extra.keywords,\n };\n}\n\nexport function configToSiteSEO(config?: {\n webTitle?: string | null;\n webDescription?: string | null;\n webKeyworld?: string[] | null;\n} | null) {\n return normalizeSEO(\n {\n title: config?.webTitle,\n description: config?.webDescription,\n keywords: config?.webKeyworld,\n },\n { title: \"\" },\n );\n}\n\nexport function configSiteName(name?: string | null) {\n return getSiteName(name);\n}\n\n/** 站点级 TDK:页面 seo 为空时回退 /api/app/config/info。同一请求内只拉一次。 */\nexport const getSiteSEOCached = cache(async () => {\n const { data } = await getAppConfigInfo();\n const config = data?.config;\n return {\n seo: mergeSEO(data?.seoInfo, configToSiteSEO(config)),\n siteName: configSiteName(config?.webSiteName || data?.seoInfo?.webSiteName),\n foreverUrlAddr: config?.foreverUrlAddr?.trim() || \"\",\n };\n});\n\nexport type ResolvePageMetadataOptions = {\n seoInfo?: SeoInfo | SeoValue | null;\n fallbackTitle: string;\n fallbackDescription?: string;\n fallbackKeywords?: string[];\n canonical: string;\n page?: number;\n robots?: BuildMetadataOptions[\"robots\"];\n ogType?: BuildMetadataOptions[\"ogType\"];\n /** 详情页只用本页 seoInfo,不用全站关键词顶上内容标题。 */\n siteFallback?: boolean;\n};\n\nexport async function resolvePageMetadata(options: ResolvePageMetadataOptions) {\n const site = await getSiteSEOCached();\n const pageSEO = options.siteFallback === false\n ? normalizeSEO(options.seoInfo, {\n title: options.fallbackTitle,\n description: options.fallbackDescription,\n keywords: options.fallbackKeywords,\n })\n : mergeSEO(options.seoInfo, mergeSEO(\n {\n title: options.fallbackTitle,\n description: options.fallbackDescription,\n keywords: options.fallbackKeywords,\n },\n site.seo,\n ));\n const seo = paginateSEO(pageSEO, options.page, site.siteName);\n return buildPageMetadata({\n title: seo.title,\n description: seo.description,\n keywords: seo.keywords,\n canonical: await absoluteRequestUrl(options.canonical),\n robots: options.robots,\n siteName: site.siteName,\n ogType: options.ogType,\n });\n}\n\n/** 短剧详情 / 播放:标题和描述以本页为准,站点名仍取配置。 */\nexport function resolveContentMetadata(options: Omit) {\n return resolvePageMetadata({ ...options, siteFallback: false });\n}\n"],"names":["mergeSEO","primary","fallback","main","extra","title","description","keywords","length","configToSiteSEO","config","webTitle","webDescription","webKeyworld","configSiteName","name","getSiteSEOCached","data","seo","seoInfo","siteName","webSiteName","foreverUrlAddr","trim","resolvePageMetadata","options","site","pageSEO","siteFallback","fallbackTitle","fallbackDescription","fallbackKeywords","page","canonical","robots","ogType","resolveContentMetadata"],"mappings":";;;;;;;;;;;;;;AAAA;AACA;AAEA;AACA;;;;;AAEO,SAASA,SAASC,OAAkB,EAAEC,WAAmC,CAAC,CAAC;IAChF,MAAMC,OAAO,IAAA,6IAAY,EAACF;IAC1B,MAAMG,QAAQ,IAAA,6IAAY,EAAC,MAAMF;IACjC,OAAO;QACLG,OAAOF,KAAKE,KAAK,IAAIF,KAAKE,KAAK,KAAK,0IAAS,GAAGF,KAAKE,KAAK,GAAGD,MAAMC,KAAK,IAAIF,KAAKE,KAAK;QACtFC,aAAaH,KAAKG,WAAW,IAAIF,MAAME,WAAW;QAClDC,UAAUJ,KAAKI,QAAQ,CAACC,MAAM,GAAGL,KAAKI,QAAQ,GAAGH,MAAMG,QAAQ;IACjE;AACF;AAEO,SAASE,gBAAgBC,MAIxB;IACN,OAAO,IAAA,6IAAY,EACjB;QACEL,OAAOK,QAAQC;QACfL,aAAaI,QAAQE;QACrBL,UAAUG,QAAQG;IACpB,GACA;QAAER,OAAO;IAAG;AAEhB;AAEO,SAASS,eAAeC,IAAoB;IACjD,OAAO,IAAA,wIAAW,EAACA;AACrB;AAGO,MAAMC,mBAAmB,IAAA,8MAAK,EAAC;IACpC,MAAM,EAAEC,IAAI,EAAE,GAAG,MAAM,IAAA,gKAAgB;IACvC,MAAMP,SAASO,MAAMP;IACrB,OAAO;QACLQ,KAAKlB,SAASiB,MAAME,SAASV,gBAAgBC;QAC7CU,UAAUN,eAAeJ,QAAQW,eAAeJ,MAAME,SAASE;QAC/DC,gBAAgBZ,QAAQY,gBAAgBC,UAAU;IACpD;AACF;AAeO,eAAeC,oBAAoBC,OAAmC;IAC3E,MAAMC,OAAO,MAAMV;IACnB,MAAMW,UAAUF,QAAQG,YAAY,KAAK,QACrC,IAAA,6IAAY,EAACH,QAAQN,OAAO,EAAE;QAC5Bd,OAAOoB,QAAQI,aAAa;QAC5BvB,aAAamB,QAAQK,mBAAmB;QACxCvB,UAAUkB,QAAQM,gBAAgB;IACpC,KACA/B,SAASyB,QAAQN,OAAO,EAAEnB,SACxB;QACEK,OAAOoB,QAAQI,aAAa;QAC5BvB,aAAamB,QAAQK,mBAAmB;QACxCvB,UAAUkB,QAAQM,gBAAgB;IACpC,GACAL,KAAKR,GAAG;IAEd,MAAMA,MAAM,IAAA,4IAAW,EAACS,SAASF,QAAQO,IAAI,EAAEN,KAAKN,QAAQ;IAC5D,OAAO,IAAA,kJAAiB,EAAC;QACvBf,OAAOa,IAAIb,KAAK;QAChBC,aAAaY,IAAIZ,WAAW;QAC5BC,UAAUW,IAAIX,QAAQ;QACtB0B,WAAW,MAAM,IAAA,+IAAkB,EAACR,QAAQQ,SAAS;QACrDC,QAAQT,QAAQS,MAAM;QACtBd,UAAUM,KAAKN,QAAQ;QACvBe,QAAQV,QAAQU,MAAM;IACxB;AACF;AAGO,SAASC,uBAAuBX,OAAyD;IAC9F,OAAOD,oBAAoB;QAAE,GAAGC,OAAO;QAAEG,cAAc;IAAM;AAC/D"}}, + {"offset": {"line": 2679, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/seo/site.ts"],"sourcesContent":["import { headers } from \"next/headers\";\nimport { SITE_NAME } from \"./metadata\";\n\n/** 站点对外 origin,用于 canonical、OG、sitemap。 */\nexport function getSiteOrigin() {\n const configured = process.env.NEXT_PUBLIC_SITE_URL?.trim().replace(/\\/$/, \"\");\n if (configured) return configured;\n return \"http://localhost:26149\";\n}\n\nexport function getSiteName(name?: string | null) {\n const value = name?.trim();\n return value || SITE_NAME;\n}\n\n/**\n * 当前请求的 origin。\n * 已配置 NEXT_PUBLIC_SITE_URL 时优先用正式域名(canonical / OG 不跟反代内部 Host)。\n * 未配置时再回退请求 Host,本地开发可用。\n */\nexport async function getRequestOrigin() {\n const configured = getSiteOrigin();\n if (process.env.NEXT_PUBLIC_SITE_URL?.trim()) return configured;\n if (process.env.NEXT_PHASE === \"phase-production-build\") return configured;\n try {\n const headerList = await headers();\n const host = headerList.get(\"x-forwarded-host\") || headerList.get(\"host\");\n if (!host) return configured;\n const forwarded = headerList.get(\"x-forwarded-proto\");\n const proto = forwarded || (host.startsWith(\"localhost\") || host.startsWith(\"127.0.0.1\") ? \"http\" : \"https\");\n return `${proto}://${host.split(\",\")[0].trim()}`;\n } catch {\n return configured;\n }\n}\n\nexport function absoluteUrl(path = \"/\", origin = getSiteOrigin()) {\n if (/^https?:\\/\\//i.test(path)) return path;\n const base = origin.replace(/\\/$/, \"\");\n if (!path || path === \"/\") return `${base}/`;\n return `${base}${path.startsWith(\"/\") ? path : `/${path}`}`;\n}\n\n/** canonical / 分享链接:始终用正式站点域,避免反代内部域名污染。 */\nexport async function absoluteRequestUrl(path = \"/\") {\n return absoluteUrl(path, getSiteOrigin());\n}\n"],"names":["getSiteOrigin","configured","trim","replace","getSiteName","name","value","getRequestOrigin","process","env","NEXT_PHASE","headerList","host","get","forwarded","proto","startsWith","split","absoluteUrl","path","origin","test","base","absoluteRequestUrl"],"mappings":";;;;;;;;;;;;AAAA;AACA;;;AAGO,SAASA;IACd,MAAMC,yEAA+CC,OAAOC,QAAQ,OAAO;IAC3E,IAAIF,YAAY,OAAOA;IACvB,OAAO;AACT;AAEO,SAASG,YAAYC,IAAoB;IAC9C,MAAMC,QAAQD,MAAMH;IACpB,OAAOI,SAAS,0IAAS;AAC3B;AAOO,eAAeC;IACpB,MAAMN,aAAaD;IACnB,gEAAsCE,QAAQ,OAAOD;IACrD,IAAIO,QAAQC,GAAG,CAACC,UAAU,KAAK,0BAA0B,OAAOT;IAChE,IAAI;QACF,MAAMU,aAAa,MAAM,IAAA,0IAAO;QAChC,MAAMC,OAAOD,WAAWE,GAAG,CAAC,uBAAuBF,WAAWE,GAAG,CAAC;QAClE,IAAI,CAACD,MAAM,OAAOX;QAClB,MAAMa,YAAYH,WAAWE,GAAG,CAAC;QACjC,MAAME,QAAQD,aAAa,CAACF,KAAKI,UAAU,CAAC,gBAAgBJ,KAAKI,UAAU,CAAC,eAAe,SAAS,OAAO;QAC3G,OAAO,GAAGD,MAAM,GAAG,EAAEH,KAAKK,KAAK,CAAC,IAAI,CAAC,EAAE,CAACf,IAAI,IAAI;IAClD,EAAE,OAAM;QACN,OAAOD;IACT;AACF;AAEO,SAASiB,YAAYC,OAAO,GAAG,EAAEC,SAASpB,eAAe;IAC9D,IAAI,gBAAgBqB,IAAI,CAACF,OAAO,OAAOA;IACvC,MAAMG,OAAOF,OAAOjB,OAAO,CAAC,OAAO;IACnC,IAAI,CAACgB,QAAQA,SAAS,KAAK,OAAO,GAAGG,KAAK,CAAC,CAAC;IAC5C,OAAO,GAAGA,OAAOH,KAAKH,UAAU,CAAC,OAAOG,OAAO,CAAC,CAAC,EAAEA,MAAM,EAAE;AAC7D;AAGO,eAAeI,mBAAmBJ,OAAO,GAAG;IACjD,OAAOD,YAAYC,MAAMnB;AAC3B"}}, + {"offset": {"line": 2732, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/site/routes.ts"],"sourcesContent":["export const routes = {\n home: \"/\",\n shorts: \"/shorts\",\n series: \"/series\",\n topics: \"/topics\",\n rank: \"/rank\",\n homeRoad: \"/home-road\",\n nav: \"/nav\",\n search: \"/search\",\n searchPath: (term: string, page = 1) => {\n const q = term.trim();\n if (!q) return \"/search\";\n const base = `/search/${encodeURIComponent(q)}`;\n return page > 1 ? `${base}/${page}` : base;\n },\n more: (key: string) => `/shorts/more/${key}`,\n topic: (key: string) => `/topics/${key}`,\n drama: (id: number | string) => `/drama/${encodeURIComponent(String(id))}`,\n play: (id: number | string, episode = 1) => `/play/${encodeURIComponent(String(id))}/${episode}`,\n info: (slug: string) => `/info/${slug}`,\n} as const;\n\nexport const primaryNav = [\n { page: \"home\", href: routes.home, label: \"首页\" },\n { page: \"shorts\", href: routes.shorts, label: \"短剧\" },\n { page: \"series\", href: routes.series, label: \"剧集\" },\n { page: \"topics\", href: routes.topics, label: \"专题\" },\n { page: \"rank\", href: routes.rank, label: \"热榜\" },\n { page: \"home-road\", href: routes.homeRoad, label: \"回家的路\" },\n] as const;\n\nexport const infoNav = [\n { slug: \"about-us\", label: \"关于我们\" },\n { slug: \"user-agreement\", label: \"用户协议\" },\n { slug: \"privacy-policy\", label: \"隐私政策\" },\n { slug: \"help-center\", label: \"常见问题\" },\n { slug: \"2257\", label: \"2257\" },\n { slug: \"dmca\", label: \"DMCA\" },\n] as const;\n\nexport function isPrimaryNavActive(page: string, pathname: string) {\n if (pathname.startsWith(\"/info\")) return false;\n if (page === \"home\") return pathname === \"/\";\n if (page === \"shorts\") {\n if (pathname.startsWith(\"/shorts/more/\")) return false;\n return pathname === \"/shorts\" || pathname.startsWith(\"/shorts/\");\n }\n if (page === \"series\") return pathname === \"/series\" || pathname.startsWith(\"/series/\");\n if (page === \"rank\") return pathname === \"/rank\" || pathname.startsWith(\"/rank/\");\n if (page === \"home-road\") return pathname === \"/home-road\";\n if (page === \"topics\") return pathname === \"/topics\" || pathname.startsWith(\"/topics/\");\n return false;\n}\n\nexport function isHeaderNavActive(page: string, pathname: string) {\n if (pathname.startsWith(\"/info\")) return false;\n if (page === \"home\") return pathname === \"/\";\n if (page === \"shorts\") {\n if (pathname.startsWith(\"/shorts/more/\")) return false;\n return (\n pathname === \"/shorts\" ||\n pathname.startsWith(\"/shorts/\") ||\n pathname.startsWith(\"/drama/\") ||\n pathname.startsWith(\"/play/\") ||\n pathname === \"/search\" ||\n pathname.startsWith(\"/search/\")\n );\n }\n if (page === \"series\") return pathname === \"/series\" || pathname.startsWith(\"/series/\");\n if (page === \"rank\") return pathname === \"/rank\" || pathname.startsWith(\"/rank/\");\n if (page === \"home-road\") return pathname === \"/home-road\";\n if (page === \"topics\") return pathname === \"/topics\" || pathname.startsWith(\"/topics/\");\n return false;\n}\n"],"names":["routes","home","shorts","series","topics","rank","homeRoad","nav","search","searchPath","term","page","q","trim","base","encodeURIComponent","more","key","topic","drama","id","String","play","episode","info","slug","primaryNav","href","label","infoNav","isPrimaryNavActive","pathname","startsWith","isHeaderNavActive"],"mappings":"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"}}, + {"offset": {"line": 2853, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/site/social-links.ts"],"sourcesContent":["import { BUSINESS_CONTACT } from \"@/lib/contact\";\n\nexport type SocialLink = {\n href: string;\n label: string;\n icon: string;\n};\n\n/** 只保留商务联系方式(Telegram),忽略后台配置的社群 / Telegram / X / 邮箱。 */\nexport function businessContactLinks(): SocialLink[] {\n return [\n {\n href: BUSINESS_CONTACT.href,\n label: `${BUSINESS_CONTACT.label} ${BUSINESS_CONTACT.handle}`,\n icon: \"social-telegram.svg\",\n },\n ];\n}\n"],"names":["businessContactLinks","href","label","handle","icon"],"mappings":";;;;AAAA;;AASO,SAASA;IACd,OAAO;QACL;YACEC,MAAM,yIAAgB,CAACA,IAAI;YAC3BC,OAAO,GAAG,yIAAgB,CAACA,KAAK,CAAC,CAAC,EAAE,yIAAgB,CAACC,MAAM,EAAE;YAC7DC,MAAM;QACR;KACD;AACH"}}, + {"offset": {"line": 2872, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/translation-nav.ts"],"sourcesContent":["import type { TranslationCategory } from \"@/lib/api/types\";\n\nconst NAV_PAGE_BY_HREF = {\n \"/\": \"home\",\n \"/shorts\": \"shorts\",\n \"/series\": \"series\",\n \"/topics\": \"topics\",\n \"/rank\": \"rank\",\n \"/home-road\": \"home-road\",\n} as const;\n\n/** 已知站内路径对应侧栏图标和 data-page。接口路径对不上时不强制图标。 */\nexport function navPageForHref(href: string) {\n return NAV_PAGE_BY_HREF[href as keyof typeof NAV_PAGE_BY_HREF];\n}\n\n/** 空 urlValue 表示首页。外链原样保留。 */\nexport function translationHref(urlValue: string | undefined) {\n const raw = (urlValue || \"\").trim();\n if (!raw || raw === \"/\") return \"/\";\n return raw;\n}\n\nexport function isExternalHref(href: string) {\n return /^https?:\\/\\//i.test(href);\n}\n\n/** 顶栏当前项。详情、播放、更多列表和搜索页不点亮频道。 */\nexport function isTranslationCurrent(pathname: string, urlValue: string | undefined) {\n const href = translationHref(urlValue);\n if (\n pathname.startsWith(\"/shorts/more\") ||\n pathname.startsWith(\"/topics/tag\") ||\n pathname.startsWith(\"/drama\") ||\n pathname.startsWith(\"/play\") ||\n pathname.startsWith(\"/short-drama\") ||\n pathname.startsWith(\"/info\") ||\n pathname.startsWith(\"/search\")\n ) {\n return false;\n }\n if (href === \"/\") return pathname === \"/\";\n return pathname === href || pathname.startsWith(`${href}/`);\n}\n\n/** 已下线的站内页面,接口仍返回时不在导航里展示。 */\nconst REMOVED_HREFS = new Set([\"/apps\"]);\n\n/** 主导航只用接口 categoryList,不回退本地写死菜单。 */\nexport function usableTranslationCategories(list: TranslationCategory[] | undefined) {\n return (list || []).filter((item) => item?.name?.trim() && !REMOVED_HREFS.has(translationHref(item.urlValue)));\n}\n"],"names":["NAV_PAGE_BY_HREF","navPageForHref","href","translationHref","urlValue","raw","trim","isExternalHref","test","isTranslationCurrent","pathname","startsWith","REMOVED_HREFS","Set","usableTranslationCategories","list","filter","item","name","has"],"mappings":";;;;;;;;;;;;AAEA,MAAMA,mBAAmB;IACvB,KAAK;IACL,WAAW;IACX,WAAW;IACX,WAAW;IACX,SAAS;IACT,cAAc;AAChB;AAGO,SAASC,eAAeC,IAAY;IACzC,OAAOF,gBAAgB,CAACE,KAAsC;AAChE;AAGO,SAASC,gBAAgBC,QAA4B;IAC1D,MAAMC,MAAM,CAACD,YAAY,EAAE,EAAEE,IAAI;IACjC,IAAI,CAACD,OAAOA,QAAQ,KAAK,OAAO;IAChC,OAAOA;AACT;AAEO,SAASE,eAAeL,IAAY;IACzC,OAAO,gBAAgBM,IAAI,CAACN;AAC9B;AAGO,SAASO,qBAAqBC,QAAgB,EAAEN,QAA4B;IACjF,MAAMF,OAAOC,gBAAgBC;IAC7B,IACEM,SAASC,UAAU,CAAC,mBACpBD,SAASC,UAAU,CAAC,kBACpBD,SAASC,UAAU,CAAC,aACpBD,SAASC,UAAU,CAAC,YACpBD,SAASC,UAAU,CAAC,mBACpBD,SAASC,UAAU,CAAC,YACpBD,SAASC,UAAU,CAAC,YACpB;QACA,OAAO;IACT;IACA,IAAIT,SAAS,KAAK,OAAOQ,aAAa;IACtC,OAAOA,aAAaR,QAAQQ,SAASC,UAAU,CAAC,GAAGT,KAAK,CAAC,CAAC;AAC5D;AAEA,4BAA4B,GAC5B,MAAMU,gBAAgB,IAAIC,IAAI;IAAC;CAAQ;AAGhC,SAASC,4BAA4BC,IAAuC;IACjF,OAAO,CAACA,QAAQ,EAAE,EAAEC,MAAM,CAAC,CAACC,OAASA,MAAMC,MAAMZ,UAAU,CAACM,cAAcO,GAAG,CAAChB,gBAAgBc,KAAKb,QAAQ;AAC7G"}}] +} \ No newline at end of file diff --git a/.next-dev/dev/server/chunks/ssr/[root-of-the-server]__1trcdg5d06d62._.js b/.next-dev/dev/server/chunks/ssr/[root-of-the-server]__1trcdg5d06d62._.js new file mode 100644 index 0000000..9a74580 --- /dev/null +++ b/.next-dev/dev/server/chunks/ssr/[root-of-the-server]__1trcdg5d06d62._.js @@ -0,0 +1,3525 @@ +module.exports = [ +(()=>{"use strict";return[ +"[project]/src/app/play/[id]/[episode]/page.tsx [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "__debugCreateInstantConfigStack", + ()=>__debugCreateInstantConfigStack, + "default", + ()=>EpisodePage, + "generateMetadata", + ()=>generateMetadata, + "instant", + ()=>instant +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/server.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$api$2f$navigation$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/api/navigation.react-server.js [app-rsc] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$navigation$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/client/components/navigation.react-server.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$ListLoading$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/common/ListLoading.tsx [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$site$2f$json$2d$ld$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/site/json-ld.tsx [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$play$2d$page$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/play/play-page.tsx [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$app$2d$config$2d$server$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/app-config-server.ts [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2d$server$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/playlet-server.ts [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/playlet-display.ts [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$seo$2f$index$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/lib/seo/index.ts [app-rsc] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$seo$2f$jsonld$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/seo/jsonld.ts [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$seo$2f$resolve$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/seo/resolve.ts [app-rsc] (ecmascript)"); +; +; +; +; +; +; +; +; +; +; +; +const instant = false; +async function generateMetadata({ params }) { + const { id, episode } = await params; + const key = decodeURIComponent(id).trim(); + const { data } = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2d$server$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getPlayletDetail"])({ + key + }); + if (!data?.id) (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$navigation$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["notFound"])(); + const name = data.title || data.playName || "短剧"; + const current = Number(episode); + const episodeNo = Number.isInteger(current) && current > 0 ? current : 1; + const summary = data.playletChapterInfo?.find((item)=>item.currentEpisode === episodeNo); + if (!summary) (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$navigation$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["notFound"])(); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$seo$2f$resolve$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["resolveContentMetadata"])({ + seoInfo: data?.seoInfo ? { + description: data.seoInfo.description, + keywords: data.seoInfo.keywords + } : undefined, + fallbackTitle: `${name} 第${episodeNo}集`, + fallbackDescription: data?.desc || data?.description || `正在播放《${name}》第${episodeNo}集`, + canonical: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["playletPlayHref"])(data ?? { + id: 0, + slug: key + }, episodeNo), + ogType: "video.episode" + }); +} +function EpisodePage({ params }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["Suspense"], { + fallback: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$ListLoading$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["ListLoading"], { + label: "正在加载短剧" + }, void 0, false, { + fileName: "[project]/src/app/play/[id]/[episode]/page.tsx", + lineNumber: 39, + columnNumber: 25 + }, this), + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(EpisodeContent, { + params: params + }, void 0, false, { + fileName: "[project]/src/app/play/[id]/[episode]/page.tsx", + lineNumber: 40, + columnNumber: 7 + }, this) + }, void 0, false, { + fileName: "[project]/src/app/play/[id]/[episode]/page.tsx", + lineNumber: 39, + columnNumber: 5 + }, this); +} +async function EpisodeContent({ params }) { + await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["connection"])(); + const { id, episode } = await params; + const key = decodeURIComponent(id).trim(); + const current = Number(episode); + if (!Number.isInteger(current) || current < 1) (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$navigation$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["notFound"])(); + const { data } = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2d$server$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getPlayletDetail"])({ + key + }); + if (!data?.id) (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$navigation$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["notFound"])(); + const total = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["resolvePlayletEpisodeTotal"])(data); + const chapters = data.playletChapterInfo || []; + const summary = chapters.find((item)=>item.currentEpisode === current); + if (!summary) { + // 超出声明总集数时落到列表中真实存在的最后一集;否则真 404,避免软 404。 + if (current > total && chapters.length) { + const last = chapters.reduce((a, b)=>a.currentEpisode >= b.currentEpisode ? a : b); + if (last.currentEpisode !== current) (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$navigation$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["redirect"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["playletPlayHref"])(data, last.currentEpisode)); + } + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$components$2f$navigation$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["notFound"])(); + } + const chapter = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2d$server$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getPlayletChapterDetail"])({ + chapterId: summary.id, + playletSlug: data.slug?.trim() || undefined, + playletId: data.id + }); + const [recommend, config] = await Promise.all([ + (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2d$server$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getPlayletGuessLike"])({ + playletId: data.id + }), + (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$app$2d$config$2d$server$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getAppConfigInfo"])() + ]); + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["Fragment"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$site$2f$json$2d$ld$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["JsonLd"], { + data: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$seo$2f$jsonld$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["buildPlayletPlayJSONLD"])({ + path: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["playletHref"])(data), + playPath: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["playletPlayHref"])(data, current), + episode: current, + title: data.title || data.playName, + description: data.desc || data.description, + cover: data.cover, + seoInfo: data.seoInfo, + totalEpisode: data.totalEpisode, + tagNames: data.tagNames, + themeNames: data.themeNames, + onlineAt: data.onlineAt, + videoUrl: chapter.data?.videoUrl + }) + }, void 0, false, { + fileName: "[project]/src/app/play/[id]/[episode]/page.tsx", + lineNumber: 75, + columnNumber: 7 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$play$2d$page$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["PlayPage"], { + detail: data, + recommend: recommend, + episode: current, + chapter: chapter.data, + chapterError: chapter.error, + ads: config.data?.advitise + }, void 0, false, { + fileName: "[project]/src/app/play/[id]/[episode]/page.tsx", + lineNumber: 91, + columnNumber: 7 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/app/play/[id]/[episode]/page.tsx", + lineNumber: 74, + columnNumber: 5 + }, this); +} +const __debugCreateInstantConfigStack = process.env.NODE_ENV !== 'production' ? function instant() { + const error = new Error(' '); + error.name = 'Instant Validation'; + return error; +} : null; +}), +"[project]/src/components/common/promo-marquee.tsx [app-rsc] (client reference proxy)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "PromoMarquee", + ()=>PromoMarquee +]); +// This file is generated by next-core EcmascriptClientReferenceModule. +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-server.js [app-rsc] (ecmascript)"); +; +const PromoMarquee = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["registerClientReference"])(function() { + throw new Error("Attempted to call PromoMarquee() from the server but PromoMarquee is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); +}, "[project]/src/components/common/promo-marquee.tsx", "PromoMarquee"); +}), +"[project]/src/components/common/promo-marquee.tsx [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$promo$2d$marquee$2e$tsx__$5b$app$2d$rsc$5d$__$28$client__reference__proxy$29$__ = __turbopack_context__.i("[project]/src/components/common/promo-marquee.tsx [app-rsc] (client reference proxy)"); +; +__turbopack_context__.n(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$promo$2d$marquee$2e$tsx__$5b$app$2d$rsc$5d$__$28$client__reference__proxy$29$__); +}), +"[project]/src/components/common/wide-ad-row.tsx [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "WideAdRow", + ()=>WideAdRow, + "defaultWideAds", + ()=>defaultWideAds +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/client/app-dir/link.react-server.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$decrypted$2d$image$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/common/decrypted-image.tsx [app-rsc] (ecmascript)"); +; +; +; +const defaultWideAds = [ + { + src: "/images/banners/0.png", + alt: "推广广告 1" + }, + { + src: "/images/banners/1.png", + alt: "推广广告 2" + } +]; +function httpAdUrl(link) { + const value = link?.trim(); + if (!value) return ""; + try { + const url = new URL(value); + if (url.protocol === "http:" || url.protocol === "https:") return url.toString(); + } catch { + return ""; + } + return ""; +} +function WideAdRow({ items = defaultWideAds, ads, label = "推广广告", className }) { + const rootClass = className ? `wide-ad-row ${className}` : "wide-ad-row"; + if (ads) { + const seen = new Set(); + const visible = ads.filter((item)=>{ + const src = item.images?.trim(); + if (!src || seen.has(src)) return false; + seen.add(src); + return true; + }).slice(0, 2); + if (!visible.length) return null; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("section", { + className: rootClass, + "aria-label": label, + children: visible.map((item, index)=>{ + const href = httpAdUrl(item.link); + const image = /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$decrypted$2d$image$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["DecryptedImage"], { + src: item.images, + alt: item.title || `推广广告 ${index + 1}`, + width: 840, + height: 97 + }, void 0, false, { + fileName: "[project]/src/components/common/wide-ad-row.tsx", + lineNumber: 58, + columnNumber: 25 + }, this); + if (!href) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("figure", { + className: "wide-ad", + children: image + }, item.id || item.images, false, { + fileName: "[project]/src/components/common/wide-ad-row.tsx", + lineNumber: 61, + columnNumber: 15 + }, this); + } + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("a", { + className: "wide-ad", + href: href, + target: "_blank", + rel: "noopener noreferrer", + children: image + }, item.id || item.images, false, { + fileName: "[project]/src/components/common/wide-ad-row.tsx", + lineNumber: 67, + columnNumber: 13 + }, this); + }) + }, void 0, false, { + fileName: "[project]/src/components/common/wide-ad-row.tsx", + lineNumber: 55, + columnNumber: 7 + }, this); + } + if (!items.length) return null; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("section", { + className: rootClass, + "aria-label": label, + children: items.map((item, index)=>{ + const image = /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("img", { + src: item.src, + alt: item.alt ?? `推广广告 ${index + 1}`, + width: item.width ?? 840, + height: item.height ?? 97 + }, void 0, false, { + fileName: "[project]/src/components/common/wide-ad-row.tsx", + lineNumber: 81, + columnNumber: 11 + }, this); + if (item.href) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["default"], { + className: "wide-ad", + href: item.href, + children: image + }, `${item.src}-${index}`, false, { + fileName: "[project]/src/components/common/wide-ad-row.tsx", + lineNumber: 90, + columnNumber: 13 + }, this); + } + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("figure", { + className: "wide-ad", + children: image + }, `${item.src}-${index}`, false, { + fileName: "[project]/src/components/common/wide-ad-row.tsx", + lineNumber: 96, + columnNumber: 11 + }, this); + }) + }, void 0, false, { + fileName: "[project]/src/components/common/wide-ad-row.tsx", + lineNumber: 78, + columnNumber: 5 + }, this); +} +}), +"[project]/src/components/drama/breadcrumb.tsx [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "Breadcrumb", + ()=>Breadcrumb +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/client/app-dir/link.react-server.js [app-rsc] (ecmascript)"); +; +; +function Breadcrumb({ items }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("nav", { + className: "page-breadcrumb", + "aria-label": "面包屑导航", + children: items.map((item, index)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + style: { + display: "contents" + }, + children: [ + index > 0 ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "breadcrumb-separator", + "aria-hidden": "true", + children: "/" + }, void 0, false, { + fileName: "[project]/src/components/drama/breadcrumb.tsx", + lineNumber: 11, + columnNumber: 13 + }, this) : null, + item.href ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["default"], { + href: item.href, + children: item.label + }, void 0, false, { + fileName: "[project]/src/components/drama/breadcrumb.tsx", + lineNumber: 15, + columnNumber: 24 + }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + "aria-current": "page", + children: item.label + }, void 0, false, { + fileName: "[project]/src/components/drama/breadcrumb.tsx", + lineNumber: 15, + columnNumber: 69 + }, this) + ] + }, `${item.label}-${index}`, true, { + fileName: "[project]/src/components/drama/breadcrumb.tsx", + lineNumber: 9, + columnNumber: 9 + }, this)) + }, void 0, false, { + fileName: "[project]/src/components/drama/breadcrumb.tsx", + lineNumber: 7, + columnNumber: 5 + }, this); +} +}), +"[project]/src/components/drama/card-tags.tsx [app-rsc] (client reference proxy)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "CardTags", + ()=>CardTags +]); +// This file is generated by next-core EcmascriptClientReferenceModule. +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-server.js [app-rsc] (ecmascript)"); +; +const CardTags = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["registerClientReference"])(function() { + throw new Error("Attempted to call CardTags() from the server but CardTags is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); +}, "[project]/src/components/drama/card-tags.tsx", "CardTags"); +}), +"[project]/src/components/drama/card-tags.tsx [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$card$2d$tags$2e$tsx__$5b$app$2d$rsc$5d$__$28$client__reference__proxy$29$__ = __turbopack_context__.i("[project]/src/components/drama/card-tags.tsx [app-rsc] (client reference proxy)"); +; +__turbopack_context__.n(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$card$2d$tags$2e$tsx__$5b$app$2d$rsc$5d$__$28$client__reference__proxy$29$__); +}), +"[project]/src/components/drama/drama-badge.tsx [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "DramaBadge", + ()=>DramaBadge +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js [app-rsc] (ecmascript)"); +; +function DramaBadge({ badge, badgeType, drama, variant = "corner", className }) { + const label = badge ?? drama?.badge; + const type = badgeType ?? drama?.badgeType; + if (!label || !type) return null; + const base = variant === "series" ? "series-badge" : "cover-corner-badge"; + const classes = className ? `${base} ${base}--${type} ${className}` : `${base} ${base}--${type}`; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: classes, + children: label + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-badge.tsx", + lineNumber: 28, + columnNumber: 10 + }, this); +} +}), +"[project]/src/components/drama/drama-card.tsx [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "DramaCard", + ()=>DramaCard, + "isSingleVideo", + ()=>isSingleVideo +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/client/app-dir/link.react-server.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$card$2d$tags$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/drama/card-tags.tsx [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$drama$2d$badge$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/drama/drama-badge.tsx [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$poster$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/drama/poster.tsx [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$site$2f$routes$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/site/routes.ts [app-rsc] (ecmascript)"); +; +; +; +; +; +; +function heatLabel(drama) { + return drama.heatText || `${drama.heat}万`; +} +function overlays(drama) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["Fragment"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$drama$2d$badge$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["DramaBadge"], { + drama: drama + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 31, + columnNumber: 7 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "cover-genre-pill", + children: drama.genre + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 32, + columnNumber: 7 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "drama-episodes", + children: [ + drama.eps, + "集" + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 33, + columnNumber: 7 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 30, + columnNumber: 5 + }, this); +} +function tags(drama) { + return (drama.tagLinks || []).length ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$card$2d$tags$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["CardTags"], { + tags: (drama.tagLinks || []).slice(0, 2) + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 40, + columnNumber: 5 + }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "drama-tags", + children: drama.tags.slice(0, 2).map((tag)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: [ + "#", + tag.replace(/^#/, "") + ] + }, tag, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 44, + columnNumber: 9 + }, this)) + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 42, + columnNumber: 5 + }, this); +} +function meta(drama) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "drama-meta", + children: [ + tags(drama), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "drama-heat", + "aria-label": `热度 ${heatLabel(drama)}`, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("svg", { + className: "drama-heart-icon", + viewBox: "0 0 24 24", + "aria-hidden": "true", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("path", { + d: "M12 21s-9-5.7-9-12a5 5 0 0 1 9-3 5 5 0 0 1 9 3c0 6.3-9 12-9 12Z" + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 56, + columnNumber: 11 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 55, + columnNumber: 9 + }, this), + heatLabel(drama) + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 54, + columnNumber: 7 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 52, + columnNumber: 5 + }, this); +} +function HeatIcon() { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("svg", { + className: "tk-heat-icon", + viewBox: "0 0 24 24", + "aria-hidden": "true", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("path", { + d: "M5 20V12M12 20V5M19 20v-9" + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 67, + columnNumber: 7 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 66, + columnNumber: 5 + }, this); +} +function isSingleVideo(drama) { + return (Number(drama.eps) || 0) <= 1; +} +function rankMedal(listRank) { + if (listRank < 1 || listRank > 3) return null; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "ranking-top-badge", + "data-rank": listRank, + "aria-hidden": "true", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("small", { + children: "TOP" + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 81, + columnNumber: 7 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("strong", { + children: String(listRank).padStart(2, "0") + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 82, + columnNumber: 7 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 80, + columnNumber: 5 + }, this); +} +function DramaCard({ drama, title, rank, listRank, ribbon, variant = "card" }) { + const href = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$site$2f$routes$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["routes"].drama(drama.routeKey || drama.id); + const poster = /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$poster$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["Poster"], { + src: drama.coverUrl, + width: 640, + height: 914 + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 90, + columnNumber: 5 + }, this); + const heading = title ?? drama.title; + if (variant === "curated") { + const desc = drama.desc?.trim() || ""; + const genre = drama.genre?.trim() || ""; + const pickLabel = genre ? `${genre}精选` : "精选"; + // 黄果版「猜你喜欢」:模糊海报氛围底 + 行内精选标签 + 底部操作栏,样式见 styles/pick-card.css + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["default"], { + className: "hg-pick-card", + href: href, + "data-open": drama.id, + "data-ribbon": ribbon || "orange", + "aria-label": `观看${drama.title}`, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "hg-pick-backdrop", + "aria-hidden": "true", + children: poster + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 106, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "hg-pick-poster media portrait", + children: [ + poster, + overlays(drama) + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 109, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "hg-pick-body", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "hg-pick-top", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "hg-pick-chip", + children: pickLabel + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 115, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "hg-pick-heat", + "aria-label": `热度 ${heatLabel(drama)}`, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(HeatIcon, {}, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 117, + columnNumber: 15 + }, this), + heatLabel(drama) + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 116, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 114, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", { + className: "hg-pick-title", + children: heading + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 121, + columnNumber: 11 + }, this), + desc ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "hg-pick-desc", + children: desc + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 122, + columnNumber: 19 + }, this) : null, + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "hg-pick-foot", + children: [ + tags(drama), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "hg-pick-play", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("svg", { + viewBox: "0 0 24 24", + "aria-hidden": "true", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("path", { + d: "M8 5.5v13l10.5-6.5Z" + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 127, + columnNumber: 17 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 126, + columnNumber: 15 + }, this), + "立即观看" + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 125, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 123, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 113, + columnNumber: 9 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 99, + columnNumber: 7 + }, this); + } + if (variant === "ranked" || rank !== undefined) { + const place = (rank ?? 0) + 1; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["default"], { + className: "ranked-card drama-data-card", + href: href, + "aria-label": `观看${drama.title}`, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "media portrait", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "ranking-poster-frame", + children: poster + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 142, + columnNumber: 11 + }, this), + overlays(drama), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "rank-home-badge", + "data-rank": place, + "aria-hidden": "true", + children: place + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 146, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 141, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "rank-caption", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", { + children: heading + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 152, + columnNumber: 13 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 151, + columnNumber: 11 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 150, + columnNumber: 9 + }, this), + meta(drama) + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 140, + columnNumber: 7 + }, this); + } + const video = isSingleVideo(drama); + const total = Math.max(1, Number(drama.eps) || 1); + const allTags = drama.tagLinks || []; + const firstTag = allTags.find((tag)=>tag.kind !== "theme") || allTags[0]; + const genre = drama.genre?.trim() || ""; + const segments = Math.min(total, 12); + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["default"], { + className: `card tk-card ${video ? "tk-card--video" : "tk-card--series"}`, + href: href, + "aria-label": video ? `观看视频:${drama.title}` : `查看短剧:${drama.title},共${total}集`, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "tk-cover", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$poster$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["Poster"], { + className: "tk-img", + src: drama.coverUrl, + width: 640, + height: 800 + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 173, + columnNumber: 9 + }, this), + drama.badge && drama.badgeType ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: `tk-ribbon tk-ribbon--${drama.badgeType}`, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: drama.badge + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 176, + columnNumber: 13 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 175, + columnNumber: 11 + }, this) : null, + video ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "tk-chip", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + "aria-hidden": "true", + children: "▶" + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 181, + columnNumber: 13 + }, this), + " 单集" + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 180, + columnNumber: 11 + }, this) : null, + listRank ? rankMedal(listRank) : null, + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "tk-shade", + children: [ + video ? null : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "tk-count", + children: drama.finished ? `共${total}集` : `更至${total}集` + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 186, + columnNumber: 27 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", { + className: "tk-title", + children: heading + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 187, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "tk-cta", + "aria-hidden": "true", + children: "立即播放 →" + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 188, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 185, + columnNumber: 9 + }, this), + video ? null : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "tk-strip", + "aria-hidden": "true", + children: Array.from({ + length: segments + }, (_, index)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("i", {}, index, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 195, + columnNumber: 15 + }, this)) + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 193, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 172, + columnNumber: 7 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "tk-meta", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "tk-heat", + "aria-label": `热度 ${heatLabel(drama)}`, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(HeatIcon, {}, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 202, + columnNumber: 11 + }, this), + heatLabel(drama) + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 201, + columnNumber: 9 + }, this), + genre ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "tk-theme", + children: genre + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 205, + columnNumber: 18 + }, this) : null, + firstTag ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$card$2d$tags$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["CardTags"], { + tags: [ + firstTag + ] + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 207, + columnNumber: 11 + }, this) : drama.tags[0] ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "drama-tags", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: [ + "#", + drama.tags[0].replace(/^#/, "") + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 210, + columnNumber: 13 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 209, + columnNumber: 11 + }, this) : null + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 200, + columnNumber: 7 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/drama/drama-card.tsx", + lineNumber: 167, + columnNumber: 5 + }, this); +} +}), +"[project]/src/components/drama/poster.tsx [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "Poster", + ()=>Poster +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$decrypted$2d$image$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/common/decrypted-image.tsx [app-rsc] (ecmascript)"); +; +; +function Poster({ width, height, className = "poster-source", alt = "", src }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$decrypted$2d$image$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["DecryptedImage"], { + className: className, + src: src, + width: width, + height: height, + alt: alt + }, void 0, false, { + fileName: "[project]/src/components/drama/poster.tsx", + lineNumber: 12, + columnNumber: 10 + }, this); +} +}), +"[project]/src/components/play/EpisodeBoard.tsx [app-rsc] (client reference proxy)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "EpisodeBoard", + ()=>EpisodeBoard +]); +// This file is generated by next-core EcmascriptClientReferenceModule. +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-server.js [app-rsc] (ecmascript)"); +; +const EpisodeBoard = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["registerClientReference"])(function() { + throw new Error("Attempted to call EpisodeBoard() from the server but EpisodeBoard is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); +}, "[project]/src/components/play/EpisodeBoard.tsx", "EpisodeBoard"); +}), +"[project]/src/components/play/EpisodeBoard.tsx [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$EpisodeBoard$2e$tsx__$5b$app$2d$rsc$5d$__$28$client__reference__proxy$29$__ = __turbopack_context__.i("[project]/src/components/play/EpisodeBoard.tsx [app-rsc] (client reference proxy)"); +; +__turbopack_context__.n(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$EpisodeBoard$2e$tsx__$5b$app$2d$rsc$5d$__$28$client__reference__proxy$29$__); +}), +"[project]/src/components/play/PlayScreen.tsx [app-rsc] (client reference proxy)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "PlayScreen", + ()=>PlayScreen +]); +// This file is generated by next-core EcmascriptClientReferenceModule. +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-server.js [app-rsc] (ecmascript)"); +; +const PlayScreen = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["registerClientReference"])(function() { + throw new Error("Attempted to call PlayScreen() from the server but PlayScreen is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); +}, "[project]/src/components/play/PlayScreen.tsx", "PlayScreen"); +}), +"[project]/src/components/play/PlayScreen.tsx [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$PlayScreen$2e$tsx__$5b$app$2d$rsc$5d$__$28$client__reference__proxy$29$__ = __turbopack_context__.i("[project]/src/components/play/PlayScreen.tsx [app-rsc] (client reference proxy)"); +; +__turbopack_context__.n(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$PlayScreen$2e$tsx__$5b$app$2d$rsc$5d$__$28$client__reference__proxy$29$__); +}), +"[project]/src/components/play/play-detail-actions.tsx [app-rsc] (client reference proxy)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "PlayDetailActions", + ()=>PlayDetailActions +]); +// This file is generated by next-core EcmascriptClientReferenceModule. +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-server.js [app-rsc] (ecmascript)"); +; +const PlayDetailActions = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["registerClientReference"])(function() { + throw new Error("Attempted to call PlayDetailActions() from the server but PlayDetailActions is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); +}, "[project]/src/components/play/play-detail-actions.tsx", "PlayDetailActions"); +}), +"[project]/src/components/play/play-detail-actions.tsx [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$play$2d$detail$2d$actions$2e$tsx__$5b$app$2d$rsc$5d$__$28$client__reference__proxy$29$__ = __turbopack_context__.i("[project]/src/components/play/play-detail-actions.tsx [app-rsc] (client reference proxy)"); +; +__turbopack_context__.n(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$play$2d$detail$2d$actions$2e$tsx__$5b$app$2d$rsc$5d$__$28$client__reference__proxy$29$__); +}), +"[project]/src/components/play/play-official.tsx [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "PlayOfficial", + ()=>PlayOfficial +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$app$2d$config$2d$server$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/app-config-server.ts [app-rsc] (ecmascript)"); +; +; +function field(value) { + return value?.trim() || ""; +} +function externalHref(value) { + if (/^https?:\/\//i.test(value) || value.startsWith("mailto:")) return value; + if (value.includes("@") && !/\s/.test(value)) return `mailto:${value}`; + return value; +} +function OfficialAnchor({ href, children }) { + const url = externalHref(href); + const external = /^https?:\/\//i.test(url); + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("a", { + href: url, + target: external ? "_blank" : undefined, + rel: external ? "noreferrer" : undefined, + children: children + }, void 0, false, { + fileName: "[project]/src/components/play/play-official.tsx", + lineNumber: 17, + columnNumber: 5 + }, this); +} +async function PlayOfficial() { + const { data } = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$app$2d$config$2d$server$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["getAppConfigInfo"])(); + const config = data?.config; + const webAddr = field(config?.webAddr); + const foreverUrlAddr = field(config?.foreverUrlAddr); + const tgGroup = field(config?.tgGroup); + const siteName = field(config?.webSiteName) || "黄果短剧"; + if (!webAddr && !foreverUrlAddr && !tgGroup) return null; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("section", { + className: "play-official", + "aria-label": "官方链接", + children: [ + webAddr ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "play-official-line play-official-inline", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: "官方入口:" + }, void 0, false, { + fileName: "[project]/src/components/play/play-official.tsx", + lineNumber: 37, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(OfficialAnchor, { + href: webAddr, + children: webAddr + }, void 0, false, { + fileName: "[project]/src/components/play/play-official.tsx", + lineNumber: 38, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/play/play-official.tsx", + lineNumber: 36, + columnNumber: 9 + }, this) : null, + foreverUrlAddr ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "play-official-line play-official-inline", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: "海外永久地址:" + }, void 0, false, { + fileName: "[project]/src/components/play/play-official.tsx", + lineNumber: 43, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(OfficialAnchor, { + href: foreverUrlAddr, + children: foreverUrlAddr + }, void 0, false, { + fileName: "[project]/src/components/play/play-official.tsx", + lineNumber: 44, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/play/play-official.tsx", + lineNumber: 42, + columnNumber: 9 + }, this) : null, + tgGroup ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "play-official-line", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(OfficialAnchor, { + href: tgGroup, + children: `点击加入${siteName}官方 Telegram 群` + }, void 0, false, { + fileName: "[project]/src/components/play/play-official.tsx", + lineNumber: 49, + columnNumber: 11 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/play/play-official.tsx", + lineNumber: 48, + columnNumber: 9 + }, this) : null + ] + }, void 0, true, { + fileName: "[project]/src/components/play/play-official.tsx", + lineNumber: 34, + columnNumber: 5 + }, this); +} +}), +"[project]/src/components/play/play-page.tsx [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "PlayPage", + ()=>PlayPage +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/client/app-dir/link.react-server.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$breadcrumb$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/drama/breadcrumb.tsx [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$drama$2d$card$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/drama/drama-card.tsx [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$EpisodeBoard$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/play/EpisodeBoard.tsx [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$play$2d$detail$2d$actions$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/play/play-detail-actions.tsx [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$PlayScreen$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/play/PlayScreen.tsx [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$play$2d$official$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/play/play-official.tsx [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$series$2d$overview$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/play/series-overview.tsx [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$promo$2d$marquee$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/common/promo-marquee.tsx [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$wide$2d$ad$2d$row$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/common/wide-ad-row.tsx [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2f$card$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/playlet/card.ts [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/playlet-display.ts [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$media$2f$playback$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/media/playback.ts [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$site$2f$routes$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/site/routes.ts [app-rsc] (ecmascript)"); +; +; +; +; +; +; +; +; +; +; +; +; +; +; +; +function lockText(chapter) { + if (chapter.canWatch) return ""; + if (chapter.needVip) return "需要开通 VIP 后观看"; + if (chapter.needUnlock || chapter.payType === 1) return "请在 App 观看"; + return "本集暂不可观看"; +} +function PlayPage({ detail, recommend, episode, chapter, chapterError = "", ads }) { + const drama = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2f$card$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["playletToDrama"])(detail); + const overview = episode === undefined; + const current = episode ?? drama.firstEpisode ?? 1; + const total = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["resolvePlayletEpisodeTotal"])(detail); + const labelTotal = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["resolvePlayletEpisodeLabelTotal"])(detail); + const episodeBase = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["playletPlayBase"])(detail); + const playSrc = chapter?.canWatch ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$media$2f$playback$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["resolvePlayURL"])(chapter.videoUrl) : ""; + const locked = chapter ? lockText(chapter) : chapterError || "剧集加载失败"; + const statusText = chapter ? chapter.canWatch ? playSrc ? undefined : `第 ${current} 集 · 暂无视频源` : `第 ${current} 集 · ${locked}` : `第 ${current} 集 · ${locked}`; + const tags = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["playletTagLinks"])(detail, 8); + const video = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$drama$2d$card$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["isSingleVideo"])({ + eps: total + }); + const promoAds = (ads?.nineGridList || []).filter((item)=>item?.images?.trim()); + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("main", { + id: "drama-play-page", + className: `shell${overview ? " is-overview" : ""}`, + "aria-labelledby": "play-detail-title", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$breadcrumb$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["Breadcrumb"], { + items: [ + { + label: "首页", + href: __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$site$2f$routes$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["routes"].home + }, + { + label: "短剧", + href: __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$site$2f$routes$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["routes"].shorts + }, + overview ? { + label: drama.title + } : { + label: drama.title, + href: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["playletHref"])(detail) + }, + ...overview ? [] : [ + { + label: `第${current}集` + } + ] + ] + }, void 0, false, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 70, + columnNumber: 7 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "play-detail-layout play-detail-layout--single", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "play-detail-main", + children: [ + overview ? null : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("nav", { + className: "ep-strip", + "aria-label": "播放导航", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "ep-strip-tag", + children: video ? "单集" : `EP ${current}` + }, void 0, false, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 82, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "ep-strip-title", + children: [ + drama.title, + video ? null : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("small", { + children: [ + " / 共 ", + labelTotal, + " 集" + ] + }, void 0, true, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 85, + columnNumber: 33 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 83, + columnNumber: 15 + }, this), + video ? null : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "ep-strip-step", + children: [ + current > 1 ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["default"], { + href: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["playletPlayHref"])(detail, current - 1), + "aria-label": "上一集", + title: "上一集", + children: "‹" + }, void 0, false, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 90, + columnNumber: 21 + }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + "aria-disabled": "true", + "aria-label": "上一集", + title: "上一集", + children: "‹" + }, void 0, false, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 94, + columnNumber: 21 + }, this), + current < total ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["default"], { + href: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["playletPlayHref"])(detail, current + 1), + "aria-label": "下一集", + title: "下一集", + children: "›" + }, void 0, false, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 99, + columnNumber: 21 + }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + "aria-disabled": "true", + "aria-label": "下一集", + title: "下一集", + children: "›" + }, void 0, false, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 103, + columnNumber: 21 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 88, + columnNumber: 17 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 81, + columnNumber: 13 + }, this), + overview ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$series$2d$overview$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["SeriesOverview"], { + drama: drama, + total: total + }, void 0, false, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 113, + columnNumber: 13 + }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$PlayScreen$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["PlayScreen"], { + basePath: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["playletHref"])(detail), + poster: detail.cover || "", + title: drama.title, + episode: current, + total: total, + src: playSrc || undefined, + canWatch: Boolean(chapter?.canWatch), + statusText: statusText, + chapterId: chapter?.id, + playletId: detail.id, + playletSlug: detail.slug?.trim() || undefined, + episodeBase: episodeBase + }, void 0, false, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 115, + columnNumber: 13 + }, this), + promoAds.length ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$promo$2d$marquee$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["PromoMarquee"], { + ads: promoAds + }, void 0, false, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 131, + columnNumber: 30 + }, this) : null, + overview ? null : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("section", { + className: "play-detail-info", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", { + id: "play-detail-title", + children: drama.title + }, void 0, false, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 135, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "play-detail-tags", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: "分类标签:" + }, void 0, false, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 137, + columnNumber: 17 + }, this), + tags.map((tag)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["default"], { + href: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["playletTagHref"])(tag), + children: tag.label + }, `${tag.kind}-${tag.key}`, false, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 139, + columnNumber: 19 + }, this)) + ] + }, void 0, true, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 136, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "play-detail-meta", + children: [ + video ? null : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: [ + "集数:全", + labelTotal, + "集" + ] + }, void 0, true, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 145, + columnNumber: 33 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: [ + (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["formatHeatValue"])(detail.heatValue), + "热度" + ] + }, void 0, true, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 146, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: [ + (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["formatHeatValue"])(detail.countCollect), + "收藏" + ] + }, void 0, true, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 147, + columnNumber: 17 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 144, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { + className: "play-detail-description", + children: [ + "简介:", + drama.desc + ] + }, void 0, true, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 149, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$play$2d$detail$2d$actions$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["PlayDetailActions"], { + showDownload: true + }, void 0, false, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 150, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 134, + columnNumber: 13 + }, this), + video ? null : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("section", { + className: "play-episodes-section", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "play-section-heading", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", { + children: "剧集" + }, void 0, false, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 157, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: [ + "全", + labelTotal, + "集" + ] + }, void 0, true, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 158, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 156, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$EpisodeBoard$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["EpisodeBoard"], { + basePath: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["playletHref"])(detail), + total: total, + current: overview ? undefined : current, + chapters: detail.playletChapterInfo, + episodeBase: episodeBase + }, void 0, false, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 160, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 155, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$wide$2d$ad$2d$row$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["WideAdRow"], { + ads: ads?.detailbannerList || [] + }, void 0, false, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 170, + columnNumber: 11 + }, this), + recommend.length ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("section", { + className: "play-recommend", + "aria-labelledby": "play-recommend-title", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "play-section-heading", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", { + id: "play-recommend-title", + children: "推荐视频" + }, void 0, false, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 175, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: [ + "看了《", + drama.title, + "》的人还在看" + ] + }, void 0, true, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 176, + columnNumber: 17 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 174, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "cards play-recommend-grid", + children: recommend.map((item)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$drama$2d$card$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["DramaCard"], { + drama: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2f$card$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["playletToDrama"])(item) + }, item.id, false, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 180, + columnNumber: 19 + }, this)) + }, void 0, false, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 178, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 173, + columnNumber: 13 + }, this) : null, + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$play$2d$official$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["PlayOfficial"], {}, void 0, false, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 186, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 79, + columnNumber: 9 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 78, + columnNumber: 7 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/play/play-page.tsx", + lineNumber: 69, + columnNumber: 5 + }, this); +} +}), +"[project]/src/components/play/series-description.tsx [app-rsc] (client reference proxy)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "SeriesDescription", + ()=>SeriesDescription +]); +// This file is generated by next-core EcmascriptClientReferenceModule. +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-server.js [app-rsc] (ecmascript)"); +; +const SeriesDescription = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["registerClientReference"])(function() { + throw new Error("Attempted to call SeriesDescription() from the server but SeriesDescription is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); +}, "[project]/src/components/play/series-description.tsx", "SeriesDescription"); +}), +"[project]/src/components/play/series-description.tsx [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$series$2d$description$2e$tsx__$5b$app$2d$rsc$5d$__$28$client__reference__proxy$29$__ = __turbopack_context__.i("[project]/src/components/play/series-description.tsx [app-rsc] (client reference proxy)"); +; +__turbopack_context__.n(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$series$2d$description$2e$tsx__$5b$app$2d$rsc$5d$__$28$client__reference__proxy$29$__); +}), +"[project]/src/components/play/series-overview.tsx [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "SeriesOverview", + ()=>SeriesOverview +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/client/app-dir/link.react-server.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$app$2d$download$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/common/app-download.tsx [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$drama$2d$card$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/drama/drama-card.tsx [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$poster$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/drama/poster.tsx [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$play$2d$detail$2d$actions$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/play/play-detail-actions.tsx [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$series$2d$description$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/play/series-description.tsx [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/playlet-display.ts [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$site$2f$routes$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/site/routes.ts [app-rsc] (ecmascript)"); +; +; +; +; +; +; +; +; +; +function SeriesOverview({ drama, total }) { + const tagLinks = drama.tagLinks?.length ? drama.tagLinks : drama.tags.map((tag)=>({ + label: tag.replace(/^#/, ""), + key: tag, + kind: "tag" + })); + const heatLabel = drama.heatText || `${drama.heat}万`; + const favoriteLabel = drama.favoriteText || `${drama.favorites}万`; + const likeLabel = drama.likeText || `${drama.likes}万`; + const video = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$drama$2d$card$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["isSingleVideo"])({ + eps: total + }); + const firstPlayable = drama.firstEpisode || 1; + const playHref = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$site$2f$routes$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["routes"].play(drama.routeKey || drama.id, firstPlayable); + const genre = drama.genre?.trim() || ""; + const fields = [ + [ + "类型", + genre || (video ? "视频" : "短剧") + ], + ...video ? [] : [ + [ + "集数", + `${total} 集` + ], + [ + "状态", + drama.finished ? "已完结" : "连载中" + ] + ], + [ + "热度", + heatLabel + ], + [ + "收藏", + favoriteLabel + ], + [ + "点赞", + likeLabel + ] + ]; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("section", { + className: "tk-ticket", + "aria-label": "作品信息", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["default"], { + className: "tk-ticket-poster", + href: playHref, + "aria-label": `播放${drama.title}`, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$poster$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["Poster"], { + className: "tk-ticket-img", + src: drama.coverUrl, + width: 640, + height: 800, + alt: `${drama.title}封面` + }, void 0, false, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 40, + columnNumber: 9 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 39, + columnNumber: 7 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "tk-perf", + "aria-hidden": "true" + }, void 0, false, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 42, + columnNumber: 7 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "tk-ticket-body", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { + className: "tk-kicker", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: [ + video ? "视频" : "短剧", + " NO.", + drama.id + ] + }, void 0, true, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 45, + columnNumber: 11 + }, this), + drama.badge && drama.badgeType ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("b", { + className: `tk-kicker-badge tk-kicker-badge--${drama.badgeType}`, + children: drama.badge + }, void 0, false, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 49, + columnNumber: 13 + }, this) : null + ] + }, void 0, true, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 44, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("h1", { + id: "play-detail-title", + children: drama.title + }, void 0, false, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 52, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("dl", { + className: "tk-fields", + children: fields.map(([label, value])=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("dt", { + children: label + }, void 0, false, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 56, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("dd", { + children: value + }, void 0, false, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 57, + columnNumber: 15 + }, this) + ] + }, label, true, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 55, + columnNumber: 13 + }, this)) + }, void 0, false, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 53, + columnNumber: 9 + }, this), + tagLinks.length ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { + className: "tk-tags", + children: tagLinks.map((tag)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["default"], { + href: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["playletTagHref"])(tag), + children: `#${tag.label.replace(/^#/, "")}` + }, `${tag.kind}-${tag.key}`, false, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 64, + columnNumber: 15 + }, this)) + }, void 0, false, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 62, + columnNumber: 11 + }, this) : null, + drama.desc?.trim() ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$series$2d$description$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["SeriesDescription"], { + text: drama.desc + }, void 0, false, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 70, + columnNumber: 31 + }, this) : null + ] + }, void 0, true, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 43, + columnNumber: 7 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "tk-perf tk-perf--stub", + "aria-hidden": "true" + }, void 0, false, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 72, + columnNumber: 7 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "tk-stub", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$react$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["default"], { + className: "tk-stub-play", + href: playHref, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("svg", { + viewBox: "0 0 24 24", + "aria-hidden": "true", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("path", { + d: "M8 5v14l11-7z" + }, void 0, false, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 76, + columnNumber: 13 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 75, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: video ? "立即观看" : `从第 ${firstPlayable} 集开始` + }, void 0, false, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 78, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 74, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$app$2d$download$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["AppDownloadLink"], { + className: "tk-stub-download", + label: "下载 App", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("svg", { + viewBox: "0 0 24 24", + "aria-hidden": "true", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("rect", { + x: "6", + y: "2", + width: "12", + height: "20", + rx: "3" + }, void 0, false, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 82, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("path", { + d: "M10 5h4M11 19h2" + }, void 0, false, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 83, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 81, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: "下载 App" + }, void 0, false, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 85, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 80, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$play$2f$play$2d$detail$2d$actions$2e$tsx__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["PlayDetailActions"], {}, void 0, false, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 87, + columnNumber: 9 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 73, + columnNumber: 7 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/play/series-overview.tsx", + lineNumber: 38, + columnNumber: 5 + }, this); +} +}), +"[project]/src/components/site/json-ld.tsx [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "JsonLd", + ()=>JsonLd +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$seo$2f$index$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/lib/seo/index.ts [app-rsc] (ecmascript) "); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$seo$2f$jsonld$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/seo/jsonld.ts [app-rsc] (ecmascript)"); +; +; +function JsonLd({ data }) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["jsxDEV"])("script", { + type: "application/ld+json", + dangerouslySetInnerHTML: { + __html: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$seo$2f$jsonld$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["serializeJSONLD"])(data) + } + }, void 0, false, { + fileName: "[project]/src/components/site/json-ld.tsx", + lineNumber: 5, + columnNumber: 5 + }, this); +} +}), +"[project]/src/lib/api/client.ts [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ApiError", + ()=>ApiError, + "apiRequest", + ()=>apiRequest +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$config$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/config.ts [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$sdk$2d$headers$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/sdk-headers.ts [app-rsc] (ecmascript)"); +; +; +; +class ApiError extends Error { + status; + code; + constructor(message, status, code){ + super(message); + this.name = "ApiError"; + this.status = status; + this.code = code; + } +} +async function apiRequest(path, options = {}) { + const { method = "GET", body } = options; + const headers = { + Accept: "application/json", + ...await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$sdk$2d$headers$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["browserTrackingHeaders"])(("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : "") + }; + if (body !== undefined) headers["Content-Type"] = "application/json"; + let response; + try { + response = await fetch(`${__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$config$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["API_BASE_URL"]}${path}`, { + method, + headers, + body: body === undefined ? undefined : JSON.stringify(body) + }); + } catch { + throw new ApiError("网络异常,请稍后重试", 0); + } + const text = await response.text(); + let payload = null; + try { + payload = text ? JSON.parse(text) : null; + } catch { + payload = null; + } + if (!payload || typeof payload.code !== "number") { + throw new ApiError(response.ok ? "接口响应格式异常" : `接口暂时不可用 (${response.status})`, response.status); + } + if (!response.ok || payload.code !== 200) { + const detail = typeof payload.data === "string" ? payload.data.trim() : ""; + throw new ApiError(detail || payload.tip || payload.msg || "请求失败", response.status, payload.code); + } + return payload.data; +} +}), +"[project]/src/lib/api/playlet-server.ts [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getPlayletChapterDetail", + ()=>getPlayletChapterDetail, + "getPlayletDetail", + ()=>getPlayletDetail, + "getPlayletGuessLike", + ()=>getPlayletGuessLike, + "getPlayletHome", + ()=>getPlayletHome, + "getPlayletHomeConfigList", + ()=>getPlayletHomeConfigList, + "getPlayletHotList", + ()=>getPlayletHotList, + "getPlayletOperateList", + ()=>getPlayletOperateList, + "getPlayletRank", + ()=>getPlayletRank, + "getPlayletSearch", + ()=>getPlayletSearch, + "getPlayletTagList", + ()=>getPlayletTagList, + "getPlayletTagOptions", + ()=>getPlayletTagOptions, + "getPlayletTopicDetail", + ()=>getPlayletTopicDetail, + "getPlayletTopicList", + ()=>getPlayletTopicList, + "matchPlayletTagOption", + ()=>matchPlayletTagOption +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/playlet.ts [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/server-fetch.ts [app-rsc] (ecmascript)"); +; +; +async function getPlayletChapterDetail(params) { + const chapterId = String(params.chapterId).trim(); + if (!chapterId) return { + data: null, + error: "缺少剧集 chapterId" + }; + const query = new URLSearchParams({ + chapterId + }); + const playletSlug = params.playletSlug?.trim(); + if (playletSlug) query.set("playletSlug", playletSlug); + else if (params.playletId != null && String(params.playletId).trim()) { + query.set("playletId", String(params.playletId).trim()); + } + try { + const data = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["serverFetchJson"])(`/api/app/playlet/chapter/detail?${query}`, { + maxAttempts: 2, + timeoutMs: 10_000, + revalidate: 0 + }); + return { + data, + error: "" + }; + } catch (reason) { + rethrowFrameworkError(reason); + const error = reason instanceof Error ? reason.message : "剧集详情加载失败"; + if ("TURBOPACK compile-time truthy", 1) console.warn("[playlet-chapter-detail]", error); + return { + data: null, + error + }; + } +} +async function getPlayletHotList(params) { + const pageNum = params?.pageNum ?? 1; + const pageSize = params?.pageSize ?? __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["PLAYLET_HOT_RELATED_SIZE"]; + const query = new URLSearchParams({ + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + if (params?.excludePlayletId != null && String(params.excludePlayletId).trim()) { + query.set("excludePlayletId", String(params.excludePlayletId).trim()); + } + try { + const data = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["serverFetchJson"])(`/api/app/playlet/hot/list?${query}`, { + maxAttempts: 2, + timeoutMs: 10_000, + revalidate: 60, + tags: [ + "playlet-hot", + `playlet-hot-${pageNum}-${pageSize}` + ] + }); + return { + data: { + list: data.list || [], + pageNum: data.pageNum || pageNum, + pageSize: data.pageSize || pageSize, + totalCount: data.totalCount || 0 + }, + error: "" + }; + } catch (reason) { + const error = reason instanceof Error ? reason.message : "热门短剧加载失败"; + if ("TURBOPACK compile-time truthy", 1) { + console.warn("[playlet-hot]", error); + } + return { + data: null, + error + }; + } +} +async function getPlayletGuessLike(params) { + if (!params.playletId) return []; + const query = new URLSearchParams({ + playletId: String(params.playletId), + pageNum: String(params.pageNum ?? 1), + pageSize: String(params.pageSize ?? __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["PLAYLET_RECOMMEND_SIZE"]) + }); + try { + const data = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["serverFetchJson"])(`/api/app/playlet/guess-like/list?${query}`, { + maxAttempts: 2, + timeoutMs: 10_000, + revalidate: 60, + tags: [ + "playlet-guess-like", + `playlet-guess-like-${params.playletId}` + ] + }); + return (data.list || []).filter((item)=>item?.id && item.id !== params.playletId); + } catch (reason) { + if ("TURBOPACK compile-time truthy", 1) { + console.warn("[playlet-guess-like]", reason instanceof Error ? reason.message : reason); + } + return []; + } +} +function rethrowFrameworkError(error) { + if (!error || typeof error !== "object" || !("digest" in error)) return; + const digest = String(error.digest || ""); + if (digest.startsWith("NEXT_") || digest.includes("DYNAMIC_SERVER_USAGE")) throw error; +} +function normalizePlayletDetail(data) { + return { + ...data, + playletChapterInfo: data.playletChapterInfo || [], + tagIds: data.tagIds || [], + tagNames: data.tagNames || [], + tagSlugs: data.tagSlugs || [], + themeIds: data.themeIds || [], + themeNames: data.themeNames || [], + themeSlugs: data.themeSlugs || [], + categoryIds: data.categoryIds || [] + }; +} +async function getPlayletDetail(params) { + const { pathKey, slug, id } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["playletDetailKey"])(params.key); + if (!pathKey) return { + data: null, + error: "缺少短剧 id 或 slug" + }; + const query = new URLSearchParams(); + if (slug) query.set("slug", slug); + else if (id) query.set("id", id); + try { + const data = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["serverFetchJson"])(`/api/app/playlet/detail?${query}`, { + maxAttempts: 2, + timeoutMs: 10_000, + revalidate: 60, + tags: [ + "playlet-detail", + `playlet-detail-${pathKey}` + ] + }); + return { + data: normalizePlayletDetail(data), + error: "" + }; + } catch (reason) { + rethrowFrameworkError(reason); + const error = reason instanceof Error ? reason.message : "短剧详情加载失败"; + if ("TURBOPACK compile-time truthy", 1) console.warn("[playlet-detail]", error); + return { + data: null, + error + }; + } +} +async function getPlayletOperateList(params) { + const operateType = params.operateType ?? __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["PLAYLET_OPERATE_KIND"].shorts; + const type = params.type ?? 1; + const pageNum = params.pageNum ?? 1; + const pageSize = params.pageSize ?? __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["PLAYLET_OPERATE_PAGE_SIZE"]; + const query = new URLSearchParams({ + operateType: String(operateType), + type: String(type), + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + try { + const data = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["serverFetchJson"])(`/api/app/playlet/operate/list?${query}`, { + maxAttempts: 2, + timeoutMs: 10_000, + revalidate: 60, + tags: [ + "playlet-operate", + `playlet-operate-${operateType}-${type}` + ] + }); + return { + data: { + list: data.list || [], + pageNum: data.pageNum || pageNum, + pageSize: data.pageSize || pageSize, + totalCount: data.totalCount || 0, + type: data.type || type + }, + error: "" + }; + } catch (reason) { + const error = reason instanceof Error ? reason.message : "列表加载失败"; + if ("TURBOPACK compile-time truthy", 1) { + console.warn("[playlet-operate]", error); + } + return { + data: null, + error + }; + } +} +async function getPlayletTopicDetail(params) { + const { pathKey, topicSlug, id } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["playletTopicDetailKey"])(params.key); + if (!pathKey) return { + data: null, + error: "缺少专题 id 或 slug" + }; + const pageNum = params.pageNum ?? 1; + const pageSize = params.pageSize ?? __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["PLAYLET_TOPIC_DETAIL_PAGE_SIZE"]; + const sortType = params.sortType === 2 || params.sortType === 3 ? params.sortType : 1; + const query = new URLSearchParams({ + dataType: "1", + pageNum: String(pageNum), + pageSize: String(pageSize), + sortType: String(sortType) + }); + if (topicSlug) query.set("topicSlug", topicSlug); + else if (id) query.set("id", id); + try { + const data = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["serverFetchJson"])(`/api/app/playlet/topic/detail?${query}`, { + maxAttempts: 2, + timeoutMs: 10_000, + revalidate: 60, + tags: [ + "playlet-topic-detail", + `playlet-topic-detail-${pathKey}` + ] + }); + return { + data: { + id: data.id || 0, + name: data.name || "", + desc: data.desc || "", + icon: data.icon || "", + slug: data.slug || "", + rank: data.rank || 0, + dataType: data.dataType || 1, + covers: data.covers || [], + list: data.list || [], + moreTopics: data.moreTopics || [], + playletCount: data.playletCount || 0, + pageNum: data.pageNum || pageNum, + pageSize: data.pageSize || pageSize, + totalCount: data.totalCount || 0, + seoInfo: data.seoInfo + }, + error: "" + }; + } catch (reason) { + const error = reason instanceof Error ? reason.message : "专题详情加载失败"; + if ("TURBOPACK compile-time truthy", 1) { + console.warn("[playlet-topic-detail]", error); + } + return { + data: null, + error + }; + } +} +async function getPlayletTopicList(params) { + const pageNum = params?.pageNum ?? 1; + const pageSize = params?.pageSize ?? __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["PLAYLET_TOPIC_PAGE_SIZE"]; + const query = new URLSearchParams({ + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + try { + const data = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["serverFetchJson"])(`/api/app/playlet/topic/list?${query}`, { + maxAttempts: 2, + timeoutMs: 10_000, + revalidate: 60, + tags: [ + "playlet-topic", + `playlet-topic-${pageNum}-${pageSize}` + ] + }); + return { + data: { + list: data.list || [], + pageNum: data.pageNum || pageNum, + pageSize: data.pageSize || pageSize, + seoInfo: data.seoInfo + }, + error: "" + }; + } catch (reason) { + const error = reason instanceof Error ? reason.message : "专题列表加载失败"; + if ("TURBOPACK compile-time truthy", 1) { + console.warn("[playlet-topic]", error); + } + return { + data: null, + error + }; + } +} +async function getPlayletRank(params) { + const sortOrder = params?.sortOrder ?? 1; + const pageNum = params?.pageNum ?? 1; + const pageSize = params?.pageSize ?? __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["PLAYLET_RANK_PAGE_SIZE"]; + const query = new URLSearchParams({ + sortOrder: String(sortOrder), + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + try { + const data = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["serverFetchJson"])(`/api/app/playlet/rank?${query}`, { + maxAttempts: 2, + timeoutMs: 10_000, + revalidate: 60, + tags: [ + "playlet-rank", + `playlet-rank-${sortOrder}` + ] + }); + return { + data: { + list: data.list || [], + pageNum: data.pageNum || pageNum, + pageSize: data.pageSize || pageSize, + totalCount: data.totalCount || 0, + seoInfo: data.seoInfo + }, + error: "" + }; + } catch (reason) { + const error = reason instanceof Error ? reason.message : "热榜加载失败"; + if ("TURBOPACK compile-time truthy", 1) { + console.warn("[playlet-rank]", error); + } + return { + data: null, + error + }; + } +} +async function getPlayletTagList(params) { + const { pathKey, slug, id } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["playletTagPathKey"])(params.key); + if (!pathKey) return { + data: null, + error: "缺少标签 id 或 slug" + }; + const pageNum = params.pageNum ?? 1; + const pageSize = params.pageSize ?? __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["PLAYLET_TAG_PAGE_SIZE"]; + const query = new URLSearchParams({ + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + if (params.sortType) query.set("sortType", String(params.sortType)); + if (slug) query.set("tagSlug", slug); + else if (id) query.set("tagId", id); + try { + const data = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["serverFetchJson"])(`/api/app/playlet/tag/list?${query}`, { + maxAttempts: 2, + timeoutMs: 10_000, + revalidate: 60, + tags: [ + "playlet-tag", + `playlet-tag-${pathKey}` + ] + }); + return { + data: { + list: data.list || [], + pageNum: data.pageNum || pageNum, + pageSize: data.pageSize || pageSize, + totalCount: data.totalCount || 0 + }, + error: "" + }; + } catch (reason) { + const error = reason instanceof Error ? reason.message : "标签列表加载失败"; + if ("TURBOPACK compile-time truthy", 1) { + console.warn("[playlet-tag]", error); + } + return { + data: null, + error + }; + } +} +async function getPlayletTagOptions() { + try { + const data = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["serverFetchJson"])("/api/app/playlet/tag/options", { + maxAttempts: 2, + timeoutMs: 10_000, + revalidate: 300, + tags: [ + "playlet-tag-options" + ] + }); + return data.list || []; + } catch (reason) { + if ("TURBOPACK compile-time truthy", 1) { + const error = reason instanceof Error ? reason.message : "标签选项加载失败"; + console.warn("[playlet-tag-options]", error); + } + return []; + } +} +function normalizeTheme(item) { + return { + ...item, + list: item.list || [] + }; +} +function normalizeModule(item) { + return { + ...item, + list: item.list || [], + topicList: (item.topicList || []).map(normalizeTheme) + }; +} +async function getPlayletHome() { + try { + const data = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["serverFetchJson"])("/api/app/playlet/home", { + maxAttempts: 2, + timeoutMs: 10_000, + revalidate: 60, + tags: [ + "playlet-home" + ] + }); + return { + data: { + ...data, + announcements: data.announcements || [], + homeBannerData: data.homeBannerData || [], + modules: (data.modules || []).map(normalizeModule) + }, + error: "" + }; + } catch (reason) { + const error = reason instanceof Error ? reason.message : "首页加载失败"; + if ("TURBOPACK compile-time truthy", 1) { + console.warn("[playlet-home]", error); + } + return { + data: null, + error + }; + } +} +async function getPlayletHomeConfigList(params) { + const { pathKey, slug, id } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["playletDetailKey"])(params.key); + if (!pathKey) return { + data: null, + error: "缺少首页模块 id 或 slug" + }; + const pageNum = params.pageNum ?? 1; + const pageSize = params.pageSize ?? __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["PLAYLET_HOME_CONFIG_PAGE_SIZE"]; + const query = new URLSearchParams({ + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + if (slug) query.set("slug", slug); + else if (id) query.set("id", id); + try { + const data = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["serverFetchJson"])(`/api/app/playlet/home-config/list?${query}`, { + maxAttempts: 2, + timeoutMs: 10_000, + revalidate: 60, + tags: [ + "playlet-home-config", + `playlet-home-config-${pathKey}` + ] + }); + return { + data: { + ...data, + config: data.config ? normalizeModule(data.config) : data.config, + list: data.list || [], + topicList: (data.topicList || []).map(normalizeTheme), + pageNum: data.pageNum || pageNum, + pageSize: data.pageSize || pageSize, + totalCount: data.totalCount || 0 + }, + error: "" + }; + } catch (reason) { + const error = reason instanceof Error ? reason.message : "首页模块加载失败"; + if ("TURBOPACK compile-time truthy", 1) { + console.warn("[playlet-home-config]", error); + } + return { + data: null, + error + }; + } +} +async function getPlayletSearch(params) { + const keyword = params.keyword.trim().slice(0, 100); + if (!keyword) return { + data: null, + error: "" + }; + const pageNum = params.pageNum && params.pageNum > 0 ? Math.floor(params.pageNum) : 1; + const pageSize = params.pageSize ?? __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["PLAYLET_SEARCH_PAGE_SIZE"]; + const query = new URLSearchParams({ + keyword, + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + try { + const data = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$server$2d$fetch$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["serverFetchJson"])(`/api/app/playlet/search?${query}`, { + maxAttempts: 2, + timeoutMs: 10_000, + revalidate: 0 + }); + return { + data: { + keyword: data.keyword || keyword, + list: data.list || [], + everyoneWatching: data.everyoneWatching || [], + pageNum: data.pageNum || pageNum, + pageSize: data.pageSize || pageSize, + totalCount: data.totalCount || 0 + }, + error: "" + }; + } catch (reason) { + const error = reason instanceof Error ? reason.message : "搜索失败"; + if ("TURBOPACK compile-time truthy", 1) { + console.warn("[playlet-search]", error); + } + return { + data: null, + error + }; + } +} +function matchPlayletTagOption(list, key) { + const normalized = key.trim(); + if (!normalized) return undefined; + return list.find((item)=>{ + const slug = item.slug?.trim(); + const id = item.id != null ? String(item.id) : ""; + const name = item.name?.trim(); + return slug === normalized || id === normalized || name === normalized; + }); +} +}), +"[project]/src/lib/api/playlet.ts [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "PLAYLET_GUESS_LIKE_PAGE_SIZE", + ()=>PLAYLET_GUESS_LIKE_PAGE_SIZE, + "PLAYLET_HOME_CONFIG_PAGE_SIZE", + ()=>PLAYLET_HOME_CONFIG_PAGE_SIZE, + "PLAYLET_HOT_RELATED_SIZE", + ()=>PLAYLET_HOT_RELATED_SIZE, + "PLAYLET_LIBRARY_PAGE_SIZE", + ()=>PLAYLET_LIBRARY_PAGE_SIZE, + "PLAYLET_OPERATE_KIND", + ()=>PLAYLET_OPERATE_KIND, + "PLAYLET_OPERATE_PAGE_SIZE", + ()=>PLAYLET_OPERATE_PAGE_SIZE, + "PLAYLET_OPERATE_SORTS", + ()=>PLAYLET_OPERATE_SORTS, + "PLAYLET_RANK_BOARDS", + ()=>PLAYLET_RANK_BOARDS, + "PLAYLET_RANK_PAGE_SIZE", + ()=>PLAYLET_RANK_PAGE_SIZE, + "PLAYLET_RECOMMEND_SIZE", + ()=>PLAYLET_RECOMMEND_SIZE, + "PLAYLET_SEARCH_PAGE_SIZE", + ()=>PLAYLET_SEARCH_PAGE_SIZE, + "PLAYLET_TAG_PAGE_SIZE", + ()=>PLAYLET_TAG_PAGE_SIZE, + "PLAYLET_TOPIC_DETAIL_PAGE_SIZE", + ()=>PLAYLET_TOPIC_DETAIL_PAGE_SIZE, + "PLAYLET_TOPIC_PAGE_SIZE", + ()=>PLAYLET_TOPIC_PAGE_SIZE, + "fetchPlayletChapterDetail", + ()=>fetchPlayletChapterDetail, + "fetchPlayletDetail", + ()=>fetchPlayletDetail, + "fetchPlayletGuessLike", + ()=>fetchPlayletGuessLike, + "fetchPlayletHome", + ()=>fetchPlayletHome, + "fetchPlayletHomeConfigList", + ()=>fetchPlayletHomeConfigList, + "fetchPlayletHotLike", + ()=>fetchPlayletHotLike, + "fetchPlayletHotList", + ()=>fetchPlayletHotList, + "fetchPlayletOperateList", + ()=>fetchPlayletOperateList, + "fetchPlayletRank", + ()=>fetchPlayletRank, + "fetchPlayletSearch", + ()=>fetchPlayletSearch, + "fetchPlayletSearchSuggest", + ()=>fetchPlayletSearchSuggest, + "fetchPlayletTagList", + ()=>fetchPlayletTagList, + "fetchPlayletTopicDetail", + ()=>fetchPlayletTopicDetail, + "fetchPlayletTopicList", + ()=>fetchPlayletTopicList, + "playletDetailKey", + ()=>playletDetailKey, + "playletOperateType", + ()=>playletOperateType, + "playletRankSortOrder", + ()=>playletRankSortOrder, + "playletTagPathKey", + ()=>playletTagPathKey, + "playletTopicDetailKey", + ()=>playletTopicDetailKey, + "playletTopicTotalCount", + ()=>playletTopicTotalCount, + "resolveGuessLikePlayletId", + ()=>resolveGuessLikePlayletId +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$channel$2d$routes$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/channel-routes.ts [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/client.ts [app-rsc] (ecmascript)"); +; +; +const PLAYLET_LIBRARY_PAGE_SIZE = 24; +const PLAYLET_TOPIC_PAGE_SIZE = 12; +const PLAYLET_HOT_RELATED_SIZE = 6; +const PLAYLET_RECOMMEND_SIZE = 12; +const PLAYLET_TOPIC_DETAIL_PAGE_SIZE = 24; +const PLAYLET_RANK_PAGE_SIZE = 25; +const PLAYLET_TAG_PAGE_SIZE = 24; +const PLAYLET_HOME_CONFIG_PAGE_SIZE = 24; +function playletTopicDetailKey(raw) { + const key = raw.trim(); + if (!key) return { + pathKey: "", + topicSlug: undefined, + id: undefined + }; + if (/^\d+$/.test(key)) return { + pathKey: key, + topicSlug: undefined, + id: key + }; + return { + pathKey: key, + topicSlug: key, + id: undefined + }; +} +function playletDetailKey(raw) { + const key = raw.trim(); + if (!key) return { + pathKey: "", + slug: undefined, + id: undefined + }; + if (/^\d+$/.test(key)) return { + pathKey: key, + slug: undefined, + id: key + }; + return { + pathKey: key, + slug: key, + id: undefined + }; +} +const PLAYLET_RANK_BOARDS = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$channel$2d$routes$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["RANK_FILTER_LABELS"]; +function playletRankSortOrder(board) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$channel$2d$routes$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["rankFilterByLabel"])(board).sortOrder; +} +const PLAYLET_OPERATE_SORTS = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$channel$2d$routes$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["OPERATE_FILTER_LABELS"]; +const PLAYLET_OPERATE_KIND = { + shorts: 1, + series: 2 +}; +const PLAYLET_OPERATE_PAGE_SIZE = 24; +function playletOperateType(sort) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$channel$2d$routes$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["operateFilterByLabel"])(sort).type; +} +function fetchPlayletOperateList(params) { + const operateType = params.operateType ?? PLAYLET_OPERATE_KIND.shorts; + const type = params.type ?? 1; + const pageNum = params.pageNum ?? 1; + const pageSize = params.pageSize ?? PLAYLET_OPERATE_PAGE_SIZE; + const query = new URLSearchParams({ + operateType: String(operateType), + type: String(type), + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/operate/list?${query}`, { + method: "GET" + }); +} +function fetchPlayletTopicList(params) { + const pageNum = params.pageNum ?? 1; + const pageSize = params.pageSize ?? PLAYLET_TOPIC_PAGE_SIZE; + const query = new URLSearchParams({ + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/topic/list?${query}`, { + method: "GET" + }); +} +function fetchPlayletHotList(params) { + const pageNum = params.pageNum ?? 1; + const pageSize = params.pageSize ?? PLAYLET_HOT_RELATED_SIZE; + const query = new URLSearchParams({ + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + if (params.excludePlayletId != null && String(params.excludePlayletId).trim()) { + query.set("excludePlayletId", String(params.excludePlayletId).trim()); + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/hot/list?${query}`, { + method: "GET" + }); +} +function fetchPlayletDetail(params) { + const { pathKey, slug, id } = playletDetailKey(params.key); + if (!pathKey) return Promise.reject(new Error("缺少短剧 id 或 slug")); + const query = new URLSearchParams(); + if (slug) query.set("slug", slug); + else if (id) query.set("id", id); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/detail?${query}`, { + method: "GET" + }); +} +function fetchPlayletChapterDetail(params) { + const chapterId = String(params.chapterId).trim(); + if (!chapterId) return Promise.reject(new Error("缺少剧集 chapterId")); + const query = new URLSearchParams({ + chapterId + }); + const playletSlug = params.playletSlug?.trim(); + if (playletSlug) query.set("playletSlug", playletSlug); + else if (params.playletId != null && String(params.playletId).trim()) { + query.set("playletId", String(params.playletId).trim()); + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/h5/chapter-detail?${query}`, { + method: "GET" + }); +} +function fetchPlayletTopicDetail(params) { + const { pathKey, topicSlug, id } = playletTopicDetailKey(params.key); + if (!pathKey) return Promise.reject(new Error("缺少专题 id 或 slug")); + const pageNum = params.pageNum ?? 1; + const pageSize = params.pageSize ?? PLAYLET_TOPIC_DETAIL_PAGE_SIZE; + const sortType = params.sortType === 2 || params.sortType === 3 ? params.sortType : 1; + const query = new URLSearchParams({ + dataType: "1", + pageNum: String(pageNum), + pageSize: String(pageSize), + sortType: String(sortType) + }); + if (topicSlug) query.set("topicSlug", topicSlug); + else if (id) query.set("id", id); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/topic/detail?${query}`, { + method: "GET" + }); +} +function playletTopicTotalCount(groups) { + if (!groups?.length) return 0; + return groups.reduce((max, group)=>Math.max(max, group.totalCount || 0), 0); +} +function fetchPlayletRank(params) { + const sortOrder = params.sortOrder ?? 1; + const pageNum = params.pageNum ?? 1; + const pageSize = params.pageSize ?? PLAYLET_RANK_PAGE_SIZE; + const query = new URLSearchParams({ + sortOrder: String(sortOrder), + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/rank?${query}`, { + method: "GET" + }); +} +function playletTagPathKey(raw) { + const key = raw.trim(); + if (!key) return { + pathKey: "", + slug: undefined, + id: undefined + }; + if (/^\d+$/.test(key)) return { + pathKey: key, + slug: undefined, + id: key + }; + return { + pathKey: key, + slug: key, + id: undefined + }; +} +function fetchPlayletTagList(params) { + const { pathKey, slug, id } = playletTagPathKey(params.key); + if (!pathKey) return Promise.reject(new Error("缺少标签 id 或 slug")); + const pageNum = params.pageNum ?? 1; + const pageSize = params.pageSize ?? PLAYLET_TAG_PAGE_SIZE; + const query = new URLSearchParams({ + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + if (params.sortType) query.set("sortType", String(params.sortType)); + if (slug) query.set("tagSlug", slug); + else if (id) query.set("tagId", id); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/tag/list?${query}`, { + method: "GET" + }); +} +function fetchPlayletHome() { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])("/api/app/playlet/home", { + method: "GET" + }); +} +function fetchPlayletHomeConfigList(params) { + const { pathKey, slug, id } = playletDetailKey(params.key); + if (!pathKey) return Promise.reject(new Error("缺少首页模块 id 或 slug")); + const pageNum = params.pageNum ?? 1; + const pageSize = params.pageSize ?? PLAYLET_HOME_CONFIG_PAGE_SIZE; + const query = new URLSearchParams({ + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + if (slug) query.set("slug", slug); + else if (id) query.set("id", id); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/home-config/list?${query}`, { + method: "GET" + }); +} +const PLAYLET_SEARCH_PAGE_SIZE = 24; +function fetchPlayletSearch(params) { + const keyword = params.keyword.trim().slice(0, 100); + if (!keyword) return Promise.reject(new Error("缺少搜索关键词")); + const pageNum = params.pageNum ?? 1; + const pageSize = params.pageSize ?? PLAYLET_SEARCH_PAGE_SIZE; + const query = new URLSearchParams({ + keyword, + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/search?${query}`, { + method: "GET" + }); +} +function fetchPlayletSearchSuggest(keyword) { + const value = keyword.trim().slice(0, 100); + if (!value) return Promise.reject(new Error("缺少搜索关键词")); + const query = new URLSearchParams({ + keyword: value + }); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/search/suggest?${query}`, { + method: "GET" + }); +} +function fetchPlayletHotLike() { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])("/api/app/playlet/hot-like", { + method: "GET" + }); +} +const PLAYLET_GUESS_LIKE_PAGE_SIZE = 3; +let seedPlayletId = null; +let seedPlayletPromise = null; +/** 不在短剧页时,用首页 banner 的短剧作为猜你喜欢的当前剧。 */ function loadSeedPlayletId() { + if (seedPlayletId) return Promise.resolve(seedPlayletId); + if (!seedPlayletPromise) { + seedPlayletPromise = fetchPlayletHome().then((data)=>{ + const seeded = data.homeBannerData?.find((item)=>item?.id)?.id || data.modules?.flatMap((item)=>item.list || []).find((item)=>item?.id)?.id || null; + seedPlayletId = seeded; + return seeded; + }).catch(()=>{ + seedPlayletPromise = null; + return null; + }); + } + return seedPlayletPromise; +} +async function resolveGuessLikePlayletId(routeKey) { + const key = routeKey.trim(); + if (/^\d+$/.test(key)) return Number(key); + if (key) { + const detail = await fetchPlayletDetail({ + key + }); + return detail.id || null; + } + return loadSeedPlayletId(); +} +function fetchPlayletGuessLike(params) { + if (!params.playletId) return Promise.reject(new Error("缺少短剧 id")); + const pageNum = params.pageNum ?? 1; + const pageSize = params.pageSize ?? PLAYLET_GUESS_LIKE_PAGE_SIZE; + const query = new URLSearchParams({ + playletId: String(params.playletId), + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/guess-like/list?${query}`, { + method: "GET" + }); +} +}), +"[project]/src/lib/api/sdk-common.ts [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** 服务端 X-SDK-Common:UTF-8 JSON 的标准 Base64。只放 SDK 会解析的字段。 */ __turbopack_context__.s([ + "encodeSdkCommon", + ()=>encodeSdkCommon +]); +function encodeSdkCommon(fields) { + const payload = { + sid: fields.sid || "", + device_id: fields.device_id || "", + device: fields.device || "", + device_fingerprint: fields.device_fingerprint || "", + fp_version: fields.fp_version || "", + app_version: fields.app_version || "" + }; + const bytes = new TextEncoder().encode(JSON.stringify(payload)); + let binary = ""; + for (const byte of bytes)binary += String.fromCharCode(byte); + return btoa(binary); +} +}), +"[project]/src/lib/api/sdk-headers.ts [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "browserTrackingHeaders", + ()=>browserTrackingHeaders +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2d$headers$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/client-headers.ts [app-rsc] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$sdk$2d$common$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/sdk-common.ts [app-rsc] (ecmascript)"); +; +; +async function browserTrackingHeaders(devID = "") { + return { + ...(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2d$headers$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["buildBrowserApiHeaders"])(devID, ""), + "X-SDK-Common": (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$sdk$2d$common$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["encodeSdkCommon"])({ + sid: "", + device_id: devID, + app_version: "1.0.0" + }) + }; +} +}), +"[project]/src/lib/channel-routes.ts [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** 频道列表路径:英文 slug + /page/{n},不用 query。 */ __turbopack_context__.s([ + "DEFAULT_OPERATE_FILTER", + ()=>DEFAULT_OPERATE_FILTER, + "DEFAULT_RANK_FILTER", + ()=>DEFAULT_RANK_FILTER, + "OPERATE_FILTERS", + ()=>OPERATE_FILTERS, + "OPERATE_FILTER_LABELS", + ()=>OPERATE_FILTER_LABELS, + "RANK_FILTERS", + ()=>RANK_FILTERS, + "RANK_FILTER_LABELS", + ()=>RANK_FILTER_LABELS, + "SHORTS_RESERVED_FILTERS", + ()=>SHORTS_RESERVED_FILTERS, + "operateFilterByLabel", + ()=>operateFilterByLabel, + "operateFilterBySlug", + ()=>operateFilterBySlug, + "operateListPath", + ()=>operateListPath, + "parseChannelPage", + ()=>parseChannelPage, + "parseDetailPageSegments", + ()=>parseDetailPageSegments, + "parseOperatePathSegments", + ()=>parseOperatePathSegments, + "parseRankPathSegments", + ()=>parseRankPathSegments, + "parseTopicsPathSegments", + ()=>parseTopicsPathSegments, + "rankFilterByLabel", + ()=>rankFilterByLabel, + "rankFilterBySlug", + ()=>rankFilterBySlug, + "rankListPath", + ()=>rankListPath, + "shortsMorePath", + ()=>shortsMorePath, + "topicDetailPath", + ()=>topicDetailPath, + "topicTagPath", + ()=>topicTagPath, + "topicsListPath", + ()=>topicsListPath +]); +const OPERATE_FILTERS = [ + { + slug: "latest", + label: "最新更新", + type: 1 + }, + { + slug: "popular", + label: "当前热播", + type: 2 + }, + { + slug: "original", + label: "独家原创", + type: 3 + }, + { + slug: "random", + label: "随机推荐", + type: 4 + } +]; +const OPERATE_FILTER_LABELS = OPERATE_FILTERS.map((item)=>item.label); +const RANK_FILTERS = [ + { + slug: "hot", + label: "热播榜", + sortOrder: 1 + }, + { + slug: "new", + label: "新剧榜", + sortOrder: 2 + }, + { + slug: "binge", + label: "追剧榜", + sortOrder: 3 + } +]; +const RANK_FILTER_LABELS = RANK_FILTERS.map((item)=>item.label); +const DEFAULT_OPERATE_FILTER = "latest"; +const DEFAULT_RANK_FILTER = "hot"; +const SHORTS_RESERVED_FILTERS = new Set([ + "more", + "page" +]); +function parseChannelPage(raw) { + const page = Number(raw); + if (!Number.isFinite(page) || page < 1) return 0; + return Math.floor(page); +} +function parseOperatePathSegments(segments) { + const parts = segments ?? []; + if (parts.length === 0) { + return { + filterSlug: DEFAULT_OPERATE_FILTER, + pageNum: 1, + canonical: true + }; + } + if (parts.length === 2 && parts[0] === "page") { + const pageNum = parseChannelPage(parts[1]); + if (!pageNum) return null; + return { + filterSlug: DEFAULT_OPERATE_FILTER, + pageNum, + canonical: pageNum > 1 + }; + } + const filter = operateFilterBySlug(parts[0]); + if (!filter) return null; + if (parts.length === 1) { + return { + filterSlug: filter.slug, + pageNum: 1, + canonical: filter.slug !== DEFAULT_OPERATE_FILTER + }; + } + if (parts.length === 3 && parts[1] === "page") { + const pageNum = parseChannelPage(parts[2]); + if (!pageNum) return null; + return { + filterSlug: filter.slug, + pageNum, + canonical: filter.slug !== DEFAULT_OPERATE_FILTER && pageNum > 1 + }; + } + return null; +} +function parseRankPathSegments(segments) { + const parts = segments ?? []; + if (parts.length === 0) { + return { + filterSlug: DEFAULT_RANK_FILTER, + pageNum: 1, + canonical: true + }; + } + if (parts.length === 2 && parts[0] === "page") { + const pageNum = parseChannelPage(parts[1]); + if (!pageNum) return null; + return { + filterSlug: DEFAULT_RANK_FILTER, + pageNum, + canonical: pageNum > 1 + }; + } + const filter = rankFilterBySlug(parts[0]); + if (!filter) return null; + if (parts.length === 1) { + return { + filterSlug: filter.slug, + pageNum: 1, + canonical: filter.slug !== DEFAULT_RANK_FILTER + }; + } + if (parts.length === 3 && parts[1] === "page") { + const pageNum = parseChannelPage(parts[2]); + if (!pageNum) return null; + return { + filterSlug: filter.slug, + pageNum, + canonical: filter.slug !== DEFAULT_RANK_FILTER && pageNum > 1 + }; + } + return null; +} +function parseTopicsPathSegments(segments) { + const parts = segments ?? []; + if (parts.length === 0) return { + kind: "list", + pageNum: 1 + }; + if (parts[0] === "tag") return null; + if (parts.length === 2 && parts[0] === "page") { + const pageNum = parseChannelPage(parts[1]); + if (!pageNum) return null; + return { + kind: "list", + pageNum + }; + } + if (parts[0] === "page") return null; + if (parts.length === 1) return { + kind: "detail", + slug: parts[0], + pageNum: 1 + }; + if (parts.length === 3 && parts[1] === "page") { + const pageNum = parseChannelPage(parts[2]); + if (!pageNum) return null; + return { + kind: "detail", + slug: parts[0], + pageNum + }; + } + return null; +} +function parseDetailPageSegments(segments) { + const parts = segments ?? []; + if (parts.length === 0) return { + pageNum: 1, + canonical: true + }; + if (parts.length === 2 && parts[0] === "page") { + const pageNum = parseChannelPage(parts[1]); + if (!pageNum) return null; + return { + pageNum, + canonical: pageNum > 1 + }; + } + return null; +} +function operateFilterBySlug(slug) { + const key = (slug || DEFAULT_OPERATE_FILTER).trim(); + return OPERATE_FILTERS.find((item)=>item.slug === key) ?? null; +} +function operateFilterByLabel(label) { + return OPERATE_FILTERS.find((item)=>item.label === label) ?? OPERATE_FILTERS[0]; +} +function rankFilterBySlug(slug) { + const key = (slug || DEFAULT_RANK_FILTER).trim(); + return RANK_FILTERS.find((item)=>item.slug === key) ?? null; +} +function rankFilterByLabel(label) { + return RANK_FILTERS.find((item)=>item.label === label) ?? RANK_FILTERS[0]; +} +function operateListPath(base, filterSlug, page = 1) { + const filter = operateFilterBySlug(filterSlug) ?? OPERATE_FILTERS[0]; + const parts = [ + base + ]; + if (filter.slug !== DEFAULT_OPERATE_FILTER) parts.push(filter.slug); + if (page > 1) parts.push("page", String(page)); + return `/${parts.join("/")}`; +} +function rankListPath(filterSlug, page = 1) { + const filter = rankFilterBySlug(filterSlug) ?? RANK_FILTERS[0]; + const parts = [ + "rank" + ]; + if (filter.slug !== DEFAULT_RANK_FILTER) parts.push(filter.slug); + if (page > 1) parts.push("page", String(page)); + return `/${parts.join("/")}`; +} +function topicsListPath(page = 1) { + return page > 1 ? `/topics/page/${page}` : "/topics"; +} +function shortsMorePath(slug, page = 1) { + const base = `/shorts/more/${slug}`; + return page > 1 ? `${base}/page/${page}` : base; +} +function topicDetailPath(slug, page = 1) { + const base = `/topics/${slug}`; + return page > 1 ? `${base}/page/${page}` : base; +} +function topicTagPath(tag, page = 1) { + const segment = encodeURIComponent(tag); + const base = `/topics/tag/${segment}`; + return page > 1 ? `${base}/page/${page}` : base; +} +}), +"[project]/src/lib/media/playback.ts [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** 相对媒资走同域 /h5/m3u8/ 代理,保留签名查询参数(由 lib/media/proxy 转发)。 */ __turbopack_context__.s([ + "SHELL_BROWSER", + ()=>SHELL_BROWSER, + "isHLSURL", + ()=>isHLSURL, + "nativeHLS", + ()=>nativeHLS, + "resolvePlayURL", + ()=>resolvePlayURL +]); +function resolvePlayURL(value) { + const url = String(value ?? "").trim(); + if (!url) return ""; + if (/^(https?:\/\/|blob:|data:)/i.test(url)) return url; + if (url.startsWith("//")) return `https:${url}`; + const path = url.replace(/^\/+/, ""); + return "/" + (path.startsWith("h5/m3u8/") ? path : `h5/m3u8/${path}`); +} +const SHELL_BROWSER = /Quark|MQQBrowser|QQ\/|UCBrowser|UCWEB|MicroMessenger|baidubrowser|bdbrowser|BaiduHD|MiuiBrowser|HuaweiBrowser|HONORBrowser|HBPC|SogouMobileBrowser|VivoBrowser|HeyTapBrowser|OPPOBrowser|HeyTap|QihooBrowser|360Browser|360SE|360EE/i; +function nativeHLS(video, userAgent = navigator.userAgent) { + return !SHELL_BROWSER.test(userAgent) && /Safari/i.test(userAgent) && !/Chrome|Chromium|CriOS|Edg|OPR/i.test(userAgent) && !!video.canPlayType("application/vnd.apple.mpegurl"); +} +function isHLSURL(url) { + return /\.m3u8(?:[?#]|$)|\/h5\/m3u8\//i.test(url); +} +}), +"[project]/src/lib/playlet-display.ts [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "formatHeatValue", + ()=>formatHeatValue, + "playletCoverBadge", + ()=>playletCoverBadge, + "playletHref", + ()=>playletHref, + "playletPlayBase", + ()=>playletPlayBase, + "playletPlayHref", + ()=>playletPlayHref, + "playletTagHref", + ()=>playletTagHref, + "playletTagLinks", + ()=>playletTagLinks, + "resolvePlayletEpisodeLabelTotal", + ()=>resolvePlayletEpisodeLabelTotal, + "resolvePlayletEpisodeTotal", + ()=>resolvePlayletEpisodeTotal +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$channel$2d$routes$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/channel-routes.ts [app-rsc] (ecmascript)"); +; +function playletKey(item) { + return encodeURIComponent(item.slug?.trim() || String(item.id)); +} +function playletHref(item) { + return `/drama/${playletKey(item)}`; +} +function playletPlayBase(item) { + return `/play/${playletKey(item)}`; +} +function playletPlayHref(item, episode) { + return `${playletPlayBase(item)}/${episode}`; +} +function playletTagLinks(item, limit = 2) { + const useTags = (item.tagNames || []).some(Boolean); + const names = (useTags ? item.tagNames : item.themeNames) || []; + const slugs = (useTags ? item.tagSlugs : item.themeSlugs) || []; + const ids = (useTags ? item.tagIds : item.themeIds) || []; + const kind = useTags ? "tag" : "theme"; + const links = []; + for(let i = 0; i < names.length && links.length < limit; i += 1){ + const label = names[i]?.trim(); + if (!label) continue; + const slug = slugs[i]?.trim(); + const id = ids[i]; + const key = slug || (id != null && id !== 0 ? String(id) : ""); + if (!key) continue; + links.push({ + label, + key, + kind + }); + } + return links; +} +function playletTagHref(tag) { + return tag.kind === "theme" ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$channel$2d$routes$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["topicDetailPath"])(tag.key) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$channel$2d$routes$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["topicTagPath"])(tag.key); +} +function resolvePlayletEpisodeTotal(detail) { + const chapters = detail.playletChapterInfo || []; + let maxEp = 0; + for (const chapter of chapters){ + const ep = Number(chapter.currentEpisode) || 0; + if (ep > maxEp) maxEp = ep; + } + if (maxEp > 0) return maxEp; + return Math.max(1, Number(detail.totalEpisode) || 0, chapters.length || 0, 1); +} +function resolvePlayletEpisodeLabelTotal(detail) { + const advertised = Number(detail.totalEpisode) || 0; + if (advertised > 0) return advertised; + return resolvePlayletEpisodeTotal(detail); +} +function formatHeatValue(value) { + if (value == null || Number.isNaN(value)) return "0"; + if (value >= 10_000) { + const wan = value / 10_000; + return `${wan >= 10 ? wan.toFixed(0) : wan.toFixed(1).replace(/\.0$/, "")}万`; + } + return value.toLocaleString("zh-CN"); +} +function playletCoverBadge(item) { + if (item.isRecommend) return { + kind: "free", + label: "原创" + }; + if (item.isFeatured) return { + kind: "hot", + label: "爆剧" + }; + if (item.isNew) return { + kind: "new", + label: "新剧" + }; + return null; +} +}), +"[project]/src/lib/playlet/card.ts [app-rsc] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "playletToDrama", + ()=>playletToDrama, + "themeCardCover", + ()=>themeCardCover, + "topicThemeToCollection", + ()=>topicThemeToCollection, + "topicToCollection", + ()=>topicToCollection +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/playlet-display.ts [app-rsc] (ecmascript)"); +; +function playletToDrama(item) { + const badge = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["playletCoverBadge"])(item); + const tagLinks = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["playletTagLinks"])(item, 4); + const chapters = item.playletChapterInfo; + const firstEpisode = chapters?.find((chapter)=>chapter.canWatch)?.currentEpisode || chapters?.[0]?.currentEpisode || 1; + return { + id: item.id, + routeKey: item.slug?.trim() || String(item.id), + title: item.title || item.playName || "未命名", + genre: item.themeNames?.find(Boolean) || item.tagNames?.find(Boolean) || "", + heat: "", + heatText: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["formatHeatValue"])(item.heatValue), + eps: item.totalEpisode || 0, + mode: "免费", + desc: item.desc || item.description || "", + badge: badge?.label ?? "", + badgeType: badge?.kind || "", + tags: tagLinks.map((tag)=>tag.label), + tagLinks, + likes: item.countLike || 0, + likeText: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["formatHeatValue"])(item.countLike), + favorites: item.countCollect || 0, + favoriteText: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["formatHeatValue"])(item.countCollect), + sample: false, + coverUrl: item.cover || item.horizontalCover || item.banner || "", + firstEpisode, + finished: item.updateStatus === 2, + isLike: item.isLike === 1, + isCollect: item.isCollect === 1 + }; +} +function firstImage(values) { + return values.find((value)=>value?.trim())?.trim() || ""; +} +function themeCardCover(list) { + for (const item of list || []){ + const src = firstImage([ + item?.horizontalCover, + item?.cover, + item?.banner + ]); + if (src) return src; + } + return ""; +} +function topicToCollection(item) { + const iconUrl = item.icon?.trim() || ""; + const photo = firstImage([ + ...item.covers || [], + item.cover + ]); + return { + key: item.slug?.trim() || String(item.id), + title: item.name || "专题", + subtitle: item.desc || "", + ids: [], + coverId: 0, + coverUrl: iconUrl || photo, + iconUrl: "", + count: item.playletCount || 0 + }; +} +function topicThemeToCollection(item) { + return topicToCollection({ + id: item.id, + name: item.name, + desc: "", + slug: item.slug, + icon: item.icon, + covers: [], + cover: themeCardCover(item.list), + playletCount: item.playletCount + }); +} +}), +]})(), +"[externals]/next/dist/server/app-render/module-loading/track-module-loading.external.js [external] (next/dist/server/app-render/module-loading/track-module-loading.external.js, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/server/app-render/module-loading/track-module-loading.external.js", () => require("next/dist/server/app-render/module-loading/track-module-loading.external.js")); + +module.exports = mod; +}), +"[externals]/next/dist/shared/lib/no-fallback-error.external.js [external] (next/dist/shared/lib/no-fallback-error.external.js, cjs)", ((__turbopack_context__, module, exports) => { + +var mod = __turbopack_context__.x("next/dist/shared/lib/no-fallback-error.external.js", () => require("next/dist/shared/lib/no-fallback-error.external.js")); + +module.exports = mod; +}), +"[project]/src/app/play/[id]/[episode]/page.tsx [app-rsc] (ecmascript, Next.js Server Component)", (function(__turbopack_context__){ + +__turbopack_context__.n(__turbopack_context__.i("[project]/src/app/play/[id]/[episode]/page.tsx [app-rsc] (ecmascript)")); +}), +]; + +//# sourceMappingURL=%5Broot-of-the-server%5D__1trcdg5d06d62._.js.map \ No newline at end of file diff --git a/.next-dev/dev/server/chunks/ssr/[root-of-the-server]__1trcdg5d06d62._.js.map b/.next-dev/dev/server/chunks/ssr/[root-of-the-server]__1trcdg5d06d62._.js.map new file mode 100644 index 0000000..8336d37 --- /dev/null +++ b/.next-dev/dev/server/chunks/ssr/[root-of-the-server]__1trcdg5d06d62._.js.map @@ -0,0 +1,36 @@ +{ + "version": 3, + "sources": [], + "sections": [ + {"offset": {"line": 5, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/app/play/[id]/[episode]/page.tsx"],"sourcesContent":["import type { Metadata } from \"next\";\nimport { Suspense } from \"react\";\nimport { connection } from \"next/server\";\nimport { notFound, redirect } from \"next/navigation\";\nimport { ListLoading } from \"@/components/common/ListLoading\";\n\nimport { JsonLd } from \"@/components/site/json-ld\";\nimport { PlayPage } from \"@/components/play/play-page\";\nimport { getAppConfigInfo } from \"@/lib/api/app-config-server\";\nimport { getPlayletChapterDetail, getPlayletDetail, getPlayletGuessLike } from \"@/lib/api/playlet-server\";\nimport { playletHref, playletPlayHref, resolvePlayletEpisodeTotal } from \"@/lib/playlet-display\";\nimport { buildPlayletPlayJSONLD, resolveContentMetadata } from \"@/lib/seo\";\n\nexport const instant = false;\n\ntype Params = { id: string; episode: string };\n\nexport async function generateMetadata({ params }: { params: Promise }): Promise {\n const { id, episode } = await params;\n const key = decodeURIComponent(id).trim();\n const { data } = await getPlayletDetail({ key });\n if (!data?.id) notFound();\n const name = data.title || data.playName || \"短剧\";\n const current = Number(episode);\n const episodeNo = Number.isInteger(current) && current > 0 ? current : 1;\n const summary = data.playletChapterInfo?.find((item) => item.currentEpisode === episodeNo);\n if (!summary) notFound();\n return resolveContentMetadata({\n seoInfo: data?.seoInfo ? { description: data.seoInfo.description, keywords: data.seoInfo.keywords } : undefined,\n fallbackTitle: `${name} 第${episodeNo}集`,\n fallbackDescription: data?.desc || data?.description || `正在播放《${name}》第${episodeNo}集`,\n canonical: playletPlayHref(data ?? { id: 0, slug: key }, episodeNo),\n ogType: \"video.episode\",\n });\n}\n\nexport default function EpisodePage({ params }: { params: Promise }) {\n return (\n }>\n \n \n );\n}\n\nasync function EpisodeContent({ params }: { params: Promise }) {\n await connection();\n const { id, episode } = await params;\n const key = decodeURIComponent(id).trim();\n const current = Number(episode);\n if (!Number.isInteger(current) || current < 1) notFound();\n const { data } = await getPlayletDetail({ key });\n if (!data?.id) notFound();\n const total = resolvePlayletEpisodeTotal(data);\n const chapters = data.playletChapterInfo || [];\n const summary = chapters.find((item) => item.currentEpisode === current);\n if (!summary) {\n // 超出声明总集数时落到列表中真实存在的最后一集;否则真 404,避免软 404。\n if (current > total && chapters.length) {\n const last = chapters.reduce((a, b) => (a.currentEpisode >= b.currentEpisode ? a : b));\n if (last.currentEpisode !== current) redirect(playletPlayHref(data, last.currentEpisode));\n }\n notFound();\n }\n const chapter = await getPlayletChapterDetail({\n chapterId: summary.id,\n playletSlug: data.slug?.trim() || undefined,\n playletId: data.id,\n });\n const [recommend, config] = await Promise.all([\n getPlayletGuessLike({ playletId: data.id }),\n getAppConfigInfo(),\n ]);\n return (\n <>\n \n \n \n );\n}\n"],"names":["instant","generateMetadata","params","id","episode","key","decodeURIComponent","trim","data","name","title","playName","current","Number","episodeNo","isInteger","summary","playletChapterInfo","find","item","currentEpisode","seoInfo","description","keywords","undefined","fallbackTitle","fallbackDescription","desc","canonical","slug","ogType","EpisodePage","fallback","label","EpisodeContent","total","chapters","length","last","reduce","a","b","chapter","chapterId","playletSlug","playletId","recommend","config","Promise","all","path","playPath","cover","totalEpisode","tagNames","themeNames","onlineAt","videoUrl","detail","chapterError","error","ads","advitise"],"mappings":";;;;;;;;;;;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;;;;;;;;;;;AAEO,MAAMA,UAAU;AAIhB,eAAeC,iBAAiB,EAAEC,MAAM,EAA+B;IAC5E,MAAM,EAAEC,EAAE,EAAEC,OAAO,EAAE,GAAG,MAAMF;IAC9B,MAAMG,MAAMC,mBAAmBH,IAAII,IAAI;IACvC,MAAM,EAAEC,IAAI,EAAE,GAAG,MAAM,IAAA,0JAAgB,EAAC;QAAEH;IAAI;IAC9C,IAAI,CAACG,MAAML,IAAI,IAAA,iMAAQ;IACvB,MAAMM,OAAOD,KAAKE,KAAK,IAAIF,KAAKG,QAAQ,IAAI;IAC5C,MAAMC,UAAUC,OAAOT;IACvB,MAAMU,YAAYD,OAAOE,SAAS,CAACH,YAAYA,UAAU,IAAIA,UAAU;IACvE,MAAMI,UAAUR,KAAKS,kBAAkB,EAAEC,KAAK,CAACC,OAASA,KAAKC,cAAc,KAAKN;IAChF,IAAI,CAACE,SAAS,IAAA,iMAAQ;IACtB,OAAO,IAAA,sJAAsB,EAAC;QAC5BK,SAASb,MAAMa,UAAU;YAAEC,aAAad,KAAKa,OAAO,CAACC,WAAW;YAAEC,UAAUf,KAAKa,OAAO,CAACE,QAAQ;QAAC,IAAIC;QACtGC,eAAe,GAAGhB,KAAK,EAAE,EAAEK,UAAU,CAAC,CAAC;QACvCY,qBAAqBlB,MAAMmB,QAAQnB,MAAMc,eAAe,CAAC,KAAK,EAAEb,KAAK,EAAE,EAAEK,UAAU,CAAC,CAAC;QACrFc,WAAW,IAAA,mJAAe,EAACpB,QAAQ;YAAEL,IAAI;YAAG0B,MAAMxB;QAAI,GAAGS;QACzDgB,QAAQ;IACV;AACF;AAEe,SAASC,YAAY,EAAE7B,MAAM,EAA+B;IACzE,qBACE,8OAAC,iNAAQ;QAAC8B,wBAAU,8OAAC,0JAAW;YAACC,OAAM;;;;;;kBACrC,cAAA,8OAACC;YAAehC,QAAQA;;;;;;;;;;;AAG9B;AAEA,eAAegC,eAAe,EAAEhC,MAAM,EAA+B;IACnE,MAAM,IAAA,4IAAU;IAChB,MAAM,EAAEC,EAAE,EAAEC,OAAO,EAAE,GAAG,MAAMF;IAC9B,MAAMG,MAAMC,mBAAmBH,IAAII,IAAI;IACvC,MAAMK,UAAUC,OAAOT;IACvB,IAAI,CAACS,OAAOE,SAAS,CAACH,YAAYA,UAAU,GAAG,IAAA,iMAAQ;IACvD,MAAM,EAAEJ,IAAI,EAAE,GAAG,MAAM,IAAA,0JAAgB,EAAC;QAAEH;IAAI;IAC9C,IAAI,CAACG,MAAML,IAAI,IAAA,iMAAQ;IACvB,MAAMgC,QAAQ,IAAA,8JAA0B,EAAC3B;IACzC,MAAM4B,WAAW5B,KAAKS,kBAAkB,IAAI,EAAE;IAC9C,MAAMD,UAAUoB,SAASlB,IAAI,CAAC,CAACC,OAASA,KAAKC,cAAc,KAAKR;IAChE,IAAI,CAACI,SAAS;QACZ,0CAA0C;QAC1C,IAAIJ,UAAUuB,SAASC,SAASC,MAAM,EAAE;YACtC,MAAMC,OAAOF,SAASG,MAAM,CAAC,CAACC,GAAGC,IAAOD,EAAEpB,cAAc,IAAIqB,EAAErB,cAAc,GAAGoB,IAAIC;YACnF,IAAIH,KAAKlB,cAAc,KAAKR,SAAS,IAAA,iMAAQ,EAAC,IAAA,mJAAe,EAACJ,MAAM8B,KAAKlB,cAAc;QACzF;QACA,IAAA,iMAAQ;IACV;IACA,MAAMsB,UAAU,MAAM,IAAA,iKAAuB,EAAC;QAC5CC,WAAW3B,QAAQb,EAAE;QACrByC,aAAapC,KAAKqB,IAAI,EAAEtB,UAAUiB;QAClCqB,WAAWrC,KAAKL,EAAE;IACpB;IACA,MAAM,CAAC2C,WAAWC,OAAO,GAAG,MAAMC,QAAQC,GAAG,CAAC;QAC5C,IAAA,6JAAmB,EAAC;YAAEJ,WAAWrC,KAAKL,EAAE;QAAC;QACzC,IAAA,gKAAgB;KACjB;IACD,qBACE;;0BACE,8OAAC,kJAAM;gBACLK,MAAM,IAAA,qJAAsB,EAAC;oBAC3B0C,MAAM,IAAA,+IAAW,EAAC1C;oBAClB2C,UAAU,IAAA,mJAAe,EAAC3C,MAAMI;oBAChCR,SAASQ;oBACTF,OAAOF,KAAKE,KAAK,IAAIF,KAAKG,QAAQ;oBAClCW,aAAad,KAAKmB,IAAI,IAAInB,KAAKc,WAAW;oBAC1C8B,OAAO5C,KAAK4C,KAAK;oBACjB/B,SAASb,KAAKa,OAAO;oBACrBgC,cAAc7C,KAAK6C,YAAY;oBAC/BC,UAAU9C,KAAK8C,QAAQ;oBACvBC,YAAY/C,KAAK+C,UAAU;oBAC3BC,UAAUhD,KAAKgD,QAAQ;oBACvBC,UAAUf,QAAQlC,IAAI,EAAEiD;gBAC1B;;;;;;0BAEF,8OAAC,sJAAQ;gBACPC,QAAQlD;gBACRsC,WAAWA;gBACX1C,SAASQ;gBACT8B,SAASA,QAAQlC,IAAI;gBACrBmD,cAAcjB,QAAQkB,KAAK;gBAC3BC,KAAKd,OAAOvC,IAAI,EAAEsD;;;;;;;;;;;;AAI1B;gFAvFuB;kBAAA"}}, + {"offset": {"line": 171, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/common/promo-marquee.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20=%3E%20%22[project]/src/components/common/promo-marquee.tsx%22%20%7D"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const PromoMarquee = registerClientReference(\n function() { throw new Error(\"Attempted to call PromoMarquee() from the server but PromoMarquee is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/common/promo-marquee.tsx\",\n \"PromoMarquee\",\n);\n"],"names":["PromoMarquee","Error"],"mappings":";;;;AAAA,uEAAuE;AACvE;;AACO,MAAMA,eAAe,IAAA,wQAAuB,EAC/C;IAAa,MAAM,IAAIC,MAAM;AAAwO,GACrQ,qDACA","ignoreList":[0]}}, + {"offset": {"line": 185, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 192, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/common/wide-ad-row.tsx"],"sourcesContent":["import Link from \"next/link\";\n\nimport { DecryptedImage } from \"@/components/common/decrypted-image\";\nimport type { AdvitiseInfo } from \"@/lib/api/types\";\n\nexport type WideAdItem = {\n src: string;\n alt?: string;\n href?: string;\n width?: number;\n height?: number;\n};\n\nexport const defaultWideAds: WideAdItem[] = [\n { src: \"/images/banners/0.png\", alt: \"推广广告 1\" },\n { src: \"/images/banners/1.png\", alt: \"推广广告 2\" },\n];\n\nfunction httpAdUrl(link: string | undefined) {\n const value = link?.trim();\n if (!value) return \"\";\n try {\n const url = new URL(value);\n if (url.protocol === \"http:\" || url.protocol === \"https:\") return url.toString();\n } catch {\n return \"\";\n }\n return \"\";\n}\n\nexport function WideAdRow({\n items = defaultWideAds,\n ads,\n label = \"推广广告\",\n className,\n}: {\n items?: WideAdItem[];\n ads?: AdvitiseInfo[];\n label?: string;\n className?: string;\n}) {\n const rootClass = className ? `wide-ad-row ${className}` : \"wide-ad-row\";\n if (ads) {\n const seen = new Set();\n const visible = ads\n .filter((item) => {\n const src = item.images?.trim();\n if (!src || seen.has(src)) return false;\n seen.add(src);\n return true;\n })\n .slice(0, 2);\n if (!visible.length) return null;\n return (\n
\n {visible.map((item, index) => {\n const href = httpAdUrl(item.link);\n const image = ;\n if (!href) {\n return (\n
\n {image}\n
\n );\n }\n return (\n \n {image}\n \n );\n })}\n
\n );\n }\n\n if (!items.length) return null;\n return (\n
\n {items.map((item, index) => {\n const image = (\n \n );\n if (item.href) {\n return (\n \n {image}\n \n );\n }\n return (\n
\n {image}\n
\n );\n })}\n
\n );\n}\n"],"names":["defaultWideAds","src","alt","httpAdUrl","link","value","trim","url","URL","protocol","toString","WideAdRow","items","ads","label","className","rootClass","seen","Set","visible","filter","item","images","has","add","slice","length","map","index","href","image","title","width","height","id","target","rel"],"mappings":";;;;;;;AAAA;AAEA;;;;AAWO,MAAMA,iBAA+B;IAC1C;QAAEC,KAAK;QAAyBC,KAAK;IAAS;IAC9C;QAAED,KAAK;QAAyBC,KAAK;IAAS;CAC/C;AAED,SAASC,UAAUC,IAAwB;IACzC,MAAMC,QAAQD,MAAME;IACpB,IAAI,CAACD,OAAO,OAAO;IACnB,IAAI;QACF,MAAME,MAAM,IAAIC,IAAIH;QACpB,IAAIE,IAAIE,QAAQ,KAAK,WAAWF,IAAIE,QAAQ,KAAK,UAAU,OAAOF,IAAIG,QAAQ;IAChF,EAAE,OAAM;QACN,OAAO;IACT;IACA,OAAO;AACT;AAEO,SAASC,UAAU,EACxBC,QAAQZ,cAAc,EACtBa,GAAG,EACHC,QAAQ,MAAM,EACdC,SAAS,EAMV;IACC,MAAMC,YAAYD,YAAY,CAAC,YAAY,EAAEA,WAAW,GAAG;IAC3D,IAAIF,KAAK;QACP,MAAMI,OAAO,IAAIC;QACjB,MAAMC,UAAUN,IACbO,MAAM,CAAC,CAACC;YACP,MAAMpB,MAAMoB,KAAKC,MAAM,EAAEhB;YACzB,IAAI,CAACL,OAAOgB,KAAKM,GAAG,CAACtB,MAAM,OAAO;YAClCgB,KAAKO,GAAG,CAACvB;YACT,OAAO;QACT,GACCwB,KAAK,CAAC,GAAG;QACZ,IAAI,CAACN,QAAQO,MAAM,EAAE,OAAO;QAC5B,qBACE,8OAAC;YAAQX,WAAWC;YAAW,cAAYF;sBACxCK,QAAQQ,GAAG,CAAC,CAACN,MAAMO;gBAClB,MAAMC,OAAO1B,UAAUkB,KAAKjB,IAAI;gBAChC,MAAM0B,sBAAQ,8OAAC,oKAAc;oBAAC7B,KAAKoB,KAAKC,MAAM;oBAAEpB,KAAKmB,KAAKU,KAAK,IAAI,CAAC,KAAK,EAAEH,QAAQ,GAAG;oBAAEI,OAAO;oBAAKC,QAAQ;;;;;;gBAC5G,IAAI,CAACJ,MAAM;oBACT,qBACE,8OAAC;wBAAOd,WAAU;kCACfe;uBAD8BT,KAAKa,EAAE,IAAIb,KAAKC,MAAM;;;;;gBAI3D;gBACA,qBACE,8OAAC;oBAAEP,WAAU;oBAAuCc,MAAMA;oBAAMM,QAAO;oBAASC,KAAI;8BACjFN;mBADyBT,KAAKa,EAAE,IAAIb,KAAKC,MAAM;;;;;YAItD;;;;;;IAGN;IAEA,IAAI,CAACV,MAAMc,MAAM,EAAE,OAAO;IAC1B,qBACE,8OAAC;QAAQX,WAAWC;QAAW,cAAYF;kBACxCF,MAAMe,GAAG,CAAC,CAACN,MAAMO;YAChB,MAAME,sBACJ,8OAAC;gBACC7B,KAAKoB,KAAKpB,GAAG;gBACbC,KAAKmB,KAAKnB,GAAG,IAAI,CAAC,KAAK,EAAE0B,QAAQ,GAAG;gBACpCI,OAAOX,KAAKW,KAAK,IAAI;gBACrBC,QAAQZ,KAAKY,MAAM,IAAI;;;;;;YAG3B,IAAIZ,KAAKQ,IAAI,EAAE;gBACb,qBACE,8OAAC,0LAAI;oBAA8Bd,WAAU;oBAAUc,MAAMR,KAAKQ,IAAI;8BACnEC;mBADQ,GAAGT,KAAKpB,GAAG,CAAC,CAAC,EAAE2B,OAAO;;;;;YAIrC;YACA,qBACE,8OAAC;gBAAoCb,WAAU;0BAC5Ce;eADU,GAAGT,KAAKpB,GAAG,CAAC,CAAC,EAAE2B,OAAO;;;;;QAIvC;;;;;;AAGN"}}, + {"offset": {"line": 324, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/drama/breadcrumb.tsx"],"sourcesContent":["import Link from \"next/link\";\n\nimport type { Crumb } from \"@/lib/catalog/types\";\n\nexport function Breadcrumb({ items }: { items: Crumb[] }) {\n return (\n \n );\n}\n"],"names":["Breadcrumb","items","className","map","item","index","style","display","href","label"],"mappings":";;;;;AAAA;;;AAIO,SAASA,WAAW,EAAEC,KAAK,EAAsB;IACtD,qBACE,8OAAC;QAAIC,WAAU;QAAkB,cAAW;kBACzCD,MAAME,GAAG,CAAC,CAACC,MAAMC,sBAChB,8OAAC;gBAAoCC,OAAO;oBAAEC,SAAS;gBAAW;;oBAC/DF,QAAQ,kBACP,8OAAC;wBAAKH,WAAU;wBAAuB,eAAY;kCAAO;;;;;+BAGxD;oBACHE,KAAKI,IAAI,iBAAG,8OAAC,0LAAI;wBAACA,MAAMJ,KAAKI,IAAI;kCAAGJ,KAAKK,KAAK;;;;;6CAAW,8OAAC;wBAAK,gBAAa;kCAAQL,KAAKK,KAAK;;;;;;;eANtF,GAAGL,KAAKK,KAAK,CAAC,CAAC,EAAEJ,OAAO;;;;;;;;;;AAW3C"}}, + {"offset": {"line": 381, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/drama/card-tags.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20=%3E%20%22[project]/src/components/drama/card-tags.tsx%22%20%7D"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const CardTags = registerClientReference(\n function() { throw new Error(\"Attempted to call CardTags() from the server but CardTags is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/drama/card-tags.tsx\",\n \"CardTags\",\n);\n"],"names":["CardTags","Error"],"mappings":";;;;AAAA,uEAAuE;AACvE;;AACO,MAAMA,WAAW,IAAA,wQAAuB,EAC3C;IAAa,MAAM,IAAIC,MAAM;AAAgO,GAC7P,gDACA","ignoreList":[0]}}, + {"offset": {"line": 395, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 402, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/drama/drama-badge.tsx"],"sourcesContent":["import type { BadgeLabel, BadgeType, Drama } from \"@/lib/catalog/types\";\n\nexport type DramaBadgeVariant = \"corner\" | \"series\";\n\ntype DramaBadgeSource = Pick | { badge: BadgeLabel | string; badgeType: BadgeType };\n\nexport function DramaBadge({\n badge,\n badgeType,\n drama,\n variant = \"corner\",\n className,\n}: {\n badge?: BadgeLabel | string;\n badgeType?: BadgeType;\n drama?: DramaBadgeSource;\n /** corner = 列表封面右上角;series = 详情/播放页标签 */\n variant?: DramaBadgeVariant;\n className?: string;\n}) {\n const label = badge ?? drama?.badge;\n const type = badgeType ?? drama?.badgeType;\n if (!label || !type) return null;\n\n const base = variant === \"series\" ? \"series-badge\" : \"cover-corner-badge\";\n const classes = className ? `${base} ${base}--${type} ${className}` : `${base} ${base}--${type}`;\n\n return {label};\n}\n"],"names":["DramaBadge","badge","badgeType","drama","variant","className","label","type","base","classes"],"mappings":";;;;;;AAMO,SAASA,WAAW,EACzBC,KAAK,EACLC,SAAS,EACTC,KAAK,EACLC,UAAU,QAAQ,EAClBC,SAAS,EAQV;IACC,MAAMC,QAAQL,SAASE,OAAOF;IAC9B,MAAMM,OAAOL,aAAaC,OAAOD;IACjC,IAAI,CAACI,SAAS,CAACC,MAAM,OAAO;IAE5B,MAAMC,OAAOJ,YAAY,WAAW,iBAAiB;IACrD,MAAMK,UAAUJ,YAAY,GAAGG,KAAK,CAAC,EAAEA,KAAK,EAAE,EAAED,KAAK,CAAC,EAAEF,WAAW,GAAG,GAAGG,KAAK,CAAC,EAAEA,KAAK,EAAE,EAAED,MAAM;IAEhG,qBAAO,8OAAC;QAAKF,WAAWI;kBAAUH;;;;;;AACpC"}}, + {"offset": {"line": 427, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/drama/drama-card.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport Link from \"next/link\";\n\nimport { CardTags } from \"@/components/drama/card-tags\";\nimport { DramaBadge } from \"@/components/drama/drama-badge\";\nimport { Poster } from \"@/components/drama/poster\";\nimport type { Drama } from \"@/lib/catalog/types\";\nimport { routes } from \"@/lib/site/routes\";\n\nexport type CuratedRibbon = \"purple\" | \"orange\" | \"teal\" | \"red\";\n\ninterface DramaCardProps {\n drama: Drama;\n title?: ReactNode;\n /** 首页热榜用的 0-based 序号,走 ranked 卡片。 */\n rank?: number;\n /** 频道热榜的 1-based 名次。前三显示奖牌,其余不显示序号。 */\n listRank?: number;\n /** 今日推荐精选旗标配色。 */\n ribbon?: CuratedRibbon;\n variant?: \"card\" | \"curated\" | \"ranked\";\n}\n\nfunction heatLabel(drama: Drama) {\n return drama.heatText || `${drama.heat}万`;\n}\n\nfunction overlays(drama: Drama) {\n return (\n <>\n \n {drama.genre}\n {drama.eps}集\n \n );\n}\n\nfunction tags(drama: Drama) {\n return (drama.tagLinks || []).length ? (\n \n ) : (\n \n {drama.tags.slice(0, 2).map((tag) => (\n #{tag.replace(/^#/, \"\")}\n ))}\n \n );\n}\n\nfunction meta(drama: Drama) {\n return (\n \n {tags(drama)}\n \n \n \n \n {heatLabel(drama)}\n \n \n );\n}\n\nfunction HeatIcon() {\n return (\n \n \n \n );\n}\n\n/** 单集条目按「视频」展示,多集按「短剧」展示。 */\nexport function isSingleVideo(drama: Pick) {\n return (Number(drama.eps) || 0) <= 1;\n}\n\nfunction rankMedal(listRank: number) {\n if (listRank < 1 || listRank > 3) return null;\n return (\n \n TOP\n {String(listRank).padStart(2, \"0\")}\n \n );\n}\n\nexport function DramaCard({ drama, title, rank, listRank, ribbon, variant = \"card\" }: DramaCardProps) {\n const href = routes.drama(drama.routeKey || drama.id);\n const poster = (\n \n );\n const heading = title ?? drama.title;\n if (variant === \"curated\") {\n const desc = drama.desc?.trim() || \"\";\n const genre = drama.genre?.trim() || \"\";\n const pickLabel = genre ? `${genre}精选` : \"精选\";\n // 黄果版「猜你喜欢」:模糊海报氛围底 + 行内精选标签 + 底部操作栏,样式见 styles/pick-card.css\n return (\n \n \n {poster}\n \n \n {poster}\n {overlays(drama)}\n \n \n \n {pickLabel}\n \n \n {heatLabel(drama)}\n \n \n

{heading}

\n {desc ? {desc} : null}\n \n {tags(drama)}\n \n \n \n \n 立即观看\n \n \n
\n \n );\n }\n\n if (variant === \"ranked\" || rank !== undefined) {\n const place = (rank ?? 0) + 1;\n return (\n \n \n \n {poster}\n \n {overlays(drama)}\n \n {place}\n \n \n \n \n

{heading}

\n
\n
\n {meta(drama)}\n \n );\n }\n\n const video = isSingleVideo(drama);\n const total = Math.max(1, Number(drama.eps) || 1);\n const allTags = drama.tagLinks || [];\n const firstTag = allTags.find((tag) => tag.kind !== \"theme\") || allTags[0];\n const genre = drama.genre?.trim() || \"\";\n const segments = Math.min(total, 12);\n return (\n \n \n \n {drama.badge && drama.badgeType ? (\n \n {drama.badge}\n \n ) : null}\n {video ? (\n \n ▶ 单集\n \n ) : null}\n {listRank ? rankMedal(listRank) : null}\n \n {video ? null : {drama.finished ? `共${total}集` : `更至${total}集`}}\n

{heading}

\n \n 立即播放 →\n \n
\n {video ? null : (\n \n {Array.from({ length: segments }, (_, index) => (\n \n ))}\n \n )}\n
\n \n \n \n {heatLabel(drama)}\n \n {genre ? {genre} : null}\n {firstTag ? (\n \n ) : drama.tags[0] ? (\n \n #{drama.tags[0].replace(/^#/, \"\")}\n \n ) : null}\n \n \n );\n}\n"],"names":["heatLabel","drama","heatText","heat","overlays","className","genre","eps","tags","tagLinks","length","slice","map","tag","replace","meta","viewBox","d","HeatIcon","isSingleVideo","Number","rankMedal","listRank","String","padStart","DramaCard","title","rank","ribbon","variant","href","routeKey","id","poster","src","coverUrl","width","height","heading","desc","trim","pickLabel","undefined","place","video","total","Math","max","allTags","firstTag","find","kind","segments","min","badge","badgeType","finished","Array","from","_","index"],"mappings":"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"}}, + {"offset": {"line": 985, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/drama/poster.tsx"],"sourcesContent":["import { DecryptedImage } from \"@/components/common/decrypted-image\";\n\ninterface PosterProps {\n width: number;\n height: number;\n className?: string;\n alt?: string;\n src?: string;\n}\n\nexport function Poster({ width, height, className = \"poster-source\", alt = \"\", src }: PosterProps) {\n return ;\n}\n"],"names":["Poster","width","height","className","alt","src"],"mappings":";;;;;AAAA;;;AAUO,SAASA,OAAO,EAAEC,KAAK,EAAEC,MAAM,EAAEC,YAAY,eAAe,EAAEC,MAAM,EAAE,EAAEC,GAAG,EAAe;IAC/F,qBAAO,8OAAC,oKAAc;QAACF,WAAWA;QAAWE,KAAKA;QAAKJ,OAAOA;QAAOC,QAAQA;QAAQE,KAAKA;;;;;;AAC5F"}}, + {"offset": {"line": 1010, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/play/EpisodeBoard.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20=%3E%20%22[project]/src/components/play/EpisodeBoard.tsx%22%20%7D"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const EpisodeBoard = registerClientReference(\n function() { throw new Error(\"Attempted to call EpisodeBoard() from the server but EpisodeBoard is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/play/EpisodeBoard.tsx\",\n \"EpisodeBoard\",\n);\n"],"names":["EpisodeBoard","Error"],"mappings":";;;;AAAA,uEAAuE;AACvE;;AACO,MAAMA,eAAe,IAAA,wQAAuB,EAC/C;IAAa,MAAM,IAAIC,MAAM;AAAwO,GACrQ,kDACA","ignoreList":[0]}}, + {"offset": {"line": 1024, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 1031, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/play/PlayScreen.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20=%3E%20%22[project]/src/components/play/PlayScreen.tsx%22%20%7D"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const PlayScreen = registerClientReference(\n function() { throw new Error(\"Attempted to call PlayScreen() from the server but PlayScreen is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/play/PlayScreen.tsx\",\n \"PlayScreen\",\n);\n"],"names":["PlayScreen","Error"],"mappings":";;;;AAAA,uEAAuE;AACvE;;AACO,MAAMA,aAAa,IAAA,wQAAuB,EAC7C;IAAa,MAAM,IAAIC,MAAM;AAAoO,GACjQ,gDACA","ignoreList":[0]}}, + {"offset": {"line": 1045, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 1052, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/play/play-detail-actions.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20=%3E%20%22[project]/src/components/play/play-detail-actions.tsx%22%20%7D"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const PlayDetailActions = registerClientReference(\n function() { throw new Error(\"Attempted to call PlayDetailActions() from the server but PlayDetailActions is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/play/play-detail-actions.tsx\",\n \"PlayDetailActions\",\n);\n"],"names":["PlayDetailActions","Error"],"mappings":";;;;AAAA,uEAAuE;AACvE;;AACO,MAAMA,oBAAoB,IAAA,wQAAuB,EACpD;IAAa,MAAM,IAAIC,MAAM;AAAkP,GAC/Q,yDACA","ignoreList":[0]}}, + {"offset": {"line": 1066, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 1073, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/play/play-official.tsx"],"sourcesContent":["import { getAppConfigInfo } from \"@/lib/api/app-config-server\";\n\nfunction field(value?: string) {\n return value?.trim() || \"\";\n}\n\nfunction externalHref(value: string) {\n if (/^https?:\\/\\//i.test(value) || value.startsWith(\"mailto:\")) return value;\n if (value.includes(\"@\") && !/\\s/.test(value)) return `mailto:${value}`;\n return value;\n}\n\nfunction OfficialAnchor({ href, children }: { href: string; children: string }) {\n const url = externalHref(href);\n const external = /^https?:\\/\\//i.test(url);\n return (\n \n {children}\n \n );\n}\n\n/** 详情/播放页官方信息,结构对齐源文件,地址来自公共配置。 */\nexport async function PlayOfficial() {\n const { data } = await getAppConfigInfo();\n const config = data?.config;\n const webAddr = field(config?.webAddr);\n const foreverUrlAddr = field(config?.foreverUrlAddr);\n const tgGroup = field(config?.tgGroup);\n const siteName = field(config?.webSiteName) || \"黄果短剧\";\n if (!webAddr && !foreverUrlAddr && !tgGroup) return null;\n\n return (\n
\n {webAddr ? (\n
\n 官方入口:\n {webAddr}\n
\n ) : null}\n {foreverUrlAddr ? (\n
\n 海外永久地址:\n {foreverUrlAddr}\n
\n ) : null}\n {tgGroup ? (\n
\n {`点击加入${siteName}官方 Telegram 群`}\n
\n ) : null}\n
\n );\n}\n"],"names":["field","value","trim","externalHref","test","startsWith","includes","OfficialAnchor","href","children","url","external","target","undefined","rel","PlayOfficial","data","config","webAddr","foreverUrlAddr","tgGroup","siteName","webSiteName","className"],"mappings":";;;;;AAAA;;;AAEA,SAASA,MAAMC,KAAc;IAC3B,OAAOA,OAAOC,UAAU;AAC1B;AAEA,SAASC,aAAaF,KAAa;IACjC,IAAI,gBAAgBG,IAAI,CAACH,UAAUA,MAAMI,UAAU,CAAC,YAAY,OAAOJ;IACvE,IAAIA,MAAMK,QAAQ,CAAC,QAAQ,CAAC,KAAKF,IAAI,CAACH,QAAQ,OAAO,CAAC,OAAO,EAAEA,OAAO;IACtE,OAAOA;AACT;AAEA,SAASM,eAAe,EAAEC,IAAI,EAAEC,QAAQ,EAAsC;IAC5E,MAAMC,MAAMP,aAAaK;IACzB,MAAMG,WAAW,gBAAgBP,IAAI,CAACM;IACtC,qBACE,8OAAC;QAAEF,MAAME;QAAKE,QAAQD,WAAW,WAAWE;QAAWC,KAAKH,WAAW,eAAeE;kBACnFJ;;;;;;AAGP;AAGO,eAAeM;IACpB,MAAM,EAAEC,IAAI,EAAE,GAAG,MAAM,IAAA,gKAAgB;IACvC,MAAMC,SAASD,MAAMC;IACrB,MAAMC,UAAUlB,MAAMiB,QAAQC;IAC9B,MAAMC,iBAAiBnB,MAAMiB,QAAQE;IACrC,MAAMC,UAAUpB,MAAMiB,QAAQG;IAC9B,MAAMC,WAAWrB,MAAMiB,QAAQK,gBAAgB;IAC/C,IAAI,CAACJ,WAAW,CAACC,kBAAkB,CAACC,SAAS,OAAO;IAEpD,qBACE,8OAAC;QAAQG,WAAU;QAAgB,cAAW;;YAC3CL,wBACC,8OAAC;gBAAIK,WAAU;;kCACb,8OAAC;kCAAK;;;;;;kCACN,8OAAChB;wBAAeC,MAAMU;kCAAUA;;;;;;;;;;;uBAEhC;YACHC,+BACC,8OAAC;gBAAII,WAAU;;kCACb,8OAAC;kCAAK;;;;;;kCACN,8OAAChB;wBAAeC,MAAMW;kCAAiBA;;;;;;;;;;;uBAEvC;YACHC,wBACC,8OAAC;gBAAIG,WAAU;0BACb,cAAA,8OAAChB;oBAAeC,MAAMY;8BAAU,CAAC,IAAI,EAAEC,SAAS,aAAa,CAAC;;;;;;;;;;uBAE9D;;;;;;;AAGV"}}, + {"offset": {"line": 1189, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/play/play-page.tsx"],"sourcesContent":["import Link from \"next/link\";\n\nimport { Breadcrumb } from \"@/components/drama/breadcrumb\";\nimport { DramaCard, isSingleVideo } from \"@/components/drama/drama-card\";\nimport { EpisodeBoard } from \"@/components/play/EpisodeBoard\";\nimport { PlayDetailActions } from \"@/components/play/play-detail-actions\";\nimport { PlayScreen } from \"@/components/play/PlayScreen\";\nimport { PlayOfficial } from \"@/components/play/play-official\";\nimport { SeriesOverview } from \"@/components/play/series-overview\";\nimport { PromoMarquee } from \"@/components/common/promo-marquee\";\nimport { WideAdRow } from \"@/components/common/wide-ad-row\";\nimport type { AdvitiseData, PlayletChapterInfoResp, PlayletCommonData, PlayletInfoResp } from \"@/lib/api/types\";\nimport { playletToDrama } from \"@/lib/playlet/card\";\nimport {\n formatHeatValue,\n playletHref,\n playletPlayBase,\n playletPlayHref,\n playletTagHref,\n playletTagLinks,\n resolvePlayletEpisodeLabelTotal,\n resolvePlayletEpisodeTotal,\n} from \"@/lib/playlet-display\";\nimport { resolvePlayURL } from \"@/lib/media/playback\";\nimport { routes } from \"@/lib/site/routes\";\n\nfunction lockText(chapter: PlayletChapterInfoResp) {\n if (chapter.canWatch) return \"\";\n if (chapter.needVip) return \"需要开通 VIP 后观看\";\n if (chapter.needUnlock || chapter.payType === 1) return \"请在 App 观看\";\n return \"本集暂不可观看\";\n}\n\nexport function PlayPage({\n detail,\n recommend,\n episode,\n chapter,\n chapterError = \"\",\n ads,\n}: {\n detail: PlayletInfoResp;\n recommend: PlayletCommonData[];\n episode?: number;\n chapter?: PlayletChapterInfoResp | null;\n chapterError?: string;\n ads?: AdvitiseData;\n}) {\n const drama = playletToDrama(detail);\n const overview = episode === undefined;\n const current = episode ?? drama.firstEpisode ?? 1;\n const total = resolvePlayletEpisodeTotal(detail);\n const labelTotal = resolvePlayletEpisodeLabelTotal(detail);\n const episodeBase = playletPlayBase(detail);\n const playSrc = chapter?.canWatch ? resolvePlayURL(chapter.videoUrl) : \"\";\n const locked = chapter ? lockText(chapter) : chapterError || \"剧集加载失败\";\n const statusText = chapter\n ? chapter.canWatch\n ? playSrc\n ? undefined\n : `第 ${current} 集 · 暂无视频源`\n : `第 ${current} 集 · ${locked}`\n : `第 ${current} 集 · ${locked}`;\n const tags = playletTagLinks(detail, 8);\n const video = isSingleVideo({ eps: total });\n const promoAds = (ads?.nineGridList || []).filter((item) => item?.images?.trim());\n\n return (\n
\n \n
\n
\n {overview ? null : (\n \n )}\n\n {overview ? (\n \n ) : (\n \n )}\n\n {promoAds.length ? : null}\n\n {overview ? null : (\n
\n

{drama.title}

\n
\n 分类标签:\n {tags.map((tag) => (\n \n {tag.label}\n \n ))}\n
\n
\n {video ? null : 集数:全{labelTotal}集}\n {formatHeatValue(detail.heatValue)}热度\n {formatHeatValue(detail.countCollect)}收藏\n
\n

简介:{drama.desc}

\n \n
\n )}\n\n {video ? null : (\n
\n
\n

剧集

\n 全{labelTotal}集\n
\n \n
\n )}\n\n \n\n {recommend.length ? (\n
\n
\n

推荐视频

\n 看了《{drama.title}》的人还在看\n
\n
\n {recommend.map((item) => (\n \n ))}\n
\n
\n ) : null}\n\n \n
\n
\n
\n );\n}\n"],"names":["lockText","chapter","canWatch","needVip","needUnlock","payType","PlayPage","detail","recommend","episode","chapterError","ads","drama","overview","undefined","current","firstEpisode","total","labelTotal","episodeBase","playSrc","videoUrl","locked","statusText","tags","video","eps","promoAds","nineGridList","filter","item","images","trim","id","className","items","label","href","home","shorts","title","basePath","poster","cover","src","Boolean","chapterId","playletId","playletSlug","slug","length","map","tag","kind","key","heatValue","countCollect","desc","showDownload","chapters","playletChapterInfo","detailbannerList"],"mappings":"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"}}, + {"offset": {"line": 1631, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/play/series-description.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20=%3E%20%22[project]/src/components/play/series-description.tsx%22%20%7D"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const SeriesDescription = registerClientReference(\n function() { throw new Error(\"Attempted to call SeriesDescription() from the server but SeriesDescription is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/src/components/play/series-description.tsx\",\n \"SeriesDescription\",\n);\n"],"names":["SeriesDescription","Error"],"mappings":";;;;AAAA,uEAAuE;AACvE;;AACO,MAAMA,oBAAoB,IAAA,wQAAuB,EACpD;IAAa,MAAM,IAAIC,MAAM;AAAkP,GAC/Q,wDACA","ignoreList":[0]}}, + {"offset": {"line": 1645, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}, + {"offset": {"line": 1652, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/play/series-overview.tsx"],"sourcesContent":["import Link from \"next/link\";\n\nimport { AppDownloadLink } from \"@/components/common/app-download\";\nimport { isSingleVideo } from \"@/components/drama/drama-card\";\nimport { Poster } from \"@/components/drama/poster\";\nimport { PlayDetailActions } from \"@/components/play/play-detail-actions\";\nimport { SeriesDescription } from \"@/components/play/series-description\";\nimport type { Drama } from \"@/lib/catalog/types\";\nimport { playletTagHref } from \"@/lib/playlet-display\";\nimport { routes } from \"@/lib/site/routes\";\n\n/** 详情页作品信息:「电影票」样式——海报 | 打孔线 | 票面字段 | 打孔线 | 票根操作。 */\nexport function SeriesOverview({ drama, total }: { drama: Drama; total: number }) {\n const tagLinks = drama.tagLinks?.length\n ? drama.tagLinks\n : drama.tags.map((tag) => ({ label: tag.replace(/^#/, \"\"), key: tag, kind: \"tag\" as const }));\n const heatLabel = drama.heatText || `${drama.heat}万`;\n const favoriteLabel = drama.favoriteText || `${drama.favorites}万`;\n const likeLabel = drama.likeText || `${drama.likes}万`;\n const video = isSingleVideo({ eps: total });\n const firstPlayable = drama.firstEpisode || 1;\n const playHref = routes.play(drama.routeKey || drama.id, firstPlayable);\n const genre = drama.genre?.trim() || \"\";\n const fields: Array<[string, string]> = [\n [\"类型\", genre || (video ? \"视频\" : \"短剧\")],\n ...(video\n ? []\n : ([\n [\"集数\", `${total} 集`],\n [\"状态\", drama.finished ? \"已完结\" : \"连载中\"],\n ] as Array<[string, string]>)),\n [\"热度\", heatLabel],\n [\"收藏\", favoriteLabel],\n [\"点赞\", likeLabel],\n ];\n\n return (\n
\n \n \n \n
\n
\n

\n \n {video ? \"视频\" : \"短剧\"} NO.{drama.id}\n \n {drama.badge && drama.badgeType ? (\n {drama.badge}\n ) : null}\n

\n

{drama.title}

\n
\n {fields.map(([label, value]) => (\n
\n
{label}
\n
{value}
\n
\n ))}\n
\n {tagLinks.length ? (\n

\n {tagLinks.map((tag) => (\n \n {`#${tag.label.replace(/^#/, \"\")}`}\n \n ))}\n

\n ) : null}\n {drama.desc?.trim() ? : null}\n
\n
\n
\n \n \n \n \n {video ? \"立即观看\" : `从第 ${firstPlayable} 集开始`}\n \n \n \n \n \n \n 下载 App\n \n \n
\n
\n );\n}\n"],"names":["SeriesOverview","drama","total","tagLinks","length","tags","map","tag","label","replace","key","kind","heatLabel","heatText","heat","favoriteLabel","favoriteText","favorites","likeLabel","likeText","likes","video","eps","firstPlayable","firstEpisode","playHref","play","routeKey","id","genre","trim","fields","finished","className","href","title","src","coverUrl","width","height","alt","badge","badgeType","value","desc","text","viewBox","d","x","y","rx"],"mappings":"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"}}, + {"offset": {"line": 1955, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/json-ld.tsx"],"sourcesContent":["import { serializeJSONLD } from \"@/lib/seo\";\n\nexport function JsonLd({ data }: { data: unknown }) {\n return (\n \n );\n}\n"],"names":["JsonLd","data","type","dangerouslySetInnerHTML","__html"],"mappings":";;;;;AAAA;AAAA;;;AAEO,SAASA,OAAO,EAAEC,IAAI,EAAqB;IAChD,qBACE,8OAAC;QACCC,MAAK;QACLC,yBAAyB;YAAEC,QAAQ,IAAA,8IAAe,EAACH;QAAM;;;;;;AAG/D"}}, + {"offset": {"line": 1980, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/client.ts"],"sourcesContent":["import { getDeviceId } from \"@/lib/device-id\";\n\nimport { API_BASE_URL } from \"./config\";\nimport { browserTrackingHeaders } from \"./sdk-headers\";\nimport type { ApiEnvelope } from \"./types\";\n\nexport class ApiError extends Error {\n status: number;\n code?: number;\n\n constructor(message: string, status: number, code?: number) {\n super(message);\n this.name = \"ApiError\";\n this.status = status;\n this.code = code;\n }\n}\n\ntype RequestOptions = {\n method?: \"GET\" | \"POST\";\n body?: unknown;\n};\n\nexport async function apiRequest(path: string, options: RequestOptions = {}): Promise {\n const { method = \"GET\", body } = options;\n const headers: Record = {\n Accept: \"application/json\",\n ...(await browserTrackingHeaders(typeof window !== \"undefined\" ? getDeviceId() : \"\")),\n };\n if (body !== undefined) headers[\"Content-Type\"] = \"application/json\";\n\n let response: Response;\n try {\n response = await fetch(`${API_BASE_URL}${path}`, {\n method,\n headers,\n body: body === undefined ? undefined : JSON.stringify(body),\n });\n } catch {\n throw new ApiError(\"网络异常,请稍后重试\", 0);\n }\n\n const text = await response.text();\n let payload: ApiEnvelope | null = null;\n try {\n payload = text ? (JSON.parse(text) as ApiEnvelope) : null;\n } catch {\n payload = null;\n }\n\n if (!payload || typeof payload.code !== \"number\") {\n throw new ApiError(response.ok ? \"接口响应格式异常\" : `接口暂时不可用 (${response.status})`, response.status);\n }\n\n if (!response.ok || payload.code !== 200) {\n const detail = typeof payload.data === \"string\" ? payload.data.trim() : \"\";\n throw new ApiError(detail || payload.tip || payload.msg || \"请求失败\", response.status, payload.code);\n }\n\n return payload.data;\n}\n\n"],"names":["ApiError","Error","status","code","message","name","apiRequest","path","options","method","body","headers","Accept","undefined","response","fetch","JSON","stringify","text","payload","parse","ok","detail","data","trim","tip","msg"],"mappings":";;;;;;AAEA;AACA;;;;AAGO,MAAMA,iBAAiBC;IAC5BC,OAAe;IACfC,KAAc;IAEdH,YAAYI,OAAe,EAAEF,MAAc,EAAEC,IAAa,CAAE;QAC1D,KAAK,CAACC;QACN,IAAI,CAACC,IAAI,GAAG;QACZ,IAAI,CAACH,MAAM,GAAGA;QACd,IAAI,CAACC,IAAI,GAAGA;IACd;AACF;AAOO,eAAeG,WAAcC,IAAY,EAAEC,UAA0B,CAAC,CAAC;IAC5E,MAAM,EAAEC,SAAS,KAAK,EAAEC,IAAI,EAAE,GAAGF;IACjC,MAAMG,UAAkC;QACtCC,QAAQ;QACR,GAAI,MAAM,IAAA,6JAAsB,EAAC,sCAAgC,0BAAgB,GAAG;IACtF;IACA,IAAIF,SAASG,WAAWF,OAAO,CAAC,eAAe,GAAG;IAElD,IAAIG;IACJ,IAAI;QACFA,WAAW,MAAMC,MAAM,GAAG,2IAAY,GAAGR,MAAM,EAAE;YAC/CE;YACAE;YACAD,MAAMA,SAASG,YAAYA,YAAYG,KAAKC,SAAS,CAACP;QACxD;IACF,EAAE,OAAM;QACN,MAAM,IAAIV,SAAS,cAAc;IACnC;IAEA,MAAMkB,OAAO,MAAMJ,SAASI,IAAI;IAChC,IAAIC,UAAiC;IACrC,IAAI;QACFA,UAAUD,OAAQF,KAAKI,KAAK,CAACF,QAA2B;IAC1D,EAAE,OAAM;QACNC,UAAU;IACZ;IAEA,IAAI,CAACA,WAAW,OAAOA,QAAQhB,IAAI,KAAK,UAAU;QAChD,MAAM,IAAIH,SAASc,SAASO,EAAE,GAAG,aAAa,CAAC,SAAS,EAAEP,SAASZ,MAAM,CAAC,CAAC,CAAC,EAAEY,SAASZ,MAAM;IAC/F;IAEA,IAAI,CAACY,SAASO,EAAE,IAAIF,QAAQhB,IAAI,KAAK,KAAK;QACxC,MAAMmB,SAAS,OAAOH,QAAQI,IAAI,KAAK,WAAWJ,QAAQI,IAAI,CAACC,IAAI,KAAK;QACxE,MAAM,IAAIxB,SAASsB,UAAUH,QAAQM,GAAG,IAAIN,QAAQO,GAAG,IAAI,QAAQZ,SAASZ,MAAM,EAAEiB,QAAQhB,IAAI;IAClG;IAEA,OAAOgB,QAAQI,IAAI;AACrB"}}, + {"offset": {"line": 2038, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/playlet-server.ts"],"sourcesContent":["import {\n PLAYLET_HOME_CONFIG_PAGE_SIZE,\n PLAYLET_HOT_RELATED_SIZE,\n PLAYLET_RECOMMEND_SIZE,\n PLAYLET_OPERATE_KIND,\n PLAYLET_OPERATE_PAGE_SIZE,\n PLAYLET_RANK_PAGE_SIZE,\n PLAYLET_TAG_PAGE_SIZE,\n PLAYLET_TOPIC_DETAIL_PAGE_SIZE,\n PLAYLET_TOPIC_PAGE_SIZE,\n PLAYLET_SEARCH_PAGE_SIZE,\n playletDetailKey,\n playletTagPathKey,\n playletTopicDetailKey,\n} from \"./playlet\";\nimport { serverFetchJson } from \"./server-fetch\";\nimport type {\n HomeConfigThemeData,\n HomeModuleData,\n HomePlayletResponse,\n PlayletChapterInfoResp,\n PlayletCommonData,\n PlayletGuessLikeListResp,\n PlayletHomeConfigListResp,\n PlayletHotListResp,\n PlayletInfoResp,\n PlayletOperateListResp,\n PlayletRankResp,\n PlayletSearchResp,\n PlayletTagListResp,\n PlayletTagOptionItem,\n PlayletTagOptionsResp,\n PlayletTopicDetailResp,\n PlayletTopicPageListResp,\n} from \"./types\";\n\nexport type PlayletOperateLoadResult = {\n data: PlayletOperateListResp | null;\n error: string;\n};\n\nexport type PlayletDetailLoadResult = {\n data: PlayletInfoResp | null;\n error: string;\n};\n\nexport type PlayletChapterDetailLoadResult = {\n data: PlayletChapterInfoResp | null;\n error: string;\n};\n\n/**\n * 服务端拉取剧集详情(SSR)。GET /playlet/chapter/detail\n * chapterId 必填;playletSlug 优先于 playletId。\n * videoUrl 含时效 ticket,不做长缓存。\n */\nexport async function getPlayletChapterDetail(params: {\n chapterId: number | string;\n playletSlug?: string;\n playletId?: number | string;\n}): Promise {\n const chapterId = String(params.chapterId).trim();\n if (!chapterId) return { data: null, error: \"缺少剧集 chapterId\" };\n const query = new URLSearchParams({ chapterId });\n const playletSlug = params.playletSlug?.trim();\n if (playletSlug) query.set(\"playletSlug\", playletSlug);\n else if (params.playletId != null && String(params.playletId).trim()) {\n query.set(\"playletId\", String(params.playletId).trim());\n }\n\n try {\n const data = await serverFetchJson(`/api/app/playlet/chapter/detail?${query}`, {\n maxAttempts: 2,\n timeoutMs: 10_000,\n revalidate: 0,\n });\n return { data, error: \"\" };\n } catch (reason: unknown) {\n rethrowFrameworkError(reason);\n const error = reason instanceof Error ? reason.message : \"剧集详情加载失败\";\n if (process.env.NODE_ENV === \"development\") console.warn(\"[playlet-chapter-detail]\", error);\n return { data: null, error };\n }\n}\n\nexport type PlayletHotListLoadResult = {\n data: PlayletHotListResp | null;\n error: string;\n};\n\n/**\n * 服务端拉取热门短剧(SSR)。GET /playlet/hot/list\n */\nexport async function getPlayletHotList(params?: {\n pageNum?: number;\n pageSize?: number;\n excludePlayletId?: number | string;\n}): Promise {\n const pageNum = params?.pageNum ?? 1;\n const pageSize = params?.pageSize ?? PLAYLET_HOT_RELATED_SIZE;\n const query = new URLSearchParams({\n pageNum: String(pageNum),\n pageSize: String(pageSize),\n });\n if (params?.excludePlayletId != null && String(params.excludePlayletId).trim()) {\n query.set(\"excludePlayletId\", String(params.excludePlayletId).trim());\n }\n\n try {\n const data = await serverFetchJson(`/api/app/playlet/hot/list?${query}`, {\n maxAttempts: 2,\n timeoutMs: 10_000,\n revalidate: 60,\n tags: [\"playlet-hot\", `playlet-hot-${pageNum}-${pageSize}`],\n });\n return {\n data: {\n list: data.list || [],\n pageNum: data.pageNum || pageNum,\n pageSize: data.pageSize || pageSize,\n totalCount: data.totalCount || 0,\n },\n error: \"\",\n };\n } catch (reason: unknown) {\n const error = reason instanceof Error ? reason.message : \"热门短剧加载失败\";\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\"[playlet-hot]\", error);\n }\n return { data: null, error };\n }\n}\n\n/**\n * 服务端拉取推荐短剧(SSR)。GET /playlet/guess-like/list,按当前剧推荐。\n */\nexport async function getPlayletGuessLike(params: {\n playletId: number;\n pageNum?: number;\n pageSize?: number;\n}): Promise {\n if (!params.playletId) return [];\n const query = new URLSearchParams({\n playletId: String(params.playletId),\n pageNum: String(params.pageNum ?? 1),\n pageSize: String(params.pageSize ?? PLAYLET_RECOMMEND_SIZE),\n });\n try {\n const data = await serverFetchJson(`/api/app/playlet/guess-like/list?${query}`, {\n maxAttempts: 2,\n timeoutMs: 10_000,\n revalidate: 60,\n tags: [\"playlet-guess-like\", `playlet-guess-like-${params.playletId}`],\n });\n return (data.list || []).filter((item) => item?.id && item.id !== params.playletId);\n } catch (reason: unknown) {\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\"[playlet-guess-like]\", reason instanceof Error ? reason.message : reason);\n }\n return [];\n }\n}\n\nfunction rethrowFrameworkError(error: unknown) {\n if (!error || typeof error !== \"object\" || !(\"digest\" in error)) return;\n const digest = String((error as { digest?: unknown }).digest || \"\");\n if (digest.startsWith(\"NEXT_\") || digest.includes(\"DYNAMIC_SERVER_USAGE\")) throw error;\n}\n\nfunction normalizePlayletDetail(data: PlayletInfoResp): PlayletInfoResp {\n return {\n ...data,\n playletChapterInfo: data.playletChapterInfo || [],\n tagIds: data.tagIds || [],\n tagNames: data.tagNames || [],\n tagSlugs: data.tagSlugs || [],\n themeIds: data.themeIds || [],\n themeNames: data.themeNames || [],\n themeSlugs: data.themeSlugs || [],\n categoryIds: data.categoryIds || [],\n };\n}\n\n/**\n * 服务端拉取短剧详情(SSR)。GET /playlet/detail,优先 slug,否则 id。\n */\nexport async function getPlayletDetail(params: { key: string }): Promise {\n const { pathKey, slug, id } = playletDetailKey(params.key);\n if (!pathKey) return { data: null, error: \"缺少短剧 id 或 slug\" };\n const query = new URLSearchParams();\n if (slug) query.set(\"slug\", slug);\n else if (id) query.set(\"id\", id);\n\n try {\n const data = await serverFetchJson(`/api/app/playlet/detail?${query}`, {\n maxAttempts: 2,\n timeoutMs: 10_000,\n revalidate: 60,\n tags: [\"playlet-detail\", `playlet-detail-${pathKey}`],\n });\n return { data: normalizePlayletDetail(data), error: \"\" };\n } catch (reason: unknown) {\n rethrowFrameworkError(reason);\n const error = reason instanceof Error ? reason.message : \"短剧详情加载失败\";\n if (process.env.NODE_ENV === \"development\") console.warn(\"[playlet-detail]\", error);\n return { data: null, error };\n }\n}\n\n/** 服务端拉取运营列表(SSR)。网络失败消化为 error,避免整页 500。 */\nexport async function getPlayletOperateList(params: {\n /** 1 短剧 / 2 漫剧 */\n operateType?: number;\n type?: number;\n pageNum?: number;\n pageSize?: number;\n}): Promise {\n const operateType = params.operateType ?? PLAYLET_OPERATE_KIND.shorts;\n const type = params.type ?? 1;\n const pageNum = params.pageNum ?? 1;\n const pageSize = params.pageSize ?? PLAYLET_OPERATE_PAGE_SIZE;\n const query = new URLSearchParams({\n operateType: String(operateType),\n type: String(type),\n pageNum: String(pageNum),\n pageSize: String(pageSize),\n });\n\n try {\n const data = await serverFetchJson(`/api/app/playlet/operate/list?${query}`, {\n maxAttempts: 2,\n timeoutMs: 10_000,\n revalidate: 60,\n tags: [\"playlet-operate\", `playlet-operate-${operateType}-${type}`],\n });\n return {\n data: {\n list: data.list || [],\n pageNum: data.pageNum || pageNum,\n pageSize: data.pageSize || pageSize,\n totalCount: data.totalCount || 0,\n type: data.type || type,\n },\n error: \"\",\n };\n } catch (reason: unknown) {\n const error = reason instanceof Error ? reason.message : \"列表加载失败\";\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\"[playlet-operate]\", error);\n }\n return { data: null, error };\n }\n}\n\nexport type PlayletTopicLoadResult = {\n data: PlayletTopicPageListResp | null;\n error: string;\n};\n\nexport type PlayletTopicDetailLoadResult = {\n data: PlayletTopicDetailResp | null;\n error: string;\n};\n\n/** 服务端拉取专题详情列表(SSR)。GET /topic/detail,优先 topicSlug,否则 id。 */\nexport async function getPlayletTopicDetail(params: {\n /** 路由段:slug 或 id */\n key: string;\n pageNum?: number;\n pageSize?: number;\n /** 1 编辑排序 / 2 最新 / 3 最热 */\n sortType?: 1 | 2 | 3;\n}): Promise {\n const { pathKey, topicSlug, id } = playletTopicDetailKey(params.key);\n if (!pathKey) return { data: null, error: \"缺少专题 id 或 slug\" };\n const pageNum = params.pageNum ?? 1;\n const pageSize = params.pageSize ?? PLAYLET_TOPIC_DETAIL_PAGE_SIZE;\n const sortType = params.sortType === 2 || params.sortType === 3 ? params.sortType : 1;\n const query = new URLSearchParams({\n dataType: \"1\",\n pageNum: String(pageNum),\n pageSize: String(pageSize),\n sortType: String(sortType),\n });\n if (topicSlug) query.set(\"topicSlug\", topicSlug);\n else if (id) query.set(\"id\", id);\n\n try {\n const data = await serverFetchJson(`/api/app/playlet/topic/detail?${query}`, {\n maxAttempts: 2,\n timeoutMs: 10_000,\n revalidate: 60,\n tags: [\"playlet-topic-detail\", `playlet-topic-detail-${pathKey}`],\n });\n return {\n data: {\n id: data.id || 0,\n name: data.name || \"\",\n desc: data.desc || \"\",\n icon: data.icon || \"\",\n slug: data.slug || \"\",\n rank: data.rank || 0,\n dataType: data.dataType || 1,\n covers: data.covers || [],\n list: data.list || [],\n moreTopics: data.moreTopics || [],\n playletCount: data.playletCount || 0,\n pageNum: data.pageNum || pageNum,\n pageSize: data.pageSize || pageSize,\n totalCount: data.totalCount || 0,\n seoInfo: data.seoInfo,\n },\n error: \"\",\n };\n } catch (reason: unknown) {\n const error = reason instanceof Error ? reason.message : \"专题详情加载失败\";\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\"[playlet-topic-detail]\", error);\n }\n return { data: null, error };\n }\n}\n\n/** 服务端拉取专题列表(SSR)。网络失败消化为 error,避免整页 500。 */\nexport async function getPlayletTopicList(params?: {\n pageNum?: number;\n pageSize?: number;\n}): Promise {\n const pageNum = params?.pageNum ?? 1;\n const pageSize = params?.pageSize ?? PLAYLET_TOPIC_PAGE_SIZE;\n const query = new URLSearchParams({\n pageNum: String(pageNum),\n pageSize: String(pageSize),\n });\n\n try {\n const data = await serverFetchJson(`/api/app/playlet/topic/list?${query}`, {\n maxAttempts: 2,\n timeoutMs: 10_000,\n revalidate: 60,\n tags: [\"playlet-topic\", `playlet-topic-${pageNum}-${pageSize}`],\n });\n return {\n data: {\n list: data.list || [],\n pageNum: data.pageNum || pageNum,\n pageSize: data.pageSize || pageSize,\n seoInfo: data.seoInfo,\n },\n error: \"\",\n };\n } catch (reason: unknown) {\n const error = reason instanceof Error ? reason.message : \"专题列表加载失败\";\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\"[playlet-topic]\", error);\n }\n return { data: null, error };\n }\n}\n\nexport type PlayletRankLoadResult = {\n data: PlayletRankResp | null;\n error: string;\n};\n\n/** 服务端拉取排行榜(SSR)。网络失败消化为 error,避免整页 500。 */\nexport async function getPlayletRank(params?: {\n sortOrder?: number;\n pageNum?: number;\n pageSize?: number;\n}): Promise {\n const sortOrder = params?.sortOrder ?? 1;\n const pageNum = params?.pageNum ?? 1;\n const pageSize = params?.pageSize ?? PLAYLET_RANK_PAGE_SIZE;\n const query = new URLSearchParams({\n sortOrder: String(sortOrder),\n pageNum: String(pageNum),\n pageSize: String(pageSize),\n });\n\n try {\n const data = await serverFetchJson(`/api/app/playlet/rank?${query}`, {\n maxAttempts: 2,\n timeoutMs: 10_000,\n revalidate: 60,\n tags: [\"playlet-rank\", `playlet-rank-${sortOrder}`],\n });\n return {\n data: {\n list: data.list || [],\n pageNum: data.pageNum || pageNum,\n pageSize: data.pageSize || pageSize,\n totalCount: data.totalCount || 0,\n seoInfo: data.seoInfo,\n },\n error: \"\",\n };\n } catch (reason: unknown) {\n const error = reason instanceof Error ? reason.message : \"热榜加载失败\";\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\"[playlet-rank]\", error);\n }\n return { data: null, error };\n }\n}\n\nexport type PlayletTagLoadResult = {\n data: PlayletTagListResp | null;\n error: string;\n};\n\n/** 服务端按标签拉取短剧列表(SSR)。GET /tag/list,优先 tagSlug,否则 tagId。 */\nexport async function getPlayletTagList(params: {\n /** 路由段:slug 或 id */\n key: string;\n pageNum?: number;\n pageSize?: number;\n sortType?: 1 | 2 | 3;\n}): Promise {\n const { pathKey, slug, id } = playletTagPathKey(params.key);\n if (!pathKey) return { data: null, error: \"缺少标签 id 或 slug\" };\n const pageNum = params.pageNum ?? 1;\n const pageSize = params.pageSize ?? PLAYLET_TAG_PAGE_SIZE;\n const query = new URLSearchParams({\n pageNum: String(pageNum),\n pageSize: String(pageSize),\n });\n if (params.sortType) query.set(\"sortType\", String(params.sortType));\n if (slug) query.set(\"tagSlug\", slug);\n else if (id) query.set(\"tagId\", id);\n\n try {\n const data = await serverFetchJson(`/api/app/playlet/tag/list?${query}`, {\n maxAttempts: 2,\n timeoutMs: 10_000,\n revalidate: 60,\n tags: [\"playlet-tag\", `playlet-tag-${pathKey}`],\n });\n return {\n data: {\n list: data.list || [],\n pageNum: data.pageNum || pageNum,\n pageSize: data.pageSize || pageSize,\n totalCount: data.totalCount || 0,\n },\n error: \"\",\n };\n } catch (reason: unknown) {\n const error = reason instanceof Error ? reason.message : \"标签列表加载失败\";\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\"[playlet-tag]\", error);\n }\n return { data: null, error };\n }\n}\n\n/** 服务端拉取标签选项,用于解析 slug/id → 展示名。 */\nexport async function getPlayletTagOptions(): Promise {\n try {\n const data = await serverFetchJson(\"/api/app/playlet/tag/options\", {\n maxAttempts: 2,\n timeoutMs: 10_000,\n revalidate: 300,\n tags: [\"playlet-tag-options\"],\n });\n return data.list || [];\n } catch (reason: unknown) {\n if (process.env.NODE_ENV === \"development\") {\n const error = reason instanceof Error ? reason.message : \"标签选项加载失败\";\n console.warn(\"[playlet-tag-options]\", error);\n }\n return [];\n }\n}\n\nfunction normalizeTheme(item: HomeConfigThemeData): HomeConfigThemeData {\n return {\n ...item,\n list: item.list || [],\n };\n}\n\nfunction normalizeModule(item: HomeModuleData): HomeModuleData {\n return {\n ...item,\n list: item.list || [],\n topicList: (item.topicList || []).map(normalizeTheme),\n };\n}\n\nexport type PlayletHomeLoadResult = {\n data: HomePlayletResponse | null;\n error: string;\n};\n\n/** 服务端拉取首页(SSR)。GET /api/app/playlet/home,无查询参数。 */\nexport async function getPlayletHome(): Promise {\n try {\n const data = await serverFetchJson(\"/api/app/playlet/home\", {\n maxAttempts: 2,\n timeoutMs: 10_000,\n revalidate: 60,\n tags: [\"playlet-home\"],\n });\n return {\n data: {\n ...data,\n announcements: data.announcements || [],\n homeBannerData: data.homeBannerData || [],\n modules: (data.modules || []).map(normalizeModule),\n },\n error: \"\",\n };\n } catch (reason: unknown) {\n const error = reason instanceof Error ? reason.message : \"首页加载失败\";\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\"[playlet-home]\", error);\n }\n return { data: null, error };\n }\n}\n\nexport type PlayletHomeConfigLoadResult = {\n data: PlayletHomeConfigListResp | null;\n error: string;\n};\n\n/** 服务端拉取首页模块分页(SSR)。GET /playlet/home-config/list,slug 优先。 */\nexport async function getPlayletHomeConfigList(params: {\n key: string;\n pageNum?: number;\n pageSize?: number;\n}): Promise {\n const { pathKey, slug, id } = playletDetailKey(params.key);\n if (!pathKey) return { data: null, error: \"缺少首页模块 id 或 slug\" };\n const pageNum = params.pageNum ?? 1;\n const pageSize = params.pageSize ?? PLAYLET_HOME_CONFIG_PAGE_SIZE;\n const query = new URLSearchParams({\n pageNum: String(pageNum),\n pageSize: String(pageSize),\n });\n if (slug) query.set(\"slug\", slug);\n else if (id) query.set(\"id\", id);\n\n try {\n const data = await serverFetchJson(`/api/app/playlet/home-config/list?${query}`, {\n maxAttempts: 2,\n timeoutMs: 10_000,\n revalidate: 60,\n tags: [\"playlet-home-config\", `playlet-home-config-${pathKey}`],\n });\n return {\n data: {\n ...data,\n config: data.config ? normalizeModule(data.config) : data.config,\n list: data.list || [],\n topicList: (data.topicList || []).map(normalizeTheme),\n pageNum: data.pageNum || pageNum,\n pageSize: data.pageSize || pageSize,\n totalCount: data.totalCount || 0,\n },\n error: \"\",\n };\n } catch (reason: unknown) {\n const error = reason instanceof Error ? reason.message : \"首页模块加载失败\";\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\"[playlet-home-config]\", error);\n }\n return { data: null, error };\n }\n}\n\nexport type PlayletSearchLoadResult = {\n data: PlayletSearchResp | null;\n error: string;\n};\n\n/** 服务端搜索短剧(SSR)。GET /playlet/search。keyword 为空时不请求。 */\nexport async function getPlayletSearch(params: {\n keyword: string;\n pageNum?: number;\n pageSize?: number;\n}): Promise {\n const keyword = params.keyword.trim().slice(0, 100);\n if (!keyword) return { data: null, error: \"\" };\n const pageNum = params.pageNum && params.pageNum > 0 ? Math.floor(params.pageNum) : 1;\n const pageSize = params.pageSize ?? PLAYLET_SEARCH_PAGE_SIZE;\n const query = new URLSearchParams({\n keyword,\n pageNum: String(pageNum),\n pageSize: String(pageSize),\n });\n\n try {\n const data = await serverFetchJson(`/api/app/playlet/search?${query}`, {\n maxAttempts: 2,\n timeoutMs: 10_000,\n revalidate: 0,\n });\n return {\n data: {\n keyword: data.keyword || keyword,\n list: data.list || [],\n everyoneWatching: data.everyoneWatching || [],\n pageNum: data.pageNum || pageNum,\n pageSize: data.pageSize || pageSize,\n totalCount: data.totalCount || 0,\n },\n error: \"\",\n };\n } catch (reason: unknown) {\n const error = reason instanceof Error ? reason.message : \"搜索失败\";\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\"[playlet-search]\", error);\n }\n return { data: null, error };\n }\n}\n\n/** 按路由 key(slug 或 id)匹配标签元信息。 */\nexport function matchPlayletTagOption(list: PlayletTagOptionItem[], key: string) {\n const normalized = key.trim();\n if (!normalized) return undefined;\n return list.find((item) => {\n const slug = item.slug?.trim();\n const id = item.id != null ? String(item.id) : \"\";\n const name = item.name?.trim();\n return slug === normalized || id === normalized || name === normalized;\n });\n}\n"],"names":["getPlayletChapterDetail","params","chapterId","String","trim","data","error","query","URLSearchParams","playletSlug","set","playletId","maxAttempts","timeoutMs","revalidate","reason","rethrowFrameworkError","Error","message","console","warn","getPlayletHotList","pageNum","pageSize","excludePlayletId","tags","list","totalCount","getPlayletGuessLike","filter","item","id","digest","startsWith","includes","normalizePlayletDetail","playletChapterInfo","tagIds","tagNames","tagSlugs","themeIds","themeNames","themeSlugs","categoryIds","getPlayletDetail","pathKey","slug","key","getPlayletOperateList","operateType","shorts","type","getPlayletTopicDetail","topicSlug","sortType","dataType","name","desc","icon","rank","covers","moreTopics","playletCount","seoInfo","getPlayletTopicList","getPlayletRank","sortOrder","getPlayletTagList","getPlayletTagOptions","normalizeTheme","normalizeModule","topicList","map","getPlayletHome","announcements","homeBannerData","modules","getPlayletHomeConfigList","config","getPlayletSearch","keyword","slice","Math","floor","everyoneWatching","matchPlayletTagOption","normalized","undefined","find"],"mappings":"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"}}, + {"offset": {"line": 2608, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/playlet.ts"],"sourcesContent":["import { operateFilterByLabel, rankFilterByLabel, RANK_FILTER_LABELS, OPERATE_FILTER_LABELS } from \"@/lib/channel-routes\";\nimport { apiRequest } from \"./client\";\nimport type {\n PlayletChapterInfoResp,\n PlayletHomeConfigListResp,\n PlayletHotListResp,\n HomePlayletResponse,\n PlayletInfoResp,\n PlayletOperateListResp,\n PlayletRankResp,\n PlayletSearchResp,\n PlayletSearchSuggestResp,\n PlayletGuessLikeListResp,\n PlayletHotLikeResp,\n PlayletTagListResp,\n PlayletTopicDetailResp,\n PlayletTopicPageListResp,\n} from \"./types\";\n\n/** 个人中心列表默认分页 */\nexport const PLAYLET_LIBRARY_PAGE_SIZE = 24;\n\n/** 专题列表每页条数(各区块内分页) */\nexport const PLAYLET_TOPIC_PAGE_SIZE = 12;\n\n/** 详情/播放页侧栏热门短剧条数 */\nexport const PLAYLET_HOT_RELATED_SIZE = 6;\n\n/** 详情 / 播放页底部「推荐视频」条数。 */\nexport const PLAYLET_RECOMMEND_SIZE = 12;\n\n/** 专题详情短剧列表每页条数 */\nexport const PLAYLET_TOPIC_DETAIL_PAGE_SIZE = 24;\n\n/** 热榜每页条数 */\nexport const PLAYLET_RANK_PAGE_SIZE = 25;\n\n/** 标签页每页条数 */\nexport const PLAYLET_TAG_PAGE_SIZE = 24;\n\n/** 首页模块「查看更多」每页条数 */\nexport const PLAYLET_HOME_CONFIG_PAGE_SIZE = 24;\n\n/** 解析专题详情路由 key:纯数字视为 id,否则视为 topicSlug。 */\nexport function playletTopicDetailKey(raw: string) {\n const key = raw.trim();\n if (!key) return { pathKey: \"\", topicSlug: undefined as string | undefined, id: undefined as string | undefined };\n if (/^\\d+$/.test(key)) return { pathKey: key, topicSlug: undefined, id: key };\n return { pathKey: key, topicSlug: key, id: undefined };\n}\n\n/** 解析短剧详情路由 key:纯数字视为 id,否则视为 slug。 */\nexport function playletDetailKey(raw: string) {\n const key = raw.trim();\n if (!key) return { pathKey: \"\", slug: undefined as string | undefined, id: undefined as string | undefined };\n if (/^\\d+$/.test(key)) return { pathKey: key, slug: undefined, id: key };\n return { pathKey: key, slug: key, id: undefined };\n}\n\n/** @deprecated 使用 RANK_FILTER_LABELS / channel-routes */\nexport const PLAYLET_RANK_BOARDS = RANK_FILTER_LABELS;\nexport type PlayletRankBoard = (typeof PLAYLET_RANK_BOARDS)[number];\n\nexport function playletRankSortOrder(board: string): 1 | 2 | 3 {\n return rankFilterByLabel(board).sortOrder;\n}\n\n/** @deprecated 使用 OPERATE_FILTER_LABELS / channel-routes */\nexport const PLAYLET_OPERATE_SORTS = OPERATE_FILTER_LABELS;\nexport type PlayletOperateSort = (typeof PLAYLET_OPERATE_SORTS)[number];\n\n/** 运营品类:1 短剧 / 2 漫剧(剧集) */\nexport const PLAYLET_OPERATE_KIND = { shorts: 1, series: 2 } as const;\n\n/** 短剧、剧集列表每页条数 */\nexport const PLAYLET_OPERATE_PAGE_SIZE = 24;\n\nexport function playletOperateType(sort: string): 1 | 2 | 3 | 4 {\n return operateFilterByLabel(sort).type;\n}\n\n/** GET /api/app/playlet/operate/list — 按品类 + 筛选类型分页。 */\nexport function fetchPlayletOperateList(params: {\n /** 1 短剧 / 2 漫剧 */\n operateType?: number;\n type?: number;\n pageNum?: number;\n pageSize?: number;\n}) {\n const operateType = params.operateType ?? PLAYLET_OPERATE_KIND.shorts;\n const type = params.type ?? 1;\n const pageNum = params.pageNum ?? 1;\n const pageSize = params.pageSize ?? PLAYLET_OPERATE_PAGE_SIZE;\n const query = new URLSearchParams({\n operateType: String(operateType),\n type: String(type),\n pageNum: String(pageNum),\n pageSize: String(pageSize),\n });\n return apiRequest(`/api/app/playlet/operate/list?${query}`, {\n method: \"GET\",\n });\n}\n\n/** GET /api/app/playlet/topic/list — 分页查询专题剧单。 */\nexport function fetchPlayletTopicList(params: {\n pageNum?: number;\n pageSize?: number;\n}) {\n const pageNum = params.pageNum ?? 1;\n const pageSize = params.pageSize ?? PLAYLET_TOPIC_PAGE_SIZE;\n const query = new URLSearchParams({\n pageNum: String(pageNum),\n pageSize: String(pageSize),\n });\n return apiRequest(`/api/app/playlet/topic/list?${query}`, {\n method: \"GET\",\n });\n}\n\n/** GET /api/app/playlet/hot/list — 分页热门短剧;可选排除当前剧。 */\nexport function fetchPlayletHotList(params: {\n pageNum?: number;\n pageSize?: number;\n excludePlayletId?: number | string;\n}) {\n const pageNum = params.pageNum ?? 1;\n const pageSize = params.pageSize ?? PLAYLET_HOT_RELATED_SIZE;\n const query = new URLSearchParams({\n pageNum: String(pageNum),\n pageSize: String(pageSize),\n });\n if (params.excludePlayletId != null && String(params.excludePlayletId).trim()) {\n query.set(\"excludePlayletId\", String(params.excludePlayletId).trim());\n }\n return apiRequest(`/api/app/playlet/hot/list?${query}`, {\n method: \"GET\",\n });\n}\n\n/** GET /api/app/playlet/detail — 短剧详情,优先 slug。 */\nexport function fetchPlayletDetail(params: { key: string }) {\n const { pathKey, slug, id } = playletDetailKey(params.key);\n if (!pathKey) return Promise.reject(new Error(\"缺少短剧 id 或 slug\"));\n const query = new URLSearchParams();\n if (slug) query.set(\"slug\", slug);\n else if (id) query.set(\"id\", id);\n return apiRequest(`/api/app/playlet/detail?${query}`, {\n method: \"GET\",\n });\n}\n\n/**\n * 播放页剧集详情(含签名 videoUrl)。\n * 走 /h5/chapter-detail BFF,避免浏览器直打 /api→Go 签出与 /enkey 出站 IP 不一致的 ticket。\n */\nexport function fetchPlayletChapterDetail(params: {\n chapterId: number | string;\n playletSlug?: string;\n playletId?: number | string;\n}) {\n const chapterId = String(params.chapterId).trim();\n if (!chapterId) return Promise.reject(new Error(\"缺少剧集 chapterId\"));\n const query = new URLSearchParams({ chapterId });\n const playletSlug = params.playletSlug?.trim();\n if (playletSlug) query.set(\"playletSlug\", playletSlug);\n else if (params.playletId != null && String(params.playletId).trim()) {\n query.set(\"playletId\", String(params.playletId).trim());\n }\n return apiRequest(`/h5/chapter-detail?${query}`, {\n method: \"GET\",\n });\n}\n\n/** GET /api/app/playlet/topic/detail — 专题详情与短剧列表,优先 topicSlug。 */\nexport function fetchPlayletTopicDetail(params: {\n /** 路由段:slug 或 id */\n key: string;\n pageNum?: number;\n pageSize?: number;\n /** 1 编辑排序 / 2 最新 / 3 最热 */\n sortType?: 1 | 2 | 3;\n}) {\n const { pathKey, topicSlug, id } = playletTopicDetailKey(params.key);\n if (!pathKey) return Promise.reject(new Error(\"缺少专题 id 或 slug\"));\n const pageNum = params.pageNum ?? 1;\n const pageSize = params.pageSize ?? PLAYLET_TOPIC_DETAIL_PAGE_SIZE;\n const sortType = params.sortType === 2 || params.sortType === 3 ? params.sortType : 1;\n const query = new URLSearchParams({\n dataType: \"1\",\n pageNum: String(pageNum),\n pageSize: String(pageSize),\n sortType: String(sortType),\n });\n if (topicSlug) query.set(\"topicSlug\", topicSlug);\n else if (id) query.set(\"id\", id);\n return apiRequest(`/api/app/playlet/topic/detail?${query}`, {\n method: \"GET\",\n });\n}\n\n/** 各区块 totalCount 取最大,用于专题列表分页。 */\nexport function playletTopicTotalCount(groups: { totalCount?: number }[] | null | undefined) {\n if (!groups?.length) return 0;\n return groups.reduce((max, group) => Math.max(max, group.totalCount || 0), 0);\n}\n\n/** GET /api/app/playlet/rank — 短剧排行榜。 */\nexport function fetchPlayletRank(params: {\n sortOrder?: number;\n pageNum?: number;\n pageSize?: number;\n}) {\n const sortOrder = params.sortOrder ?? 1;\n const pageNum = params.pageNum ?? 1;\n const pageSize = params.pageSize ?? PLAYLET_RANK_PAGE_SIZE;\n const query = new URLSearchParams({\n sortOrder: String(sortOrder),\n pageNum: String(pageNum),\n pageSize: String(pageSize),\n });\n return apiRequest(`/api/app/playlet/rank?${query}`, {\n method: \"GET\",\n });\n}\n\n/** 解析标签路径段:纯数字视为 id,否则视为 slug。 */\nexport function playletTagPathKey(raw: string) {\n const key = raw.trim();\n if (!key) return { pathKey: \"\", slug: undefined as string | undefined, id: undefined as string | undefined };\n if (/^\\d+$/.test(key)) return { pathKey: key, slug: undefined, id: key };\n return { pathKey: key, slug: key, id: undefined };\n}\n\n/** GET /api/app/playlet/tag/list — 按标签查短剧,优先 tagSlug,否则 tagId。 */\nexport function fetchPlayletTagList(params: {\n /** 路由段:slug 或 id */\n key: string;\n pageNum?: number;\n pageSize?: number;\n sortType?: 1 | 2 | 3;\n}) {\n const { pathKey, slug, id } = playletTagPathKey(params.key);\n if (!pathKey) return Promise.reject(new Error(\"缺少标签 id 或 slug\"));\n const pageNum = params.pageNum ?? 1;\n const pageSize = params.pageSize ?? PLAYLET_TAG_PAGE_SIZE;\n const query = new URLSearchParams({\n pageNum: String(pageNum),\n pageSize: String(pageSize),\n });\n if (params.sortType) query.set(\"sortType\", String(params.sortType));\n if (slug) query.set(\"tagSlug\", slug);\n else if (id) query.set(\"tagId\", id);\n return apiRequest(`/api/app/playlet/tag/list?${query}`, {\n method: \"GET\",\n });\n}\n\n/** GET /api/app/playlet/home — 首页 banner、公告、模块、广告与 SEO。无查询参数。 */\nexport function fetchPlayletHome() {\n return apiRequest(\"/api/app/playlet/home\", {\n method: \"GET\",\n });\n}\n\n/** GET /api/app/playlet/home-config/list — 首页模块分页,slug 优先于 id。 */\nexport function fetchPlayletHomeConfigList(params: {\n key: string;\n pageNum?: number;\n pageSize?: number;\n}) {\n const { pathKey, slug, id } = playletDetailKey(params.key);\n if (!pathKey) return Promise.reject(new Error(\"缺少首页模块 id 或 slug\"));\n const pageNum = params.pageNum ?? 1;\n const pageSize = params.pageSize ?? PLAYLET_HOME_CONFIG_PAGE_SIZE;\n const query = new URLSearchParams({\n pageNum: String(pageNum),\n pageSize: String(pageSize),\n });\n if (slug) query.set(\"slug\", slug);\n else if (id) query.set(\"id\", id);\n return apiRequest(`/api/app/playlet/home-config/list?${query}`, {\n method: \"GET\",\n });\n}\n\n/** 搜索结果每页条数,与频道列表一致。 */\nexport const PLAYLET_SEARCH_PAGE_SIZE = 24;\n\n/** GET /api/app/playlet/search — ES 分页搜索。keyword 必填。 */\nexport function fetchPlayletSearch(params: {\n keyword: string;\n pageNum?: number;\n pageSize?: number;\n}) {\n const keyword = params.keyword.trim().slice(0, 100);\n if (!keyword) return Promise.reject(new Error(\"缺少搜索关键词\"));\n const pageNum = params.pageNum ?? 1;\n const pageSize = params.pageSize ?? PLAYLET_SEARCH_PAGE_SIZE;\n const query = new URLSearchParams({\n keyword,\n pageNum: String(pageNum),\n pageSize: String(pageSize),\n });\n return apiRequest(`/api/app/playlet/search?${query}`, {\n method: \"GET\",\n });\n}\n\n/** GET /api/app/playlet/search/suggest — 搜索框下拉联想。keyword 必填。 */\nexport function fetchPlayletSearchSuggest(keyword: string) {\n const value = keyword.trim().slice(0, 100);\n if (!value) return Promise.reject(new Error(\"缺少搜索关键词\"));\n const query = new URLSearchParams({ keyword: value });\n return apiRequest(`/api/app/playlet/search/suggest?${query}`, {\n method: \"GET\",\n });\n}\n\n/** GET /api/app/playlet/hot-like — 热搜词和猜你喜欢,无查询参数。 */\nexport function fetchPlayletHotLike() {\n return apiRequest(\"/api/app/playlet/hot-like\", {\n method: \"GET\",\n });\n}\n\n/** 搜索「猜你喜欢」每次展示条数,对应面板三列。 */\nexport const PLAYLET_GUESS_LIKE_PAGE_SIZE = 3;\n\nlet seedPlayletId: number | null = null;\nlet seedPlayletPromise: Promise | null = null;\n\n/** 不在短剧页时,用首页 banner 的短剧作为猜你喜欢的当前剧。 */\nfunction loadSeedPlayletId() {\n if (seedPlayletId) return Promise.resolve(seedPlayletId);\n if (!seedPlayletPromise) {\n seedPlayletPromise = fetchPlayletHome()\n .then((data) => {\n const seeded =\n data.homeBannerData?.find((item) => item?.id)?.id ||\n data.modules?.flatMap((item) => item.list || []).find((item) => item?.id)?.id ||\n null;\n seedPlayletId = seeded;\n return seeded;\n })\n .catch(() => {\n seedPlayletPromise = null;\n return null;\n });\n }\n return seedPlayletPromise;\n}\n\n/** 短剧详情页用路径上的 id / slug;其他页面用首页种子剧。 */\nexport async function resolveGuessLikePlayletId(routeKey: string) {\n const key = routeKey.trim();\n if (/^\\d+$/.test(key)) return Number(key);\n if (key) {\n const detail = await fetchPlayletDetail({ key });\n return detail.id || null;\n }\n return loadSeedPlayletId();\n}\n\n/** GET /api/app/playlet/guess-like/list — playletId 必填。 */\nexport function fetchPlayletGuessLike(params: {\n playletId: number;\n pageNum?: number;\n pageSize?: number;\n}) {\n if (!params.playletId) return Promise.reject(new Error(\"缺少短剧 id\"));\n const pageNum = params.pageNum ?? 1;\n const pageSize = params.pageSize ?? PLAYLET_GUESS_LIKE_PAGE_SIZE;\n const query = new URLSearchParams({\n playletId: String(params.playletId),\n pageNum: String(pageNum),\n pageSize: String(pageSize),\n });\n return apiRequest(`/api/app/playlet/guess-like/list?${query}`, {\n method: \"GET\",\n });\n}\n"],"names":["PLAYLET_LIBRARY_PAGE_SIZE","PLAYLET_TOPIC_PAGE_SIZE","PLAYLET_HOT_RELATED_SIZE","PLAYLET_RECOMMEND_SIZE","PLAYLET_TOPIC_DETAIL_PAGE_SIZE","PLAYLET_RANK_PAGE_SIZE","PLAYLET_TAG_PAGE_SIZE","PLAYLET_HOME_CONFIG_PAGE_SIZE","playletTopicDetailKey","raw","key","trim","pathKey","topicSlug","undefined","id","test","playletDetailKey","slug","PLAYLET_RANK_BOARDS","playletRankSortOrder","board","sortOrder","PLAYLET_OPERATE_SORTS","PLAYLET_OPERATE_KIND","shorts","series","PLAYLET_OPERATE_PAGE_SIZE","playletOperateType","sort","type","fetchPlayletOperateList","params","operateType","pageNum","pageSize","query","URLSearchParams","String","method","fetchPlayletTopicList","fetchPlayletHotList","excludePlayletId","set","fetchPlayletDetail","Promise","reject","Error","fetchPlayletChapterDetail","chapterId","playletSlug","playletId","fetchPlayletTopicDetail","sortType","dataType","playletTopicTotalCount","groups","length","reduce","max","group","Math","totalCount","fetchPlayletRank","playletTagPathKey","fetchPlayletTagList","fetchPlayletHome","fetchPlayletHomeConfigList","PLAYLET_SEARCH_PAGE_SIZE","fetchPlayletSearch","keyword","slice","fetchPlayletSearchSuggest","value","fetchPlayletHotLike","PLAYLET_GUESS_LIKE_PAGE_SIZE","seedPlayletId","seedPlayletPromise","loadSeedPlayletId","resolve","then","data","seeded","homeBannerData","find","item","modules","flatMap","list","catch","resolveGuessLikePlayletId","routeKey","Number","detail","fetchPlayletGuessLike"],"mappings":"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"}}, + {"offset": {"line": 2970, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/sdk-common.ts"],"sourcesContent":["/** 服务端 X-SDK-Common:UTF-8 JSON 的标准 Base64。只放 SDK 会解析的字段。 */\nexport function encodeSdkCommon(fields: {\n sid?: string;\n device_id?: string;\n device?: string;\n device_fingerprint?: string;\n fp_version?: string;\n app_version?: string;\n}) {\n const payload = {\n sid: fields.sid || \"\",\n device_id: fields.device_id || \"\",\n device: fields.device || \"\",\n device_fingerprint: fields.device_fingerprint || \"\",\n fp_version: fields.fp_version || \"\",\n app_version: fields.app_version || \"\",\n };\n const bytes = new TextEncoder().encode(JSON.stringify(payload));\n let binary = \"\";\n for (const byte of bytes) binary += String.fromCharCode(byte);\n return btoa(binary);\n}\n"],"names":["encodeSdkCommon","fields","payload","sid","device_id","device","device_fingerprint","fp_version","app_version","bytes","TextEncoder","encode","JSON","stringify","binary","byte","String","fromCharCode","btoa"],"mappings":"AAAA,0DAA0D;;;;AACnD,SAASA,gBAAgBC,MAO/B;IACC,MAAMC,UAAU;QACdC,KAAKF,OAAOE,GAAG,IAAI;QACnBC,WAAWH,OAAOG,SAAS,IAAI;QAC/BC,QAAQJ,OAAOI,MAAM,IAAI;QACzBC,oBAAoBL,OAAOK,kBAAkB,IAAI;QACjDC,YAAYN,OAAOM,UAAU,IAAI;QACjCC,aAAaP,OAAOO,WAAW,IAAI;IACrC;IACA,MAAMC,QAAQ,IAAIC,cAAcC,MAAM,CAACC,KAAKC,SAAS,CAACX;IACtD,IAAIY,SAAS;IACb,KAAK,MAAMC,QAAQN,MAAOK,UAAUE,OAAOC,YAAY,CAACF;IACxD,OAAOG,KAAKJ;AACd"}}, + {"offset": {"line": 2992, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/sdk-headers.ts"],"sourcesContent":["import { buildBrowserApiHeaders } from \"./client-headers\";\nimport { encodeSdkCommon } from \"./sdk-common\";\n\n/** 业务请求带上访客设备号。 */\nexport async function browserTrackingHeaders(devID = \"\") {\n return {\n ...buildBrowserApiHeaders(devID, \"\"),\n \"X-SDK-Common\": encodeSdkCommon({ sid: \"\", device_id: devID, app_version: \"1.0.0\" }),\n };\n}\n"],"names":["browserTrackingHeaders","devID","sid","device_id","app_version"],"mappings":";;;;AAAA;AACA;;;AAGO,eAAeA,uBAAuBC,QAAQ,EAAE;IACrD,OAAO;QACL,GAAG,IAAA,gKAAsB,EAACA,OAAO,GAAG;QACpC,gBAAgB,IAAA,qJAAe,EAAC;YAAEC,KAAK;YAAIC,WAAWF;YAAOG,aAAa;QAAQ;IACpF;AACF"}}, + {"offset": {"line": 3014, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/channel-routes.ts"],"sourcesContent":["/** 频道列表路径:英文 slug + /page/{n},不用 query。 */\n\nexport const OPERATE_FILTERS = [\n { slug: \"latest\", label: \"最新更新\", type: 1 as const },\n { slug: \"popular\", label: \"当前热播\", type: 2 as const },\n { slug: \"original\", label: \"独家原创\", type: 3 as const },\n { slug: \"random\", label: \"随机推荐\", type: 4 as const },\n] as const;\n\nexport type OperateFilterSlug = (typeof OPERATE_FILTERS)[number][\"slug\"];\nexport type OperateFilterLabel = (typeof OPERATE_FILTERS)[number][\"label\"];\n\nexport const OPERATE_FILTER_LABELS: OperateFilterLabel[] = OPERATE_FILTERS.map((item) => item.label);\n\nexport const RANK_FILTERS = [\n { slug: \"hot\", label: \"热播榜\", sortOrder: 1 as const },\n { slug: \"new\", label: \"新剧榜\", sortOrder: 2 as const },\n { slug: \"binge\", label: \"追剧榜\", sortOrder: 3 as const },\n] as const;\n\nexport type RankFilterSlug = (typeof RANK_FILTERS)[number][\"slug\"];\nexport type RankFilterLabel = (typeof RANK_FILTERS)[number][\"label\"];\n\nexport const RANK_FILTER_LABELS: RankFilterLabel[] = RANK_FILTERS.map((item) => item.label);\n\nexport const DEFAULT_OPERATE_FILTER: OperateFilterSlug = \"latest\";\nexport const DEFAULT_RANK_FILTER: RankFilterSlug = \"hot\";\n\n/** 短剧 `[filter]` 保留段,避免与 more 路由冲突。 */\nexport const SHORTS_RESERVED_FILTERS = new Set([\"more\", \"page\"]);\n\nexport function parseChannelPage(raw: string | undefined | null) {\n const page = Number(raw);\n if (!Number.isFinite(page) || page < 1) return 0;\n return Math.floor(page);\n}\n\n/**\n * 解析运营列表路径段:\n * [] | ['page', n] | [filter] | [filter, 'page', n]\n */\nexport function parseOperatePathSegments(segments: string[] | undefined) {\n const parts = segments ?? [];\n if (parts.length === 0) {\n return { filterSlug: DEFAULT_OPERATE_FILTER, pageNum: 1, canonical: true as const };\n }\n if (parts.length === 2 && parts[0] === \"page\") {\n const pageNum = parseChannelPage(parts[1]);\n if (!pageNum) return null;\n return { filterSlug: DEFAULT_OPERATE_FILTER, pageNum, canonical: pageNum > 1 };\n }\n const filter = operateFilterBySlug(parts[0]);\n if (!filter) return null;\n if (parts.length === 1) {\n return {\n filterSlug: filter.slug,\n pageNum: 1,\n canonical: filter.slug !== DEFAULT_OPERATE_FILTER,\n };\n }\n if (parts.length === 3 && parts[1] === \"page\") {\n const pageNum = parseChannelPage(parts[2]);\n if (!pageNum) return null;\n return {\n filterSlug: filter.slug,\n pageNum,\n canonical: filter.slug !== DEFAULT_OPERATE_FILTER && pageNum > 1,\n };\n }\n return null;\n}\n\n/** [] | ['page', n] | [filter] | [filter, 'page', n] */\nexport function parseRankPathSegments(segments: string[] | undefined) {\n const parts = segments ?? [];\n if (parts.length === 0) {\n return { filterSlug: DEFAULT_RANK_FILTER, pageNum: 1, canonical: true as const };\n }\n if (parts.length === 2 && parts[0] === \"page\") {\n const pageNum = parseChannelPage(parts[1]);\n if (!pageNum) return null;\n return { filterSlug: DEFAULT_RANK_FILTER, pageNum, canonical: pageNum > 1 };\n }\n const filter = rankFilterBySlug(parts[0]);\n if (!filter) return null;\n if (parts.length === 1) {\n return {\n filterSlug: filter.slug,\n pageNum: 1,\n canonical: filter.slug !== DEFAULT_RANK_FILTER,\n };\n }\n if (parts.length === 3 && parts[1] === \"page\") {\n const pageNum = parseChannelPage(parts[2]);\n if (!pageNum) return null;\n return {\n filterSlug: filter.slug,\n pageNum,\n canonical: filter.slug !== DEFAULT_RANK_FILTER && pageNum > 1,\n };\n }\n return null;\n}\n\n/**\n * 专题路径:列表 [] | ['page', n];详情 [slug] | [slug, 'page', n]\n * tag 路由由 /topics/tag/... 单独处理。\n */\nexport function parseTopicsPathSegments(segments: string[] | undefined) {\n const parts = segments ?? [];\n if (parts.length === 0) return { kind: \"list\" as const, pageNum: 1 };\n if (parts[0] === \"tag\") return null;\n if (parts.length === 2 && parts[0] === \"page\") {\n const pageNum = parseChannelPage(parts[1]);\n if (!pageNum) return null;\n return { kind: \"list\" as const, pageNum };\n }\n if (parts[0] === \"page\") return null;\n if (parts.length === 1) return { kind: \"detail\" as const, slug: parts[0], pageNum: 1 };\n if (parts.length === 3 && parts[1] === \"page\") {\n const pageNum = parseChannelPage(parts[2]);\n if (!pageNum) return null;\n return { kind: \"detail\" as const, slug: parts[0], pageNum };\n }\n return null;\n}\n\n/** 详情/更多分页:[] | ['page', n] */\nexport function parseDetailPageSegments(segments: string[] | undefined) {\n const parts = segments ?? [];\n if (parts.length === 0) return { pageNum: 1, canonical: true as const };\n if (parts.length === 2 && parts[0] === \"page\") {\n const pageNum = parseChannelPage(parts[1]);\n if (!pageNum) return null;\n return { pageNum, canonical: pageNum > 1 };\n }\n return null;\n}\n\nexport function operateFilterBySlug(slug: string | undefined | null) {\n const key = (slug || DEFAULT_OPERATE_FILTER).trim();\n return OPERATE_FILTERS.find((item) => item.slug === key) ?? null;\n}\n\nexport function operateFilterByLabel(label: string) {\n return OPERATE_FILTERS.find((item) => item.label === label) ?? OPERATE_FILTERS[0];\n}\n\nexport function rankFilterBySlug(slug: string | undefined | null) {\n const key = (slug || DEFAULT_RANK_FILTER).trim();\n return RANK_FILTERS.find((item) => item.slug === key) ?? null;\n}\n\nexport function rankFilterByLabel(label: string) {\n return RANK_FILTERS.find((item) => item.label === label) ?? RANK_FILTERS[0];\n}\n\n/** `/shorts` · `/shorts/page/2` · `/shorts/popular` · `/shorts/popular/page/2` */\nexport function operateListPath(base: \"shorts\" | \"series\", filterSlug: string, page = 1) {\n const filter = operateFilterBySlug(filterSlug) ?? OPERATE_FILTERS[0];\n const parts: string[] = [base];\n if (filter.slug !== DEFAULT_OPERATE_FILTER) parts.push(filter.slug);\n if (page > 1) parts.push(\"page\", String(page));\n return `/${parts.join(\"/\")}`;\n}\n\n/** `/rank` · `/rank/page/2` · `/rank/new` · `/rank/binge/page/2` */\nexport function rankListPath(filterSlug: string, page = 1) {\n const filter = rankFilterBySlug(filterSlug) ?? RANK_FILTERS[0];\n const parts: string[] = [\"rank\"];\n if (filter.slug !== DEFAULT_RANK_FILTER) parts.push(filter.slug);\n if (page > 1) parts.push(\"page\", String(page));\n return `/${parts.join(\"/\")}`;\n}\n\n/** `/topics` · `/topics/page/2` */\nexport function topicsListPath(page = 1) {\n return page > 1 ? `/topics/page/${page}` : \"/topics\";\n}\n\n/** `/shorts/more/{slug}` · `/shorts/more/{slug}/page/2` */\nexport function shortsMorePath(slug: string, page = 1) {\n const base = `/shorts/more/${slug}`;\n return page > 1 ? `${base}/page/${page}` : base;\n}\n\n/** `/topics/{slug}` · `/topics/{slug}/page/2` */\nexport function topicDetailPath(slug: string, page = 1) {\n const base = `/topics/${slug}`;\n return page > 1 ? `${base}/page/${page}` : base;\n}\n\n/** `/topics/tag/{tag}` · `/topics/tag/{tag}/page/2`;tag 优先传 slug,无则 id */\nexport function topicTagPath(tag: string, page = 1) {\n const segment = encodeURIComponent(tag);\n const base = `/topics/tag/${segment}`;\n return page > 1 ? `${base}/page/${page}` : base;\n}\n"],"names":["OPERATE_FILTERS","slug","label","type","OPERATE_FILTER_LABELS","map","item","RANK_FILTERS","sortOrder","RANK_FILTER_LABELS","DEFAULT_OPERATE_FILTER","DEFAULT_RANK_FILTER","SHORTS_RESERVED_FILTERS","Set","parseChannelPage","raw","page","Number","isFinite","Math","floor","parseOperatePathSegments","segments","parts","length","filterSlug","pageNum","canonical","filter","operateFilterBySlug","parseRankPathSegments","rankFilterBySlug","parseTopicsPathSegments","kind","parseDetailPageSegments","key","trim","find","operateFilterByLabel","rankFilterByLabel","operateListPath","base","push","String","join","rankListPath","topicsListPath","shortsMorePath","topicDetailPath","topicTagPath","tag","segment","encodeURIComponent"],"mappings":"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"}}, + {"offset": {"line": 3288, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/media/playback.ts"],"sourcesContent":["/** 相对媒资走同域 /h5/m3u8/ 代理,保留签名查询参数(由 lib/media/proxy 转发)。 */\n\nexport function resolvePlayURL(value: unknown): string {\n const url = String(value ?? \"\").trim();\n if (!url) return \"\";\n if (/^(https?:\\/\\/|blob:|data:)/i.test(url)) return url;\n if (url.startsWith(\"//\")) return `https:${url}`;\n const path = url.replace(/^\\/+/, \"\");\n return \"/\" + (path.startsWith(\"h5/m3u8/\") ? path : `h5/m3u8/${path}`);\n}\n\nexport const SHELL_BROWSER =\n /Quark|MQQBrowser|QQ\\/|UCBrowser|UCWEB|MicroMessenger|baidubrowser|bdbrowser|BaiduHD|MiuiBrowser|HuaweiBrowser|HONORBrowser|HBPC|SogouMobileBrowser|VivoBrowser|HeyTapBrowser|OPPOBrowser|HeyTap|QihooBrowser|360Browser|360SE|360EE/i;\n\nexport function nativeHLS(video: HTMLVideoElement, userAgent = navigator.userAgent): boolean {\n return (\n !SHELL_BROWSER.test(userAgent) &&\n /Safari/i.test(userAgent) &&\n !/Chrome|Chromium|CriOS|Edg|OPR/i.test(userAgent) &&\n !!video.canPlayType(\"application/vnd.apple.mpegurl\")\n );\n}\n\nexport function isHLSURL(url: string): boolean {\n return /\\.m3u8(?:[?#]|$)|\\/h5\\/m3u8\\//i.test(url);\n}\n"],"names":["resolvePlayURL","value","url","String","trim","test","startsWith","path","replace","SHELL_BROWSER","nativeHLS","video","userAgent","navigator","canPlayType","isHLSURL"],"mappings":"AAAA,yDAAyD;;;;;;;;;;AAElD,SAASA,eAAeC,KAAc;IAC3C,MAAMC,MAAMC,OAAOF,SAAS,IAAIG,IAAI;IACpC,IAAI,CAACF,KAAK,OAAO;IACjB,IAAI,8BAA8BG,IAAI,CAACH,MAAM,OAAOA;IACpD,IAAIA,IAAII,UAAU,CAAC,OAAO,OAAO,CAAC,MAAM,EAAEJ,KAAK;IAC/C,MAAMK,OAAOL,IAAIM,OAAO,CAAC,QAAQ;IACjC,OAAO,MAAM,CAACD,KAAKD,UAAU,CAAC,cAAcC,OAAO,CAAC,QAAQ,EAAEA,MAAM;AACtE;AAEO,MAAME,gBACX;AAEK,SAASC,UAAUC,KAAuB,EAAEC,YAAYC,UAAUD,SAAS;IAChF,OACE,CAACH,cAAcJ,IAAI,CAACO,cACpB,UAAUP,IAAI,CAACO,cACf,CAAC,iCAAiCP,IAAI,CAACO,cACvC,CAAC,CAACD,MAAMG,WAAW,CAAC;AAExB;AAEO,SAASC,SAASb,GAAW;IAClC,OAAO,iCAAiCG,IAAI,CAACH;AAC/C"}}, + {"offset": {"line": 3317, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/playlet-display.ts"],"sourcesContent":["import type { PlayletCommonData } from \"@/lib/api/types\";\nimport { topicDetailPath, topicTagPath } from \"@/lib/channel-routes\";\n\nfunction playletKey(item: Pick) {\n return encodeURIComponent(item.slug?.trim() || String(item.id));\n}\n\n/** 详情路径优先 slug,无 slug 回退 id。 */\nexport function playletHref(item: Pick) {\n return `/drama/${playletKey(item)}`;\n}\n\n/** 播放路径前缀:`/play/{slug|id}`,客户端组件只能接收字符串。 */\nexport function playletPlayBase(item: Pick) {\n return `/play/${playletKey(item)}`;\n}\n\n/** 播放路径:`/play/{slug|id}/{episode}` */\nexport function playletPlayHref(item: Pick, episode: number) {\n return `${playletPlayBase(item)}/${episode}`;\n}\n\nexport type PlayletTagLink = { label: string; key: string; kind: \"tag\" | \"theme\" };\n\n/**\n * 展示名 + 跳转 key(优先 slug,无 slug 用 id)。\n * 有 tagNames 时走标签;否则回退 themeNames / themeSlugs / themeIds。\n * 标签进 `/topics/tag/{slug}`,题材进 `/topics/{slug}`。\n */\nexport function playletTagLinks(\n item: Pick,\n limit = 2,\n): PlayletTagLink[] {\n const useTags = (item.tagNames || []).some(Boolean);\n const names = (useTags ? item.tagNames : item.themeNames) || [];\n const slugs = (useTags ? item.tagSlugs : item.themeSlugs) || [];\n const ids = (useTags ? item.tagIds : item.themeIds) || [];\n const kind: PlayletTagLink[\"kind\"] = useTags ? \"tag\" : \"theme\";\n const links: PlayletTagLink[] = [];\n for (let i = 0; i < names.length && links.length < limit; i += 1) {\n const label = names[i]?.trim();\n if (!label) continue;\n const slug = slugs[i]?.trim();\n const id = ids[i];\n const key = slug || (id != null && id !== 0 ? String(id) : \"\");\n if (!key) continue;\n links.push({ label, key, kind });\n }\n return links;\n}\n\n/** 标签查 tag/list,题材查 topic/detail。题材 slug 打到 tag/list 会查不到。 */\nexport function playletTagHref(tag: Pick) {\n return tag.kind === \"theme\" ? topicDetailPath(tag.key) : topicTagPath(tag.key);\n}\n\n/**\n * 选集网格 / 路由用的总集数。\n * 有 playletChapterInfo 时以最大 currentEpisode 为准,避免 totalEpisode 虚高出现无章节空格;\n * 章节为空时回退 totalEpisode。\n */\nexport function resolvePlayletEpisodeTotal(detail: {\n totalEpisode?: number | null;\n playletChapterInfo?: { currentEpisode?: number | null }[] | null;\n}) {\n const chapters = detail.playletChapterInfo || [];\n let maxEp = 0;\n for (const chapter of chapters) {\n const ep = Number(chapter.currentEpisode) || 0;\n if (ep > maxEp) maxEp = ep;\n }\n if (maxEp > 0) return maxEp;\n return Math.max(1, Number(detail.totalEpisode) || 0, chapters.length || 0, 1);\n}\n\n/** 文案「全 N 集」优先用接口 totalEpisode,没有再回退选集总数。 */\nexport function resolvePlayletEpisodeLabelTotal(detail: {\n totalEpisode?: number | null;\n playletChapterInfo?: { currentEpisode?: number | null }[] | null;\n}) {\n const advertised = Number(detail.totalEpisode) || 0;\n if (advertised > 0) return advertised;\n return resolvePlayletEpisodeTotal(detail);\n}\n\n/** 热度展示文案(仅格式化,不改字段名)。 */\nexport function formatHeatValue(value: number | null | undefined) {\n if (value == null || Number.isNaN(value)) return \"0\";\n if (value >= 10_000) {\n const wan = value / 10_000;\n return `${wan >= 10 ? wan.toFixed(0) : wan.toFixed(1).replace(/\\.0$/, \"\")}万`;\n }\n return value.toLocaleString(\"zh-CN\");\n}\n\n/** 封面角标仅三种,优先级:原创 > 爆剧 > 新剧。 */\nexport function playletCoverBadge(item: Pick) {\n if (item.isRecommend) return { kind: \"free\" as const, label: \"原创\" as const };\n if (item.isFeatured) return { kind: \"hot\" as const, label: \"爆剧\" as const };\n if (item.isNew) return { kind: \"new\" as const, label: \"新剧\" as const };\n return null;\n}\n"],"names":["playletKey","item","encodeURIComponent","slug","trim","String","id","playletHref","playletPlayBase","playletPlayHref","episode","playletTagLinks","limit","useTags","tagNames","some","Boolean","names","themeNames","slugs","tagSlugs","themeSlugs","ids","tagIds","themeIds","kind","links","i","length","label","key","push","playletTagHref","tag","resolvePlayletEpisodeTotal","detail","chapters","playletChapterInfo","maxEp","chapter","ep","Number","currentEpisode","Math","max","totalEpisode","resolvePlayletEpisodeLabelTotal","advertised","formatHeatValue","value","isNaN","wan","toFixed","replace","toLocaleString","playletCoverBadge","isRecommend","isFeatured","isNew"],"mappings":";;;;;;;;;;;;;;;;;;;;AACA;;AAEA,SAASA,WAAWC,IAA4C;IAC9D,OAAOC,mBAAmBD,KAAKE,IAAI,EAAEC,UAAUC,OAAOJ,KAAKK,EAAE;AAC/D;AAGO,SAASC,YAAYN,IAA4C;IACtE,OAAO,CAAC,OAAO,EAAED,WAAWC,OAAO;AACrC;AAGO,SAASO,gBAAgBP,IAA4C;IAC1E,OAAO,CAAC,MAAM,EAAED,WAAWC,OAAO;AACpC;AAGO,SAASQ,gBAAgBR,IAA4C,EAAES,OAAe;IAC3F,OAAO,GAAGF,gBAAgBP,MAAM,CAAC,EAAES,SAAS;AAC9C;AASO,SAASC,gBACdV,IAA4G,EAC5GW,QAAQ,CAAC;IAET,MAAMC,UAAU,CAACZ,KAAKa,QAAQ,IAAI,EAAE,EAAEC,IAAI,CAACC;IAC3C,MAAMC,QAAQ,CAACJ,UAAUZ,KAAKa,QAAQ,GAAGb,KAAKiB,UAAU,KAAK,EAAE;IAC/D,MAAMC,QAAQ,CAACN,UAAUZ,KAAKmB,QAAQ,GAAGnB,KAAKoB,UAAU,KAAK,EAAE;IAC/D,MAAMC,MAAM,CAACT,UAAUZ,KAAKsB,MAAM,GAAGtB,KAAKuB,QAAQ,KAAK,EAAE;IACzD,MAAMC,OAA+BZ,UAAU,QAAQ;IACvD,MAAMa,QAA0B,EAAE;IAClC,IAAK,IAAIC,IAAI,GAAGA,IAAIV,MAAMW,MAAM,IAAIF,MAAME,MAAM,GAAGhB,OAAOe,KAAK,EAAG;QAChE,MAAME,QAAQZ,KAAK,CAACU,EAAE,EAAEvB;QACxB,IAAI,CAACyB,OAAO;QACZ,MAAM1B,OAAOgB,KAAK,CAACQ,EAAE,EAAEvB;QACvB,MAAME,KAAKgB,GAAG,CAACK,EAAE;QACjB,MAAMG,MAAM3B,QAAQ,CAACG,MAAM,QAAQA,OAAO,IAAID,OAAOC,MAAM,EAAE;QAC7D,IAAI,CAACwB,KAAK;QACVJ,MAAMK,IAAI,CAAC;YAAEF;YAAOC;YAAKL;QAAK;IAChC;IACA,OAAOC;AACT;AAGO,SAASM,eAAeC,GAAyC;IACtE,OAAOA,IAAIR,IAAI,KAAK,UAAU,IAAA,kJAAe,EAACQ,IAAIH,GAAG,IAAI,IAAA,+IAAY,EAACG,IAAIH,GAAG;AAC/E;AAOO,SAASI,2BAA2BC,MAG1C;IACC,MAAMC,WAAWD,OAAOE,kBAAkB,IAAI,EAAE;IAChD,IAAIC,QAAQ;IACZ,KAAK,MAAMC,WAAWH,SAAU;QAC9B,MAAMI,KAAKC,OAAOF,QAAQG,cAAc,KAAK;QAC7C,IAAIF,KAAKF,OAAOA,QAAQE;IAC1B;IACA,IAAIF,QAAQ,GAAG,OAAOA;IACtB,OAAOK,KAAKC,GAAG,CAAC,GAAGH,OAAON,OAAOU,YAAY,KAAK,GAAGT,SAASR,MAAM,IAAI,GAAG;AAC7E;AAGO,SAASkB,gCAAgCX,MAG/C;IACC,MAAMY,aAAaN,OAAON,OAAOU,YAAY,KAAK;IAClD,IAAIE,aAAa,GAAG,OAAOA;IAC3B,OAAOb,2BAA2BC;AACpC;AAGO,SAASa,gBAAgBC,KAAgC;IAC9D,IAAIA,SAAS,QAAQR,OAAOS,KAAK,CAACD,QAAQ,OAAO;IACjD,IAAIA,SAAS,QAAQ;QACnB,MAAME,MAAMF,QAAQ;QACpB,OAAO,GAAGE,OAAO,KAAKA,IAAIC,OAAO,CAAC,KAAKD,IAAIC,OAAO,CAAC,GAAGC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC9E;IACA,OAAOJ,MAAMK,cAAc,CAAC;AAC9B;AAGO,SAASC,kBAAkBtD,IAAqE;IACrG,IAAIA,KAAKuD,WAAW,EAAE,OAAO;QAAE/B,MAAM;QAAiBI,OAAO;IAAc;IAC3E,IAAI5B,KAAKwD,UAAU,EAAE,OAAO;QAAEhC,MAAM;QAAgBI,OAAO;IAAc;IACzE,IAAI5B,KAAKyD,KAAK,EAAE,OAAO;QAAEjC,MAAM;QAAgBI,OAAO;IAAc;IACpE,OAAO;AACT"}}, + {"offset": {"line": 3418, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/playlet/card.ts"],"sourcesContent":["import type { HomeConfigThemeData, PlayletChapterData, PlayletCommonData, PlayletTopicPageItem } from \"@/lib/api/types\";\nimport type { Collection, Drama } from \"@/lib/catalog/types\";\nimport { formatHeatValue, playletCoverBadge, playletTagLinks } from \"@/lib/playlet-display\";\n\ntype CardSource = PlayletCommonData & {\n playletChapterInfo?: PlayletChapterData[];\n isLike?: number;\n isCollect?: number;\n};\n\nexport function playletToDrama(item: CardSource): Drama {\n const badge = playletCoverBadge(item);\n const tagLinks = playletTagLinks(item, 4);\n const chapters = item.playletChapterInfo;\n const firstEpisode = chapters?.find((chapter) => chapter.canWatch)?.currentEpisode || chapters?.[0]?.currentEpisode || 1;\n return {\n id: item.id,\n routeKey: item.slug?.trim() || String(item.id),\n title: item.title || item.playName || \"未命名\",\n genre: item.themeNames?.find(Boolean) || item.tagNames?.find(Boolean) || \"\",\n heat: \"\",\n heatText: formatHeatValue(item.heatValue),\n eps: item.totalEpisode || 0,\n mode: \"免费\",\n desc: item.desc || item.description || \"\",\n badge: badge?.label ?? \"\",\n badgeType: badge?.kind || \"\",\n tags: tagLinks.map((tag) => tag.label),\n tagLinks,\n likes: item.countLike || 0,\n likeText: formatHeatValue(item.countLike),\n favorites: item.countCollect || 0,\n favoriteText: formatHeatValue(item.countCollect),\n sample: false,\n coverUrl: item.cover || item.horizontalCover || item.banner || \"\",\n firstEpisode,\n finished: item.updateStatus === 2,\n isLike: item.isLike === 1,\n isCollect: item.isCollect === 1,\n };\n}\n\nfunction firstImage(values: Array) {\n return values.find((value) => value?.trim())?.trim() || \"\";\n}\n\n/** 首页题材没有 covers,用题材下第一部短剧的横图或封面当卡片底图。 */\nexport function themeCardCover(list?: Array | null>) {\n for (const item of list || []) {\n const src = firstImage([item?.horizontalCover, item?.cover, item?.banner]);\n if (src) return src;\n }\n return \"\";\n}\n\nexport function topicToCollection(\n item: Pick & { cover?: string },\n): Collection {\n const iconUrl = item.icon?.trim() || \"\";\n const photo = firstImage([...(item.covers || []), item.cover]);\n return {\n key: item.slug?.trim() || String(item.id),\n title: item.name || \"专题\",\n subtitle: item.desc || \"\",\n ids: [],\n coverId: 0,\n coverUrl: iconUrl || photo,\n iconUrl: \"\",\n count: item.playletCount || 0,\n };\n}\n\n/** 首页专题。封面优先题材 icon,没有 icon 时用题材下第一部短剧的图。 */\nexport function topicThemeToCollection(item: HomeConfigThemeData): Collection {\n return topicToCollection({\n id: item.id,\n name: item.name,\n desc: \"\",\n slug: item.slug,\n icon: item.icon,\n covers: [],\n cover: themeCardCover(item.list),\n playletCount: item.playletCount,\n });\n}\n"],"names":["playletToDrama","item","badge","tagLinks","chapters","playletChapterInfo","firstEpisode","find","chapter","canWatch","currentEpisode","id","routeKey","slug","trim","String","title","playName","genre","themeNames","Boolean","tagNames","heat","heatText","heatValue","eps","totalEpisode","mode","desc","description","label","badgeType","kind","tags","map","tag","likes","countLike","likeText","favorites","countCollect","favoriteText","sample","coverUrl","cover","horizontalCover","banner","finished","updateStatus","isLike","isCollect","firstImage","values","value","themeCardCover","list","src","topicToCollection","iconUrl","icon","photo","covers","key","name","subtitle","ids","coverId","count","playletCount","topicThemeToCollection"],"mappings":";;;;;;;;;;AAEA;;AAQO,SAASA,eAAeC,IAAgB;IAC7C,MAAMC,QAAQ,IAAA,qJAAiB,EAACD;IAChC,MAAME,WAAW,IAAA,mJAAe,EAACF,MAAM;IACvC,MAAMG,WAAWH,KAAKI,kBAAkB;IACxC,MAAMC,eAAeF,UAAUG,KAAK,CAACC,UAAYA,QAAQC,QAAQ,GAAGC,kBAAkBN,UAAU,CAAC,EAAE,EAAEM,kBAAkB;IACvH,OAAO;QACLC,IAAIV,KAAKU,EAAE;QACXC,UAAUX,KAAKY,IAAI,EAAEC,UAAUC,OAAOd,KAAKU,EAAE;QAC7CK,OAAOf,KAAKe,KAAK,IAAIf,KAAKgB,QAAQ,IAAI;QACtCC,OAAOjB,KAAKkB,UAAU,EAAEZ,KAAKa,YAAYnB,KAAKoB,QAAQ,EAAEd,KAAKa,YAAY;QACzEE,MAAM;QACNC,UAAU,IAAA,mJAAe,EAACtB,KAAKuB,SAAS;QACxCC,KAAKxB,KAAKyB,YAAY,IAAI;QAC1BC,MAAM;QACNC,MAAM3B,KAAK2B,IAAI,IAAI3B,KAAK4B,WAAW,IAAI;QACvC3B,OAAOA,OAAO4B,SAAS;QACvBC,WAAW7B,OAAO8B,QAAQ;QAC1BC,MAAM9B,SAAS+B,GAAG,CAAC,CAACC,MAAQA,IAAIL,KAAK;QACrC3B;QACAiC,OAAOnC,KAAKoC,SAAS,IAAI;QACzBC,UAAU,IAAA,mJAAe,EAACrC,KAAKoC,SAAS;QACxCE,WAAWtC,KAAKuC,YAAY,IAAI;QAChCC,cAAc,IAAA,mJAAe,EAACxC,KAAKuC,YAAY;QAC/CE,QAAQ;QACRC,UAAU1C,KAAK2C,KAAK,IAAI3C,KAAK4C,eAAe,IAAI5C,KAAK6C,MAAM,IAAI;QAC/DxC;QACAyC,UAAU9C,KAAK+C,YAAY,KAAK;QAChCC,QAAQhD,KAAKgD,MAAM,KAAK;QACxBC,WAAWjD,KAAKiD,SAAS,KAAK;IAChC;AACF;AAEA,SAASC,WAAWC,MAAwC;IAC1D,OAAOA,OAAO7C,IAAI,CAAC,CAAC8C,QAAUA,OAAOvC,SAASA,UAAU;AAC1D;AAGO,SAASwC,eAAeC,IAAoF;IACjH,KAAK,MAAMtD,QAAQsD,QAAQ,EAAE,CAAE;QAC7B,MAAMC,MAAML,WAAW;YAAClD,MAAM4C;YAAiB5C,MAAM2C;YAAO3C,MAAM6C;SAAO;QACzE,IAAIU,KAAK,OAAOA;IAClB;IACA,OAAO;AACT;AAEO,SAASC,kBACdxD,IAA2H;IAE3H,MAAMyD,UAAUzD,KAAK0D,IAAI,EAAE7C,UAAU;IACrC,MAAM8C,QAAQT,WAAW;WAAKlD,KAAK4D,MAAM,IAAI,EAAE;QAAG5D,KAAK2C,KAAK;KAAC;IAC7D,OAAO;QACLkB,KAAK7D,KAAKY,IAAI,EAAEC,UAAUC,OAAOd,KAAKU,EAAE;QACxCK,OAAOf,KAAK8D,IAAI,IAAI;QACpBC,UAAU/D,KAAK2B,IAAI,IAAI;QACvBqC,KAAK,EAAE;QACPC,SAAS;QACTvB,UAAUe,WAAWE;QACrBF,SAAS;QACTS,OAAOlE,KAAKmE,YAAY,IAAI;IAC9B;AACF;AAGO,SAASC,uBAAuBpE,IAAyB;IAC9D,OAAOwD,kBAAkB;QACvB9C,IAAIV,KAAKU,EAAE;QACXoD,MAAM9D,KAAK8D,IAAI;QACfnC,MAAM;QACNf,MAAMZ,KAAKY,IAAI;QACf8C,MAAM1D,KAAK0D,IAAI;QACfE,QAAQ,EAAE;QACVjB,OAAOU,eAAerD,KAAKsD,IAAI;QAC/Ba,cAAcnE,KAAKmE,YAAY;IACjC;AACF"}}] +} \ No newline at end of file diff --git a/.next-dev/dev/server/chunks/ssr/[root-of-the-server]__1w0ppiu6oha67._.js b/.next-dev/dev/server/chunks/ssr/[root-of-the-server]__1w0ppiu6oha67._.js index 36d83d9..a486015 100644 --- a/.next-dev/dev/server/chunks/ssr/[root-of-the-server]__1w0ppiu6oha67._.js +++ b/.next-dev/dev/server/chunks/ssr/[root-of-the-server]__1w0ppiu6oha67._.js @@ -1850,7 +1850,7 @@ __turbopack_context__.s([ /** * 浏览器接口根地址。 * 留空时走同域 `/api/*`,由服务端转到 API_PROXY_TARGET。 - */ const DEFAULT_UPSTREAM = "https://sgdj-h5.80sygtm.com"; + */ const DEFAULT_UPSTREAM = "https://webhgbapi.mfcg.me"; const raw = ("TURBOPACK compile-time value", ""); const API_BASE_URL = (raw ?? "").replace(/\/$/, ""); function pointsAtThisServer(base) { diff --git a/.next-dev/dev/server/chunks/ssr/[root-of-the-server]__1w0ppiu6oha67._.js.map b/.next-dev/dev/server/chunks/ssr/[root-of-the-server]__1w0ppiu6oha67._.js.map index a6f04df..75181ef 100644 --- a/.next-dev/dev/server/chunks/ssr/[root-of-the-server]__1w0ppiu6oha67._.js.map +++ b/.next-dev/dev/server/chunks/ssr/[root-of-the-server]__1w0ppiu6oha67._.js.map @@ -43,7 +43,7 @@ {"offset": {"line": 1507, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/social-links.tsx"],"sourcesContent":["import { InlineIcon } from \"@/components/site/inline-icon\";\nimport { businessContactLinks } from \"@/lib/site/social-links\";\n\ntype SocialLinksProps = {\n className: string;\n /** 区域名称,供读屏识别整组入口 */\n ariaLabel: string;\n /** 侧栏展开态展示文案;抽屉仅图标 */\n showLabel?: boolean;\n};\n\nexport function SocialLinks({ className, ariaLabel, showLabel = false }: SocialLinksProps) {\n const links = businessContactLinks();\n if (!links.length) return null;\n return (\n \n );\n}\n"],"names":["SocialLinks","className","ariaLabel","showLabel","links","length","map","item","href","target","rel","title","label","file","icon","src","alt","width","height"],"mappings":";;;;;AAAA;AACA;;;;AAUO,SAASA,YAAY,EAAEC,SAAS,EAAEC,SAAS,EAAEC,YAAY,KAAK,EAAoB;IACvF,MAAMC,QAAQ,IAAA,6JAAoB;IAClC,IAAI,CAACA,MAAMC,MAAM,EAAE,OAAO;IAC1B,qBACE,8OAAC;QAAIJ,WAAWA;QAAW,cAAYC;kBACpCE,MAAME,GAAG,CAAC,CAACC,OACVJ,0BACE,8OAAC;gBAECK,MAAMD,KAAKC,IAAI;gBACfC,QAAO;gBACPC,KAAI;gBACJC,OAAOJ,KAAKK,KAAK;gBACjB,cAAYL,KAAKK,KAAK;;kCAEtB,8OAAC,0JAAU;wBAACC,MAAMN,KAAKO,IAAI;wBAAEb,WAAU;;;;;;kCACvC,8OAAC;wBAAKA,WAAU;wBAAuB,eAAY;kCAChDM,KAAKK,KAAK;;;;;;;eATRL,KAAKK,KAAK;;;;qCAajB,8OAAC;gBAAmBJ,MAAMD,KAAKC,IAAI;gBAAEC,QAAO;gBAASC,KAAI;gBAAsBC,OAAOJ,KAAKK,KAAK;0BAC9F,cAAA,8OAAC;oBAAIG,KAAK,CAAC,QAAQ,EAAER,KAAKO,IAAI,EAAE;oBAAEE,KAAKT,KAAKK,KAAK;oBAAEK,OAAO;oBAAIC,QAAQ;;;;;;eADhEX,KAAKK,KAAK;;;;;;;;;;AAO5B"}}, {"offset": {"line": 1582, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/app-config-server.ts"],"sourcesContent":["import { serverFetchJson } from \"./server-fetch\";\nimport type { ConfigInfoResp } from \"./types\";\n\nexport type AppConfigLoadResult = {\n data: ConfigInfoResp | null;\n error: string;\n};\n\n/** 服务端拉取公共配置。GET /api/app/config/info,无查询参数。 */\nexport async function getAppConfigInfo(): Promise {\n try {\n const data = await serverFetchJson(\"/api/app/config/info\", {\n maxAttempts: 2,\n timeoutMs: 10_000,\n revalidate: 60,\n tags: [\"app-config\"],\n });\n return { data, error: \"\" };\n } catch (reason: unknown) {\n const error = reason instanceof Error ? reason.message : \"公共配置加载失败\";\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\"[app-config]\", error);\n }\n return { data: null, error };\n }\n}\n"],"names":["getAppConfigInfo","data","maxAttempts","timeoutMs","revalidate","tags","error","reason","Error","message","console","warn"],"mappings":";;;;AAAA;;AASO,eAAeA;IACpB,IAAI;QACF,MAAMC,OAAO,MAAM,IAAA,uJAAe,EAAiB,wBAAwB;YACzEC,aAAa;YACbC,WAAW;YACXC,YAAY;YACZC,MAAM;gBAAC;aAAa;QACtB;QACA,OAAO;YAAEJ;YAAMK,OAAO;QAAG;IAC3B,EAAE,OAAOC,QAAiB;QACxB,MAAMD,QAAQC,kBAAkBC,QAAQD,OAAOE,OAAO,GAAG;QACzD,wCAA4C;YAC1CC,QAAQC,IAAI,CAAC,gBAAgBL;QAC/B;QACA,OAAO;YAAEL,MAAM;YAAMK;QAAM;IAC7B;AACF"}}, {"offset": {"line": 1617, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/client-headers.ts"],"sourcesContent":["const APP_VER = process.env.NEXT_PUBLIC_APP_VERSION?.trim() || \"1.0.0\";\n\ntype HeaderSource = Pick;\n\nfunction clean(value: string) {\n return value.replace(/[^\\x20-\\x7E]|[;=]/g, \" \").trim();\n}\n\n/** 不依赖 node:net,避免被浏览器端打包。 */\nfunction isIP(value: string) {\n if (/^(?:\\d{1,3}\\.){3}\\d{1,3}$/.test(value)) {\n return value.split(\".\").every((part) => {\n const n = Number(part);\n return String(n) === part && n >= 0 && n <= 255;\n });\n }\n // 宽松校验 IPv6,够用来转发 X-Real-IP。\n return value.includes(\":\") && /^[0-9a-fA-F:.]+$/.test(value);\n}\n\nfunction sysType(ua: string) {\n const value = ua.toLowerCase();\n if (value.includes(\"android\")) return \"h5_android\";\n if (value.includes(\"iphone\") || value.includes(\"ipad\") || value.includes(\"ipod\")) return \"h5_ios\";\n return \"h5_pc\";\n}\n\nfunction guessAndroidBrand(model: string, ua: string) {\n const value = `${model} ${ua}`;\n const brands: Array<[RegExp, string]> = [\n [/Build\\/HONOR|\\bHONOR\\b/i, \"Honor\"],\n [/Build\\/HUAWEI|HUAWEI|HW-/i, \"Huawei\"],\n [/SM-|samsung|Galaxy/i, \"Samsung\"],\n [/Pixel/i, \"Google\"],\n [/Redmi|POCO|XiaoMi|\\bMi\\b/i, \"Xiaomi\"],\n [/OPPO|\\bCPH\\d{3,4}/i, \"OPPO\"],\n [/vivo|\\bV\\d{4}/i, \"vivo\"],\n [/OnePlus|ONEPLUS/i, \"OnePlus\"],\n [/realme|\\bRMX\\d{3,4}/i, \"realme\"],\n ];\n return brands.find(([pattern]) => pattern.test(value))?.[1] || \"\";\n}\n\nfunction parseBrowser(ua: string) {\n const edge = ua.match(/Edg\\/([\\d.]+)/i);\n if (edge) return `Edge ${edge[1]}`;\n const opera = ua.match(/(?:OPR|Opera)\\/([\\d.]+)/i);\n if (opera) return `Opera ${opera[1]}`;\n const chrome = ua.match(/Chrome\\/([\\d.]+)/i);\n if (chrome && !/Edg\\//i.test(ua)) return `Chrome ${chrome[1]}`;\n const safari = ua.match(/Version\\/([\\d.]+).*Safari/i);\n if (safari) return `Safari ${safari[1]}`;\n const firefox = ua.match(/Firefox\\/([\\d.]+)/i);\n if (firefox) return `Firefox ${firefox[1]}`;\n const ie = ua.match(/(?:MSIE\\s|Trident.*rv:)([\\d.]+)/i);\n if (ie) return `IE ${ie[1]}`;\n return \"\";\n}\n\ntype DeviceProfile = {\n devType: string;\n sysType: \"h5_ios\" | \"h5_android\" | \"h5_pc\";\n buildID: string;\n deviceBrand: string;\n deviceModel: string;\n systemName: string;\n systemVersion: string;\n};\n\n/** 从浏览器 User-Agent 解析设备公共字段,口径对齐 jha-1040 useragent.ParseDeviceFromUA。 */\nfunction parseDeviceFromUA(ua: string): DeviceProfile {\n const raw = ua.trim();\n let deviceBrand = \"\";\n let deviceModel = \"\";\n let deviceType = \"desktop\";\n let systemName = \"Other\";\n let systemVersion = \"\";\n\n if (/iPhone|iPad|iPod/i.test(raw)) {\n systemName = \"iOS\";\n deviceBrand = \"Apple\";\n const ios = raw.match(/OS (\\d+[_\\d]*) like Mac OS X/i);\n if (ios) systemVersion = ios[1].replace(/_/g, \".\");\n if (/iPad/i.test(raw)) {\n deviceModel = \"iPad\";\n deviceType = \"tablet\";\n } else if (/iPod/i.test(raw)) {\n deviceModel = \"iPod\";\n deviceType = \"mobile\";\n } else {\n deviceModel = \"iPhone\";\n deviceType = \"mobile\";\n }\n } else if (/Android/i.test(raw)) {\n systemName = \"Android\";\n const version = raw.match(/Android ([\\d.]+)/i);\n if (version) systemVersion = version[1];\n const model = raw.match(/Android\\s+[\\d.]+;\\s*([^;)]+?)(?:\\s+Build\\/|\\))/i);\n if (model?.[1]) deviceModel = model[1].trim();\n deviceBrand = guessAndroidBrand(deviceModel, raw);\n deviceType = /Mobile/i.test(raw) ? \"mobile\" : \"tablet\";\n } else if (/Windows/i.test(raw)) {\n systemName = \"Windows\";\n const win = raw.match(/Windows NT ([\\d.]+)/i);\n if (win) systemVersion = win[1];\n } else if (/Mac OS X|Macintosh/i.test(raw)) {\n systemName = \"macOS\";\n deviceBrand = \"Apple\";\n deviceModel = \"Mac\";\n const mac = raw.match(/Mac OS X ([\\d_]+)/i);\n if (mac) systemVersion = mac[1].replace(/_/g, \".\");\n } else if (/Linux/i.test(raw)) {\n systemName = \"Linux\";\n }\n\n const devType = [deviceBrand, deviceModel, deviceType].map((part) => part.trim()).filter(Boolean).join(\" \");\n return {\n devType: devType || \"desktop\",\n sysType: sysType(raw),\n buildID: clean(parseBrowser(raw)) || \"web\",\n deviceBrand,\n deviceModel,\n systemName,\n systemVersion,\n };\n}\n\nfunction xUserAgent(ua: string, extra: { devID?: string; sid?: string } = {}) {\n const info = parseDeviceFromUA(ua);\n return [\n extra.devID ? `DevID=${clean(extra.devID)}` : \"\",\n `DevType=${clean(info.devType)}`,\n `SysType=${info.sysType}`,\n `Ver=${clean(APP_VER)}`,\n `BuildID=${clean(info.buildID) || \"web\"}`,\n `device_brand=${clean(info.deviceBrand)}`,\n `device_model=${clean(info.deviceModel)}`,\n `system_name=${clean(info.systemName)}`,\n `system_version=${clean(info.systemVersion)}`,\n `sid=${clean(extra.sid || \"\")}`,\n ]\n .filter((part) => part !== \"\")\n .join(\";\");\n}\n\nfunction sessionId(source: HeaderSource) {\n const cookies = new Map(\n (source.get(\"cookie\") || \"\").split(\";\").map((value) => {\n const index = value.indexOf(\"=\");\n if (index < 0) return [\"\", \"\"];\n return [value.slice(0, index).trim(), value.slice(index + 1).trim()];\n }),\n );\n const sid = cookies.get(\"sid\");\n if (sid) return sid;\n const token = cookies.get(\"_s_token_\") || \"\";\n if (token.startsWith(\"{\")) {\n try {\n return String(JSON.parse(token).sid || \"\");\n } catch {\n /* ignore */\n }\n }\n return token;\n}\n\n/** 浏览器请求只带 X-User-Agent。User-Agent 由浏览器自己发,不在前端伪造。 */\nexport function buildBrowserApiHeaders(devID = \"\", sid = \"\") {\n const ua = typeof navigator !== \"undefined\" ? navigator.userAgent : \"\";\n return { \"X-User-Agent\": xUserAgent(ua, { devID, sid }) };\n}\n\n/** 从请求头解析客户端 IP,优先 X-Real-IP,其次 X-Forwarded-For 第一段。 */\nexport function clientIp(source: HeaderSource, fallback = \"\") {\n const candidates = [source.get(\"x-real-ip\"), source.get(\"x-forwarded-for\")?.split(\",\")[0], fallback];\n for (const value of candidates) {\n const ip = value?.trim() || \"\";\n if (ip && isIP(ip)) return ip;\n }\n return \"\";\n}\n\n/**\n * 服务端转给上游的身份头:保留浏览器 User-Agent / X-User-Agent,并补上 X-Real-IP。\n * 没有浏览器上下文时回退到合成 X-User-Agent。\n */\nexport function clientHeaders(\n source?: HeaderSource,\n overrides: { userAgent?: string; clientIp?: string; devID?: string } = {},\n): Record {\n const result: Record = {};\n const ua = (overrides.userAgent || source?.get(\"user-agent\") || \"\").trim();\n if (ua) result[\"User-Agent\"] = ua;\n\n const incomingXua = source?.get(\"x-user-agent\")?.trim() || \"\";\n if (incomingXua) {\n result[\"X-User-Agent\"] = incomingXua;\n } else if (ua) {\n result[\"X-User-Agent\"] = xUserAgent(ua, { sid: source ? sessionId(source) : \"\" });\n } else {\n Object.assign(result, buildBrowserApiHeaders(overrides.devID || \"web-ssr\"));\n }\n\n const ip = overrides.clientIp || (source ? clientIp(source) : \"\");\n if (ip) result[\"X-Real-IP\"] = ip;\n\n return result;\n}\n"],"names":["APP_VER","trim","clean","value","replace","isIP","test","split","every","part","n","Number","String","includes","sysType","ua","toLowerCase","guessAndroidBrand","model","brands","find","pattern","parseBrowser","edge","match","opera","chrome","safari","firefox","ie","parseDeviceFromUA","raw","deviceBrand","deviceModel","deviceType","systemName","systemVersion","ios","version","win","mac","devType","map","filter","Boolean","join","buildID","xUserAgent","extra","info","devID","sid","sessionId","source","cookies","Map","get","index","indexOf","slice","token","startsWith","JSON","parse","buildBrowserApiHeaders","navigator","userAgent","clientIp","fallback","candidates","ip","clientHeaders","overrides","result","incomingXua","Object","assign"],"mappings":"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"}}, - {"offset": {"line": 1841, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/config.ts"],"sourcesContent":["/**\n * 浏览器接口根地址。\n * 留空时走同域 `/api/*`,由服务端转到 API_PROXY_TARGET。\n */\nconst DEFAULT_UPSTREAM = \"https://sgdj-h5.80sygtm.com\";\nconst raw = process.env.NEXT_PUBLIC_API_BASE_URL;\nexport const API_BASE_URL = (raw ?? \"\").replace(/\\/$/, \"\");\n\n/** 代理目标指回当前 Node 进程时,请求会打到自己,发布后接口表现为不通。 */\nexport function pointsAtThisServer(base: string) {\n try {\n const url = new URL(base);\n const loopback = url.hostname === \"127.0.0.1\" || url.hostname === \"localhost\" || url.hostname === \"::1\";\n if (!loopback) return false;\n const port = url.port || (url.protocol === \"https:\" ? \"443\" : \"80\");\n const listen = process.env.PORT?.trim();\n return !listen || port === listen;\n } catch {\n return false;\n }\n}\n\n/** 服务端直连上游(相对路径在 Node fetch 中不可用) */\nexport function getServerApiBaseUrl() {\n const proxy = process.env.API_PROXY_TARGET?.trim().replace(/\\/$/, \"\");\n const configured = proxy || raw?.trim().replace(/\\/$/, \"\") || \"\";\n if (configured && !pointsAtThisServer(configured)) return configured;\n return DEFAULT_UPSTREAM;\n}\n"],"names":["DEFAULT_UPSTREAM","raw","API_BASE_URL","replace","pointsAtThisServer","base","url","URL","loopback","hostname","port","protocol","listen","process","env","PORT","trim","getServerApiBaseUrl","proxy","API_PROXY_TARGET","configured"],"mappings":";;;;;;;;AAAA;;;CAGC,GACD,MAAMA,mBAAmB;AACzB,MAAMC;AACC,MAAMC,eAAe,CAACD,OAAO,EAAE,EAAEE,OAAO,CAAC,OAAO;AAGhD,SAASC,mBAAmBC,IAAY;IAC7C,IAAI;QACF,MAAMC,MAAM,IAAIC,IAAIF;QACpB,MAAMG,WAAWF,IAAIG,QAAQ,KAAK,eAAeH,IAAIG,QAAQ,KAAK,eAAeH,IAAIG,QAAQ,KAAK;QAClG,IAAI,CAACD,UAAU,OAAO;QACtB,MAAME,OAAOJ,IAAII,IAAI,IAAI,CAACJ,IAAIK,QAAQ,KAAK,WAAW,QAAQ,IAAI;QAClE,MAAMC,SAASC,QAAQC,GAAG,CAACC,IAAI,EAAEC;QACjC,OAAO,CAACJ,UAAUF,SAASE;IAC7B,EAAE,OAAM;QACN,OAAO;IACT;AACF;AAGO,SAASK;IACd,MAAMC,QAAQL,QAAQC,GAAG,CAACK,gBAAgB,EAAEH,OAAOb,QAAQ,OAAO;IAClE,MAAMiB,aAAaF,SAASjB,KAAKe,OAAOb,QAAQ,OAAO,OAAO;IAC9D,IAAIiB,cAAc,CAAChB,mBAAmBgB,aAAa,OAAOA;IAC1D,OAAOpB;AACT"}}, + {"offset": {"line": 1841, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/config.ts"],"sourcesContent":["/**\n * 浏览器接口根地址。\n * 留空时走同域 `/api/*`,由服务端转到 API_PROXY_TARGET。\n */\nconst DEFAULT_UPSTREAM = \"https://webhgbapi.mfcg.me\";\nconst raw = process.env.NEXT_PUBLIC_API_BASE_URL;\nexport const API_BASE_URL = (raw ?? \"\").replace(/\\/$/, \"\");\n\n/** 代理目标指回当前 Node 进程时,请求会打到自己,发布后接口表现为不通。 */\nexport function pointsAtThisServer(base: string) {\n try {\n const url = new URL(base);\n const loopback = url.hostname === \"127.0.0.1\" || url.hostname === \"localhost\" || url.hostname === \"::1\";\n if (!loopback) return false;\n const port = url.port || (url.protocol === \"https:\" ? \"443\" : \"80\");\n const listen = process.env.PORT?.trim();\n return !listen || port === listen;\n } catch {\n return false;\n }\n}\n\n/** 服务端直连上游(相对路径在 Node fetch 中不可用) */\nexport function getServerApiBaseUrl() {\n const proxy = process.env.API_PROXY_TARGET?.trim().replace(/\\/$/, \"\");\n const configured = proxy || raw?.trim().replace(/\\/$/, \"\") || \"\";\n if (configured && !pointsAtThisServer(configured)) return configured;\n return DEFAULT_UPSTREAM;\n}\n"],"names":["DEFAULT_UPSTREAM","raw","API_BASE_URL","replace","pointsAtThisServer","base","url","URL","loopback","hostname","port","protocol","listen","process","env","PORT","trim","getServerApiBaseUrl","proxy","API_PROXY_TARGET","configured"],"mappings":";;;;;;;;AAAA;;;CAGC,GACD,MAAMA,mBAAmB;AACzB,MAAMC;AACC,MAAMC,eAAe,CAACD,OAAO,EAAE,EAAEE,OAAO,CAAC,OAAO;AAGhD,SAASC,mBAAmBC,IAAY;IAC7C,IAAI;QACF,MAAMC,MAAM,IAAIC,IAAIF;QACpB,MAAMG,WAAWF,IAAIG,QAAQ,KAAK,eAAeH,IAAIG,QAAQ,KAAK,eAAeH,IAAIG,QAAQ,KAAK;QAClG,IAAI,CAACD,UAAU,OAAO;QACtB,MAAME,OAAOJ,IAAII,IAAI,IAAI,CAACJ,IAAIK,QAAQ,KAAK,WAAW,QAAQ,IAAI;QAClE,MAAMC,SAASC,QAAQC,GAAG,CAACC,IAAI,EAAEC;QACjC,OAAO,CAACJ,UAAUF,SAASE;IAC7B,EAAE,OAAM;QACN,OAAO;IACT;AACF;AAGO,SAASK;IACd,MAAMC,QAAQL,QAAQC,GAAG,CAACK,gBAAgB,EAAEH,OAAOb,QAAQ,OAAO;IAClE,MAAMiB,aAAaF,SAASjB,KAAKe,OAAOb,QAAQ,OAAO,OAAO;IAC9D,IAAIiB,cAAc,CAAChB,mBAAmBgB,aAAa,OAAOA;IAC1D,OAAOpB;AACT"}}, {"offset": {"line": 1877, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/footer.ts"],"sourcesContent":["import { isExternalHref, translationHref } from \"@/lib/translation-nav\";\nimport { serverFetchJson } from \"./server-fetch\";\nimport type { FooterInfoResp, TranslationInfo } from \"./types\";\n\nexport type FooterPolicyLink = {\n id: number;\n name: string;\n href: string;\n external: boolean;\n};\n\nexport type FooterInfoLoadResult = {\n data: FooterInfoResp | null;\n error: string;\n};\n\n/** 已下线的页面(用户中心 / 充值 / 客服反馈),后台配置了也不展示。 */\nconst REMOVED_HREF = /^\\/(?:feedback|info\\/(?:feedback|user-center|deposit|account-settings))(?:[/?#]|$)/;\n\n/** 底部导航项:分组下的 translationList;没有子项时用分组自身。 */\nexport function footerNavItems(data: FooterInfoResp | null | undefined): TranslationInfo[] {\n const items: TranslationInfo[] = [];\n for (const category of data?.footerInfo?.navList || []) {\n const children = (category.translationList || []).filter((item) => item?.name?.trim());\n if (children.length) {\n items.push(...children);\n continue;\n }\n if (category.name?.trim() && category.urlValue?.trim()) {\n items.push({ id: category.id, name: category.name, urlValue: category.urlValue });\n }\n }\n return items.filter((item) => !REMOVED_HREF.test(translationHref(item.urlValue)));\n}\n\n/** 底部规则链接。接口里个别项写成 /richetext/,统一进 /richtext/。 */\nexport function footerPolicyHref(urlValue: string | undefined) {\n return translationHref(urlValue).replace(/^\\/richetext\\//, \"/richtext/\");\n}\n\nexport function footerPolicyLinks(data: FooterInfoResp | null | undefined): FooterPolicyLink[] {\n return footerNavItems(data).map((item) => {\n const href = footerPolicyHref(item.urlValue);\n return { id: item.id, name: item.name, href, external: isExternalHref(href) || href.startsWith(\"mailto:\") };\n });\n}\n\n/** 服务端拉取页脚。GET /api/app/config/footer/info,无查询参数。 */\nexport async function getFooterInfo(): Promise {\n try {\n const data = await serverFetchJson(\"/api/app/config/footer/info\", {\n maxAttempts: 2,\n timeoutMs: 10_000,\n revalidate: 60,\n tags: [\"footer-info\"],\n });\n return { data, error: \"\" };\n } catch (reason: unknown) {\n const error = reason instanceof Error ? reason.message : \"页脚加载失败\";\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\"[footer-info]\", error);\n }\n return { data: null, error };\n }\n}\n"],"names":["REMOVED_HREF","footerNavItems","data","items","category","footerInfo","navList","children","translationList","filter","item","name","trim","length","push","urlValue","id","test","footerPolicyHref","replace","footerPolicyLinks","map","href","external","startsWith","getFooterInfo","maxAttempts","timeoutMs","revalidate","tags","error","reason","Error","message","console","warn"],"mappings":";;;;;;;;;;AAAA;AACA;;;AAeA,wCAAwC,GACxC,MAAMA,eAAe;AAGd,SAASC,eAAeC,IAAuC;IACpE,MAAMC,QAA2B,EAAE;IACnC,KAAK,MAAMC,YAAYF,MAAMG,YAAYC,WAAW,EAAE,CAAE;QACtD,MAAMC,WAAW,CAACH,SAASI,eAAe,IAAI,EAAE,EAAEC,MAAM,CAAC,CAACC,OAASA,MAAMC,MAAMC;QAC/E,IAAIL,SAASM,MAAM,EAAE;YACnBV,MAAMW,IAAI,IAAIP;YACd;QACF;QACA,IAAIH,SAASO,IAAI,EAAEC,UAAUR,SAASW,QAAQ,EAAEH,QAAQ;YACtDT,MAAMW,IAAI,CAAC;gBAAEE,IAAIZ,SAASY,EAAE;gBAAEL,MAAMP,SAASO,IAAI;gBAAEI,UAAUX,SAASW,QAAQ;YAAC;QACjF;IACF;IACA,OAAOZ,MAAMM,MAAM,CAAC,CAACC,OAAS,CAACV,aAAaiB,IAAI,CAAC,IAAA,mJAAe,EAACP,KAAKK,QAAQ;AAChF;AAGO,SAASG,iBAAiBH,QAA4B;IAC3D,OAAO,IAAA,mJAAe,EAACA,UAAUI,OAAO,CAAC,kBAAkB;AAC7D;AAEO,SAASC,kBAAkBlB,IAAuC;IACvE,OAAOD,eAAeC,MAAMmB,GAAG,CAAC,CAACX;QAC/B,MAAMY,OAAOJ,iBAAiBR,KAAKK,QAAQ;QAC3C,OAAO;YAAEC,IAAIN,KAAKM,EAAE;YAAEL,MAAMD,KAAKC,IAAI;YAAEW;YAAMC,UAAU,IAAA,kJAAc,EAACD,SAASA,KAAKE,UAAU,CAAC;QAAW;IAC5G;AACF;AAGO,eAAeC;IACpB,IAAI;QACF,MAAMvB,OAAO,MAAM,IAAA,uJAAe,EAAiB,+BAA+B;YAChFwB,aAAa;YACbC,WAAW;YACXC,YAAY;YACZC,MAAM;gBAAC;aAAc;QACvB;QACA,OAAO;YAAE3B;YAAM4B,OAAO;QAAG;IAC3B,EAAE,OAAOC,QAAiB;QACxB,MAAMD,QAAQC,kBAAkBC,QAAQD,OAAOE,OAAO,GAAG;QACzD,wCAA4C;YAC1CC,QAAQC,IAAI,CAAC,iBAAiBL;QAChC;QACA,OAAO;YAAE5B,MAAM;YAAM4B;QAAM;IAC7B;AACF"}}, {"offset": {"line": 1953, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/server-fetch.ts"],"sourcesContent":["import { setDefaultResultOrder } from \"node:dns\";\nimport { headers as nextHeaders } from \"next/headers\";\n\nimport { buildBrowserApiHeaders, clientHeaders } from \"./client-headers\";\nimport { getServerApiBaseUrl } from \"./config\";\nimport type { ApiEnvelope } from \"./types\";\n\nsetDefaultResultOrder(\"ipv4first\");\n\nconst MAX_ATTEMPTS = 3;\nconst RETRY_BASE_MS = 400;\n\nexport type ServerFetchOptions = {\n timeoutMs?: number;\n maxAttempts?: number;\n revalidate?: number | false;\n tags?: string[];\n headers?: Record;\n};\n\nfunction networkErrorCode(error: unknown): string {\n if (!(error instanceof Error)) return \"\";\n const withCode = error as Error & { code?: string; cause?: { code?: string; errors?: unknown[] } };\n if (withCode.code) return withCode.code;\n if (withCode.cause?.code) return withCode.cause.code;\n const nested = withCode.cause?.errors?.[0] as { code?: string } | undefined;\n return nested?.code || \"\";\n}\n\n/** 渲染被取消时的中断,不是接口超时。 */\nexport function isRequestAborted(error: unknown) {\n if (!(error instanceof Error)) return false;\n if (error.name === \"TimeoutError\") return false;\n return error.name === \"AbortError\" || /this operation was aborted/i.test(error.message);\n}\n\nfunction isRetryableNetworkError(error: unknown) {\n if (!(error instanceof Error)) return false;\n if (isRequestAborted(error)) return false;\n if (error.name === \"TimeoutError\" || error.name === \"AbortError\") return true;\n const message = error.message.toLowerCase();\n if (message.includes(\"fetch failed\") || message.includes(\"network\")) return true;\n const code = networkErrorCode(error);\n if (/ENETUNREACH|ECONNRESET|ECONNREFUSED|ETIMEDOUT|EAI_AGAIN|ENOTFOUND|UND_ERR/i.test(code)) {\n return true;\n }\n const cause = (error as Error & { cause?: { errors?: unknown[] } }).cause;\n if (Array.isArray(cause?.errors)) return true;\n return false;\n}\n\nfunction wait(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction networkMessage(error: unknown) {\n const code = networkErrorCode(error);\n const message = error instanceof Error ? error.message : \"\";\n if (error instanceof Error && (error.name === \"TimeoutError\" || /aborted due to timeout/i.test(message))) {\n return \"接口暂时不可用(服务端网络超时)\";\n }\n if (/ETIMEDOUT|ENETUNREACH|ECONNREFUSED|fetch failed/i.test(`${code} ${message}`)) {\n return \"接口暂时不可用(服务端网络超时)\";\n }\n return message || \"请求失败\";\n}\n\nasync function requestIdentityHeaders() {\n try {\n return clientHeaders(await nextHeaders());\n } catch {\n return buildBrowserApiHeaders(\"web-ssr\");\n }\n}\n\n/** 服务端直连上游 JSON;网络抖动自动重试。带上当前请求的 UA / IP。 */\nexport async function serverFetchJson(pathWithQuery: string, options?: ServerFetchOptions): Promise {\n const base = getServerApiBaseUrl();\n const url = `${base}${pathWithQuery}`;\n const timeoutMs = options?.timeoutMs ?? 12_000;\n const maxAttempts = options?.maxAttempts ?? MAX_ATTEMPTS;\n const identity = await requestIdentityHeaders();\n const nextInit =\n options?.revalidate !== undefined || options?.tags?.length\n ? {\n ...(options.revalidate !== undefined ? { revalidate: options.revalidate } : {}),\n ...(options.tags?.length ? { tags: options.tags } : {}),\n }\n : undefined;\n\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n const response = await fetch(url, {\n headers: {\n Accept: \"application/json\",\n ...identity,\n ...options?.headers,\n },\n signal: AbortSignal.timeout(timeoutMs),\n ...(nextInit ? { next: nextInit } : {}),\n });\n\n const text = await response.text();\n let payload: ApiEnvelope | null = null;\n try {\n payload = text ? (JSON.parse(text) as ApiEnvelope) : null;\n } catch {\n payload = null;\n }\n\n if (!payload || typeof payload.code !== \"number\") {\n throw new Error(response.ok ? \"接口响应格式异常\" : `接口暂时不可用 (${response.status})`);\n }\n if (!response.ok || payload.code !== 200) {\n throw new Error(payload.tip || payload.msg || \"请求失败\");\n }\n\n return payload.data;\n } catch (error) {\n lastError = error;\n if (attempt >= maxAttempts || !isRetryableNetworkError(error)) break;\n await wait(RETRY_BASE_MS * attempt);\n }\n }\n\n throw new Error(networkMessage(lastError));\n}\n"],"names":["MAX_ATTEMPTS","RETRY_BASE_MS","networkErrorCode","error","Error","withCode","code","cause","nested","errors","isRequestAborted","name","test","message","isRetryableNetworkError","toLowerCase","includes","Array","isArray","wait","ms","Promise","resolve","setTimeout","networkMessage","requestIdentityHeaders","serverFetchJson","pathWithQuery","options","base","url","timeoutMs","maxAttempts","identity","nextInit","revalidate","undefined","tags","length","lastError","attempt","response","fetch","headers","Accept","signal","AbortSignal","timeout","next","text","payload","JSON","parse","ok","status","tip","msg","data"],"mappings":"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"}}, {"offset": {"line": 2072, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/lib/api/translation.ts"],"sourcesContent":["import { serverFetchJson } from \"./server-fetch\";\nimport type { AppTranslationInfo, TranslationCategory } from \"./types\";\n\nexport type TranslationCategoryLoadResult = {\n data: AppTranslationInfo | null;\n error: string;\n};\n\nfunction normalizeCategory(item: TranslationCategory): TranslationCategory {\n return {\n ...item,\n translationList: item.translationList || [],\n };\n}\n\n/** 服务端拉取顶部导航。GET /api/app/translation/category/list,无查询参数。 */\nexport async function getTranslationCategoryList(): Promise {\n try {\n const data = await serverFetchJson(\"/api/app/translation/category/list\", {\n maxAttempts: 2,\n timeoutMs: 10_000,\n revalidate: 60,\n tags: [\"translation-category\"],\n });\n return {\n data: {\n ...data,\n categoryList: (data.categoryList || []).map(normalizeCategory),\n },\n error: \"\",\n };\n } catch (reason: unknown) {\n const error = reason instanceof Error ? reason.message : \"导航分类加载失败\";\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\"[translation-category]\", error);\n }\n return { data: null, error };\n }\n}\n"],"names":["normalizeCategory","item","translationList","getTranslationCategoryList","data","maxAttempts","timeoutMs","revalidate","tags","categoryList","map","error","reason","Error","message","console","warn"],"mappings":";;;;AAAA;;AAQA,SAASA,kBAAkBC,IAAyB;IAClD,OAAO;QACL,GAAGA,IAAI;QACPC,iBAAiBD,KAAKC,eAAe,IAAI,EAAE;IAC7C;AACF;AAGO,eAAeC;IACpB,IAAI;QACF,MAAMC,OAAO,MAAM,IAAA,uJAAe,EAAqB,sCAAsC;YAC3FC,aAAa;YACbC,WAAW;YACXC,YAAY;YACZC,MAAM;gBAAC;aAAuB;QAChC;QACA,OAAO;YACLJ,MAAM;gBACJ,GAAGA,IAAI;gBACPK,cAAc,CAACL,KAAKK,YAAY,IAAI,EAAE,EAAEC,GAAG,CAACV;YAC9C;YACAW,OAAO;QACT;IACF,EAAE,OAAOC,QAAiB;QACxB,MAAMD,QAAQC,kBAAkBC,QAAQD,OAAOE,OAAO,GAAG;QACzD,wCAA4C;YAC1CC,QAAQC,IAAI,CAAC,0BAA0BL;QACzC;QACA,OAAO;YAAEP,MAAM;YAAMO;QAAM;IAC7B;AACF"}}, diff --git a/.next-dev/dev/server/chunks/ssr/node_modules_0odgv2cb044f3._.js b/.next-dev/dev/server/chunks/ssr/node_modules_0odgv2cb044f3._.js new file mode 100644 index 0000000..410774c --- /dev/null +++ b/.next-dev/dev/server/chunks/ssr/node_modules_0odgv2cb044f3._.js @@ -0,0 +1,29 @@ +module.exports = [ +"[project]/node_modules/xgplayer-hls/es/index.js [app-ssr] (ecmascript, async loader)", ((__turbopack_context__) => { + +__turbopack_context__.v((parentImport) => { + return Promise.all([ + "server/chunks/ssr/node_modules_xgplayer-hls_es_1lg17das78t8m._.js", + "server/chunks/ssr/node_modules_xgplayer-streaming-shared_es_1pmuy2vkziz79._.js", + "server/chunks/ssr/node_modules_xgplayer-transmuxer_es_02rae6d4vkkp2._.js", + "server/chunks/ssr/node_modules_1sz9fsbj8v5fz._.js" +].map((chunk) => __turbopack_context__.l(chunk))).then(() => { + return parentImport("[project]/node_modules/xgplayer-hls/es/index.js [app-ssr] (ecmascript)"); + }); +}); +}), +"[project]/node_modules/xgplayer/es/index.js [app-ssr] (ecmascript, async loader)", ((__turbopack_context__) => { + +__turbopack_context__.v((parentImport) => { + return Promise.all([ + "server/chunks/ssr/node_modules_xgplayer_es_plugins_05mq6xw5orpfb._.js", + "server/chunks/ssr/node_modules_xgplayer_es_player_1-49qymt7x58-.js", + "server/chunks/ssr/node_modules_xgplayer_es_1kt5qtl9wj9yf._.js", + "server/chunks/ssr/node_modules_xgplayer-subtitles_es_12vz_z9hplmi7._.js", + "server/chunks/ssr/node_modules_1qjv032ureob5._.js" +].map((chunk) => __turbopack_context__.l(chunk))).then(() => { + return parentImport("[project]/node_modules/xgplayer/es/index.js [app-ssr] (ecmascript)"); + }); +}); +}), +]; \ No newline at end of file diff --git a/.next-dev/dev/server/chunks/ssr/node_modules_0odgv2cb044f3._.js.map b/.next-dev/dev/server/chunks/ssr/node_modules_0odgv2cb044f3._.js.map new file mode 100644 index 0000000..c15d7ec --- /dev/null +++ b/.next-dev/dev/server/chunks/ssr/node_modules_0odgv2cb044f3._.js.map @@ -0,0 +1,5 @@ +{ + "version": 3, + "sources": [], + "sections": [] +} \ No newline at end of file diff --git a/.next-dev/dev/server/middleware-build-manifest.js b/.next-dev/dev/server/middleware-build-manifest.js index b6519a0..8863995 100644 --- a/.next-dev/dev/server/middleware-build-manifest.js +++ b/.next-dev/dev/server/middleware-build-manifest.js @@ -41,6 +41,21 @@ globalThis.__BUILD_MANIFEST = { "static/chunks/turbopack-_1aaoqtn6vriom._.js", "static/chunks/_219uq1sj0q91c._.js" ], + "/drama/[id]/page": [ + "static/chunks/[turbopack]_browser_dev_hmr-client_hmr-client_ts_13pqcwtuzrbk0._.js", + "static/chunks/node_modules_next_dist_compiled_next-devtools_index_090k2jmam7qwg.js", + "static/chunks/1daa_next_dist_compiled_react-dom_cjs_react-dom-client_development_0mp0cp_t-ezj9.js", + "static/chunks/1q96_modules_next_dist_compiled_react-dom_cjs_react-dom_development_1sqry0_53krp4.js", + "static/chunks/node_modules_next_dist_compiled_react-dom_0grqycjrj6mju._.js", + "static/chunks/node_modules_next_dist_compiled_react-server-dom-turbopack_164kp-67asdr9._.js", + "static/chunks/node_modules_next_dist_compiled_1amofcmz--cdp._.js", + "static/chunks/node_modules_next_dist_client_14zvornz047l2._.js", + "static/chunks/node_modules_next_dist_1bjkg68unqmjx._.js", + "static/chunks/node_modules_@swc_helpers_cjs_0oghen6kqggry._.js", + "static/chunks/_1anvha4rlo79g._.js", + "static/chunks/turbopack-_1aaoqtn6vriom._.js", + "static/chunks/_0pmqou_4mtbjb._.js" + ], "/play/[id]/[episode]/page": [ "static/chunks/[turbopack]_browser_dev_hmr-client_hmr-client_ts_13pqcwtuzrbk0._.js", "static/chunks/node_modules_next_dist_compiled_next-devtools_index_090k2jmam7qwg.js", @@ -56,7 +71,7 @@ globalThis.__BUILD_MANIFEST = { "static/chunks/turbopack-_1aaoqtn6vriom._.js", "static/chunks/_0slr_qtlqsjni._.js" ], - "/nav/page": [ + "/search/[[...parts]]/page": [ "static/chunks/[turbopack]_browser_dev_hmr-client_hmr-client_ts_13pqcwtuzrbk0._.js", "static/chunks/node_modules_next_dist_compiled_next-devtools_index_090k2jmam7qwg.js", "static/chunks/1daa_next_dist_compiled_react-dom_cjs_react-dom-client_development_0mp0cp_t-ezj9.js", @@ -69,9 +84,9 @@ globalThis.__BUILD_MANIFEST = { "static/chunks/node_modules_@swc_helpers_cjs_0oghen6kqggry._.js", "static/chunks/_1anvha4rlo79g._.js", "static/chunks/turbopack-_1aaoqtn6vriom._.js", - "static/chunks/_0w2jlohhfhuy8._.js" + "static/chunks/_0byvfhmmc25t4._.js" ], - "/_not-found/page": [ + "/home-road/page": [ "static/chunks/[turbopack]_browser_dev_hmr-client_hmr-client_ts_13pqcwtuzrbk0._.js", "static/chunks/node_modules_next_dist_compiled_next-devtools_index_090k2jmam7qwg.js", "static/chunks/1daa_next_dist_compiled_react-dom_cjs_react-dom-client_development_0mp0cp_t-ezj9.js", @@ -84,7 +99,7 @@ globalThis.__BUILD_MANIFEST = { "static/chunks/node_modules_@swc_helpers_cjs_0oghen6kqggry._.js", "static/chunks/_1anvha4rlo79g._.js", "static/chunks/turbopack-_1aaoqtn6vriom._.js", - "static/chunks/_18x7jxupx5rou._.js" + "static/chunks/_0sf-lmfgdqib-._.js" ] }, "pagesChunkGroupBootstrapParams": {}, diff --git a/.next-dev/dev/server/preview-props.json b/.next-dev/dev/server/preview-props.json index 6c01fad..7e42f41 100644 --- a/.next-dev/dev/server/preview-props.json +++ b/.next-dev/dev/server/preview-props.json @@ -1,5 +1,5 @@ { - "previewModeId": "0313e2529cfe8a33a9e4e09bdcccbbb1", - "previewModeSigningKey": "1d060880717b3d0cc533201db9cfe2ece95a9089ef0924aa2ce0d2811a2ac31c", - "previewModeEncryptionKey": "05ebf7d6e1bcaf8c9ba4679932a76ec1dac89a5f6e42de7f2eadfd0ca884d160" + "previewModeId": "f793fe9bc1c4f9e28068cca9a4fa3eee", + "previewModeSigningKey": "5750ed2a19b9104062ddc60c5a36ffcbe54c12651885b68d1e7fdfaf1099236c", + "previewModeEncryptionKey": "0ff363e915e5f5887446eac8eb8ca157313e974a7e9535811505600d2ede5a48" } \ No newline at end of file diff --git a/.next-dev/dev/static/chunks/_0byvfhmmc25t4._.js b/.next-dev/dev/static/chunks/_0byvfhmmc25t4._.js index ab93b71..88bcaca 100644 --- a/.next-dev/dev/static/chunks/_0byvfhmmc25t4._.js +++ b/.next-dev/dev/static/chunks/_0byvfhmmc25t4._.js @@ -1,5 +1,5 @@ (globalThis["TURBOPACK_CHUNK_LISTS"] || (globalThis["TURBOPACK_CHUNK_LISTS"] = [])).push({ script: typeof document === "object" ? document.currentScript : undefined, - chunks: ["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js","static/chunks/src_1hgxmgbnmdhh-._.css","static/chunks/src_1tm80q5b-38hs._.js"], + chunks: ["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js","static/chunks/src_1hgxmgbnmdhh-._.css","static/chunks/src_1tm80q5b-38hs._.js"], source: "entry" }); diff --git a/.next-dev/dev/static/chunks/_0pmqou_4mtbjb._.js b/.next-dev/dev/static/chunks/_0pmqou_4mtbjb._.js index b67f819..8d9d4a5 100644 --- a/.next-dev/dev/static/chunks/_0pmqou_4mtbjb._.js +++ b/.next-dev/dev/static/chunks/_0pmqou_4mtbjb._.js @@ -1,5 +1,5 @@ (globalThis["TURBOPACK_CHUNK_LISTS"] || (globalThis["TURBOPACK_CHUNK_LISTS"] = [])).push({ script: typeof document === "object" ? document.currentScript : undefined, - chunks: ["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js","static/chunks/src_1hgxmgbnmdhh-._.css","static/chunks/node_modules_1wppmbwp-_2wc._.js","static/chunks/src_1f3ifnztulvuh._.js","static/chunks/node_modules_xgplayer_dist_index_min_css_133k4e2i_djjm.css","static/chunks/node_modules_xgplayer_es_plugins_0axc4cawd0pyo._.js","static/chunks/node_modules_xgplayer_es_player_1-svvw04ko9hh.js","static/chunks/node_modules_xgplayer_es_13l-_cmkijzyo._.js","static/chunks/node_modules_xgplayer-subtitles_es_0le5lb77rm6ob._.js","static/chunks/node_modules_1rc9l3uxi31fi._.js","static/chunks/node_modules_xgplayer-hls_es_1984chmyty8a0._.js","static/chunks/node_modules_xgplayer-streaming-shared_es_0twepkplrsp1l._.js","static/chunks/node_modules_xgplayer-transmuxer_es_0n8gz3g27_otl._.js","static/chunks/node_modules_10j0vhfspwf2w._.js"], + chunks: ["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js","static/chunks/src_1hgxmgbnmdhh-._.css","static/chunks/node_modules_1krh5f60-_0ky._.js","static/chunks/src_1f3ifnztulvuh._.js","static/chunks/node_modules_xgplayer_dist_index_min_css_133k4e2i_djjm.css","static/chunks/node_modules_xgplayer_es_plugins_0axc4cawd0pyo._.js","static/chunks/node_modules_xgplayer_es_player_1-svvw04ko9hh.js","static/chunks/node_modules_xgplayer_es_13l-_cmkijzyo._.js","static/chunks/node_modules_xgplayer-subtitles_es_0le5lb77rm6ob._.js","static/chunks/node_modules_1rc9l3uxi31fi._.js","static/chunks/node_modules_xgplayer-hls_es_1984chmyty8a0._.js","static/chunks/node_modules_xgplayer-streaming-shared_es_0twepkplrsp1l._.js","static/chunks/node_modules_xgplayer-transmuxer_es_0n8gz3g27_otl._.js","static/chunks/node_modules_10j0vhfspwf2w._.js"], source: "entry" }); diff --git a/.next-dev/dev/static/chunks/_0sf-lmfgdqib-._.js b/.next-dev/dev/static/chunks/_0sf-lmfgdqib-._.js index 81a12df..293b4fd 100644 --- a/.next-dev/dev/static/chunks/_0sf-lmfgdqib-._.js +++ b/.next-dev/dev/static/chunks/_0sf-lmfgdqib-._.js @@ -1,5 +1,5 @@ (globalThis["TURBOPACK_CHUNK_LISTS"] || (globalThis["TURBOPACK_CHUNK_LISTS"] = [])).push({ script: typeof document === "object" ? document.currentScript : undefined, - chunks: ["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js","static/chunks/src_1hgxmgbnmdhh-._.css","static/chunks/src_1tt3dkub452cm._.js"], + chunks: ["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js","static/chunks/src_1hgxmgbnmdhh-._.css","static/chunks/src_1tt3dkub452cm._.js"], source: "entry" }); diff --git a/.next-dev/dev/static/chunks/_0slr_qtlqsjni._.js b/.next-dev/dev/static/chunks/_0slr_qtlqsjni._.js index b67f819..8d9d4a5 100644 --- a/.next-dev/dev/static/chunks/_0slr_qtlqsjni._.js +++ b/.next-dev/dev/static/chunks/_0slr_qtlqsjni._.js @@ -1,5 +1,5 @@ (globalThis["TURBOPACK_CHUNK_LISTS"] || (globalThis["TURBOPACK_CHUNK_LISTS"] = [])).push({ script: typeof document === "object" ? document.currentScript : undefined, - chunks: ["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js","static/chunks/src_1hgxmgbnmdhh-._.css","static/chunks/node_modules_1wppmbwp-_2wc._.js","static/chunks/src_1f3ifnztulvuh._.js","static/chunks/node_modules_xgplayer_dist_index_min_css_133k4e2i_djjm.css","static/chunks/node_modules_xgplayer_es_plugins_0axc4cawd0pyo._.js","static/chunks/node_modules_xgplayer_es_player_1-svvw04ko9hh.js","static/chunks/node_modules_xgplayer_es_13l-_cmkijzyo._.js","static/chunks/node_modules_xgplayer-subtitles_es_0le5lb77rm6ob._.js","static/chunks/node_modules_1rc9l3uxi31fi._.js","static/chunks/node_modules_xgplayer-hls_es_1984chmyty8a0._.js","static/chunks/node_modules_xgplayer-streaming-shared_es_0twepkplrsp1l._.js","static/chunks/node_modules_xgplayer-transmuxer_es_0n8gz3g27_otl._.js","static/chunks/node_modules_10j0vhfspwf2w._.js"], + chunks: ["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js","static/chunks/src_1hgxmgbnmdhh-._.css","static/chunks/node_modules_1krh5f60-_0ky._.js","static/chunks/src_1f3ifnztulvuh._.js","static/chunks/node_modules_xgplayer_dist_index_min_css_133k4e2i_djjm.css","static/chunks/node_modules_xgplayer_es_plugins_0axc4cawd0pyo._.js","static/chunks/node_modules_xgplayer_es_player_1-svvw04ko9hh.js","static/chunks/node_modules_xgplayer_es_13l-_cmkijzyo._.js","static/chunks/node_modules_xgplayer-subtitles_es_0le5lb77rm6ob._.js","static/chunks/node_modules_1rc9l3uxi31fi._.js","static/chunks/node_modules_xgplayer-hls_es_1984chmyty8a0._.js","static/chunks/node_modules_xgplayer-streaming-shared_es_0twepkplrsp1l._.js","static/chunks/node_modules_xgplayer-transmuxer_es_0n8gz3g27_otl._.js","static/chunks/node_modules_10j0vhfspwf2w._.js"], source: "entry" }); diff --git a/.next-dev/dev/static/chunks/_219uq1sj0q91c._.js b/.next-dev/dev/static/chunks/_219uq1sj0q91c._.js index d0bea8a..8116d08 100644 --- a/.next-dev/dev/static/chunks/_219uq1sj0q91c._.js +++ b/.next-dev/dev/static/chunks/_219uq1sj0q91c._.js @@ -1,5 +1,5 @@ (globalThis["TURBOPACK_CHUNK_LISTS"] || (globalThis["TURBOPACK_CHUNK_LISTS"] = [])).push({ script: typeof document === "object" ? document.currentScript : undefined, - chunks: ["static/chunks/src_1fapn5h3r0s0-._.js","static/chunks/node_modules_1mqpzaajz52kk._.js","static/chunks/src_1hgxmgbnmdhh-._.css","static/chunks/src_1-8qwjw2nq0gn._.js"], + chunks: ["static/chunks/src_03nh1ny_1upyk._.js","static/chunks/node_modules_1mqpzaajz52kk._.js","static/chunks/src_1hgxmgbnmdhh-._.css","static/chunks/src_1-8qwjw2nq0gn._.js"], source: "entry" }); diff --git a/.next-dev/dev/static/chunks/node_modules_1krh5f60-_0ky._.js b/.next-dev/dev/static/chunks/node_modules_1krh5f60-_0ky._.js new file mode 100644 index 0000000..76b107b --- /dev/null +++ b/.next-dev/dev/static/chunks/node_modules_1krh5f60-_0ky._.js @@ -0,0 +1,29 @@ +(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined, +"[project]/node_modules/xgplayer-hls/es/index.js [app-client] (ecmascript, async loader)", ((__turbopack_context__) => { + +__turbopack_context__.v((parentImport) => { + return Promise.all([ + "static/chunks/node_modules_xgplayer-hls_es_1984chmyty8a0._.js", + "static/chunks/node_modules_xgplayer-streaming-shared_es_0twepkplrsp1l._.js", + "static/chunks/node_modules_xgplayer-transmuxer_es_0n8gz3g27_otl._.js", + "static/chunks/node_modules_10j0vhfspwf2w._.js" +].map((chunk) => __turbopack_context__.l(chunk))).then(() => { + return parentImport("[project]/node_modules/xgplayer-hls/es/index.js [app-client] (ecmascript)"); + }); +}); +}), +"[project]/node_modules/xgplayer/es/index.js [app-client] (ecmascript, async loader)", ((__turbopack_context__) => { + +__turbopack_context__.v((parentImport) => { + return Promise.all([ + "static/chunks/node_modules_xgplayer_es_plugins_0axc4cawd0pyo._.js", + "static/chunks/node_modules_xgplayer_es_player_1-svvw04ko9hh.js", + "static/chunks/node_modules_xgplayer_es_13l-_cmkijzyo._.js", + "static/chunks/node_modules_xgplayer-subtitles_es_0le5lb77rm6ob._.js", + "static/chunks/node_modules_1rc9l3uxi31fi._.js" +].map((chunk) => __turbopack_context__.l(chunk))).then(() => { + return parentImport("[project]/node_modules/xgplayer/es/index.js [app-client] (ecmascript)"); + }); +}); +}), +]); \ No newline at end of file diff --git a/.next-dev/dev/static/chunks/src_03nh1ny_1upyk._.js b/.next-dev/dev/static/chunks/src_03nh1ny_1upyk._.js new file mode 100644 index 0000000..7ccceb3 --- /dev/null +++ b/.next-dev/dev/static/chunks/src_03nh1ny_1upyk._.js @@ -0,0 +1,4338 @@ +(()=>{"use strict";(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined, +"[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ListLoading", + ()=>ListLoading +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$heroui$2f$react$2f$dist$2f$components$2f$spinner$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/@heroui/react/dist/components/spinner/index.js [app-client] (ecmascript) "); +"use client"; +; +; +function ListLoading(param) { + let { label = "正在加载", variant = "page" } = param; + const size = variant === "inline" ? "sm" : variant === "block" ? "lg" : "xl"; + const body = /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: `list-loading list-loading--${variant}`, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$heroui$2f$react$2f$dist$2f$components$2f$spinner$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["Spinner"], { + color: "accent", + size: size, + "aria-label": label + }, void 0, false, { + fileName: "[project]/src/components/common/ListLoading.tsx", + lineNumber: 16, + columnNumber: 7 + }, this), + variant === "inline" ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: label + }, void 0, false, { + fileName: "[project]/src/components/common/ListLoading.tsx", + lineNumber: 17, + columnNumber: 31 + }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { + children: label + }, void 0, false, { + fileName: "[project]/src/components/common/ListLoading.tsx", + lineNumber: 17, + columnNumber: 54 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/common/ListLoading.tsx", + lineNumber: 15, + columnNumber: 5 + }, this); + if (variant === "page") { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("main", { + className: "shell list-loading-page", + children: body + }, void 0, false, { + fileName: "[project]/src/components/common/ListLoading.tsx", + lineNumber: 21, + columnNumber: 12 + }, this); + } + return body; +} +_c = ListLoading; +var _c; +__turbopack_context__.k.register(_c, "ListLoading"); +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/components/common/app-download.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "AppAddrProvider", + ()=>AppAddrProvider, + "AppDownloadLink", + ()=>AppDownloadLink, + "DownloadQr", + ()=>DownloadQr, + "HeaderAppDownload", + ()=>HeaderAppDownload, + "useAppAddr", + ()=>useAppAddr +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$swc$2f$helpers$2f$esm$2f$_define_property$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/@swc/helpers/esm/_define_property.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$qrcode$2e$react$2f$lib$2f$esm$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/qrcode.react/lib/esm/index.js [app-client] (ecmascript)"); +; +; +var _s = __turbopack_context__.k.signature(), _s1 = __turbopack_context__.k.signature(), _s2 = __turbopack_context__.k.signature(), _s3 = __turbopack_context__.k.signature(); +"use client"; +; +; +const AppAddrContext = /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["createContext"])(""); +function AppAddrProvider(param) { + let { appAddr, children } = param; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(AppAddrContext.Provider, { + value: appAddr, + children: children + }, void 0, false, { + fileName: "[project]/src/components/common/app-download.tsx", + lineNumber: 10, + columnNumber: 10 + }, this); +} +_c = AppAddrProvider; +function useAppAddr() { + _s(); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useContext"])(AppAddrContext); +} +_s(useAppAddr, "gDsCjeeItUuvgOWf1v4qoK9RF6k="); +function AppDownloadLink(param) { + let { className, id, children, label, title } = param; + _s1(); + const appAddr = useAppAddr(); + if (!appAddr) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { + className: className, + id: id, + type: "button", + "aria-label": label, + title: title, + children: children + }, void 0, false, { + fileName: "[project]/src/components/common/app-download.tsx", + lineNumber: 33, + columnNumber: 7 + }, this); + } + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("a", { + className: className, + id: id, + href: appAddr, + target: "_blank", + rel: "noreferrer", + "aria-label": label, + title: title, + children: children + }, void 0, false, { + fileName: "[project]/src/components/common/app-download.tsx", + lineNumber: 39, + columnNumber: 5 + }, this); +} +_s1(AppDownloadLink, "8TwyWPqtpYe6S60kQvQQWdEg69Y=", false, function() { + return [ + useAppAddr + ]; +}); +_c1 = AppDownloadLink; +function QrFallback(param) { + let { size } = param; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("img", { + className: "download-qr-code", + src: "/images/download-qr.png", + alt: "App 下载二维码", + width: size, + height: size + }, void 0, false, { + fileName: "[project]/src/components/common/app-download.tsx", + lineNumber: 47, + columnNumber: 5 + }, this); +} +_c2 = QrFallback; +/** 编码失败时回退到静态图,避免整页被 RangeError 打挂。 */ class QrBoundary extends __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Component"] { + static getDerivedStateFromError() { + return { + failed: true + }; + } + componentDidCatch(error, info) { + if ("TURBOPACK compile-time truthy", 1) { + console.warn("[DownloadQr]", error.message, info.componentStack); + } + } + render() { + if (this.state.failed) return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(QrFallback, { + size: this.props.size + }, void 0, false, { + fileName: "[project]/src/components/common/app-download.tsx", + lineNumber: 72, + columnNumber: 35 + }, this); + return this.props.children; + } + constructor(...args){ + super(...args), (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$swc$2f$helpers$2f$esm$2f$_define_property$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["_"])(this, "state", { + failed: false + }); + } +} +function DownloadQr(param) { + let { size = 156 } = param; + _s2(); + const appAddr = useAppAddr(); + if (!appAddr) return null; + const qr = /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(QrBoundary, { + size: size, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$qrcode$2e$react$2f$lib$2f$esm$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["QRCodeSVG"], { + className: "download-qr-code", + value: appAddr, + size: size, + level: "L", + boostLevel: false, + marginSize: 2, + bgColor: "#ffffff", + fgColor: "#111111", + title: "App 下载二维码" + }, void 0, false, { + fileName: "[project]/src/components/common/app-download.tsx", + lineNumber: 83, + columnNumber: 7 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/common/app-download.tsx", + lineNumber: 82, + columnNumber: 5 + }, this); + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("a", { + className: "download-qr-link", + href: appAddr, + target: "_blank", + rel: "noreferrer", + "aria-label": "点击下载 App", + children: qr + }, void 0, false, { + fileName: "[project]/src/components/common/app-download.tsx", + lineNumber: 97, + columnNumber: 5 + }, this); +} +_s2(DownloadQr, "8TwyWPqtpYe6S60kQvQQWdEg69Y=", false, function() { + return [ + useAppAddr + ]; +}); +_c3 = DownloadQr; +function HeaderAppDownload(param) { + let { siteName = "" } = param; + _s3(); + const appAddr = useAppAddr(); + if (!appAddr) return null; + const name = siteName.trim() || "App"; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "header-download-wrap", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(AppDownloadLink, { + className: "header-action download-entry", + label: "下载 App", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: "下载 App" + }, void 0, false, { + fileName: "[project]/src/components/common/app-download.tsx", + lineNumber: 111, + columnNumber: 9 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/common/app-download.tsx", + lineNumber: 110, + columnNumber: 7 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "header-download-qr", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "download-panel-brand", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("img", { + className: "download-brand-complete shuguo-logo-image", + src: "/logo.webp", + alt: name, + width: 444, + height: 108 + }, void 0, false, { + fileName: "[project]/src/components/common/app-download.tsx", + lineNumber: 115, + columnNumber: 11 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/common/app-download.tsx", + lineNumber: 114, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "download-qr-placeholder", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(DownloadQr, {}, void 0, false, { + fileName: "[project]/src/components/common/app-download.tsx", + lineNumber: 118, + columnNumber: 11 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/common/app-download.tsx", + lineNumber: 117, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "download-panel-copy", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { + children: `扫码下载安装「${name}」` + }, void 0, false, { + fileName: "[project]/src/components/common/app-download.tsx", + lineNumber: 121, + columnNumber: 11 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/common/app-download.tsx", + lineNumber: 120, + columnNumber: 9 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/common/app-download.tsx", + lineNumber: 113, + columnNumber: 7 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/common/app-download.tsx", + lineNumber: 109, + columnNumber: 5 + }, this); +} +_s3(HeaderAppDownload, "8TwyWPqtpYe6S60kQvQQWdEg69Y=", false, function() { + return [ + useAppAddr + ]; +}); +_c4 = HeaderAppDownload; +var _c, _c1, _c2, _c3, _c4; +__turbopack_context__.k.register(_c, "AppAddrProvider"); +__turbopack_context__.k.register(_c1, "AppDownloadLink"); +__turbopack_context__.k.register(_c2, "QrFallback"); +__turbopack_context__.k.register(_c3, "DownloadQr"); +__turbopack_context__.k.register(_c4, "HeaderAppDownload"); +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "DecryptedImage", + ()=>DecryptedImage +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$image$2f$decrypt$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/image/decrypt.ts [app-client] (ecmascript)"); +; +var _s = __turbopack_context__.k.signature(); +"use client"; +; +; +function DecryptedImage(param) { + let { src, fallback = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$image$2f$decrypt$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["IMG_PLACEHOLDER"], alt = "", ...props } = param; + _s(); + const [resolved, setResolved] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(fallback); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ + "DecryptedImage.useEffect": ()=>{ + let cancelled = false; + void (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$image$2f$decrypt$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["resolveImageSrc"])(src, fallback).then({ + "DecryptedImage.useEffect": (next)=>{ + if (!cancelled) setResolved(next); + } + }["DecryptedImage.useEffect"]); + return ({ + "DecryptedImage.useEffect": ()=>{ + cancelled = true; + } + })["DecryptedImage.useEffect"]; + } + }["DecryptedImage.useEffect"], [ + src, + fallback + ]); + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("img", { + ...props, + alt: alt, + src: resolved + }, void 0, false, { + fileName: "[project]/src/components/common/decrypted-image.tsx", + lineNumber: 24, + columnNumber: 10 + }, this); +} +_s(DecryptedImage, "OJSfPsMQ5WMIZ6PcYGAQUczH7rQ="); +_c = DecryptedImage; +var _c; +__turbopack_context__.k.register(_c, "DecryptedImage"); +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/components/common/startup-ad-dialog.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "StartupPopups", + ()=>StartupPopups +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$decrypted$2d$image$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$startup$2d$age$2d$dialog$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/common/startup-age-dialog.tsx [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$startup$2d$dialog$2d$ads$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/common/startup-dialog-ads.ts [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$image$2f$decrypt$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/image/decrypt.ts [app-client] (ecmascript)"); +; +var _s = __turbopack_context__.k.signature(), _s1 = __turbopack_context__.k.signature(), _s2 = __turbopack_context__.k.signature(); +"use client"; +; +; +; +; +; +const STARTUP_DAY_KEY = "startup-popups-day"; +function todayStamp() { + const now = new Date(); + const month = String(now.getMonth() + 1).padStart(2, "0"); + const day = String(now.getDate()).padStart(2, "0"); + return `${now.getFullYear()}-${month}-${day}`; +} +function startupSeenToday() { + try { + return localStorage.getItem(STARTUP_DAY_KEY) === todayStamp(); + } catch { + return false; + } +} +function markStartupSeenToday() { + try { + localStorage.setItem(STARTUP_DAY_KEY, todayStamp()); + } catch { + // 无法写入时按未展示处理,下次进入仍会弹出。 + } +} +/** 同一次页面加载只决定一次。开发环境 effect 会重跑,不能靠第二次读到的日期跳过。 */ let startupDailyDecision = null; +function decideStartupDaily() { + if (startupDailyDecision) return startupDailyDecision; + startupDailyDecision = startupSeenToday() ? "skip" : "show"; + if (startupDailyDecision === "show") markStartupSeenToday(); + return startupDailyDecision; +} +function httpUrl(link) { + const value = link === null || link === void 0 ? void 0 : link.trim(); + if (!value) return ""; + try { + const url = new URL(value); + if (url.protocol === "http:" || url.protocol === "https:") return url.toString(); + } catch { + return ""; + } + return ""; +} +function StartupAdDialog(param) { + let { ads, open, onFinished } = param; + var _ad_title; + _s(); + const dialogRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(null); + const [index, setIndex] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(0); + const ad = ads[index]; + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ + "StartupAdDialog.useEffect": ()=>{ + const dialog = dialogRef.current; + if (!open || !dialog || dialog.open) return; + dialog.showModal(); + } + }["StartupAdDialog.useEffect"], [ + open + ]); + function dismiss() { + var _dialogRef_current; + if (index < ads.length - 1) { + setIndex((value)=>value + 1); + return; + } + (_dialogRef_current = dialogRef.current) === null || _dialogRef_current === void 0 ? void 0 : _dialogRef_current.close(); + } + if (!ad) return null; + const href = httpUrl(ad.link); + const image = /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$decrypted$2d$image$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["DecryptedImage"], { + className: "startup-ad-image", + src: ad.images, + alt: ((_ad_title = ad.title) === null || _ad_title === void 0 ? void 0 : _ad_title.trim()) || "推广广告", + width: 400, + height: 602 + }, void 0, false, { + fileName: "[project]/src/components/common/startup-ad-dialog.tsx", + lineNumber: 80, + columnNumber: 5 + }, this); + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("dialog", { + id: "startup-ad", + ref: dialogRef, + className: "startup-popup", + "aria-label": "广告推荐", + onCancel: (event)=>{ + event.preventDefault(); + dismiss(); + }, + onKeyDown: (event)=>{ + if (event.key === "Tab") event.currentTarget.classList.add("startup-keyboard-focus"); + }, + onPointerDown: (event)=>event.currentTarget.classList.remove("startup-keyboard-focus"), + onClose: (event)=>{ + event.currentTarget.classList.remove("startup-keyboard-focus"); + onFinished(); + }, + children: [ + href ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("a", { + href: href, + target: "_blank", + rel: "noopener noreferrer", + children: image + }, void 0, false, { + fileName: "[project]/src/components/common/startup-ad-dialog.tsx", + lineNumber: 103, + columnNumber: 9 + }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: image + }, void 0, false, { + fileName: "[project]/src/components/common/startup-ad-dialog.tsx", + lineNumber: 107, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { + className: "startup-close", + type: "button", + "aria-label": "关闭广告", + "data-ad-close": "", + onClick: dismiss, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("img", { + src: "/images/ui/startup-close.svg", + width: 36, + height: 36, + alt: "" + }, void 0, false, { + fileName: "[project]/src/components/common/startup-ad-dialog.tsx", + lineNumber: 110, + columnNumber: 9 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/common/startup-ad-dialog.tsx", + lineNumber: 109, + columnNumber: 7 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/common/startup-ad-dialog.tsx", + lineNumber: 84, + columnNumber: 5 + }, this); +} +_s(StartupAdDialog, "aBekfNMv69/yUicKAQELJvOsFls="); +_c = StartupAdDialog; +function StartupGridDialog(param) { + let { items, open } = param; + _s1(); + const dialogRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(null); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ + "StartupGridDialog.useEffect": ()=>{ + const dialog = dialogRef.current; + if (!open || !dialog || dialog.open) return; + dialog.showModal(); + } + }["StartupGridDialog.useEffect"], [ + open + ]); + if (!items.length) return null; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("dialog", { + id: "startup-grid", + ref: dialogRef, + className: "startup-popup", + "aria-label": "应用推广", + onClick: (event)=>{ + var _dialogRef_current; + if (event.target instanceof Element && event.target.closest(".startup-promotion")) (_dialogRef_current = dialogRef.current) === null || _dialogRef_current === void 0 ? void 0 : _dialogRef_current.close(); + }, + onKeyDown: (event)=>{ + if (event.key === "Tab") event.currentTarget.classList.add("startup-keyboard-focus"); + }, + onPointerDown: (event)=>event.currentTarget.classList.remove("startup-keyboard-focus"), + onClose: (event)=>event.currentTarget.classList.remove("startup-keyboard-focus"), + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "startup-promotions", + children: items.map((item, index)=>{ + var _item_title; + const href = httpUrl(item.link); + const title = ((_item_title = item.title) === null || _item_title === void 0 ? void 0 : _item_title.trim()) || "推荐"; + const inner = /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Fragment"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$decrypted$2d$image$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["DecryptedImage"], { + src: item.images, + fallback: __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$image$2f$decrypt$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["CARD_PLACEHOLDER"], + alt: "", + width: 80, + height: 80 + }, void 0, false, { + fileName: "[project]/src/components/common/startup-ad-dialog.tsx", + lineNumber: 148, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: title + }, void 0, false, { + fileName: "[project]/src/components/common/startup-ad-dialog.tsx", + lineNumber: 149, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/common/startup-ad-dialog.tsx", + lineNumber: 147, + columnNumber: 13 + }, this); + if (!href) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "startup-promotion", + children: inner + }, item.id || `${index}-${item.images}`, false, { + fileName: "[project]/src/components/common/startup-ad-dialog.tsx", + lineNumber: 154, + columnNumber: 15 + }, this); + } + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("a", { + className: "startup-promotion", + href: href, + target: "_blank", + rel: "noopener noreferrer", + "aria-label": `${title},打开推广链接`, + children: inner + }, item.id || `${index}-${item.images}`, false, { + fileName: "[project]/src/components/common/startup-ad-dialog.tsx", + lineNumber: 160, + columnNumber: 13 + }, this); + }) + }, void 0, false, { + fileName: "[project]/src/components/common/startup-ad-dialog.tsx", + lineNumber: 142, + columnNumber: 7 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { + className: "startup-close", + type: "button", + "aria-label": "关闭应用推广", + "data-ad-close": "", + onClick: ()=>{ + var _dialogRef_current; + return (_dialogRef_current = dialogRef.current) === null || _dialogRef_current === void 0 ? void 0 : _dialogRef_current.close(); + }, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("img", { + src: "/images/ui/startup-close.svg", + width: 36, + height: 36, + alt: "" + }, void 0, false, { + fileName: "[project]/src/components/common/startup-ad-dialog.tsx", + lineNumber: 174, + columnNumber: 9 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/common/startup-ad-dialog.tsx", + lineNumber: 173, + columnNumber: 7 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/common/startup-ad-dialog.tsx", + lineNumber: 128, + columnNumber: 5 + }, this); +} +_s1(StartupGridDialog, "9PxoOcTjzEwd023cmhgaBdjzFyE="); +_c1 = StartupGridDialog; +function StartupPopups() { + _s2(); + const ads = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$startup$2d$dialog$2d$ads$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useStartupAds"])(); + const acceptedRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(false); + const [daily, setDaily] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])("pending"); + const [phase, setPhase] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])("idle"); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ + "StartupPopups.useEffect": ()=>{ + if (decideStartupDaily() === "skip") { + setDaily("skip"); + setPhase("done"); + return; + } + setDaily("show"); + } + }["StartupPopups.useEffect"], []); + const reveal = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({ + "StartupPopups.useCallback[reveal]": ()=>{ + if (!acceptedRef.current || !ads || phase !== "idle") return; + if (ads.dialogList.length) setPhase("ad"); + else if (ads.nineGridList.length) setPhase("grid"); + else setPhase("done"); + } + }["StartupPopups.useCallback[reveal]"], [ + ads, + phase + ]); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ + "StartupPopups.useEffect": ()=>{ + reveal(); + } + }["StartupPopups.useEffect"], [ + reveal + ]); + function finishAd() { + setPhase((ads === null || ads === void 0 ? void 0 : ads.nineGridList.length) ? "grid" : "done"); + } + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Fragment"], { + children: [ + daily === "show" ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$startup$2d$age$2d$dialog$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["StartupAgeDialog"], { + active: true, + onAccepted: ()=>{ + acceptedRef.current = true; + reveal(); + } + }, void 0, false, { + fileName: "[project]/src/components/common/startup-ad-dialog.tsx", + lineNumber: 214, + columnNumber: 9 + }, this) : null, + (ads === null || ads === void 0 ? void 0 : ads.dialogList.length) ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(StartupAdDialog, { + ads: ads.dialogList, + open: phase === "ad", + onFinished: finishAd + }, void 0, false, { + fileName: "[project]/src/components/common/startup-ad-dialog.tsx", + lineNumber: 222, + columnNumber: 33 + }, this) : null, + (ads === null || ads === void 0 ? void 0 : ads.nineGridList.length) ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(StartupGridDialog, { + items: ads.nineGridList, + open: phase === "grid" + }, void 0, false, { + fileName: "[project]/src/components/common/startup-ad-dialog.tsx", + lineNumber: 223, + columnNumber: 35 + }, this) : null + ] + }, void 0, true, { + fileName: "[project]/src/components/common/startup-ad-dialog.tsx", + lineNumber: 212, + columnNumber: 5 + }, this); +} +_s2(StartupPopups, "ZwQ/LcolPUijQs6uzAyVJZl9B5E=", false, function() { + return [ + __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$startup$2d$dialog$2d$ads$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useStartupAds"] + ]; +}); +_c2 = StartupPopups; +var _c, _c1, _c2; +__turbopack_context__.k.register(_c, "StartupAdDialog"); +__turbopack_context__.k.register(_c1, "StartupGridDialog"); +__turbopack_context__.k.register(_c2, "StartupPopups"); +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/components/common/startup-ad-source.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "StartupAdSource", + ()=>StartupAdSource +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$startup$2d$dialog$2d$ads$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/common/startup-dialog-ads.ts [app-client] (ecmascript)"); +var _s = __turbopack_context__.k.signature(); +"use client"; +; +; +function StartupAdSource(param) { + let { dialogList, nineGridList } = param; + _s(); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ + "StartupAdSource.useEffect": ()=>{ + (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$startup$2d$dialog$2d$ads$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["publishStartupAds"])(dialogList, nineGridList); + } + }["StartupAdSource.useEffect"], [ + dialogList, + nineGridList + ]); + return null; +} +_s(StartupAdSource, "OD7bBpZva5O2jO+Puf00hKivP7c="); +_c = StartupAdSource; +var _c; +__turbopack_context__.k.register(_c, "StartupAdSource"); +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/components/common/startup-age-dialog.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "StartupAgeDialog", + ()=>StartupAgeDialog +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); +; +var _s = __turbopack_context__.k.signature(); +"use client"; +; +function StartupAgeDialog(param) { + let { active, onAccepted } = param; + _s(); + const dialogRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(null); + const acceptedRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(false); + const [mobile, setMobile] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ + "StartupAgeDialog.useEffect": ()=>{ + const dialog = dialogRef.current; + if (!active || !dialog || dialog.open) return; + dialog.showModal(); + } + }["StartupAgeDialog.useEffect"], [ + active + ]); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ + "StartupAgeDialog.useEffect": ()=>{ + const query = window.matchMedia("(max-width:760px)"); + const sync = { + "StartupAgeDialog.useEffect.sync": ()=>setMobile(query.matches) + }["StartupAgeDialog.useEffect.sync"]; + sync(); + query.addEventListener("change", sync); + return ({ + "StartupAgeDialog.useEffect": ()=>query.removeEventListener("change", sync) + })["StartupAgeDialog.useEffect"]; + } + }["StartupAgeDialog.useEffect"], []); + function confirmAge() { + var _dialogRef_current; + acceptedRef.current = true; + (_dialogRef_current = dialogRef.current) === null || _dialogRef_current === void 0 ? void 0 : _dialogRef_current.close(); + } + function leaveSite() { + window.location.replace("about:blank"); + } + function keepOpenUnlessAccepted() { + const dialog = dialogRef.current; + if (!dialog) return; + dialog.classList.remove("startup-keyboard-focus"); + if (!acceptedRef.current && !dialog.open) dialog.showModal(); + else if (acceptedRef.current) onAccepted === null || onAccepted === void 0 ? void 0 : onAccepted(); + } + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("dialog", { + id: "startup-age", + ref: dialogRef, + className: "startup-popup", + "aria-labelledby": mobile ? "startup-age-mobile-title" : "startup-age-title", + "aria-describedby": mobile ? "startup-age-mobile-description" : "startup-age-description", + onCancel: (event)=>event.preventDefault(), + onClose: keepOpenUnlessAccepted, + onKeyDown: (event)=>{ + if (event.key === "Tab") event.currentTarget.classList.add("startup-keyboard-focus"); + }, + onPointerDown: (event)=>event.currentTarget.classList.remove("startup-keyboard-focus"), + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "startup-age-layout", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "startup-age-mark", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("img", { + className: "startup-age-desktop-icon", + src: "/images/ui/startup-age-desktop.svg", + width: 96, + height: 96, + alt: "18岁以上" + }, void 0, false, { + fileName: "[project]/src/components/common/startup-age-dialog.tsx", + lineNumber: 58, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("img", { + className: "startup-age-mobile-icon", + src: "/images/ui/startup-age-mobile.svg", + width: 78, + height: 78, + alt: "18岁以上" + }, void 0, false, { + fileName: "[project]/src/components/common/startup-age-dialog.tsx", + lineNumber: 59, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/common/startup-age-dialog.tsx", + lineNumber: 57, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "startup-age-copy", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "startup-age-desktop-copy", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", { + id: "startup-age-title", + children: "本网站仅限成年人访问" + }, void 0, false, { + fileName: "[project]/src/components/common/startup-age-dialog.tsx", + lineNumber: 63, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + id: "startup-age-description", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { + children: "本网站包含仅限18岁及以上成年人浏览的内容。若您未满18岁,或所在地法律不允许您浏览此类内容,请立即离开。" + }, void 0, false, { + fileName: "[project]/src/components/common/startup-age-dialog.tsx", + lineNumber: 65, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { + children: "继续进入即表示您确认已年满18岁,并达到所在地的法定成年年龄。" + }, void 0, false, { + fileName: "[project]/src/components/common/startup-age-dialog.tsx", + lineNumber: 66, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/common/startup-age-dialog.tsx", + lineNumber: 64, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/common/startup-age-dialog.tsx", + lineNumber: 62, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "startup-age-mobile-copy", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", { + id: "startup-age-mobile-title", + children: "这是个成人网站" + }, void 0, false, { + fileName: "[project]/src/components/common/startup-age-dialog.tsx", + lineNumber: 70, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { + id: "startup-age-mobile-description", + children: "本网站包含有年龄限制的内容,包括裸体和露骨色情素材的内容。 点击继续即表示您确认您已年满 18 岁,或在您访问本网站时所在的司法管辖区已是成年人" + }, void 0, false, { + fileName: "[project]/src/components/common/startup-age-dialog.tsx", + lineNumber: 71, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/common/startup-age-dialog.tsx", + lineNumber: 69, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "startup-age-actions", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { + className: "startup-age-confirm", + type: "button", + autoFocus: true, + onClick: confirmAge, + children: "我已年满18岁" + }, void 0, false, { + fileName: "[project]/src/components/common/startup-age-dialog.tsx", + lineNumber: 76, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { + className: "startup-age-leave", + type: "button", + onClick: leaveSite, + children: "离开网站" + }, void 0, false, { + fileName: "[project]/src/components/common/startup-age-dialog.tsx", + lineNumber: 79, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/common/startup-age-dialog.tsx", + lineNumber: 75, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/common/startup-age-dialog.tsx", + lineNumber: 61, + columnNumber: 9 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/common/startup-age-dialog.tsx", + lineNumber: 56, + columnNumber: 7 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { + className: "startup-close", + type: "button", + "aria-label": "离开网站", + onClick: leaveSite, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("img", { + src: "/images/ui/startup-close.svg", + width: 36, + height: 36, + alt: "" + }, void 0, false, { + fileName: "[project]/src/components/common/startup-age-dialog.tsx", + lineNumber: 86, + columnNumber: 9 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/common/startup-age-dialog.tsx", + lineNumber: 85, + columnNumber: 7 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/common/startup-age-dialog.tsx", + lineNumber: 43, + columnNumber: 5 + }, this); +} +_s(StartupAgeDialog, "T7RB2G4MJYpkO0T1igJF38FKAIg="); +_c = StartupAgeDialog; +var _c; +__turbopack_context__.k.register(_c, "StartupAgeDialog"); +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/components/common/startup-dialog-ads.ts [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "publishStartupAds", + ()=>publishStartupAds, + "useStartupAds", + ()=>useStartupAds +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); +var _s = __turbopack_context__.k.signature(); +"use client"; +; +let startupAds; +const listeners = new Set(); +function withImage(items) { + return (items || []).filter((item)=>{ + var _item_images; + return item === null || item === void 0 ? void 0 : (_item_images = item.images) === null || _item_images === void 0 ? void 0 : _item_images.trim(); + }); +} +function publishStartupAds(dialogList, nineGridList) { + if (startupAds !== undefined) return; + startupAds = { + dialogList: withImage(dialogList), + nineGridList: withImage(nineGridList) + }; + listeners.forEach((listener)=>listener()); +} +function useStartupAds() { + _s(); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSyncExternalStore"])({ + "useStartupAds.useSyncExternalStore": (listener)=>{ + listeners.add(listener); + return ({ + "useStartupAds.useSyncExternalStore": ()=>listeners.delete(listener) + })["useStartupAds.useSyncExternalStore"]; + } + }["useStartupAds.useSyncExternalStore"], { + "useStartupAds.useSyncExternalStore": ()=>startupAds + }["useStartupAds.useSyncExternalStore"], { + "useStartupAds.useSyncExternalStore": ()=>undefined + }["useStartupAds.useSyncExternalStore"]); +} +_s(useStartupAds, "FpwL93IKMLJZuQQXefVtWynbBPQ=", false, function() { + return [ + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSyncExternalStore"] + ]; +}); +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/components/common/toast-host.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ToastHost", + ()=>ToastHost +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$heroui$2f$react$2f$dist$2f$components$2f$toast$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/@heroui/react/dist/components/toast/index.js [app-client] (ecmascript) "); +"use client"; +; +; +function ToastHost() { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$heroui$2f$react$2f$dist$2f$components$2f$toast$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["Toast"].Provider, { + placement: "top", + width: 360, + maxVisibleToasts: 2 + }, void 0, false, { + fileName: "[project]/src/components/common/toast-host.tsx", + lineNumber: 7, + columnNumber: 10 + }, this); +} +_c = ToastHost; +var _c; +__turbopack_context__.k.register(_c, "ToastHost"); +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/components/common/toast.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ToastBridge", + ()=>ToastBridge +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$heroui$2f$react$2f$dist$2f$components$2f$toast$2f$toast$2d$queue$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/@heroui/react/dist/components/toast/toast-queue.js [app-client] (ecmascript)"); +var _s = __turbopack_context__.k.signature(); +"use client"; +; +; +function ToastBridge() { + _s(); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ + "ToastBridge.useEffect": ()=>{ + const onNotify = { + "ToastBridge.useEffect.onNotify": (event)=>{ + const detail = event.detail; + const message = typeof detail === "string" ? detail.trim() : ""; + if (!message) return; + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$heroui$2f$react$2f$dist$2f$components$2f$toast$2f$toast$2d$queue$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["toast"])(message); + } + }["ToastBridge.useEffect.onNotify"]; + window.addEventListener("app-toast", onNotify); + return ({ + "ToastBridge.useEffect": ()=>window.removeEventListener("app-toast", onNotify) + })["ToastBridge.useEffect"]; + } + }["ToastBridge.useEffect"], []); + return null; +} +_s(ToastBridge, "OD7bBpZva5O2jO+Puf00hKivP7c="); +_c = ToastBridge; +var _c; +__turbopack_context__.k.register(_c, "ToastBridge"); +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/components/drama/drama-badge.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "DramaBadge", + ()=>DramaBadge +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); +; +function DramaBadge(param) { + let { badge, badgeType, drama, variant = "corner", className } = param; + const label = badge !== null && badge !== void 0 ? badge : drama === null || drama === void 0 ? void 0 : drama.badge; + const type = badgeType !== null && badgeType !== void 0 ? badgeType : drama === null || drama === void 0 ? void 0 : drama.badgeType; + if (!label || !type) return null; + const base = variant === "series" ? "series-badge" : "cover-corner-badge"; + const classes = className ? `${base} ${base}--${type} ${className}` : `${base} ${base}--${type}`; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: classes, + children: label + }, void 0, false, { + fileName: "[project]/src/components/drama/drama-badge.tsx", + lineNumber: 28, + columnNumber: 10 + }, this); +} +_c = DramaBadge; +var _c; +__turbopack_context__.k.register(_c, "DramaBadge"); +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/components/drama/poster.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "Poster", + ()=>Poster +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$decrypted$2d$image$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/common/decrypted-image.tsx [app-client] (ecmascript)"); +; +; +function Poster(param) { + let { width, height, className = "poster-source", alt = "", src } = param; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$decrypted$2d$image$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["DecryptedImage"], { + className: className, + src: src, + width: width, + height: height, + alt: alt + }, void 0, false, { + fileName: "[project]/src/components/drama/poster.tsx", + lineNumber: 12, + columnNumber: 10 + }, this); +} +_c = Poster; +var _c; +__turbopack_context__.k.register(_c, "Poster"); +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/components/site/category-link.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "CategoryLink", + ()=>CategoryLink +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/navigation.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$translation$2d$nav$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/translation-nav.ts [app-client] (ecmascript)"); +; +var _s = __turbopack_context__.k.signature(); +"use client"; +; +; +; +; +function CategoryLink(param) { + let { urlValue, name, variant, children } = param; + _s(); + const pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["usePathname"])(); + const [currentPath, setCurrentPath] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(""); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ + "CategoryLink.useEffect": ()=>{ + setCurrentPath(pathname); + } + }["CategoryLink.useEffect"], [ + pathname + ]); + const href = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$translation$2d$nav$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["translationHref"])(urlValue); + const current = Boolean(currentPath) && (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$translation$2d$nav$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["isTranslationCurrent"])(currentPath, urlValue); + const page = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$translation$2d$nav$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["navPageForHref"])(href); + const content = variant === "header" ? name : variant === "sidebar" ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Fragment"], { + children: [ + children, + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "side-nav-label", + children: name + }, void 0, false, { + fileName: "[project]/src/components/site/category-link.tsx", + lineNumber: 35, + columnNumber: 9 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/site/category-link.tsx", + lineNumber: 33, + columnNumber: 7 + }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Fragment"], { + children: [ + children, + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + children: name + }, void 0, false, { + fileName: "[project]/src/components/site/category-link.tsx", + lineNumber: 40, + columnNumber: 9 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/site/category-link.tsx", + lineNumber: 38, + columnNumber: 7 + }, this); + const sidebarProps = variant === "sidebar" ? { + title: name, + "aria-label": name, + className: current ? "active" : undefined, + ...page ? { + "data-page": page, + "data-mobile-route": page + } : {} + } : {}; + if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$translation$2d$nav$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["isExternalHref"])(href)) { + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("a", { + href: href, + target: "_blank", + rel: "noreferrer", + ...sidebarProps, + children: content + }, void 0, false, { + fileName: "[project]/src/components/site/category-link.tsx", + lineNumber: 55, + columnNumber: 7 + }, this); + } + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], { + href: href, + "aria-current": current ? "page" : undefined, + ...sidebarProps, + children: content + }, void 0, false, { + fileName: "[project]/src/components/site/category-link.tsx", + lineNumber: 62, + columnNumber: 5 + }, this); +} +_s(CategoryLink, "y+Dv2+OMsJDXsrKpSl2oIMGuRr0=", false, function() { + return [ + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["usePathname"] + ]; +}); +_c = CategoryLink; +var _c; +__turbopack_context__.k.register(_c, "CategoryLink"); +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/components/site/entry-route-chrome.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "EntryRouteChrome", + ()=>EntryRouteChrome +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/navigation.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); +var _s = __turbopack_context__.k.signature(); +"use client"; +; +; +function EntryRouteChrome() { + _s(); + const pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["usePathname"])(); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useLayoutEffect"])({ + "EntryRouteChrome.useLayoutEffect": ()=>{ + if (pathname === "/nav") return; + document.querySelectorAll("#entry-navigation").forEach({ + "EntryRouteChrome.useLayoutEffect": (node)=>node.remove() + }["EntryRouteChrome.useLayoutEffect"]); + } + }["EntryRouteChrome.useLayoutEffect"], [ + pathname + ]); + return null; +} +_s(EntryRouteChrome, "5L/mpUhEbmdNPTq+x8CncGS8Nfk=", false, function() { + return [ + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["usePathname"] + ]; +}); +_c = EntryRouteChrome; +var _c; +__turbopack_context__.k.register(_c, "EntryRouteChrome"); +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/components/site/header-scroll.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "HeaderScroll", + ()=>HeaderScroll +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); +var _s = __turbopack_context__.k.signature(); +"use client"; +; +function HeaderScroll() { + _s(); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ + "HeaderScroll.useEffect": ()=>{ + const header = document.getElementById("global-site-header"); + if (!header) return; + let scheduled = false; + const update = { + "HeaderScroll.useEffect.update": ()=>{ + const scrolled = window.scrollY > 8; + header.classList.toggle("is-scrolled", scrolled); + header.classList.toggle("page-header-scrolled", scrolled); + scheduled = false; + } + }["HeaderScroll.useEffect.update"]; + const onScroll = { + "HeaderScroll.useEffect.onScroll": ()=>{ + if (scheduled) return; + scheduled = true; + requestAnimationFrame(update); + } + }["HeaderScroll.useEffect.onScroll"]; + update(); + window.addEventListener("scroll", onScroll, { + passive: true + }); + return ({ + "HeaderScroll.useEffect": ()=>window.removeEventListener("scroll", onScroll) + })["HeaderScroll.useEffect"]; + } + }["HeaderScroll.useEffect"], []); + return null; +} +_s(HeaderScroll, "OD7bBpZva5O2jO+Puf00hKivP7c="); +_c = HeaderScroll; +var _c; +__turbopack_context__.k.register(_c, "HeaderScroll"); +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/components/site/header-search.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "HeaderSearch", + ()=>HeaderSearch +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/client/app-dir/link.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/navigation.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$ListLoading$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/common/ListLoading.tsx [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$drama$2d$badge$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/drama/drama-badge.tsx [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$poster$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/drama/poster.tsx [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/playlet.ts [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2f$card$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/playlet/card.ts [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/playlet-display.ts [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$site$2f$routes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/site/routes.ts [app-client] (ecmascript)"); +; +var _s = __turbopack_context__.k.signature(); +"use client"; +; +; +; +; +; +; +; +; +; +; +function termFromPathname(pathname) { + if (pathname === "/search") return ""; + if (!pathname.startsWith("/search/")) return ""; + const segment = pathname.slice("/search/".length).split("/")[0] || ""; + if (!segment) return ""; + try { + return decodeURIComponent(segment); + } catch { + return segment; + } +} +const HISTORY_KEY = "shuguo-search-history"; +const HISTORY_LIMIT = 8; +const PICKS_PAGE = 3; +/** 源文件热搜榜 / 搜索建议最多展示 6 条。 */ const RANKING_LIMIT = 6; +const PANEL_MAX_WIDTH = 458; +const SUGGEST_DEBOUNCE_MS = 280; +function formatSearchCount(count) { + if (!Number.isFinite(count) || count <= 0) return ""; + if (count >= 10000) { + const value = count / 10000; + const text = value >= 10 ? String(Math.round(value)) : value.toFixed(1).replace(/\.0$/, ""); + return `${text}万 热度`; + } + return `${count} 热度`; +} +function highlightKeyword(text, keyword) { + const source = text || ""; + const needle = keyword.trim(); + if (!needle) return source; + const index = source.toLowerCase().indexOf(needle.toLowerCase()); + if (index < 0) return source; + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Fragment"], { + children: [ + source.slice(0, index), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("mark", { + children: source.slice(index, index + needle.length) + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 65, + columnNumber: 7 + }, this), + source.slice(index + needle.length) + ] + }, void 0, true, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 63, + columnNumber: 5 + }, this); +} +function readHistory() { + try { + const raw = localStorage.getItem(HISTORY_KEY); + if (!raw) return []; + const parsed = JSON.parse(raw); + if (!Array.isArray(parsed)) return []; + return parsed.filter((item)=>typeof item === "string" && item.trim().length > 0).map((item)=>item.slice(0, 100)).slice(0, HISTORY_LIMIT); + } catch { + return []; + } +} +function writeHistory(items) { + try { + localStorage.setItem(HISTORY_KEY, JSON.stringify(items.slice(0, HISTORY_LIMIT))); + } catch { + /* ignore quota */ } +} +function pushHistory(term, current) { + const next = [ + term, + ...current.filter((item)=>item !== term) + ].slice(0, HISTORY_LIMIT); + writeHistory(next); + return next; +} +function pickSlice(pool, offset) { + if (!pool.length) return []; + const start = (offset % pool.length + pool.length) % pool.length; + return Array.from({ + length: Math.min(PICKS_PAGE, pool.length) + }, (_, index)=>pool[(start + index) % pool.length]); +} +function HeaderSearch(param) { + let { query = "" } = param; + _s(); + const router = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRouter"])(); + const pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["usePathname"])() || ""; + const searchParams = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSearchParams"])(); + const panelId = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useId"])(); + const rootRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(null); + const panelRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(null); + const inputRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(null); + const pathTerm = termFromPathname(pathname); + const syncedQuery = query || pathTerm || searchParams.get("q") || ""; + const [open, setOpen] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false); + const [value, setValue] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(syncedQuery); + const [history, setHistory] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]); + const [picksOffset, setPicksOffset] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(0); + const [hotSearch, setHotSearch] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]); + const [hotState, setHotState] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])("loading"); + const [suggestList, setSuggestList] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]); + const [suggestState, setSuggestState] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])("idle"); + const [pickPool, setPickPool] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]); + const [pickState, setPickState] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])("loading"); + const trimmed = value.trim(); + const rankTitle = trimmed ? "搜索建议" : "热搜榜"; + const picks = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useMemo"])({ + "HeaderSearch.useMemo[picks]": ()=>pickSlice(pickPool, picksOffset) + }["HeaderSearch.useMemo[picks]"], [ + pickPool, + picksOffset + ]); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ + "HeaderSearch.useEffect": ()=>{ + let cancelled = false; + (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["fetchPlayletHotLike"])().then({ + "HeaderSearch.useEffect": (data)=>{ + if (cancelled) return; + setPickPool((data.guessLike || []).map(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2f$card$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["playletToDrama"])); + setHotSearch((data.hotSearch || []).filter({ + "HeaderSearch.useEffect": (item)=>{ + var _item_keyword; + return item === null || item === void 0 ? void 0 : (_item_keyword = item.keyword) === null || _item_keyword === void 0 ? void 0 : _item_keyword.trim(); + } + }["HeaderSearch.useEffect"])); + setHotState("ready"); + } + }["HeaderSearch.useEffect"]).catch({ + "HeaderSearch.useEffect": ()=>{ + if (cancelled) return; + setPickPool([]); + setHotSearch([]); + setHotState("error"); + } + }["HeaderSearch.useEffect"]).finally({ + "HeaderSearch.useEffect": ()=>{ + if (!cancelled) setPickState("ready"); + } + }["HeaderSearch.useEffect"]); + return ({ + "HeaderSearch.useEffect": ()=>{ + cancelled = true; + } + })["HeaderSearch.useEffect"]; + } + }["HeaderSearch.useEffect"], []); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ + "HeaderSearch.useEffect": ()=>{ + if (!trimmed) { + setSuggestList([]); + setSuggestState("idle"); + return; + } + let cancelled = false; + setSuggestList([]); + setSuggestState("loading"); + const timer = window.setTimeout({ + "HeaderSearch.useEffect.timer": ()=>{ + (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$playlet$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["fetchPlayletSearchSuggest"])(trimmed).then({ + "HeaderSearch.useEffect.timer": (data)=>{ + if (cancelled) return; + setSuggestList((data.list || []).filter({ + "HeaderSearch.useEffect.timer": (item)=>item === null || item === void 0 ? void 0 : item.id + }["HeaderSearch.useEffect.timer"])); + setSuggestState("ready"); + } + }["HeaderSearch.useEffect.timer"]).catch({ + "HeaderSearch.useEffect.timer": ()=>{ + if (cancelled) return; + setSuggestList([]); + setSuggestState("error"); + } + }["HeaderSearch.useEffect.timer"]); + } + }["HeaderSearch.useEffect.timer"], SUGGEST_DEBOUNCE_MS); + return ({ + "HeaderSearch.useEffect": ()=>{ + cancelled = true; + window.clearTimeout(timer); + } + })["HeaderSearch.useEffect"]; + } + }["HeaderSearch.useEffect"], [ + trimmed + ]); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ + "HeaderSearch.useEffect": ()=>{ + setHistory(readHistory()); + } + }["HeaderSearch.useEffect"], []); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ + "HeaderSearch.useEffect": ()=>{ + setValue(syncedQuery); + } + }["HeaderSearch.useEffect"], [ + syncedQuery + ]); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useLayoutEffect"])({ + "HeaderSearch.useLayoutEffect": ()=>{ + if (!open) return; + const form = rootRef.current; + const panel = panelRef.current; + if (!form || !panel) return; + function position() { + if (window.matchMedia("(max-width:760px)").matches) { + panel.style.width = ""; + panel.style.maxHeight = ""; + panel.style.setProperty("--search-panel-scale", "1"); + return; + } + const rect = form.getBoundingClientRect(); + const nextWidth = `${Math.min(PANEL_MAX_WIDTH, window.innerWidth - rect.left - 20)}px`; + if (panel.style.width !== nextWidth) panel.style.width = nextWidth; + panel.style.maxHeight = "none"; + const available = Math.max(120, window.innerHeight - rect.bottom - 28); + const nextScale = String(Math.min(1, available / Math.max(panel.offsetHeight, 1))); + if (panel.style.getPropertyValue("--search-panel-scale") !== nextScale) { + panel.style.setProperty("--search-panel-scale", nextScale); + } + } + position(); + const frame = requestAnimationFrame(position); + const observer = new ResizeObserver(position); + observer.observe(panel); + window.addEventListener("resize", position); + return ({ + "HeaderSearch.useLayoutEffect": ()=>{ + cancelAnimationFrame(frame); + observer.disconnect(); + window.removeEventListener("resize", position); + } + })["HeaderSearch.useLayoutEffect"]; + } + }["HeaderSearch.useLayoutEffect"], [ + open, + history, + picks, + hotSearch, + hotState, + suggestList, + suggestState, + rankTitle, + pickState + ]); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ + "HeaderSearch.useEffect": ()=>{ + if (!open) return; + function onPointerDown(event) { + var _rootRef_current; + if (!((_rootRef_current = rootRef.current) === null || _rootRef_current === void 0 ? void 0 : _rootRef_current.contains(event.target))) setOpen(false); + } + function onKeyDown(event) { + if (event.key === "Escape") { + var _inputRef_current; + setOpen(false); + (_inputRef_current = inputRef.current) === null || _inputRef_current === void 0 ? void 0 : _inputRef_current.blur(); + } + } + document.addEventListener("mousedown", onPointerDown); + document.addEventListener("keydown", onKeyDown); + return ({ + "HeaderSearch.useEffect": ()=>{ + document.removeEventListener("mousedown", onPointerDown); + document.removeEventListener("keydown", onKeyDown); + } + })["HeaderSearch.useEffect"]; + } + }["HeaderSearch.useEffect"], [ + open + ]); + function goSearch(term) { + const next = term.trim(); + if (!next) { + var _inputRef_current; + setOpen(true); + (_inputRef_current = inputRef.current) === null || _inputRef_current === void 0 ? void 0 : _inputRef_current.focus(); + return; + } + setValue(next); + setHistory((current)=>pushHistory(next, current)); + setOpen(false); + router.push(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$site$2f$routes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["routes"].searchPath(next)); + } + function onSubmit(event) { + event.preventDefault(); + goSearch(value); + } + function onInputKeyDown(event) { + if (event.key === "Escape") { + event.preventDefault(); + setOpen(false); + event.currentTarget.blur(); + } + } + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("form", { + ref: rootRef, + className: "search", + role: "search", + action: __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$site$2f$routes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["routes"].search, + method: "get", + onSubmit: onSubmit, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", { + ref: inputRef, + name: "q", + type: "search", + placeholder: "搜索你感兴趣的内容", + "aria-label": "搜索短剧", + "aria-expanded": open, + "aria-controls": panelId, + autoComplete: "off", + maxLength: 100, + value: value, + onChange: (event)=>{ + setValue(event.target.value); + setOpen(true); + }, + onFocus: ()=>setOpen(true), + onClick: ()=>setOpen(true), + onKeyDown: onInputKeyDown + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 283, + columnNumber: 7 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { + type: "submit", + "aria-label": "执行搜索", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("img", { + className: "hg-search-icon", + src: "/images/search.svg", + alt: "", + width: 17, + height: 17 + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 303, + columnNumber: 9 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 302, + columnNumber: 7 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + ref: panelRef, + id: panelId, + className: "search-discovery", + role: "dialog", + "aria-label": "搜索推荐", + hidden: !open, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("section", { + className: "search-history-section", + "aria-labelledby": `${panelId}-history`, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "search-discovery-heading", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", { + id: `${panelId}-history`, + children: "搜索记录" + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 316, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "search-history-actions", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { + id: "search-clear", + type: "button", + onClick: ()=>{ + writeHistory([]); + setHistory([]); + }, + children: "清除" + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 318, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { + id: "search-panel-close", + type: "button", + "aria-label": "关闭搜索推荐", + onClick: ()=>{ + var _inputRef_current; + setOpen(false); + (_inputRef_current = inputRef.current) === null || _inputRef_current === void 0 ? void 0 : _inputRef_current.blur(); + }, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("svg", { + viewBox: "0 0 24 24", + "aria-hidden": "true", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("circle", { + cx: "12", + cy: "12", + r: "9", + fill: "none", + stroke: "currentColor", + strokeWidth: "1.6" + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 338, + columnNumber: 19 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("path", { + d: "m9 9 6 6m0-6-6 6", + fill: "none", + stroke: "currentColor", + strokeWidth: "1.6", + strokeLinecap: "round" + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 339, + columnNumber: 19 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 337, + columnNumber: 17 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 328, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 317, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 315, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "search-history-tags", + children: history.length ? history.map((term)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { + type: "button", + onClick: ()=>goSearch(term), + children: term + }, term, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 353, + columnNumber: 17 + }, this)) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "search-discovery-status", + children: "暂无搜索记录" + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 358, + columnNumber: 15 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 350, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 314, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("section", { + className: "search-ranking-section", + "aria-labelledby": `${panelId}-rank`, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "search-discovery-heading", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", { + id: `${panelId}-rank`, + children: rankTitle + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 365, + columnNumber: 13 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 364, + columnNumber: 11 + }, this), + trimmed ? suggestState === "loading" && suggestList.length === 0 ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$ListLoading$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["ListLoading"], { + variant: "inline", + label: "正在联想" + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 369, + columnNumber: 15 + }, this) : suggestList.length ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "search-suggestion-list", + "aria-live": "polite", + children: suggestList.slice(0, RANKING_LIMIT).map((item, index)=>{ + const title = item.title || item.playName || "未命名"; + const heat = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["formatHeatValue"])(item.heatValue); + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], { + href: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["playletHref"])(item), + onClick: ()=>{ + setHistory((current)=>pushHistory(title, current)); + setOpen(false); + }, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "suggestion-number", + "aria-hidden": "true", + children: index + 1 + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 384, + columnNumber: 23 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "suggestion-copy", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("strong", { + children: highlightKeyword(title, trimmed) + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 388, + columnNumber: 25 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 387, + columnNumber: 23 + }, this), + heat ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("small", { + className: "suggestion-heat", + children: [ + heat, + " 热度" + ] + }, void 0, true, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 390, + columnNumber: 31 + }, this) : null + ] + }, item.id, true, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 376, + columnNumber: 21 + }, this); + }) + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 371, + columnNumber: 15 + }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { + className: "search-discovery-status", + children: suggestState === "error" ? "联想暂时不可用,请稍后重试" : "没有匹配的短剧,换个关键词试试" + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 396, + columnNumber: 15 + }, this) : hotState === "loading" && hotSearch.length === 0 ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$ListLoading$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["ListLoading"], { + variant: "inline", + label: "正在加载热搜" + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 401, + columnNumber: 13 + }, this) : hotSearch.length ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "search-suggestion-list", + "aria-live": "polite", + children: hotSearch.slice(0, RANKING_LIMIT).map((item, index)=>{ + const heat = formatSearchCount(item.count); + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { + type: "button", + onClick: ()=>goSearch(item.keyword), + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "suggestion-number", + "aria-hidden": "true", + children: index + 1 + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 408, + columnNumber: 21 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "suggestion-copy", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("strong", { + children: item.keyword + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 412, + columnNumber: 23 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 411, + columnNumber: 21 + }, this), + heat ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("small", { + className: "suggestion-heat", + children: heat + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 414, + columnNumber: 29 + }, this) : null + ] + }, `${item.keyword}-${index}`, true, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 407, + columnNumber: 19 + }, this); + }) + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 403, + columnNumber: 13 + }, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { + className: "search-discovery-status", + children: hotState === "error" ? "热搜暂时不可用,请稍后重试" : "暂无热搜" + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 420, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 363, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("section", { + className: "search-picks-section", + "aria-labelledby": `${panelId}-picks`, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "search-discovery-heading", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h2", { + id: `${panelId}-picks`, + children: "猜你喜欢" + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 426, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { + id: "search-picks-refresh", + type: "button", + onClick: ()=>setPicksOffset((offset)=>offset + 1), + children: "换一换" + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 427, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 425, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "search-picks-grid", + children: pickState === "loading" && picks.length === 0 ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$ListLoading$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["ListLoading"], { + variant: "inline", + label: "正在加载" + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 437, + columnNumber: 15 + }, this) : picks.map((drama)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], { + className: "search-pick", + href: __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$site$2f$routes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["routes"].drama(drama.routeKey || drama.id), + onClick: ()=>setOpen(false), + "aria-label": `查看${drama.title}`, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "search-pick-cover", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$poster$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Poster"], { + src: drama.coverUrl, + width: 320, + height: 456 + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 447, + columnNumber: 19 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$drama$2f$drama$2d$badge$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["DramaBadge"], { + drama: drama + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 448, + columnNumber: 19 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "drama-episodes", + children: [ + drama.eps, + "集" + ] + }, void 0, true, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 449, + columnNumber: 19 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 446, + columnNumber: 17 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { + className: "search-pick-body", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("strong", { + children: drama.title + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 452, + columnNumber: 19 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("small", { + children: drama.desc + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 453, + columnNumber: 19 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 451, + columnNumber: 17 + }, this) + ] + }, `${drama.id}-${picksOffset}`, true, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 439, + columnNumber: 15 + }, this)) + }, void 0, false, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 435, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 424, + columnNumber: 9 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 306, + columnNumber: 7 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/site/header-search.tsx", + lineNumber: 275, + columnNumber: 5 + }, this); +} +_s(HeaderSearch, "KKdoDuO0nvMemvVm5SKfR42ooBE=", false, function() { + return [ + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRouter"], + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["usePathname"], + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSearchParams"], + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useId"] + ]; +}); +_c = HeaderSearch; +var _c; +__turbopack_context__.k.register(_c, "HeaderSearch"); +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/components/site/mobile-menu.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "MobileMenu", + ()=>MobileMenu +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/navigation.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); +; +var _s = __turbopack_context__.k.signature(); +"use client"; +; +; +const MOBILE_MQ = "(max-width:760px)"; +function MobileMenu(param) { + let { children } = param; + _s(); + const pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["usePathname"])(); + const dialogRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(null); + const closeTimer = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(null); + const touchStart = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(null); + const [expanded, setExpanded] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false); + function clearCloseTimer() { + if (closeTimer.current) { + clearTimeout(closeTimer.current); + closeTimer.current = null; + } + } + function finishClose() { + clearCloseTimer(); + const dialog = dialogRef.current; + dialog === null || dialog === void 0 ? void 0 : dialog.classList.remove("is-closing"); + if (dialog === null || dialog === void 0 ? void 0 : dialog.open) dialog.close(); + document.body.classList.remove("mobile-drawer-open"); + setExpanded(false); + } + function close() { + let animated = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true; + const dialog = dialogRef.current; + if (!(dialog === null || dialog === void 0 ? void 0 : dialog.open)) return; + if (!animated || window.matchMedia("(prefers-reduced-motion: reduce)").matches) { + finishClose(); + return; + } + if (closeTimer.current) return; + dialog.classList.add("is-closing"); + closeTimer.current = setTimeout(finishClose, 180); + } + function open() { + if (!window.matchMedia(MOBILE_MQ).matches) return; + const dialog = dialogRef.current; + if (!dialog) return; + clearCloseTimer(); + dialog.classList.remove("is-closing"); + if (!dialog.open) dialog.showModal(); + document.body.classList.add("mobile-drawer-open"); + setExpanded(true); + } + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ + "MobileMenu.useEffect": ()=>{ + const dialog = dialogRef.current; + if (!(dialog === null || dialog === void 0 ? void 0 : dialog.open)) return; + clearCloseTimer(); + dialog.classList.remove("is-closing"); + dialog.close(); + document.body.classList.remove("mobile-drawer-open"); + setExpanded(false); + } + }["MobileMenu.useEffect"], [ + pathname + ]); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ + "MobileMenu.useEffect": ()=>{ + const media = window.matchMedia(MOBILE_MQ); + function onChange() { + if (media.matches) return; + const dialog = dialogRef.current; + if (!(dialog === null || dialog === void 0 ? void 0 : dialog.open)) return; + clearCloseTimer(); + dialog.classList.remove("is-closing"); + dialog.close(); + document.body.classList.remove("mobile-drawer-open"); + setExpanded(false); + } + media.addEventListener("change", onChange); + return ({ + "MobileMenu.useEffect": ()=>{ + media.removeEventListener("change", onChange); + clearCloseTimer(); + document.body.classList.remove("mobile-drawer-open"); + } + })["MobileMenu.useEffect"]; + } + }["MobileMenu.useEffect"], []); + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Fragment"], { + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { + type: "button", + className: "mobile-menu-trigger", + "aria-label": "打开导航菜单", + "aria-controls": "mobile-navigation-drawer", + "aria-expanded": expanded, + onClick: open, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("svg", { + viewBox: "0 0 24 24", + "aria-hidden": "true", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("path", { + d: "M4 6h16M4 12h16M4 18h16" + }, void 0, false, { + fileName: "[project]/src/components/site/mobile-menu.tsx", + lineNumber: 95, + columnNumber: 11 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/site/mobile-menu.tsx", + lineNumber: 94, + columnNumber: 9 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/site/mobile-menu.tsx", + lineNumber: 86, + columnNumber: 7 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("dialog", { + ref: dialogRef, + id: "mobile-navigation-drawer", + "aria-label": "网站导航", + onCancel: (event)=>{ + event.preventDefault(); + close(); + }, + onClose: finishClose, + onClick: (event)=>{ + const dialog = dialogRef.current; + if (!dialog) return; + if (event.target.closest("a")) { + close(); + return; + } + if (event.target !== dialog) return; + const rect = dialog.getBoundingClientRect(); + const { clientX: x, clientY: y } = event; + if (x < rect.left || x > rect.right || y < rect.top || y > rect.bottom) close(); + }, + onTouchStart: (event)=>{ + const touch = event.touches[0]; + touchStart.current = event.touches.length === 1 && touch ? { + x: touch.clientX, + y: touch.clientY + } : null; + }, + onTouchEnd: (event)=>{ + const start = touchStart.current; + touchStart.current = null; + if (!start) return; + const touch = event.changedTouches[0]; + if (!touch) return; + const dx = touch.clientX - start.x; + const dy = touch.clientY - start.y; + if (dx < -60 && Math.abs(dx) > Math.abs(dy) * 1.5) close(); + }, + onTouchCancel: ()=>{ + touchStart.current = null; + }, + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { + type: "button", + className: "mobile-drawer-close", + "aria-label": "关闭导航菜单", + onClick: ()=>close(), + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("svg", { + viewBox: "0 0 24 24", + "aria-hidden": "true", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("path", { + d: "m5 5 14 14M19 5 5 19" + }, void 0, false, { + fileName: "[project]/src/components/site/mobile-menu.tsx", + lineNumber: 140, + columnNumber: 13 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/site/mobile-menu.tsx", + lineNumber: 139, + columnNumber: 11 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/site/mobile-menu.tsx", + lineNumber: 138, + columnNumber: 9 + }, this), + children + ] + }, void 0, true, { + fileName: "[project]/src/components/site/mobile-menu.tsx", + lineNumber: 99, + columnNumber: 7 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/site/mobile-menu.tsx", + lineNumber: 85, + columnNumber: 5 + }, this); +} +_s(MobileMenu, "DOuBG6T9HSZ5OitPk77Su/liqRk=", false, function() { + return [ + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["usePathname"] + ]; +}); +_c = MobileMenu; +var _c; +__turbopack_context__.k.register(_c, "MobileMenu"); +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/components/site/page-tools.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "PageTools", + ()=>PageTools +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$app$2d$download$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/common/app-download.tsx [app-client] (ecmascript)"); +; +var _s = __turbopack_context__.k.signature(); +"use client"; +; +; +function PageTools(param) { + let { siteName = "" } = param; + _s(); + const appAddr = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$app$2d$download$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useAppAddr"])(); + const name = siteName.trim() || "App"; + const toolsRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(null); + const [visible, setVisible] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ + "PageTools.useEffect": ()=>{ + const onScroll = { + "PageTools.useEffect.onScroll": ()=>setVisible(window.scrollY > 240) + }["PageTools.useEffect.onScroll"]; + onScroll(); + window.addEventListener("scroll", onScroll, { + passive: true + }); + return ({ + "PageTools.useEffect": ()=>window.removeEventListener("scroll", onScroll) + })["PageTools.useEffect"]; + } + }["PageTools.useEffect"], []); + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("aside", { + ref: toolsRef, + className: `page-tools${visible ? " is-visible" : ""}`, + id: "page-tools", + "aria-label": "页面快捷工具", + "aria-hidden": !visible, + inert: !visible ? true : undefined, + children: [ + appAddr ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "page-tool-download", + id: "page-tool-download", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$app$2d$download$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["AppDownloadLink"], { + className: "page-tool", + id: "floating-download", + label: "下载 App", + title: "下载 App", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("svg", { + viewBox: "0 0 24 24", + "aria-hidden": "true", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("rect", { + x: "6", + y: "2", + width: "12", + height: "20", + rx: "3" + }, void 0, false, { + fileName: "[project]/src/components/site/page-tools.tsx", + lineNumber: 33, + columnNumber: 15 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("path", { + d: "M10 5h4m-3 14h2" + }, void 0, false, { + fileName: "[project]/src/components/site/page-tools.tsx", + lineNumber: 34, + columnNumber: 15 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/site/page-tools.tsx", + lineNumber: 32, + columnNumber: 13 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/site/page-tools.tsx", + lineNumber: 31, + columnNumber: 11 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "download-qr-panel", + id: "download-qr-panel", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "download-panel-brand", + "aria-label": name, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("img", { + className: "download-brand-complete", + src: "/logo.webp", + alt: name, + width: 135, + height: 40 + }, void 0, false, { + fileName: "[project]/src/components/site/page-tools.tsx", + lineNumber: 39, + columnNumber: 15 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/site/page-tools.tsx", + lineNumber: 38, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "download-qr-placeholder", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$app$2d$download$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["DownloadQr"], {}, void 0, false, { + fileName: "[project]/src/components/site/page-tools.tsx", + lineNumber: 42, + columnNumber: 15 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/site/page-tools.tsx", + lineNumber: 41, + columnNumber: 13 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { + className: "download-panel-copy", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", { + children: `扫码下载安装「${name}」` + }, void 0, false, { + fileName: "[project]/src/components/site/page-tools.tsx", + lineNumber: 45, + columnNumber: 15 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/site/page-tools.tsx", + lineNumber: 44, + columnNumber: 13 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/site/page-tools.tsx", + lineNumber: 37, + columnNumber: 11 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/site/page-tools.tsx", + lineNumber: 30, + columnNumber: 9 + }, this) : null, + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { + className: "page-tool", + id: "back-to-top", + type: "button", + "aria-label": "回到顶部", + title: "回到顶部", + onClick: ()=>{ + const reduce = window.matchMedia("(prefers-reduced-motion: reduce)").matches; + window.scrollTo({ + top: 0, + behavior: reduce ? "instant" : "smooth" + }); + }, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("svg", { + viewBox: "0 0 24 24", + "aria-hidden": "true", + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("path", { + d: "M5 4h14M12 20V8m-6 6 6-6 6 6" + }, void 0, false, { + fileName: "[project]/src/components/site/page-tools.tsx", + lineNumber: 62, + columnNumber: 11 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/site/page-tools.tsx", + lineNumber: 61, + columnNumber: 9 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/site/page-tools.tsx", + lineNumber: 50, + columnNumber: 7 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/site/page-tools.tsx", + lineNumber: 21, + columnNumber: 5 + }, this); +} +_s(PageTools, "wFtXa6swOPCBiRFcgz1s2UJcb6E=", false, function() { + return [ + __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$common$2f$app$2d$download$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useAppAddr"] + ]; +}); +_c = PageTools; +var _c; +__turbopack_context__.k.register(_c, "PageTools"); +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/components/site/sidebar-toggle.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "SidebarToggle", + ()=>SidebarToggle +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); +; +var _s = __turbopack_context__.k.signature(); +"use client"; +; +const storageKey = "huangguo-sidebar-collapsed"; +function readCollapsed() { + return document.documentElement.classList.contains("sidebar-collapsed"); +} +function SidebarToggle() { + _s(); + const [collapsed, setCollapsed] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useLayoutEffect"])({ + "SidebarToggle.useLayoutEffect": ()=>{ + setCollapsed(readCollapsed()); + } + }["SidebarToggle.useLayoutEffect"], []); + (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ + "SidebarToggle.useEffect": ()=>{ + const header = document.querySelector("#site-sidebar .sidebar-header"); + if (!header) return; + const clear = { + "SidebarToggle.useEffect.clear": ()=>header.classList.remove("just-collapsed") + }["SidebarToggle.useEffect.clear"]; + header.addEventListener("mouseleave", clear); + header.addEventListener("focusout", clear); + return ({ + "SidebarToggle.useEffect": ()=>{ + header.removeEventListener("mouseleave", clear); + header.removeEventListener("focusout", clear); + } + })["SidebarToggle.useEffect"]; + } + }["SidebarToggle.useEffect"], []); + return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { + id: "sidebar-toggle", + className: "sidebar-toggle", + type: "button", + "aria-controls": "site-sidebar", + "aria-expanded": !collapsed, + "aria-label": collapsed ? "展开侧边栏" : "收起侧边栏", + title: collapsed ? "展开侧边栏" : "收起侧边栏", + onKeyDown: ()=>{ + var _document_querySelector; + (_document_querySelector = document.querySelector("#site-sidebar .sidebar-header")) === null || _document_querySelector === void 0 ? void 0 : _document_querySelector.classList.remove("just-collapsed"); + }, + onClick: (event)=>{ + var _event_currentTarget_closest; + const next = !readCollapsed(); + document.documentElement.classList.toggle("sidebar-collapsed", next); + (_event_currentTarget_closest = event.currentTarget.closest(".sidebar-header")) === null || _event_currentTarget_closest === void 0 ? void 0 : _event_currentTarget_closest.classList.toggle("just-collapsed", next); + try { + localStorage.setItem(storageKey, String(next)); + } catch {} + setCollapsed(next); + }, + children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("svg", { + viewBox: "0 0 24 24", + "aria-hidden": "true", + children: [ + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("rect", { + x: "3", + y: "4", + width: "18", + height: "16", + rx: "3" + }, void 0, false, { + fileName: "[project]/src/components/site/sidebar-toggle.tsx", + lineNumber: 53, + columnNumber: 9 + }, this), + /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("path", { + d: "M9 4v16" + }, void 0, false, { + fileName: "[project]/src/components/site/sidebar-toggle.tsx", + lineNumber: 54, + columnNumber: 9 + }, this) + ] + }, void 0, true, { + fileName: "[project]/src/components/site/sidebar-toggle.tsx", + lineNumber: 52, + columnNumber: 7 + }, this) + }, void 0, false, { + fileName: "[project]/src/components/site/sidebar-toggle.tsx", + lineNumber: 31, + columnNumber: 5 + }, this); +} +_s(SidebarToggle, "0dZ7+YwGMw0/e/u6jCNHKYQ7abc="); +_c = SidebarToggle; +var _c; +__turbopack_context__.k.register(_c, "SidebarToggle"); +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/lib/api/client-headers.ts [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "buildBrowserApiHeaders", + ()=>buildBrowserApiHeaders, + "clientHeaders", + ()=>clientHeaders, + "clientIp", + ()=>clientIp +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)"); +var _process_env_NEXT_PUBLIC_APP_VERSION; +const APP_VER = ((_process_env_NEXT_PUBLIC_APP_VERSION = ("TURBOPACK compile-time value", "1.0.0")) === null || _process_env_NEXT_PUBLIC_APP_VERSION === void 0 ? void 0 : _process_env_NEXT_PUBLIC_APP_VERSION.trim()) || "1.0.0"; +function clean(value) { + return value.replace(/[^\x20-\x7E]|[;=]/g, " ").trim(); +} +/** 不依赖 node:net,避免被浏览器端打包。 */ function isIP(value) { + if (/^(?:\d{1,3}\.){3}\d{1,3}$/.test(value)) { + return value.split(".").every((part)=>{ + const n = Number(part); + return String(n) === part && n >= 0 && n <= 255; + }); + } + // 宽松校验 IPv6,够用来转发 X-Real-IP。 + return value.includes(":") && /^[0-9a-fA-F:.]+$/.test(value); +} +function sysType(ua) { + const value = ua.toLowerCase(); + if (value.includes("android")) return "h5_android"; + if (value.includes("iphone") || value.includes("ipad") || value.includes("ipod")) return "h5_ios"; + return "h5_pc"; +} +function guessAndroidBrand(model, ua) { + var _brands_find; + const value = `${model} ${ua}`; + const brands = [ + [ + /Build\/HONOR|\bHONOR\b/i, + "Honor" + ], + [ + /Build\/HUAWEI|HUAWEI|HW-/i, + "Huawei" + ], + [ + /SM-|samsung|Galaxy/i, + "Samsung" + ], + [ + /Pixel/i, + "Google" + ], + [ + /Redmi|POCO|XiaoMi|\bMi\b/i, + "Xiaomi" + ], + [ + /OPPO|\bCPH\d{3,4}/i, + "OPPO" + ], + [ + /vivo|\bV\d{4}/i, + "vivo" + ], + [ + /OnePlus|ONEPLUS/i, + "OnePlus" + ], + [ + /realme|\bRMX\d{3,4}/i, + "realme" + ] + ]; + return ((_brands_find = brands.find((param)=>{ + let [pattern] = param; + return pattern.test(value); + })) === null || _brands_find === void 0 ? void 0 : _brands_find[1]) || ""; +} +function parseBrowser(ua) { + const edge = ua.match(/Edg\/([\d.]+)/i); + if (edge) return `Edge ${edge[1]}`; + const opera = ua.match(/(?:OPR|Opera)\/([\d.]+)/i); + if (opera) return `Opera ${opera[1]}`; + const chrome = ua.match(/Chrome\/([\d.]+)/i); + if (chrome && !/Edg\//i.test(ua)) return `Chrome ${chrome[1]}`; + const safari = ua.match(/Version\/([\d.]+).*Safari/i); + if (safari) return `Safari ${safari[1]}`; + const firefox = ua.match(/Firefox\/([\d.]+)/i); + if (firefox) return `Firefox ${firefox[1]}`; + const ie = ua.match(/(?:MSIE\s|Trident.*rv:)([\d.]+)/i); + if (ie) return `IE ${ie[1]}`; + return ""; +} +/** 从浏览器 User-Agent 解析设备公共字段,口径对齐 jha-1040 useragent.ParseDeviceFromUA。 */ function parseDeviceFromUA(ua) { + const raw = ua.trim(); + let deviceBrand = ""; + let deviceModel = ""; + let deviceType = "desktop"; + let systemName = "Other"; + let systemVersion = ""; + if (/iPhone|iPad|iPod/i.test(raw)) { + systemName = "iOS"; + deviceBrand = "Apple"; + const ios = raw.match(/OS (\d+[_\d]*) like Mac OS X/i); + if (ios) systemVersion = ios[1].replace(/_/g, "."); + if (/iPad/i.test(raw)) { + deviceModel = "iPad"; + deviceType = "tablet"; + } else if (/iPod/i.test(raw)) { + deviceModel = "iPod"; + deviceType = "mobile"; + } else { + deviceModel = "iPhone"; + deviceType = "mobile"; + } + } else if (/Android/i.test(raw)) { + systemName = "Android"; + const version = raw.match(/Android ([\d.]+)/i); + if (version) systemVersion = version[1]; + const model = raw.match(/Android\s+[\d.]+;\s*([^;)]+?)(?:\s+Build\/|\))/i); + if (model === null || model === void 0 ? void 0 : model[1]) deviceModel = model[1].trim(); + deviceBrand = guessAndroidBrand(deviceModel, raw); + deviceType = /Mobile/i.test(raw) ? "mobile" : "tablet"; + } else if (/Windows/i.test(raw)) { + systemName = "Windows"; + const win = raw.match(/Windows NT ([\d.]+)/i); + if (win) systemVersion = win[1]; + } else if (/Mac OS X|Macintosh/i.test(raw)) { + systemName = "macOS"; + deviceBrand = "Apple"; + deviceModel = "Mac"; + const mac = raw.match(/Mac OS X ([\d_]+)/i); + if (mac) systemVersion = mac[1].replace(/_/g, "."); + } else if (/Linux/i.test(raw)) { + systemName = "Linux"; + } + const devType = [ + deviceBrand, + deviceModel, + deviceType + ].map((part)=>part.trim()).filter(Boolean).join(" "); + return { + devType: devType || "desktop", + sysType: sysType(raw), + buildID: clean(parseBrowser(raw)) || "web", + deviceBrand, + deviceModel, + systemName, + systemVersion + }; +} +function xUserAgent(ua) { + let extra = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + const info = parseDeviceFromUA(ua); + return [ + extra.devID ? `DevID=${clean(extra.devID)}` : "", + `DevType=${clean(info.devType)}`, + `SysType=${info.sysType}`, + `Ver=${clean(APP_VER)}`, + `BuildID=${clean(info.buildID) || "web"}`, + `device_brand=${clean(info.deviceBrand)}`, + `device_model=${clean(info.deviceModel)}`, + `system_name=${clean(info.systemName)}`, + `system_version=${clean(info.systemVersion)}`, + `sid=${clean(extra.sid || "")}` + ].filter((part)=>part !== "").join(";"); +} +function sessionId(source) { + const cookies = new Map((source.get("cookie") || "").split(";").map((value)=>{ + const index = value.indexOf("="); + if (index < 0) return [ + "", + "" + ]; + return [ + value.slice(0, index).trim(), + value.slice(index + 1).trim() + ]; + })); + const sid = cookies.get("sid"); + if (sid) return sid; + const token = cookies.get("_s_token_") || ""; + if (token.startsWith("{")) { + try { + return String(JSON.parse(token).sid || ""); + } catch { + /* ignore */ } + } + return token; +} +function buildBrowserApiHeaders() { + let devID = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "", sid = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : ""; + const ua = typeof navigator !== "undefined" ? navigator.userAgent : ""; + return { + "X-User-Agent": xUserAgent(ua, { + devID, + sid + }) + }; +} +function clientIp(source) { + let fallback = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : ""; + var _source_get; + const candidates = [ + source.get("x-real-ip"), + (_source_get = source.get("x-forwarded-for")) === null || _source_get === void 0 ? void 0 : _source_get.split(",")[0], + fallback + ]; + for (const value of candidates){ + const ip = (value === null || value === void 0 ? void 0 : value.trim()) || ""; + if (ip && isIP(ip)) return ip; + } + return ""; +} +function clientHeaders(source) { + let overrides = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + var _source_get; + const result = {}; + const ua = (overrides.userAgent || (source === null || source === void 0 ? void 0 : source.get("user-agent")) || "").trim(); + if (ua) result["User-Agent"] = ua; + const incomingXua = (source === null || source === void 0 ? void 0 : (_source_get = source.get("x-user-agent")) === null || _source_get === void 0 ? void 0 : _source_get.trim()) || ""; + if (incomingXua) { + result["X-User-Agent"] = incomingXua; + } else if (ua) { + result["X-User-Agent"] = xUserAgent(ua, { + sid: source ? sessionId(source) : "" + }); + } else { + Object.assign(result, buildBrowserApiHeaders(overrides.devID || "web-ssr")); + } + const ip = overrides.clientIp || (source ? clientIp(source) : ""); + if (ip) result["X-Real-IP"] = ip; + return result; +} +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/lib/api/client.ts [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "ApiError", + ()=>ApiError, + "apiRequest", + ()=>apiRequest +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$swc$2f$helpers$2f$esm$2f$_define_property$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/@swc/helpers/esm/_define_property.js [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$device$2d$id$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/device-id.ts [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/config.ts [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$sdk$2d$headers$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/sdk-headers.ts [app-client] (ecmascript)"); +; +; +; +; +class ApiError extends Error { + constructor(message, status, code){ + super(message), (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$swc$2f$helpers$2f$esm$2f$_define_property$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["_"])(this, "status", void 0), (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$swc$2f$helpers$2f$esm$2f$_define_property$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["_"])(this, "code", void 0); + this.name = "ApiError"; + this.status = status; + this.code = code; + } +} +async function apiRequest(path) { + let options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; + const { method = "GET", body } = options; + const headers = { + Accept: "application/json", + ...await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$sdk$2d$headers$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["browserTrackingHeaders"])(("TURBOPACK compile-time truthy", 1) ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$device$2d$id$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["getDeviceId"])() : "TURBOPACK unreachable") + }; + if (body !== undefined) headers["Content-Type"] = "application/json"; + let response; + try { + response = await fetch(`${__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["API_BASE_URL"]}${path}`, { + method, + headers, + body: body === undefined ? undefined : JSON.stringify(body) + }); + } catch { + throw new ApiError("网络异常,请稍后重试", 0); + } + const text = await response.text(); + let payload = null; + try { + payload = text ? JSON.parse(text) : null; + } catch { + payload = null; + } + if (!payload || typeof payload.code !== "number") { + throw new ApiError(response.ok ? "接口响应格式异常" : `接口暂时不可用 (${response.status})`, response.status); + } + if (!response.ok || payload.code !== 200) { + const detail = typeof payload.data === "string" ? payload.data.trim() : ""; + throw new ApiError(detail || payload.tip || payload.msg || "请求失败", response.status, payload.code); + } + return payload.data; +} +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/lib/api/config.ts [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "API_BASE_URL", + ()=>API_BASE_URL, + "getServerApiBaseUrl", + ()=>getServerApiBaseUrl, + "pointsAtThisServer", + ()=>pointsAtThisServer +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = /*#__PURE__*/ __turbopack_context__.i("[project]/node_modules/next/dist/build/polyfills/process.js [app-client] (ecmascript)"); +/** + * 浏览器接口根地址。 + * 留空时走同域 `/api/*`,由服务端转到 API_PROXY_TARGET。 + */ const DEFAULT_UPSTREAM = "https://webhgbapi.mfcg.me"; +const raw = ("TURBOPACK compile-time value", ""); +const API_BASE_URL = (("TURBOPACK compile-time truthy", 1) ? raw : "TURBOPACK unreachable").replace(/\/$/, ""); +function pointsAtThisServer(base) { + try { + var _process_env_PORT; + const url = new URL(base); + const loopback = url.hostname === "127.0.0.1" || url.hostname === "localhost" || url.hostname === "::1"; + if (!loopback) return false; + const port = url.port || (url.protocol === "https:" ? "443" : "80"); + const listen = (_process_env_PORT = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].env.PORT) === null || _process_env_PORT === void 0 ? void 0 : _process_env_PORT.trim(); + return !listen || port === listen; + } catch { + return false; + } +} +function getServerApiBaseUrl() { + var _process_env_API_PROXY_TARGET; + const proxy = (_process_env_API_PROXY_TARGET = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$build$2f$polyfills$2f$process$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].env.API_PROXY_TARGET) === null || _process_env_API_PROXY_TARGET === void 0 ? void 0 : _process_env_API_PROXY_TARGET.trim().replace(/\/$/, ""); + const configured = proxy || (("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : raw.trim().replace(/\/$/, "")) || ""; + if (configured && !pointsAtThisServer(configured)) return configured; + return DEFAULT_UPSTREAM; +} +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/lib/api/playlet.ts [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "PLAYLET_GUESS_LIKE_PAGE_SIZE", + ()=>PLAYLET_GUESS_LIKE_PAGE_SIZE, + "PLAYLET_HOME_CONFIG_PAGE_SIZE", + ()=>PLAYLET_HOME_CONFIG_PAGE_SIZE, + "PLAYLET_HOT_RELATED_SIZE", + ()=>PLAYLET_HOT_RELATED_SIZE, + "PLAYLET_LIBRARY_PAGE_SIZE", + ()=>PLAYLET_LIBRARY_PAGE_SIZE, + "PLAYLET_OPERATE_KIND", + ()=>PLAYLET_OPERATE_KIND, + "PLAYLET_OPERATE_PAGE_SIZE", + ()=>PLAYLET_OPERATE_PAGE_SIZE, + "PLAYLET_OPERATE_SORTS", + ()=>PLAYLET_OPERATE_SORTS, + "PLAYLET_RANK_BOARDS", + ()=>PLAYLET_RANK_BOARDS, + "PLAYLET_RANK_PAGE_SIZE", + ()=>PLAYLET_RANK_PAGE_SIZE, + "PLAYLET_RECOMMEND_SIZE", + ()=>PLAYLET_RECOMMEND_SIZE, + "PLAYLET_SEARCH_PAGE_SIZE", + ()=>PLAYLET_SEARCH_PAGE_SIZE, + "PLAYLET_TAG_PAGE_SIZE", + ()=>PLAYLET_TAG_PAGE_SIZE, + "PLAYLET_TOPIC_DETAIL_PAGE_SIZE", + ()=>PLAYLET_TOPIC_DETAIL_PAGE_SIZE, + "PLAYLET_TOPIC_PAGE_SIZE", + ()=>PLAYLET_TOPIC_PAGE_SIZE, + "fetchPlayletChapterDetail", + ()=>fetchPlayletChapterDetail, + "fetchPlayletDetail", + ()=>fetchPlayletDetail, + "fetchPlayletGuessLike", + ()=>fetchPlayletGuessLike, + "fetchPlayletHome", + ()=>fetchPlayletHome, + "fetchPlayletHomeConfigList", + ()=>fetchPlayletHomeConfigList, + "fetchPlayletHotLike", + ()=>fetchPlayletHotLike, + "fetchPlayletHotList", + ()=>fetchPlayletHotList, + "fetchPlayletOperateList", + ()=>fetchPlayletOperateList, + "fetchPlayletRank", + ()=>fetchPlayletRank, + "fetchPlayletSearch", + ()=>fetchPlayletSearch, + "fetchPlayletSearchSuggest", + ()=>fetchPlayletSearchSuggest, + "fetchPlayletTagList", + ()=>fetchPlayletTagList, + "fetchPlayletTopicDetail", + ()=>fetchPlayletTopicDetail, + "fetchPlayletTopicList", + ()=>fetchPlayletTopicList, + "playletDetailKey", + ()=>playletDetailKey, + "playletOperateType", + ()=>playletOperateType, + "playletRankSortOrder", + ()=>playletRankSortOrder, + "playletTagPathKey", + ()=>playletTagPathKey, + "playletTopicDetailKey", + ()=>playletTopicDetailKey, + "playletTopicTotalCount", + ()=>playletTopicTotalCount, + "resolveGuessLikePlayletId", + ()=>resolveGuessLikePlayletId +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$channel$2d$routes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/channel-routes.ts [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/client.ts [app-client] (ecmascript)"); +; +; +const PLAYLET_LIBRARY_PAGE_SIZE = 24; +const PLAYLET_TOPIC_PAGE_SIZE = 12; +const PLAYLET_HOT_RELATED_SIZE = 6; +const PLAYLET_RECOMMEND_SIZE = 12; +const PLAYLET_TOPIC_DETAIL_PAGE_SIZE = 24; +const PLAYLET_RANK_PAGE_SIZE = 25; +const PLAYLET_TAG_PAGE_SIZE = 24; +const PLAYLET_HOME_CONFIG_PAGE_SIZE = 24; +function playletTopicDetailKey(raw) { + const key = raw.trim(); + if (!key) return { + pathKey: "", + topicSlug: undefined, + id: undefined + }; + if (/^\d+$/.test(key)) return { + pathKey: key, + topicSlug: undefined, + id: key + }; + return { + pathKey: key, + topicSlug: key, + id: undefined + }; +} +function playletDetailKey(raw) { + const key = raw.trim(); + if (!key) return { + pathKey: "", + slug: undefined, + id: undefined + }; + if (/^\d+$/.test(key)) return { + pathKey: key, + slug: undefined, + id: key + }; + return { + pathKey: key, + slug: key, + id: undefined + }; +} +const PLAYLET_RANK_BOARDS = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$channel$2d$routes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["RANK_FILTER_LABELS"]; +function playletRankSortOrder(board) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$channel$2d$routes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["rankFilterByLabel"])(board).sortOrder; +} +const PLAYLET_OPERATE_SORTS = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$channel$2d$routes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["OPERATE_FILTER_LABELS"]; +const PLAYLET_OPERATE_KIND = { + shorts: 1, + series: 2 +}; +const PLAYLET_OPERATE_PAGE_SIZE = 24; +function playletOperateType(sort) { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$channel$2d$routes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["operateFilterByLabel"])(sort).type; +} +function fetchPlayletOperateList(params) { + var _params_operateType, _params_type, _params_pageNum, _params_pageSize; + const operateType = (_params_operateType = params.operateType) !== null && _params_operateType !== void 0 ? _params_operateType : PLAYLET_OPERATE_KIND.shorts; + const type = (_params_type = params.type) !== null && _params_type !== void 0 ? _params_type : 1; + const pageNum = (_params_pageNum = params.pageNum) !== null && _params_pageNum !== void 0 ? _params_pageNum : 1; + const pageSize = (_params_pageSize = params.pageSize) !== null && _params_pageSize !== void 0 ? _params_pageSize : PLAYLET_OPERATE_PAGE_SIZE; + const query = new URLSearchParams({ + operateType: String(operateType), + type: String(type), + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/operate/list?${query}`, { + method: "GET" + }); +} +function fetchPlayletTopicList(params) { + var _params_pageNum, _params_pageSize; + const pageNum = (_params_pageNum = params.pageNum) !== null && _params_pageNum !== void 0 ? _params_pageNum : 1; + const pageSize = (_params_pageSize = params.pageSize) !== null && _params_pageSize !== void 0 ? _params_pageSize : PLAYLET_TOPIC_PAGE_SIZE; + const query = new URLSearchParams({ + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/topic/list?${query}`, { + method: "GET" + }); +} +function fetchPlayletHotList(params) { + var _params_pageNum, _params_pageSize; + const pageNum = (_params_pageNum = params.pageNum) !== null && _params_pageNum !== void 0 ? _params_pageNum : 1; + const pageSize = (_params_pageSize = params.pageSize) !== null && _params_pageSize !== void 0 ? _params_pageSize : PLAYLET_HOT_RELATED_SIZE; + const query = new URLSearchParams({ + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + if (params.excludePlayletId != null && String(params.excludePlayletId).trim()) { + query.set("excludePlayletId", String(params.excludePlayletId).trim()); + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/hot/list?${query}`, { + method: "GET" + }); +} +function fetchPlayletDetail(params) { + const { pathKey, slug, id } = playletDetailKey(params.key); + if (!pathKey) return Promise.reject(new Error("缺少短剧 id 或 slug")); + const query = new URLSearchParams(); + if (slug) query.set("slug", slug); + else if (id) query.set("id", id); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/detail?${query}`, { + method: "GET" + }); +} +function fetchPlayletChapterDetail(params) { + var _params_playletSlug; + const chapterId = String(params.chapterId).trim(); + if (!chapterId) return Promise.reject(new Error("缺少剧集 chapterId")); + const query = new URLSearchParams({ + chapterId + }); + const playletSlug = (_params_playletSlug = params.playletSlug) === null || _params_playletSlug === void 0 ? void 0 : _params_playletSlug.trim(); + if (playletSlug) query.set("playletSlug", playletSlug); + else if (params.playletId != null && String(params.playletId).trim()) { + query.set("playletId", String(params.playletId).trim()); + } + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["apiRequest"])(`/h5/chapter-detail?${query}`, { + method: "GET" + }); +} +function fetchPlayletTopicDetail(params) { + var _params_pageNum, _params_pageSize; + const { pathKey, topicSlug, id } = playletTopicDetailKey(params.key); + if (!pathKey) return Promise.reject(new Error("缺少专题 id 或 slug")); + const pageNum = (_params_pageNum = params.pageNum) !== null && _params_pageNum !== void 0 ? _params_pageNum : 1; + const pageSize = (_params_pageSize = params.pageSize) !== null && _params_pageSize !== void 0 ? _params_pageSize : PLAYLET_TOPIC_DETAIL_PAGE_SIZE; + const sortType = params.sortType === 2 || params.sortType === 3 ? params.sortType : 1; + const query = new URLSearchParams({ + dataType: "1", + pageNum: String(pageNum), + pageSize: String(pageSize), + sortType: String(sortType) + }); + if (topicSlug) query.set("topicSlug", topicSlug); + else if (id) query.set("id", id); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/topic/detail?${query}`, { + method: "GET" + }); +} +function playletTopicTotalCount(groups) { + if (!(groups === null || groups === void 0 ? void 0 : groups.length)) return 0; + return groups.reduce((max, group)=>Math.max(max, group.totalCount || 0), 0); +} +function fetchPlayletRank(params) { + var _params_sortOrder, _params_pageNum, _params_pageSize; + const sortOrder = (_params_sortOrder = params.sortOrder) !== null && _params_sortOrder !== void 0 ? _params_sortOrder : 1; + const pageNum = (_params_pageNum = params.pageNum) !== null && _params_pageNum !== void 0 ? _params_pageNum : 1; + const pageSize = (_params_pageSize = params.pageSize) !== null && _params_pageSize !== void 0 ? _params_pageSize : PLAYLET_RANK_PAGE_SIZE; + const query = new URLSearchParams({ + sortOrder: String(sortOrder), + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/rank?${query}`, { + method: "GET" + }); +} +function playletTagPathKey(raw) { + const key = raw.trim(); + if (!key) return { + pathKey: "", + slug: undefined, + id: undefined + }; + if (/^\d+$/.test(key)) return { + pathKey: key, + slug: undefined, + id: key + }; + return { + pathKey: key, + slug: key, + id: undefined + }; +} +function fetchPlayletTagList(params) { + var _params_pageNum, _params_pageSize; + const { pathKey, slug, id } = playletTagPathKey(params.key); + if (!pathKey) return Promise.reject(new Error("缺少标签 id 或 slug")); + const pageNum = (_params_pageNum = params.pageNum) !== null && _params_pageNum !== void 0 ? _params_pageNum : 1; + const pageSize = (_params_pageSize = params.pageSize) !== null && _params_pageSize !== void 0 ? _params_pageSize : PLAYLET_TAG_PAGE_SIZE; + const query = new URLSearchParams({ + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + if (params.sortType) query.set("sortType", String(params.sortType)); + if (slug) query.set("tagSlug", slug); + else if (id) query.set("tagId", id); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/tag/list?${query}`, { + method: "GET" + }); +} +function fetchPlayletHome() { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["apiRequest"])("/api/app/playlet/home", { + method: "GET" + }); +} +function fetchPlayletHomeConfigList(params) { + var _params_pageNum, _params_pageSize; + const { pathKey, slug, id } = playletDetailKey(params.key); + if (!pathKey) return Promise.reject(new Error("缺少首页模块 id 或 slug")); + const pageNum = (_params_pageNum = params.pageNum) !== null && _params_pageNum !== void 0 ? _params_pageNum : 1; + const pageSize = (_params_pageSize = params.pageSize) !== null && _params_pageSize !== void 0 ? _params_pageSize : PLAYLET_HOME_CONFIG_PAGE_SIZE; + const query = new URLSearchParams({ + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + if (slug) query.set("slug", slug); + else if (id) query.set("id", id); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/home-config/list?${query}`, { + method: "GET" + }); +} +const PLAYLET_SEARCH_PAGE_SIZE = 24; +function fetchPlayletSearch(params) { + var _params_pageNum, _params_pageSize; + const keyword = params.keyword.trim().slice(0, 100); + if (!keyword) return Promise.reject(new Error("缺少搜索关键词")); + const pageNum = (_params_pageNum = params.pageNum) !== null && _params_pageNum !== void 0 ? _params_pageNum : 1; + const pageSize = (_params_pageSize = params.pageSize) !== null && _params_pageSize !== void 0 ? _params_pageSize : PLAYLET_SEARCH_PAGE_SIZE; + const query = new URLSearchParams({ + keyword, + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/search?${query}`, { + method: "GET" + }); +} +function fetchPlayletSearchSuggest(keyword) { + const value = keyword.trim().slice(0, 100); + if (!value) return Promise.reject(new Error("缺少搜索关键词")); + const query = new URLSearchParams({ + keyword: value + }); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/search/suggest?${query}`, { + method: "GET" + }); +} +function fetchPlayletHotLike() { + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["apiRequest"])("/api/app/playlet/hot-like", { + method: "GET" + }); +} +const PLAYLET_GUESS_LIKE_PAGE_SIZE = 3; +let seedPlayletId = null; +let seedPlayletPromise = null; +/** 不在短剧页时,用首页 banner 的短剧作为猜你喜欢的当前剧。 */ function loadSeedPlayletId() { + if (seedPlayletId) return Promise.resolve(seedPlayletId); + if (!seedPlayletPromise) { + seedPlayletPromise = fetchPlayletHome().then((data)=>{ + var _data_homeBannerData_find, _data_homeBannerData, _data_modules_flatMap_find, _data_modules; + const seeded = ((_data_homeBannerData = data.homeBannerData) === null || _data_homeBannerData === void 0 ? void 0 : (_data_homeBannerData_find = _data_homeBannerData.find((item)=>item === null || item === void 0 ? void 0 : item.id)) === null || _data_homeBannerData_find === void 0 ? void 0 : _data_homeBannerData_find.id) || ((_data_modules = data.modules) === null || _data_modules === void 0 ? void 0 : (_data_modules_flatMap_find = _data_modules.flatMap((item)=>item.list || []).find((item)=>item === null || item === void 0 ? void 0 : item.id)) === null || _data_modules_flatMap_find === void 0 ? void 0 : _data_modules_flatMap_find.id) || null; + seedPlayletId = seeded; + return seeded; + }).catch(()=>{ + seedPlayletPromise = null; + return null; + }); + } + return seedPlayletPromise; +} +async function resolveGuessLikePlayletId(routeKey) { + const key = routeKey.trim(); + if (/^\d+$/.test(key)) return Number(key); + if (key) { + const detail = await fetchPlayletDetail({ + key + }); + return detail.id || null; + } + return loadSeedPlayletId(); +} +function fetchPlayletGuessLike(params) { + var _params_pageNum, _params_pageSize; + if (!params.playletId) return Promise.reject(new Error("缺少短剧 id")); + const pageNum = (_params_pageNum = params.pageNum) !== null && _params_pageNum !== void 0 ? _params_pageNum : 1; + const pageSize = (_params_pageSize = params.pageSize) !== null && _params_pageSize !== void 0 ? _params_pageSize : PLAYLET_GUESS_LIKE_PAGE_SIZE; + const query = new URLSearchParams({ + playletId: String(params.playletId), + pageNum: String(pageNum), + pageSize: String(pageSize) + }); + return (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["apiRequest"])(`/api/app/playlet/guess-like/list?${query}`, { + method: "GET" + }); +} +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/lib/api/sdk-common.ts [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** 服务端 X-SDK-Common:UTF-8 JSON 的标准 Base64。只放 SDK 会解析的字段。 */ __turbopack_context__.s([ + "encodeSdkCommon", + ()=>encodeSdkCommon +]); +function encodeSdkCommon(fields) { + const payload = { + sid: fields.sid || "", + device_id: fields.device_id || "", + device: fields.device || "", + device_fingerprint: fields.device_fingerprint || "", + fp_version: fields.fp_version || "", + app_version: fields.app_version || "" + }; + const bytes = new TextEncoder().encode(JSON.stringify(payload)); + let binary = ""; + for (const byte of bytes)binary += String.fromCharCode(byte); + return btoa(binary); +} +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/lib/api/sdk-headers.ts [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "browserTrackingHeaders", + ()=>browserTrackingHeaders +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2d$headers$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/client-headers.ts [app-client] (ecmascript)"); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$sdk$2d$common$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/api/sdk-common.ts [app-client] (ecmascript)"); +; +; +async function browserTrackingHeaders() { + let devID = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : ""; + return { + ...(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$client$2d$headers$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["buildBrowserApiHeaders"])(devID, ""), + "X-SDK-Common": (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$api$2f$sdk$2d$common$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["encodeSdkCommon"])({ + sid: "", + device_id: devID, + app_version: "1.0.0" + }) + }; +} +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/lib/channel-routes.ts [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +/** 频道列表路径:英文 slug + /page/{n},不用 query。 */ __turbopack_context__.s([ + "DEFAULT_OPERATE_FILTER", + ()=>DEFAULT_OPERATE_FILTER, + "DEFAULT_RANK_FILTER", + ()=>DEFAULT_RANK_FILTER, + "OPERATE_FILTERS", + ()=>OPERATE_FILTERS, + "OPERATE_FILTER_LABELS", + ()=>OPERATE_FILTER_LABELS, + "RANK_FILTERS", + ()=>RANK_FILTERS, + "RANK_FILTER_LABELS", + ()=>RANK_FILTER_LABELS, + "SHORTS_RESERVED_FILTERS", + ()=>SHORTS_RESERVED_FILTERS, + "operateFilterByLabel", + ()=>operateFilterByLabel, + "operateFilterBySlug", + ()=>operateFilterBySlug, + "operateListPath", + ()=>operateListPath, + "parseChannelPage", + ()=>parseChannelPage, + "parseDetailPageSegments", + ()=>parseDetailPageSegments, + "parseOperatePathSegments", + ()=>parseOperatePathSegments, + "parseRankPathSegments", + ()=>parseRankPathSegments, + "parseTopicsPathSegments", + ()=>parseTopicsPathSegments, + "rankFilterByLabel", + ()=>rankFilterByLabel, + "rankFilterBySlug", + ()=>rankFilterBySlug, + "rankListPath", + ()=>rankListPath, + "shortsMorePath", + ()=>shortsMorePath, + "topicDetailPath", + ()=>topicDetailPath, + "topicTagPath", + ()=>topicTagPath, + "topicsListPath", + ()=>topicsListPath +]); +const OPERATE_FILTERS = [ + { + slug: "latest", + label: "最新更新", + type: 1 + }, + { + slug: "popular", + label: "当前热播", + type: 2 + }, + { + slug: "original", + label: "独家原创", + type: 3 + }, + { + slug: "random", + label: "随机推荐", + type: 4 + } +]; +const OPERATE_FILTER_LABELS = OPERATE_FILTERS.map(_c = (item)=>item.label); +_c1 = OPERATE_FILTER_LABELS; +const RANK_FILTERS = [ + { + slug: "hot", + label: "热播榜", + sortOrder: 1 + }, + { + slug: "new", + label: "新剧榜", + sortOrder: 2 + }, + { + slug: "binge", + label: "追剧榜", + sortOrder: 3 + } +]; +const RANK_FILTER_LABELS = RANK_FILTERS.map(_c2 = (item)=>item.label); +_c3 = RANK_FILTER_LABELS; +const DEFAULT_OPERATE_FILTER = "latest"; +const DEFAULT_RANK_FILTER = "hot"; +const SHORTS_RESERVED_FILTERS = new Set([ + "more", + "page" +]); +function parseChannelPage(raw) { + const page = Number(raw); + if (!Number.isFinite(page) || page < 1) return 0; + return Math.floor(page); +} +function parseOperatePathSegments(segments) { + const parts = segments !== null && segments !== void 0 ? segments : []; + if (parts.length === 0) { + return { + filterSlug: DEFAULT_OPERATE_FILTER, + pageNum: 1, + canonical: true + }; + } + if (parts.length === 2 && parts[0] === "page") { + const pageNum = parseChannelPage(parts[1]); + if (!pageNum) return null; + return { + filterSlug: DEFAULT_OPERATE_FILTER, + pageNum, + canonical: pageNum > 1 + }; + } + const filter = operateFilterBySlug(parts[0]); + if (!filter) return null; + if (parts.length === 1) { + return { + filterSlug: filter.slug, + pageNum: 1, + canonical: filter.slug !== DEFAULT_OPERATE_FILTER + }; + } + if (parts.length === 3 && parts[1] === "page") { + const pageNum = parseChannelPage(parts[2]); + if (!pageNum) return null; + return { + filterSlug: filter.slug, + pageNum, + canonical: filter.slug !== DEFAULT_OPERATE_FILTER && pageNum > 1 + }; + } + return null; +} +function parseRankPathSegments(segments) { + const parts = segments !== null && segments !== void 0 ? segments : []; + if (parts.length === 0) { + return { + filterSlug: DEFAULT_RANK_FILTER, + pageNum: 1, + canonical: true + }; + } + if (parts.length === 2 && parts[0] === "page") { + const pageNum = parseChannelPage(parts[1]); + if (!pageNum) return null; + return { + filterSlug: DEFAULT_RANK_FILTER, + pageNum, + canonical: pageNum > 1 + }; + } + const filter = rankFilterBySlug(parts[0]); + if (!filter) return null; + if (parts.length === 1) { + return { + filterSlug: filter.slug, + pageNum: 1, + canonical: filter.slug !== DEFAULT_RANK_FILTER + }; + } + if (parts.length === 3 && parts[1] === "page") { + const pageNum = parseChannelPage(parts[2]); + if (!pageNum) return null; + return { + filterSlug: filter.slug, + pageNum, + canonical: filter.slug !== DEFAULT_RANK_FILTER && pageNum > 1 + }; + } + return null; +} +function parseTopicsPathSegments(segments) { + const parts = segments !== null && segments !== void 0 ? segments : []; + if (parts.length === 0) return { + kind: "list", + pageNum: 1 + }; + if (parts[0] === "tag") return null; + if (parts.length === 2 && parts[0] === "page") { + const pageNum = parseChannelPage(parts[1]); + if (!pageNum) return null; + return { + kind: "list", + pageNum + }; + } + if (parts[0] === "page") return null; + if (parts.length === 1) return { + kind: "detail", + slug: parts[0], + pageNum: 1 + }; + if (parts.length === 3 && parts[1] === "page") { + const pageNum = parseChannelPage(parts[2]); + if (!pageNum) return null; + return { + kind: "detail", + slug: parts[0], + pageNum + }; + } + return null; +} +function parseDetailPageSegments(segments) { + const parts = segments !== null && segments !== void 0 ? segments : []; + if (parts.length === 0) return { + pageNum: 1, + canonical: true + }; + if (parts.length === 2 && parts[0] === "page") { + const pageNum = parseChannelPage(parts[1]); + if (!pageNum) return null; + return { + pageNum, + canonical: pageNum > 1 + }; + } + return null; +} +function operateFilterBySlug(slug) { + var _OPERATE_FILTERS_find; + const key = (slug || DEFAULT_OPERATE_FILTER).trim(); + return (_OPERATE_FILTERS_find = OPERATE_FILTERS.find((item)=>item.slug === key)) !== null && _OPERATE_FILTERS_find !== void 0 ? _OPERATE_FILTERS_find : null; +} +function operateFilterByLabel(label) { + var _OPERATE_FILTERS_find; + return (_OPERATE_FILTERS_find = OPERATE_FILTERS.find((item)=>item.label === label)) !== null && _OPERATE_FILTERS_find !== void 0 ? _OPERATE_FILTERS_find : OPERATE_FILTERS[0]; +} +function rankFilterBySlug(slug) { + var _RANK_FILTERS_find; + const key = (slug || DEFAULT_RANK_FILTER).trim(); + return (_RANK_FILTERS_find = RANK_FILTERS.find((item)=>item.slug === key)) !== null && _RANK_FILTERS_find !== void 0 ? _RANK_FILTERS_find : null; +} +function rankFilterByLabel(label) { + var _RANK_FILTERS_find; + return (_RANK_FILTERS_find = RANK_FILTERS.find((item)=>item.label === label)) !== null && _RANK_FILTERS_find !== void 0 ? _RANK_FILTERS_find : RANK_FILTERS[0]; +} +function operateListPath(base, filterSlug) { + let page = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 1; + var _operateFilterBySlug; + const filter = (_operateFilterBySlug = operateFilterBySlug(filterSlug)) !== null && _operateFilterBySlug !== void 0 ? _operateFilterBySlug : OPERATE_FILTERS[0]; + const parts = [ + base + ]; + if (filter.slug !== DEFAULT_OPERATE_FILTER) parts.push(filter.slug); + if (page > 1) parts.push("page", String(page)); + return `/${parts.join("/")}`; +} +function rankListPath(filterSlug) { + let page = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 1; + var _rankFilterBySlug; + const filter = (_rankFilterBySlug = rankFilterBySlug(filterSlug)) !== null && _rankFilterBySlug !== void 0 ? _rankFilterBySlug : RANK_FILTERS[0]; + const parts = [ + "rank" + ]; + if (filter.slug !== DEFAULT_RANK_FILTER) parts.push(filter.slug); + if (page > 1) parts.push("page", String(page)); + return `/${parts.join("/")}`; +} +function topicsListPath() { + let page = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 1; + return page > 1 ? `/topics/page/${page}` : "/topics"; +} +function shortsMorePath(slug) { + let page = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 1; + const base = `/shorts/more/${slug}`; + return page > 1 ? `${base}/page/${page}` : base; +} +function topicDetailPath(slug) { + let page = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 1; + const base = `/topics/${slug}`; + return page > 1 ? `${base}/page/${page}` : base; +} +function topicTagPath(tag) { + let page = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 1; + const segment = encodeURIComponent(tag); + const base = `/topics/tag/${segment}`; + return page > 1 ? `${base}/page/${page}` : base; +} +var _c, _c1, _c2, _c3; +__turbopack_context__.k.register(_c, "OPERATE_FILTER_LABELS$OPERATE_FILTERS.map"); +__turbopack_context__.k.register(_c1, "OPERATE_FILTER_LABELS"); +__turbopack_context__.k.register(_c2, "RANK_FILTER_LABELS$RANK_FILTERS.map"); +__turbopack_context__.k.register(_c3, "RANK_FILTER_LABELS"); +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/lib/device-id.ts [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "getDeviceId", + ()=>getDeviceId +]); +const DEVICE_KEY = "guest_dev_id"; +function createDeviceId() { + var _globalThis_crypto; + const chars = "0123456789ABCDEF"; + let id = ""; + const bytes = (_globalThis_crypto = globalThis.crypto) === null || _globalThis_crypto === void 0 ? void 0 : _globalThis_crypto.getRandomValues(new Uint8Array(16)); + if (bytes) { + for (const byte of bytes)id += chars[byte % chars.length]; + return id; + } + for(let i = 0; i < 16; i += 1)id += chars[Math.floor(Math.random() * chars.length)]; + return id; +} +function getDeviceId() { + var _localStorage_getItem; + if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable + ; + const existing = (_localStorage_getItem = localStorage.getItem(DEVICE_KEY)) === null || _localStorage_getItem === void 0 ? void 0 : _localStorage_getItem.trim(); + if (existing) return existing; + const next = createDeviceId(); + localStorage.setItem(DEVICE_KEY, next); + return next; +} +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/lib/image/decrypt.ts [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "CARD_PLACEHOLDER", + ()=>CARD_PLACEHOLDER, + "IMG_PLACEHOLDER", + ()=>IMG_PLACEHOLDER, + "fetchDecryptImage", + ()=>fetchDecryptImage, + "imgDecrypt", + ()=>imgDecrypt, + "resolveImageSrc", + ()=>resolveImageSrc, + "shouldDecryptImage", + ()=>shouldDecryptImage +]); +const XOR_KEY = new TextEncoder().encode("2019ysapp7527"); +const IMG_PLACEHOLDER = "/placeholder.png"; +const CARD_PLACEHOLDER = "/placeholder.png"; +const decryptedURLCache = new Map(); +const decryptInflight = new Map(); +function shouldDecryptImage(url) { + if (!url) return false; + const value = url.trim(); + if (!value || value.startsWith("data:") || value.startsWith("blob:")) return false; + if (value.startsWith("/images/") || value.startsWith("/logo")) return false; + return /^https?:\/\//i.test(value); +} +function imgDecrypt(buffer) { + const bytes = new Uint8Array(buffer.slice(0)); + for(let i = 0; i < Math.min(100, bytes.length); i += 1){ + bytes[i] ^= XOR_KEY[i % XOR_KEY.length]; + } + let mime = "image/jpeg"; + if (bytes[0] === 0x89 && bytes[1] === 0x50 && bytes[2] === 0x4e && bytes[3] === 0x47) mime = "image/png"; + else if (bytes[0] === 0x47 && bytes[1] === 0x49 && bytes[2] === 0x46) mime = "image/gif"; + return URL.createObjectURL(new Blob([ + bytes + ], { + type: mime + })); +} +function fetchDecryptImage(url) { + const cached = decryptedURLCache.get(url); + if (cached) return Promise.resolve(cached); + const inflight = decryptInflight.get(url); + if (inflight) return inflight; + const task = fetch(url).then(async (response)=>{ + if (!response.ok) throw new Error(String(response.status)); + const blobUrl = imgDecrypt(await response.arrayBuffer()); + decryptedURLCache.set(url, blobUrl); + return blobUrl; + }).finally(()=>{ + decryptInflight.delete(url); + }); + decryptInflight.set(url, task); + return task; +} +async function resolveImageSrc(url) { + let fallback = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : IMG_PLACEHOLDER; + if (!url) return fallback; + if (!shouldDecryptImage(url)) return url; + try { + return await fetchDecryptImage(url); + } catch { + return fallback; + } +} +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/lib/playlet-display.ts [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "formatHeatValue", + ()=>formatHeatValue, + "playletCoverBadge", + ()=>playletCoverBadge, + "playletHref", + ()=>playletHref, + "playletPlayBase", + ()=>playletPlayBase, + "playletPlayHref", + ()=>playletPlayHref, + "playletTagHref", + ()=>playletTagHref, + "playletTagLinks", + ()=>playletTagLinks, + "resolvePlayletEpisodeLabelTotal", + ()=>resolvePlayletEpisodeLabelTotal, + "resolvePlayletEpisodeTotal", + ()=>resolvePlayletEpisodeTotal +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$channel$2d$routes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/channel-routes.ts [app-client] (ecmascript)"); +; +function playletKey(item) { + var _item_slug; + return encodeURIComponent(((_item_slug = item.slug) === null || _item_slug === void 0 ? void 0 : _item_slug.trim()) || String(item.id)); +} +function playletHref(item) { + return `/drama/${playletKey(item)}`; +} +function playletPlayBase(item) { + return `/play/${playletKey(item)}`; +} +function playletPlayHref(item, episode) { + return `${playletPlayBase(item)}/${episode}`; +} +function playletTagLinks(item) { + let limit = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 2; + const useTags = (item.tagNames || []).some(Boolean); + const names = (useTags ? item.tagNames : item.themeNames) || []; + const slugs = (useTags ? item.tagSlugs : item.themeSlugs) || []; + const ids = (useTags ? item.tagIds : item.themeIds) || []; + const kind = useTags ? "tag" : "theme"; + const links = []; + for(let i = 0; i < names.length && links.length < limit; i += 1){ + var _names_i, _slugs_i; + const label = (_names_i = names[i]) === null || _names_i === void 0 ? void 0 : _names_i.trim(); + if (!label) continue; + const slug = (_slugs_i = slugs[i]) === null || _slugs_i === void 0 ? void 0 : _slugs_i.trim(); + const id = ids[i]; + const key = slug || (id != null && id !== 0 ? String(id) : ""); + if (!key) continue; + links.push({ + label, + key, + kind + }); + } + return links; +} +function playletTagHref(tag) { + return tag.kind === "theme" ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$channel$2d$routes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["topicDetailPath"])(tag.key) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$channel$2d$routes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["topicTagPath"])(tag.key); +} +function resolvePlayletEpisodeTotal(detail) { + const chapters = detail.playletChapterInfo || []; + let maxEp = 0; + for (const chapter of chapters){ + const ep = Number(chapter.currentEpisode) || 0; + if (ep > maxEp) maxEp = ep; + } + if (maxEp > 0) return maxEp; + return Math.max(1, Number(detail.totalEpisode) || 0, chapters.length || 0, 1); +} +function resolvePlayletEpisodeLabelTotal(detail) { + const advertised = Number(detail.totalEpisode) || 0; + if (advertised > 0) return advertised; + return resolvePlayletEpisodeTotal(detail); +} +function formatHeatValue(value) { + if (value == null || Number.isNaN(value)) return "0"; + if (value >= 10_000) { + const wan = value / 10_000; + return `${wan >= 10 ? wan.toFixed(0) : wan.toFixed(1).replace(/\.0$/, "")}万`; + } + return value.toLocaleString("zh-CN"); +} +function playletCoverBadge(item) { + if (item.isRecommend) return { + kind: "free", + label: "原创" + }; + if (item.isFeatured) return { + kind: "hot", + label: "爆剧" + }; + if (item.isNew) return { + kind: "new", + label: "新剧" + }; + return null; +} +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/lib/playlet/card.ts [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "playletToDrama", + ()=>playletToDrama, + "themeCardCover", + ()=>themeCardCover, + "topicThemeToCollection", + ()=>topicThemeToCollection, + "topicToCollection", + ()=>topicToCollection +]); +var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/playlet-display.ts [app-client] (ecmascript)"); +; +function playletToDrama(item) { + var _ref; + var _chapters_find, _chapters_, _item_slug, _item_themeNames, _item_tagNames; + const badge = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["playletCoverBadge"])(item); + const tagLinks = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["playletTagLinks"])(item, 4); + const chapters = item.playletChapterInfo; + const firstEpisode = (chapters === null || chapters === void 0 ? void 0 : (_chapters_find = chapters.find((chapter)=>chapter.canWatch)) === null || _chapters_find === void 0 ? void 0 : _chapters_find.currentEpisode) || (chapters === null || chapters === void 0 ? void 0 : (_chapters_ = chapters[0]) === null || _chapters_ === void 0 ? void 0 : _chapters_.currentEpisode) || 1; + return { + id: item.id, + routeKey: ((_item_slug = item.slug) === null || _item_slug === void 0 ? void 0 : _item_slug.trim()) || String(item.id), + title: item.title || item.playName || "未命名", + genre: ((_item_themeNames = item.themeNames) === null || _item_themeNames === void 0 ? void 0 : _item_themeNames.find(Boolean)) || ((_item_tagNames = item.tagNames) === null || _item_tagNames === void 0 ? void 0 : _item_tagNames.find(Boolean)) || "", + heat: "", + heatText: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["formatHeatValue"])(item.heatValue), + eps: item.totalEpisode || 0, + mode: "免费", + desc: item.desc || item.description || "", + badge: (_ref = badge === null || badge === void 0 ? void 0 : badge.label) !== null && _ref !== void 0 ? _ref : "", + badgeType: (badge === null || badge === void 0 ? void 0 : badge.kind) || "", + tags: tagLinks.map((tag)=>tag.label), + tagLinks, + likes: item.countLike || 0, + likeText: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["formatHeatValue"])(item.countLike), + favorites: item.countCollect || 0, + favoriteText: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$playlet$2d$display$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["formatHeatValue"])(item.countCollect), + sample: false, + coverUrl: item.cover || item.horizontalCover || item.banner || "", + firstEpisode, + finished: item.updateStatus === 2, + isLike: item.isLike === 1, + isCollect: item.isCollect === 1 + }; +} +function firstImage(values) { + var _values_find; + return ((_values_find = values.find((value)=>value === null || value === void 0 ? void 0 : value.trim())) === null || _values_find === void 0 ? void 0 : _values_find.trim()) || ""; +} +function themeCardCover(list) { + for (const item of list || []){ + const src = firstImage([ + item === null || item === void 0 ? void 0 : item.horizontalCover, + item === null || item === void 0 ? void 0 : item.cover, + item === null || item === void 0 ? void 0 : item.banner + ]); + if (src) return src; + } + return ""; +} +function topicToCollection(item) { + var _item_icon, _item_slug; + const iconUrl = ((_item_icon = item.icon) === null || _item_icon === void 0 ? void 0 : _item_icon.trim()) || ""; + const photo = firstImage([ + ...item.covers || [], + item.cover + ]); + return { + key: ((_item_slug = item.slug) === null || _item_slug === void 0 ? void 0 : _item_slug.trim()) || String(item.id), + title: item.name || "专题", + subtitle: item.desc || "", + ids: [], + coverId: 0, + coverUrl: iconUrl || photo, + iconUrl: "", + count: item.playletCount || 0 + }; +} +function topicThemeToCollection(item) { + return topicToCollection({ + id: item.id, + name: item.name, + desc: "", + slug: item.slug, + icon: item.icon, + covers: [], + cover: themeCardCover(item.list), + playletCount: item.playletCount + }); +} +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/lib/site/routes.ts [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "infoNav", + ()=>infoNav, + "isHeaderNavActive", + ()=>isHeaderNavActive, + "isPrimaryNavActive", + ()=>isPrimaryNavActive, + "primaryNav", + ()=>primaryNav, + "routes", + ()=>routes +]); +const routes = { + home: "/", + shorts: "/shorts", + series: "/series", + topics: "/topics", + rank: "/rank", + homeRoad: "/home-road", + nav: "/nav", + search: "/search", + searchPath: function(term) { + let page = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 1; + const q = term.trim(); + if (!q) return "/search"; + const base = `/search/${encodeURIComponent(q)}`; + return page > 1 ? `${base}/${page}` : base; + }, + more: (key)=>`/shorts/more/${key}`, + topic: (key)=>`/topics/${key}`, + drama: (id)=>`/drama/${encodeURIComponent(String(id))}`, + play: function(id) { + let episode = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 1; + return `/play/${encodeURIComponent(String(id))}/${episode}`; + }, + info: (slug)=>`/info/${slug}` +}; +const primaryNav = [ + { + page: "home", + href: routes.home, + label: "首页" + }, + { + page: "shorts", + href: routes.shorts, + label: "短剧" + }, + { + page: "series", + href: routes.series, + label: "剧集" + }, + { + page: "topics", + href: routes.topics, + label: "专题" + }, + { + page: "rank", + href: routes.rank, + label: "热榜" + }, + { + page: "home-road", + href: routes.homeRoad, + label: "回家的路" + } +]; +const infoNav = [ + { + slug: "about-us", + label: "关于我们" + }, + { + slug: "user-agreement", + label: "用户协议" + }, + { + slug: "privacy-policy", + label: "隐私政策" + }, + { + slug: "help-center", + label: "常见问题" + }, + { + slug: "2257", + label: "2257" + }, + { + slug: "dmca", + label: "DMCA" + } +]; +function isPrimaryNavActive(page, pathname) { + if (pathname.startsWith("/info")) return false; + if (page === "home") return pathname === "/"; + if (page === "shorts") { + if (pathname.startsWith("/shorts/more/")) return false; + return pathname === "/shorts" || pathname.startsWith("/shorts/"); + } + if (page === "series") return pathname === "/series" || pathname.startsWith("/series/"); + if (page === "rank") return pathname === "/rank" || pathname.startsWith("/rank/"); + if (page === "home-road") return pathname === "/home-road"; + if (page === "topics") return pathname === "/topics" || pathname.startsWith("/topics/"); + return false; +} +function isHeaderNavActive(page, pathname) { + if (pathname.startsWith("/info")) return false; + if (page === "home") return pathname === "/"; + if (page === "shorts") { + if (pathname.startsWith("/shorts/more/")) return false; + return pathname === "/shorts" || pathname.startsWith("/shorts/") || pathname.startsWith("/drama/") || pathname.startsWith("/play/") || pathname === "/search" || pathname.startsWith("/search/"); + } + if (page === "series") return pathname === "/series" || pathname.startsWith("/series/"); + if (page === "rank") return pathname === "/rank" || pathname.startsWith("/rank/"); + if (page === "home-road") return pathname === "/home-road"; + if (page === "topics") return pathname === "/topics" || pathname.startsWith("/topics/"); + return false; +} +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +"[project]/src/lib/translation-nav.ts [app-client] (ecmascript)", ((__turbopack_context__) => { +"use strict"; + +__turbopack_context__.s([ + "isExternalHref", + ()=>isExternalHref, + "isTranslationCurrent", + ()=>isTranslationCurrent, + "navPageForHref", + ()=>navPageForHref, + "translationHref", + ()=>translationHref, + "usableTranslationCategories", + ()=>usableTranslationCategories +]); +const NAV_PAGE_BY_HREF = { + "/": "home", + "/shorts": "shorts", + "/series": "series", + "/topics": "topics", + "/rank": "rank", + "/home-road": "home-road" +}; +function navPageForHref(href) { + return NAV_PAGE_BY_HREF[href]; +} +function translationHref(urlValue) { + const raw = (urlValue || "").trim(); + if (!raw || raw === "/") return "/"; + return raw; +} +function isExternalHref(href) { + return /^https?:\/\//i.test(href); +} +function isTranslationCurrent(pathname, urlValue) { + const href = translationHref(urlValue); + if (pathname.startsWith("/shorts/more") || pathname.startsWith("/topics/tag") || pathname.startsWith("/drama") || pathname.startsWith("/play") || pathname.startsWith("/short-drama") || pathname.startsWith("/info") || pathname.startsWith("/search")) { + return false; + } + if (href === "/") return pathname === "/"; + return pathname === href || pathname.startsWith(`${href}/`); +} +/** 已下线的站内页面,接口仍返回时不在导航里展示。 */ const REMOVED_HREFS = new Set([ + "/apps" +]); +function usableTranslationCategories(list) { + return (list || []).filter((item)=>{ + var _item_name; + return (item === null || item === void 0 ? void 0 : (_item_name = item.name) === null || _item_name === void 0 ? void 0 : _item_name.trim()) && !REMOVED_HREFS.has(translationHref(item.urlValue)); + }); +} +if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { + __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); +} +}), +]);})() + +//# sourceMappingURL=src_03nh1ny_1upyk._.js.map \ No newline at end of file diff --git a/.next-dev/dev/static/chunks/src_03nh1ny_1upyk._.js.map b/.next-dev/dev/static/chunks/src_03nh1ny_1upyk._.js.map new file mode 100644 index 0000000..d1f6883 --- /dev/null +++ b/.next-dev/dev/static/chunks/src_03nh1ny_1upyk._.js.map @@ -0,0 +1,36 @@ +{ + "version": 3, + "sources": [], + "sections": [ + {"offset": {"line": 4, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/common/ListLoading.tsx"],"sourcesContent":["\"use client\";\n\nimport { Spinner } from \"@heroui/react\";\n\n/** 列表数据请求中的 HeroUI Spinner。page 占内容区,block 占列表容器,inline 用于局部列表。 */\nexport function ListLoading({\n label = \"正在加载\",\n variant = \"page\",\n}: {\n label?: string;\n variant?: \"page\" | \"block\" | \"inline\";\n}) {\n const size = variant === \"inline\" ? \"sm\" : variant === \"block\" ? \"lg\" : \"xl\";\n const body = (\n
\n \n {variant === \"inline\" ? {label} :

{label}

}\n
\n );\n if (variant === \"page\") {\n return
{body}
;\n }\n return body;\n}\n"],"names":["ListLoading","param","label","variant","size","body","className","color"],"mappings":";;;;;AAEA;AAFA;;;AAKO,SAASA,YAAYC,KAM3B;QAN2BA,EAC1BC,QAAQ,MAAM,EACdC,UAAU,MAAM,EAIjB,GAN2BF;IAO1B,MAAMG,OAAOD,YAAY,WAAW,OAAOA,YAAY,UAAU,OAAO;IACxE,MAAME,qBACJ,6LAAC;QAAIC,WAAW,CAAC,2BAA2B,EAAEH,SAAS;;0BACrD,6LAAC,yMAAO;gBAACI,OAAM;gBAASH,MAAMA;gBAAM,cAAYF;;;;;;YAC/CC,YAAY,yBAAW,6LAAC;0BAAMD;;;;;qCAAgB,6LAAC;0BAAGA;;;;;;;;;;;;IAGvD,IAAIC,YAAY,QAAQ;QACtB,qBAAO,6LAAC;YAAKG,WAAU;sBAA2BD;;;;;;IACpD;IACA,OAAOA;AACT;KAlBgBL"}}, + {"offset": {"line": 69, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/common/app-download.tsx"],"sourcesContent":["\"use client\";\n\nimport { Component, createContext, useContext, type ErrorInfo, type ReactNode } from \"react\";\nimport { QRCodeSVG } from \"qrcode.react\";\n\nconst AppAddrContext = createContext(\"\");\n\n/** 公共配置 `config.appAddr`,供下载入口和二维码共用。 */\nexport function AppAddrProvider({ appAddr, children }: { appAddr: string; children: ReactNode }) {\n return {children};\n}\n\nexport function useAppAddr() {\n return useContext(AppAddrContext);\n}\n\nexport function AppDownloadLink({\n className,\n id,\n children,\n label,\n title,\n}: {\n className?: string;\n id?: string;\n children: ReactNode;\n label?: string;\n title?: string;\n}) {\n const appAddr = useAppAddr();\n if (!appAddr) {\n return (\n \n );\n }\n return (\n \n {children}\n \n );\n}\n\nfunction QrFallback({ size }: { size: number }) {\n return (\n \n );\n}\n\n/** 编码失败时回退到静态图,避免整页被 RangeError 打挂。 */\nclass QrBoundary extends Component<{ size: number; children: ReactNode }, { failed: boolean }> {\n state = { failed: false };\n\n static getDerivedStateFromError() {\n return { failed: true };\n }\n\n componentDidCatch(error: Error, info: ErrorInfo) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"[DownloadQr]\", error.message, info.componentStack);\n }\n }\n\n render() {\n if (this.state.failed) return ;\n return this.props.children;\n }\n}\n\n/** 用 `config.appAddr` 生成下载二维码;可点击跳转下载地址。 */\nexport function DownloadQr({ size = 156 }: { size?: number }) {\n const appAddr = useAppAddr();\n if (!appAddr) return null;\n const qr = (\n \n \n \n );\n return (\n \n {qr}\n \n );\n}\n\n/** 顶栏下载入口:点击跳转下载链接,hover 显示二维码(二维码也可点)。 */\nexport function HeaderAppDownload({ siteName = \"\" }: { siteName?: string }) {\n const appAddr = useAppAddr();\n if (!appAddr) return null;\n const name = siteName.trim() || \"App\";\n return (\n
\n \n 下载 App\n \n
\n
\n {name}\n
\n
\n \n
\n
\n

{`扫码下载安装「${name}」`}

\n
\n
\n
\n );\n}\n"],"names":["AppAddrContext","AppAddrProvider","param","appAddr","children","Provider","value","useAppAddr","AppDownloadLink","className","id","label","title","type","href","target","rel","QrFallback","size","src","alt","width","height","QrBoundary","getDerivedStateFromError","failed","componentDidCatch","error","info","console","warn","message","componentStack","render","state","props","DownloadQr","qr","level","boostLevel","marginSize","bgColor","fgColor","HeaderAppDownload","siteName","name","trim"],"mappings":"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"}}, + {"offset": {"line": 340, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/common/decrypted-image.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState, type ImgHTMLAttributes } from \"react\";\nimport { IMG_PLACEHOLDER, resolveImageSrc } from \"@/lib/image/decrypt\";\n\ntype DecryptedImageProps = Omit, \"src\"> & {\n src?: string | null;\n fallback?: string;\n};\n\nexport function DecryptedImage({ src, fallback = IMG_PLACEHOLDER, alt = \"\", ...props }: DecryptedImageProps) {\n const [resolved, setResolved] = useState(fallback);\n\n useEffect(() => {\n let cancelled = false;\n void resolveImageSrc(src, fallback).then((next) => {\n if (!cancelled) setResolved(next);\n });\n return () => {\n cancelled = true;\n };\n }, [src, fallback]);\n\n return {alt};\n}\n"],"names":["DecryptedImage","param","src","fallback","alt","props","resolved","setResolved","cancelled","then","next"],"mappings":";;;;;AAEA;AACA;;;AAHA;;;AAUO,SAASA,eAAeC,KAA4E;QAA5EA,EAAEC,GAAG,EAAEC,WAAW,oJAAe,EAAEC,MAAM,EAAE,EAAE,GAAGC,OAA4B,GAA5EJ;;IAC7B,MAAM,CAACK,UAAUC,YAAY,GAAG,IAAA,yKAAQ,EAACJ;IAEzC,IAAA,0KAAS;oCAAC;YACR,IAAIK,YAAY;YAChB,KAAK,IAAA,oJAAe,EAACN,KAAKC,UAAUM,IAAI;4CAAC,CAACC;oBACxC,IAAI,CAACF,WAAWD,YAAYG;gBAC9B;;YACA;4CAAO;oBACLF,YAAY;gBACd;;QACF;mCAAG;QAACN;QAAKC;KAAS;IAElB,qBAAO,6LAAC;QAAK,GAAGE,KAAK;QAAED,KAAKA;QAAKF,KAAKI;;;;;;AACxC;GAdgBN;KAAAA"}}, + {"offset": {"line": 395, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/common/startup-ad-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { DecryptedImage } from \"@/components/common/decrypted-image\";\nimport { StartupAgeDialog } from \"@/components/common/startup-age-dialog\";\nimport { useStartupAds } from \"@/components/common/startup-dialog-ads\";\nimport { CARD_PLACEHOLDER } from \"@/lib/image/decrypt\";\nimport type { AdvitiseInfo } from \"@/lib/api/types\";\n\nconst STARTUP_DAY_KEY = \"startup-popups-day\";\n\nfunction todayStamp() {\n const now = new Date();\n const month = String(now.getMonth() + 1).padStart(2, \"0\");\n const day = String(now.getDate()).padStart(2, \"0\");\n return `${now.getFullYear()}-${month}-${day}`;\n}\n\nfunction startupSeenToday() {\n try {\n return localStorage.getItem(STARTUP_DAY_KEY) === todayStamp();\n } catch {\n return false;\n }\n}\n\nfunction markStartupSeenToday() {\n try {\n localStorage.setItem(STARTUP_DAY_KEY, todayStamp());\n } catch {\n // 无法写入时按未展示处理,下次进入仍会弹出。\n }\n}\n\n/** 同一次页面加载只决定一次。开发环境 effect 会重跑,不能靠第二次读到的日期跳过。 */\nlet startupDailyDecision: \"show\" | \"skip\" | null = null;\n\nfunction decideStartupDaily() {\n if (startupDailyDecision) return startupDailyDecision;\n startupDailyDecision = startupSeenToday() ? \"skip\" : \"show\";\n if (startupDailyDecision === \"show\") markStartupSeenToday();\n return startupDailyDecision;\n}\n\nfunction httpUrl(link: string | undefined) {\n const value = link?.trim();\n if (!value) return \"\";\n try {\n const url = new URL(value);\n if (url.protocol === \"http:\" || url.protocol === \"https:\") return url.toString();\n } catch {\n return \"\";\n }\n return \"\";\n}\n\nfunction StartupAdDialog({ ads, open, onFinished }: { ads: AdvitiseInfo[]; open: boolean; onFinished: () => void }) {\n const dialogRef = useRef(null);\n const [index, setIndex] = useState(0);\n const ad = ads[index];\n\n useEffect(() => {\n const dialog = dialogRef.current;\n if (!open || !dialog || dialog.open) return;\n dialog.showModal();\n }, [open]);\n\n function dismiss() {\n if (index < ads.length - 1) {\n setIndex((value) => value + 1);\n return;\n }\n dialogRef.current?.close();\n }\n\n if (!ad) return null;\n\n const href = httpUrl(ad.link);\n const image = (\n \n );\n\n return (\n {\n event.preventDefault();\n dismiss();\n }}\n onKeyDown={(event) => {\n if (event.key === \"Tab\") event.currentTarget.classList.add(\"startup-keyboard-focus\");\n }}\n onPointerDown={(event) => event.currentTarget.classList.remove(\"startup-keyboard-focus\")}\n onClose={(event) => {\n event.currentTarget.classList.remove(\"startup-keyboard-focus\");\n onFinished();\n }}\n >\n {href ? (\n \n {image}\n \n ) : (\n {image}\n )}\n \n \n );\n}\n\nfunction StartupGridDialog({ items, open }: { items: AdvitiseInfo[]; open: boolean }) {\n const dialogRef = useRef(null);\n\n useEffect(() => {\n const dialog = dialogRef.current;\n if (!open || !dialog || dialog.open) return;\n dialog.showModal();\n }, [open]);\n\n if (!items.length) return null;\n\n return (\n {\n if (event.target instanceof Element && event.target.closest(\".startup-promotion\")) dialogRef.current?.close();\n }}\n onKeyDown={(event) => {\n if (event.key === \"Tab\") event.currentTarget.classList.add(\"startup-keyboard-focus\");\n }}\n onPointerDown={(event) => event.currentTarget.classList.remove(\"startup-keyboard-focus\")}\n onClose={(event) => event.currentTarget.classList.remove(\"startup-keyboard-focus\")}\n >\n
\n {items.map((item, index) => {\n const href = httpUrl(item.link);\n const title = item.title?.trim() || \"推荐\";\n const inner = (\n <>\n \n {title}\n \n );\n if (!href) {\n return (\n \n {inner}\n \n );\n }\n return (\n \n {inner}\n \n );\n })}\n
\n \n \n );\n}\n\n/** 年龄确认后先播 dialogList,全部关闭后再弹出 nineGridList。三个弹窗同一天只展示一次。 */\nexport function StartupPopups() {\n const ads = useStartupAds();\n const acceptedRef = useRef(false);\n const [daily, setDaily] = useState<\"pending\" | \"show\" | \"skip\">(\"pending\");\n const [phase, setPhase] = useState<\"idle\" | \"ad\" | \"grid\" | \"done\">(\"idle\");\n\n useEffect(() => {\n if (decideStartupDaily() === \"skip\") {\n setDaily(\"skip\");\n setPhase(\"done\");\n return;\n }\n setDaily(\"show\");\n }, []);\n\n const reveal = useCallback(() => {\n if (!acceptedRef.current || !ads || phase !== \"idle\") return;\n if (ads.dialogList.length) setPhase(\"ad\");\n else if (ads.nineGridList.length) setPhase(\"grid\");\n else setPhase(\"done\");\n }, [ads, phase]);\n\n useEffect(() => {\n reveal();\n }, [reveal]);\n\n function finishAd() {\n setPhase(ads?.nineGridList.length ? \"grid\" : \"done\");\n }\n\n return (\n <>\n {daily === \"show\" ? (\n {\n acceptedRef.current = true;\n reveal();\n }}\n />\n ) : null}\n {ads?.dialogList.length ? : null}\n {ads?.nineGridList.length ? : null}\n \n );\n}\n"],"names":["STARTUP_DAY_KEY","todayStamp","now","Date","month","String","getMonth","padStart","day","getDate","getFullYear","startupSeenToday","localStorage","getItem","markStartupSeenToday","setItem","startupDailyDecision","decideStartupDaily","httpUrl","link","value","trim","url","URL","protocol","toString","StartupAdDialog","param","ads","open","onFinished","_ad_title","dialogRef","index","setIndex","ad","dialog","current","showModal","dismiss","_dialogRef_current","length","close","href","image","className","src","images","alt","title","width","height","id","ref","onCancel","event","preventDefault","onKeyDown","key","currentTarget","classList","add","onPointerDown","remove","onClose","target","rel","type","onClick","StartupGridDialog","items","Element","closest","map","item","_item_title","inner","fallback","StartupPopups","acceptedRef","daily","setDaily","phase","setPhase","reveal","dialogList","nineGridList","finishAd","active","onAccepted"],"mappings":"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"}}, + {"offset": {"line": 766, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/common/startup-ad-source.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect } from \"react\";\nimport type { AdvitiseInfo } from \"@/lib/api/types\";\nimport { publishStartupAds } from \"@/components/common/startup-dialog-ads\";\n\n/** 把服务端配置里的启动弹窗广告交给客户端弹窗。 */\nexport function StartupAdSource({\n dialogList,\n nineGridList,\n}: {\n dialogList?: AdvitiseInfo[] | null;\n nineGridList?: AdvitiseInfo[] | null;\n}) {\n useEffect(() => {\n publishStartupAds(dialogList, nineGridList);\n }, [dialogList, nineGridList]);\n return null;\n}\n"],"names":["StartupAdSource","param","dialogList","nineGridList"],"mappings":";;;;AAEA;AAEA;;AAJA;;;AAOO,SAASA,gBAAgBC,KAM/B;QAN+BA,EAC9BC,UAAU,EACVC,YAAY,EAIb,GAN+BF;;IAO9B,IAAA,0KAAS;qCAAC;YACR,IAAA,+KAAiB,EAACC,YAAYC;QAChC;oCAAG;QAACD;QAAYC;KAAa;IAC7B,OAAO;AACT;GAXgBH;KAAAA"}}, + {"offset": {"line": 800, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/common/startup-age-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\n\n/** 当天首次进入时弹出。确认后关闭;离开或关闭都离开站点。 */\nexport function StartupAgeDialog({ active, onAccepted }: { active: boolean; onAccepted?: () => void }) {\n const dialogRef = useRef(null);\n const acceptedRef = useRef(false);\n const [mobile, setMobile] = useState(false);\n\n useEffect(() => {\n const dialog = dialogRef.current;\n if (!active || !dialog || dialog.open) return;\n dialog.showModal();\n }, [active]);\n\n useEffect(() => {\n const query = window.matchMedia(\"(max-width:760px)\");\n const sync = () => setMobile(query.matches);\n sync();\n query.addEventListener(\"change\", sync);\n return () => query.removeEventListener(\"change\", sync);\n }, []);\n\n function confirmAge() {\n acceptedRef.current = true;\n dialogRef.current?.close();\n }\n\n function leaveSite() {\n window.location.replace(\"about:blank\");\n }\n\n function keepOpenUnlessAccepted() {\n const dialog = dialogRef.current;\n if (!dialog) return;\n dialog.classList.remove(\"startup-keyboard-focus\");\n if (!acceptedRef.current && !dialog.open) dialog.showModal();\n else if (acceptedRef.current) onAccepted?.();\n }\n\n return (\n event.preventDefault()}\n onClose={keepOpenUnlessAccepted}\n onKeyDown={(event) => {\n if (event.key === \"Tab\") event.currentTarget.classList.add(\"startup-keyboard-focus\");\n }}\n onPointerDown={(event) => event.currentTarget.classList.remove(\"startup-keyboard-focus\")}\n >\n
\n
\n \"18岁以上\"\n \"18岁以上\"\n
\n
\n
\n

本网站仅限成年人访问

\n
\n

本网站包含仅限18岁及以上成年人浏览的内容。若您未满18岁,或所在地法律不允许您浏览此类内容,请立即离开。

\n

继续进入即表示您确认已年满18岁,并达到所在地的法定成年年龄。

\n
\n
\n
\n

这是个成人网站

\n

\n 本网站包含有年龄限制的内容,包括裸体和露骨色情素材的内容。 点击继续即表示您确认您已年满 18 岁,或在您访问本网站时所在的司法管辖区已是成年人\n

\n
\n
\n \n \n
\n
\n
\n \n \n );\n}\n"],"names":["StartupAgeDialog","param","active","onAccepted","dialogRef","acceptedRef","mobile","setMobile","dialog","current","open","showModal","query","window","matchMedia","sync","matches","addEventListener","removeEventListener","confirmAge","_dialogRef_current","close","leaveSite","location","replace","keepOpenUnlessAccepted","classList","remove","id","ref","className","onCancel","event","preventDefault","onClose","onKeyDown","key","currentTarget","add","onPointerDown","src","width","height","alt","type","autoFocus","onClick"],"mappings":"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"}}, + {"offset": {"line": 1048, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/common/startup-dialog-ads.ts"],"sourcesContent":["\"use client\";\n\nimport { useSyncExternalStore } from \"react\";\nimport type { AdvitiseInfo } from \"@/lib/api/types\";\n\nexport type StartupAds = {\n dialogList: AdvitiseInfo[];\n nineGridList: AdvitiseInfo[];\n};\n\nlet startupAds: StartupAds | undefined;\nconst listeners = new Set<() => void>();\n\nfunction withImage(items: AdvitiseInfo[] | null | undefined) {\n return (items || []).filter((item) => item?.images?.trim());\n}\n\n/** 根壳拿到配置后写入。同一轮页面只采纳第一次结果,避免路由刷新把弹窗序列重置。 */\nexport function publishStartupAds(dialogList: AdvitiseInfo[] | null | undefined, nineGridList: AdvitiseInfo[] | null | undefined) {\n if (startupAds !== undefined) return;\n startupAds = { dialogList: withImage(dialogList), nineGridList: withImage(nineGridList) };\n listeners.forEach((listener) => listener());\n}\n\nexport function useStartupAds() {\n return useSyncExternalStore(\n (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n () => startupAds,\n () => undefined,\n );\n}\n"],"names":["startupAds","listeners","Set","withImage","items","filter","item","_item_images","images","trim","publishStartupAds","dialogList","nineGridList","undefined","forEach","listener","useStartupAds","add","delete"],"mappings":";;;;;;AAEA;;AAFA;;AAUA,IAAIA;AACJ,MAAMC,YAAY,IAAIC;AAEtB,SAASC,UAAUC,KAAwC;IACzD,OAAO,CAACA,SAAS,EAAE,EAAEC,MAAM,CAAC,CAACC;YAASC;eAAAA,iBAAAA,4BAAAA,eAAAA,KAAMC,MAAM,cAAZD,mCAAAA,aAAcE,IAAI;;AAC1D;AAGO,SAASC,kBAAkBC,UAA6C,EAAEC,YAA+C;IAC9H,IAAIZ,eAAea,WAAW;IAC9Bb,aAAa;QAAEW,YAAYR,UAAUQ;QAAaC,cAAcT,UAAUS;IAAc;IACxFX,UAAUa,OAAO,CAAC,CAACC,WAAaA;AAClC;AAEO,SAASC;;IACd,OAAO,IAAA,qLAAoB;8CACzB,CAACD;YACCd,UAAUgB,GAAG,CAACF;YACd;sDAAO,IAAMd,UAAUiB,MAAM,CAACH;;QAChC;;8CACA,IAAMf;;8CACN,IAAMa;;AAEV;GATgBG;;QACP,qLAAoB"}}, + {"offset": {"line": 1101, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/common/toast-host.tsx"],"sourcesContent":["\"use client\";\n\nimport { Toast } from \"@heroui/react\";\n\n/** 全局 HeroUI Toast 宿主:顶部居中,短时提示为主。 */\nexport function ToastHost() {\n return ;\n}\n"],"names":["ToastHost","Provider","placement","width","maxVisibleToasts"],"mappings":";;;;;AAEA;AAFA;;;AAKO,SAASA;IACd,qBAAO,6LAAC,qMAAK,CAACC,QAAQ;QAACC,WAAU;QAAMC,OAAO;QAAKC,kBAAkB;;;;;;AACvE;KAFgBJ"}}, + {"offset": {"line": 1131, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/common/toast.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect } from \"react\";\nimport { toast } from \"@heroui/react\";\n\n/** 把 `app-toast` 事件转到 HeroUI toast,宿主是 ToastHost。 */\nexport function ToastBridge() {\n useEffect(() => {\n const onNotify = (event: Event) => {\n const detail = (event as CustomEvent).detail;\n const message = typeof detail === \"string\" ? detail.trim() : \"\";\n if (!message) return;\n toast(message);\n };\n window.addEventListener(\"app-toast\", onNotify);\n return () => window.removeEventListener(\"app-toast\", onNotify);\n }, []);\n\n return null;\n}\n"],"names":["ToastBridge","onNotify","event","detail","message","trim","window","addEventListener","removeEventListener"],"mappings":";;;;AAEA;AACA;;AAHA;;;AAMO,SAASA;;IACd,IAAA,0KAAS;iCAAC;YACR,MAAMC;kDAAW,CAACC;oBAChB,MAAMC,SAAS,AAACD,MAA8BC,MAAM;oBACpD,MAAMC,UAAU,OAAOD,WAAW,WAAWA,OAAOE,IAAI,KAAK;oBAC7D,IAAI,CAACD,SAAS;oBACd,IAAA,8LAAK,EAACA;gBACR;;YACAE,OAAOC,gBAAgB,CAAC,aAAaN;YACrC;yCAAO,IAAMK,OAAOE,mBAAmB,CAAC,aAAaP;;QACvD;gCAAG,EAAE;IAEL,OAAO;AACT;GAbgBD;KAAAA"}}, + {"offset": {"line": 1172, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/drama/drama-badge.tsx"],"sourcesContent":["import type { BadgeLabel, BadgeType, Drama } from \"@/lib/catalog/types\";\n\nexport type DramaBadgeVariant = \"corner\" | \"series\";\n\ntype DramaBadgeSource = Pick | { badge: BadgeLabel | string; badgeType: BadgeType };\n\nexport function DramaBadge({\n badge,\n badgeType,\n drama,\n variant = \"corner\",\n className,\n}: {\n badge?: BadgeLabel | string;\n badgeType?: BadgeType;\n drama?: DramaBadgeSource;\n /** corner = 列表封面右上角;series = 详情/播放页标签 */\n variant?: DramaBadgeVariant;\n className?: string;\n}) {\n const label = badge ?? drama?.badge;\n const type = badgeType ?? drama?.badgeType;\n if (!label || !type) return null;\n\n const base = variant === \"series\" ? \"series-badge\" : \"cover-corner-badge\";\n const classes = className ? `${base} ${base}--${type} ${className}` : `${base} ${base}--${type}`;\n\n return {label};\n}\n"],"names":["DramaBadge","param","badge","badgeType","drama","variant","className","label","type","base","classes"],"mappings":";;;;;;AAMO,SAASA,WAAWC,KAa1B;QAb0BA,EACzBC,KAAK,EACLC,SAAS,EACTC,KAAK,EACLC,UAAU,QAAQ,EAClBC,SAAS,EAQV,GAb0BL;IAczB,MAAMM,QAAQL,kBAAAA,mBAAAA,QAASE,kBAAAA,4BAAAA,MAAOF,KAAK;IACnC,MAAMM,OAAOL,sBAAAA,uBAAAA,YAAaC,kBAAAA,4BAAAA,MAAOD,SAAS;IAC1C,IAAI,CAACI,SAAS,CAACC,MAAM,OAAO;IAE5B,MAAMC,OAAOJ,YAAY,WAAW,iBAAiB;IACrD,MAAMK,UAAUJ,YAAY,GAAGG,KAAK,CAAC,EAAEA,KAAK,EAAE,EAAED,KAAK,CAAC,EAAEF,WAAW,GAAG,GAAGG,KAAK,CAAC,EAAEA,KAAK,EAAE,EAAED,MAAM;IAEhG,qBAAO,6LAAC;QAAKF,WAAWI;kBAAUH;;;;;;AACpC;KAtBgBP"}}, + {"offset": {"line": 1204, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/drama/poster.tsx"],"sourcesContent":["import { DecryptedImage } from \"@/components/common/decrypted-image\";\n\ninterface PosterProps {\n width: number;\n height: number;\n className?: string;\n alt?: string;\n src?: string;\n}\n\nexport function Poster({ width, height, className = \"poster-source\", alt = \"\", src }: PosterProps) {\n return ;\n}\n"],"names":["Poster","param","width","height","className","alt","src"],"mappings":";;;;;AAAA;;;AAUO,SAASA,OAAOC,KAA0E;QAA1EA,EAAEC,KAAK,EAAEC,MAAM,EAAEC,YAAY,eAAe,EAAEC,MAAM,EAAE,EAAEC,GAAG,EAAe,GAA1EL;IACrB,qBAAO,6LAAC,uKAAc;QAACG,WAAWA;QAAWE,KAAKA;QAAKJ,OAAOA;QAAOC,QAAQA;QAAQE,KAAKA;;;;;;AAC5F;KAFgBL"}}, + {"offset": {"line": 1236, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/category-link.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { usePathname } from \"next/navigation\";\nimport { useEffect, useState, type ReactNode } from \"react\";\n\nimport { isExternalHref, isTranslationCurrent, navPageForHref, translationHref } from \"@/lib/translation-nav\";\n\nexport function CategoryLink({\n urlValue,\n name,\n variant,\n children,\n}: {\n urlValue?: string;\n name: string;\n variant: \"header\" | \"drawer\" | \"sidebar\";\n children?: ReactNode;\n}) {\n const pathname = usePathname();\n const [currentPath, setCurrentPath] = useState(\"\");\n useEffect(() => {\n setCurrentPath(pathname);\n }, [pathname]);\n\n const href = translationHref(urlValue);\n const current = Boolean(currentPath) && isTranslationCurrent(currentPath, urlValue);\n const page = navPageForHref(href);\n const content =\n variant === \"header\" ? (\n name\n ) : variant === \"sidebar\" ? (\n <>\n {children}\n {name}\n \n ) : (\n <>\n {children}\n {name}\n \n );\n const sidebarProps =\n variant === \"sidebar\"\n ? {\n title: name,\n \"aria-label\": name,\n className: current ? \"active\" : undefined,\n ...(page ? { \"data-page\": page, \"data-mobile-route\": page } : {}),\n }\n : {};\n\n if (isExternalHref(href)) {\n return (\n \n {content}\n \n );\n }\n\n return (\n \n {content}\n \n );\n}\n"],"names":["CategoryLink","param","urlValue","name","variant","children","pathname","currentPath","setCurrentPath","href","current","Boolean","page","content","className","sidebarProps","title","undefined","target","rel"],"mappings":";;;;;AAEA;AACA;AACA;AAEA;;;AANA;;;;;AAQO,SAASA,aAAaC,KAU5B;QAV4BA,EAC3BC,QAAQ,EACRC,IAAI,EACJC,OAAO,EACPC,QAAQ,EAMT,GAV4BJ;;IAW3B,MAAMK,WAAW,IAAA,oJAAW;IAC5B,MAAM,CAACC,aAAaC,eAAe,GAAG,IAAA,yKAAQ,EAAC;IAC/C,IAAA,0KAAS;kCAAC;YACRA,eAAeF;QACjB;iCAAG;QAACA;KAAS;IAEb,MAAMG,OAAO,IAAA,sJAAe,EAACP;IAC7B,MAAMQ,UAAUC,QAAQJ,gBAAgB,IAAA,2JAAoB,EAACA,aAAaL;IAC1E,MAAMU,OAAO,IAAA,qJAAc,EAACH;IAC5B,MAAMI,UACJT,YAAY,WACVD,OACEC,YAAY,0BACd;;YACGC;0BACD,6LAAC;gBAAKS,WAAU;0BAAkBX;;;;;;;;;;;6BAGpC;;YACGE;0BACD,6LAAC;0BAAMF;;;;;;;;;;;;IAGb,MAAMY,eACJX,YAAY,YACR;QACEY,OAAOb;QACP,cAAcA;QACdW,WAAWJ,UAAU,WAAWO;QAChC,GAAIL,OAAO;YAAE,aAAaA;YAAM,qBAAqBA;QAAK,IAAI,CAAC,CAAC;IAClE,IACA,CAAC;IAEP,IAAI,IAAA,qJAAc,EAACH,OAAO;QACxB,qBACE,6LAAC;YAAEA,MAAMA;YAAMS,QAAO;YAASC,KAAI;YAAc,GAAGJ,YAAY;sBAC7DF;;;;;;IAGP;IAEA,qBACE,6LAAC,0KAAI;QAACJ,MAAMA;QAAM,gBAAcC,UAAU,SAASO;QAAY,GAAGF,YAAY;kBAC3EF;;;;;;AAGP;GAzDgBb;;QAWG,oJAAW;;;KAXdA"}}, + {"offset": {"line": 1347, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/entry-route-chrome.tsx"],"sourcesContent":["\"use client\";\n\nimport { usePathname } from \"next/navigation\";\nimport { useLayoutEffect } from \"react\";\n\nexport function EntryRouteChrome() {\n const pathname = usePathname();\n\n useLayoutEffect(() => {\n if (pathname === \"/nav\") return;\n document.querySelectorAll(\"#entry-navigation\").forEach((node) => node.remove());\n }, [pathname]);\n\n return null;\n}\n"],"names":["EntryRouteChrome","pathname","document","querySelectorAll","forEach","node","remove"],"mappings":";;;;AAEA;AACA;;AAHA;;;AAKO,SAASA;;IACd,MAAMC,WAAW,IAAA,oJAAW;IAE5B,IAAA,gLAAe;4CAAC;YACd,IAAIA,aAAa,QAAQ;YACzBC,SAASC,gBAAgB,CAAC,qBAAqBC,OAAO;oDAAC,CAACC,OAASA,KAAKC,MAAM;;QAC9E;2CAAG;QAACL;KAAS;IAEb,OAAO;AACT;GATgBD;;QACG,oJAAW;;;KADdA"}}, + {"offset": {"line": 1387, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/header-scroll.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect } from \"react\";\n\nexport function HeaderScroll() {\n useEffect(() => {\n const header = document.getElementById(\"global-site-header\");\n if (!header) return;\n let scheduled = false;\n const update = () => {\n const scrolled = window.scrollY > 8;\n header.classList.toggle(\"is-scrolled\", scrolled);\n header.classList.toggle(\"page-header-scrolled\", scrolled);\n scheduled = false;\n };\n const onScroll = () => {\n if (scheduled) return;\n scheduled = true;\n requestAnimationFrame(update);\n };\n update();\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n return () => window.removeEventListener(\"scroll\", onScroll);\n }, []);\n return null;\n}\n"],"names":["HeaderScroll","header","document","getElementById","scheduled","update","scrolled","window","scrollY","classList","toggle","onScroll","requestAnimationFrame","addEventListener","passive","removeEventListener"],"mappings":";;;;AAEA;;AAFA;;AAIO,SAASA;;IACd,IAAA,0KAAS;kCAAC;YACR,MAAMC,SAASC,SAASC,cAAc,CAAC;YACvC,IAAI,CAACF,QAAQ;YACb,IAAIG,YAAY;YAChB,MAAMC;iDAAS;oBACb,MAAMC,WAAWC,OAAOC,OAAO,GAAG;oBAClCP,OAAOQ,SAAS,CAACC,MAAM,CAAC,eAAeJ;oBACvCL,OAAOQ,SAAS,CAACC,MAAM,CAAC,wBAAwBJ;oBAChDF,YAAY;gBACd;;YACA,MAAMO;mDAAW;oBACf,IAAIP,WAAW;oBACfA,YAAY;oBACZQ,sBAAsBP;gBACxB;;YACAA;YACAE,OAAOM,gBAAgB,CAAC,UAAUF,UAAU;gBAAEG,SAAS;YAAK;YAC5D;0CAAO,IAAMP,OAAOQ,mBAAmB,CAAC,UAAUJ;;QACpD;iCAAG,EAAE;IACL,OAAO;AACT;GArBgBX;KAAAA"}}, + {"offset": {"line": 1439, "column": 0}, "map": {"version":3,"sources":["file:///Users/mac/weiming/%E9%BB%84%E6%9E%9C%E7%9F%AD%E5%89%A7/web_hgdjb_h5/src/components/site/header-search.tsx"],"sourcesContent":["\"use client\";\n\nimport Link from \"next/link\";\nimport { usePathname, useRouter, useSearchParams } from \"next/navigation\";\nimport {\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type FormEvent,\n type KeyboardEvent,\n} from \"react\";\n\nimport { ListLoading } from \"@/components/common/ListLoading\";\nimport { DramaBadge } from \"@/components/drama/drama-badge\";\nimport { Poster } from \"@/components/drama/poster\";\nimport { fetchPlayletHotLike, fetchPlayletSearchSuggest } from \"@/lib/api/playlet\";\nimport type { PlayletCommonData, PlayletHotSearchItem } from \"@/lib/api/types\";\nimport { playletToDrama } from \"@/lib/playlet/card\";\nimport { formatHeatValue, playletHref } from \"@/lib/playlet-display\";\nimport type { Drama } from \"@/lib/catalog/types\";\nimport { routes } from \"@/lib/site/routes\";\n\nfunction termFromPathname(pathname: string) {\n if (pathname === \"/search\") return \"\";\n if (!pathname.startsWith(\"/search/\")) return \"\";\n const segment = pathname.slice(\"/search/\".length).split(\"/\")[0] || \"\";\n if (!segment) return \"\";\n try {\n return decodeURIComponent(segment);\n } catch {\n return segment;\n }\n}\n\nconst HISTORY_KEY = \"shuguo-search-history\";\nconst HISTORY_LIMIT = 8;\nconst PICKS_PAGE = 3;\n/** 源文件热搜榜 / 搜索建议最多展示 6 条。 */\nconst RANKING_LIMIT = 6;\nconst PANEL_MAX_WIDTH = 458;\nconst SUGGEST_DEBOUNCE_MS = 280;\n\nfunction formatSearchCount(count: number) {\n if (!Number.isFinite(count) || count <= 0) return \"\";\n if (count >= 10000) {\n const value = count / 10000;\n const text = value >= 10 ? String(Math.round(value)) : value.toFixed(1).replace(/\\.0$/, \"\");\n return `${text}万 热度`;\n }\n return `${count} 热度`;\n}\n\nfunction highlightKeyword(text: string, keyword: string) {\n const source = text || \"\";\n const needle = keyword.trim();\n if (!needle) return source;\n const index = source.toLowerCase().indexOf(needle.toLowerCase());\n if (index < 0) return source;\n return (\n <>\n {source.slice(0, index)}\n {source.slice(index, index + needle.length)}\n {source.slice(index + needle.length)}\n \n );\n}\n\nfunction readHistory(): string[] {\n try {\n const raw = localStorage.getItem(HISTORY_KEY);\n if (!raw) return [];\n const parsed = JSON.parse(raw) as unknown;\n if (!Array.isArray(parsed)) return [];\n return parsed\n .filter((item): item is string => typeof item === \"string\" && item.trim().length > 0)\n .map((item) => item.slice(0, 100))\n .slice(0, HISTORY_LIMIT);\n } catch {\n return [];\n }\n}\n\nfunction writeHistory(items: string[]) {\n try {\n localStorage.setItem(HISTORY_KEY, JSON.stringify(items.slice(0, HISTORY_LIMIT)));\n } catch {\n /* ignore quota */\n }\n}\n\nfunction pushHistory(term: string, current: string[]) {\n const next = [term, ...current.filter((item) => item !== term)].slice(0, HISTORY_LIMIT);\n writeHistory(next);\n return next;\n}\n\nfunction pickSlice(pool: Drama[], offset: number) {\n if (!pool.length) return [];\n const start = ((offset % pool.length) + pool.length) % pool.length;\n return Array.from({ length: Math.min(PICKS_PAGE, pool.length) }, (_, index) => pool[(start + index) % pool.length]);\n}\n\nexport function HeaderSearch({ query = \"\" }: { query?: string }) {\n const router = useRouter();\n const pathname = usePathname() || \"\";\n const searchParams = useSearchParams();\n const panelId = useId();\n const rootRef = useRef(null);\n const panelRef = useRef(null);\n const inputRef = useRef(null);\n const pathTerm = termFromPathname(pathname);\n const syncedQuery = query || pathTerm || searchParams.get(\"q\") || \"\";\n const [open, setOpen] = useState(false);\n const [value, setValue] = useState(syncedQuery);\n const [history, setHistory] = useState([]);\n const [picksOffset, setPicksOffset] = useState(0);\n const [hotSearch, setHotSearch] = useState([]);\n const [hotState, setHotState] = useState<\"loading\" | \"ready\" | \"error\">(\"loading\");\n const [suggestList, setSuggestList] = useState([]);\n const [suggestState, setSuggestState] = useState<\"idle\" | \"loading\" | \"ready\" | \"error\">(\"idle\");\n const [pickPool, setPickPool] = useState([]);\n const [pickState, setPickState] = useState<\"loading\" | \"ready\">(\"loading\");\n\n const trimmed = value.trim();\n const rankTitle = trimmed ? \"搜索建议\" : \"热搜榜\";\n\n const picks = useMemo(() => pickSlice(pickPool, picksOffset), [pickPool, picksOffset]);\n\n useEffect(() => {\n let cancelled = false;\n fetchPlayletHotLike()\n .then((data) => {\n if (cancelled) return;\n setPickPool((data.guessLike || []).map(playletToDrama));\n setHotSearch((data.hotSearch || []).filter((item) => item?.keyword?.trim()));\n setHotState(\"ready\");\n })\n .catch(() => {\n if (cancelled) return;\n setPickPool([]);\n setHotSearch([]);\n setHotState(\"error\");\n })\n .finally(() => {\n if (!cancelled) setPickState(\"ready\");\n });\n return () => {\n cancelled = true;\n };\n }, []);\n\n useEffect(() => {\n if (!trimmed) {\n setSuggestList([]);\n setSuggestState(\"idle\");\n return;\n }\n let cancelled = false;\n setSuggestList([]);\n setSuggestState(\"loading\");\n const timer = window.setTimeout(() => {\n fetchPlayletSearchSuggest(trimmed)\n .then((data) => {\n if (cancelled) return;\n setSuggestList((data.list || []).filter((item) => item?.id));\n setSuggestState(\"ready\");\n })\n .catch(() => {\n if (cancelled) return;\n setSuggestList([]);\n setSuggestState(\"error\");\n });\n }, SUGGEST_DEBOUNCE_MS);\n return () => {\n cancelled = true;\n window.clearTimeout(timer);\n };\n }, [trimmed]);\n\n useEffect(() => {\n setHistory(readHistory());\n }, []);\n\n useEffect(() => {\n setValue(syncedQuery);\n }, [syncedQuery]);\n\n useLayoutEffect(() => {\n if (!open) return;\n const form = rootRef.current;\n const panel = panelRef.current;\n if (!form || !panel) return;\n\n function position() {\n if (window.matchMedia(\"(max-width:760px)\").matches) {\n panel!.style.width = \"\";\n panel!.style.maxHeight = \"\";\n panel!.style.setProperty(\"--search-panel-scale\", \"1\");\n return;\n }\n const rect = form!.getBoundingClientRect();\n const nextWidth = `${Math.min(PANEL_MAX_WIDTH, window.innerWidth - rect.left - 20)}px`;\n if (panel!.style.width !== nextWidth) panel!.style.width = nextWidth;\n panel!.style.maxHeight = \"none\";\n const available = Math.max(120, window.innerHeight - rect.bottom - 28);\n const nextScale = String(Math.min(1, available / Math.max(panel!.offsetHeight, 1)));\n if (panel!.style.getPropertyValue(\"--search-panel-scale\") !== nextScale) {\n panel!.style.setProperty(\"--search-panel-scale\", nextScale);\n }\n }\n\n position();\n const frame = requestAnimationFrame(position);\n const observer = new ResizeObserver(position);\n observer.observe(panel);\n window.addEventListener(\"resize\", position);\n return () => {\n cancelAnimationFrame(frame);\n observer.disconnect();\n window.removeEventListener(\"resize\", position);\n };\n }, [open, history, picks, hotSearch, hotState, suggestList, suggestState, rankTitle, pickState]);\n\n useEffect(() => {\n if (!open) return;\n\n function onPointerDown(event: MouseEvent) {\n if (!rootRef.current?.contains(event.target as Node)) setOpen(false);\n }\n function onKeyDown(event: globalThis.KeyboardEvent) {\n if (event.key === \"Escape\") {\n setOpen(false);\n inputRef.current?.blur();\n }\n }\n\n document.addEventListener(\"mousedown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"mousedown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [open]);\n\n function goSearch(term: string) {\n const next = term.trim();\n if (!next) {\n setOpen(true);\n inputRef.current?.focus();\n return;\n }\n setValue(next);\n setHistory((current) => pushHistory(next, current));\n setOpen(false);\n router.push(routes.searchPath(next));\n }\n\n function onSubmit(event: FormEvent) {\n event.preventDefault();\n goSearch(value);\n }\n\n function onInputKeyDown(event: KeyboardEvent) {\n if (event.key === \"Escape\") {\n event.preventDefault();\n setOpen(false);\n event.currentTarget.blur();\n }\n }\n\n return (\n \n {\n setValue(event.target.value);\n setOpen(true);\n }}\n onFocus={() => setOpen(true)}\n onClick={() => setOpen(true)}\n onKeyDown={onInputKeyDown}\n />\n \n\n